Tseitin transformation

The Tseitin transformation lets us convert any Boolean formula to conjunctive normal form (CNF) by introducing new variables. Let’s say we have the following expression:

ϕ:=((x1∨x2)⇔x3)⇒(¬x4).\phi := \htmlClass{tseitin-expression-4}{\htmlClass{tseitin-expression-2}{(\htmlClass{tseitin-expression-1}{(x_1 \lor x_2)} \Leftrightarrow x_3)} \Rightarrow \htmlClass{tseitin-expression-3}{(\lnot x_4)}}.

Step 1. Associate new variables with the subexpressions.

y1⇔(x1∨x2)\htmlClass{tseitin-term tseitin-y1}{y_1} \Leftrightarrow (x_1 \lor x_2)
y2⇔(y1⇔x3)\htmlClass{tseitin-term tseitin-y2}{y_2} \Leftrightarrow (\htmlClass{tseitin-term tseitin-y1}{y_1} \Leftrightarrow x_3)
y3⇔¬x4\htmlClass{tseitin-term tseitin-y3}{y_3} \Leftrightarrow \lnot x_4
y4⇔(y2⇒y3).\htmlClass{tseitin-term tseitin-y4}{y_4} \Leftrightarrow (\htmlClass{tseitin-term tseitin-y2}{y_2} \Rightarrow \htmlClass{tseitin-term tseitin-y3}{y_3}).

Step 2. Restate the formula using these definitions.

C:=y4∧(y4⇔(y2⇒y3))∧(y3⇔¬x4)∧(y2⇔(y1⇔x3))∧(y1⇔(x1∨x2)).\begin{aligned} C := {} & \htmlClass{tseitin-term tseitin-y4}{y_4} \land (\htmlClass{tseitin-term tseitin-y4}{y_4} \Leftrightarrow (\htmlClass{tseitin-term tseitin-y2}{y_2} \Rightarrow \htmlClass{tseitin-term tseitin-y3}{y_3})) \\ &\land (\htmlClass{tseitin-term tseitin-y3}{y_3} \Leftrightarrow \lnot x_4) \\ &\land (\htmlClass{tseitin-term tseitin-y2}{y_2} \Leftrightarrow (\htmlClass{tseitin-term tseitin-y1}{y_1} \Leftrightarrow x_3)) \\ &\land (\htmlClass{tseitin-term tseitin-y1}{y_1} \Leftrightarrow (x_1 \lor x_2)). \end{aligned}

The rest is fairly straightforward: we rewrite each equivalence as CNF using its truth table.

If you’re interested in more details, check out this tutorial.