Group structures on the multiplicative and additive opposites #
Additive structures on αᵐᵒᵖ
#
Equations
- AddOpposite.instNatCast = { natCast := fun (n : ℕ) => AddOpposite.op ↑n }
Equations
- MulOpposite.instNatCast = { natCast := fun (n : ℕ) => MulOpposite.op ↑n }
Equations
- AddOpposite.instIntCast = { intCast := fun (n : ℤ) => AddOpposite.op ↑n }
Equations
- MulOpposite.instIntCast = { intCast := fun (n : ℤ) => MulOpposite.op ↑n }
Equations
- MulOpposite.instAddSemigroup = Function.Injective.addSemigroup MulOpposite.unop ⋯ ⋯
Equations
- MulOpposite.instAddLeftCancelSemigroup = Function.Injective.addLeftCancelSemigroup MulOpposite.unop ⋯ ⋯
Equations
- MulOpposite.instAddRightCancelSemigroup = Function.Injective.addRightCancelSemigroup MulOpposite.unop ⋯ ⋯
Equations
- MulOpposite.instAddCommSemigroup = Function.Injective.addCommSemigroup MulOpposite.unop ⋯ ⋯
Equations
- MulOpposite.instAddZeroClass = Function.Injective.addZeroClass MulOpposite.unop ⋯ ⋯ ⋯
Equations
- MulOpposite.instAddMonoid = Function.Injective.addMonoid MulOpposite.unop ⋯ ⋯ ⋯ ⋯
Equations
- MulOpposite.instAddCommMonoid = Function.Injective.addCommMonoid MulOpposite.unop ⋯ ⋯ ⋯ ⋯
Equations
- MulOpposite.instAddMonoidWithOne = AddMonoidWithOne.mk ⋯ ⋯
Equations
- MulOpposite.instAddCommMonoidWithOne = let __spread.0 := MulOpposite.instAddCommMonoid; AddCommMonoidWithOne.mk ⋯
Equations
- MulOpposite.instSubNegMonoid = Function.Injective.subNegMonoid MulOpposite.unop ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- MulOpposite.instAddGroup = Function.Injective.addGroup MulOpposite.unop ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- MulOpposite.instAddCommGroup = Function.Injective.addCommGroup MulOpposite.unop ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- MulOpposite.instAddGroupWithOne = let __spread.0 := MulOpposite.instAddGroup; AddGroupWithOne.mk ⋯ SubNegMonoid.zsmul ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- MulOpposite.instAddCommGroupWithOne = let __spread.0 := MulOpposite.instAddGroupWithOne; AddCommGroupWithOne.mk ⋯ ⋯ ⋯ ⋯
Multiplicative structures on αᵐᵒᵖ
#
We also generate additive structures on αᵃᵒᵖ
using to_additive
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- AddOpposite.instAddSemigroup = AddSemigroup.mk ⋯
Equations
- MulOpposite.instSemigroup = Semigroup.mk ⋯
Equations
- AddOpposite.instAddLeftCancelSemigroup = AddLeftCancelSemigroup.mk ⋯
Equations
- MulOpposite.instLeftCancelSemigroup = LeftCancelSemigroup.mk ⋯
Equations
- AddOpposite.instAddRightCancelSemigroup = AddRightCancelSemigroup.mk ⋯
Equations
- MulOpposite.instRightCancelSemigroup = RightCancelSemigroup.mk ⋯
Equations
- AddOpposite.instAddCommSemigroup = AddCommSemigroup.mk ⋯
Equations
- MulOpposite.instCommSemigroup = CommSemigroup.mk ⋯
Equations
- AddOpposite.instAddZeroClass = AddZeroClass.mk ⋯ ⋯
Equations
- MulOpposite.instMulOneClass = MulOneClass.mk ⋯ ⋯
Equations
- AddOpposite.instAddMonoid = let __spread.0 := AddOpposite.instAddZeroClass; AddMonoid.mk ⋯ ⋯ (fun (n : ℕ) (a : αᵃᵒᵖ) => AddOpposite.op (n • AddOpposite.unop a)) ⋯ ⋯
Equations
- MulOpposite.instMonoid = let __spread.0 := MulOpposite.instMulOneClass; Monoid.mk ⋯ ⋯ (fun (n : ℕ) (a : αᵐᵒᵖ) => MulOpposite.op (MulOpposite.unop a ^ n)) ⋯ ⋯
Equations
- AddOpposite.instAddLeftCancelMonoid = let __spread.0 := AddOpposite.instAddMonoid; AddLeftCancelMonoid.mk ⋯ ⋯ AddMonoid.nsmul ⋯ ⋯
Equations
- MulOpposite.instLeftCancelMonoid = let __spread.0 := MulOpposite.instMonoid; LeftCancelMonoid.mk ⋯ ⋯ Monoid.npow ⋯ ⋯
Equations
- AddOpposite.instAddRightCancelMonoid = let __spread.0 := AddOpposite.instAddMonoid; AddRightCancelMonoid.mk ⋯ ⋯ AddMonoid.nsmul ⋯ ⋯
Equations
- MulOpposite.instRightCancelMonoid = let __spread.0 := MulOpposite.instMonoid; RightCancelMonoid.mk ⋯ ⋯ Monoid.npow ⋯ ⋯
Equations
- AddOpposite.instAddCancelMonoid = let __spread.0 := AddOpposite.instAddRightCancelMonoid; AddCancelMonoid.mk ⋯
Equations
- MulOpposite.instCancelMonoid = let __spread.0 := MulOpposite.instRightCancelMonoid; CancelMonoid.mk ⋯
Equations
- AddOpposite.instAddCommMonoid = let __spread.0 := AddOpposite.instAddCommSemigroup; AddCommMonoid.mk ⋯
Equations
- MulOpposite.instCommMonoid = let __spread.0 := MulOpposite.instCommSemigroup; CommMonoid.mk ⋯
Equations
- AddOpposite.instAddCancelCommMonoid = let __spread.0 := AddOpposite.instAddCommMonoid; AddCancelCommMonoid.mk ⋯
Equations
- MulOpposite.instCancelCommMonoid = let __spread.0 := MulOpposite.instCommMonoid; CancelCommMonoid.mk ⋯
Equations
- AddOpposite.instSubNegMonoid = SubNegMonoid.mk ⋯ (fun (n : ℤ) (a : αᵃᵒᵖ) => AddOpposite.op (n • AddOpposite.unop a)) ⋯ ⋯ ⋯
Equations
- MulOpposite.instDivInvMonoid = DivInvMonoid.mk ⋯ (fun (n : ℤ) (a : αᵐᵒᵖ) => MulOpposite.op (MulOpposite.unop a ^ n)) ⋯ ⋯ ⋯
Equations
- AddOpposite.instSubtractionMonoid = let __spread.0 := AddOpposite.instInvolutiveNeg; SubtractionMonoid.mk ⋯ ⋯ ⋯
Equations
- MulOpposite.instDivisionMonoid = let __spread.0 := MulOpposite.instInvolutiveInv; DivisionMonoid.mk ⋯ ⋯ ⋯
Equations
- AddOpposite.instSubtractionCommMonoid = let __spread.0 := AddOpposite.instAddCommSemigroup; SubtractionCommMonoid.mk ⋯
Equations
- MulOpposite.instDivisionCommMonoid = let __spread.0 := MulOpposite.instCommSemigroup; DivisionCommMonoid.mk ⋯
Equations
- AddOpposite.instAddGroup = AddGroup.mk ⋯
Equations
- AddOpposite.instAddCommGroup = let __spread.0 := AddOpposite.instAddCommSemigroup; AddCommGroup.mk ⋯
Equations
- MulOpposite.instCommGroup = let __spread.0 := MulOpposite.instCommSemigroup; CommGroup.mk ⋯
The function MulOpposite.op
is an additive equivalence.
Equations
- MulOpposite.opAddEquiv = let __src := MulOpposite.opEquiv; { toEquiv := __src, map_add' := ⋯ }
Instances For
Multiplicative structures on αᵃᵒᵖ
#
Equations
- AddOpposite.instSemigroup = Function.Injective.semigroup AddOpposite.unop ⋯ ⋯
Equations
- AddOpposite.instLeftCancelSemigroup = Function.Injective.leftCancelSemigroup AddOpposite.unop ⋯ ⋯
Equations
- AddOpposite.instRightCancelSemigroup = Function.Injective.rightCancelSemigroup AddOpposite.unop ⋯ ⋯
Equations
- AddOpposite.instCommSemigroup = Function.Injective.commSemigroup AddOpposite.unop ⋯ ⋯
Equations
- AddOpposite.instMulOneClass = Function.Injective.mulOneClass AddOpposite.unop ⋯ ⋯ ⋯
Equations
- AddOpposite.pow = { pow := fun (a : αᵃᵒᵖ) (b : β) => AddOpposite.op (AddOpposite.unop a ^ b) }
Equations
- AddOpposite.instMonoid = Function.Injective.monoid AddOpposite.unop ⋯ ⋯ ⋯ ⋯
Equations
- AddOpposite.instCommMonoid = Function.Injective.commMonoid AddOpposite.unop ⋯ ⋯ ⋯ ⋯
Equations
- AddOpposite.instDivInvMonoid = Function.Injective.divInvMonoid AddOpposite.unop ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- AddOpposite.instGroup = Function.Injective.group AddOpposite.unop ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- AddOpposite.instCommGroup = Function.Injective.commGroup AddOpposite.unop ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- AddOpposite.instAddCommMonoidWithOne = let __spread.0 := AddOpposite.instAddCommMonoid; AddCommMonoidWithOne.mk ⋯
Equations
- AddOpposite.instAddCommGroupWithOne = let __spread.0 := AddOpposite.instAddCommMonoidWithOne; AddCommGroupWithOne.mk ⋯ ⋯ ⋯ ⋯
The function AddOpposite.op
is a multiplicative equivalence.
Equations
- AddOpposite.opMulEquiv = let __src := AddOpposite.opEquiv; { toEquiv := __src, map_mul' := ⋯ }
Instances For
Negation on an additive group is an AddEquiv
to the opposite group. When G
is commutative, there is AddEquiv.inv
.
Equations
- AddEquiv.neg' G = let __src := (Equiv.neg G).trans AddOpposite.opEquiv; { toEquiv := __src, map_add' := ⋯ }
Instances For
Inversion on a group is a MulEquiv
to the opposite group. When G
is commutative, there is
MulEquiv.inv
.
Equations
- MulEquiv.inv' G = let __src := (Equiv.inv G).trans MulOpposite.opEquiv; { toEquiv := __src, map_mul' := ⋯ }
Instances For
An additive semigroup homomorphism f : AddHom M N
such that f x
additively
commutes with f y
for all x, y
defines an additive semigroup homomorphism to Sᵃᵒᵖ
.
Equations
- AddHom.toOpposite f hf = { toFun := AddOpposite.op ∘ ⇑f, map_add' := ⋯ }
Instances For
A semigroup homomorphism f : M →ₙ* N
such that f x
commutes with f y
for all x, y
defines a semigroup homomorphism to Nᵐᵒᵖ
.
Equations
- MulHom.toOpposite f hf = { toFun := MulOpposite.op ∘ ⇑f, map_mul' := ⋯ }
Instances For
An additive semigroup homomorphism f : AddHom M N
such that f x
additively
commutes with f y
for all x
, y
defines an additive semigroup homomorphism from Mᵃᵒᵖ
.
Equations
- AddHom.fromOpposite f hf = { toFun := ⇑f ∘ AddOpposite.unop, map_add' := ⋯ }
Instances For
A semigroup homomorphism f : M →ₙ* N
such that f x
commutes with f y
for all x, y
defines a semigroup homomorphism from Mᵐᵒᵖ
.
Equations
- MulHom.fromOpposite f hf = { toFun := ⇑f ∘ MulOpposite.unop, map_mul' := ⋯ }
Instances For
An additive monoid homomorphism f : M →+ N
such that f x
additively commutes
with f y
for all x, y
defines an additive monoid homomorphism to Sᵃᵒᵖ
.
Equations
- AddMonoidHom.toOpposite f hf = { toZeroHom := { toFun := AddOpposite.op ∘ ⇑f, map_zero' := ⋯ }, map_add' := ⋯ }
Instances For
A monoid homomorphism f : M →* N
such that f x
commutes with f y
for all x, y
defines
a monoid homomorphism to Nᵐᵒᵖ
.
Equations
- MonoidHom.toOpposite f hf = { toOneHom := { toFun := MulOpposite.op ∘ ⇑f, map_one' := ⋯ }, map_mul' := ⋯ }
Instances For
An additive monoid homomorphism f : M →+ N
such that f x
additively commutes
with f y
for all x
, y
defines an additive monoid homomorphism from Mᵃᵒᵖ
.
Equations
- AddMonoidHom.fromOpposite f hf = { toZeroHom := { toFun := ⇑f ∘ AddOpposite.unop, map_zero' := ⋯ }, map_add' := ⋯ }
Instances For
A monoid homomorphism f : M →* N
such that f x
commutes with f y
for all x, y
defines
a monoid homomorphism from Mᵐᵒᵖ
.
Equations
- MonoidHom.fromOpposite f hf = { toOneHom := { toFun := ⇑f ∘ MulOpposite.unop, map_one' := ⋯ }, map_mul' := ⋯ }
Instances For
A semigroup homomorphism M →ₙ* N
can equivalently be viewed as a semigroup homomorphism
Mᵐᵒᵖ →ₙ* Nᵐᵒᵖ
. This is the action of the (fully faithful) ᵐᵒᵖ
-functor on morphisms.
Equations
- One or more equations did not get rendered due to their size.
Instances For
An additive monoid homomorphism M →+ N
can equivalently be viewed as an
additive monoid homomorphism Mᵃᵒᵖ →+ Nᵃᵒᵖ
. This is the action of the (fully faithful)
ᵃᵒᵖ
-functor on morphisms.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A monoid homomorphism M →* N
can equivalently be viewed as a monoid homomorphism
Mᵐᵒᵖ →* Nᵐᵒᵖ
. This is the action of the (fully faithful) ᵐᵒᵖ
-functor on morphisms.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The 'unopposite' of an additive monoid homomorphism Mᵃᵒᵖ →+ Nᵃᵒᵖ
. Inverse to
AddMonoidHom.op
.
Equations
- AddMonoidHom.unop = AddMonoidHom.op.symm
Instances For
The 'unopposite' of a monoid homomorphism Mᵐᵒᵖ →* Nᵐᵒᵖ
. Inverse to MonoidHom.op
.
Equations
- MonoidHom.unop = MonoidHom.op.symm
Instances For
A additive monoid is isomorphic to the opposite of its opposite.
Equations
- AddEquiv.opOp M = let __spread.0 := AddOpposite.opEquiv.trans AddOpposite.opEquiv; { toEquiv := __spread.0, map_add' := ⋯ }
Instances For
A monoid is isomorphic to the opposite of its opposite.
Equations
- MulEquiv.opOp M = let __spread.0 := MulOpposite.opEquiv.trans MulOpposite.opEquiv; { toEquiv := __spread.0, map_mul' := ⋯ }
Instances For
An additive homomorphism M →+ N
can equivalently be viewed as an additive homomorphism
Mᵐᵒᵖ →+ Nᵐᵒᵖ
. This is the action of the (fully faithful) ᵐᵒᵖ
-functor on morphisms.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The 'unopposite' of an additive monoid hom αᵐᵒᵖ →+ βᵐᵒᵖ
. Inverse to
AddMonoidHom.mul_op
.
Equations
- AddMonoidHom.mulUnop = AddMonoidHom.mulOp.symm
Instances For
This ext lemma changes equalities on αᵐᵒᵖ →+ β
to equalities on α →+ β
.
This is useful because there are often ext lemmas for specific α
s that will apply
to an equality of α →+ β
such as Finsupp.addHom_ext'
.