Languages #
This file contains the definition and operations on formal languages over an alphabet. Note that "strings" are implemented as lists over the alphabet.
Union and concatenation define a Kleene algebra over the languages.
In addition to that, we define a reversal of a language and prove that it behaves well with respect to other language operations.
Notation #
l + m: union of languageslandml - m: difference of languageslandml * m: language of stringsx ++ ysuch thatx ∈ landy ∈ ml ^ n: language of strings consisting ofnmembers oflconcatenated together1: language consisting of only the empty string. This is because it is the unit of the*operator.l∗: Kleene star – language of strings consisting of arbitrarily many members oflconcatenated together. Note that this notation uses the Unicode asterisk operator∗, as opposed to the more common ASCII asterisk*.lᶜ: complement, language of stringsxsuch thatx ∉ ll ⊓ m: intersection of languageslandm
Main definitions #
Language α: a set of strings over the alphabetαl.map f: transform a languageloverαinto a language overβby translating throughf : α → β
Main theorems #
Language.self_eq_mul_add_iff: Arden's lemma – if a languagelsatisfies the equationl = m * l + n, andmdoesn't contain the empty string, thenlis the languagem∗ * n
Equations
Equations
Zero language has no elements.
Equations
The sum of two languages is their union.
Equations
The subtraction of two languages is their difference.
Equations
The product of two languages l and m is the language made of the strings x ++ y where
x ∈ l and y ∈ m.
Equations
The Kleene star of a language L is the set of all strings which can be written by
concatenating strings from L.
Equations
Symbols for use by all kinds of grammars.
- terminal
{T : Type u_4}
{N : Type u_5}
(t : T)
: Symbol T N
Terminal symbols (of the same type as the language)
- nonterminal
{T : Type u_4}
{N : Type u_5}
(n : N)
: Symbol T N
Nonterminal symbols (must not be present when the word being generated is finalized)