Pigeonhole formula
also: pigeonhole principle, php
The family of CNF instances asserting that n+1 pigeons fit in n holes with no two sharing. They are unsatisfiable, and every resolution proof of that is exponentially long, so they are the standard way to show that a solver's cleverness is heuristic rather than a change in worst-case behaviour.
Assert that pigeons occupy holes with no hole shared. With meaning pigeon is in hole :
The formula is unsatisfiable, and obviously so to a human, who counts. A resolution proof cannot count: Haken showed in 1985 that every resolution refutation of these formulas has size . Since CDCL produces resolution proofs, that is an unconditional lower bound on every CDCL solver, whatever its heuristics.
This is why the family is the standard sanity check on a solver's claims. Clause learning and activity heuristics change which instances are tractable; they do not change the worst case, and the pigeonhole formulas are the cleanest way to see the difference. Around the runtime is already measured in minutes.
see also
read more
- Implementing SAT in OCaml Part 1CNF, unit propagation, a full recursive DPLL solver, pure literal elimination, a DIMACS parser, and a command-line driver.
- Implementing SAT in OCaml Part 2From backtracking to CDCL: a trail, decision levels, first-UIP conflict analysis, clause learning, and non-chronological backjumping.