Where the states, the symbols and the transitions sit #
The instance the reduction emits has universe Draw.Tag R P K × (Fin dd → A), and
its states, symbols and transitions are elements of it. This file says which
elements they are.
The layout is the simplest one that works. A state, a symbol and a transition each
carry a payload of c coordinates – c is the program's choice, and dd is
at least c – and the coordinates beyond the payload hold a designated element.
That padding is not decoration: without it an element would have n^(dd-c)
spellings, and the machine's promises are that there is one start state, one
blank, and at most one transition per state and symbol
(DescriptiveComplexity.TMData.Deterministic). A canonical spelling is what makes
those provable.
What distinguishes the three is the tag, which is also what carries everything about a transition except its data: its rule index. So
- a state is
(phase p, pad w)– the call site in the tag, the pointer inw; - a symbol is
(sym, pad w)– the tracks inw(DrawTracks); - a transition is
(ctrl r, pad w)– the rule in the tag, its data inw.
Two elements with different tags are different, and two with the same tag differ
exactly when their payloads do
(DescriptiveComplexity.Draw.pad_injective). Those are the distinctness facts the
well-formedness and determinism obligations are discharged from.
Canonical payloads #
The canonical tuple carrying a payload: the payload in the first c
coordinates, the designated element in the rest.
Equations
- DescriptiveComplexity.Draw.pad zero w j = if h : ↑j < c then w ⟨↑j, h⟩ else zero
Instances For
Dependency graph
Reading a payload back.
Equations
- DescriptiveComplexity.Draw.unpad hc v i = v ⟨↑i, ⋯⟩
Instances For
Dependency graph
Being canonically padded: nothing but the designated element beyond the payload. This is the condition that gives an element one spelling, and so the machine's promises their uniqueness.
Equations
- DescriptiveComplexity.Draw.IsPad c zero v = ∀ (j : Fin dd), c ≤ ↑j → v j = zero
Instances For
Dependency graph
Dependency graph
Dependency graph
Dependency graph
A payload reads back.
Dependency graph
A canonically padded tuple is the padding of what it carries, so the two
descriptions of an element – “it is pad of something” and “it is padded” – are
the same.
Dependency graph
Distinct payloads give distinct tuples, which is where every uniqueness promise of the emitted machine comes from.
Dependency graph
The three kinds of element #
A state: the call site in the tag, the pointer in the payload.
Equations
Instances For
Dependency graph
A symbol: the tracks in the payload.
Equations
Instances For
Dependency graph
A transition: the rule in the tag, the rule's data in the payload.