The spine, instantiated: one variable's machinery per position #
DescriptiveComplexity.Draw.Data.eval_run chains one abstract machinery
run per spine position; this file discharges each leg at the program's own
rules. A leg is three pieces: the walk back into the variable's entry
checkpoint (DescriptiveComplexity.Draw.Data.step_var_back), the whole
machinery (DescriptiveComplexity.Draw.Data.varMachine_run), and the
written exit step (DescriptiveComplexity.Draw.Data.step_var_exit) –
whose write is the variable's stage bit, so the tape state after the leg is
DescriptiveComplexity.Draw.Data.postVarSt: the round state at the
exhausted VAL, the new track updated at the marker.
The enumeration of the VAL loop (ιV/mV) is shared by every position –
it enumerates the register contents, which do not depend on the variable –
and stays abstract here, with the per-position semantic data
(DescriptiveComplexity.Draw.Data.KindSem, the gates' domain facts), to
be supplied by the encoding layer.
The tape state after one spine position: the round state at the
final VAL content, the variable's new track set at the marker to the
machinery's verdict.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Off the marker, the post state's background is the round state's.
Dependency graph
At the marker, the post state's background is the round state's with the variable's stage slot updated to the verdict bit.
Dependency graph
One position's leg #
The control after one position's leg: the machinery's exit fold –
DescriptiveComplexity.Draw.Data.varMachine_run's final control, at the
position's variable.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The control after one position's leg, threaded – the twin of
DescriptiveComplexity.Draw.Data.legCtl, with the VAL loop's rounds run
at the states the thread produces for them.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The tape state after one position's leg, threaded: the VAL loop's
exit state – the entry state's SAV and TARGET normalized if any of its
rounds ran a stage atom – with the variable's new track written at the
marker.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
What a leg leaves alone: the machinery writes its own two scratch registers and its stage bit, so the mirror, the marker, the bottom and end marks and the stage dictionary all ride – which is what carries the next position's pack and, one scale up, the sweep's own invariants.
Dependency graph
A position's threaded leg computes the unthreaded fold: its VAL loop
is the unthreaded loop (varFMT_eq_varFM), its last round the unthreaded
round (varFXT_eq_roundFX), and the background it folds against is the
round state's, the loop's exit differing from it in SAV and TARGET alone.
This is what makes the branched leg's stage bit
(DescriptiveComplexity.Draw.Data.legBitB) the verdict
DescriptiveComplexity.Draw.Data.accVerdict_next reads.
Dependency graph
One spine position's leg: from the dispatch's landing one cell right of the marker, back to it, through the variable's whole machinery, and out through the written exit – the stage bit at the marker now the machinery's verdict, the phase the next checkpoint.
Dependency graph
One spine position's leg – threaded: as
DescriptiveComplexity.Draw.Data.varLeg_run without the boundary
hypotheses hsav/htgt, which the sweep cannot supply at more than one
address. The leg ends in
DescriptiveComplexity.Draw.Data.legStT, the machinery's own exit state
with the stage bit written at the marker.
Dependency graph
One spine position's leg at a junk address: the walk-back, the
machinery's failing gates, and the erased stage slot at the marker – the
verdict False, the VAL register untouched.
Dependency graph
One spine position's leg at a shaped but ungated address: the
walk-back, the whole gate sequence – every file test passing, the total
dispatch carrying every block through – the clear flag at the verdict
checkpoint, and the erased stage slot at the marker: the verdict False,
the VAL register untouched. With
DescriptiveComplexity.Draw.Data.varLeg_run and
DescriptiveComplexity.Draw.Data.varLegFail_run this covers every
address the sweep visits.
Dependency graph
The output's leg #
The out machinery is the same shape at vi := none, entered by the walk
home after a passed convergence sweep, its exit the accepting phase. Its
stage slot is the working-cell marker itself, so an accepting verdict's
write is idempotent – the tape after the leg is the machinery's own end
tape.
The VAL-loop thread of the output's leg, at the entry-wrapped control.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The control after the output's leg: the out machinery's exit fold.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The output's leg: from the walk home's landing one cell right of the marker, back to it, through the out machinery, and – the verdict holding – out into the accepting phase, the marker rewritten with the value it already carries.
Dependency graph
The state the output's leg ends at – threaded: the machinery's own exit state, the accepting write at the marker being idempotent.
Equations
- dt.outStE RF hord mV st tOf semT f₀ = DescriptiveComplexity.Draw.Data.varStE RF hord none st v mV semT (DescriptiveComplexity.Draw.Data.varFG RF none st v tOf f₀) aT
Instances For
Dependency graph
The control after the output's leg – threaded: the out machinery's exit fold, at the states its own thread produces.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The output's threaded leg computes the unthreaded fold: as
DescriptiveComplexity.Draw.Data.legCtlT_eq_legCtl at the output
variable – the VAL loop is the unthreaded loop, its last round the
unthreaded round, and the exit state differs from the round state in SAV and
TARGET alone, which the background does not see off the register file. This
is what makes outLeg_run_thread's hacc the verdict
DescriptiveComplexity.Draw.Data.accVerdict_out reads.
Dependency graph
The state the output's leg leaves, whatever its verdict: the machinery's exit state with the marker rewritten by the accepting bit – so the marker survives a true verdict and is cleared by a false one, which is what makes a false output halt and reject.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The output's leg – threaded, whatever the verdict: as
DescriptiveComplexity.Draw.Data.outLeg_run without the boundary
hypotheses hsav/htgt, which nothing supplies at the end of a sweep – the
advance refreshes the marker and the mirror, not the two scratch registers –
and without any assumption on the verdict. The leg ends in the accepting
phase either way; what the verdict decides is the bit the exit writes at
the marker (DescriptiveComplexity.Draw.Data.outStA), and with it whether
the machine's accepting predicate holds of the state it stops in.
Dependency graph
The output's leg – threaded, the verdict holding: the special case of
DescriptiveComplexity.Draw.Data.outLeg_run_verdict in which the accepting
write at the marker is idempotent, so the leg ends at the machinery's own
exit state and nothing of the tape moves.
Dependency graph
Which leg a position takes #
A position's machinery has three runs, by what its gates do:
DescriptiveComplexity.Draw.Data.varLeg_run_thread when every block is
well shaped and the tags and the domain sentence agree,
DescriptiveComplexity.Draw.Data.varLegUngated_run when the blocks are
well shaped but the verdict flag is cleared, and
DescriptiveComplexity.Draw.Data.varLegFail_run when a block fails the
shape test – which is the one that needs a witness, and a least one, so
that the blocks before it have run.
The least failing index, with a witness: from a family that is not
everywhere true, the first index at which it fails, together with a value
at which it does and the fact that every earlier index is everywhere
true. This is DescriptiveComplexity.Draw.Data.varLegFail_run's
ℓ₀/hTestLt/hfail produced from the plain negation, which is all a
per-address case split has.
Dependency graph
The shape test the gates run, at a position and a state: the
per-cell question a block's TestKit asks, which is what tells the third
leg from the other two.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The tag a block's witness cells name, as the machine reads it –
so htagOf is rfl at this choice.
Equations
- dt.tagAt j st ℓ = dt.dspTagOf PR.zero PR.one (DescriptiveComplexity.wmBlk st.mir (DescriptiveComplexity.Draw.Tag.arg (toLex (Sum.inl (Fin.castLE ⋯ ℓ)))))
Instances For
Dependency graph
The other half of a block's gate: its tag witnesses are one-hot at
the tag they name, and the expansion's domain sentence holds of the point
the block decodes. Together with
DescriptiveComplexity.Draw.Data.shapeAt this is the gates' verdict.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
A position is gated when every block passes both halves.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The state one position's leg leaves, whichever leg it takes: the machinery's own exit at a gated position, and the entry state with the stage bit erased at the two ungated ones – which agree on the tape and differ only in their control.
Equations
Instances For
Dependency graph
The control one position's leg leaves: the machinery's fold at a gated position, the ungated exit when the blocks are well shaped but a tag or the domain fails, and the failing gates' exit – at the least badly shaped block – otherwise.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
What a leg leaves alone, whichever leg it takes: the ungated legs
never enter the VAL loop, so they touch nothing but the stage bit, and the
gated one is DescriptiveComplexity.Draw.Data.legStT_fields. The val
register is left out on purpose – it is the loop's top at a gated
position and the entry state's at the other two.
Dependency graph
The stage bit one position writes, whichever leg it takes: the
machinery's verdict at a gated position, False at the two ungated ones,
which is what the stage dictionary holds where the blocks encode no
point.
Equations
Instances For
Dependency graph
What a leg writes: its variable's cell at the marker, and nothing
else – the same equation whichever leg it takes, since the VAL loop
threads the two scratch registers alone
(DescriptiveComplexity.Draw.Data.varStE_new) and the ungated legs
write the stage bit directly. This is the branched twin of
DescriptiveComplexity.Draw.Data.new_postVarSt, and the only thing the
spine's dictionary lemmas need of a leg.
Dependency graph
One spine position's leg, whichever leg it takes: the three runs of the machinery under one statement, the case split on the gates made once and for all. This is what a sweep needs, since it visits junk addresses and gated ones alike.
Dependency graph
The spine #
The evaluation's spine, fully instantiated: from the checkpoint
before the first variable to the checkpoint after the last, one whole
machinery per position – each leg
DescriptiveComplexity.Draw.Data.varLeg_run, the tape and control
threads given as families with one cover equation per position.
Dependency graph
The evaluation's spine, fully instantiated – threaded: as
DescriptiveComplexity.Draw.Data.evalSpine_run with hsavOf and
htgtOf gone. That is the point of the whole threading: the advance
refreshes the marker and the mirror but not SAV and TARGET, so a sweep can
meet those two hypotheses at one address at most, while every other
hypothesis here is about the marker, the mirror and the tracks, which do
ride.
Dependency graph
The evaluation's spine at an arbitrary address: as
DescriptiveComplexity.Draw.Data.evalSpine_run_thread with the gates no
longer assumed to pass. Each position takes whichever of the three legs
its own gates call for, and what the caller owes is only the marker, the
mirror and the bottom mark – all of which the advance sets and every leg
leaves alone. This is the form a sweep can use, since it visits junk
addresses and gated ones alike.