A FixSystem abstracts the structure underlying Moser's algorithm. It consists of
clauses and states, a predicate satisfied saying when a clause holds in a state, a fix
operation that repairs a clause, the guarantee that fix c makes c satisfied, and the
invariant that fix c preserves all currently satisfied clauses.
- satisfied : Clause → State → Prop
- fix : Clause → State → State
Instances For
IsValidOuterLoop sys cs s says that the list of clauses cs is a valid execution
trace of the outer loop of Moser's algorithm starting from state s: each successive
clause is unsatisfied at the moment it is visited and then fixed.
Instances For
Any valid outer-loop trace contains each clause at most once: once a clause is fixed it remains satisfied, so it can never be the unsatisfied clause selected at a later step.
A KCNF instance: $k$-CNF formula data with numVars Boolean variables, numClauses
clauses each of width $k \ge 3$, and maxShared bounding the number of clauses sharing a
variable with a given clause.
Instances For
A MoserKCNF is a KCNF satisfying Moser's sharing condition $\text{maxShared} \le 2^{k-3}$,
the hypothesis under which Moser's algorithm provably finds a satisfying assignment.
- numClauses : ℕ
Instances For
The number $2^n$ of Boolean assignments on $n$ variables.
Instances For
Upper bound $2^{\ell(k-1)+1}$ on the number of execution traces of Moser's algorithm of length $\ell$ on a $k$-CNF formula, used in the entropy-compression argument.
Instances For
Combined failure bound $2^n \cdot 2^{\ell(k-1)+1}$ from entropy compression: the count of (assignment, trace) pairs available to encode failing executions.
Instances For
Rewrites failureBound n k ℓ as a single power of $2$: $2^{n + \ell(k-1) + 1}$.
Entropy-compression cardinality bound: among the $2^{k\ell}$ possible random tapes of
length $k\ell$, the set on which Moser's algorithm runs for $\ell$ steps without finishing
has cardinality at most failureBound φ.numVars φ.k ℓ.
Natural-number version of the failure-probability bound:
$\text{numFailing} \cdot 2^\ell \le 2^{k\ell} \cdot 2^{n+1}$ whenever the failing count is
bounded by failureBound n k ℓ.
Theorem 6.6.6 (Moser's algorithm on $k$-CNF). Under the sharing condition
$\text{maxShared} \le 2^{k-3}$, the probability that Moser's Fix procedure makes more
than $\ell$ recursive calls is bounded by $2^{n+1}/2^\ell$, which decays geometrically in
$\ell$ and so the algorithm almost surely terminates.