Documentation

LeanPool.PumpingCfg.Pumping

Pumping Lemma for Context-Free Grammars #

This file contains the proof of the pumping lemma for context-free grammars

Main theorems #

References #

theorem pidgeonhole {α : Type u_1} {β : Type u_2} {A : Finset α} {B : Finset β} {f : ↥A → ↥B} (hf : Function.Injective f) :

generators g is the set of nonterminals that appear in the left hand side of rules of g

Equations
Instances For
    theorem ChomskyNormalFormGrammar.subtree_height_le {T : Type uT} {g : ChomskyNormalFormGrammar T} {n₁ n₂ : g.NT} {p₁ : parseTree n₁} {p₂ : parseTree n₂} (hpp : p₂.IsSubtreeOf p₁) :
    p₂.height ≤ p₁.height
    theorem ChomskyNormalFormGrammar.subtree_repeat_root_height_ind {T : Type uT} {g : ChomskyNormalFormGrammar T} [DecidableEq g.NT] {n : g.NT} {p : parseTree n} (s : Finset ((_n : g.NT) × parseTree _n)) (hs : ∀ e₁ ∈ s, ∀ e₂ ∈ s, e₁.fst = e₂.fst → e₁ = e₂) (hp : g.generators.card.succ ≤ p.height + s.card) (hps : ∀ pₛ ∈ s, p.IsSubtreeOf pₛ.snd) :
    (∃ (n' : g.NT) (p' : parseTree n') (p'' : parseTree n'), p'.IsSubtreeOf p ∧ p''.IsSubtreeOf p' ∧ p' ≠ p'') ∨ ∃ (n₀ : g.NT) (t : parseTree n₀) (t' : parseTree n₀), ⟨n₀, t⟩ ∈ s ∧ t'.IsSubtreeOf p
    theorem ChomskyNormalFormGrammar.pumping {T : Type uT} {g : ChomskyNormalFormGrammar T} [DecidableEq g.NT] {w : List T} (hwg : w ∈ g.language) (hw : w.length ≥ 2 ^ g.generators.card) :
    ∃ (u : List T) (v : List T) (x : List T) (y : List T) (z : List T), w = u ++ v ++ x ++ y ++ z ∧ (v ++ y).length > 0 ∧ (v ++ x ++ y).length ≤ 2 ^ g.generators.card ∧ ∀ (i : ℕ), u ++ v ^+^ i ++ x ++ y ^+^ i ++ z ∈ g.language
    theorem Language.IsContextFree.pumping {T : Type} {L : Language T} (hL : L.IsContextFree) :
    ∃ (p : ℕ), ∀ w ∈ L, w.length ≥ p → ∃ (u : List T) (v : List T) (x : List T) (y : List T) (z : List T), w = u ++ v ++ x ++ y ++ z ∧ (v ++ y).length > 0 ∧ (v ++ x ++ y).length ≤ p ∧ ∀ (i : ℕ), u ++ v ^+^ i ++ x ++ y ^+^ i ++ z ∈ L