Reduction: SAT → 3SAT

Any clause with more than three literals

(a1a2ak)(a_1 \vee a_2 \vee \cdots \vee a_k)

Can be reduced to

(a1a2y1)(yˉ1a3y2)(yˉ2a4y3)(yˉk3ak1ak)(a_1 \vee a_2 \vee y_1)(\bar{y}_1 \vee a_3 \vee y_2) (\bar{y}_2 \vee a_4 \vee y_3) \cdots (\bar{y}_{k-3} \vee a_{k-1} \vee a_k)

Where the yiy_i are new variables

The conversion from II to II’ is polynomial time.

II’ is not logically equivalent to II, but it is equivalent in terms of satisfiability

{(a1a2ak)is satisfied}{there is a setting of the yi for which(a1a2y1)(yˉ1a3y2)(yˉk3ak1ak)are satisfied}\biggl\{\begin{split} (a_1 \vee a_2 \vee \cdots a_k) \\ \text{is satisfied} \end{split}\biggr\} \equiv \Biggl\{\begin{split} \text{there is a setting of the $y_i$ for which} \\ (a_1 \vee a_2 \vee y_1)(\bar{y}_1 \vee a_3 \vee y_2) \cdots (\bar{y}_{k-3} \vee a_{k-1} \vee a_k) \\ \text{are satisfied} \end{split}\Biggr\}

Suppose clauses on the right are satisfied, then at least one of the literals a1,,aka_1, \dots, a_k must be true - otherwise y1y_1 would have to be true, which would force y2y_2 to be true, and so on, eventually falsifying the last clause.

Conversely, if (a1a2ak)(a_1 \vee a_2 \vee \cdots \vee a_k) is satisfied, then some aia_i must be true. Set y1,,yi2y_1, \dots, y_{i-2} to true and set the rest to falsefalse. This made the clauses on the right to be satisfied.

We can further reduce 3SAT to a “constrained version” such that no variable appears in more than three clauses.

Suppose in the 3SAT instance variable xx appears in k>3k>3 clauses then replace its first appearance by x1x_1, its second appearance by x2x_2 and so on.

Also add the clauses

(xˉ1x2)(xˉ2x3)(xˉkx1)(\bar{x}_1 \vee x_2)(\bar{x}_2 \vee x_3) \cdots (\bar{x}_k \vee x_1)