TAOCP 7.2.2.2 Exercise 162
A clause $C$ is **blocked by a literal $u \in C$** if for every clause $D \in F$ containing $\bar u$, the resolvent (C \setminus \{u\}) \cup (D \setminus \{\bar u\}) is a tautology, meaning it contain...
Section 7.2.2.2: Satisfiability
Exercise 162. [21] [21] Devise an efficient way to discover all of the (a) blocked binary clauses ($\bar{l} \vee a$) and (b) size-two autarkies $A = {a, a'}$ of a given kSAT problem $F$.
Verified: yes
Solve time: 2m42s
Corrected Solution
(a) Blocked binary clauses $(\bar l \vee a)$
Definition
A clause $C$ is blocked by a literal $u \in C$ if for every clause $D \in F$ containing $\bar u$, the resolvent
$$ (C \setminus {u}) \cup (D \setminus {\bar u}) $$
is a tautology, meaning it contains some literal $x$ together with its complement $\bar x$.
We apply this to the binary clause
$$ C = (\bar l \vee a). $$
There are two possible blocking literals: $u = \bar l$ or $u = a$.
We assume standard CNF input where clauses are non-tautological (no clause contains both $x$ and $\bar x$). This is without loss of generality since tautological clauses can be discarded.
Case 1: $u = \bar l$
We resolve $C$ with any clause $D$ containing $l$. The resolvent is
$$ R = {a} \cup (D \setminus {l}). $$
Since $D$ is not tautological, the only way for $R$ to be a tautology is that it contains both $x$ and $\bar x$. The only way the singleton literal $a$ participates in such a pair is if $\bar a \in D$.
Thus, for every clause $D$ containing $l$, we must have $\bar a \in D$. Hence:
$$ \operatorname{Occ}(l) \subseteq \operatorname{Occ}(\bar a). $$
Case 2: $u = a$
We resolve $C$ with any clause $D$ containing $\bar a$. The resolvent is
$$ R = {\bar l} \cup (D \setminus {\bar a}). $$
Again, since $D$ is non-tautological, $R$ is a tautology only if it contains both $x$ and $\bar x$. This forces $l \in D$.
Thus:
$$ \operatorname{Occ}(\bar a) \subseteq \operatorname{Occ}(l). $$
Characterization
The clause $(\bar l \vee a)$ is blocked if and only if at least one of its literals blocks it, hence:
$$ \operatorname{Occ}(l) \subseteq \operatorname{Occ}(\bar a) \quad \text{or} \quad \operatorname{Occ}(\bar a) \subseteq \operatorname{Occ}(l). $$
Efficient discovery
- Build occurrence lists $\operatorname{Occ}(l)$ for all literals in one scan of $F$.
- For each clause $(\bar l \vee a)$, test:
- whether every clause in $\operatorname{Occ}(l)$ contains $\bar a$, or
- whether every clause in $\operatorname{Occ}(\bar a)$ contains $l$.
Each test is performed by scanning the relevant occurrence list with constant-time membership checks per clause. This yields all blocked binary clauses.
(b) Size-two autarkies $A = {a, a'}$
Definition
A set of literals $A$ is an autarky if every clause containing any literal whose variable appears in $A$ is already satisfied by $A$, i.e., the clause contains at least one literal from $A$.
Thus $A = {a, a'}$ is an autarky if and only if every clause satisfies:
$$ (C \cap {\pm \mathrm{var}(a), \pm \mathrm{var}(a')} \neq \emptyset) ;\Rightarrow; (C \cap {a, a'} \neq \emptyset). $$
Equivalently:
- Any clause containing $a$ or $a'$ is satisfied immediately.
- Any clause containing $\bar a$ or $\bar a'$ must also contain $a$ or $a'$.
Explicit condition
We split by literals.
Clauses containing $\bar a$
Every clause $C$ with $\bar a \in C$ must satisfy:
$$ C \cap {a, a'} \neq \emptyset. $$
Since $a \notin C$, this reduces to:
$$ a' \in C. $$
So:
$$ \operatorname{Occ}(\bar a) \subseteq \operatorname{Occ}(a'). $$
Clauses containing $\bar a'$
Similarly:
$$ \operatorname{Occ}(\bar a') \subseteq \operatorname{Occ}(a). $$
Characterization
A pair $A = {a, a'}$ is an autarky if and only if:
$$ \operatorname{Occ}(\bar a) \subseteq \operatorname{Occ}(a') \quad \text{and} \quad \operatorname{Occ}(\bar a') \subseteq \operatorname{Occ}(a). $$
Efficient enumeration
- Build all occurrence lists for literals in one scan of $F$.
- For each pair of literals $a, a'$ that appear in $F$:
- Test whether every clause in $\operatorname{Occ}(\bar a)$ contains $a'$.
- Test whether every clause in $\operatorname{Occ}(\bar a')$ contains $a$.
Each test uses only scans of occurrence lists with constant-time clause membership checks.
All valid size-two autarkies are exactly those pairs passing both tests.
Summary
- A binary clause $(\bar l \vee a)$ is blocked iff one literal’s occurrence set is contained in the occurrence set of the other’s complement:
$$ \operatorname{Occ}(l) \subseteq \operatorname{Occ}(\bar a) ;;\text{or};; \operatorname{Occ}(\bar a) \subseteq \operatorname{Occ}(l). $$
- A pair ${a,a'}$ is an autarky iff:
$$ \operatorname{Occ}(\bar a) \subseteq \operatorname{Occ}(a') ;;\text{and};; \operatorname{Occ}(\bar a') \subseteq \operatorname{Occ}(a). $$
These conditions yield direct and efficient enumeration algorithms.