In mathematical logic, proof compression by splitting is an algorithm that operates as a post-process on resolution proofs. It was proposed by Scott Cotton in his paper "Two Techniques for Minimizing Resolution Proof".
The Splitting algorithm is based on the following observation:
Given a proof of unsatisfiability π and a variable x , it is easy to re-arrange (split) the proof in a proof of x and a proof of ¬ x and the recombination of these two proofs (by an additional resolution step) may result in a proof smaller than the original.
Note that applying Splitting in a proof π using a variable x does not invalidates a latter application of the algorithm using a differente variable y . Actually, the method proposed by Cotton generates a sequence of proofs π 1 π 2 … , where each proof π i + 1 is the result of applying Splitting to π i . During the construction of the sequence, if a proof π j happens to be too large, π j + 1 is set to be the smallest proof in { π 1 , π 2 , … , π j } .
For achieving a better compression/time ratio, a heuristic for variable selection is desirable. For this purpose, Cotton defines the "additivity" of a resolution step (with antecedents p and n and resolvent r ):
add ( r ) := max ( | r | − max ( | p | , | n | ) , 0 ) Then, for each variable v , a score is calculated summing the additivity of all the resolution steps in π with pivot v together with the number of these resolution steps. Denoting each score calculated this way by a d d ( v , π ) , each variable is selected with a probability proportional to its score:
p ( v ) = add ( v , π i ) ∑ x add ( x , π i ) To split a proof of unsatisfiability π in a proof π x of x and a proof π ¬ x of ¬ x , Cotton proposes the following:
Let l denote a literal and p ⊕ x n denote the resolvent of clauses p and n where x ∈ p and ¬ x ∈ n . Then, define the map π l on nodes in the resolution dag of π :
π l ( c ) := { c , if c is an input π l ( p ) , if c = p ⊕ x n and ( l = x or x ∉ π l ( p ) ) π l ( n ) , if c = p ⊕ x n and ( l = ¬ x or ¬ x ∉ π l ( n ) ) π l ( p ) ⊕ x π l ( p ) , if x ∈ π l ( p ) and ¬ x ∈ π l ( n ) Also, let o be the empty clause in π . Then, π x and π ¬ x are obtained by computing π x ( o ) and π ¬ x ( o ) , respectively.