The matrix's sequencer at an arbitrary file #
DescriptiveComplexity.Problems.Wide.DrawInstSeq read at a coarse file: the
uniform stage discharge (ixKind_hStage), the control the sequencer folds
(ixKindExitCtl, ixMatFs), the matrix's run and the gates' run, all at the
registers of an arbitrary file rather than the elements of the universe.
The runs here are Relation.ReflTransGen: the atoms below them carry their
budgets, and the counting of the layers above the matrix is one pass, to be
made once the conversion reaches the evaluation.
The semantic data of one atom's run: an expansion atom needs the points its levels' registers encode; the other kinds need nothing.
Equations
- One or more equations did not get rendered due to their size.
- dt.IxKindSem zero one vi st elt (DescriptiveComplexity.Draw.MatAtom.eq a a_1) = PUnit.{1}
- dt.IxKindSem zero one vi st elt (DescriptiveComplexity.Draw.MatAtom.ord a a_1) = PUnit.{1}
- dt.IxKindSem zero one vi st elt (DescriptiveComplexity.Draw.MatAtom.stage i a) = PUnit.{1}
Instances For
Dependency graph
A semantic pack transports along the registers it reads.
DescriptiveComplexity.Draw.Data.KindSem sees the tape state only
through the levels' register sets, so a pack at one state is a pack at
every state with the same mirror and VAL. This is what lets one pack –
built at an address's entry state – serve every position of the spine and
every round of the VAL loop, whose states differ from it in the tracks
they have written and in the two scratch registers.
Equations
- dt.ixKindSemCast zero one vi hmir hval (DescriptiveComplexity.Draw.MatAtom.eq a a_1) s_2 = s_2
- dt.ixKindSemCast zero one vi hmir hval (DescriptiveComplexity.Draw.MatAtom.ord a a_1) s_2 = s_2
- dt.ixKindSemCast zero one vi hmir hval (DescriptiveComplexity.Draw.MatAtom.stage i a) s_2 = s_2
- dt.ixKindSemCast zero one vi hmir hval (DescriptiveComplexity.Draw.MatAtom.exp a ts) s_2 = ⟨↑s_2, ⋯⟩
Instances For
Dependency graph
A round trip of transports is the identity – the shape the VAL loop's bridge closes with: the pack leaves the round state, travels to the round's own state and to the state its matrix threads, and comes back.
Dependency graph
The control one atom's machinery leaves behind, by kind: the fold's exit at the comparison's or the expansion atom's family, the verdict store at the stage atom's read bit.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
An atom's machinery is blind to the two scratch registers: each
kind's loop reads the levels' register sets and its background at the
working cell, and each kind's exit reads the control alone
(DescriptiveComplexity.Draw.Data.cmpArgs_exitSt_congr and its two
siblings). The pack travels by
DescriptiveComplexity.Draw.Data.kindSemCast, which keeps its points.
This is the brick the whole threaded-versus-unthreaded bridge is built
from.
Dependency graph
The state an atom leaves: a stage atom normalizes SAV and TARGET to the home address (its random access writes them whatever they held), every other kind leaves the state alone.
Equations
- dt.ixKindEndSt vi v (DescriptiveComplexity.Draw.MatAtom.stage i a) st = dt.ixStageEndSt st elt v
- dt.ixKindEndSt vi v κ st = st
Instances For
Dependency graph
What one atom's machinery is charged, by kind. A comparison walks its
two coordinate loops once per tuple, an expansion its tag flags and then its
leaf reads once per point of the evaluation order, both at the width w a walk
to a named register costs; a stage atom pays its nine trips and thirteen
dispatches over one copy loop per argument, at the widths the caller supplies.
The bound is uniform in the atom's data – the expansion's are bounded by
ntgDim and nfDim – which is what makes the sequencer's fold a single
width.
Equations
- dt.ixKindCost A vi w wP wR wK (DescriptiveComplexity.Draw.MatAtom.eq a a_1) = 1 + ((2 + (w + 2) * 2) * (Nat.card (Lex (Fin dt.dd0 → A)) + 1) + 1)
- dt.ixKindCost A vi w wP wR wK (DescriptiveComplexity.Draw.MatAtom.ord a a_1) = 1 + ((2 + (w + 2) * 2) * (Nat.card (Lex (Fin dt.dd0 → A)) + 1) + 1)
- dt.ixKindCost A vi w wP wR wK (DescriptiveComplexity.Draw.MatAtom.exp a a_1) = 1 + ((w + 2) * dt.ntgDim + 2 + ((2 + (w + 2) * dt.nfDim) * (Nat.card (Lex (Fin dt.eDim → A)) + 1) + 1))
- dt.ixKindCost A vi w wP wR wK (DescriptiveComplexity.Draw.MatAtom.stage iv a) = 5 * wP + 2 * wR + 2 * wK + ((2 * w + 8) * (Nat.card (Lex (Fin dt.dd0 → A)) + 1) + 1 + 1) * dt.d.B.arity iv + 13
Instances For
Dependency graph
The uniform stage discharge, threaded, on a clock: as
DescriptiveComplexity.Draw.Data.ixKind_hStage_thread with the atom's cost
counted – DescriptiveComplexity.Draw.Data.ixKindCost, whatever the kind.
Dependency graph
The uniform stage discharge, threaded: as
DescriptiveComplexity.Draw.Data.kind_hStage but with no boundary
discipline assumed – the atom's exit state is
DescriptiveComplexity.Draw.Data.kindEndSt, which normalizes SAV and
TARGET exactly when the atom is a stage atom.
Dependency graph
The uniform stage discharge, on a clock: as
DescriptiveComplexity.Draw.Data.ixKind_hStage with the atom's cost counted –
DescriptiveComplexity.Draw.Data.ixKindCost, whatever the kind.
Dependency graph
The uniform stage discharge: whatever the kind, the atom's machinery
runs from its entry phase one cell right of the marker to the exit phase
back there, leaving DescriptiveComplexity.Draw.Data.kindExitCtl in the
control and the tape untouched.
Dependency graph
The matrix, assembled #
What the matrix charges one atom: the largest of its atoms' costs.
A clocked caller that has no reason to prefer a coarser width takes this
one, and the fold's (w + 2) * natOf vi + 1 is then a closed expression in
the file's widths.
Equations
- dt.ixMatCost A vi w wP wR wK = Finset.univ.sup fun (a : Fin (dt.natOf vi)) => dt.ixKindCost A vi w wP wR wK (dt.kindOf vi a)
Instances For
Dependency graph
The control thread across the matrix's atoms: each atom's machinery
entered through the dispatch's enterSt, its exit control the next
atom's input.
Equations
Instances For
Dependency graph
The threaded states of the matrix #
An atom's exit state keeps the marker, the mirror, the bottom mark and the VAL register: only SAV and TARGET can move.
Dependency graph
The state after the matrix's first n atoms: each stage atom
normalizes SAV and TARGET, the other kinds change nothing.
Equations
Instances For
Dependency graph
The threaded states differ from the entry state in SAV and TARGET alone – so every hypothesis the atoms need at them is the entry state's.
Dependency graph
A tape state is determined by its two scratch registers, given the other seven – the shape every threaded state of the machinery has against the state it started from.
Dependency graph
The remaining registers an atom leaves alone – the three
DescriptiveComplexity.Draw.Data.kindEndSt_fields does not list, so
that the seven together pin the state down to its SAV and TARGET.
Dependency graph
The same two, along the matrix's whole chain of atoms.
Dependency graph
The matrix's threaded state is its entry state with the two scratch
registers rewritten – the sharpening of
DescriptiveComplexity.Draw.Data.matSt_fields that lets the loop above
thread the two registers instead of the whole state, and with them keep
every semantic pack at the state it was built for.
Dependency graph
A foreign verdict slot survives one atom's machinery: whatever the kind, its exit control writes its own verdict slot and scratch, never another atom's.
Dependency graph
An accumulator slot survives one atom's machinery: no atom's exit control ever writes the inner fold's vector.
Dependency graph
The inner fold's vector survives the whole matrix: no atom writes it, so the thread's accumulators after all atoms are the entry's.
Dependency graph
An atom's verdict bit survives the rest of the matrix: the thread's
value at atom a's slot after all atoms is what atom a's own machinery
wrote.
Dependency graph
The semantic data of every atom, from one encoded valuation: the expansion atoms' points are the valuation's, everything else needs nothing.
Equations
- dt.ixMkKindSem zero one vi st w hENC (DescriptiveComplexity.Draw.MatAtom.eq a a_1) = PUnit.unit
- dt.ixMkKindSem zero one vi st w hENC (DescriptiveComplexity.Draw.MatAtom.ord a a_1) = PUnit.unit
- dt.ixMkKindSem zero one vi st w hENC (DescriptiveComplexity.Draw.MatAtom.stage i a) = PUnit.unit
- dt.ixMkKindSem zero one vi st w hENC (DescriptiveComplexity.Draw.MatAtom.exp a ts) = ⟨fun (ℓ : Fin k) => w (ts ℓ), ⋯⟩
Instances For
Dependency graph
The transport of a built pack is the built pack: mkKindSem puts
the valuation's points in and nothing else, and the proof components are
irrelevant.
Dependency graph
One round's agreement is the padded bits': given the two registers hold encodings, the machine's per-tuple question is the encodings'.
Dependency graph
The equality atom's verdict is point equality: agreement at every tuple decides the two encoded points.
Dependency graph
The order atom's verdict is the chosen order: agreement everywhere, or a first difference with the second block holding the cell, is exactly the binary order of the two encodings – the order the reduction puts on the points.
Dependency graph
One atom's own verdict bit is its truth: whatever the kind, the bit
the exit control writes in the atom's slot is MatAtom.holds at the
encoded valuation.
Dependency graph
The matrix's verdicts, at the points: after the whole matrix, atom
a's slot holds MatAtom.holds of its kind at the encoded valuation –
the hav input of DescriptiveComplexity.Draw.Data.postLeaf_iff_qfValue,
verbatim.
Dependency graph
The control thread across the matrix's atoms, threaded: as
DescriptiveComplexity.Draw.Data.matFs, with each atom's exit control
computed at the state that atom actually runs at.
Equations
Instances For
Dependency graph
A threaded state of the matrix is the entry state up to the two
scratch registers – matSt_eq in the form the congruences take.
Dependency graph
The matrix is blind to the two scratch registers: atom by atom,
kindExitCtl_congr_scratch.
Dependency graph
The threaded matrix is the unthreaded one: an atom's machinery
reads the levels' registers and its background at the working cell
(kindExitCtl_congr_scratch), and the threading rewrites SAV and TARGET
alone. This is the bridge between the control the run produces and the
control the semantics is stated at.
Dependency graph
The matrix's run, threaded, on a clock: as
DescriptiveComplexity.Draw.Data.ixMatrix_run_thread with the atoms
counted – one atom's width, one dispatch and one step back per atom, and one
step to leave.
Dependency graph
The matrix's run, threaded: as
DescriptiveComplexity.Draw.Data.ixMatrix_run with no boundary discipline
assumed – the tape ends in the threaded state
DescriptiveComplexity.Draw.Data.ixMatSt, which differs from the entry
state in SAV and TARGET alone, and only if the matrix has a stage atom.
Dependency graph
The matrix's run, on a clock: as
DescriptiveComplexity.Draw.Data.ixMatrix_run with the atoms counted – one
atom's width, one dispatch and one step back per atom, and one step to
leave.
Dependency graph
The matrix's run: from the checkpoint before the first atom at the marker to the exit phase one cell to its right after the last, the verdict slots holding each atom's fold, the tape untouched.
Dependency graph
The gates, assembled #
What one gate block's machinery is charged: the file test's sweep of
the registers, the passing dispatch, the walk back and the tag flags, then the
domain evaluation's leaf reads once per point of the evaluation order. Uniform
in the block – the tag count and the read count are bounded by ntgDim and
nfDim – so the gate sequence's fold is a single width.
Equations
Instances For
Dependency graph
The control thread across the gates' blocks (the all-pass path):
each block's machinery entered through the dispatch's enterSt, its
conjoining exit the next block's input.
Equations
Instances For
Dependency graph
The gates' run at a gated address, on a clock: as
DescriptiveComplexity.Draw.Data.ixGates_run with the blocks counted – one
block's width, its dispatch and the step back per block, and one step to
leave.
Dependency graph
The gates' run at a gated address: every block passes its shape test, every domain evaluation runs on its block's decoded tag, and the sequence exits with the conjoined verdict in the flag.
Dependency graph
The gates' run at a junk address, on a clock: as
DescriptiveComplexity.Draw.Data.ixGates_run_fail with the passing prefix
counted, the failing dispatch and the failing block's sweep on top.
Dependency graph
The gates' run at a junk address: the blocks below ℓ₀ pass, block
ℓ₀'s shape test fails, and the run leaves the whole gate sequence through
the failing exit with the fail store applied.
Dependency graph
The gates' verdict, characterized: after the first n blocks of
the all-pass path, the flag holds exactly when it held at entry and every
gated block's decoded assignment satisfies its tag's domain sentence.