Indexed CYK for the canonical encoded grammar
DefinitionCharged decoding of encoded grammar symbols#✓fully proved
Decode symbols with a charge for each constructor test and output cons.
def decodeSymbols : List (ℕ ⊕ T) → TimeM ℕ (List (Symbol T ℕ))
| [] => ⟨[], 1⟩
| s :: ss =>
let rest := decodeSymbols ss
⟨EncodedCFG.decodeSymbol s :: rest.ret, rest.time + 4⟩
def decodeSymbol : ℕ ⊕ T → Symbol T ℕ
| .inl i => .nonterminal i
| .inr a => .terminal a
CSLibExt/Computability/Languages/ContextFree/Encoded.lean:83
TheoremCharged symbol decoding agrees with canonical decoding#✓fully proved
The charged conversion is exactly the canonical symbol decoding.
@[simp] theorem decodeSymbols_ret (ss : List (ℕ ⊕ T)) :
(decodeSymbols ss).ret = ss.map EncodedCFG.decodeSymbol
def decodeSymbols : List (ℕ ⊕ T) → TimeM ℕ (List (Symbol T ℕ))
| [] => ⟨[], 1⟩
| s :: ss =>
let rest := decodeSymbols ss
⟨EncodedCFG.decodeSymbol s :: rest.ret, rest.time + 4⟩
CSLibExt/Computability/Languages/ContextFree/CYKIndexed/Encoded.lean:29
def decodeSymbol : ℕ ⊕ T → Symbol T ℕ
| .inl i => .nonterminal i
| .inr a => .terminal a
CSLibExt/Computability/Languages/ContextFree/Encoded.lean:83
Uses 2 · Used by 3
DefinitionCharged decoding of encoded grammar rules#✓fully proved
Decode every rule, charging all right-hand-side traversals.
def decodeRules : List (ℕ × List (ℕ ⊕ T)) →
TimeM ℕ (List (ContextFreeRule T ℕ))
| [] => ⟨[], 1⟩
| r :: rs =>
let out := decodeSymbols r.2
let rest := decodeRules rs
⟨⟨r.1, out.ret⟩ :: rest.ret, out.time + rest.time + 5⟩
def decodeSymbols : List (ℕ ⊕ T) → TimeM ℕ (List (Symbol T ℕ))
| [] => ⟨[], 1⟩
| s :: ss =>
let rest := decodeSymbols ss
⟨EncodedCFG.decodeSymbol s :: rest.ret, rest.time + 4⟩
CSLibExt/Computability/Languages/ContextFree/CYKIndexed/Encoded.lean:29
Uses 1 · Used by 5
TheoremCharged rule decoding agrees with the decoded grammar#✓fully proved
The charged rule conversion agrees with the existing decoded grammar.
@[simp] theorem decodeRules_ret (rs : List (ℕ × List (ℕ ⊕ T))) :
(decodeRules rs).ret = rs.map EncodedCFG.decodeRule
def decodeRules : List (ℕ × List (ℕ ⊕ T)) →
TimeM ℕ (List (ContextFreeRule T ℕ))
| [] => ⟨[], 1⟩
| r :: rs =>
let out := decodeSymbols r.2
let rest := decodeRules rs
⟨⟨r.1, out.ret⟩ :: rest.ret, out.time + rest.time + 5⟩
CSLibExt/Computability/Languages/ContextFree/CYKIndexed/Encoded.lean:43
def decodeRule (e : ℕ × List (ℕ ⊕ T)) : ContextFreeRule T ℕ :=
⟨e.1, e.2.map decodeSymbol⟩
CSLibExt/Computability/Languages/ContextFree/Encoded.lean:101
Uses 5 · Used by 3
DefinitionIndexed CYK recognizer for encoded grammars#✓fully proved
Run indexed CYK on the existing encoded grammar, including preparation.
def recognizesEncoded [DecidableEq T] (tc nc : ℕ) (g : EncodedCFG T)
(w : List T) : TimeM ℕ Bool :=
let rules := decodeRules g.rules
let result := recognizes tc nc g.start rules.ret w
⟨result.ret, rules.time + result.time + 3⟩
structure EncodedCFG (T : Type*) where
/-- The start nonterminal. -/
start : ℕ
/-- The productions. -/
rules : List (ℕ × List (ℕ ⊕ T))
CSLibExt/Computability/Languages/ContextFree/Encoded.lean:74
def decodeRules : List (ℕ × List (ℕ ⊕ T)) →
TimeM ℕ (List (ContextFreeRule T ℕ))
| [] => ⟨[], 1⟩
| r :: rs =>
let out := decodeSymbols r.2
let rest := decodeRules rs
⟨⟨r.1, out.ret⟩ :: rest.ret, out.time + rest.time + 5⟩
CSLibExt/Computability/Languages/ContextFree/CYKIndexed/Encoded.lean:43
def recognizes (termCost ntCost : ℕ) (start : N)
(rs : List (ContextFreeRule T N)) (w : List T) : TimeM ℕ Bool :=
match w with
| [] =>
let r := epsilon ntCost start rs
⟨r.ret, r.time + 1⟩
| _ :: _ =>
let a := w.toArray
let tbl := table termCost ntCost a rs a.size
let r := member ntCost start (lookup tbl.ret 0 a.size)
⟨r.ret, tbl.time + r.time + 3 * w.length + 12⟩
CSLibExt/Computability/Languages/ContextFree/CYKIndexed.lean:181
Uses 3 · Used by 2
TheoremCorrectness of indexed CYK on encoded grammars#✓fully proved
Correctness for the canonical encoded language, including epsilon.
theorem recognizesEncoded_iff [DecidableEq T] (tc nc : ℕ)
(g : EncodedCFG T) (hg : IsChomskyNormalForm g.toCFG) (w : List T) :
(recognizesEncoded tc nc g w).ret = true ↔ w ∈ g.language
structure EncodedCFG (T : Type*) where
/-- The start nonterminal. -/
start : ℕ
/-- The productions. -/
rules : List (ℕ × List (ℕ ⊕ T))
CSLibExt/Computability/Languages/ContextFree/Encoded.lean:74
def IsChomskyNormalForm (g : ContextFreeGrammar T) : Prop :=
(∀ r ∈ g.rules,
(∃ B C, r.output = [Symbol.nonterminal B, Symbol.nonterminal C]) ∨
(∃ a, r.output = [Symbol.terminal a]) ∨
(r.output = [] ∧ r.input = g.initial)) ∧
((∀ r ∈ g.rules, Symbol.nonterminal g.initial ∉ r.output) ∨
∀ r ∈ g.rules, r.output ≠ [])
CSLibExt/Computability/Languages/ContextFree/ChomskyNormalForm.lean:57
def recognizesEncoded [DecidableEq T] (tc nc : ℕ) (g : EncodedCFG T)
(w : List T) : TimeM ℕ Bool :=
let rules := decodeRules g.rules
let result := recognizes tc nc g.start rules.ret w
⟨result.ret, rules.time + result.time + 3⟩
CSLibExt/Computability/Languages/ContextFree/CYKIndexed/Encoded.lean:59
TheoremExact cost of grammar symbol decoding#✓fully proved
Exact symbol-decoding traversal cost.
theorem decodeSymbols_time (ss : List (ℕ ⊕ T)) :
(decodeSymbols ss).time = 1 + 4 * ss.length
def decodeSymbols : List (ℕ ⊕ T) → TimeM ℕ (List (Symbol T ℕ))
| [] => ⟨[], 1⟩
| s :: ss =>
let rest := decodeSymbols ss
⟨EncodedCFG.decodeSymbol s :: rest.ret, rest.time + 4⟩
CSLibExt/Computability/Languages/ContextFree/CYKIndexed/Encoded.lean:29
Uses 3 · Used by 1
TheoremExact cost of grammar rule decoding#✓fully proved
Exact grammar-preparation cost, including all production symbols.
theorem decodeRules_time (rs : List (ℕ × List (ℕ ⊕ T))) :
(decodeRules rs).time =
1 + 6 * rs.length + 4 * (rs.map (fun r => r.2.length)).sum
def decodeRules : List (ℕ × List (ℕ ⊕ T)) →
TimeM ℕ (List (ContextFreeRule T ℕ))
| [] => ⟨[], 1⟩
| r :: rs =>
let out := decodeSymbols r.2
let rest := decodeRules rs
⟨⟨r.1, out.ret⟩ :: rest.ret, out.time + rest.time + 5⟩
CSLibExt/Computability/Languages/ContextFree/CYKIndexed/Encoded.lean:43
Uses 7 · Used by 1
TheoremCubic cost bound for indexed CYK on encoded grammars#✓fully proved
Cubic word-length bound including canonical grammar preparation. All dependence on the fixed grammar and symbol-equality model is explicit.
theorem recognizesEncoded_time_le [DecidableEq T] (tc nc : ℕ)
(g : EncodedCFG T) (w : List T) :
(recognizesEncoded tc nc g w).time ≤
(g.rules.length * (tc + nc + 2 * g.rules.length * (nc + 3) + 44) +
4 * (g.rules.map (fun r => r.2.length)).sum + 44) *
(w.length + 1) ^ 3
structure EncodedCFG (T : Type*) where
/-- The start nonterminal. -/
start : ℕ
/-- The productions. -/
rules : List (ℕ × List (ℕ ⊕ T))
CSLibExt/Computability/Languages/ContextFree/Encoded.lean:74
def recognizesEncoded [DecidableEq T] (tc nc : ℕ) (g : EncodedCFG T)
(w : List T) : TimeM ℕ Bool :=
let rules := decodeRules g.rules
let result := recognizes tc nc g.start rules.ret w
⟨result.ret, rules.time + result.time + 3⟩
CSLibExt/Computability/Languages/ContextFree/CYKIndexed/Encoded.lean:59
Uses 8
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.