Documentation

Mathlib.Algebra.Group.Opposite

Group structures on the multiplicative and additive opposites #

Additive structures on αᵐᵒᵖ #

Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
  • MulOpposite.instAddGroupWithOne = AddGroupWithOne.mk SubNegMonoid.zsmul
Equations

Multiplicative structures on αᵐᵒᵖ #

We also generate additive structures on αᵃᵒᵖ using to_additive

Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
instance MulOpposite.instMonoid {α : Type u_1} [Monoid α] :
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
Equations
instance MulOpposite.instGroup {α : Type u_1} [Group α] :
Equations
Equations
Equations
Equations
@[simp]
theorem MulOpposite.op_pow {α : Type u_1} [Monoid α] (x : α) (n : ) :
@[simp]
theorem MulOpposite.unop_pow {α : Type u_1} [Monoid α] (x : αᵐᵒᵖ) (n : ) :
@[simp]
theorem MulOpposite.op_zpow {α : Type u_1} [DivInvMonoid α] (x : α) (z : ) :
@[simp]
theorem MulOpposite.unop_zpow {α : Type u_1} [DivInvMonoid α] (x : αᵐᵒᵖ) (z : ) :
@[simp]
theorem MulOpposite.op_natCast {α : Type u_1} [NatCast α] (n : ) :
MulOpposite.op n = n
@[simp]
theorem AddOpposite.op_natCast {α : Type u_1} [NatCast α] (n : ) :
AddOpposite.op n = n
@[simp]
theorem MulOpposite.op_ofNat {α : Type u_1} [NatCast α] (n : ) [n.AtLeastTwo] :
@[simp]
theorem AddOpposite.op_ofNat {α : Type u_1} [NatCast α] (n : ) [n.AtLeastTwo] :
@[simp]
theorem MulOpposite.op_intCast {α : Type u_1} [IntCast α] (n : ) :
MulOpposite.op n = n
@[simp]
theorem AddOpposite.op_intCast {α : Type u_1} [IntCast α] (n : ) :
AddOpposite.op n = n
@[simp]
theorem MulOpposite.unop_natCast {α : Type u_1} [NatCast α] (n : ) :
@[simp]
theorem AddOpposite.unop_natCast {α : Type u_1} [NatCast α] (n : ) :
@[simp]
theorem MulOpposite.unop_ofNat {α : Type u_1} [NatCast α] (n : ) [n.AtLeastTwo] :
@[simp]
theorem AddOpposite.unop_ofNat {α : Type u_1} [NatCast α] (n : ) [n.AtLeastTwo] :
@[simp]
theorem MulOpposite.unop_intCast {α : Type u_1} [IntCast α] (n : ) :
@[simp]
theorem AddOpposite.unop_intCast {α : Type u_1} [IntCast α] (n : ) :
@[simp]
theorem MulOpposite.op_div {α : Type u_1} [DivInvMonoid α] (x y : α) :
@[simp]
theorem AddOpposite.op_sub {α : Type u_1} [SubNegMonoid α] (x y : α) :
@[simp]
theorem SemiconjBy.op {α : Type u_1} [Mul α] {a x y : α} (h : SemiconjBy a x y) :
theorem AddSemiconjBy.op {α : Type u_1} [Add α] {a x y : α} (h : AddSemiconjBy a x y) :
theorem Commute.op {α : Type u_1} [Mul α] {x y : α} (h : Commute x y) :
theorem AddCommute.op {α : Type u_1} [Add α] {x y : α} (h : AddCommute x y) :
theorem Commute.unop {α : Type u_1} [Mul α] {x y : αᵐᵒᵖ} (h : Commute x y) :
theorem AddCommute.unop {α : Type u_1} [Add α] {x y : αᵃᵒᵖ} (h : AddCommute x y) :
@[simp]
theorem MulOpposite.commute_op {α : Type u_1} [Mul α] {x y : α} :
@[simp]
def MulOpposite.opAddEquiv {α : Type u_1} [Add α] :

The function MulOpposite.op is an additive equivalence.

Equations
  • MulOpposite.opAddEquiv = { toEquiv := MulOpposite.opEquiv, map_add' := }
Instances For
    @[simp]
    theorem MulOpposite.opAddEquiv_symm_apply {α : Type u_1} [Add α] :
    MulOpposite.opAddEquiv.symm = MulOpposite.unop
    @[simp]
    theorem MulOpposite.opAddEquiv_apply {α : Type u_1} [Add α] :
    MulOpposite.opAddEquiv = MulOpposite.op
    @[simp]
    theorem MulOpposite.opAddEquiv_toEquiv {α : Type u_1} [Add α] :
    MulOpposite.opAddEquiv = MulOpposite.opEquiv

    Multiplicative structures on αᵃᵒᵖ #

    Equations
    Equations
    Equations
    Equations
    Equations
    instance AddOpposite.pow {α : Type u_1} {β : Type u_2} [Pow α β] :
    Equations
    @[simp]
    theorem AddOpposite.op_pow {α : Type u_1} {β : Type u_2} [Pow α β] (a : α) (b : β) :
    @[simp]
    theorem AddOpposite.unop_pow {α : Type u_1} {β : Type u_2} [Pow α β] (a : αᵃᵒᵖ) (b : β) :
    instance AddOpposite.instMonoid {α : Type u_1} [Monoid α] :
    Equations
    Equations
    Equations
    instance AddOpposite.instGroup {α : Type u_1} [Group α] :
    Equations
    Equations
    Equations
    Equations
    def AddOpposite.opMulEquiv {α : Type u_1} [Mul α] :

    The function AddOpposite.op is a multiplicative equivalence.

    Equations
    • AddOpposite.opMulEquiv = { toEquiv := AddOpposite.opEquiv, map_mul' := }
    Instances For
      @[simp]
      theorem AddOpposite.opMulEquiv_symm_apply {α : Type u_1} [Mul α] :
      AddOpposite.opMulEquiv.symm = AddOpposite.unop
      @[simp]
      theorem AddOpposite.opMulEquiv_apply {α : Type u_1} [Mul α] :
      AddOpposite.opMulEquiv = AddOpposite.op
      @[simp]
      theorem AddOpposite.opMulEquiv_toEquiv {α : Type u_1} [Mul α] :
      AddOpposite.opMulEquiv = AddOpposite.opEquiv

      Inversion on a group is a MulEquiv to the opposite group. When G is commutative, there is MulEquiv.inv.

      Equations
      Instances For

        Negation on an additive group is an AddEquiv to the opposite group. When G is commutative, there is AddEquiv.inv.

        Equations
        Instances For
          @[simp]
          theorem MulEquiv.inv'_symm_apply (G : Type u_2) [DivisionMonoid G] :
          (MulEquiv.inv' G).symm = Inv.inv MulOpposite.unop
          @[simp]
          theorem AddEquiv.neg'_apply (G : Type u_2) [SubtractionMonoid G] :
          (AddEquiv.neg' G) = AddOpposite.op Neg.neg
          @[simp]
          theorem AddEquiv.neg'_symm_apply (G : Type u_2) [SubtractionMonoid G] :
          (AddEquiv.neg' G).symm = Neg.neg AddOpposite.unop
          @[simp]
          theorem MulEquiv.inv'_apply (G : Type u_2) [DivisionMonoid G] :
          (MulEquiv.inv' G) = MulOpposite.op Inv.inv
          def MulHom.toOpposite {M : Type u_2} {N : Type u_3} [Mul M] [Mul N] (f : M →ₙ* N) (hf : ∀ (x y : M), Commute (f x) (f y)) :

          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
          • f.toOpposite hf = { toFun := MulOpposite.op f, map_mul' := }
          Instances For
            def AddHom.toOpposite {M : Type u_2} {N : Type u_3} [Add M] [Add N] (f : AddHom M N) (hf : ∀ (x y : M), AddCommute (f x) (f y)) :

            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
            • f.toOpposite hf = { toFun := AddOpposite.op f, map_add' := }
            Instances For
              @[simp]
              theorem MulHom.toOpposite_apply {M : Type u_2} {N : Type u_3} [Mul M] [Mul N] (f : M →ₙ* N) (hf : ∀ (x y : M), Commute (f x) (f y)) :
              (f.toOpposite hf) = MulOpposite.op f
              @[simp]
              theorem AddHom.toOpposite_apply {M : Type u_2} {N : Type u_3} [Add M] [Add N] (f : AddHom M N) (hf : ∀ (x y : M), AddCommute (f x) (f y)) :
              (f.toOpposite hf) = AddOpposite.op f
              def MulHom.fromOpposite {M : Type u_2} {N : Type u_3} [Mul M] [Mul N] (f : M →ₙ* N) (hf : ∀ (x y : M), Commute (f x) (f y)) :

              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
              • f.fromOpposite hf = { toFun := f MulOpposite.unop, map_mul' := }
              Instances For
                def AddHom.fromOpposite {M : Type u_2} {N : Type u_3} [Add M] [Add N] (f : AddHom M N) (hf : ∀ (x y : M), AddCommute (f x) (f y)) :

                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
                • f.fromOpposite hf = { toFun := f AddOpposite.unop, map_add' := }
                Instances For
                  @[simp]
                  theorem AddHom.fromOpposite_apply {M : Type u_2} {N : Type u_3} [Add M] [Add N] (f : AddHom M N) (hf : ∀ (x y : M), AddCommute (f x) (f y)) :
                  (f.fromOpposite hf) = f AddOpposite.unop
                  @[simp]
                  theorem MulHom.fromOpposite_apply {M : Type u_2} {N : Type u_3} [Mul M] [Mul N] (f : M →ₙ* N) (hf : ∀ (x y : M), Commute (f x) (f y)) :
                  (f.fromOpposite hf) = f MulOpposite.unop
                  def MonoidHom.toOpposite {M : Type u_2} {N : Type u_3} [MulOneClass M] [MulOneClass N] (f : M →* N) (hf : ∀ (x y : M), Commute (f x) (f y)) :

                  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
                  • f.toOpposite hf = { toFun := MulOpposite.op f, map_one' := , map_mul' := }
                  Instances For
                    def AddMonoidHom.toOpposite {M : Type u_2} {N : Type u_3} [AddZeroClass M] [AddZeroClass N] (f : M →+ N) (hf : ∀ (x y : M), AddCommute (f x) (f y)) :

                    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
                    • f.toOpposite hf = { toFun := AddOpposite.op f, map_zero' := , map_add' := }
                    Instances For
                      @[simp]
                      theorem AddMonoidHom.toOpposite_apply {M : Type u_2} {N : Type u_3} [AddZeroClass M] [AddZeroClass N] (f : M →+ N) (hf : ∀ (x y : M), AddCommute (f x) (f y)) :
                      (f.toOpposite hf) = AddOpposite.op f
                      @[simp]
                      theorem MonoidHom.toOpposite_apply {M : Type u_2} {N : Type u_3} [MulOneClass M] [MulOneClass N] (f : M →* N) (hf : ∀ (x y : M), Commute (f x) (f y)) :
                      (f.toOpposite hf) = MulOpposite.op f
                      def MonoidHom.fromOpposite {M : Type u_2} {N : Type u_3} [MulOneClass M] [MulOneClass N] (f : M →* N) (hf : ∀ (x y : M), Commute (f x) (f y)) :

                      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
                      • f.fromOpposite hf = { toFun := f MulOpposite.unop, map_one' := , map_mul' := }
                      Instances For
                        def AddMonoidHom.fromOpposite {M : Type u_2} {N : Type u_3} [AddZeroClass M] [AddZeroClass N] (f : M →+ N) (hf : ∀ (x y : M), AddCommute (f x) (f y)) :

                        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
                        • f.fromOpposite hf = { toFun := f AddOpposite.unop, map_zero' := , map_add' := }
                        Instances For
                          @[simp]
                          theorem MonoidHom.fromOpposite_apply {M : Type u_2} {N : Type u_3} [MulOneClass M] [MulOneClass N] (f : M →* N) (hf : ∀ (x y : M), Commute (f x) (f y)) :
                          (f.fromOpposite hf) = f MulOpposite.unop
                          @[simp]
                          theorem AddMonoidHom.fromOpposite_apply {M : Type u_2} {N : Type u_3} [AddZeroClass M] [AddZeroClass N] (f : M →+ N) (hf : ∀ (x y : M), AddCommute (f x) (f y)) :
                          (f.fromOpposite hf) = f AddOpposite.unop

                          The units of the opposites are equivalent to the opposites of the units.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For

                            The additive units of the additive opposites are equivalent to the additive opposites of the additive units.

                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For
                              @[simp]
                              theorem Units.coe_unop_opEquiv {M : Type u_2} [Monoid M] (u : Mᵐᵒᵖˣ) :
                              (MulOpposite.unop (Units.opEquiv u)) = MulOpposite.unop u
                              @[simp]
                              theorem AddUnits.coe_unop_opEquiv {M : Type u_2} [AddMonoid M] (u : AddUnits Mᵃᵒᵖ) :
                              (AddOpposite.unop (AddUnits.opEquiv u)) = AddOpposite.unop u
                              @[simp]
                              theorem Units.coe_opEquiv_symm {M : Type u_2} [Monoid M] (u : Mˣᵐᵒᵖ) :
                              (Units.opEquiv.symm u) = MulOpposite.op (MulOpposite.unop u)
                              @[simp]
                              theorem AddUnits.coe_opEquiv_symm {M : Type u_2} [AddMonoid M] (u : (AddUnits M)ᵃᵒᵖ) :
                              (AddUnits.opEquiv.symm u) = AddOpposite.op (AddOpposite.unop u)
                              theorem IsUnit.op {M : Type u_2} [Monoid M] {m : M} (h : IsUnit m) :
                              theorem IsAddUnit.op {M : Type u_2} [AddMonoid M] {m : M} (h : IsAddUnit m) :
                              theorem IsUnit.unop {M : Type u_2} [Monoid M] {m : Mᵐᵒᵖ} (h : IsUnit m) :
                              @[simp]
                              theorem isUnit_op {M : Type u_2} [Monoid M] {m : M} :
                              @[simp]
                              theorem isAddUnit_op {M : Type u_2} [AddMonoid M] {m : M} :
                              @[simp]
                              theorem isUnit_unop {M : Type u_2} [Monoid M] {m : Mᵐᵒᵖ} :
                              def MulHom.op {M : Type u_2} {N : Type u_3} [Mul M] [Mul N] :

                              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
                                def AddHom.op {M : Type u_2} {N : Type u_3} [Add M] [Add N] :

                                An additive semigroup homomorphism AddHom M N can equivalently be viewed as an additive semigroup homomorphism AddHom 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
                                  @[simp]
                                  theorem AddHom.op_apply_apply {M : Type u_2} {N : Type u_3} [Add M] [Add N] (f : AddHom M N) (a✝ : Mᵃᵒᵖ) :
                                  (AddHom.op f) a✝ = (AddOpposite.op f AddOpposite.unop) a✝
                                  @[simp]
                                  theorem MulHom.op_symm_apply_apply {M : Type u_2} {N : Type u_3} [Mul M] [Mul N] (f : Mᵐᵒᵖ →ₙ* Nᵐᵒᵖ) (a✝ : M) :
                                  (MulHom.op.symm f) a✝ = (MulOpposite.unop f MulOpposite.op) a✝
                                  @[simp]
                                  theorem MulHom.op_apply_apply {M : Type u_2} {N : Type u_3} [Mul M] [Mul N] (f : M →ₙ* N) (a✝ : Mᵐᵒᵖ) :
                                  (MulHom.op f) a✝ = (MulOpposite.op f MulOpposite.unop) a✝
                                  @[simp]
                                  theorem AddHom.op_symm_apply_apply {M : Type u_2} {N : Type u_3} [Add M] [Add N] (f : AddHom Mᵃᵒᵖ Nᵃᵒᵖ) (a✝ : M) :
                                  (AddHom.op.symm f) a✝ = (AddOpposite.unop f AddOpposite.op) a✝
                                  def MulHom.unop {M : Type u_2} {N : Type u_3} [Mul M] [Mul N] :

                                  The 'unopposite' of a semigroup homomorphism Mᵐᵒᵖ →ₙ* Nᵐᵒᵖ. Inverse to MulHom.op.

                                  Equations
                                  • MulHom.unop = MulHom.op.symm
                                  Instances For
                                    def AddHom.unop {M : Type u_2} {N : Type u_3} [Add M] [Add N] :

                                    The 'unopposite' of an additive semigroup homomorphism Mᵃᵒᵖ →ₙ+ Nᵃᵒᵖ. Inverse to AddHom.op.

                                    Equations
                                    • AddHom.unop = AddHom.op.symm
                                    Instances For
                                      def AddHom.mulOp {M : Type u_2} {N : Type u_3} [Add M] [Add N] :

                                      An additive semigroup homomorphism AddHom M N can equivalently be viewed as an additive homomorphism AddHom 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
                                        @[simp]
                                        theorem AddHom.mulOp_symm_apply_apply {M : Type u_2} {N : Type u_3} [Add M] [Add N] (f : AddHom Mᵐᵒᵖ Nᵐᵒᵖ) (a✝ : M) :
                                        (AddHom.mulOp.symm f) a✝ = (MulOpposite.unop f MulOpposite.op) a✝
                                        @[simp]
                                        theorem AddHom.mulOp_apply_apply {M : Type u_2} {N : Type u_3} [Add M] [Add N] (f : AddHom M N) (a✝ : Mᵐᵒᵖ) :
                                        (AddHom.mulOp f) a✝ = (MulOpposite.op f MulOpposite.unop) a✝
                                        def AddHom.mulUnop {α : Type u_2} {β : Type u_3} [Add α] [Add β] :

                                        The 'unopposite' of an additive semigroup hom αᵐᵒᵖ →+ βᵐᵒᵖ. Inverse to AddHom.mul_op.

                                        Equations
                                        • AddHom.mulUnop = AddHom.mulOp.symm
                                        Instances For
                                          def MonoidHom.op {M : Type u_2} {N : Type u_3} [MulOneClass M] [MulOneClass N] :

                                          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
                                            def AddMonoidHom.op {M : Type u_2} {N : Type u_3} [AddZeroClass M] [AddZeroClass N] :

                                            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
                                              @[simp]
                                              theorem MonoidHom.op_apply_apply {M : Type u_2} {N : Type u_3} [MulOneClass M] [MulOneClass N] (f : M →* N) (a✝ : Mᵐᵒᵖ) :
                                              (MonoidHom.op f) a✝ = (MulOpposite.op f MulOpposite.unop) a✝
                                              @[simp]
                                              theorem AddMonoidHom.op_symm_apply_apply {M : Type u_2} {N : Type u_3} [AddZeroClass M] [AddZeroClass N] (f : Mᵃᵒᵖ →+ Nᵃᵒᵖ) (a✝ : M) :
                                              (AddMonoidHom.op.symm f) a✝ = (AddOpposite.unop f AddOpposite.op) a✝
                                              @[simp]
                                              theorem AddMonoidHom.op_apply_apply {M : Type u_2} {N : Type u_3} [AddZeroClass M] [AddZeroClass N] (f : M →+ N) (a✝ : Mᵃᵒᵖ) :
                                              (AddMonoidHom.op f) a✝ = (AddOpposite.op f AddOpposite.unop) a✝
                                              @[simp]
                                              theorem MonoidHom.op_symm_apply_apply {M : Type u_2} {N : Type u_3} [MulOneClass M] [MulOneClass N] (f : Mᵐᵒᵖ →* Nᵐᵒᵖ) (a✝ : M) :
                                              (MonoidHom.op.symm f) a✝ = (MulOpposite.unop f MulOpposite.op) a✝
                                              def MonoidHom.unop {M : Type u_2} {N : Type u_3} [MulOneClass M] [MulOneClass N] :

                                              The 'unopposite' of a monoid homomorphism Mᵐᵒᵖ →* Nᵐᵒᵖ. Inverse to MonoidHom.op.

                                              Equations
                                              • MonoidHom.unop = MonoidHom.op.symm
                                              Instances For
                                                def AddMonoidHom.unop {M : Type u_2} {N : Type u_3} [AddZeroClass M] [AddZeroClass N] :

                                                The 'unopposite' of an additive monoid homomorphism Mᵃᵒᵖ →+ Nᵃᵒᵖ. Inverse to AddMonoidHom.op.

                                                Equations
                                                • AddMonoidHom.unop = AddMonoidHom.op.symm
                                                Instances For

                                                  A monoid is isomorphic to the opposite of its opposite.

                                                  Equations
                                                  • MulEquiv.opOp M = { toEquiv := MulOpposite.opEquiv.trans MulOpposite.opEquiv, map_mul' := }
                                                  Instances For

                                                    A additive monoid is isomorphic to the opposite of its opposite.

                                                    Equations
                                                    • AddEquiv.opOp M = { toEquiv := AddOpposite.opEquiv.trans AddOpposite.opEquiv, map_add' := }
                                                    Instances For
                                                      @[simp]
                                                      theorem AddEquiv.opOp_apply (M : Type u_2) [Add M] (a✝ : M) :
                                                      @[simp]
                                                      @[simp]
                                                      theorem MulEquiv.opOp_apply (M : Type u_2) [Mul M] (a✝ : M) :
                                                      @[simp]

                                                      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
                                                        @[simp]
                                                        theorem AddMonoidHom.mulOp_symm_apply_apply {M : Type u_2} {N : Type u_3} [AddZeroClass M] [AddZeroClass N] (f : Mᵐᵒᵖ →+ Nᵐᵒᵖ) (a✝ : M) :
                                                        (AddMonoidHom.mulOp.symm f) a✝ = (MulOpposite.unop f MulOpposite.op) a✝
                                                        @[simp]
                                                        theorem AddMonoidHom.mulOp_apply_apply {M : Type u_2} {N : Type u_3} [AddZeroClass M] [AddZeroClass N] (f : M →+ N) (a✝ : Mᵐᵒᵖ) :
                                                        (AddMonoidHom.mulOp f) a✝ = (MulOpposite.op f MulOpposite.unop) a✝
                                                        def AddMonoidHom.mulUnop {α : Type u_2} {β : Type u_3} [AddZeroClass α] [AddZeroClass β] :

                                                        The 'unopposite' of an additive monoid hom αᵐᵒᵖ →+ βᵐᵒᵖ. Inverse to AddMonoidHom.mul_op.

                                                        Equations
                                                        • AddMonoidHom.mulUnop = AddMonoidHom.mulOp.symm
                                                        Instances For
                                                          def AddEquiv.mulOp {α : Type u_2} {β : Type u_3} [Add α] [Add β] :

                                                          An iso α ≃+ β can equivalently be viewed as an iso αᵐᵒᵖ ≃+ βᵐᵒᵖ.

                                                          Equations
                                                          • One or more equations did not get rendered due to their size.
                                                          Instances For
                                                            @[simp]
                                                            theorem AddEquiv.mulOp_symm_apply {α : Type u_2} {β : Type u_3} [Add α] [Add β] (f : αᵐᵒᵖ ≃+ βᵐᵒᵖ) :
                                                            AddEquiv.mulOp.symm f = MulOpposite.opAddEquiv.trans (f.trans MulOpposite.opAddEquiv.symm)
                                                            @[simp]
                                                            theorem AddEquiv.mulOp_apply {α : Type u_2} {β : Type u_3} [Add α] [Add β] (f : α ≃+ β) :
                                                            AddEquiv.mulOp f = MulOpposite.opAddEquiv.symm.trans (f.trans MulOpposite.opAddEquiv)
                                                            def AddEquiv.mulUnop {α : Type u_2} {β : Type u_3} [Add α] [Add β] :

                                                            The 'unopposite' of an iso αᵐᵒᵖ ≃+ βᵐᵒᵖ. Inverse to AddEquiv.mul_op.

                                                            Equations
                                                            • AddEquiv.mulUnop = AddEquiv.mulOp.symm
                                                            Instances For
                                                              def MulEquiv.op {α : Type u_2} {β : Type u_3} [Mul α] [Mul β] :

                                                              An iso α ≃* β can equivalently be viewed as an iso αᵐᵒᵖ ≃* βᵐᵒᵖ.

                                                              Equations
                                                              • One or more equations did not get rendered due to their size.
                                                              Instances For
                                                                def AddEquiv.op {α : Type u_2} {β : Type u_3} [Add α] [Add β] :

                                                                An iso α ≃+ β can equivalently be viewed as an iso αᵃᵒᵖ ≃+ βᵃᵒᵖ.

                                                                Equations
                                                                • One or more equations did not get rendered due to their size.
                                                                Instances For
                                                                  @[simp]
                                                                  theorem MulEquiv.op_apply_apply {α : Type u_2} {β : Type u_3} [Mul α] [Mul β] (f : α ≃* β) (a✝ : αᵐᵒᵖ) :
                                                                  (MulEquiv.op f) a✝ = (MulOpposite.op f MulOpposite.unop) a✝
                                                                  @[simp]
                                                                  theorem MulEquiv.op_symm_apply_symm_apply {α : Type u_2} {β : Type u_3} [Mul α] [Mul β] (f : αᵐᵒᵖ ≃* βᵐᵒᵖ) (a✝ : β) :
                                                                  (MulEquiv.op.symm f).symm a✝ = (MulOpposite.unop f.symm MulOpposite.op) a✝
                                                                  @[simp]
                                                                  theorem AddEquiv.op_apply_apply {α : Type u_2} {β : Type u_3} [Add α] [Add β] (f : α ≃+ β) (a✝ : αᵃᵒᵖ) :
                                                                  (AddEquiv.op f) a✝ = (AddOpposite.op f AddOpposite.unop) a✝
                                                                  @[simp]
                                                                  theorem AddEquiv.op_apply_symm_apply {α : Type u_2} {β : Type u_3} [Add α] [Add β] (f : α ≃+ β) (a✝ : βᵃᵒᵖ) :
                                                                  (AddEquiv.op f).symm a✝ = (AddOpposite.op f.symm AddOpposite.unop) a✝
                                                                  @[simp]
                                                                  theorem AddEquiv.op_symm_apply_apply {α : Type u_2} {β : Type u_3} [Add α] [Add β] (f : αᵃᵒᵖ ≃+ βᵃᵒᵖ) (a✝ : α) :
                                                                  (AddEquiv.op.symm f) a✝ = (AddOpposite.unop f AddOpposite.op) a✝
                                                                  @[simp]
                                                                  theorem MulEquiv.op_symm_apply_apply {α : Type u_2} {β : Type u_3} [Mul α] [Mul β] (f : αᵐᵒᵖ ≃* βᵐᵒᵖ) (a✝ : α) :
                                                                  (MulEquiv.op.symm f) a✝ = (MulOpposite.unop f MulOpposite.op) a✝
                                                                  @[simp]
                                                                  theorem AddEquiv.op_symm_apply_symm_apply {α : Type u_2} {β : Type u_3} [Add α] [Add β] (f : αᵃᵒᵖ ≃+ βᵃᵒᵖ) (a✝ : β) :
                                                                  (AddEquiv.op.symm f).symm a✝ = (AddOpposite.unop f.symm AddOpposite.op) a✝
                                                                  @[simp]
                                                                  theorem MulEquiv.op_apply_symm_apply {α : Type u_2} {β : Type u_3} [Mul α] [Mul β] (f : α ≃* β) (a✝ : βᵐᵒᵖ) :
                                                                  (MulEquiv.op f).symm a✝ = (MulOpposite.op f.symm MulOpposite.unop) a✝
                                                                  def MulEquiv.unop {α : Type u_2} {β : Type u_3} [Mul α] [Mul β] :

                                                                  The 'unopposite' of an iso αᵐᵒᵖ ≃* βᵐᵒᵖ. Inverse to MulEquiv.op.

                                                                  Equations
                                                                  • MulEquiv.unop = MulEquiv.op.symm
                                                                  Instances For
                                                                    def AddEquiv.unop {α : Type u_2} {β : Type u_3} [Add α] [Add β] :

                                                                    The 'unopposite' of an iso αᵃᵒᵖ ≃+ βᵃᵒᵖ. Inverse to AddEquiv.op.

                                                                    Equations
                                                                    • AddEquiv.unop = AddEquiv.op.symm
                                                                    Instances For
                                                                      theorem AddMonoidHom.mul_op_ext {α : Type u_2} {β : Type u_3} [AddZeroClass α] [AddZeroClass β] (f g : αᵐᵒᵖ →+ β) (h : f.comp MulOpposite.opAddEquiv.toAddMonoidHom = g.comp MulOpposite.opAddEquiv.toAddMonoidHom) :
                                                                      f = g

                                                                      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'.