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 MonoidHom
s:
fst M N : M × N →* M
,snd M N : M × N →* N
: projectionsProd.fst
andProd.snd
asMonoidHom
s;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
: sendsx
to(f x, g x)
;- When
P
is commutative,f.coprod g : M × N →* P
sends(x, y)
tof x * g y
(without the commutativity assumption onP
, seeMonoidHom.noncommPiCoprod
); f.prodMap g : M × N → M' × N'
:prod.map f g
as aMonoidHom
, sends(x, y)
to(f x, g y)
.
Main declarations #
mulMulHom
/mulMonoidHom
/mulMonoidWithZeroHom
: Multiplication bundled as a multiplicative/monoid/monoid with zero homomorphism.divMonoidHom
/divMonoidWithZeroHom
: Division bundled as a monoid/monoid with zero homomorphism.
Equations
- Prod.instInvolutiveNegSum = InvolutiveNeg.mk ⋯
Equations
- Prod.instInvolutiveInvProd = InvolutiveInv.mk ⋯
Equations
- Prod.instMulZeroClassProd = MulZeroClass.mk ⋯ ⋯
Equations
- Prod.instAddSemigroup = AddSemigroup.mk ⋯
Equations
- Prod.instSemigroup = Semigroup.mk ⋯
Equations
- Prod.instAddCommSemigroup = AddCommSemigroup.mk ⋯
Equations
- Prod.instCommSemigroup = CommSemigroup.mk ⋯
Equations
- Prod.instSemigroupWithZeroProd = SemigroupWithZero.mk ⋯ ⋯
Equations
- Prod.instAddZeroClass = AddZeroClass.mk ⋯ ⋯
Equations
- Prod.instMulOneClass = MulOneClass.mk ⋯ ⋯
Equations
- Prod.instAddMonoid = AddMonoid.mk ⋯ ⋯ (fun (z : ℕ) (a : M × N) => (AddMonoid.nsmul z a.1, AddMonoid.nsmul z a.2)) ⋯ ⋯
Equations
- Prod.instMonoid = Monoid.mk ⋯ ⋯ (fun (z : ℕ) (a : M × N) => (Monoid.npow z a.1, Monoid.npow z a.2)) ⋯ ⋯
Equations
- Prod.subNegMonoid = SubNegMonoid.mk ⋯ (fun (z : ℤ) (a : G × H) => (SubNegMonoid.zsmul z a.1, SubNegMonoid.zsmul z a.2)) ⋯ ⋯ ⋯
Equations
- Prod.instDivInvMonoidProd = DivInvMonoid.mk ⋯ (fun (z : ℤ) (a : G × H) => (DivInvMonoid.zpow z a.1, DivInvMonoid.zpow z a.2)) ⋯ ⋯ ⋯
Equations
- Prod.instDivisionAddMonoidSum = SubtractionMonoid.mk ⋯ ⋯ ⋯
Equations
- Prod.instDivisionMonoidProd = DivisionMonoid.mk ⋯ ⋯ ⋯
Equations
- Prod.SubtractionCommMonoid = SubtractionCommMonoid.mk ⋯
Equations
- Prod.instDivisionCommMonoidProd = DivisionCommMonoid.mk ⋯
Equations
- Prod.instAddGroup = AddGroup.mk ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- Prod.instAddLeftCancelSemigroupSum = AddLeftCancelSemigroup.mk ⋯
Equations
- Prod.instLeftCancelSemigroupProd = LeftCancelSemigroup.mk ⋯
Equations
- Prod.instAddRightCancelSemigroupSum = AddRightCancelSemigroup.mk ⋯
Equations
- Prod.instRightCancelSemigroupProd = RightCancelSemigroup.mk ⋯
Equations
- Prod.instAddLeftCancelMonoidSum = AddLeftCancelMonoid.mk ⋯ ⋯ nsmulRec ⋯ ⋯
Equations
- Prod.instLeftCancelMonoidProd = LeftCancelMonoid.mk ⋯ ⋯ npowRec ⋯ ⋯
Equations
- Prod.instAddRightCancelMonoidSum = AddRightCancelMonoid.mk ⋯ ⋯ nsmulRec ⋯ ⋯
Equations
- Prod.instRightCancelMonoidProd = RightCancelMonoid.mk ⋯ ⋯ npowRec ⋯ ⋯
Equations
- Prod.instAddCancelMonoidSum = AddCancelMonoid.mk ⋯
Equations
- Prod.instCancelMonoidProd = CancelMonoid.mk ⋯
Equations
- Prod.instAddCommMonoid = AddCommMonoid.mk ⋯
Equations
- Prod.instCommMonoid = CommMonoid.mk ⋯
Equations
- Prod.instAddCancelCommMonoidSum = AddCancelCommMonoid.mk ⋯
Equations
- Prod.instCancelCommMonoidProd = CancelCommMonoid.mk ⋯
Equations
- Prod.instMulZeroOneClassProd = MulZeroOneClass.mk ⋯ ⋯
Equations
- Prod.instMonoidWithZeroProd = MonoidWithZero.mk ⋯ ⋯
Equations
- Prod.instCommMonoidWithZeroProd = CommMonoidWithZero.mk ⋯ ⋯
Equations
- Prod.instAddCommGroup = AddCommGroup.mk ⋯
Equations
- Prod.instCommGroup = CommGroup.mk ⋯
Given additive magmas A
, B
, the natural projection homomorphism
from A × B
to A
Equations
- AddHom.fst M N = { toFun := Prod.fst, map_add' := ⋯ }
Instances For
Given magmas M
, N
, the natural projection homomorphism from M × N
to M
.
Equations
- MulHom.fst M N = { toFun := Prod.fst, map_mul' := ⋯ }
Instances For
Given additive magmas A
, B
, the natural projection homomorphism
from A × B
to B
Equations
- AddHom.snd M N = { toFun := Prod.snd, map_add' := ⋯ }
Instances For
Given magmas M
, N
, the natural projection homomorphism from M × N
to N
.
Equations
- MulHom.snd M N = { toFun := Prod.snd, map_mul' := ⋯ }
Instances For
Combine two AddMonoidHom
s f : AddHom M N
, g : AddHom M P
into
f.prod g : AddHom M (N × P)
given by (f.prod g) x = (f x, g x)
Equations
- AddHom.prod f g = { toFun := Pi.prod ⇑f ⇑g, map_add' := ⋯ }
Instances For
Combine two MonoidHom
s f : M →ₙ* N
, g : M →ₙ* P
into
f.prod g : M →ₙ* (N × P)
given by (f.prod g) x = (f x, g x)
.
Equations
- MulHom.prod f g = { toFun := Pi.prod ⇑f ⇑g, map_mul' := ⋯ }
Instances For
Prod.map
as an AddMonoidHom
Equations
- AddHom.prodMap f g = AddHom.prod (AddHom.comp f (AddHom.fst M N)) (AddHom.comp g (AddHom.snd M N))
Instances For
Equations
- MulHom.prodMap f g = MulHom.prod (MulHom.comp f (MulHom.fst M N)) (MulHom.comp g (MulHom.snd M N))
Instances For
Coproduct of two AddHom
s 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
- AddHom.coprod f g = AddHom.comp f (AddHom.fst M N) + AddHom.comp g (AddHom.snd M N)
Instances For
Coproduct of two MulHom
s 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
- MulHom.coprod f g = MulHom.comp f (MulHom.fst M N) * MulHom.comp g (MulHom.snd M N)
Instances For
Given additive monoids A
, B
, the natural projection homomorphism
from A × B
to A
Equations
- AddMonoidHom.fst M N = { toZeroHom := { toFun := Prod.fst, map_zero' := ⋯ }, map_add' := ⋯ }
Instances For
Given monoids M
, N
, the natural projection homomorphism from M × N
to M
.
Equations
- MonoidHom.fst M N = { toOneHom := { toFun := Prod.fst, 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 = { toZeroHom := { toFun := Prod.snd, map_zero' := ⋯ }, map_add' := ⋯ }
Instances For
Given monoids M
, N
, the natural projection homomorphism from M × N
to N
.
Equations
- MonoidHom.snd M N = { toOneHom := { toFun := Prod.snd, map_one' := ⋯ }, map_mul' := ⋯ }
Instances For
Given additive monoids A
, B
, the natural inclusion homomorphism
from A
to A × B
.
Equations
- AddMonoidHom.inl M N = { toZeroHom := { toFun := fun (x : M) => (x, 0), map_zero' := ⋯ }, map_add' := ⋯ }
Instances For
Given monoids M
, N
, the natural inclusion homomorphism from M
to M × N
.
Equations
- MonoidHom.inl M N = { toOneHom := { toFun := fun (x : M) => (x, 1), map_one' := ⋯ }, map_mul' := ⋯ }
Instances For
Given additive monoids A
, B
, the natural inclusion homomorphism
from B
to A × B
.
Equations
- AddMonoidHom.inr M N = { toZeroHom := { toFun := fun (y : N) => (0, y), map_zero' := ⋯ }, map_add' := ⋯ }
Instances For
Given monoids M
, N
, the natural inclusion homomorphism from N
to M × N
.
Equations
- MonoidHom.inr M N = { toOneHom := { toFun := fun (y : N) => (1, y), map_one' := ⋯ }, map_mul' := ⋯ }
Instances For
Combine two AddMonoidHom
s f : M →+ N
, g : M →+ P
into
f.prod g : M →+ N × P
given by (f.prod g) x = (f x, g x)
Equations
- AddMonoidHom.prod f g = { toZeroHom := { toFun := Pi.prod ⇑f ⇑g, map_zero' := ⋯ }, map_add' := ⋯ }
Instances For
Combine two MonoidHom
s f : M →* N
, g : M →* P
into f.prod g : M →* N × P
given by (f.prod g) x = (f x, g x)
.
Equations
- MonoidHom.prod f g = { toOneHom := { toFun := Pi.prod ⇑f ⇑g, map_one' := ⋯ }, map_mul' := ⋯ }
Instances For
prod.map
as an AddMonoidHom
.
Equations
- AddMonoidHom.prodMap f g = AddMonoidHom.prod (AddMonoidHom.comp f (AddMonoidHom.fst M N)) (AddMonoidHom.comp g (AddMonoidHom.snd M N))
Instances For
prod.map
as a MonoidHom
.
Equations
- MonoidHom.prodMap f g = MonoidHom.prod (MonoidHom.comp f (MonoidHom.fst M N)) (MonoidHom.comp g (MonoidHom.snd M N))
Instances For
Coproduct of two AddMonoidHom
s 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
- AddMonoidHom.coprod f g = AddMonoidHom.comp f (AddMonoidHom.fst M N) + AddMonoidHom.comp g (AddMonoidHom.snd M N)
Instances For
Coproduct of two MonoidHom
s 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
- MonoidHom.coprod f g = MonoidHom.comp f (MonoidHom.fst M N) * MonoidHom.comp g (MonoidHom.snd M N)
Instances For
The equivalence between M × N
and N × M
given by swapping the
components is additive.
Equations
- AddEquiv.prodComm = let __src := Equiv.prodComm M N; { toEquiv := __src, map_add' := ⋯ }
Instances For
The equivalence between M × N
and N × M
given by swapping the components
is multiplicative.
Equations
- MulEquiv.prodComm = let __src := Equiv.prodComm M N; { toEquiv := __src, map_mul' := ⋯ }
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 additive isomorphisms; the maps come from Equiv.prodCongr
.
Equations
- AddEquiv.prodCongr f g = let __src := Equiv.prodCongr f.toEquiv g.toEquiv; { toEquiv := __src, map_add' := ⋯ }
Instances For
Product of multiplicative isomorphisms; the maps come from Equiv.prodCongr
.
Equations
- MulEquiv.prodCongr f g = let __src := Equiv.prodCongr f.toEquiv g.toEquiv; { toEquiv := __src, map_mul' := ⋯ }
Instances For
Multiplying by the trivial monoid doesn't change the structure.
Equations
- AddEquiv.uniqueProd = let __src := Equiv.uniqueProd M N; { toEquiv := __src, map_add' := ⋯ }
Instances For
Multiplying by the trivial monoid doesn't change the structure.
Equations
- MulEquiv.uniqueProd = let __src := Equiv.uniqueProd M N; { toEquiv := __src, map_mul' := ⋯ }
Instances For
Multiplying by the trivial monoid doesn't change the structure.
Equations
- AddEquiv.prodUnique = let __src := Equiv.prodUnique M N; { toEquiv := __src, map_add' := ⋯ }
Instances For
Multiplying by the trivial monoid doesn't change the structure.
Equations
- MulEquiv.prodUnique = let __src := Equiv.prodUnique M N; { toEquiv := __src, map_mul' := ⋯ }
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 additive monoids from AddUnits α
into α × αᵃᵒᵖ
.
Used mainly to define the natural topology of AddUnits α
.
Equations
- AddUnits.embedProduct α = { toZeroHom := { toFun := fun (x : AddUnits α) => (↑x, AddOpposite.op ↑(-x)), map_zero' := ⋯ }, map_add' := ⋯ }
Instances For
Canonical homomorphism of monoids from αˣ
into α × αᵐᵒᵖ
.
Used mainly to define the natural topology of αˣ
.
Equations
- Units.embedProduct α = { toOneHom := { toFun := fun (x : αˣ) => (↑x, MulOpposite.op ↑x⁻¹), map_one' := ⋯ }, map_mul' := ⋯ }
Instances For
Multiplication and division as homomorphisms #
Addition as an additive monoid homomorphism.
Equations
- addAddMonoidHom = let __src := addAddHom; { toZeroHom := { toFun := __src.toFun, map_zero' := ⋯ }, map_add' := ⋯ }
Instances For
Multiplication as a monoid homomorphism.
Equations
- mulMonoidHom = let __src := mulMulHom; { toOneHom := { toFun := __src.toFun, map_one' := ⋯ }, map_mul' := ⋯ }
Instances For
Multiplication as a multiplicative homomorphism with zero.
Equations
- mulMonoidWithZeroHom = let __src := mulMonoidHom; { toZeroHom := { toFun := __src.toFun, map_zero' := ⋯ }, map_one' := ⋯, map_mul' := ⋯ }
Instances For
Subtraction as an additive monoid homomorphism.
Equations
Instances For
Division as a monoid homomorphism.
Equations
Instances For
Division as a multiplicative homomorphism with zero.