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 elementx
to[x]
;FreeMonoid.lift
: natural equivalence betweenα → M
andFreeMonoid α →* M
FreeMonoid.map
: embedding ofα → β
intoFreeMonoid α →* FreeMonoid β
given byList.map
.
The identity equivalence between FreeAddMonoid α
and List α
.
Equations
- FreeAddMonoid.toList = Equiv.refl (FreeAddMonoid α)
Instances For
The identity equivalence between FreeMonoid α
and List α
.
Equations
- FreeMonoid.toList = Equiv.refl (FreeMonoid α)
Instances For
The identity equivalence between List α
and FreeAddMonoid α
.
Equations
- FreeAddMonoid.ofList = Equiv.refl (List α)
Instances For
The identity equivalence between List α
and FreeMonoid α
.
Equations
- FreeMonoid.ofList = Equiv.refl (List α)
Instances For
Equations
- FreeAddMonoid.instAddCancelMonoidFreeAddMonoid = AddCancelMonoid.mk ⋯
Equations
- FreeMonoid.instCancelMonoidFreeMonoid = CancelMonoid.mk ⋯
Equations
- FreeAddMonoid.instInhabitedFreeAddMonoid = { default := 0 }
Equations
- FreeMonoid.instInhabitedFreeMonoid = { default := 1 }
Embeds an element of α
into FreeAddMonoid α
as a singleton list.
Equations
- FreeAddMonoid.of x = FreeAddMonoid.ofList [x]
Instances For
Embeds an element of α
into FreeMonoid α
as a singleton list.
Equations
- FreeMonoid.of x = FreeMonoid.ofList [x]
Instances For
Recursor for FreeAddMonoid
using 0
and
FreeAddMonoid.of x + xs
instead of []
and x :: xs
.
Equations
- FreeAddMonoid.recOn xs h0 ih = List.rec h0 ih xs
Instances For
Recursor for FreeMonoid
using 1
and FreeMonoid.of x * xs
instead of []
and x :: xs
.
Equations
- FreeMonoid.recOn xs h0 ih = List.rec h0 ih xs
Instances For
A version of List.casesOn
for FreeAddMonoid
using 0
and
FreeAddMonoid.of x + xs
instead of []
and x :: xs
.
Equations
- FreeAddMonoid.casesOn xs h0 ih = List.casesOn xs h0 ih
Instances For
A version of List.cases_on
for FreeMonoid
using 1
and FreeMonoid.of x * xs
instead of
[]
and x :: xs
.
Equations
- FreeMonoid.casesOn xs h0 ih = List.casesOn xs h0 ih
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 x = FreeAddMonoid.sumAux.match_1 (fun (x : List M) => M) x (fun (_ : Unit) => 0) fun (x : M) (xs : List M) => List.foldl (fun (x x_1 : M) => x + x_1) x xs
Instances For
Equations
- FreeAddMonoid.sumAux.match_1 motive x h_1 h_2 = List.casesOn x (h_1 ()) fun (head : M) (tail : List M) => h_2 head tail
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 x = match x with | [] => 1 | x :: xs => List.foldl (fun (x x_1 : M) => x * x_1) x xs
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
Equivalence between maps α → M
and monoid homomorphisms FreeMonoid α →* M
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Define an additive action of FreeAddMonoid α
on β
.
Equations
Instances For
Define a multiplicative action of FreeMonoid α
on β
.
Equations
Instances For
The unique additive monoid homomorphism FreeAddMonoid α →+ FreeAddMonoid β
that sends each of x
to of (f x)
.
Equations
- FreeAddMonoid.map f = { toZeroHom := { toFun := fun (l : FreeAddMonoid α) => FreeAddMonoid.ofList (List.map f (FreeAddMonoid.toList l)), map_zero' := ⋯ }, map_add' := ⋯ }
Instances For
The unique monoid homomorphism FreeMonoid α →* FreeMonoid β
that sends
each of x
to of (f x)
.
Equations
- FreeMonoid.map f = { toOneHom := { toFun := fun (l : FreeMonoid α) => FreeMonoid.ofList (List.map f (FreeMonoid.toList l)), map_one' := ⋯ }, map_mul' := ⋯ }
Instances For
Equations
- FreeAddMonoid.uniqueAddUnits = { toInhabited := AddUnits.instInhabitedAddUnits, uniq := ⋯ }
The only invertible element of the free monoid is 1; this instance enables units_eq_one
.
Equations
- FreeMonoid.uniqueUnits = { toInhabited := Units.instInhabitedUnits, uniq := ⋯ }