Free constructions #
Main definitions #
FreeMagma α: free magma (structure with binary operation without any axioms) over alphabetα, defined inductively, with traversable instance and decidable equality.MagmaAssocQuotient α: quotient of a magmaαby the associativity equivalence relation.FreeSemigroup α: free semigroup over alphabetα, defined as a structure with two fieldshead : αandtail : List α(i.e. nonempty lists), with traversable instance and decidable equality.FreeMagmaAssocQuotientEquiv α: isomorphism betweenMagmaAssocQuotient (FreeMagma α)andFreeSemigroup α.FreeMagma.lift: the universal property of the free magma, expressing its adjointness.
Free nonabelian additive magma over a given alphabet.
- of {α : Type u} : α → FreeAddMagma α
- add {α : Type u} : FreeAddMagma α → FreeAddMagma α → FreeAddMagma α
Instances For
Equations
- instDecidableEqFreeAddMagma = decEqFreeAddMagma✝
Equations
- instDecidableEqFreeMagma = decEqFreeMagma✝
Equations
- FreeMagma.instInhabited = { default := FreeMagma.of default }
Equations
- FreeAddMagma.instInhabited = { default := FreeAddMagma.of default }
Equations
- FreeAddMagma.instAdd = { add := FreeAddMagma.add }
These lemmas are autogenerated by the inductive definition and due to
the existence of mul_eq not in simp normal form
Recursor for FreeMagma using x * y instead of FreeMagma.mul x y.
Equations
- x.recOnMul ih1 ih2 = FreeMagma.recOn x ih1 ih2
Instances For
Recursor for FreeAddMagma using x + y instead of FreeAddMagma.add x y.
Equations
- x.recOnAdd ih1 ih2 = FreeAddMagma.recOn x ih1 ih2
Instances For
Lifts a function α → β to a magma homomorphism FreeMagma α → β given a magma β.
Equations
- FreeMagma.liftAux f (FreeMagma.of x_1) = f x_1
- FreeMagma.liftAux f (x_1.mul y) = FreeMagma.liftAux f x_1 * FreeMagma.liftAux f y
Instances For
Lifts a function α → β to an additive magma homomorphism FreeAddMagma α → β given
an additive magma β.
Equations
- FreeAddMagma.liftAux f (FreeAddMagma.of x_1) = f x_1
- FreeAddMagma.liftAux f (x_1.add y) = FreeAddMagma.liftAux f x_1 + FreeAddMagma.liftAux f y
Instances For
The universal property of the free magma expressing its adjointness.
Equations
- FreeMagma.lift = { toFun := fun (f : α → β) => { toFun := FreeMagma.liftAux f, map_mul' := ⋯ }, invFun := fun (F : FreeMagma α →ₙ* β) => ⇑F ∘ FreeMagma.of, left_inv := ⋯, right_inv := ⋯ }
Instances For
The universal property of the free additive magma expressing its adjointness.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The unique additive magma homomorphism FreeAddMagma α → FreeAddMagma β that sends
each of x to of (f x).
Equations
- FreeAddMagma.map f = FreeAddMagma.lift (FreeAddMagma.of ∘ f)
Instances For
Recursor on FreeAddMagma using pure instead of of.
Equations
- x.recOnPure ih1 ih2 = x.recOnAdd ih1 ih2
Instances For
FreeMagma is traversable.
Equations
- FreeMagma.traverse F (FreeMagma.of x_1) = FreeMagma.of <$> F x_1
- FreeMagma.traverse F (x_1.mul y) = (fun (x1 x2 : FreeMagma β) => x1 * x2) <$> FreeMagma.traverse F x_1 <*> FreeMagma.traverse F y
Instances For
FreeAddMagma is traversable.
Equations
- FreeAddMagma.traverse F (FreeAddMagma.of x_1) = FreeAddMagma.of <$> F x_1
- FreeAddMagma.traverse F (x_1.add y) = (fun (x1 x2 : FreeAddMagma β) => x1 + x2) <$> FreeAddMagma.traverse F x_1 <*> FreeAddMagma.traverse F y
Instances For
Representation of an element of a free magma.
Equations
- (FreeMagma.of x_1).repr = repr x_1
- (x_1.mul y).repr = Std.Format.text "( " ++ x_1.repr ++ Std.Format.text " * " ++ y.repr ++ Std.Format.text " )"
Instances For
Representation of an element of a free additive magma.
Equations
- (FreeAddMagma.of x_1).repr = repr x_1
- (x_1.add y).repr = Std.Format.text "( " ++ x_1.repr ++ Std.Format.text " + " ++ y.repr ++ Std.Format.text " )"
Instances For
Equations
- instReprFreeAddMagma = { reprPrec := fun (o : FreeAddMagma α) (x : ℕ) => o.repr }
Length of an element of a free magma.
Equations
- (FreeMagma.of x_1).length = 1
- (x_1.mul y).length = x_1.length + y.length
Instances For
Length of an element of a free additive magma.
Equations
- (FreeAddMagma.of x_1).length = 1
- (x_1.add y).length = x_1.length + y.length
Instances For
The length of an element of a free magma is positive.
The length of an element of a free additive magma is positive.
Semigroup quotient of a magma.
Equations
Instances For
Additive semigroup quotient of an additive magma.
Equations
Instances For
Equations
- Magma.AssocQuotient.instSemigroup = Semigroup.mk ⋯
Equations
- AddMagma.FreeAddSemigroup.instAddSemigroup = AddSemigroup.mk ⋯
Embedding from magma to its free semigroup.
Equations
- Magma.AssocQuotient.of = { toFun := Quot.mk (Magma.AssocRel α), map_mul' := ⋯ }
Instances For
Embedding from additive magma to its free additive semigroup.
Equations
- AddMagma.FreeAddSemigroup.of = { toFun := Quot.mk (AddMagma.AssocRel α), map_add' := ⋯ }
Instances For
Equations
- Magma.AssocQuotient.instInhabited = { default := Magma.AssocQuotient.of default }
Equations
- AddMagma.FreeAddSemigroup.instInhabited = { default := AddMagma.FreeAddSemigroup.of default }
Lifts a magma homomorphism α → β to a semigroup homomorphism Magma.AssocQuotient α → β
given a semigroup β.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Lifts an additive magma homomorphism α → β to an
additive semigroup homomorphism AddMagma.AssocQuotient α → β given an additive semigroup β.
Equations
- One or more equations did not get rendered due to their size.
Instances For
From a magma homomorphism α →ₙ* β to a semigroup homomorphism
Magma.AssocQuotient α →ₙ* Magma.AssocQuotient β.
Equations
- Magma.AssocQuotient.map f = Magma.AssocQuotient.lift (Magma.AssocQuotient.of.comp f)
Instances For
From an additive magma homomorphism α → β to an additive semigroup homomorphism
AddMagma.AssocQuotient α → AddMagma.AssocQuotient β.
Equations
- AddMagma.FreeAddSemigroup.map f = AddMagma.FreeAddSemigroup.lift (AddMagma.FreeAddSemigroup.of.comp f)
Instances For
Free additive semigroup over a given alphabet.
- head : α
The head of the element
- tail : List α
The tail of the element
Instances For
Free semigroup over a given alphabet.
- head : α
The head of the element
- tail : List α
The tail of the element
Instances For
Equations
- FreeSemigroup.instSemigroup = Semigroup.mk ⋯
Equations
- FreeAddSemigroup.instAddSemigroup = AddSemigroup.mk ⋯
The embedding α → FreeSemigroup α.
Equations
- FreeSemigroup.of x = { head := x, tail := [] }
Instances For
The embedding α → FreeAddSemigroup α.
Equations
- FreeAddSemigroup.of x = { head := x, tail := [] }
Instances For
Length of an element of free semigroup.
Instances For
Length of an element of free additive semigroup
Instances For
Equations
- FreeSemigroup.instInhabited = { default := FreeSemigroup.of default }
Equations
- FreeAddSemigroup.instInhabited = { default := FreeAddSemigroup.of default }
Recursor for free semigroup using of and *.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Recursor for free additive semigroup using of and +.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Lifts a function α → β to a semigroup homomorphism FreeSemigroup α → β given
a semigroup β.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Lifts a function α → β to an additive semigroup
homomorphism FreeAddSemigroup α → β given an additive semigroup β.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The unique semigroup homomorphism that sends of x to of (f x).
Equations
- FreeSemigroup.map f = FreeSemigroup.lift (FreeSemigroup.of ∘ f)
Instances For
The unique additive semigroup homomorphism that sends of x to of (f x).
Equations
- FreeAddSemigroup.map f = FreeAddSemigroup.lift (FreeAddSemigroup.of ∘ f)
Instances For
Equations
- FreeSemigroup.instMonad = Monad.mk
Equations
- FreeAddSemigroup.instMonad = Monad.mk
Recursor that uses pure instead of of.
Equations
- x.recOnPure ih1 ih2 = x.recOnMul ih1 ih2
Instances For
Recursor that uses pure instead of of.
Equations
- x.recOnPure ih1 ih2 = x.recOnAdd ih1 ih2
Instances For
FreeSemigroup is traversable.
Equations
- One or more equations did not get rendered due to their size.
Instances For
FreeAddSemigroup is traversable.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- x✝¹.instDecidableEq x✝ = decidable_of_iff' (x✝¹.head = x✝.head ∧ x✝¹.tail = x✝.tail) ⋯
Equations
- x✝¹.instDecidableEq x✝ = decidable_of_iff' (x✝¹.head = x✝.head ∧ x✝¹.tail = x✝.tail) ⋯
The canonical multiplicative morphism from FreeMagma α to FreeSemigroup α.
Equations
- FreeMagma.toFreeSemigroup = FreeMagma.lift FreeSemigroup.of
Instances For
The canonical additive morphism from FreeAddMagma α to FreeAddSemigroup α.
Equations
- FreeAddMagma.toFreeAddSemigroup = FreeAddMagma.lift FreeAddSemigroup.of
Instances For
Isomorphism between Magma.AssocQuotient (FreeMagma α) and FreeSemigroup α.
Equations
- FreeMagmaAssocQuotientEquiv α = (Magma.AssocQuotient.lift FreeMagma.toFreeSemigroup).toMulEquiv (FreeSemigroup.lift (⇑Magma.AssocQuotient.of ∘ FreeMagma.of)) ⋯ ⋯
Instances For
Isomorphism between AddMagma.AssocQuotient (FreeAddMagma α) and
FreeAddSemigroup α.
Equations
- FreeAddMagmaAssocQuotientEquiv α = (AddMagma.FreeAddSemigroup.lift FreeAddMagma.toFreeAddSemigroup).toAddEquiv (FreeAddSemigroup.lift (⇑AddMagma.FreeAddSemigroup.of ∘ FreeAddMagma.of)) ⋯ ⋯