Canonical compressed relations used by the bounded runner #
The physical block layout remembers only that a finite relation denotes its concrete flag
block. Completeness also needs the converse normalization fact: because relational
composition is associative, every such provenance tree is equal to the canonical
right-associated relation compressedFlags.
Every provenance tree has a canonical nonempty flag-list presentation.
Event-free prefixes are unary pop paths #
If every productive event of a parse lies strictly below the occurrence selected by a route, that route crosses no binary node. This is the semantic reason an interval between two consecutive event cuts can be represented by one atomic compressed relation.
A whole first block with no event at or above its last flag has an atomic viable pop
continuation. The result works for the relation physically stored by BlockLayout, not only
for the syntactically canonical relation, because denotation provenance is unique.
Every productive event of parse is aligned with a whole compressed-block boundary.
- boundary (d : ℕ) : d ∈ parse.eventDepths → BlockLayout.Boundary blocks d
Instances For
Root-relative ghost schedule interfaces #
Package an arbitrary concrete parse task at its exact input interval.
Equations
- IndexedGrammar.Aho.scheduleTaskOfParse parse pre post input_eq mode = { A := A, stack := stack, yield := w, parse := parse, pre := pre, post := post, input_eq := input_eq, mode := mode }
Instances For
Ghost analogue of wordConfig: focus the first continuation atom.
Equations
- IndexedGrammar.Aho.scheduleWordCursor alpha [] = { left := alpha ++ [IndexedGrammar.Aho.ScheduleAtom.dollar], focus := IndexedGrammar.Aho.ScheduleAtom.hash, right := [] }
- IndexedGrammar.Aho.scheduleWordCursor alpha (z :: zs) = { left := alpha ++ [IndexedGrammar.Aho.ScheduleAtom.dollar], focus := z, right := zs }
Instances For
Build a scheduler state once interval arithmetic and the ownership invariant are known.
Equations
- IndexedGrammar.Aho.scheduleStateOfCursor inputPos hpos cursor invariant = { inputPos := inputPos, inputPos_le := hpos, cursor := cursor, invariant := invariant }
Instances For
The reusable generic-owner bank, partitioned into labels present on persistent indices and
labels still free. The bank has exactly 4|input| elements even though labels inhabit the
larger Fin (6|input|) carrier used to keep them disjoint from semantic tickets.
- all_nodup : (cursor.indexOwners ++ self.free).Nodup
- all_perm : (cursor.indexOwners ++ self.free).Perm (genericOwnerRange g input)
Instances For
Every label in the generic owner universe is either present or remains free.
An owner absent from the work tape is available in the exhaustive free pool.
Every persistent index owner comes from the generic pool universe.
Every free label also comes from the generic pool universe.
Exact conservation of the reusable bank.
The generic bank, rather than the larger ambient owner carrier, bounds persistent indices.
A free reusable label leaves strict room for one more persistent index.
A nonempty free suffix supplies a generic label directly, without attempting to allocate a semantic event ticket.
Scratch is not a reusable generic label and therefore cannot occur on a persistent index described by this pool.
Transient is likewise disjoint from every persistent owner described by the generic pool.
Start cursor for a plain parse task.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Start cursor for a live parse task.
Equations
- One or more equations did not get rendered due to their size.