11.7
Reduction idea
Given a CNF formula F = C1 ∧ … ∧ Cm where every clause Ci contains any number of literals, we replace each clause independently so that every new clause has exactly three literals while keeping the whole formula equi-satisfiable. Fresh auxiliary variables z1, z2, … are introduced on demand.
Per-clause transformation (k = number of literals in the clause)
1. k = 1, clause (ℓ1) :
Replace by (ℓ1 ∨ a ∨ ¬a) using one fresh variable a.
2. k = 2, clause (ℓ1 ∨ ℓ2) :
Replace by the pair
(ℓ1 ∨ ℓ2 ∨ a) ∧ (ℓ1 ∨ ℓ2 ∨ ¬a).
3. k = 3 : keep the clause unchanged.
4. k > 3, clause (ℓ1 ∨ … ∨ ℓk) :
Create k − 3 fresh variables z1, …, zk-3 and output the chain
(ℓ1 ∨ ℓ2 ∨ z1) ∧ (¬z1 ∨ ℓ3 ∨ z2) ∧ … ∧ (¬zk-4 ∨ ℓk-1 ∨ ℓk).
Intuition: zi passes the “responsibility” of satisfying the big clause down the chain; the construction is satisfiable iff at least one original literal is true.
Correctness sketch
• If the original clause is satisfied by some ℓj, set every auxiliary variable occurring before ℓj to false and those after it arbitrarily; every new 3-clause holds.
• Conversely, if all new 3-clauses hold, propagating their truth values shows that at least one ℓj must be true, hence the original clause is satisfied.
Applying the argument clause–by–clause proves F is satisfiable ⇔ its 3-CNF image is satisfiable.
Reference implementation (Python)
Hence, we obtain an efficient, size-preserving SAT → 3-SAT reduction that proves 3-SAT is NP-complete.
Back to
Chapter 11