Module docstring
{"# Ring structures on the multiplicative opposite "}
{"# Ring structures on the multiplicative opposite "}
MulOpposite.instDistrib
instance
[Distrib R] : Distrib Rᵐᵒᵖ
instance instDistrib [Distrib R] : Distrib Rᵐᵒᵖ where
left_distrib _ _ _ := unop_injective <| add_mul _ _ _
right_distrib _ _ _ := unop_injective <| mul_add _ _ _
MulOpposite.instNonUnitalNonAssocSemiring
instance
[NonUnitalNonAssocSemiring R] : NonUnitalNonAssocSemiring Rᵐᵒᵖ
instance instNonUnitalNonAssocSemiring [NonUnitalNonAssocSemiring R] :
NonUnitalNonAssocSemiring Rᵐᵒᵖ where
__ := instAddCommMonoid
__ := instDistrib
__ := instMulZeroClass
MulOpposite.instNonUnitalSemiring
instance
[NonUnitalSemiring R] : NonUnitalSemiring Rᵐᵒᵖ
instance instNonUnitalSemiring [NonUnitalSemiring R] : NonUnitalSemiring Rᵐᵒᵖ where
__ := instNonUnitalNonAssocSemiring
__ := instSemigroupWithZero
MulOpposite.instNonAssocSemiring
instance
[NonAssocSemiring R] : NonAssocSemiring Rᵐᵒᵖ
instance instNonAssocSemiring [NonAssocSemiring R] : NonAssocSemiring Rᵐᵒᵖ where
__ := instNonUnitalNonAssocSemiring
__ := instMulZeroOneClass
__ := instAddCommMonoidWithOne
MulOpposite.instSemiring
instance
[Semiring R] : Semiring Rᵐᵒᵖ
instance instSemiring [Semiring R] : Semiring Rᵐᵒᵖ where
__ := instNonUnitalSemiring
__ := instNonAssocSemiring
__ := instMonoidWithZero
MulOpposite.instNonUnitalCommSemiring
instance
[NonUnitalCommSemiring R] : NonUnitalCommSemiring Rᵐᵒᵖ
instance instNonUnitalCommSemiring [NonUnitalCommSemiring R] : NonUnitalCommSemiring Rᵐᵒᵖ where
__ := instNonUnitalSemiring
__ := instCommSemigroup
MulOpposite.instCommSemiring
instance
[CommSemiring R] : CommSemiring Rᵐᵒᵖ
instance instCommSemiring [CommSemiring R] : CommSemiring Rᵐᵒᵖ where
__ := instSemiring
__ := instCommMonoid
MulOpposite.instNonUnitalNonAssocRing
instance
[NonUnitalNonAssocRing R] : NonUnitalNonAssocRing Rᵐᵒᵖ
instance instNonUnitalNonAssocRing [NonUnitalNonAssocRing R] : NonUnitalNonAssocRing Rᵐᵒᵖ where
__ := instAddCommGroup
__ := instNonUnitalNonAssocSemiring
MulOpposite.instNonUnitalRing
instance
[NonUnitalRing R] : NonUnitalRing Rᵐᵒᵖ
instance instNonUnitalRing [NonUnitalRing R] : NonUnitalRing Rᵐᵒᵖ where
__ := instNonUnitalNonAssocRing
__ := instNonUnitalSemiring
MulOpposite.instNonAssocRing
instance
[NonAssocRing R] : NonAssocRing Rᵐᵒᵖ
instance instNonAssocRing [NonAssocRing R] : NonAssocRing Rᵐᵒᵖ where
__ := instNonUnitalNonAssocRing
__ := instNonAssocSemiring
__ := instAddCommGroupWithOne
MulOpposite.instRing
instance
[Ring R] : Ring Rᵐᵒᵖ
instance instRing [Ring R] : Ring Rᵐᵒᵖ where
__ := instSemiring
__ := instAddCommGroupWithOne
MulOpposite.instNonUnitalCommRing
instance
[NonUnitalCommRing R] : NonUnitalCommRing Rᵐᵒᵖ
instance instNonUnitalCommRing [NonUnitalCommRing R] : NonUnitalCommRing Rᵐᵒᵖ where
__ := instNonUnitalRing
__ := instNonUnitalCommSemiring
MulOpposite.instCommRing
instance
[CommRing R] : CommRing Rᵐᵒᵖ
instance instCommRing [CommRing R] : CommRing Rᵐᵒᵖ where
__ := instRing
__ := instCommMonoid
MulOpposite.instIsDomain
instance
[Ring R] [IsDomain R] : IsDomain Rᵐᵒᵖ
instance instIsDomain [Ring R] [IsDomain R] : IsDomain Rᵐᵒᵖ :=
NoZeroDivisors.to_isDomain _
AddOpposite.instDistrib
instance
[Distrib R] : Distrib Rᵃᵒᵖ
instance instDistrib [Distrib R] : Distrib Rᵃᵒᵖ where
left_distrib _ _ _ := unop_injective <| mul_add _ _ _
right_distrib _ _ _ := unop_injective <| add_mul _ _ _
AddOpposite.instNonUnitalNonAssocSemiring
instance
[NonUnitalNonAssocSemiring R] : NonUnitalNonAssocSemiring Rᵃᵒᵖ
instance instNonUnitalNonAssocSemiring [NonUnitalNonAssocSemiring R] :
NonUnitalNonAssocSemiring Rᵃᵒᵖ where
__ := instAddCommMonoid
__ := instDistrib
__ := instMulZeroClass
AddOpposite.instNonUnitalSemiring
instance
[NonUnitalSemiring R] : NonUnitalSemiring Rᵃᵒᵖ
instance instNonUnitalSemiring [NonUnitalSemiring R] : NonUnitalSemiring Rᵃᵒᵖ where
__ := instNonUnitalNonAssocSemiring
__ := instSemigroupWithZero
AddOpposite.instNonAssocSemiring
instance
[NonAssocSemiring R] : NonAssocSemiring Rᵃᵒᵖ
instance instNonAssocSemiring [NonAssocSemiring R] : NonAssocSemiring Rᵃᵒᵖ where
__ := instNonUnitalNonAssocSemiring
__ := instMulZeroOneClass
__ := instAddCommMonoidWithOne
AddOpposite.instSemiring
instance
[Semiring R] : Semiring Rᵃᵒᵖ
instance instSemiring [Semiring R] : Semiring Rᵃᵒᵖ where
__ := instNonUnitalSemiring
__ := instNonAssocSemiring
__ := instMonoidWithZero
AddOpposite.instNonUnitalCommSemiring
instance
[NonUnitalCommSemiring R] : NonUnitalCommSemiring Rᵃᵒᵖ
instance instNonUnitalCommSemiring [NonUnitalCommSemiring R] : NonUnitalCommSemiring Rᵃᵒᵖ where
__ := instNonUnitalSemiring
__ := instCommSemigroup
AddOpposite.instCommSemiring
instance
[CommSemiring R] : CommSemiring Rᵃᵒᵖ
instance instCommSemiring [CommSemiring R] : CommSemiring Rᵃᵒᵖ where
__ := instSemiring
__ := instCommMonoid
AddOpposite.instNonUnitalNonAssocRing
instance
[NonUnitalNonAssocRing R] : NonUnitalNonAssocRing Rᵃᵒᵖ
instance instNonUnitalNonAssocRing [NonUnitalNonAssocRing R] : NonUnitalNonAssocRing Rᵃᵒᵖ where
__ := instAddCommGroup
__ := instNonUnitalNonAssocSemiring
AddOpposite.instNonUnitalRing
instance
[NonUnitalRing R] : NonUnitalRing Rᵃᵒᵖ
instance instNonUnitalRing [NonUnitalRing R] : NonUnitalRing Rᵃᵒᵖ where
__ := instNonUnitalNonAssocRing
__ := instNonUnitalSemiring
AddOpposite.instNonAssocRing
instance
[NonAssocRing R] : NonAssocRing Rᵃᵒᵖ
instance instNonAssocRing [NonAssocRing R] : NonAssocRing Rᵃᵒᵖ where
__ := instNonUnitalNonAssocRing
__ := instNonAssocSemiring
__ := instAddCommGroupWithOne
AddOpposite.instRing
instance
[Ring R] : Ring Rᵃᵒᵖ
instance instRing [Ring R] : Ring Rᵃᵒᵖ where
__ := instSemiring
__ := instAddCommGroupWithOne
AddOpposite.instNonUnitalCommRing
instance
[NonUnitalCommRing R] : NonUnitalCommRing Rᵃᵒᵖ
instance instNonUnitalCommRing [NonUnitalCommRing R] : NonUnitalCommRing Rᵃᵒᵖ where
__ := instNonUnitalRing
__ := instNonUnitalCommSemiring
AddOpposite.instCommRing
instance
[CommRing R] : CommRing Rᵃᵒᵖ
instance instCommRing [CommRing R] : CommRing Rᵃᵒᵖ where
__ := instRing
__ := instCommMonoid
AddOpposite.instIsDomain
instance
[Ring R] [IsDomain R] : IsDomain Rᵃᵒᵖ
instance instIsDomain [Ring R] [IsDomain R] : IsDomain Rᵃᵒᵖ :=
NoZeroDivisors.to_isDomain _
NonUnitalRingHom.toOpposite
definition
{R S : Type*} [NonUnitalNonAssocSemiring R] [NonUnitalNonAssocSemiring S] (f : R →ₙ+* S)
(hf : ∀ x y, Commute (f x) (f y)) : R →ₙ+* Sᵐᵒᵖ
/-- A non-unital ring homomorphism `f : R →ₙ+* S` such that `f x` commutes with `f y` for all `x, y`
defines a non-unital ring homomorphism to `Sᵐᵒᵖ`. -/
@[simps -fullyApplied]
def NonUnitalRingHom.toOpposite {R S : Type*} [NonUnitalNonAssocSemiring R]
[NonUnitalNonAssocSemiring S] (f : R →ₙ+* S) (hf : ∀ x y, Commute (f x) (f y)) : R →ₙ+* Sᵐᵒᵖ :=
{ ((opAddEquiv : S ≃+ Sᵐᵒᵖ).toAddMonoidHom.comp ↑f : R →+ Sᵐᵒᵖ), f.toMulHom.toOpposite hf with
toFun := MulOpposite.opMulOpposite.op ∘ f }
NonUnitalRingHom.fromOpposite
definition
{R S : Type*} [NonUnitalNonAssocSemiring R] [NonUnitalNonAssocSemiring S] (f : R →ₙ+* S)
(hf : ∀ x y, Commute (f x) (f y)) : Rᵐᵒᵖ →ₙ+* S
/-- A non-unital ring homomorphism `f : R →ₙ* S` such that `f x` commutes with `f y` for all `x, y`
defines a non-unital ring homomorphism from `Rᵐᵒᵖ`. -/
@[simps -fullyApplied]
def NonUnitalRingHom.fromOpposite {R S : Type*} [NonUnitalNonAssocSemiring R]
[NonUnitalNonAssocSemiring S] (f : R →ₙ+* S) (hf : ∀ x y, Commute (f x) (f y)) : RᵐᵒᵖRᵐᵒᵖ →ₙ+* S :=
{ (f.toAddMonoidHom.comp (opAddEquiv : R ≃+ Rᵐᵒᵖ).symm.toAddMonoidHom : RᵐᵒᵖRᵐᵒᵖ →+ S),
f.toMulHom.fromOpposite hf with toFun := f ∘ MulOpposite.unop }
NonUnitalRingHom.op
definition
{R S} [NonUnitalNonAssocSemiring R] [NonUnitalNonAssocSemiring S] : (R →ₙ+* S) ≃ (Rᵐᵒᵖ →ₙ+* Sᵐᵒᵖ)
/-- A non-unital ring hom `R →ₙ+* S` can equivalently be viewed as a non-unital ring hom
`Rᵐᵒᵖ →+* Sᵐᵒᵖ`. This is the action of the (fully faithful) `ᵐᵒᵖ`-functor on morphisms. -/
@[simps]
def NonUnitalRingHom.op {R S} [NonUnitalNonAssocSemiring R] [NonUnitalNonAssocSemiring S] :
(R →ₙ+* S) ≃ (Rᵐᵒᵖ →ₙ+* Sᵐᵒᵖ) where
toFun f := { AddMonoidHom.mulOp f.toAddMonoidHom, MulHom.op f.toMulHom with }
invFun f := { AddMonoidHom.mulUnop f.toAddMonoidHom, MulHom.unop f.toMulHom with }
left_inv _ := rfl
right_inv _ := rfl
NonUnitalRingHom.unop
definition
{R S} [NonUnitalNonAssocSemiring R] [NonUnitalNonAssocSemiring S] : (Rᵐᵒᵖ →ₙ+* Sᵐᵒᵖ) ≃ (R →ₙ+* S)
/-- The 'unopposite' of a non-unital ring hom `Rᵐᵒᵖ →ₙ+* Sᵐᵒᵖ`. Inverse to
`NonUnitalRingHom.op`. -/
@[simp]
def NonUnitalRingHom.unop {R S} [NonUnitalNonAssocSemiring R] [NonUnitalNonAssocSemiring S] :
(Rᵐᵒᵖ →ₙ+* Sᵐᵒᵖ) ≃ (R →ₙ+* S) :=
NonUnitalRingHom.op.symm
RingHom.toOpposite
definition
{R S : Type*} [Semiring R] [Semiring S] (f : R →+* S) (hf : ∀ x y, Commute (f x) (f y)) : R →+* Sᵐᵒᵖ
/-- A ring homomorphism `f : R →+* S` such that `f x` commutes with `f y` for all `x, y` defines
a ring homomorphism to `Sᵐᵒᵖ`. -/
@[simps -fullyApplied]
def RingHom.toOpposite {R S : Type*} [Semiring R] [Semiring S] (f : R →+* S)
(hf : ∀ x y, Commute (f x) (f y)) : R →+* Sᵐᵒᵖ :=
{ ((opAddEquiv : S ≃+ Sᵐᵒᵖ).toAddMonoidHom.comp ↑f : R →+ Sᵐᵒᵖ), f.toMonoidHom.toOpposite hf with
toFun := MulOpposite.opMulOpposite.op ∘ f }
RingHom.fromOpposite
definition
{R S : Type*} [Semiring R] [Semiring S] (f : R →+* S) (hf : ∀ x y, Commute (f x) (f y)) : Rᵐᵒᵖ →+* S
/-- A ring homomorphism `f : R →+* S` such that `f x` commutes with `f y` for all `x, y` defines
a ring homomorphism from `Rᵐᵒᵖ`. -/
@[simps -fullyApplied]
def RingHom.fromOpposite {R S : Type*} [Semiring R] [Semiring S] (f : R →+* S)
(hf : ∀ x y, Commute (f x) (f y)) : RᵐᵒᵖRᵐᵒᵖ →+* S :=
{ (f.toAddMonoidHom.comp (opAddEquiv : R ≃+ Rᵐᵒᵖ).symm.toAddMonoidHom : RᵐᵒᵖRᵐᵒᵖ →+ S),
f.toMonoidHom.fromOpposite hf with toFun := f ∘ MulOpposite.unop }
RingHom.op
definition
{R S} [NonAssocSemiring R] [NonAssocSemiring S] : (R →+* S) ≃ (Rᵐᵒᵖ →+* Sᵐᵒᵖ)
/-- A ring hom `R →+* S` can equivalently be viewed as a ring hom `Rᵐᵒᵖ →+* Sᵐᵒᵖ`. This is the
action of the (fully faithful) `ᵐᵒᵖ`-functor on morphisms. -/
@[simps!]
def RingHom.op {R S} [NonAssocSemiring R] [NonAssocSemiring S] :
(R →+* S) ≃ (Rᵐᵒᵖ →+* Sᵐᵒᵖ) where
toFun f := { AddMonoidHom.mulOp f.toAddMonoidHom, MonoidHom.op f.toMonoidHom with }
invFun f := { AddMonoidHom.mulUnop f.toAddMonoidHom, MonoidHom.unop f.toMonoidHom with }
left_inv _ := rfl
right_inv _ := rfl
RingHom.unop
definition
{R S} [NonAssocSemiring R] [NonAssocSemiring S] : (Rᵐᵒᵖ →+* Sᵐᵒᵖ) ≃ (R →+* S)
/-- The 'unopposite' of a ring hom `Rᵐᵒᵖ →+* Sᵐᵒᵖ`. Inverse to `RingHom.op`. -/
@[simp]
def RingHom.unop {R S} [NonAssocSemiring R] [NonAssocSemiring S] : (Rᵐᵒᵖ →+* Sᵐᵒᵖ) ≃ (R →+* S) :=
RingHom.op.symm