From: RussellE on
A partitioning solver can produce shorter
refutations of the pigeonhole problem than
resolution based solvers.

Partitioning solvers repeatedly partition
SAT instances until a solution is found
or all partitions are exhausted.
A refutation consists of a list of
partitions containing contradictions.

Simple Partitioning Solver:

1) Choose the lowest order 2-clause
2) Push possible assignments on stack
3) Pop partition from stack
4) Propogate partition assignment
5) If Contradiction go to 3
6) go to 1

The process ends if a satisfying
assignment is found or all partitions
are removed from the stack.

This is a pigeonhole problem with
four pigeons and three holes:


Choose the lowest order 2-clause:

The partition of variables, [A,B], has three
possible satisfying assignments. Push these
partition assignments on the partition stack:

Partition Stack:
~a~d, ~ad, a~d

Pop an assignment from the stack and
propogate the assignment.

a~d ->

Choose lowest order 2-clause:

Push the three possible assignments on the stack.

Partition Stack:
~a~d, ~ad, a~b~d~e, a~b~de, ab~d~e

Pop ab~d~e from the stack.
ab~d~e -> () contradiction

Pop a~b~de from the stack.
a~b~de -> () contradiction

Pop a~b~d~e from the stack.
a~b~d~e -> () contradiction

Partition Stack:
~a~d, ~ad

~ad ->

Choose lowest order 2-clause:

Partition Stack:
~a~d, ~abcd, ~a~bcd, ~ab~cd

Once again, the last three assignments
on the stack lead to contradiction.
The only partition left is ~a~d which
also leads to contradiction when combined
with (b+c).

We now have a short refutation proof:


(~a+~d) a~d, (~b+~e) b~e -> ()
(~a+~d) a~d, (~b+~e) ~be -> ()
(~a+~d) a~d, (~b+~e) ~b~e -> ()
(~a+~d) ~ad, (b+c) bc -> ()
(~a+~d) ~ad, (b+c) ~bc -> ()
(~a+~d) ~ad, (b+c) b~c -> ()
(~a+~d) ~a~d, (b+c) bc -> ()
(~a+~d) ~a~d, (b+c) ~bc -> ()
(~a+~d) ~a~d, (b+c) b~c -> ()

The format of this refutation is a list of
assignments that lead to contradiction.
The size of the list is reduced by including
partition clauses. Partition clauses restrain
the number of possible assignments.

The validity of this refutation can be checked
in a polynomial number of steps.

- 2 many 2 count