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 languagesl
andm
l * m
: language of stringsx ++ y
such thatx ∈ l
andy ∈ m
l ^ n
: language of strings consisting ofn
members ofl
concatenated 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 ofl
concatenated 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 languagel
overα
into a language overβ
by translating throughf : α → β
Main theorems #
Language.self_eq_mul_add_iff
: Arden's lemma – if a languagel
satisfies the equationl = m * l + n
, andm
doesn't contain the empty string, thenl
is 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
.
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✝)