Context-Free Lifting #
This file lifts context-free grammars across embeddings of nonterminal types and supplies reusable sum-type constructions.
Main declarations #
Equations
- lift_symbol lift_N (symbol.terminal t) = symbol.terminal t
- lift_symbol lift_N (symbol.nonterminal n) = symbol.nonterminal (lift_N n)
Instances For
Equations
- sink_symbol sink_N (symbol.terminal t) = some (symbol.terminal t)
- sink_symbol sink_N (symbol.nonterminal n) = Option.map symbol.nonterminal (sink_N n)
Instances For
Equations
- lift_string lift_N = List.map (lift_symbol lift_N)
Instances For
Equations
- sink_string sink_N = List.filterMap (sink_symbol sink_N)
Instances For
- g₀ : CF_grammar T
- g : CF_grammar T
- lift_inj : Function.Injective self.lift_nt
Instances For
Equations
- good_letter (symbol.terminal _t) = True
- good_letter (symbol.nonterminal n) = ∃ (n₀ : lg.g₀.nt), lg.sink_nt n = some n₀
Instances For
Equations
- good_string s = ∀ a ∈ s, good_letter a
Instances For
lift_string preserves terminal-only lists.
sink_string preserves terminal-only lists.
If lift_string f u is all terminals, then u was already all terminals.
Applies to any lift_string (or List.map of a lift_symbol).
Equations
- fiveStepTac = Lean.ParserDescr.node `fiveStepTac 1024 (Lean.ParserDescr.nonReservedSymbol "five_steps" false)
Instances For
Equations
- tacticFive_steps = Lean.ParserDescr.node `tacticFive_steps 1024 (Lean.ParserDescr.nonReservedSymbol "five_steps" false)
Instances For
similar to lift_symbol (Option.some ∘ sum.inl)
Equations
- sTN_of_sTN₁ (symbol.terminal st) = symbol.terminal st
- sTN_of_sTN₁ (symbol.nonterminal snt) = symbol.nonterminal (some (Sum.inl snt))
Instances For
similar to lift_symbol (Option.some ∘ sum.inr)
Equations
- sTN_of_sTN₂ (symbol.terminal st) = symbol.terminal st
- sTN_of_sTN₂ (symbol.nonterminal snt) = symbol.nonterminal (some (Sum.inr snt))
Instances For
similar to lift_string (Option.some ∘ sum.inl)
Equations
Instances For
similar to lift_string (Option.some ∘ sum.inr)
Equations
Instances For
lsTN_of_lsTN₁ agrees with lift_string (some ∘ Sum.inl) pointwise.
lsTN_of_lsTN₂ agrees with lift_string (some ∘ Sum.inr) pointwise.
If lsTN_of_lsTN₁ u = List.map symbol.terminal ts, then u was all terminals.
If lsTN_of_lsTN₂ v = List.map symbol.terminal ts, then v was all terminals.
lsTN_of_lsTN₁ preserves terminal-only lists.
lsTN_of_lsTN₂ preserves terminal-only lists.