The check phase decides the matrix #
DescriptiveComplexity.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.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.ChkOk is what the run from a clause
proves about that clause and every clause above it.
What a check sweep proves #
Some literal of the clause c is good: satisfied, for a conjunctive
matrix; violated, for a disjunctive one.
Equations
- DescriptiveComplexity.AltQbf.QChkGood k cnf νs c = ∃ (y : A), DescriptiveComplexity.AltQbf.QGood k cnf c y (DescriptiveComplexity.AltQbf.chkVal νs y)
Instances For
Dependency graph
What the check phase has left to prove when it reaches the clause c:
that every clause from c up is satisfied, or that some term from c up has
no violated literal.
Equations
- DescriptiveComplexity.AltQbf.ChkOk k true νs c = ∀ (e : A), DescriptiveComplexity.AltQbf.QbfCl k e → c ≤ e → DescriptiveComplexity.AltQbf.QChkGood k true νs e
- DescriptiveComplexity.AltQbf.ChkOk k false νs c = ∃ (e : A), DescriptiveComplexity.AltQbf.QbfCl k e ∧ c ≤ e ∧ ¬DescriptiveComplexity.AltQbf.QChkGood k false νs e
Instances For
Dependency graph
Elementary facts about check configurations #
A checking state is not accepting.
Dependency graph
Checking states are told apart by their flag, their direction and their clause.
Dependency graph
Dependency graph
Dependency graph
Every step of the check phase is forced: it is the only one available, so acceptance descends along it whatever the polarity of the block.
Dependency graph
A configuration that accepts and is not accepting outright has an accepting successor, whichever player owns it.
Dependency graph
Descending a check sweep #
A rightward check sweep reaches the right marker.
Dependency graph
A leftward check sweep reaches the left marker.
Dependency graph
What the turn says #
The turn at the right marker, read backwards. Either the clause has a good literal and the run moves on to the next one, or the flag settles the run and the semantics of the matrix is decided on the spot.
Dependency graph
The turn at the left marker, read backwards.
Dependency graph
Putting the clauses together #
What the accepting turn says: the clause settles the run, so it is the last one that matters.
Dependency graph
What the turn to the next clause says: this clause is good, and the run goes on to settle the ones above it.
Dependency graph
The check phase decides the matrix. Whichever sweep it is on and whichever clause it has reached, an accepting run proves that clause and every clause above it settled.
Dependency graph
The check's literal test is the matrix's #
Dependency graph
Dependency graph
A conjunctive clause is good exactly when the assignment satisfies one of its literals.
Dependency graph
A disjunctive term has no violated literal exactly when the assignment satisfies all of them.
Dependency graph
What the check phase tests is the matrix.
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.
Instances For
Dependency graph
The check phase proves the matrix.
Dependency graph
The matrix makes the check phase accept, at either polarity of the block it sits in, since the phase is deterministic.