Scanning to a cell recognized by its tracks #
DescriptiveComplexity.Problems.Wide.DrawPass navigates to cells marked by a
single slot – the two ends of the register file, the working-cell marker.
The atom subroutines of the EXPSPACE program navigate differently: they scan
for the register cell whose name slots – the mark a canonically padded
cell carries its own coordinates in – match a tuple the machine holds in its
control. That stopping condition reads several slots at once, so the scans are
restated here with an arbitrary guard on the tracks:
DescriptiveComplexity.Draw.Prog.reaches_scanStop/reaches_scanStopBack– scan to the first cell whose tracks satisfy the guard, learning on arrival that no cell passed did;DescriptiveComplexity.Draw.Prog.reaches_toCell/reaches_toCellBack– the same when the caller knows which cell that is, because the guard identifies it uniquely: arrival at the named cell exactly.
As everywhere in the pass layer, the caller supplies rules (Prog.HasRight /
Prog.HasLeft families), the symbols are computed for it, and the tape is the
Prog.trackTapeAt presentation, so a program never mentions
FirstOrder.Language.wide.
Scanning right to the first cell whose tracks satisfy a guard, the budget forgotten.
Dependency graph
Scanning right to a cell the guard identifies uniquely, the budget forgotten.
Dependency graph
Scanning right to a cell the guard identifies uniquely, the budget forgotten.
Dependency graph
Re-presenting the tape between passes #
A register pass walks one track and carries the rest of the tape as its
background. Two consecutive passes walk different tracks, so the after-tape
of one has to be read as the before-tape of the other: the walked track moves
into the background and a background slot becomes the walked track. That is one
equality of presentations, provable once – the only condition being that the
slot about to be walked satisfies the register discipline, i.e., is the
DescriptiveComplexity.bitAtOf of some track (set nowhere off the register
file).