The program, assembled #
The last shape layer: the tower of
DescriptiveComplexity.Problems.Wide.DrawTower is plugged together into
one DescriptiveComplexity.Draw.Assembly – the gates and the matrix into
one variable's machinery, one copy of that per fixed-point variable (and one
for the output), those into the evaluation's spine, and the spine into the
outer loop – so that DescriptiveComplexity.Draw.Assembly.prog and
DescriptiveComplexity.Draw.Assembly.sep deliver the program together with
its determinism.
The semantic parameters ride in one pack per variable
(DescriptiveComplexity.Draw.Data.VarArgs): the per-atom and per-block
parameter packs, the loop and fold updates, the stage slot the variable
writes and the accumulator its verdict is read from. Separation never reads
any of them, so the assembly is complete before their content is fixed –
that happens with the runs.
Where the machinery goes, in one glance (the flow of
DescriptiveComplexity.Draw.Data.varRuleF): the entry checkpoint enters
the gates; the gates' failing block clears the verdict flag and lands on the
verdict checkpoint, which either writes False into the stage slot and
leaves, or clears the VAL register and enters the matrix; the matrix's exit
is the post-matrix checkpoint, which folds and tests VAL for exhaustion –
increment and matrix again, or the exit checkpoint, which writes the
variable's next-stage bit at the marker.
The semantic parameters, per variable #
The parameter pack of a gate block's tag-branched domain evaluation.
Equations
- dt.GateArgs = DescriptiveComplexity.Draw.TagArgs A Q dt.SlotIx (Fintype.card dt.X.Tag) dt.X.Tag dt.domNr
Instances For
Dependency graph
The semantic parameters of one variable's machinery: the per-atom packs of its matrix and the per-block packs of its gates, the control updates the checkpoints carry, the stage slot it writes and the flags its verdicts are read from. Separation reads none of them.
The parameter pack of each classified atom of the matrix.
The control update entering each atom.
The parameter pack of each argument block's domain evaluation.
The well-shapedness question of each argument block.
- setFail : (Q → A) → (dt.SlotIx → A) → Q → A
Clearing the gates' verdict flag.
The control update entering each gate block.
The parameter pack of each quantified level's inner gate.
The well-shapedness question of each inner gate.
Clearing the level's polarity flag on a failed inner gate.
The control update entering each inner gate block – the first one resets the round's two flags.
- existFlag : Q
The ∃-levels' gate flag.
- allFlag : Q
The ∀-levels' gate flag.
- newSlot : dt.SlotIx
The stage slot the variable writes.
- gateFlag : Q
The gates' verdict flag.
- accBit : (Q → A) → Prop
The verdict the exit checkpoint writes.
- enterSt : (Q → A) → (dt.SlotIx → A) → Q → A
The control update entering the machinery: where the gates' verdict flag is set, since every block conjoins into it and a variable with no argument blocks never touches it.
- initSt : (Q → A) → (dt.SlotIx → A) → Q → A
The folds at the empty valuation.
- postFold : (Q → A) → (dt.SlotIx → A) → Q → A
The folds after a matrix pass.
The folds at an increment's carry block.
Instances For
Dependency graph
One variable's machinery, plugged in #
The rules of one variable's machinery, the gates and the matrix
plugged into the spine of
DescriptiveComplexity.Problems.Wide.DrawVar.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Every rule of one variable's machinery fires from a phase its site owns.
Dependency graph
A property of one variable machinery's phases and its exit holds of every
phase it can move to: the gates, the round and the matrix all stay inside, and
only the two verdict dispatches leave. This is the fact a
determinism-after-the-guess argument asks of the evaluation
(DescriptiveComplexity.Draw.Data.nexProg_uniqueFrom).
Dependency graph
One variable's machinery separates in-shape.
Dependency graph
The evaluation's machineries #
The rules of the evaluation's machineries: one copy of the variable machinery per spine position – its exit the next checkpoint – and the output's, whose exit is the accepting phase (the verdict itself is read from the control by the program's accepting predicate).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The entry phase of the machinery at a spine position.
Instances For
Dependency graph
The entry phase of the output's machinery.
Equations
Instances For
Dependency graph
Every rule of the evaluation's machineries fires from a phase its site owns.
Dependency graph
The evaluation's machineries separate in-shape.
Dependency graph
The whole program #
The rules of the evaluation: the spine over the machineries.
Instances For
Dependency graph
Every evaluation rule fires from a phase its site owns.
Dependency graph
The evaluation separates in-shape.
Dependency graph
The program's assembly: every site of the outer loop, of the
evaluation's spine, of each variable's machinery and of each atom's
subroutine, with its rules, its owner and its in-shape separation. This is
the EXPSPACE program's rule set, complete; DescriptiveComplexity.Draw.Assembly.prog
turns it into a DescriptiveComplexity.Draw.Prog and
DescriptiveComplexity.Draw.Assembly.sep into its determinism.
Instances For
Dependency graph
The rule names of the program: a site and one of its rules.
Instances For
Dependency graph
The machine #
The remaining fields of a DescriptiveComplexity.Draw.Prog are the
reduction's constants: the start phase and an all-clear pointer, the
accepting predicate – the output machinery's exit phase, with its verdict
read from the control, so that a false output halts and rejects – the blank
symbol, and the mark of DescriptiveComplexity.Draw.slotMark.
The EXPSPACE program: the assembled rule set with the reduction's constants.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The program is deterministic: separation by the assembly, site by site.
Dependency graph
The mirror track is clear at time zero – on the register file and off it
alike – so it is the track the initial tape is presented along
(DescriptiveComplexity.Draw.Prog.trackTape_initBack).