Langlib

Langlib.Grammars.LR.Equivalence.DPDAToLR.ConcreteReturnClassifier

Assembly of the concrete empty-return classifier #

Equality of the two terminally completed sentential forms leaves only two shapes: the visible prefixes agree, or one is a strict terminal extension of the other. Same-prefix transition returns are handled by the structural epsilon-return uniqueness theorem. This module isolates the one remaining ancestry statement for strict terminal extensions and proves all downstream classifier assembly from those two inputs.

Generic semantic interface expected from the paired-anchor interval argument. The two anchors represent the same visible frontier and completed word. If both physical cuts have useful futures with the same one-symbol lookahead, their control states and complete stacks agree.

Equations
  • One or more equations did not get rendered due to their size.
Instances For

    Boundary-sensitive strengthening of physical cut equality. This is the form consumed directly by the existing leftmost-epsilon comparison API.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For

      Equality of the boundary-sensitive anchor positions implies equality of their physical cuts.

      The boundary-sensitive paired-anchor theorem is sufficient for the full same-prefix epsilon-return uniqueness property.

      theorem DPDA_to_LR.zeroVisibleEmptyList_read_false_of_anchor_position_eq {Q T S : Type} [Fintype Q] [Fintype T] [Fintype S] (M : DPDA Q T S) {p : List (symbol T (Nonterminal M))} {completion : List T} {emptyAnchor readAnchor : Nonterminal M} {emptyAnchorSuffix readAnchorSuffix emptySuffix readNodeSuffix readFutureSuffix : List T} {emptyAnchorContext readAnchorContext emptyContext readContext : List (StackSymbol M)} {emptyState source target next emptyFinal readFinal : State M} {a : T} {top : StackSymbol M} {replacement : List (StackSymbol M)} (emptyAnchorWitness : VisibleSpineAnchor M p emptyAnchor emptyAnchorSuffix completion emptyAnchorContext) (readAnchorWitness : VisibleSpineAnchor M p readAnchor readAnchorSuffix completion readAnchorContext) (emptyTail : ZeroVisibleTail M p completion emptyAnchor emptyAnchorSuffix emptyAnchorContext (PDA_to_CFG.N.list emptyState [] emptyState) emptySuffix emptyContext) (readTail : ZeroVisibleTail M p completion readAnchor readAnchorSuffix readAnchorContext (PDA_to_CFG.N.single source top target) readNodeSuffix readContext) (hposition : leftmostEpsilonPositionOf M emptyAnchor emptyAnchorContext = leftmostEpsilonPositionOf M readAnchor readAnchorContext) (readTransition : (next, replacement) (emptyStackPDA M).transition_fun source a top) (emptyUseful : PDA.Reaches { state := emptyState, input := emptySuffix, stack := emptyContext } { state := emptyFinal, input := [], stack := [] }) (readUseful : PDA.Reaches { state := source, input := a :: readFutureSuffix, stack := top :: readContext } { state := readFinal, input := [], stack := [] }) (hlook : List.take 1 emptySuffix = List.take 1 (a :: readFutureSuffix)) :

      From one physical zero-visible anchor, an empty-list endpoint cannot coexist productively with a single endpoint that has a useful read on the same lookahead.

      The exact strict-prefix ancestry obligation left by the concrete empty-return classifier. The later visible prefix differs only by a nonempty terminal block. Such a pair must expose one of the useful cycle/growth obstructions.

      The statement deliberately does not ask which edge is transition-generated: ConcreteEmptyEdge.transitionEdge_of_strictTerminalExtension already shows that the later edge is transition-generated.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        inductive DPDA_to_LR.ConcreteNonreadEmptyEdge {Q T S : Type} [Fintype Q] [Fintype T] [Fintype S] (M : DPDA Q T S) :
        List (symbol T (Nonterminal M))State MList TProp

        The non-read fragment of a concrete empty edge. A read-generated early edge is already incompatible with every strict terminal extension, so only epsilon and structural split-right introductions survive in the strict classifier.

        Instances For
          theorem DPDA_to_LR.ConcreteNonreadEmptyEdge.edge {Q T S : Type} [Fintype Q] [Fintype T] [Fintype S] (M : DPDA Q T S) {p : List (symbol T (Nonterminal M))} {q : State M} {suffix : List T} (edge : ConcreteNonreadEmptyEdge M p q suffix) :
          ConcreteEmptyEdge M p q suffix

          Forget the non-read tag.

          The actual strict-prefix residual after disposing of read-generated early edges.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For

            Boundary-sensitive paired-anchor synchronization rules out every epsilon/split early return followed by a later transition return. Walking the later terminal block back to its first read produces a readable single at the early frontier; the earlier empty child and that single then descend from one structural epsilon position, contradicting useful determinism.

            Read-generated early returns admit no strict terminal extension at all; hence the full strict classifier reduces to its epsilon/split fragment.

            The left-transition directional classifier follows from same-prefix epsilon-return uniqueness and the single strict-terminal ancestry property.

            The right-transition directional classifier has the same strict branch; only the same-prefix lookahead must be reversed before applying the structural transition-vs-return theorem.

            Complete concrete pair classification once the same-prefix and strict terminal ancestry statements have been supplied.

            One boundary-sensitive paired-anchor synchronization theorem discharges both the same-prefix epsilon branch and every strict terminal displacement, and therefore supplies the complete concrete empty-return classifier.