In
proof compression In proof theory, an area of mathematical logic, proof compression is the problem of algorithmically compressing formal proofs. The developed algorithms can be used to improve the proofs generated by automated theorem proving tools such as SAT solver ...
LowerUnits (LU) is an algorithm used to compress
propositional logic resolution proofs. The main idea of LowerUnits is to exploit the following fact:
[Fontaine, Pascal; Merz, Stephan; Woltzenlogel Paleo, Bruno. ''Compression of Propositional Resolution Proofs via Partial Regularization''. 23rd International Conference on Automated Deduction, 2011.]
Theorem: Let
be a potentially
redundant proof, and
be the redundant proof , redundant node. If
’s
clause
In language, a clause is a constituent that comprises a semantic predicand (expressed or not) and a semantic predicate. A typical clause consists of a subject and a syntactic predicate, the latter typically a verb phrase composed of a verb with ...
is a
unit clause,
then
is redundant.
The algorithm targets exactly the class of
global redundancy stemming from multiple resolutions with unit clauses. The algorithm takes its name from the fact that, when this rewriting is done and the resulting proof is displayed as a DAG (
directed acyclic graph), the unit node
appears lower (i.e., closer to the root) than it used to appear in the original proof.
A naive implementation exploiting theorem would require the proof to be traversed and fixed after each unit node is lowered. It is possible, however, to do better by first collecting and removing all the unit nodes in a single traversal, and afterwards fixing the whole proof in a single second traversal. Finally, the collected and fixed unit nodes have to be reinserted at the bottom of the proof.
Care must be taken with cases when a unit node
occurs above in the subproof that derives another unit node
. In such cases,
depends on
. Let
be the single literal of the unit clause of
. Then any occurrence of
in the subproof above
will not be cancelled by resolution inferences with
anymore. Consequently,
will be propagated downwards when the proof is fixed and will appear in the clause of
. Difficulties with such dependencies can be easily avoided if we reinsert the upper unit node
after reinserting the unit node
(i.e. after reinsertion,
must appear below
, to cancel the extra literal
from
’s clause). This can be ensured by collecting the unit nodes in a queue during a bottom-up traversal of the proof and reinserting them in the order they were queued.
The algorithm for fixing a proof containing many roots performs a top-down traversal of the proof, recomputing the resolvents and replacing broken nodes (e.g. nodes having deletedNodeMarker as one of their parents) by their surviving parents (e.g. the other parent, in case one parent was deletedNodeMarker).
When unit nodes are collected and removed from a proof of a clause
and the proof is fixed, the clause
in the root node of the new proof is not equal to
anymore, but contains (some of) the duals of the literals of the unit clauses that have been removed from the proof. The reinsertion of unit nodes at the bottom of the proof resolves
with the clauses of (some of) the collected unit nodes, in order to obtain a proof of
again.
Algorithm
General structure of the algorithm
Input: A proof
Output: A proof
with no global redundancy with unit redundant node
(unitsQueue,
) ← collectUnits(
);
← fix(
);
fixedUnitsQueue ← fix(unitsQueue);
← reinsertUnits(
, fixedUnitsQueue);
return
;
We collect the unit clauses as follow
Input: A proof
Output: A pair containing a queue of all unit nodes (unitsQueue) that are used more than once in
and a broken proof
←
;
traverse
bottom-up and foreach node
in
do
if
is unit and
has more than one child then
add
to unitsQueue;
remove
from
;
end
end
return (unitsQueue,
);
Then we reinsert the units
Input: A proof
(with a single root) and a queue
of root nodes
Output: A proof
←
;
while
do
← first element of
;
← tail of
;
if
is resolvable with root of
then
← resolvent of
with the root of
;
end
end
return
;
Notes
{{reflist
Automated theorem proving
Proof theory