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.
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.instAddCancelMonoid = AddCancelMonoid.mk ⋯
Equations
- FreeMonoid.instCancelMonoid = CancelMonoid.mk ⋯
Equations
- FreeAddMonoid.instInhabited = { default := 0 }
Equations
- FreeMonoid.instInhabited = { 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 + xsinstead of[]andx :: xs`.
Instances For
Recursor for FreeMonoid using 1 and FreeMonoid.of x * xs instead of [] and x :: xs.
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 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 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 = { 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 = { toFun := fun (l : FreeMonoid α) => FreeMonoid.ofList (List.map f (FreeMonoid.toList l)), map_one' := ⋯, map_mul' := ⋯ }
Instances For
Equations
- FreeAddMonoid.uniqueAddUnits = { toInhabited := AddUnits.instInhabited, uniq := ⋯ }
The only invertible element of the free monoid is 1; this instance enables units_eq_one.
Equations
- FreeMonoid.uniqueUnits = { toInhabited := Units.instInhabited, uniq := ⋯ }