The intended run: the guessing sweeps #
The k sweeps of the machine, run against a tuple of block assignments. The
whole point is DescriptiveComplexity.valAfter: the truth value the cell of a
variable holds once the sweeps below i have run is the disjunction, over the
blocks below i marking it, of what they assigned it. At i = k that is
DescriptiveComplexity.qbfVal on the nose
(DescriptiveComplexity.valAfter_top), which is why one bit per cell suffices
even though a variable may carry several block marks.
A sweep runs rightwards writing, turns at ⊣, runs back leftwards unchanged,
and hands over at ⊢. The tape during the rightward pass is
DescriptiveComplexity.sweepTape: cells strictly below the head already hold
the new value, cells at or above still hold the old one. Junk cells – a cell's
tag on a tuple that is not a position – are frozen at false, which is what
DescriptiveComplexity.AltInp gives them and what the frame condition of every
step then preserves.
The value a cell holds between sweeps #
The truth value the cell of x holds once the sweeps below i have run.
Equations
- DescriptiveComplexity.AltQbf.valAfter νs i x = decide (∃ (j : Fin k), ↑j < i ∧ DescriptiveComplexity.AltQbf.QbfBlk j x ∧ νs j x)
Instances For
Dependency graph
Reading DescriptiveComplexity.valAfter back.
Dependency graph
Dependency graph
After the last sweep a cell holds the truth value of its variable.
Dependency graph
A sweep leaves a cell alone when its block does not set it.
Dependency graph
A sweep sets a cell when its block marks the variable and assigns it
true.
Dependency graph
The value of a cell never goes back down.
Dependency graph
Changing one block's assignment #
The read-off of a round replaces the assignment of the block that has just played, and leaves the others alone. These are the two facts that makes such a replacement invisible to the sweeps below it and exactly visible to its own.
Only the blocks below m matter to what a cell holds after m sweeps.
Dependency graph
Replacing block i's assignment does not change what the sweeps below it
wrote.
Dependency graph
Replacing block i's assignment changes exactly what its own sweep
writes.
Dependency graph
The tape between and during the sweeps #
Whether a tuple carrying a cell's tag is a real cell of the tape.
Equations
- DescriptiveComplexity.AltQbf.IsCellTup q = (↑q.1.2 = 0 ∧ ∀ (a : A), q.2 1 ≤ a)
Instances For
Dependency graph
The tape once the sweeps below i have run: every real cell holds the
value its variable has accumulated, the markers hold their own symbols, junk
cells are frozen at false, and everything else reads blank.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The tape during the rightward pass of the sweep of index i, with the head
at p: a real cell strictly below the head already holds the new value.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
At the left marker nothing has been written yet.
Dependency graph
At the right marker the sweep is over.
Dependency graph
The rightward pass only ever changes the cell under the head. Every other element reads the same before and after: markers and non-cells do not depend on the head at all, junk cells are frozen, and a real cell is below the new head exactly when it was below the old one.
Dependency graph
The rightward pass #
The configuration during the rightward pass of the sweep of index i.
Equations
- DescriptiveComplexity.AltQbf.confSweep νs i p = { state := DescriptiveComplexity.AltQbf.stG i true, head := p, tape := DescriptiveComplexity.AltQbf.sweepTape νs (↑i) p }
Instances For
Dependency graph
At the first cell nothing has been written yet either: no cell is strictly below the cell of the least element.
Dependency graph
A sweep starts from the tape the sweeps below it left.
Dependency graph
The run starts at the first sweep.
Dependency graph
The value under the head is the old one.
Dependency graph
The value written under the head is the new one.
Dependency graph
One step of a rightward pass. At a cell the machine writes the value its block gives the variable – keeping the old one, or setting it – and moves on; at the left marker it steps over it.
Dependency graph
The whole rightward pass: from the first cell to the right marker, the
sweep of index i writes its block's value in every cell.
Dependency graph
The first sweep steps over the left marker. Later sweeps do not: they
enter at the first cell, the handover at ⊢ having already moved the head.
Dependency graph
The turn, the leftward pass and the handover #
The configuration during the leftward pass of the sweep of index i: the
tape is the one the sweep has just finished writing, and does not change
again.
Equations
- DescriptiveComplexity.AltQbf.confBack νs i p = { state := DescriptiveComplexity.AltQbf.stG i false, head := p, tape := DescriptiveComplexity.AltQbf.tapeAfter νs (↑i + 1) }
Instances For
Dependency graph
The tape reads its own symbol at each marker.
Dependency graph
The tape reads its own symbol at each marker.
Dependency graph
The tape reads a real cell as the value its variable has accumulated.
Dependency graph
Dependency graph
The turn at the right marker: the sweep has written every cell and turns round.
Dependency graph
One step of the leftward pass: the head steps back over a cell, changing nothing.
Dependency graph
The whole leftward pass: from the last cell back to the left marker.
Dependency graph
The handover to the next sweep: at the left marker the machine steps right into the first cell and the next block takes over.
Dependency graph
The handover to the check phase: after the last sweep the machine takes the lowest clause with an empty flag and sweeps rightwards.
Dependency graph
The handover to acceptance: an instance with no clause at all is vacuously satisfied by a conjunctive matrix, and the machine accepts.
Dependency graph
One sweep, end to end #
Two runs compose. (DescriptiveComplexity.TMData.stepsIn_split is the
converse; this direction is not in DescriptiveComplexity.Machines and could
be hoisted there.)
Dependency graph
The number of steps a sweep takes: right to the marker, turn, back to the other marker, and over it.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The whole of sweep i, from the first cell to the first cell of the
sweep that follows it: the round of block i is exactly this run.
Dependency graph
The first sweep, which begins at the left marker.