Monoid, group etc. structures on M × N #
In this file we define one-binop (Monoid, Group etc) structures on M × N.
We also prove trivial simp lemmas, and define the following operations on MonoidHoms:
fst M N : M × N →* M,snd M N : M × N →* N: projectionsProd.fstandProd.sndasMonoidHoms;inl M N : M →* M × N,inr M N : N →* M × N: inclusions of first/second monoid into the product;f.prod g:M →* N × P: sendsxto(f x, g x);- When
Pis commutative,f.coprod g : M × N →* Psends(x, y)tof x * g y(without the commutativity assumption onP, seeMonoidHom.noncommPiCoprod); f.prodMap g : M × N → M' × N':Prod.map f gas aMonoidHom, sends(x, y)to(f x, g y).
Main declarations #
mulMulHom/mulMonoidHom: Multiplication bundled as a multiplicative/monoid homomorphism.divMonoidHom: Division bundled as a monoid homomorphism.
Equations
- Prod.instInvolutiveInv = { toInv := Prod.instInv, inv_inv := ⋯ }
Equations
- Prod.instInvolutiveNeg = { toNeg := Prod.instNeg, neg_neg := ⋯ }
Equations
- Prod.instSemigroup = { toMul := Prod.instMul, mul_assoc := ⋯ }
Equations
- Prod.instAddSemigroup = { toAdd := Prod.instAdd, add_assoc := ⋯ }
Equations
- Prod.instCommSemigroup = { toSemigroup := Prod.instSemigroup, mul_comm := ⋯ }
Equations
- Prod.instAddCommSemigroup = { toAddSemigroup := Prod.instAddSemigroup, add_comm := ⋯ }
Equations
- Prod.instMulOneClass = { toOne := Prod.instOne, toMul := Prod.instMul, one_mul := ⋯, mul_one := ⋯ }
Equations
- Prod.instAddZeroClass = { toZero := Prod.instZero, toAdd := Prod.instAdd, zero_add := ⋯, add_zero := ⋯ }
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- Prod.instDivisionMonoid = { toDivInvMonoid := Prod.instDivInvMonoid, inv_inv := ⋯, mul_inv_rev := ⋯, inv_eq_of_mul := ⋯ }
Equations
- Prod.instSubtractionMonoid = { toSubNegMonoid := Prod.subNegMonoid, neg_neg := ⋯, neg_add_rev := ⋯, neg_eq_of_add := ⋯ }
Equations
- Prod.instDivisionCommMonoid = { toDivisionMonoid := Prod.instDivisionMonoid, mul_comm := ⋯ }
Equations
- Prod.SubtractionCommMonoid = { toSubtractionMonoid := Prod.instSubtractionMonoid, add_comm := ⋯ }
Equations
- Prod.instGroup = { toDivInvMonoid := Prod.instDivInvMonoid, inv_mul_cancel := ⋯ }
Equations
- Prod.instAddGroup = { toSubNegMonoid := Prod.subNegMonoid, neg_add_cancel := ⋯ }
Equations
- Prod.instLeftCancelSemigroup = { toSemigroup := Prod.instSemigroup, toIsLeftCancelMul := ⋯ }
Equations
- Prod.instAddLeftCancelSemigroup = { toAddSemigroup := Prod.instAddSemigroup, toIsLeftCancelAdd := ⋯ }
Equations
- Prod.instRightCancelSemigroup = { toSemigroup := Prod.instSemigroup, toIsRightCancelMul := ⋯ }
Equations
- Prod.instAddRightCancelSemigroup = { toAddSemigroup := Prod.instAddSemigroup, toIsRightCancelAdd := ⋯ }
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- Prod.instCancelMonoid = { toLeftCancelMonoid := Prod.instLeftCancelMonoid, toIsRightCancelMul := ⋯ }
Equations
- Prod.instAddCancelMonoid = { toAddLeftCancelMonoid := Prod.instAddLeftCancelMonoid, toIsRightCancelAdd := ⋯ }
Equations
- Prod.instCommMonoid = { toMonoid := Prod.instMonoid, mul_comm := ⋯ }
Equations
- Prod.instAddCommMonoid = { toAddMonoid := Prod.instAddMonoid, add_comm := ⋯ }
Equations
- Prod.instCancelCommMonoid = { toCommMonoid := Prod.instCommMonoid, toIsLeftCancelMul := ⋯ }
Equations
- Prod.instAddCancelCommMonoid = { toAddCommMonoid := Prod.instAddCommMonoid, toIsLeftCancelAdd := ⋯ }
Equations
- Prod.instCommGroup = { toGroup := Prod.instGroup, mul_comm := ⋯ }
Equations
- Prod.instAddCommGroup = { toAddGroup := Prod.instAddGroup, add_comm := ⋯ }
Coproduct of two MulHoms with the same codomain:
f.coprod g (p : M × N) = f p.1 * g p.2.
(Commutative codomain; for the general case, see MulHom.noncommCoprod)
Equations
- f.coprod g = f.comp (MulHom.fst M N) * g.comp (MulHom.snd M N)
Instances For
Coproduct of two AddHoms with the same codomain:
f.coprod g (p : M × N) = f p.1 + g p.2.
(Commutative codomain; for the general case, see AddHom.noncommCoprod)
Equations
- f.coprod g = f.comp (AddHom.fst M N) + g.comp (AddHom.snd M N)
Instances For
Given monoids M, N, the natural projection homomorphism from M × N to M.
Equations
- MonoidHom.fst M N = { toFun := Prod.fst, map_one' := ⋯, map_mul' := ⋯ }
Instances For
Given additive monoids A, B, the natural projection homomorphism
from A × B to A
Equations
- AddMonoidHom.fst M N = { toFun := Prod.fst, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Given monoids M, N, the natural projection homomorphism from M × N to N.
Equations
- MonoidHom.snd M N = { toFun := Prod.snd, map_one' := ⋯, map_mul' := ⋯ }
Instances For
Given additive monoids A, B, the natural projection homomorphism
from A × B to B
Equations
- AddMonoidHom.snd M N = { toFun := Prod.snd, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Given monoids M, N, the natural inclusion homomorphism from M to M × N.
Instances For
Given additive monoids A, B, the natural inclusion homomorphism
from A to A × B.
Instances For
Given monoids M, N, the natural inclusion homomorphism from N to M × N.
Instances For
Given additive monoids A, B, the natural inclusion homomorphism
from B to A × B.
Instances For
Combine two MonoidHoms f : M →* N, g : M →* P into f.prod g : M →* N × P
given by (f.prod g) x = (f x, g x).
Instances For
Combine two AddMonoidHoms f : M →+ N, g : M →+ P into
f.prod g : M →+ N × P given by (f.prod g) x = (f x, g x)
Instances For
Equations
- f.prodMap g = (f.comp (MonoidHom.fst M N)).prod (g.comp (MonoidHom.snd M N))
Instances For
Prod.map as an AddMonoidHom.
Equations
- f.prodMap g = (f.comp (AddMonoidHom.fst M N)).prod (g.comp (AddMonoidHom.snd M N))
Instances For
Coproduct of two MonoidHoms with the same codomain:
f.coprod g (p : M × N) = f p.1 * g p.2.
(Commutative case; for the general case, see MonoidHom.noncommCoprod.)
Equations
- f.coprod g = f.comp (MonoidHom.fst M N) * g.comp (MonoidHom.snd M N)
Instances For
Coproduct of two AddMonoidHoms with the same codomain:
f.coprod g (p : M × N) = f p.1 + g p.2.
(Commutative case; for the general case, see AddHom.noncommCoprod.)
Equations
- f.coprod g = f.comp (AddMonoidHom.fst M N) + g.comp (AddMonoidHom.snd M N)
Instances For
The equivalence between M × N and N × M given by swapping the components
is multiplicative.
Equations
- MulEquiv.prodComm = { toEquiv := Equiv.prodComm M N, map_mul' := ⋯ }
Instances For
The equivalence between M × N and N × M given by swapping the
components is additive.
Equations
- AddEquiv.prodComm = { toEquiv := Equiv.prodComm M N, map_add' := ⋯ }
Instances For
The equivalence between (M × N) × P and M × (N × P) is multiplicative.
Equations
- MulEquiv.prodAssoc = { toEquiv := Equiv.prodAssoc M N P, map_mul' := ⋯ }
Instances For
The equivalence between (M × N) × P and M × (N × P) is additive.
Equations
- AddEquiv.prodAssoc = { toEquiv := Equiv.prodAssoc M N P, map_add' := ⋯ }
Instances For
Four-way commutativity of Prod. The name matches mul_mul_mul_comm.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Four-way commutativity of Prod.
The name matches mul_mul_mul_comm
Equations
- One or more equations did not get rendered due to their size.
Instances For
Product of multiplicative isomorphisms; the maps come from Equiv.prodCongr.
Instances For
Product of additive isomorphisms; the maps come from Equiv.prodCongr.
Instances For
Multiplying by the trivial monoid doesn't change the structure.
This is the MulEquiv version of Equiv.uniqueProd.
Equations
- MulEquiv.uniqueProd = { toEquiv := Equiv.uniqueProd M N, map_mul' := ⋯ }
Instances For
Multiplying by the trivial monoid doesn't change the structure.
This is the AddEquiv version of Equiv.uniqueProd.
Equations
- AddEquiv.uniqueProd = { toEquiv := Equiv.uniqueProd M N, map_add' := ⋯ }
Instances For
Multiplying by the trivial monoid doesn't change the structure.
This is the MulEquiv version of Equiv.prodUnique.
Equations
- MulEquiv.prodUnique = { toEquiv := Equiv.prodUnique M N, map_mul' := ⋯ }
Instances For
Multiplying by the trivial monoid doesn't change the structure.
This is the AddEquiv version of Equiv.prodUnique.
Equations
- AddEquiv.prodUnique = { toEquiv := Equiv.prodUnique M N, map_add' := ⋯ }
Instances For
The additive monoid equivalence between additive units of a product of two additive monoids, and the product of the additive units of each additive monoid.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Canonical homomorphism of monoids from αˣ into α × αᵐᵒᵖ.
Used mainly to define the natural topology of αˣ.
Equations
- Units.embedProduct α = { toFun := fun (x : αˣ) => (↑x, MulOpposite.op ↑x⁻¹), map_one' := ⋯, map_mul' := ⋯ }
Instances For
Multiplication and division as homomorphisms #
Multiplication as a monoid homomorphism.
Instances For
Addition as an additive monoid homomorphism.
Instances For
Division as a monoid homomorphism.
Instances For
Subtraction as an additive monoid homomorphism.