Grammar Inverse Homomorphism #
Given a grammar g over terminal alphabet Γ and a map encode : T → Γ
(with [Fintype T]), we construct a grammar
GrammarPullback.pullbackGrammar g encode over terminal alphabet T such that:
w ∈ grammar_language (pullbackGrammar g encode) ↔ w.map encode ∈ grammar_language g
This is the inverse-homomorphism construction used to change the terminal alphabet of a grammar along an encoding function.
Key results #
GrammarPullback.pullbackGrammar: constructs the pulled-back grammar.GrammarPullback.pullbackGrammar_language: provesw ∈ pullbackGrammar g encodeiffw.map encode ∈ grammar_language g.
Symbol maps #
Lift symbols from g (over Γ) to the pullback grammar (over T).
Terminals become decoding nonterminals; nonterminals are tagged.
Equations
Instances For
Project symbols from the pullback grammar back to g.
Terminals in T are mapped via encode; nonterminals are untagged.
Equations
- GrammarPullback.projSym encode (symbol.terminal t) = symbol.terminal (encode t)
- GrammarPullback.projSym encode (symbol.nonterminal (Sum.inl n)) = symbol.nonterminal n
- GrammarPullback.projSym encode (symbol.nonterminal (Sum.inr γ)) = symbol.terminal γ
Instances For
Pullback grammar construction #
A decode rule: (Sum.inr (encode t)) → [terminal t].
Equations
Instances For
The pullback grammar: given grammar g over Γ and encode : T → Γ,
produces a grammar over T that generates w iff g generates w.map encode.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Forward direction: pullback generates ⟹ g generates encoded #
Backward direction: g generates encoded ⟹ pullback generates #
Main theorem #
Pullback grammar language: The pullback grammar generates w iff
g generates w.map encode.