Synchronizing concrete empty returns #
Empty-list occurrences forget the stack symbol removed by their introducing
edge. The concrete edge types below retain that edge together with the exact
outer stack context supplied by ConcreteOperationalSpine. They are kept
independent of EmptyReturns so that the latter can adapt its syntax-facing
edge types without creating an import cycle.
The two impossible operational outcomes of a genuinely distinct pair of useful empty returns. This definition is syntax-independent and can be shared by both the concrete synchronization proof and its grammar adapter.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A concrete normalized edge introducing an active list q [] q node.
The chosen terminal completion and exact physical context are existential in
the constructors and therefore do not burden the syntax-facing indices.
- read {Q T S : Type} [Fintype Q] [Fintype T] [Fintype S] {M : DPDA Q T S} {p : List (symbol T (Nonterminal M))} {suffix preWord : List T} {context : List (StackSymbol M)} {source : State M} {a : T} {Z : StackSymbol M} {q : State M} (parent : ConcreteOperationalSpine M p (PDA_to_CFG.N.single source Z q) suffix preWord context) (htransition : (q, []) ∈ (emptyStackPDA M).transition_fun source a Z) (hrule : (PDA_to_CFG.N.single source Z q, [symbol.terminal a, symbol.nonterminal (PDA_to_CFG.N.list q [] q)]) ∈ (characteristicGrammar M).rules) : ConcreteEmptyEdge M (p ++ [symbol.terminal a]) q suffix
- epsilon {Q T S : Type} [Fintype Q] [Fintype T] [Fintype S] {M : DPDA Q T S} {p : List (symbol T (Nonterminal M))} {suffix preWord : List T} {context : List (StackSymbol M)} {source : State M} {Z : StackSymbol M} {q : State M} (parent : ConcreteOperationalSpine M p (PDA_to_CFG.N.single source Z q) suffix preWord context) (htransition : (q, []) ∈ (emptyStackPDA M).transition_fun' source Z) (hrule : (PDA_to_CFG.N.single source Z q, [symbol.nonterminal (PDA_to_CFG.N.list q [] q)]) ∈ (characteristicGrammar M).rules) : ConcreteEmptyEdge M p q suffix
- split {Q T S : Type} [Fintype Q] [Fintype T] [Fintype S] {M : DPDA Q T S} {p : List (symbol T (Nonterminal M))} {suffix preWord leftWord : List T} {context : List (StackSymbol M)} {source : State M} {Z : StackSymbol M} {q : State M} (parent : ConcreteOperationalSpine M p (PDA_to_CFG.N.list source [Z] q) suffix preWord context) (hlength : ↑[Z].length ≤ PDA_to_CFG.max_push (emptyStackPDA M)) (hrule : (PDA_to_CFG.N.list source [Z] q, [symbol.nonterminal (PDA_to_CFG.N.single source Z q), symbol.nonterminal (PDA_to_CFG.N.list q [] q)]) ∈ (characteristicGrammar M).rules) (hleft : (characteristicGrammar M).DerivesRightmost [symbol.nonterminal (PDA_to_CFG.N.single source Z q)] (List.map symbol.terminal leftWord)) : ConcreteEmptyEdge M (p ++ [symbol.nonterminal (PDA_to_CFG.N.single source Z q)]) q suffix
Instances For
The transition-generated concrete empty edges, excluding structural split-right introductions.
- read {Q T S : Type} [Fintype Q] [Fintype T] [Fintype S] {M : DPDA Q T S} {p : List (symbol T (Nonterminal M))} {suffix preWord : List T} {context : List (StackSymbol M)} {source : State M} {a : T} {Z : StackSymbol M} {q : State M} (parent : ConcreteOperationalSpine M p (PDA_to_CFG.N.single source Z q) suffix preWord context) (htransition : (q, []) ∈ (emptyStackPDA M).transition_fun source a Z) (hrule : (PDA_to_CFG.N.single source Z q, [symbol.terminal a, symbol.nonterminal (PDA_to_CFG.N.list q [] q)]) ∈ (characteristicGrammar M).rules) : ConcreteEmptyTransitionEdge M (p ++ [symbol.terminal a]) q suffix
- epsilon {Q T S : Type} [Fintype Q] [Fintype T] [Fintype S] {M : DPDA Q T S} {p : List (symbol T (Nonterminal M))} {suffix preWord : List T} {context : List (StackSymbol M)} {source : State M} {Z : StackSymbol M} {q : State M} (parent : ConcreteOperationalSpine M p (PDA_to_CFG.N.single source Z q) suffix preWord context) (htransition : (q, []) ∈ (emptyStackPDA M).transition_fun' source Z) (hrule : (PDA_to_CFG.N.single source Z q, [symbol.nonterminal (PDA_to_CFG.N.list q [] q)]) ∈ (characteristicGrammar M).rules) : ConcreteEmptyTransitionEdge M p q suffix
Instances For
Forgetting the transition-only tag gives the corresponding concrete empty edge.
An empty edge at a prefix which strictly extends another prefix by terminals cannot be a structural split-right edge: such an edge ends in a nonterminal marker. It is therefore transition-generated.
The child of a concrete empty edge is itself a concrete normalized spine, with the same exact outer context carried by the introducing parent.
Exact accepting cut carried by a concrete empty edge.
Every concrete empty edge inherits the last-visible-event decomposition of its exact child spine.
Re-complete the visible prefix of a concrete empty edge by an arbitrary terminal word. The ancestry retained by the edge is independent of the particular productive completion originally used to make it concrete.
Re-completing a transition-tagged edge is just the corresponding operation on its underlying concrete empty edge.
Last-visible-event decomposition after a deliberately chosen completion of the shared visible prefix. This is the form needed to compare two empty returns whose original concrete witnesses used unrelated completions.
An empty-stack list nonterminal has no zero-visible child. Every
zero-visible constructor expects either a single, a nonempty list stack,
or the start marker, so a tail beginning at list q [] target is literal
reflexivity.
Every concrete empty edge has at least one productive completion of its visible prefix.
Terminal displacement of two empty-return prefixes #
Equality after appending terminal suffixes exposes the precise terminal displacement between the two visible prefixes. Keeping this lemma in the concrete synchronization layer lets the hard semantic proof choose aligned terminal completions before returning to the syntax-facing adapter.
Net-pop runs at a chosen completion #
Operational factorization of a concrete empty return after deliberately choosing a terminal completion of its visible prefix.
Equations
- One or more equations did not get rendered due to their size.
Instances For
One-step specialization for a transition-generated concrete empty return.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Forgetting the one-step tag gives the ordinary concrete return run.
At any chosen completion an empty edge is either itself the last visible anchor (read or split-right), or its child is reached through a genuinely epsilon-bearing zero-visible tail.
Two empty returns which are both their own last visible anchors have the same return state. Read anchors use deterministic output synchronization; split-right anchors already share their displayed middle state.
Any concrete spine aligned with a read/pop empty return is itself an empty-stack list cut in the same state. Deterministic read output fixes the aligned visible anchor, and an empty-list anchor has no proper zero-visible descendant.
A read/pop empty return is synchronized with every other empty return at the same retained prefix. Aligning the other edge at the read completion either gives another direct empty-list anchor, or makes its last visible anchor a read with the same deterministic output. In the latter case that anchor already has empty stack text, so its zero-visible tail is reflexive.
Symmetric orientation of concreteReadEmptyReturn_samePrefix_state_eq,
for a read/pop return displayed on the right.
A concrete spine whose visible prefix ends in a terminal has a retained last read edge. The theorem exposes that edge together with the entire zero-visible tail from its list child to the original endpoint; this is the ancestry-preserving form needed by displaced empty-return comparisons.
Walking backward through a nonempty terminal extension exposes the read parent of its first terminal. The proof peels last-read anchors from the right, preserving the concrete retained ancestry at every step.
Once a read transition has popped its displayed symbol, no active
concrete spine can occur at a strict terminal extension of that empty-return
prefix. Walking the extension back to its first read produces a single
node at the old prefix, while deterministic alignment with the pop says that
every node there is an empty-list cut.
Every concrete empty edge has a net-pop run at every chosen terminal completion of its visible prefix.
A transition-tagged concrete edge has a one-step net-pop run at every chosen terminal completion.
Oriented cuts for a nonempty terminal displacement #
If the second visible prefix extends the first by a nonempty terminal block, the first empty-return cut processes exactly that block to the second cut. The witnesses retain both useful continuations for the subsequent net-pop crossing argument.
If the first visible prefix extends the second by a nonempty terminal block, the same comparison is oriented from the second return cut to the first. Here the transferred suffix equation itself supplies the common first symbol because the displacement is nonempty.
Concrete version of the syntax-facing paired empty-return classifier. The proof below will turn every genuinely distinct pair into one of the two public operational obstructions.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The genuinely semantic residual, with the transition witness used as the left edge rather than carried redundantly beside another proof with the same indices.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Symmetric semantic residual in which the transition witness is the right edge. The LR lookahead equation is directional, so this is not merely the preceding proposition with its arguments swapped.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The two directional transition-vs-return lemmas are exactly sufficient for the concrete paired classifier; the redundant concrete edge on the transition-tagged side is intentionally discarded.