The check phase decides the matrix #
DescriptiveComplexity.AltQbf.accepts_from_chk_cnf and its disjunctive twin build an
accepting run when the matrix holds. This is the converse: if the check phase
accepts, the matrix holds. Together they say that the tape the sweeps leave
behind is tested exactly.
The check phase is deterministic, so no read-off is needed: acceptance descends
along its unique run whatever the polarity of the block it sits in
(DescriptiveComplexity.AltQbf.StepForced), and each sweep can only end in one of the
two turns. The turn that accepts fires at the flag cnf – set for a
conjunctive matrix, where it means the clause is satisfied, clear for a
disjunctive one, where it means no literal of the term is violated – and that
is precisely the semantic conclusion. The turn that moves on fires at the flag
true, and hands the argument to the next clause.
The induction is therefore over the clauses, upwards, exactly as in the two
forward lemmas: DescriptiveComplexity.AltQbf.ChkOk is what the run from a clause
proves about that clause and every clause above it.
What a check sweep proves #
Elementary facts about check configurations #
Descending a check sweep #
What the turn says #
Putting the clauses together #
The check's literal test is the matrix's #
Dependency graph
Dependency graph
The check phase, both ways #
What the last round hands over: from the entry of the check phase the machine accepts exactly when the matrix holds of the tape the sweeps have written.
A generous bound on the length of the check phase: one sweep per clause.
Equations
- One or more equations did not get rendered due to their size.