Writing the emitted machine down #
DescriptiveComplexity.Problems.Wide.DrawTable says what the eleven relations of
a wide-machine instance are, as predicates on tagged tuples; the definability
layer (DescriptiveComplexity.Problems.Wide.DrawFactor and the files above it)
says that every attribute of every rule is decided by one formula for every
instance. This file joins the two: the shapes each relation has, as formulas,
with their realizations.
Where the coordinates go #
A defining formula of an n-ary relation has free variables Fin n × Fin dd:
the i-th argument's tuple is fun j => v (i, j). A rule's payload occupies
the first c = card (CtlIx ⊕ SlotIx) of those, so the guard and payload
formulas the definability layer hands over – which live over Fin c and over
Fin c ⊕ Fin c – are relabeled onto (i, castLE hpl k) and nothing else
happens to them.
What a tag decides #
Everything a tag decides is decided when the formula is built, by
DescriptiveComplexity.Draw.sideF: which rule a transition is, and so its two
phases and its direction; which phase a state is in; that a symbol is a symbol.
What is left for the formula is the shape – a tuple is canonically padded
(DescriptiveComplexity.canonF, read at the layout's IsPad by
DescriptiveComplexity.Draw.realize_canonF_isPad) – and the payload.
A condition the tag decides #
A condition decided when the formula is built.
Instances For
Dependency graph
Dependency graph
The coordinates a payload occupies #
The coordinates of the i-th argument.
Equations
- DescriptiveComplexity.Draw.argVar n dd i j = (i, j)
Instances For
Dependency graph
The coordinates the i-th argument's payload occupies.
Equations
- DescriptiveComplexity.Draw.payVar n hc i k = (i, Fin.castLE hc k)
Instances For
Dependency graph
A guard and a payload, relabeled #
A guard, at the payload of the i-th argument.
Equations
Instances For
Dependency graph
A payload written from another, at two arguments.
Equations
- DescriptiveComplexity.Draw.payAt hc i i' χ = FirstOrder.Language.Formula.relabel (Sum.elim (DescriptiveComplexity.Draw.payVar n hc i) (DescriptiveComplexity.Draw.payVar n hc i')) χ
Instances For
Dependency graph
Dependency graph
Dependency graph
The three shapes a defining formula has #
Every one of the eleven relations is one of three shapes: a guarded padded tuple (a transition, an accepting state), an attribute – an element of a tag the formula names whose payload is written from another's – or a constant, a tag and the all-clear tuple.
Being a given padded tuple splits into being padded and carrying the payload, which is what a defining formula can say separately.
Dependency graph
A guarded padded tuple: the tag decides everything but the shape, and the guard is the definability layer's formula at the payload.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
An attribute of a transition: an element of the tag the rule names, whose payload the rule writes from the transition's own.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Dependency graph
Dependency graph
A constant: a tag and the all-clear tuple #
A constant: a tag and the all-clear tuple – the start state, the blank.
Equations
Instances For
Dependency graph
Dependency graph
The two extremes of the interpreted universe #
The input channel's mark asks whether a cell is the first or the last of the tape, and the tape is ordered block-major. It would be a mistake to write those as quantifiers over the interpreted universe: in that order an element is least exactly when its tag is the least tag and its tuple is all-clear, and greatest exactly when its tag is the greatest and its tuple is all-set – a decision the tag makes, conjoined with a shape formula.
A tuple below every other is the all-clear one.
Dependency graph
A tagged tuple below every other: the least tag and the all-clear tuple.
Dependency graph
A tuple above every other is the all-set one.
Dependency graph
A tagged tuple above every other: the greatest tag and the all-set tuple.
Dependency graph
The static data of a rule, extracted #
DescriptiveComplexity.Draw.URuleDefinable says the two phases, the direction,
the guard and the two payloads of a rule do not depend on the instance. What an
interpretation writes down is those, and this is where they are named.
The rule names of the emitted machine, as a type the instance does not
mention: one name per shape of each site. Both the site type and its shapes
belong to the program, so the type is taken at an arbitrary pair; the
space-bounded program's own are Draw.Data.SF and Draw.Data.SFSh, the clocked
program's are its own.
Equations
- DescriptiveComplexity.Draw.Data.RTagOf S Sh = ((i : S) × Sh i)
Instances For
Dependency graph
The tags of the interpreted universe, at an arbitrary site type and an arbitrary phase type.
Equations
- dt.ITagOf S Sh P = DescriptiveComplexity.Draw.Tag (DescriptiveComplexity.Draw.Data.RTagOf S Sh) P dt.KIx
Instances For
Dependency graph
The rule names of the space-bounded program.
Equations
- dt.RTag = DescriptiveComplexity.Draw.Data.RTagOf dt.SF dt.SFSh
Instances For
Dependency graph
The tags of the space-bounded program's interpreted universe.
Instances For
Dependency graph
The phase a rule fires from.
Equations
Instances For
Dependency graph
The phase it moves to.
Equations
Instances For
Dependency graph
Its direction.
Equations
Instances For
Dependency graph
Its guard, as a formula over the payload coordinates.
Equations
Instances For
Dependency graph
The payload of the state it moves to, as a formula.
Equations
Instances For
Dependency graph
The payload of the symbol it writes, as a formula.
Equations
Instances For
Dependency graph
The payload of the state a rule fires in: the pointer, unchanged. One formula for every rule.
Equations
Instances For
Dependency graph
And of the symbol it reads: the tracks, unchanged.
Instances For
Dependency graph
What they say #
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
The transitions, and their five attributes #
Each is one of the shapes above at the data the tag names: a transition is a guarded padded tuple, its four payload attributes are attributes, and its direction is decided outright.
Being a transition.
Equations
Instances For
Dependency graph
Moving the head right.
Equations
Instances For
Dependency graph
The state a transition applies in.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.Draw.Data.srcF hpl hdef t t' = ⊥
Instances For
Dependency graph
The symbol it reads.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.Draw.Data.readF hpl t t' = ⊥
Instances For
Dependency graph
The state it moves to.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.Draw.Data.dstF hpl hdef t t' = ⊥
Instances For
Dependency graph
The symbol it writes.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.Draw.Data.writeF hpl hdef t t' = ⊥
Instances For
Dependency graph
What they say #
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Two more shapes: a bit, and an all-set tuple #
A variable holds the bit of a condition.
Equations
Instances For
Dependency graph
Every coordinate of a tuple is the greatest element: the mirror of
DescriptiveComplexity.canonF at length 0.
Equations
- DescriptiveComplexity.Draw.topTupF u = DescriptiveComplexity.listInf (List.map (fun (j : Fin D) => DescriptiveComplexity.topF (u j)) (List.finRange D))
Instances For
Dependency graph
Dependency graph
Dependency graph
The accepting predicate of a phase, as a formula.
Equations
Instances For
Dependency graph
Dependency graph
Being an accepting state.
Equations
Instances For
Dependency graph
Being the start state: the start phase and the all-clear tuple.
Equations
Instances For
Dependency graph
Being the blank: the alphabet tag and the all-clear tuple.
Equations
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
The input channel #
The one relation with content. The mark a cell starts with
(DescriptiveComplexity.Draw.slotMark) is a register file: the register flag
is set, the first and last cells of the tape are flagged, the block flags decode
the cell's tag, the name slots carry the cell's own first dd₀ coordinates and
the padding flag says the rest are clear. Every one of those is a tag decision,
a shape formula, or an equality of variables – the two extremes because of
DescriptiveComplexity.Draw.isLeast_tagTupleLe_iff and its dual.
What one slot of a cell's mark holds, at the variable that slot occupies.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.Draw.Data.markSlotF t y DescriptiveComplexity.Draw.Slot.reg = DescriptiveComplexity.topF y
- DescriptiveComplexity.Draw.Data.markSlotF t y x✝ = DescriptiveComplexity.botF y
Instances For
Dependency graph
One coordinate of a cell's mark: the control slots of a symbol are clear, the track slots are the register file's.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The whole mark, coordinate by coordinate.
Equations
Instances For
Dependency graph
The input channel: the cell of an element holds that element's mark.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
The register channel's own mark #
The mark of DescriptiveComplexity.Draw.regSlotMark differs from the one above
in a single slot – regFirst, which at the register channel says «greatest
element carrying no argument block» rather than «least element» – so the
formulas differ in a single conjunct, and everything else is reused.
What the regFirst slot has to say, in tag and tuple: the tag is one of
the greatest carrying no argument block, and the tuple is the greatest. This is
the reading DescriptiveComplexity.Draw.isGreatest_tagTupleLe_iff gives for the
whole universe, restricted to the elements below the argument tags.
Dependency graph
What one slot of a cell's mark holds at the register channel: the mark
above, with regFirst reading the file's own first register.
Equations
- One or more equations did not get rendered due to their size.
- DescriptiveComplexity.Draw.Data.markSlotRegF t y x✝ = DescriptiveComplexity.Draw.Data.markSlotF t y x✝
Instances For
Dependency graph
@[inherit_doc markSlotRegF]
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The whole mark of the register channel, coordinate by coordinate.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The register channel: the cell of an element holds that element's mark, the mark being the register channel's.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
A payload of clear elements pads to a tuple of clear elements.
Dependency graph
The pointer the machine starts with is clear at every slot.
Dependency graph
And so is the blank.
Dependency graph
A mark the interpretation can write down: what a cell holds before the
machine runs, together with the formula that defines the input channel. The
space-bounded program is handed a register file (regFileMark); the clocked
program starts on a blank tape and builds its own file (blankMark).
What each cell holds.
Which elements the channel writes for. All of them at the channel of
DescriptiveComplexity.WideAccept; the register channel ofDescriptiveComplexity.WideRegAcceptrestricts it, and the restriction is what puts the file it hands over inside the working region.- form : dt.ITagOf S Sh P → dt.ITagOf S Sh P → (L.sum FirstOrder.Language.order).Formula (Fin 2 × Fin dt.dd)
The formula the interpretation writes for the input channel.
- spec (e : Env L) (t t' : dt.ITagOf S Sh P) (v : Fin 2 × Fin dt.dd → e.α) : (self.form t t').Realize v ↔ self.marked e (t, fun (j : Fin dt.dd) => v (0, j)) ∧ (t', fun (j : Fin dt.dd) => v (1, j)) = symElt e.zero (syPl e.zero (self.mark e (t, fun (j : Fin dt.dd) => v (0, j))))
What that formula says: the first element is one the channel writes for, and the second is its cell.
Instances For
Dependency graph
The register file, as a mark: DescriptiveComplexity.Draw.slotMark
defined by inpF.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The register file, at the argument elements only: the mark a program
emitted into the register channel of DescriptiveComplexity.WideRegAccept
writes. The content is DescriptiveComplexity.Draw.regSlotMark's, which differs
from the segment channel's in the regFirst slot alone; what is new is that the
channel writes for the argument-tagged elements and one element below them,
the greatest carrying no argument block. That element is what puts the file the
channel hands over above the working area: every cell holds it, and no logical
address reaches down to it
(DescriptiveComplexity.wmSetLt_wmRegSeg_of_above).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
A blank tape, as a mark: every cell is the blank, so the channel says no more than that the cell is a symbol with a clear payload.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The interpretation #
Eleven relation symbols, eleven formulas – the ten above and the order, which
is DescriptiveComplexity.lexLeF, the tags compared when the formula is
built.
The program the interpretation writes down #
The program at one instance: the rules the definability layer hands
over, with the reduction's constants – an all-clear pointer, an all-clear
blank and the register file of DescriptiveComplexity.Draw.slotMark.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The emitted machine, written down: an interpretation of the wide-machine vocabulary in the ordered source vocabulary, tagged by the program's own tags.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The structure the interpretation puts on the emitted universe.
Equations
- DescriptiveComplexity.Draw.Data.wideStr hpl hdef hacc p₀ mk e = (DescriptiveComplexity.Draw.Data.drawInterp hpl hdef hacc p₀ mk).mapStructure e.α
Instances For
Dependency graph
The valuation a unary relation's argument supplies.
Dependency graph
The valuation a binary relation's arguments supply.
Dependency graph
The interpreted structure reads the table #
Eleven definitional unfoldings: each relation of the interpreted structure is
its formula at the tags of its arguments, and each formula was built to say
what the table says. The only two rewrites are the two phases of a rule, which
DescriptiveComplexity.Draw.Data.srcPhOf and dstPhOf name.
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
The interpreted structure reads the program's table: the eleven
obligations of DescriptiveComplexity.Draw.Table.Reads, one per relation
symbol. Everything the run layer proves is proved under exactly this.