Langlib

Langlib.Grammars.ContextSensitive.Basic.FiniteNT

Finite-nonterminal equivalence for non-contracting grammars #

restrictGrammar finitizes the nonterminal type of any unrestricted grammar while preserving its language. Here we record that it also preserves non-contractingness, and package the resulting equivalence: every non-contracting grammar is equivalent to one with finitely many nonterminals that is still non-contracting.

Main results #

Non-contracting preservation under restrictGrammar #

restrictGrammar rewrites every rule by mapping each of its symbol lists through restrictSym. Since List.map preserves length, the non-contracting inequality is preserved verbatim.

Restricting a non-contracting grammar to its used nonterminals keeps it non-contracting.

Finite-nonterminal equivalence. Every non-contracting grammar is equivalent to a non-contracting grammar with finitely many nonterminals. We take restrictGrammar g, which finitizes the nonterminals, preserves the language, and stays non-contracting.