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.
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 := ∅ }
1 : Language α
contains only one element []
.
Equations
- Language.instOne = { one := {[]} }
Equations
- Language.instInhabited = { default := ∅ }
The sum of two languages is their union.
Equations
- Language.instAdd = { add := fun (x1 x2 : Set (List α)) => x1 ∪ x2 }
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
- Language.instSemiring = Semiring.mk ⋯ ⋯ ⋯ ⋯ npowRecAuto ⋯ ⋯
Equations
- Language.instKleeneAlgebra = KleeneAlgebra.mk ⋯ ⋯ ⋯ ⋯ ⋯
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 at the end of word being generated)
Instances For
Equations
Equations
- instReprSymbol = { reprPrec := reprSymbol✝ }
Equations
- instFintypeSymbol = Fintype.ofEquiv (T✝ ⊕ N✝) (Symbol.proxyTypeEquiv T✝ N✝)