Free monoid over a given alphabet #
Main definitions #
FreeMonoid α: free monoid over alphabetα; defined as a synonym forList αwith multiplication given by(++).FreeMonoid.of: embeddingα → FreeMonoid αsending each elementxto[x];FreeMonoid.lift: natural equivalence betweenα → MandFreeMonoid α →* MFreeMonoid.map: embedding ofα → βintoFreeMonoid α →* FreeMonoid βgiven byList.map.
Equations
Equations
Equations
- FreeMonoid.instInhabited = { default := 1 }
Equations
- FreeAddMonoid.instInhabited = { default := 0 }
Equations
Equations
Alias of FreeMonoid.ofList_flatten.
Alias of FreeAddMonoid.ofList_flatten.
Embeds an element of α into FreeMonoid α as a singleton list.
Equations
- FreeMonoid.of x = FreeMonoid.ofList [x]
Instances For
Embeds an element of α into FreeAddMonoid α as a singleton list.
Equations
- FreeAddMonoid.of x = FreeAddMonoid.ofList [x]
Instances For
Length #
The length of a free monoid element: 1.length = 0 and (a * b).length = a.length + b.length
Equations
- a.length = List.length a
Instances For
The length of an additive free monoid element: 1.length = 0 and (a + b).length = a.length + b.length
Equations
- a.length = List.length a
Instances For
Membership in a free monoid element
Instances For
Membership in a free monoid element
Instances For
Equations
- FreeMonoid.instMembership = { mem := FreeMonoid.mem }
Equations
- FreeAddMonoid.instMembership = { mem := FreeAddMonoid.mem }
Recursor for FreeMonoid using 1 and FreeMonoid.of x * xs instead of [] and x :: xs.
Instances For
Recursor for FreeAddMonoid using 0 and
FreeAddMonoid.of x + xsinstead of[]andx :: xs`.
Instances For
Induction #
An induction principle on free monoids, with cases for 1, FreeMonoid.of and *.
An induction principle on free monoids, with cases for 0, FreeAddMonoid.of and +.
An induction principle for free monoids which mirrors induction on lists, with cases analogous to the empty list and cons
An induction principle for free monoids which mirrors induction on lists, with cases analogous to the empty list and cons
A version of List.cases_on for FreeMonoid using 1 and FreeMonoid.of x * xs instead of
[] and x :: xs.
Equations
- xs.casesOn h0 ih = List.casesOn xs h0 ih
Instances For
A version of List.casesOn for FreeAddMonoid using 0 and
FreeAddMonoid.of x + xs instead of [] and x :: xs.
Equations
- xs.casesOn h0 ih = List.casesOn xs h0 ih
Instances For
A variant of List.prod that has [x].prod = x true definitionally.
The purpose is to make FreeMonoid.lift_eval_of true by rfl.
Equations
- FreeMonoid.prodAux [] = 1
- FreeMonoid.prodAux (x_1 :: xs) = List.foldl (fun (x1 x2 : M) => x1 * x2) x_1 xs
Instances For
A variant of List.sum that has [x].sum = x true definitionally.
The purpose is to make FreeAddMonoid.lift_eval_of true by rfl.
Equations
- FreeAddMonoid.sumAux [] = 0
- FreeAddMonoid.sumAux (x_1 :: xs) = List.foldl (fun (x1 x2 : M) => x1 + x2) x_1 xs
Instances For
Equivalence between maps α → M and monoid homomorphisms FreeMonoid α →* M.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equivalence between maps α → A and additive monoid homomorphisms
FreeAddMonoid α →+ A.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Define a multiplicative action of FreeMonoid α on β.
Equations
Instances For
Define an additive action of FreeAddMonoid α on β.
Equations
Instances For
map #
The unique monoid homomorphism FreeMonoid α →* FreeMonoid β that sends
each of x to of (f x).
Equations
- FreeMonoid.map f = { toFun := fun (l : FreeMonoid α) => FreeMonoid.ofList (List.map f (FreeMonoid.toList l)), map_one' := ⋯, map_mul' := ⋯ }
Instances For
The unique additive monoid homomorphism FreeAddMonoid α →+ FreeAddMonoid β
that sends each of x to of (f x).
Equations
- FreeAddMonoid.map f = { toFun := fun (l : FreeAddMonoid α) => FreeAddMonoid.ofList (List.map f (FreeAddMonoid.toList l)), map_zero' := ⋯, map_add' := ⋯ }
Instances For
The only invertible element of the free monoid is 1; this instance enables units_eq_one.
Equations
- FreeMonoid.uniqueUnits = { toInhabited := Units.instInhabited, uniq := ⋯ }
Equations
- FreeAddMonoid.uniqueAddUnits = { toInhabited := AddUnits.instInhabited, uniq := ⋯ }
reverse #
reverses the symbols in a free monoid element
Equations
Instances For
reverses the symbols in an additive free monoid element