Langlib

Langlib.Classes.ContextFree.Pumping.ChomskyCountingSteps

Counting Derivation Steps in CNF #

This file tracks derivation lengths for grammars already in Chomsky normal form.

Main declarations #

inductive ChomskyNormalFormGrammar.DerivesIn {T : Type uT} (g : ChomskyNormalFormGrammar T) :
List (Symbol T g.NT)List (Symbol T g.NT)Prop

Given a context-free grammar g, strings u and v, and number n g.DerivesIn u v n means that g can transform u to v in n rewriting steps.

Instances For
    theorem ChomskyNormalFormGrammar.DerivesIn.trans_produces {T : Type uT} {g : ChomskyNormalFormGrammar T} {n : } {u v w : List (Symbol T g.NT)} (huv : g.DerivesIn u v n) (hvw : g.Produces v w) :
    g.DerivesIn u w n.succ
    theorem ChomskyNormalFormGrammar.DerivesIn.trans {T : Type uT} {g : ChomskyNormalFormGrammar T} {n : } {u v w : List (Symbol T g.NT)} {m : } (huv : g.DerivesIn u v n) (hvw : g.DerivesIn v w m) :
    g.DerivesIn u w (n + m)
    theorem ChomskyNormalFormGrammar.Produces.trans_derivesIn {T : Type uT} {g : ChomskyNormalFormGrammar T} {n : } {u v w : List (Symbol T g.NT)} (huv : g.Produces u v) (hvw : g.DerivesIn v w n) :
    g.DerivesIn u w n.succ
    theorem ChomskyNormalFormGrammar.DerivesIn.tail_of_succ {T : Type uT} {g : ChomskyNormalFormGrammar T} {n : } {u w : List (Symbol T g.NT)} (huw : g.DerivesIn u w n.succ) :
    ∃ (v : List (Symbol T g.NT)), g.DerivesIn u v n g.Produces v w
    theorem ChomskyNormalFormGrammar.DerivesIn.head_of_succ {T : Type uT} {g : ChomskyNormalFormGrammar T} {n : } {u w : List (Symbol T g.NT)} (huw : g.DerivesIn u w n.succ) :
    ∃ (v : List (Symbol T g.NT)), g.Produces u v g.DerivesIn v w n
    theorem ChomskyNormalFormGrammar.DerivesIn.append_left {T : Type uT} {g : ChomskyNormalFormGrammar T} {n : } {v w : List (Symbol T g.NT)} (hvw : g.DerivesIn v w n) (p : List (Symbol T g.NT)) :
    g.DerivesIn (p ++ v) (p ++ w) n

    Add extra prefix to context-free deriving (number of steps unchanged).

    theorem ChomskyNormalFormGrammar.DerivesIn.append_right {T : Type uT} {g : ChomskyNormalFormGrammar T} {n : } {v w : List (Symbol T g.NT)} (hvw : g.DerivesIn v w n) (p : List (Symbol T g.NT)) :
    g.DerivesIn (v ++ p) (w ++ p) n

    Add extra postfix to context-free deriving (number of steps unchanged).

    @[irreducible]
    theorem ChomskyNormalFormGrammar.DerivesIn.append_split {T : Type uT} {g : ChomskyNormalFormGrammar T} {p q w : List (Symbol T g.NT)} {n : } (hpqw : g.DerivesIn (p ++ q) w n) :
    ∃ (x : List (Symbol T g.NT)) (y : List (Symbol T g.NT)) (m₁ : ) (m₂ : ), w = x ++ y g.DerivesIn p x m₁ g.DerivesIn q y m₂ n = m₁ + m₂
    theorem ChomskyNormalFormGrammar.DerivesIn.three_split {T : Type uT} {g : ChomskyNormalFormGrammar T} {p q r w : List (Symbol T g.NT)} {n : } (hg : g.DerivesIn (p ++ q ++ r) w n) :
    ∃ (x : List (Symbol T g.NT)) (y : List (Symbol T g.NT)) (z : List (Symbol T g.NT)) (m₁ : ) (m₂ : ) (m₃ : ), w = x ++ y ++ z g.DerivesIn p x m₁ g.DerivesIn q y m₂ g.DerivesIn r z m₃ n = m₁ + m₂ + m₃
    theorem ChomskyNormalFormGrammar.DerivesIn.head_induction_on {T : Type uT} {g : ChomskyNormalFormGrammar T} {n : } {b : List (Symbol T g.NT)} {P : (n : ) → (a : List (Symbol T g.NT)) → g.DerivesIn a b nProp} (refl : P 0 b ) (head : ∀ {n : } {a c : List (Symbol T g.NT)} (hac : g.Produces a c) (hcb : g.DerivesIn c b n), P n c hcbP n.succ a ) {a : List (Symbol T g.NT)} (hab : g.DerivesIn a b n) :
    P n a hab