One step of the QBF machine #
The transition table of DescriptiveComplexity.Problems.Machine.QsatProgram says
which tuples are transitions; this file says what they do. There is one
lemma per line of the program, each of the shape
in this state, at this cell, reading this symbol, the machine steps to that state, that cell, and that tape
with the movement supplied as a DescriptiveComplexity.SuccPos hypothesis, so that
the boundary cases – the outermost variable, the innermost one, the degenerate
instance with no variable at all – are handled by passing a different lemma of
DescriptiveComplexity.Problems.Machine.QsatGeom rather than by duplicating each
line of the program.
The tape after a step is never built here either: it is an arbitrary σ'
required to hold the written symbol at the head and to agree with σ
everywhere else, which is exactly what DescriptiveComplexity.TMData.Step asks
and what the run induction will supply.
The marker a sweep in direction d ends at, as a position.
Equations
Instances For
Dependency graph
Descending #
Descent, over the left marker.
Dependency graph
Descent, at a variable's cell: reset it and move on.
Dependency graph
Descent over, with an empty matrix: it is true, so start returning.
Dependency graph
Descent over: start evaluating the matrix at its lowest clause.
Dependency graph
Evaluating the matrix #
The movement of an evaluation sweep, in its own direction.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
A sweep step that sets the flag: either it was already set, or the literal at this cell satisfies the clause.
Dependency graph
A sweep step that leaves the flag down: it was down and the literal at this cell does not satisfy the clause.
Dependency graph
The movement of a turn, against the direction just swept.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Turn: the clause is satisfied and another one follows.
Dependency graph
Turn: the clause is satisfied and it was the last one, so the matrix is true.
Dependency graph
Turn: the clause is not satisfied, so the matrix is false.
Dependency graph
Carrying the value to the right marker #
Carry, over a variable's cell.
Dependency graph
Carry, over the left marker.
Dependency graph
Carry over: the right marker is reached, so turn round and return.
Dependency graph
Returning through the prefix #
Return, past a decided level: the quantifier settles it, or both its values have already been tried.
Dependency graph
Return, at an undecided level: try the second value and descend again.
Dependency graph
Return over: the prefix is exhausted and the value is true, so accept.
Dependency graph
The initial configuration #
Where the machine starts: descending, at the left marker, on the tape the
instance prescribes. Every cell of the tape carries a symbol – the markers
their own, a variable's cell the value false with the flag down – so the
blank is never read, and it is only there because
DescriptiveComplexity.TMData.InitTape needs a default for the tuples that are
not cells at all.
The tape the machine starts on. It depends on the tag and on the first
coordinate alone, which is what makes it agree with
DescriptiveComplexity.QsatTM.QInp at every tuple, junk included.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Away from the three position tags the instance prescribes nothing.
Dependency graph
The starting tape is the initial tape of the instance.
Dependency graph
The machine starts descending at the left marker.
Dependency graph
The starting tape, read at the left marker.
Dependency graph
The starting tape, read at the right marker.
Dependency graph
The starting tape, read at a variable's cell.
Dependency graph
Where the machine stops #
The two dead ends, both of them facts about the table alone: nothing follows an
accepting configuration, and nothing follows a false returned past the
outermost quantifier. They are exactly the side conditions of
DescriptiveComplexity.TMData.not_acceptsSpace_of_reaches_dead, which is what turns
one exhibited run into non-acceptance for a no-instance.
No transition applies in the accepting state.
Dependency graph
No transition applies to a false at the left marker: the two return
transitions read a variable's cell, and the accepting one needs a true.
Dependency graph
The accepting state is a sink.
Dependency graph
A false returned past the outermost quantifier is a dead end.
Dependency graph
The accepting configuration is accepting, on a well-formed instance:
the guard on DescriptiveComplexity.QsatTM.QAcc is discharged.
Dependency graph
A false at the left marker is not accepting.