TAOCP 7.2.2.2 Exercise 166

In Algorithm X, step X8 performs the lookahead computation (72) after choosing a literal $l$.

Section 7.2.2.2: Satisfiability

Exercise 166. [30] [30] Justify the operations of step X9. Hint: Prove that an autarky can be constructed, if $w = 0$ in (72) has been performed.

Verified: no
Solve time: 1m04s


Setup

In Algorithm X, step X8 performs the lookahead computation (72) after choosing a literal $l$. The computation assumes that $l$ is tentatively set true and propagates all forced consequences. During this process, $l_0$ denotes the literal whose truth is being investigated, and $w$ is the number of clauses that become satisfied only because of the new forced information discovered in this lookahead. Step X9 uses the case $w=0$ to claim that $l_0$ itself can be exploited as an autarky.

The goal is to justify the operation in X9 by proving that, after (72) has been performed and $w=0$, there exists an autarky containing $l_0$.

Solution

Let the lookahead beginning with $l_0$ assign $l_0$ the value true and perform the forced assignments generated by (72). Let $A$ be the set of all literals assigned true during this process. The literal $l_0$ belongs to $A$ by construction.

The defining property of an autarky is that every clause of $F$ either contains a literal of $A$ or contains none of the complementary literals $\bar A$. Equivalently, every clause touched by $A$ must already be satisfied by $A$.

Consider any clause $C$ that contains a literal $a\in A$. Since $a$ was forced true during the lookahead, the clause $C$ is satisfied unless the satisfaction of $C$ required some further literal not belonging to the lookahead assignment. Such a clause would be a clause whose status changes only after the newly discovered forced information is taken into account.

The quantity $w$ in (72) counts precisely these additional clauses that become satisfied because of the propagation. When $w>0$, step X8 records this improvement by increasing $H(l_0)$ and does not regard $l_0$ as an autarky. When $w=0$, no additional clause is gained from the propagation. Hence every clause that is touched by one of the literals in $A$ was already satisfied by the literals in $A$ at the moment the lookahead assignment was made.

It remains to show that no clause can contain a complementary literal from $\bar A$ without also being satisfied by $A$. Suppose that a clause $C$ contains $\bar a$ for some $a\in A$ and contains no literal of $A$. Because $a$ was forced true, the literal $\bar a$ is forced false under the lookahead assignment. Since $C$ contains no other literal of $A$, the clause would have lost its last possible satisfying literal during the lookahead. Therefore the propagation process would have detected a conflict, and step X13 would have been invoked. The assumption that the lookahead reached step X9 excludes this possibility.

Therefore every clause containing a complement of a literal in $A$ also contains a literal of $A$, unless it is completely untouched by $A$. Consequently every clause of $F$ either contains a member of $A$ or contains no member of $\bar A$. This is exactly the definition of an autarky.

In particular, the set of literals generated by the lookahead, including $l_0$, is an autarky whenever $w=0$. Step X9 is therefore justified: if $H(l_0)=0$ after (72), then $l_0$ can safely be forced true by step X12, because it belongs to an autarky.

This completes the proof.

Verification

The argument uses both directions of the autarky condition. Every clause touched by the generated literals is satisfied because $w=0$ means that the lookahead created no unresolved new satisfactions requiring additional information. Every clause containing a falsified complementary literal would have caused a conflict during propagation, so no such untouched clause exists. Hence the generated assignment is self-sufficient.

The alternative branch of X9 is also consistent with this characterization. When $w>0$, the lookahead has found information that does not arise from a self-contained autarky, so the algorithm records the gain in $H(l_0)$ and continues searching rather than forcing $l_0$ immediately.