Context-Free Grammars #
This file contains the definition of a context-free grammar, which is a grammar that has a single nonterminal symbol on the left-hand side of each rule.
Main definitions #
ContextFreeGrammar: A context-free grammar.ContextFreeGrammar.language: A language generated by a given context-free grammar.
Main theorems #
Language.IsContextFree.reverse: The class of context-free languages is closed under reversal.
Context-free grammar that generates words over the alphabet T (a type of terminals).
- NT : Type uN
Type of nonterminals.
- initial : self.NT
Initial nonterminal.
- rules : Finset (ContextFreeRule T self.NT)
Rewrite rules.
Instances For
Inductive definition of a single application of a given context-free rule r to a string u;
r.Rewrites u v means that the r sends u to v (there may be multiple such strings v).
- head
{T : Type uT}
{N : Type uN}
{r : ContextFreeRule T N}
(s : List (Symbol T N))
: r.Rewrites (Symbol.nonterminal r.input :: s) (r.output ++ s)
The replacement is at the start of the remaining string.
- cons
{T : Type uT}
{N : Type uN}
{r : ContextFreeRule T N}
(x : Symbol T N)
{s₁ s₂ : List (Symbol T N)}
(hrs : r.Rewrites s₁ s₂)
: r.Rewrites (x :: s₁) (x :: s₂)
There is a replacement later in the string.
Instances For
Rule r rewrites string u is to string v iff they share both a prefix p and postfix q
such that the remaining middle part of u is the input of r and the remaining middle part
of u is the output of r.
Given a context-free grammar g and strings u and v
g.Produces u v means that one step of a context-free transformation by a rule from g sends
u to v.
Equations
- g.Produces u v = ∃ r ∈ g.rules, r.Rewrites u v
Instances For
Given a context-free grammar g and strings u and v
g.Derives u v means that g can transform u to v in some number of rewriting steps.
Equations
- g.Derives = Relation.ReflTransGen g.Produces
Instances For
Given a context-free grammar g and a string s
g.Generates s means that g can transform its initial nonterminal to s in some number of
rewriting steps.
Equations
- g.Generates s = g.Derives [Symbol.nonterminal g.initial] s
Instances For
The language (set of words) that can be generated by a given context-free grammar g.
Instances For
A given word w belongs to the language generated by a given context-free grammar g iff
g can derive the word w (wrapped as a string) from the initial nonterminal of g in some
number of steps.
Add extra prefix to context-free producing.
Add extra postfix to context-free producing.
Add extra prefix to context-free deriving.
Add extra postfix to context-free deriving.
Context-free languages are defined by context-free grammars.
Equations
- L.IsContextFree = ∃ (g : ContextFreeGrammar T), g.language = L
Instances For
Rules for a grammar for a reversed language.
Equations
- r.reverse = { input := r.input, output := r.output.reverse }
Instances For
Grammar for a reversed language.
Equations
- g.reverse = { NT := g.NT, initial := g.initial, rules := Finset.map { toFun := ContextFreeRule.reverse, inj' := ⋯ } g.rules }
Instances For
Alias of the reverse direction of ContextFreeGrammar.produces_reverse.
Alias of the reverse direction of ContextFreeGrammar.generates_reverse.
The class of context-free languages is closed under reversal.