Intelligence, Agency & Consciousness · Paper 0082

When two watched literals let a clause sleep

Chaff changed practical SAT solving by treating memory traffic, propagation and decision overhead as parts of the algorithm. Two movable sentinels make most clause visits unnecessary; conflict-weighted counters steer the next choice; learned clauses survive restarts. The result is not a new proof system so much as a search architecture engineered around what the machine actually spends time doing.

Intelligence, Agency & Consciousness · Paper 0082

When two watched literals let a clause sleep

Rajesh Ranjan Mahapatra

Chaff changed practical SAT solving by treating memory traffic, propagation and decision overhead as parts of the algorithm. Two movable sentinels make most clause visits unnecessary; conflict-weighted counters steer the next choice; learned clauses survive restarts. The result is not a new proof system so much as a search architecture engineered around what the machine actually spends time doing.

© 2026 Rajesh Ranjan Mahapatra. 33 min read

When two watched literals let a clause sleepAll AI Research Library

TLDR

Five-point orientation
  1. Optimise the dominant loop. Chaff’s authors report that Boolean constraint propagation consumes most solver time, so they redesign clause access rather than merely adding a cleverer search rule.
  2. Two watches certify quiet. A clause need not be inspected while neither watched literal becomes false. When a watch is falsified, it moves to another non-false literal if one exists.
  3. Undo almost nothing. Watches do not need to move backwards during backtracking. Unassigning a variable is therefore constant-time with respect to watched-clause maintenance.
  4. Let conflicts steer cheaply. VSIDS raises scores for literals in newly added clauses and periodically decays every score, coupling decisions to recent conflicts without rescanning unresolved clauses.
  5. Keep knowledge, restart position. Restarts erase assignments but retain relevant learned clauses and decision statistics; scheduled lazy deletion bounds memory without making every conflict pay for compaction.
01 · problem and thesis

SAT is a logical question executed as a memory-intensive program

A complete SAT solver must either produce an assignment satisfying every clause or establish that none exists. Chaff’s central move is to ask where that proof search spends machine time, then redesign the hot path.

A propositional formula in conjunctive normal form is an AND of clauses; each clause is an OR of literals; each literal is a variable or its negation. A total assignment satisfies the formula exactly when at least one literal is true in every clause. The definition is compact, yet naive search traverses an exponential space. Complete solvers therefore interleave decisions, forced implications and backtracking.

The paper calls the underlying family Davis–Putnam search, following contemporary SAT terminology. The loop it sketches is more precisely associated today with the Davis–Putnam–Logemann–Loveland style: choose an unassigned variable, propagate every unit clause, and reverse decisions when propagation reaches contradiction. This naming distinction matters historically but does not change Chaff’s engineering argument.

Boolean constraint propagation, or BCP, applies the unit-clause rule transitively. If every literal in a clause except one is false and the survivor is unassigned, that survivor must become true. A conflict appears if no literal can satisfy a clause, equivalently when implications demand both values of one variable. BCP is logically simple but repeatedly touches clause data, so its physical cost can dominate.

The authors report more than 90 per cent of runtime in BCP for many problems. Elsewhere, for difficult instances under the implemented balance, they give an indicative division of roughly 80 per cent BCP, 10 per cent decision work and 10 per cent conflict analysis. These figures are measurements of their solver and workloads, not universal constants. Their design inference is robust: optimise the operation executed most often and count memory access, not just abstract inference steps.

Chaff therefore offers a methodological claim as important as any individual mechanism. Search quality cannot be judged by decision or conflict counts alone. One decision may trigger many propagations; an intellectually attractive branching score may cost so much to maintain that a cruder choice finishes first. The metric that ultimately matters in the paper is elapsed problem-solving performance under controlled comparisons.

Indicative Chaff runtime anatomyA long bar assigns eighty percent to propagation, ten percent to decisions and ten percent to conflict analysis, with propagation pulsing.BCP · about 80%decideanalysemeasure the implementation, then spend design effort where time accumulates
Figure 1 · Runtime directs architecture. The 80/10/10 division is the paper’s illustrative difficult-instance profile; its purpose is causal prioritisation, not a law of all SAT solvers.Source scope: Chaff §§2–3; proportions reported by the authors.

Worked example 1 · fewer decisions can still lose

Solver A makes 300 expensive decisions and scans the unresolved database to score every one. Solver B makes 450 cheap decisions but visits far fewer clauses per propagation and updates its scores only at conflicts. If B finishes sooner, “decisions made” misranks the systems. Chaff’s evaluation treats counters as diagnoses and time as the operational outcome.

Causal probe 1 · speed up only the decision heuristic

If BCP remains 80 per cent of runtime, halving all decision cost reduces total time by only about five per cent. Halving BCP cost approaches a forty per cent reduction. The arithmetic explains why watched-literal propagation receives the paper’s deepest implementation attention.

02 · baseline search state

A decision trail carries values, levels and the right to undo

Chaff begins from a conventional complete backtracking loop. Understanding its state makes the later speedups precise: they change access paths and priorities without changing what counts as a solution or contradiction.

A decision assigns an unassigned variable a tentative value and pushes that choice onto a stack. BCP then adds every value forced by unit clauses. Implications following a decision are tagged with that decision level: a compact indication of the branch state that made them necessary. When a branch conflicts, assignments at invalidated levels are removed and an alternative is tried or a learned analysis sends the solver farther back.

The basic pseudocode alternates decide and bcp. If no variable remains unassigned and propagation has not contradicted a clause, the assignment is a model. If conflict resolution finds no decision with an untried alternative, the formula is unsatisfiable. Completeness comes from preserving alternatives or deriving clauses that soundly prove them impossible.

BCP must reach a fixed point before the next free choice. One unit may imply a second variable, which shortens another clause to a unit, which creates a third assignment. Stopping after one pass would let a decision occur while a logical consequence remains undiscovered. Efficient propagation is consequently not an optional preprocessor; it is the inner closure operation of search.

A clause has four operational states under a partial assignment. It is satisfied when some literal is true; unresolved when at least two literals are not false; unit when exactly one literal is unassigned and all others are false; conflicting when every literal is false. The watched-literal structure must detect transitions into the last two states without repeatedly recounting the whole clause.

Chaff’s later conflict learning is philosophically close to GRASP: analyse implications, add a conflict clause and use unique implication points. The six-page DAC paper explicitly leaves implementation differences largely undescribed because of space. A faithful reconstruction must not invent those missing details or quietly substitute a later first-UIP routine. Chaff’s documented novelty here is the engineering around propagation and choice.

Decision and propagation trailA decision at level one triggers two implications, a second decision triggers another implication and a conflict, then an orange arrow travels backwards.a=1decision · L1b=1implied · L1c=0implied · L1d=1decision · L2conflictanalyse, learn, erase invalidated suffix
Figure 2 · Search is a reversible causal trail. Values alone are insufficient for conflict-driven search; levels and reasons determine what a contradiction can safely erase and what it can teach.Source scope: Chaff §1.2 and §4; GRASP supplies the preceding conflict-analysis architecture.

Worked example 2 · a transitive unit chain

Let the clauses be (¬a∨b), (¬b∨c) and (¬c∨d). Deciding a=true makes b, c and d true in sequence. The four assignments share level 1 even though only a was freely chosen. Undoing level 1 removes the whole causal suffix; it does not require treating each implication as another branch.

Causal probe 2 · allow a decision before closure

After a=true implies b=true, suppose the solver decides b=false before completing BCP. It manufactures a contradiction against a consequence already entailed by its own state. Full propagation prevents search from branching on values that are no longer free.

03 · why occurrence scanning is expensive

A clause should not wake for every false literal

The intuitive propagation data structure indexes every occurrence of a literal. It is logically correct and operationally wasteful: an N-literal clause may be revisited N−2 times before it can possibly become unit.

Suppose a clause contains five literals. If its first literal becomes false, four candidates remain; if a second becomes false, three remain. Neither event can make the clause unit. A counter implementation nevertheless locates the clause and mutates its count on both assignments. Across millions of occurrences, those harmless visits dominate memory traffic.

The theoretical ideal is to visit the clause only when its count of false literals changes from N−2 to N−1, the exact boundary into unit status. Maintaining the exact count still costs an update for every falsification and a reverse update for every unassignment. Chaff approximates the ideal with two certificates: as long as two selected literals have not become false, the clause cannot be unit or conflicting.

These certificates are the watched literals. The watch list for literal ℓ contains the clauses currently watching ℓ. Only when ℓ is made false must those clauses be inspected. Occurrences not presently watched disappear from the hot path. A clause remains a logical disjunction of all its literals; watches are an index, not a weakening of semantics.

The distinction between “not false” and “true” is load-bearing. An unassigned watched literal is enough to certify that the clause still has a possible survivor. Requiring two true literals would fail during ordinary partial search. Conversely, watching arbitrary positions without repairing a falsified watch would lose the guarantee that a future unit transition must touch a watch list.

Chaff’s claim is about physical locality as well as visit counts. Clause scanning follows pointers into a large database, and data-cache misses magnify each unnecessary access. The design concentrates work on clauses near a logical transition. It therefore aligns the abstract event: one of two sentinels was falsified: with the memory event: load and examine this clause now.

Five-literal clause with two watchesFive boxes represent literals. The first two carry blue watch rings while a gate states that three unwatched assignments need not visit the clause.C = (a ∨ b ∨ c ∨ d ∨ e)aWATCH 1bWATCH 2cdechanges here stay quiet until a watch fails
Figure 3 · Two non-false witnesses postpone inspection. The unwatched literals still determine truth. They simply do not individually summon the clause while both watches continue to certify at least two possible survivors.Source scope: Chaff §2.

Worked example 3 · three assignments that need no clause visit

For C=(a∨b∨c∨d∨e) watching a and b, assignments c=false, d=false and e=false do not touch C’s watch lists. C is not yet unit because a and b remain non-false. When a later becomes false, the clause is visited and immediately implies b=true.

Causal probe 3 · replace watches with a false-literal counter

The logical implications are identical, but every falsification and every backtrack mutates the clause’s counter. Measure clause loads and cache misses rather than only propagated variables: the counter design performs work on transitions that cannot yet matter.

04 · the watched-literal transition

When a watch fails, move it or expose the consequence

The propagation routine has one local obligation: after a watched literal becomes false, find a replacement that is not false, or use the other watch to classify the clause.

Let w₁ be the watch just falsified and w₂ the other watch. Load the clause and first consider whether w₂ is true; if so, the clause is already satisfied and no implication is required. Otherwise scan the unwatched literals for one that is not false. If found, replace w₁ with that literal and update the watch lists. The clause returns to sleep.

If no replacement exists, every literal except possibly w₂ is false. If w₂ is unassigned, the clause is unit and BCP assigns it true. If w₂ is also false, the clause conflicts. If w₂ is true, satisfaction was already established. The other watched literal is therefore exactly the place where the only remaining consequence appears.

The initial choice of watches may be arbitrary. Correctness depends on the maintained relationship, not on choosing semantically important literals. Performance can still depend on layout and scan order, because a replacement found early costs less. Yet the logical result is invariant under valid watch choices.

A useful implementation convention stores the two watched literals in privileged positions or keeps explicit watch indices. When a watch moves, only the two affected watch lists need repair. The clause’s other occurrences can remain in a static body. This separation between immutable logical content and mutable access metadata is a general systems pattern.

The paper contrasts Chaff with SATO’s head-and-tail scheme. Both watch two literals, but SATO constrains their direction of motion. Chaff does not impose that fixed direction, and its watches need not be repaired on unassignment. The authors present this difference as central to the asymmetry that makes backtracking cheap; a historical account should preserve SATO’s prior related mechanism rather than claiming two-literal attention appeared from nowhere.

A watched literal moves after falsificationThe watch around a travels to c after a turns false, while b remains watched and the clause stays unresolved.a becomes falsea = 0b = ?c = ?d = ?emove failed watch to a non-false replacement
Figure 4 · Repair the certificate, not the clause. After a becomes false, c can inherit its watch. Because b and c are non-false, the clause still has at least two possible survivors and cannot yet imply anything.Source scope: Chaff §2 and Figure 1.

Worked example 4 · unit after the final failed replacement

Start with C=(a∨b∨c∨d∨e), watch a and b, and set a=false. Move its watch to c. Set b=false and move that watch to d. Set c=false and move its watch to e. When d becomes false, no unwatched replacement survives; e is unassigned, so C implies e=true.

Causal probe 4 · forget to remove the old watch-list entry

If the watch moves from a to c but C remains in a’s watch list, later changes to a repeatedly wake C. Correctness may survive, yet the optimisation leaks. If C is added to c’s list without being removed from a’s, memory and visit counts grow with stale metadata.

05 · backtracking asymmetry

Watches move forward under falsification and stay put under undo

The most elegant property of Chaff’s scheme is negative: backtracking need not restore historical watch positions. A valid watch in a more constrained state remains safe when assignments are removed.

Falsifying variables reduces the set of non-false literals and can threaten the two-watch certificate. Unassigning variables expands that set. Expansion cannot create a new unit clause or conflict; it can only turn a conflict into unit, a unit into unresolved, or preserve satisfaction. Therefore an undo cannot require urgent clause discovery.

Suppose a watch moved from a to c because a became false. Later backtracking unassigns a. Leaving the watch on c is sound: c and the other watch still represent valid non-false positions, and a merely becomes another unwatched candidate. If c is falsified again, the scan may even find a as a replacement. The data structure has no obligation to remember its original geometry.

This gives constant-time unassignment with respect to watch maintenance. The solver pops assignments from its trail and marks variables unknown; it does not traverse all their clause occurrences to decrement counters or reverse watch motion. On backtracking-heavy workloads, avoiding symmetric repair removes a large class of writes and cache misses.

The authors also argue that reassigning a recently undone variable often becomes cheaper. Some clauses that once watched that variable moved their watches elsewhere during the previous descent. They no longer occur on its active watch list, so repeating the assignment visits a smaller subset. Search history has reorganised the index towards the clauses that remain sensitive.

This benefit is amortised and empirical, not a guarantee that every repeat costs less. A later scan can move watches back, and adversarial orders can still cause substantial work. The formal guarantee is narrower: no unit or conflict transition is missed, and undo does not require restoring every watch. The performance claim concerns reduced total accesses under observed search trajectories.

Backtracking leaves watches in placeAn assignment trail retracts from right to left while two watch pins remain fixed over clause literals.undo values; retain access metadataa@1b@1c@2d@2e@3trail retractsab · Wcd · W
Figure 5 · Undo is deliberately asymmetric. The trail loses assignments while watch positions stay. Removing constraints from a partial state cannot newly create a unit or conflicting clause.Source scope: Chaff §2.

Worked example 5 · the watch does not go home

After a=false moved a watch to c, backtrack so a becomes unassigned. The watches remain b and c. Now falsify c: scanning the clause may choose a as the replacement. No saved history is needed, and both the old and new arrangements represent the same disjunction.

Causal probe 5 · restore every original watch on backtrack

The solver stays logically correct but must record watch history or rescan occurrence lists during every undo. Profile writes, cache misses and trail-pop time. The extra work buys no stronger inference because unassignment cannot be the event that creates a new unit clause.

06 · cache-aware propagation

The algorithm is also a traffic policy for memory

Two watched literals are often taught as a clever clause invariant. Chaff’s paper makes the systems lesson explicit: fewer and more local clause accesses matter because the processor waits on data.

An occurrence-list counter scheme touches metadata for every clause containing each falsified literal. Those clause records may be scattered across memory and larger than cache. Even a constant-time counter update can be slow when its cache line is absent. As formula size grows, the logical operation count understates the cost of fetching remote records.

Watch lists act as a selective frontier. They narrow each falsified literal’s work queue to clauses whose certificate is at risk. Within a visited clause, the implementation scans for a replacement and can arrange its literal storage contiguously. The result reduces both the number of loads and the indirection needed to discover them.

There is no promise that a single watched-literal event is cheaper than incrementing a counter. A visited long clause may scan many literals before finding a replacement. The saving comes from avoiding visits on other assignments and from leaving the structure untouched on undo. Amortised behaviour over an entire search is the relevant unit.

This is why the paper resists judging heuristics by isolated abstract counts. A solver is a composition of logical deductions, indexing choices, allocation policies, cache behaviour and branching trajectories. Changing any component can alter the distribution of work in the others. Chaff’s “careful engineering” is a claim that these layers belong inside algorithm design.

The same lesson survives hardware change. Modern caches, prefetchers and memory capacities differ radically from the 336 MHz UltraSPARC II used in the experiments. Yet irregular pointer-rich data remains costly, and contemporary solvers continue to optimise propagation layout. The historical timing numbers age; the demand to align inference with memory locality does not.

Clause traffic under occurrence scanning and watchesThe upper route fans one assignment into many grey clause loads, while the lower watched route reaches only two coloured clauses.all occurrencesx=0watched frontierx=0wake only clauses watching the falsified literal
Figure 6 · Logical silence becomes memory silence. Watch lists do not shorten clauses; they shrink the frontier of clause records that an assignment must load.Source scope: Chaff §2; diagram is a qualitative reconstruction.

Worked example 6 · count loads, not just implications

A variable appears negatively in 20,000 clauses but is currently watched in 900 of them. Setting it true falsifies the negative literal. Occurrence scanning loads all 20,000 clause records; watched propagation begins with 900. Both may infer the same ten units, but their memory traffic differs by more than the output count reveals.

Causal probe 6 · randomise clause storage while preserving logic

The number of decisions, conflicts and implications can remain unchanged while runtime worsens because neighbouring accesses no longer share cache lines. That intervention isolates physical layout from search-tree quality and makes Chaff’s systems thesis visible.

07 · VSIDS

Recent conflict clauses become a low-cost map of attention

Variable State Independent Decaying Sum replaces repeated evaluation of the current unresolved formula with counters updated when learned clauses enter the database.

Chaff maintains a counter for each variable in each polarity, initially zero. Whenever a clause is added, the counter for every literal in that clause increases. At a decision, the solver chooses the highest-scoring unassigned literal, with configurable random tie-breaking. Periodically all counters are divided by a constant, so old contributions fade relative to new ones.

The name “variable state independent” describes the score, not eligibility. Assigned variables cannot be selected, but the counter itself is not recomputed from which original clauses are currently unresolved. Chaff maintains an ordered set of unassigned variables during propagation and conflict analysis so the maximum can be retrieved with low decision-time overhead.

On hard instances, conflict clauses accumulate rapidly and dominate literal increments. Decay acts as a low-pass temporal filter: variables appearing in recent learned clauses retain relatively high scores, while old activity recedes. Decisions are thereby coupled to the portion of the formula that recent failures have exposed as difficult.

The score is not a probability that a literal is true, nor a proof that selecting it minimises the remaining tree. It is an attention signal derived from conflict involvement. A high positive-polarity count also selects a polarity in the original presentation. Later solvers changed update schedules, data structures, phase selection and activity scaling; modern EVSIDS should not be read backwards as every detail of 2001 Chaff.

The authors compare against random choice, DLIS and more elaborate state-dependent heuristics. They argue that numbers of decisions or conflicts alone are misleading and report that VSIDS improved the difficult tested problems by roughly an order of magnitude without harming simpler ones. This is empirical support within their workload, not a theorem that VSIDS dominates every distribution.

VSIDS activity rises with conflicts and decays over timeFour literal score bars receive orange conflict increments; older translucent bars shrink while the newest high score pulses.clause added: (¬p ∨ r ∨ s)q¬prstincrement literals in new clauses · periodically divide every score
Figure 7 · Conflict history shapes the next decision. Clause additions raise participating literal scores; global decay makes equal old evidence smaller relative to recent increments.Source scope: Chaff §3.

Worked example 7 · decay changes rank without erasing history

Suppose p has score 40 from old clauses and r has score 12. Divide all scores by four: p=10 and r=3, so their order is unchanged. Two new conflict clauses each containing r raise it to 5. Repeated decay and fresh increments can eventually let r overtake p; the mechanism favours sustained recent involvement rather than one permanent early burst.

Causal probe 7 · freeze decay

Early conflict regions retain permanent numerical dominance even after the solver moves elsewhere. Compare time and the age distribution of selected variables. If choices lag behind recent learned structure, decay was the link that kept attention temporally local.

08 · a coupled search engine

Propagation finds conflicts; conflicts rewrite the decision landscape

Chaff’s components are not independent knobs. Faster BCP exposes more conflicts per second, conflict analysis adds clauses, and those clauses alter both later propagation and VSIDS scores.

When BCP falsifies a clause, conflict analysis derives a clause intended to block the responsible combination. Adding it changes the clause database. Its literals receive VSIDS increments, so the same proof object that prunes search also raises attention around the conflict. The next decision may therefore return to the variables most implicated by recent failure.

Learned clauses also enter propagation’s watched structure. A short learned clause can become unit much earlier than the original long clauses from which it was derived. It may then generate another implication, another conflict and another learned clause. Clause learning is therefore not merely a record consulted at the end; it changes the frequency and locality of the hot loop.

This feedback makes isolated comparisons delicate. A faster BCP engine may reach more conflicts in the same wall time, which increases clause production and score updates. A different decision heuristic changes which clauses become unit and which watches move. A deletion threshold changes the propagation database and the evidence retained by VSIDS. Counts downstream of an intervention are effects as well as measurements.

The paper’s engineering philosophy is to profile the complete coupled system. It implemented several published decision heuristics and evaluated their actual speed rather than assuming a “smarter” formula must win. Its strongest claim is consequently architectural: low-overhead mechanisms can compound because each leaves more time for useful search.

This does not eliminate the need for logical validation. An efficient wrong propagator can miss a unit or conflict, and a buggy learned clause can delete real models. A production solver should check small instances against exhaustive truth tables, validate returned assignments directly and, where available, emit independently checkable unsatisfiability proofs. Speed measurements begin only after semantic equivalence is secured.

The Chaff feedback loopFour nodes labelled decide, propagate, analyse and learn form a loop; a second arrow from learn returns to both propagate and decide.DECIDEPROPAGATEANALYSELEARNnew watchesVSIDS increments
Figure 8 · One learned clause has two operational lives. It constrains future propagation and contributes activity to future decisions, coupling inference and attention.Source scope: Chaff §§3–4; causal synthesis from the documented components.

Worked example 8 · a short clause compounds

A conflict yields (¬u∨v). The clause raises activity for ¬u and v. Later u=true immediately makes it unit, so v=true propagates without a free choice. The clause has reduced the tree and redirected the ranking; counting only one of those effects understates its role.

Causal probe 8 · update VSIDS from original clauses only

Propagation still benefits from learned clauses, but decisions stop tracking recent conflict structure. Hold the clause database fixed and compare selected variables. The difference isolates conflict-to-attention coupling from clause-to-inference pruning.

09 · clause deletion

Mark cheaply now; reclaim memory occasionally

Learning can grow the database without bound. Chaff separates the decision that a clause is no longer relevant from the expensive act of compacting storage.

When an added conflict clause enters the database, Chaff schedules a future relevance test. The paper’s metric asks when more than N of its literals: typically N around 100 to 200: become unassigned for the first time. At that event the clause can be marked deleted. This criterion reflects how far the current search has moved from the state in which the clause was locally constraining.

Marking does not immediately recover its memory. Actual reclamation occurs in an infrequent monolithic database-compaction pass. The common conflict path therefore avoids allocator work and pervasive pointer repairs. Deletion becomes a two-stage process: a cheap logical status change followed by batched physical maintenance.

The policy is scheduled and lazy, not an oracle of permanent uselessness. A deleted learned clause is still an implicate, and it might have helped later. The solver trades potential future pruning against memory and propagation cost. The relevance parameter controls that compromise; keeping every clause protects information but can overwhelm storage and watch traversal.

Clause deletion interacts with completeness under repeated restarts. The paper observes that retaining all learned clauses would preserve the accumulated exclusions, whereas deleting information and indefinitely restarting could in principle avoid exhaustive progress. It suggests increasing relevance limits over time; similarly, expanding restart intervals can ensure eventual coverage. Practical performance and formal fairness need compatible schedules.

Later CDCL systems developed different quality signals, including activity and literal block distance, and much more aggressive database management. Those should not be attributed to the 2001 paper. Chaff’s documented insight here is the separation of scheduled relevance, logical deletion and rare compaction: a systems response to learning’s memory pressure.

Lazy clause deletion timelineA learned clause moves from active to scheduled, then marked deleted, then reclaimed during a large compaction block.ACTIVEwatched + usedSCHEDULEDrelevance triggerMARKEDmemory remainsCOMPACTIONbatch reclaimkeep allocation work away from the frequent conflict path
Figure 9 · Logical and physical deletion happen at different times. The clause is marked when its scheduled relevance condition fires; storage is recovered later in a batched pass.Source scope: Chaff §4.1.

Worked example 9 · why batching helps

Ten thousand learned clauses become irrelevant across ten thousand conflicts. Immediate reclamation interleaves ten thousand allocation and index-maintenance episodes with search. Lazy deletion performs cheap marks, then one compaction walks memory sequentially and repairs the surviving database together.

Causal probe 9 · keep every learned clause

Search never forgets a valid exclusion, but memory use and watch-list traffic grow. Plot conflicts solved per second as the database expands. A falling rate shows why logically useful information can become operationally harmful when its access cost exceeds its pruning value.

10 · restarts

Erase the position while retaining what the failures proved

A Chaff restart clears assignments and decisions, then resumes from the root with learned clauses and decision statistics still present. It is a new trajectory through a changed problem state, not amnesia.

Early decisions can trap the solver in a difficult region. Learned clauses reveal structure that was unavailable when those choices were made, yet ordinary backtracking may retain them for a long time. A restart removes the whole trail, allowing VSIDS: now informed by subsequent conflicts: to choose a different early route.

Still-relevant learned clauses remain in the database and retain their watches. They can propagate at the root or prune combinations before the previous conflict depth. Chaff also preserves decision statistics, distinguishing its restart behaviour from a complete reset. Small transient randomness may perturb the first few choices so the solver does not reconstruct the same path exactly.

The paper reports that default Chaff may restart thousands of times on hard satisfiable or unsatisfiable instances, while noting that similar results can sometimes occur with restarts disabled. Frequency and randomness are configurable. These observations support restarts as a robustness mechanism, not a claim that more restarts monotonically improve every instance.

Completeness requires attention because a schedule that always abandons branches while forgetting clauses might postpone some region forever. Chaff expands its restart period by default; the paper also discusses slowly increasing the clause-relevance parameter. Such schedules make room for eventual exhaustive progress while preserving the practical benefit of early resets.

Restarts expose the difference between state and knowledge. The assignment trail is a provisional state describing where the solver currently stands. Learned clauses are justified knowledge about where no solution can stand. Clearing the former while retaining the latter is rational precisely because their epistemic roles differ.

Restart clears the trail but preserves clauses and scoresAn orange reset arrow empties a tall decision trail; learned clause cards and VSIDS bars remain on the right.provisional traildecision L1implicationsdecision L2conflictRESTARTretained knowledgelearned clausesstill watchedVSIDS scores persistnew root path · old exclusions · updated attention
Figure 10 · Restart is relocation with memory. Assignments vanish, while retained learned clauses and activity scores make the next descent different from the first.Source scope: Chaff §4.2.

Worked example 10 · the root changes without a new formula

A branch learns (¬a∨¬b) and (b∨c). Restart clears a, b and c. If VSIDS now selects a=true, the first learned clause can constrain b; that assignment may trigger the second clause. The solver begins at decision level zero but not at its original informational state.

Causal probe 10 · reset clauses and scores as well as assignments

With deterministic tie-breaking, the solver can repeat the same early decisions and conflicts. The intervention demonstrates that progress across restarts resides in retained knowledge and altered attention, not in the act of clearing the stack itself.

11 · evidence and limits

Large historical gains, bounded by benchmark and machine

The paper reports one- to two-order-of-magnitude improvements on difficult EDA-derived benchmarks, while documenting exclusions, timeouts, configuration changes and comparisons that must travel with the headline.

Chaff was compared with GRASP and SATO on almost a thousand formulas. The experiments ran on a four-CPU 336 MHz UltraSPARC II Solaris machine with 4 GB of memory; typical memory use was 50–150 MB depending on runtime. These details anchor the measurements in a specific software and hardware environment.

On many smaller DIMACS sets, all solvers were comparable. Chaff showed advantages on harder pigeonhole and parity classes, while the authors omitted large random 3-SAT f and g sets and par32 because none of the compared solvers performed well. That exclusion narrows the empirical domain and directly contradicts any retelling in which Chaff simply dominated SAT as a whole.

The CMU verification suites produced the most striking results. Chaff completed all instances in several families where GRASP or SATO aborted many under the stated limits. The paper reports approximately one-order improvements on hard satisfiable cases and up to two orders on hard unsatisfiable cases relative to available runs. Some GRASP random-restart configurations could not be locally reproduced because required profiles were unavailable; the authors state this limitation.

One Chaff parameter was changed for the DIMACS pret instances, and comparison solvers were run under selected recommended settings. Aborted times contribute to summary totals, while some families stopped after repeated aborts. The tables are valuable precisely because these conventions are exposed; a modern reproduction would need original binaries, configurations, benchmarks and machine-sensitive controls.

The evidence supports a 2001 result: careful BCP and decision engineering made a complete solver dramatically faster on difficult tested EDA workloads than the public systems the authors could run. It does not establish timeless superiority, identify the isolated causal contribution of every feature, or remove exponential worst cases. Later solver evolution is evidence of influence, not a retroactive randomised trial.

ClaimEvidence in the paperBoundary to retain
Propagation is the dominant cost.Profiles report over 90% in many cases and about 80% in an illustrative difficult balance.Implementation- and workload-dependent, not a universal ratio.
VSIDS materially improves performance.Authors implemented several strategies and report roughly order-scale improvement on their hardest tested problems.No theorem of dominance; components interact.
Chaff beats contemporary complete solvers.DIMACS and CMU suite summaries against GRASP and SATO.Selected 2001 suites, hardware, timeouts and configurations.
Engineering drives the gain.Optimised BCP and low-overhead recent-conflict decisions are the stated conclusion.Conflict learning, restarts and deletion remain part of the whole system.

Worked example 11 · read an abort total carefully

If Solver A aborts five instances at a 1,000-second limit, its table total includes at least 5,000 seconds without completed answers. Solver B’s smaller total reflects both speed on solved cases and coverage. It should not be converted into a precise per-instance speedup without the underlying run records.

Causal probe 11 · transplant only watched literals

Hold learning, decision order, restarts and deletion fixed while replacing occurrence scanning with correct watches. The comparison estimates propagation’s contribution. It cannot by itself reproduce Chaff’s total reported gap because the published system’s components feed back into one another.

12 · executable laboratory

Move two watches and audit every clause transition

Select a trace and advance it one assignment at a time. The laboratory compares watched propagation with a brute-force clause oracle, checks that a sole survivor is watched, and verifies that undo never moves a watch backwards.

Clause(a ∨ b ∨ c ∨ d ∨ e)
Processed prefix
Watch action
Clause state

The “move until unit” trace falsifies a, b, c and d. Watches begin on a and b. Each falsified watch moves to a later non-false literal until d fails and e is the only survivor; the clause then implies e=true. Unwatched false assignments would not inspect the clause at all.

The satisfied trace eventually makes a watched literal true. Satisfaction requires no replacement scan until a watched false event threatens the certificate. The conflict trace continues past the unit boundary by assigning the implied survivor false, so the same local mechanism reports that every literal has failed.

Tests are run independently across every prefix of all three traces. A brute-force oracle classifies the full clause without consulting watches. The watch audit asserts that a unit’s only survivor is watched and that unresolved clauses preserve two non-false watches after repair. The undo audit removes the last assignments and requires watch indices to remain byte-for-byte unchanged.

Worked example 12 · watch movement is not logical movement

When the ring moves from a to c, the clause remains (a∨b∨c∨d∨e). Only the index changes. If later a becomes true while unwatched, the clause is satisfied even though propagation need not discover that fact immediately; it only needs to avoid reporting a false unit or conflict.

Causal probe 12 · choose an already-false replacement

The clause may appear to have two sentinels while only one genuine survivor remains. A later falsification of that survivor can be missed because the stale watch never receives a new event. The brute-force prefix oracle catches the first unit or conflict that the corrupted index fails to expose.

Reconstruction checklist

Build correctness first, then measure the machine

Represent each variable as true, false or unassigned, and keep a trail with decision levels and antecedent clauses for implications. Parse every CNF clause without changing literal polarity. Before optimisation, implement a brute-force clause classifier and a small exhaustive SAT oracle; these become independent references for the watched engine.

Give every non-unit clause two watch positions and index clauses by watched literal. When a watched literal is falsified, check the other watch, search for a non-false replacement, or emit the precise unit or conflict consequence. Mutate both watch lists atomically. Never require watches to return to earlier positions on backtrack.

Validate every assignment prefix. If the brute classifier says unit, the watched routine must identify the sole unassigned literal; if it says conflict, propagation must stop with the offending clause. Verify returned models against original clauses. For learned clauses, verify entailment on small formulas or use proof logging at scale.

Implement VSIDS as the paper defines it before importing later variants: counters for literal polarities, increments on clause addition, periodic division and maximum unassigned selection. Record the exact decay interval, division factor, tie-breaking and ordered-set cost. Do not label a modern EVSIDS heap as a bit-for-bit reproduction.

Separate logical clause deletion from physical compaction and document the relevance threshold. Make restart state explicit: assignments clear, retained clauses and decision statistics remain. Increase schedules if a completeness argument depends on eventual progress. Finally profile clause visits, scanned literals, propagations, cache behaviour, decisions, conflicts, learned-clause growth, compaction time and wall time together.

Two comprehensive reviews

Fidelity, teaching and implementation review

Review one: scholarship. The reconstruction preserves CNF semantics, unit propagation, decision levels, the paper’s baseline backtracking loop, the two-watched-literal transition, arbitrary initial watches, forward-only repair, constant-time undo, cache-access motivation, SATO’s related head-and-tail scheme, the five stated VSIDS steps, conflict-clause coupling, scheduled lazy deletion, restart state, completeness qualifications and the benchmark environment. It distinguishes documented Chaff from later CDCL conventions.

Review two: teaching and execution. Ten paper-specific SVGs trace runtime allocation, causal trails, quiet clauses, watch repair, undo asymmetry, memory traffic, VSIDS decay, feedback, lazy deletion and restart memory. Twelve examples and twelve causal probes target independent load-bearing links. The laboratory runs three traces and tests every prefix against a separate clause oracle.

Evidence and AI-telltale review. Claims use bounded verbs and carry experimental conditions. The article does not universalise 2001 speedups, pretend omitted benchmark families were victories, describe VSIDS as a truth estimator, attribute later EVSIDS or clause-quality policies to Chaff, or erase SATO’s related watching. Repeated generic praise has been removed in favour of mechanisms and falsifiable interventions.

Accessibility and responsive review. Figures contain unique titles, descriptions, captions and source scopes; colour is redundant with labels; animation stops under reduced-motion preference. Controls are labelled, outputs use text and a live region, tables scroll on narrow screens, and grids collapse at 900 and 600 pixels. The laboratory’s pass/fail claims arise from explicit exact checks rather than decorative status.

Memory studio

Twelve handles for recall

01 · CNFAll clauses must have at least one true literal.
02 · UnitOne unassigned survivor among otherwise false literals.
03 · BCPRepeat unit consequences until closure or conflict.
04 · Two watchesTwo non-false sentinels certify that no unit is waiting.
05 · MoveA falsified watch seeks any non-false replacement.
06 · Other watchNo replacement means unit, satisfied or conflict is decided there.
07 · UndoValues retreat; watches stay where search moved them.
08 · CacheFewer clause visits mean fewer expensive memory loads.
09 · VSIDSRecent conflict clauses raise literal attention cheaply.
10 · DecayOld activity fades relatively, not necessarily to zero.
11 · Lazy deletionMark relevance now; reclaim storage in a later batch.
12 · RestartClear provisional assignments; retain justified exclusions.
Place in the canon

After learning what failed, engineer how fast failure is discovered

Canon 0081 reconstructed GRASP’s conflict-driven architecture: implication reasons become a learned clause and a non-chronological jump. Canon 0082 keeps that logical feedback but moves the explanatory centre to cost. Watched literals reduce the memory traffic needed to discover implications; VSIDS makes learned conflicts influence choices without repeatedly scoring the current formula; restarts preserve clauses while changing early decisions.

The connection also sharpens a distinction. GRASP’s core object is the conflict explanation. Chaff’s core contribution is an engineered loop in which explanations can be produced and consumed at much higher throughput. A valid proof step that is too expensive to locate may be practically irrelevant; a fast index that misses a unit is logically unacceptable. Chaff’s achievement lies in satisfying both constraints.

Canon 0083, Selman, Levesque and Mitchell’s “A New Method for Solving Hard Satisfiability Problems” (1992), turns to GSAT: an incomplete local-search method that repeatedly flips variables to increase the number of satisfied clauses. Chaff guarantees an answer through systematic conflict-driven search; GSAT exchanges that guarantee for a different way of moving through enormous spaces.

Interpretive synthesis

Attention is an implementation invariant before it becomes a metaphor

Chaff is often remembered through two names: watched literals and VSIDS. Their deeper unity is selective attention. Watches decide which clauses deserve inspection after an assignment; VSIDS decides which variables deserve a choice after recent conflicts. Both replace global rescanning with compact, continuously maintained signals.

The signals have different guarantees. Two valid watches support an exact logical promise: a unit or conflict transition cannot pass unnoticed. VSIDS offers no such optimality theorem; it is an empirical priority that recent conflicts reveal productive neighbourhoods. Combining a sound event filter with a heuristic attention filter is part of the architecture’s strength.

Backtracking and restarting then show two scales of forgetting. Backtracking removes a suffix of assignments but does not reverse the watch index. Restarting removes the entire trail but retains learned clauses and activity. The solver forgets where it stood while keeping structures that summarise why previous positions failed.

Lazy deletion adds a third scale. Learned knowledge is sound yet not free. Some clauses are marked operationally irrelevant and their storage is reclaimed in batches. The system therefore treats memory not as a binary archive but as a managed resource whose contents must justify continuing access cost.

These mechanisms illuminate bounded agency without anthropomorphism. The solver has a goal, provisional commitments, forced consequences, detected contradictions, durable exclusions, decaying priorities and controlled resets. Every component is mechanistic and auditable. Its competence demonstrates how much organised search can emerge from explicit state and carefully engineered access; it supplies no independent evidence of subjective experience.

Publication brief

What this companion adds

This companion reconstructs Chaff from CNF and transitive BCP through watched-literal repair, the no-undo property, cache-aware access, the paper’s five-step VSIDS rule, GRASP-like conflict learning, scheduled lazy clause deletion, restarts, completeness qualifications and historically bounded experiments. It separates the paper’s documented 2001 mechanisms from later CDCL engineering.

The primary source is Matthew W. Moskewicz, Conor F. Madigan, Ying Zhao, Lintao Zhang and Sharad Malik, “Chaff: Engineering an Efficient SAT Solver”, in the Proceedings of the 38th Design Automation Conference, pages 530–535 (2001), DOI 10.1145/378239.379017. The authors’ Princeton-hosted six-page paper was checked page by page against bibliographic records.

Ten accessible animated SVGs, twelve worked examples, twelve causal probes, twelve memory cards, a claim ledger and a three-trace watched-literal laboratory make the paper’s systems argument inspectable. Exact prefix tests compare the optimised index with full-clause semantics and verify watch stability across undo.

References

Primary and contextual sources

  1. Matthew W. Moskewicz, Conor F. Madigan, Ying Zhao, Lintao Zhang and Sharad Malik, “Chaff: Engineering an Efficient SAT Solver”, Proceedings of the 38th Design Automation Conference, 530–535 (2001). DOI record; author-hosted paper.
  2. João P. Marques-Silva and Karem A. Sakallah, “GRASP: A Search Algorithm for Propositional Satisfiability”, IEEE Transactions on Computers 48(5), 506–521 (1999).
  3. Hantao Zhang, “SATO: An Efficient Propositional Prover”, International Conference on Automated Deduction, 272–275 (1997).
  4. Lintao Zhang, Conor F. Madigan, Matthew W. Moskewicz and Sharad Malik, “Efficient Conflict Driven Learning in a Boolean Satisfiability Solver”, ICCAD, 279–285 (2001).
  5. Yogesh S. Mahajan, Zhaohui Fu and Sharad Malik, “Zchaff2004: An Efficient SAT Solver”, SAT 2004, 360–375.
  6. Niklas Eén and Niklas Sörensson, “An Extensible SAT-solver”, SAT 2003, 502–518.
  7. Jia Hui Liang et al., “Understanding VSIDS Branching Heuristics in Conflict-Driven Clause-Learning SAT Solvers”, NIPS 2015, arXiv:1506.08905; used only for later terminology and analysis boundaries.
  8. DBLP, bibliographic record for “Chaff: Engineering an Efficient SAT Solver”; used to verify authorship, venue, pages and DOI.