The spine's legs at an arbitrary file #
DescriptiveComplexity.Problems.Wide.DrawInstEval read at a coarse file: one
variable's machinery per spine position, the legs' controls and states, and the
legs' runs with their costs.
The legs are generic in the outer phase: what they read of it is the
evaluation's own phases, embedded by ep, and the machineries' rules – never
the spine's, whose rule shape the space-bounded and the clocked programs do not
share. The fold of these legs is
DescriptiveComplexity.Problems.Wide.NexSpine.
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.ixVarMachine_reachesIn'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.ixLegCtl, 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
What one leg of the evaluation's spine is charged: the walk-back, the whole machinery of the position's variable, and the written exit. Uniform over the positions – the largest of the variables' costs – so the spine's fold is a single width.
Equations
Instances For
Dependency graph
What the output's leg is charged: the same shape at the output's own
machinery, which is the none variable's.
Instances For
Dependency graph
The costs, factored #
The clock compares a product: a width and a number of rounds, each bounded on
its own (nexTotal_lt_two_pow). So each cost above, which is «once plus a
round's cost per VAL content», is rewritten here as «a width times the rounds
and one more» – the width is the sum of the two parts, and nothing about the
program is used but the shape of the definitions.
A variable's machinery, as one width: what it pays once and what it pays per VAL round, added.
Equations
- dt.ixVarCD A vi w wP wR wK = dt.ixVarGatesCost A vi w wP + dt.ixRoundCost A vi w wP wR wK + 3 * wP + 6 + (2 * wP + dt.ixRoundCost A vi w wP wR wK + 3)
Instances For
Dependency graph
The width of a leg of the spine: the largest variable's, and the leg's own two steps.
Equations
- dt.ixLegWidth A w wP wR wK = 4 + Finset.univ.sup fun (j : Fin dt.nv) => dt.ixVarCD A (dt.varAt j) w wP wR wK
Instances For
Dependency graph
A variable's whole cost is its width times the rounds and one more.
Dependency graph
A leg's whole cost, and its dispatch, is its width times the rounds and one more.
Dependency graph
The spine's whole cost, factored: a width – the leg's, times the number
of positions – and the number of VAL rounds and one more. This is the shape the
clock compares (nexTotal_lt_two_pow), so what an instantiation owes is a bound
on each factor separately.
Dependency graph
The width of the whole clocked evaluation: the spine's width times its positions, the output machinery's own, and the four steps that join them – the dispatch into the spine, the dispatch into the output's leg and the two the legs themselves pay. This is the first factor the clock compares.
Equations
- dt.ixEvalWidth A w wP wR wK = dt.ixLegWidth A w wP wR wK * dt.nv + dt.ixVarCD A none w wP wR wK + 4
Instances For
Dependency graph
The clocked evaluation's whole cost, factored: one width times the VAL
rounds and one more. This is what
DescriptiveComplexity.Draw.Data.nexProg_wideAccept_legs asks of the
evaluation leg – the run's count is exactly the left-hand side.
Dependency graph
One spine position's leg – threaded: the leg without the boundary
hypotheses hsav/htgt, which the sweep cannot supply at more than one
address. The leg ends in
DescriptiveComplexity.Draw.Data.ixLegStT, 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.ixVarLeg_run_thread_reachesIn and
DescriptiveComplexity.Draw.Data.ixVarLegFail_reachesIn 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 output's leg, whatever the verdict: ixOutLeg_run with the
verdict not assumed. The run is the same run – the exit fires either way – and
what changes is only what it writes at the marker: the verdict's own bit. This
is what a backward reading needs, where the verdict is what is being
determined rather than assumed.
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
- One or more equations did not get rendered due to their size.
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 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
Which leg a position takes #
A position's machinery has three runs, by what its gates do:
DescriptiveComplexity.Draw.Data.ixVarLeg_run_thread_reachesIn when every block is
well shaped and the tags and the domain sentence agree,
DescriptiveComplexity.Draw.Data.ixVarLegUngated_reachesIn when the blocks are
well shaped but the verdict flag is cleared, and
DescriptiveComplexity.Draw.Data.ixVarLegFail_reachesIn 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 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
- One or more equations did not get rendered due to their size.
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.ixShapeAt 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
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
- One or more equations did not get rendered due to their size.
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.ixLegStT_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
- One or more equations did not get rendered due to their size.
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.ixVarStE_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.