The sweep and MAIN, at the concrete program #
DescriptiveComplexity.Draw.Data.reaches_sweep takes the per-address
evaluation as four hypothesis families – the run itself (hspine) and
three facts about the state it ends in – beside the two cover equations of
the tape and control families. All six are now theorems about the branched
evaluation, and this file feeds them in
(DescriptiveComplexity.Draw.Data.reaches_sweepB); then it does the same
one scale up, defining the stage families the machine iterates and feeding
DescriptiveComplexity.Draw.Data.reaches_main
(DescriptiveComplexity.Draw.Data.reaches_mainB), after which the only
hypotheses left about the run are semantic – which stage converges.
Two joints are crossed here. The evaluation layer is stated at an
arbitrary program and names the phases OuterPh (EvalPh dt.nv dt.PMF),
which is DescriptiveComplexity.Draw.Data.PF up to unfolding – hence
the @[reducible] on PF and PEF, without which instance search does
not connect the two spellings. And the program's zero/one are its own
arguments only up to unfolding, so the program is named once
(DescriptiveComplexity.Draw.Data.progOf, reducible) and pinned
explicitly wherever a pack's type mentions them.
The reduction's own machine: the program at the packs
DescriptiveComplexity.Draw.Data.varArgsOf computes. Reducible, so that
its zero and one are its arguments for unification and its rules are
the tower's by rfl.
Equations
Instances For
Dependency graph
One whole sweep of the evaluation, at the concrete program: from
the first address of the stretch to the last, one branched evaluation and
one advance per address, the tape and control families the sweep's own.
Every hypothesis DescriptiveComplexity.Draw.Data.reaches_sweep asks
about the evaluation is discharged here; what is left to the caller is the
geometry of the stretch and the end marker's position.
Dependency graph
The stage families #
DescriptiveComplexity.Draw.Data.reaches_main asks for the sweep and the
top address's evaluation per stage, beside the two equations that say how
one stage's exit becomes the next one's entry. Those equations are what the
families below are defined by, so they hold by rfl; and the four registers
the stages must keep – the marker, the mirror, the bottom and end marks –
ride, because the sweep, the spine, and the copy-back all leave them alone
(atSt, offSt and copySt write wk and old, nothing else).
The state one stage's top-address evaluation ends in – what its convergence test reads.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The control one stage's top-address evaluation ends in.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The pair the machine enters each stage with: the reduction's own at
stage zero, and at every later stage the previous stage's exit – its
marker and mirror back at the empty address and its stage tracks copied
back, which is reaches_main's hnextSt/hnextFs by construction.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.Draw.Data.stagePair hpl hlin hord mV semAt ltpAddr st₀ f₀ 0 = (st₀, f₀)
Instances For
Dependency graph
The tape family of the stages – reaches_main's entrySt.
Equations
- DescriptiveComplexity.Draw.Data.stageSt hpl hlin hord mV semAt ltpAddr st₀ f₀ n = (DescriptiveComplexity.Draw.Data.stagePair hpl hlin hord mV semAt ltpAddr st₀ f₀ n).1
Instances For
Dependency graph
The control family of the stages – reaches_main's entryFs.
Equations
- DescriptiveComplexity.Draw.Data.stageFs hpl hlin hord mV semAt ltpAddr st₀ f₀ n = (DescriptiveComplexity.Draw.Data.stagePair hpl hlin hord mV semAt ltpAddr st₀ f₀ n).2
Instances For
Dependency graph
reaches_main's hnextSt – by construction.
Dependency graph
reaches_main's hnextFs – by construction.
Dependency graph
A register no leg and no advance writes rides a whole stage – the
sweep by sweepSWG_ride, the top address's own evaluation by
stEndB_ride.
Dependency graph
The four registers the stages must keep: the marker back at the empty address, the mirror with it, the bottom mark, and the end marker where the reduction planted it. The first two are rewritten by the copy-back's own itinerary, the last two ride.
Dependency graph
The stage tracks, stage by stage #
The dictionary invariant is what turns reaches_main's two remaining
hypotheses into statements about DescriptiveComplexity.StepDef.partStage:
a stage's old tracks hold that stage over the logical interval, its
sweep writes the next stage into the new ones (sweep_new_trackOf), and
the copy-back moves those into old. The restriction to the interval is
not a convenience: outside it the tracks say nothing, an address there
being able to read a stage all the same – a tuple's address with one
non-argument cell added lies above the interval, non-argument tags being
the most significant.
A blank tape is stage 0: the empty stage writes an empty track
(trackOf_botAssign), so a tape whose stage tracks hold nothing holds stage
0 – everywhere, the interval included. This is stageSt_old's hold₀ at
the initial configuration.
Dependency graph
A stage's tracks hold that stage of the iteration, over the logical
interval: stage 0 is the initial tape, and each later one is the previous
stage's sweep copied back.
Dependency graph
What the convergence test compares: at the end of a stage the old
tracks still hold that stage.
Dependency graph
And the new tracks hold the next one: the stage's own sweep wrote
them, and the top address's evaluation leaves every other cell alone.
Dependency graph
The convergence test, semantically: a stage's test passes exactly
when its stage and the next agree at every address of the logical interval –
reaches_main's hconv/hnotconv as statements about
DescriptiveComplexity.StepDef.partStage and nothing else.
Dependency graph
reaches_main's hconv, from a stable stage: if the stage does not
move, neither does its dictionary.
Dependency graph
reaches_main's hnotconv, from a moving stage: the dictionary is
faithful over an interval that carries every tuple's own address
(assignment_ext_of_trackOf), so a stage that moves moves its tracks.
Dependency graph
MAIN, at the concrete program: from the first stage's entry at the
empty address to the out machinery's entry, one sweep and one convergence
test per stage, the stage families the reduction's own. Everything the
machine does is now discharged; what is left of the theorem is semantic –
which stage converges (hnotconv, hconv) – plus the geometry of the
logical interval.
Dependency graph
One stage of MAIN, when its convergence test fails: from a stage's
entry at the empty address to the next stage's, in at least one step. The
strictness is the sweep's: it leaves the head at the end-marked address, which
is not the empty one – and it is what
DescriptiveComplexity.TMData.not_acceptsSpace_of_chain asks of a link, so
that a diverging iteration keeps the machine off every halting
configuration.
Dependency graph
From the initial configuration to MAIN #
DescriptiveComplexity.Draw.Data.reaches_startup stops one rule short of
reaches_mainB: the mirror clear leaves the head on the marker at the empty
address in clearMir1P .run, and two steps join that to the evaluation's
first checkpoint – the exit rule, which steps right off the marker, and one
stay step of the checkpoint, which walks back left onto it. The two
presentations of the tape are one term (trackTape_val_eq_mir), so no
conversion is needed beyond naming it.
The startup's exit: at the marker, the exit guard holds and the rule steps right into the evaluation's first checkpoint.
Dependency graph
The checkpoint walks back to the marker: off the marker the
checkpoint's stay rule fires and moves left, which is the one step between
the startup's exit and reaches_mainB's starting configuration.
Dependency graph
From the initial configuration to MAIN's starting configuration: the
startup, its exit, and the walk back onto the marker. The state is
DescriptiveComplexity.Draw.Data.startupSt – the bottom mark at the empty
address, the end marker at the logical top, both registers home and every
stage track still clear – which is what reaches_mainB asks of its st₀.