TAOCP 7.2.2.2 Exercise 10

Let $F=\{C_1,\dots,C_m\}$ be a consistent set of clauses over variables $x_1,\dots,x_n$.

Section 7.2.2.2: Satisfiability

Exercise 10. ▶ [21] [21] Show that every clause and consistent subset of clauses can be assigned distinct numbers ${1, 2, \ldots, n}$ to the vertices in such a way that each variable, $X_v$, occurs in the clause, or it has size $0$.

Verified: no
Solve time: 4m15s


Let $F={C_1,\dots,C_m}$ be a consistent set of clauses over variables $x_1,\dots,x_n$. Consistency means there exists a truth assignment $\tau$ satisfying every clause.

We must construct a numbering (a bijection) $f:{x_1,\dots,x_n}\to{1,\dots,n}$ such that every clause either has size $0$ or contains some variable $X_v$ (i.e., some variable of the system after numbering).

Step 1: Choose a hitting set of variables

For each clause $C_j$, choose a literal $\ell_j \in C_j$ that is true under $\tau$. This is possible because $\tau$ satisfies every clause.

Let $V_0\subseteq {x_1,\dots,x_n}$ be the set of variables that appear in the chosen literals:

$$ V_0={, x_v : \ell_j \text{ is } x_v \text{ or } \bar{x}_v \text{ for some } j ,}. $$

Then every clause $C_j$ contains at least one variable from $V_0$, because it contains the chosen literal $\ell_j$. Hence $V_0$ is a vertex set that intersects every nonempty clause.

Let $V_0={v_1,\dots,v_k}$.

Step 2: Construct a numbering

Define a bijection $f:{x_1,\dots,x_n}\to{1,\dots,n}$ by assigning:

$$ f(v_i)=i \quad (1\le i\le k), $$

and extend $f$ arbitrarily to a bijection on all remaining variables ${v_{k+1},\dots,v_n}$.

This gives a valid numbering of all vertices.

Step 3: Verify invariance under relabeling

Relabeling variables by a bijection does not change clause membership structure: each clause is still a set of literals over the same underlying variables, only their names (indices) change.

Thus it suffices to verify the property in terms of the assigned numbering $f$.

Step 4: Verify the required clause property

Let $C_j$ be any clause.

  • If $C_j$ is empty, it already satisfies the requirement.
  • Otherwise, by construction of $V_0$, the clause $C_j$ contains some variable $v \in V_0$.

By definition of the numbering $f$, every variable in $V_0$ receives a number in ${1,\dots,k}$. Hence $C_j$ contains a variable $X_v$ such that $f(v)\in{1,\dots,k}$, in particular it contains a variable of the system after numbering.

This establishes that every nonempty clause contains at least one variable $X_v$, and empty clauses have size $0$, exactly as required.

Step 5: Conclusion

We have constructed a numbering $f$ of the vertices such that every clause either is empty or contains a variable $X_v$. The construction is well-defined, and the property is preserved under the relabeling because it depends only on membership of variables in clauses, not their names.

Therefore, every consistent set of clauses admits such a numbering. ∎