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: 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's star – language of strings consisting of arbitrarily many members oflconcatenated together (Note that this is the Unicode asterisk∗, and not the more common star*)
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
- Language.instMembershipList = { mem := Set.Mem }
Equations
- Language.instSingletonList = { singleton := Set.singleton }
Equations
- Language.instInsertList = { insert := Set.insert }
Zero language has no elements.
Equations
- Language.instZero = { zero := ∅ }
Equations
- Language.instInhabited = { default := ∅ }
The product of two languages l and m is the language made of the strings x ++ y where
x ∈ l and y ∈ m.
Equations
- Language.instMul = { mul := Set.image2 fun (x1 x2 : List α) => x1 ++ x2 }
The Kleene star of a language L is the set of all strings which can be written by
concatenating strings from L.
Alias of Language.notMem_zero.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Language.reverse as a ring isomorphism to the opposite ring.
Equations
- One or more equations did not get rendered due to their size.
Instances For
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)
Instances For
Equations
Equations
- instReprSymbol = { reprPrec := reprSymbol✝ }
Equations
- instFintypeSymbol = Fintype.ofEquiv (T✝ ⊕ N✝) (Symbol.proxyTypeEquiv T✝ N✝)