One-cell writes, and tests the tracks can decide #
Two corrections to the pass interface, found by trying to discharge it.
A single-cell write is a step, not a pass. Prog.reaches_write asks for
rules writing m' u at every pair of a symbol and a cell, which only a
cell-independent m' can supply – a rule computes its written symbol from the
tracks it reads, and at a decoupled pair the tracks say nothing about the
cell. Writing one named bit therefore goes: navigate to the cell
(DescriptiveComplexity.Draw.Prog.reaches_toCell), then one step
(DescriptiveComplexity.Draw.Prog.step_writeCell and its rightward twin): the
walked track changes at that cell and nowhere else, which is the coherence
condition DescriptiveComplexity.Draw.Prog.trackTape_coh discharges.
DescriptiveComplexity.Draw.Prog.passTracks_update_cell is the equation the
rule's written symbol is checked against. (A single-cell read needs nothing
new at all: it is DescriptiveComplexity.Draw.Prog.step_move or its twin with
an unchanged background, the phase branching on the digit the rule reads.)
A file test must be decided by the tracks. Prog.reaches_test takes its
question as a predicate of the cell, quantified independently of the symbol,
so a deterministic table cannot serve both its pass and its fail hypotheses.
DescriptiveComplexity.Draw.Prog.reaches_fileTestG restates it with the question a
predicate TestG of the tracks, tied to the cell-level question by one
compatibility hypothesis – which is how the machine actually asks it: MIRROR =
TARGET is one slot against another, a well-shapedness check is the name marks,
and so on.
What indexes the register file is a parameter throughout, as it is from
DescriptiveComplexity.IxFile upwards: a program on a clock cannot give every
element of the universe a register, and none of these passes care which does.
A track is a predicate on the index and an address is a predicate on the
universe; at the file a space-bounded program uses the two are the same type,
which is why the diagonal reads as it does.
Updating a track at one cell #
The tracks at a cell whose walked track was updated there: the update of the tracks. This is the equation a writing rule's symbol is checked against.
Dependency graph
One step writing the walked track at a register cell, moving left: the
program stands on the cell, one rule rewrites the track's digit there – to
b, whatever it read – and the head steps to the predecessor. The rest of the
track and every other track ride along.
Dependency graph
A file test the tracks decide #
A program tests its register file by a question of the tracks. As
DescriptiveComplexity.Draw.Prog.reaches_fileTestG, but the question is a predicate
of the symbol – which is what a deterministic rule can branch on – tied to
the per-cell question by the compatibility hypothesis. The verdict comes back
in the phase: the passing one exactly when every register passed.
Dependency graph
A program tests its register file by a question of the tracks, the budget forgotten.
Dependency graph
Whole-track writes the tracks can decide #
The two whole-track writes the program needs – clearing a register and copying
one register into another – have their written value computable from the
symbol under the head (a constant, or another slot of the same cell), which is
exactly what a deterministic rule can do. They are
DescriptiveComplexity.reaches_fileWrite with the coupling supplied.
Clearing a track: one pass down the file writing the clear digit at every register.
Dependency graph
Copying one track into another: one pass down the file, each register's walked digit replaced by its digit on the source slot, which must be a bit there. SAV := MIRROR and TARGET := SAV are this pass.
Dependency graph
Rewriting a track by a function of the other tracks: one pass down the file, each register's walked digit replaced by a bit the tracks at that cell decide – provided the function ignores the walked slot itself, which is what makes the written value independent of the pass's own progress. Clearing and copying are special cases; the pattern writes of the program – a target register loaded with a pattern of the marks – are the general one.
Dependency graph
Rewriting a track by a function of the other tracks, the budget forgotten.