HepLean Documentation

Mathlib.Algebra.Group.InjSurj

Lifting algebraic data classes along injective/surjective maps #

This file provides definitions that are meant to deal with situations such as the following:

Suppose that G is a group, and H is a type endowed with One H, Mul H, and Inv H. Suppose furthermore, that f : G → H is a surjective map that respects the multiplication, and the unit elements. Then H satisfies the group axioms.

The relevant definition in this case is Function.Surjective.group. Dually, there is also Function.Injective.group. And there are versions for (additive) (commutative) semigroups/monoids.

Implementation note #

The nsmul and zsmul assumptions on any transfer definition for an algebraic structure involving both addition and multiplication (eg AddMonoidWithOne) is ∀ n x, f (n • x) = n • f x, which is what we would expect. However, we cannot do the same for transfer definitions built using to_additive (eg AddMonoid) as we want the multiplicative versions to be ∀ x n, f (x ^ n) = f x ^ n. As a result, we must use Function.swap when using additivised transfer definitions in non-additivised ones.

Injective #

@[reducible, inline]
abbrev Function.Injective.addSemigroup {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [AddSemigroup M₂] (f : M₁M₂) (hf : Function.Injective f) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) :

A type endowed with + is an additive semigroup, if it admits an injective map that preserves + to an additive semigroup.

Equations
Instances For
    theorem Function.Injective.addSemigroup.proof_1 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [AddSemigroup M₂] (f : M₁M₂) (hf : Function.Injective f) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (x : M₁) (y : M₁) (z : M₁) :
    x + y + z = x + (y + z)
    @[reducible, inline]
    abbrev Function.Injective.semigroup {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [Semigroup M₂] (f : M₁M₂) (hf : Function.Injective f) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) :

    A type endowed with * is a semigroup, if it admits an injective map that preserves * to a semigroup. See note [reducible non-instances].

    Equations
    Instances For
      theorem Function.Injective.addCommMagma.proof_1 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [AddCommMagma M₂] (f : M₁M₂) (hf : Function.Injective f) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (x : M₁) (y : M₁) :
      x + y = y + x
      @[reducible, inline]
      abbrev Function.Injective.addCommMagma {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [AddCommMagma M₂] (f : M₁M₂) (hf : Function.Injective f) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) :

      A type endowed with + is an additive commutative semigroup, if it admits a surjective map that preserves + from an additive commutative semigroup.

      Equations
      Instances For
        @[reducible, inline]
        abbrev Function.Injective.commMagma {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [CommMagma M₂] (f : M₁M₂) (hf : Function.Injective f) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) :

        A type endowed with * is a commutative magma, if it admits a surjective map that preserves * from a commutative magma.

        Equations
        Instances For
          @[reducible, inline]
          abbrev Function.Injective.addCommSemigroup {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [AddCommSemigroup M₂] (f : M₁M₂) (hf : Function.Injective f) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) :

          A type endowed with + is an additive commutative semigroup,if it admits an injective map that preserves + to an additive commutative semigroup.

          Equations
          Instances For
            @[reducible, inline]
            abbrev Function.Injective.commSemigroup {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [CommSemigroup M₂] (f : M₁M₂) (hf : Function.Injective f) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) :

            A type endowed with * is a commutative semigroup, if it admits an injective map that preserves * to a commutative semigroup. See note [reducible non-instances].

            Equations
            Instances For
              @[reducible, inline]
              abbrev Function.Injective.addLeftCancelSemigroup {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [AddLeftCancelSemigroup M₂] (f : M₁M₂) (hf : Function.Injective f) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) :

              A type endowed with + is an additive left cancel semigroup, if it admits an injective map that preserves + to an additive left cancel semigroup.

              Equations
              Instances For
                theorem Function.Injective.addLeftCancelSemigroup.proof_1 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [AddLeftCancelSemigroup M₂] (f : M₁M₂) (hf : Function.Injective f) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (x : M₁) (y : M₁) (z : M₁) (H : x + y = x + z) :
                y = z
                @[reducible, inline]
                abbrev Function.Injective.leftCancelSemigroup {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [LeftCancelSemigroup M₂] (f : M₁M₂) (hf : Function.Injective f) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) :

                A type endowed with * is a left cancel semigroup, if it admits an injective map that preserves * to a left cancel semigroup. See note [reducible non-instances].

                Equations
                Instances For
                  @[reducible, inline]
                  abbrev Function.Injective.addRightCancelSemigroup {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [AddRightCancelSemigroup M₂] (f : M₁M₂) (hf : Function.Injective f) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) :

                  A type endowed with + is an additive right cancel semigroup, if it admits an injective map that preserves + to an additive right cancel semigroup.

                  Equations
                  Instances For
                    theorem Function.Injective.addRightCancelSemigroup.proof_1 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [AddRightCancelSemigroup M₂] (f : M₁M₂) (hf : Function.Injective f) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (x : M₁) (y : M₁) (z : M₁) (H : x + y = z + y) :
                    x = z
                    @[reducible, inline]
                    abbrev Function.Injective.rightCancelSemigroup {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [RightCancelSemigroup M₂] (f : M₁M₂) (hf : Function.Injective f) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) :

                    A type endowed with * is a right cancel semigroup, if it admits an injective map that preserves * to a right cancel semigroup. See note [reducible non-instances].

                    Equations
                    Instances For
                      @[reducible, inline]
                      abbrev Function.Injective.addZeroClass {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [AddZeroClass M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) :

                      A type endowed with 0 and + is an AddZeroClass, if it admits an injective map that preserves 0 and + to an AddZeroClass.

                      Equations
                      Instances For
                        theorem Function.Injective.addZeroClass.proof_1 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [AddZeroClass M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (x : M₁) :
                        0 + x = x
                        theorem Function.Injective.addZeroClass.proof_2 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [AddZeroClass M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (x : M₁) :
                        x + 0 = x
                        @[reducible, inline]
                        abbrev Function.Injective.mulOneClass {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [One M₁] [MulOneClass M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) :

                        A type endowed with 1 and * is a MulOneClass, if it admits an injective map that preserves 1 and * to a MulOneClass. See note [reducible non-instances].

                        Equations
                        Instances For
                          theorem Function.Injective.addMonoid.proof_2 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [AddMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (n : ) (x : M₁) :
                          (fun (n : ) (x : M₁) => n x) (n + 1) x = (fun (n : ) (x : M₁) => n x) n x + x
                          @[reducible, inline]
                          abbrev Function.Injective.addMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [AddMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                          A type endowed with 0 and + is an additive monoid, if it admits an injective map that preserves 0 and + to an additive monoid. See note [reducible non-instances].

                          Equations
                          Instances For
                            theorem Function.Injective.addMonoid.proof_1 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [AddMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (x : M₁) :
                            (fun (n : ) (x : M₁) => n x) 0 x = 0
                            @[reducible, inline]
                            abbrev Function.Injective.monoid {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [One M₁] [Pow M₁ ] [Monoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :
                            Monoid M₁

                            A type endowed with 1 and * is a monoid, if it admits an injective map that preserves 1 and * to a monoid. See note [reducible non-instances].

                            Equations
                            Instances For
                              @[reducible, inline]
                              abbrev Function.Injective.addMonoidWithOne {M₂ : Type u_2} {M₁ : Type u_3} [Zero M₁] [One M₁] [Add M₁] [SMul M₁] [NatCast M₁] [AddMonoidWithOne M₂] (f : M₁M₂) (hf : Function.Injective f) (zero : f 0 = 0) (one : f 1 = 1) (add : ∀ (x y : M₁), f (x + y) = f x + f y) (nsmul : ∀ (n : ) (x : M₁), f (n x) = n f x) (natCast : ∀ (n : ), f n = n) :

                              A type endowed with 0, 1 and + is an additive monoid with one, if it admits an injective map that preserves 0, 1 and + to an additive monoid with one. See note [reducible non-instances].

                              Equations
                              Instances For
                                @[reducible, inline]
                                abbrev Function.Injective.addLeftCancelMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [AddLeftCancelMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                                A type endowed with 0 and + is an additive left cancel monoid, if it admits an injective map that preserves 0 and + to an additive left cancel monoid.

                                Equations
                                Instances For
                                  @[reducible, inline]
                                  abbrev Function.Injective.leftCancelMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [One M₁] [Pow M₁ ] [LeftCancelMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :

                                  A type endowed with 1 and * is a left cancel monoid, if it admits an injective map that preserves 1 and * to a left cancel monoid. See note [reducible non-instances].

                                  Equations
                                  Instances For
                                    @[reducible, inline]
                                    abbrev Function.Injective.addRightCancelMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [AddRightCancelMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                                    A type endowed with 0 and + is an additive left cancel monoid,if it admits an injective map that preserves 0 and + to an additive left cancel monoid.

                                    Equations
                                    Instances For
                                      @[reducible, inline]
                                      abbrev Function.Injective.rightCancelMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [One M₁] [Pow M₁ ] [RightCancelMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :

                                      A type endowed with 1 and * is a right cancel monoid, if it admits an injective map that preserves 1 and * to a right cancel monoid. See note [reducible non-instances].

                                      Equations
                                      Instances For
                                        @[reducible, inline]
                                        abbrev Function.Injective.addCancelMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [AddCancelMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                                        A type endowed with 0 and + is an additive left cancel monoid,if it admits an injective map that preserves 0 and + to an additive left cancel monoid.

                                        Equations
                                        Instances For
                                          @[reducible, inline]
                                          abbrev Function.Injective.cancelMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [One M₁] [Pow M₁ ] [CancelMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :

                                          A type endowed with 1 and * is a cancel monoid, if it admits an injective map that preserves 1 and * to a cancel monoid. See note [reducible non-instances].

                                          Equations
                                          Instances For
                                            @[reducible, inline]
                                            abbrev Function.Injective.addCommMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [AddCommMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                                            A type endowed with 0 and + is an additive commutative monoid, if it admits an injective map that preserves 0 and + to an additive commutative monoid.

                                            Equations
                                            Instances For
                                              @[reducible, inline]
                                              abbrev Function.Injective.commMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [One M₁] [Pow M₁ ] [CommMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :

                                              A type endowed with 1 and * is a commutative monoid, if it admits an injective map that preserves 1 and * to a commutative monoid. See note [reducible non-instances].

                                              Equations
                                              Instances For
                                                @[reducible, inline]
                                                abbrev Function.Injective.addCommMonoidWithOne {M₂ : Type u_2} {M₁ : Type u_3} [Zero M₁] [One M₁] [Add M₁] [SMul M₁] [NatCast M₁] [AddCommMonoidWithOne M₂] (f : M₁M₂) (hf : Function.Injective f) (zero : f 0 = 0) (one : f 1 = 1) (add : ∀ (x y : M₁), f (x + y) = f x + f y) (nsmul : ∀ (n : ) (x : M₁), f (n x) = n f x) (natCast : ∀ (n : ), f n = n) :

                                                A type endowed with 0, 1 and + is an additive commutative monoid with one, if it admits an injective map that preserves 0, 1 and + to an additive commutative monoid with one. See note [reducible non-instances].

                                                Equations
                                                Instances For
                                                  theorem Function.Injective.addCancelCommMonoid.proof_4 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [AddCancelCommMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (n : ) (x : M₁) :
                                                  theorem Function.Injective.addCancelCommMonoid.proof_2 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [AddCancelCommMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (a : M₁) :
                                                  a + 0 = a
                                                  theorem Function.Injective.addCancelCommMonoid.proof_1 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [AddCancelCommMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (a : M₁) :
                                                  0 + a = a
                                                  @[reducible, inline]
                                                  abbrev Function.Injective.addCancelCommMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [AddCancelCommMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                                                  A type endowed with 0 and + is an additive cancel commutative monoid, if it admits an injective map that preserves 0 and + to an additive cancel commutative monoid.

                                                  Equations
                                                  Instances For
                                                    theorem Function.Injective.addCancelCommMonoid.proof_3 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [AddCancelCommMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (x : M₁) :
                                                    @[reducible, inline]
                                                    abbrev Function.Injective.cancelCommMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [One M₁] [Pow M₁ ] [CancelCommMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :

                                                    A type endowed with 1 and * is a cancel commutative monoid, if it admits an injective map that preserves 1 and * to a cancel commutative monoid. See note [reducible non-instances].

                                                    Equations
                                                    Instances For
                                                      @[reducible, inline]
                                                      abbrev Function.Injective.involutiveNeg {M₂ : Type u_2} {M₁ : Type u_3} [Neg M₁] [InvolutiveNeg M₂] (f : M₁M₂) (hf : Function.Injective f) (inv : ∀ (x : M₁), f (-x) = -f x) :

                                                      A type has an involutive negation if it admits a surjective map that preserves - to a type which has an involutive negation.

                                                      Equations
                                                      Instances For
                                                        theorem Function.Injective.involutiveNeg.proof_1 {M₂ : Type u_2} {M₁ : Type u_1} [Neg M₁] [InvolutiveNeg M₂] (f : M₁M₂) (hf : Function.Injective f) (inv : ∀ (x : M₁), f (-x) = -f x) (x : M₁) :
                                                        - -x = x
                                                        @[reducible, inline]
                                                        abbrev Function.Injective.involutiveInv {M₂ : Type u_2} {M₁ : Type u_3} [Inv M₁] [InvolutiveInv M₂] (f : M₁M₂) (hf : Function.Injective f) (inv : ∀ (x : M₁), f x⁻¹ = (f x)⁻¹) :

                                                        A type has an involutive inversion if it admits a surjective map that preserves ⁻¹ to a type which has an involutive inversion. See note [reducible non-instances]

                                                        Equations
                                                        Instances For
                                                          @[reducible, inline]
                                                          abbrev Function.Injective.negZeroClass {M₁ : Type u_1} {M₂ : Type u_2} [Zero M₁] [Neg M₁] [NegZeroClass M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (inv : ∀ (x : M₁), f (-x) = -f x) :

                                                          A type endowed with 0 and unary - is an NegZeroClass, if it admits an injective map that preserves 0 and unary - to an NegZeroClass.

                                                          Equations
                                                          Instances For
                                                            theorem Function.Injective.negZeroClass.proof_1 {M₁ : Type u_1} {M₂ : Type u_2} [Zero M₁] [Neg M₁] [NegZeroClass M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (inv : ∀ (x : M₁), f (-x) = -f x) :
                                                            -0 = 0
                                                            @[reducible, inline]
                                                            abbrev Function.Injective.invOneClass {M₁ : Type u_1} {M₂ : Type u_2} [One M₁] [Inv M₁] [InvOneClass M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 1 = 1) (inv : ∀ (x : M₁), f x⁻¹ = (f x)⁻¹) :

                                                            A type endowed with 1 and ⁻¹ is a InvOneClass, if it admits an injective map that preserves 1 and ⁻¹ to a InvOneClass. See note [reducible non-instances].

                                                            Equations
                                                            Instances For
                                                              theorem Function.Injective.subNegMonoid.proof_2 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [SMul M₁] [SubNegMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (x : M₁) :
                                                              (fun (n : ) (x : M₁) => n x) 0 x = 0
                                                              @[reducible, inline]
                                                              abbrev Function.Injective.subNegMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [Neg M₁] [Sub M₁] [SMul M₁] [SubNegMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                                                              A type endowed with 0, +, unary -, and binary - is a SubNegMonoid if it admits an injective map that preserves 0, +, unary -, and binary - to a SubNegMonoid. This version takes custom nsmul and zsmul as [SMul ℕ M₁] and [SMul ℤ M₁] arguments.

                                                              Equations
                                                              Instances For
                                                                theorem Function.Injective.subNegMonoid.proof_3 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [SMul M₁] [SubNegMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (n : ) (x : M₁) :
                                                                (fun (n : ) (x : M₁) => n x) (↑n.succ) x = (fun (n : ) (x : M₁) => n x) (↑n) x + x
                                                                theorem Function.Injective.subNegMonoid.proof_1 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [Neg M₁] [Sub M₁] [SubNegMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (x : M₁) (y : M₁) :
                                                                x - y = x + -y
                                                                theorem Function.Injective.subNegMonoid.proof_4 {M₁ : Type u_1} {M₂ : Type u_2} [Neg M₁] [SMul M₁] [SubNegMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (inv : ∀ (x : M₁), f (-x) = -f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (n : ) (x : M₁) :
                                                                (fun (n : ) (x : M₁) => n x) (Int.negSucc n) x = -(fun (n : ) (x : M₁) => n x) (↑n.succ) x
                                                                @[reducible, inline]
                                                                abbrev Function.Injective.divInvMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [One M₁] [Pow M₁ ] [Inv M₁] [Div M₁] [Pow M₁ ] [DivInvMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (inv : ∀ (x : M₁), f x⁻¹ = (f x)⁻¹) (div : ∀ (x y : M₁), f (x / y) = f x / f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) (zpow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :

                                                                A type endowed with 1, *, ⁻¹, and / is a DivInvMonoid if it admits an injective map that preserves 1, *, ⁻¹, and / to a DivInvMonoid. See note [reducible non-instances].

                                                                Equations
                                                                Instances For
                                                                  @[reducible, inline]
                                                                  abbrev Function.Injective.subNegZeroMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [Neg M₁] [Sub M₁] [SMul M₁] [SubNegZeroMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                                                                  A type endowed with 0, +, unary -, and binary - is a SubNegZeroMonoid if it admits an injective map that preserves 0, +, unary -, and binary - to a SubNegZeroMonoid. This version takes custom nsmul and zsmul as [SMul ℕ M₁] and [SMul ℤ M₁] arguments.

                                                                  Equations
                                                                  Instances For
                                                                    @[reducible, inline]
                                                                    abbrev Function.Injective.divInvOneMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [One M₁] [Pow M₁ ] [Inv M₁] [Div M₁] [Pow M₁ ] [DivInvOneMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (inv : ∀ (x : M₁), f x⁻¹ = (f x)⁻¹) (div : ∀ (x y : M₁), f (x / y) = f x / f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) (zpow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :

                                                                    A type endowed with 1, *, ⁻¹, and / is a DivInvOneMonoid if it admits an injective map that preserves 1, *, ⁻¹, and / to a DivInvOneMonoid. See note [reducible non-instances].

                                                                    Equations
                                                                    Instances For
                                                                      theorem Function.Injective.subtractionMonoid.proof_1 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [Neg M₁] [Sub M₁] [SMul M₁] [SubtractionMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (x : M₁) (y : M₁) :
                                                                      -(x + y) = -y + -x
                                                                      @[reducible, inline]
                                                                      abbrev Function.Injective.subtractionMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [Neg M₁] [Sub M₁] [SMul M₁] [SubtractionMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                                                                      A type endowed with 0, +, unary -, and binary - is a SubtractionMonoid if it admits an injective map that preserves 0, +, unary -, and binary - to a SubtractionMonoid. This version takes custom nsmul and zsmul as [SMul ℕ M₁] and [SMul ℤ M₁] arguments.

                                                                      Equations
                                                                      Instances For
                                                                        theorem Function.Injective.subtractionMonoid.proof_2 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [Neg M₁] [Sub M₁] [SMul M₁] [SubtractionMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (x : M₁) (y : M₁) (h : x + y = 0) :
                                                                        -x = y
                                                                        @[reducible, inline]
                                                                        abbrev Function.Injective.divisionMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [One M₁] [Pow M₁ ] [Inv M₁] [Div M₁] [Pow M₁ ] [DivisionMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (inv : ∀ (x : M₁), f x⁻¹ = (f x)⁻¹) (div : ∀ (x y : M₁), f (x / y) = f x / f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) (zpow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :

                                                                        A type endowed with 1, *, ⁻¹, and / is a DivisionMonoid if it admits an injective map that preserves 1, *, ⁻¹, and / to a DivisionMonoid. See note [reducible non-instances]

                                                                        Equations
                                                                        Instances For
                                                                          @[reducible, inline]
                                                                          abbrev Function.Injective.subtractionCommMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [Neg M₁] [Sub M₁] [SMul M₁] [SubtractionCommMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                                                                          A type endowed with 0, +, unary -, and binary - is a SubtractionCommMonoid if it admits an injective map that preserves 0, +, unary -, and binary - to a SubtractionCommMonoid. This version takes custom nsmul and zsmul as [SMul ℕ M₁] and [SMul ℤ M₁] arguments.

                                                                          Equations
                                                                          Instances For
                                                                            @[reducible, inline]
                                                                            abbrev Function.Injective.divisionCommMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [One M₁] [Pow M₁ ] [Inv M₁] [Div M₁] [Pow M₁ ] [DivisionCommMonoid M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (inv : ∀ (x : M₁), f x⁻¹ = (f x)⁻¹) (div : ∀ (x y : M₁), f (x / y) = f x / f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) (zpow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :

                                                                            A type endowed with 1, *, ⁻¹, and / is a DivisionCommMonoid if it admits an injective map that preserves 1, *, ⁻¹, and / to a DivisionCommMonoid. See note [reducible non-instances].

                                                                            Equations
                                                                            Instances For
                                                                              theorem Function.Injective.addGroup.proof_1 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [Neg M₁] [Sub M₁] [SMul M₁] [AddGroup M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (x : M₁) :
                                                                              -x + x = 0
                                                                              @[reducible, inline]
                                                                              abbrev Function.Injective.addGroup {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [Neg M₁] [Sub M₁] [SMul M₁] [AddGroup M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                                                                              A type endowed with 0 and + is an additive group, if it admits an injective map that preserves 0 and + to an additive group.

                                                                              Equations
                                                                              Instances For
                                                                                @[reducible, inline]
                                                                                abbrev Function.Injective.group {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [One M₁] [Pow M₁ ] [Inv M₁] [Div M₁] [Pow M₁ ] [Group M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (inv : ∀ (x : M₁), f x⁻¹ = (f x)⁻¹) (div : ∀ (x y : M₁), f (x / y) = f x / f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) (zpow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :
                                                                                Group M₁

                                                                                A type endowed with 1, * and ⁻¹ is a group, if it admits an injective map that preserves 1, * and ⁻¹ to a group. See note [reducible non-instances].

                                                                                Equations
                                                                                Instances For
                                                                                  @[reducible, inline]
                                                                                  abbrev Function.Injective.addGroupWithOne {M₂ : Type u_2} {M₁ : Type u_3} [Zero M₁] [One M₁] [Add M₁] [SMul M₁] [Neg M₁] [Sub M₁] [SMul M₁] [NatCast M₁] [IntCast M₁] [AddGroupWithOne M₂] (f : M₁M₂) (hf : Function.Injective f) (zero : f 0 = 0) (one : f 1 = 1) (add : ∀ (x y : M₁), f (x + y) = f x + f y) (neg : ∀ (x : M₁), f (-x) = -f x) (sub : ∀ (x y : M₁), f (x - y) = f x - f y) (nsmul : ∀ (n : ) (x : M₁), f (n x) = n f x) (zsmul : ∀ (n : ) (x : M₁), f (n x) = n f x) (natCast : ∀ (n : ), f n = n) (intCast : ∀ (n : ), f n = n) :

                                                                                  A type endowed with 0, 1 and + is an additive group with one, if it admits an injective map that preserves 0, 1 and + to an additive group with one. See note [reducible non-instances].

                                                                                  Equations
                                                                                  Instances For
                                                                                    theorem Function.Injective.addCommGroup.proof_3 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [Neg M₁] [Sub M₁] [SMul M₁] [AddCommGroup M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (n : ) (a : M₁) :
                                                                                    SubNegMonoid.zsmul (↑n.succ) a = SubNegMonoid.zsmul (↑n) a + a
                                                                                    @[reducible, inline]
                                                                                    abbrev Function.Injective.addCommGroup {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [Neg M₁] [Sub M₁] [SMul M₁] [AddCommGroup M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                                                                                    A type endowed with 0 and + is an additive commutative group, if it admits an injective map that preserves 0 and + to an additive commutative group.

                                                                                    Equations
                                                                                    Instances For
                                                                                      theorem Function.Injective.addCommGroup.proof_1 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [Neg M₁] [Sub M₁] [SMul M₁] [AddCommGroup M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (a : M₁) (b : M₁) :
                                                                                      a - b = a + -b
                                                                                      theorem Function.Injective.addCommGroup.proof_2 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [Neg M₁] [Sub M₁] [SMul M₁] [AddCommGroup M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (a : M₁) :
                                                                                      theorem Function.Injective.addCommGroup.proof_4 {M₁ : Type u_1} {M₂ : Type u_2} [Add M₁] [Zero M₁] [SMul M₁] [Neg M₁] [Sub M₁] [SMul M₁] [AddCommGroup M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (n : ) (a : M₁) :
                                                                                      @[reducible, inline]
                                                                                      abbrev Function.Injective.commGroup {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₁] [One M₁] [Pow M₁ ] [Inv M₁] [Div M₁] [Pow M₁ ] [CommGroup M₂] (f : M₁M₂) (hf : Function.Injective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (inv : ∀ (x : M₁), f x⁻¹ = (f x)⁻¹) (div : ∀ (x y : M₁), f (x / y) = f x / f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) (zpow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :

                                                                                      A type endowed with 1, * and ⁻¹ is a commutative group, if it admits an injective map that preserves 1, * and ⁻¹ to a commutative group. See note [reducible non-instances].

                                                                                      Equations
                                                                                      Instances For
                                                                                        @[reducible, inline]
                                                                                        abbrev Function.Injective.addCommGroupWithOne {M₂ : Type u_2} {M₁ : Type u_3} [Zero M₁] [One M₁] [Add M₁] [SMul M₁] [Neg M₁] [Sub M₁] [SMul M₁] [NatCast M₁] [IntCast M₁] [AddCommGroupWithOne M₂] (f : M₁M₂) (hf : Function.Injective f) (zero : f 0 = 0) (one : f 1 = 1) (add : ∀ (x y : M₁), f (x + y) = f x + f y) (neg : ∀ (x : M₁), f (-x) = -f x) (sub : ∀ (x y : M₁), f (x - y) = f x - f y) (nsmul : ∀ (n : ) (x : M₁), f (n x) = n f x) (zsmul : ∀ (n : ) (x : M₁), f (n x) = n f x) (natCast : ∀ (n : ), f n = n) (intCast : ∀ (n : ), f n = n) :

                                                                                        A type endowed with 0, 1 and + is an additive commutative group with one, if it admits an injective map that preserves 0, 1 and + to an additive commutative group with one. See note [reducible non-instances].

                                                                                        Equations
                                                                                        Instances For

                                                                                          Surjective #

                                                                                          @[reducible, inline]
                                                                                          abbrev Function.Surjective.addSemigroup {M₁ : Type u_1} {M₂ : Type u_2} [Add M₂] [AddSemigroup M₁] (f : M₁M₂) (hf : Function.Surjective f) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) :

                                                                                          A type endowed with + is an additive semigroup, if it admits a surjective map that preserves + from an additive semigroup.

                                                                                          Equations
                                                                                          Instances For
                                                                                            theorem Function.Surjective.addSemigroup.proof_1 {M₁ : Type u_2} {M₂ : Type u_1} [Add M₂] [AddSemigroup M₁] (f : M₁M₂) (hf : Function.Surjective f) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (y₁ : M₂) (y₂ : M₂) (y₃ : M₂) :
                                                                                            y₁ + y₂ + y₃ = y₁ + (y₂ + y₃)
                                                                                            @[reducible, inline]
                                                                                            abbrev Function.Surjective.semigroup {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₂] [Semigroup M₁] (f : M₁M₂) (hf : Function.Surjective f) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) :

                                                                                            A type endowed with * is a semigroup, if it admits a surjective map that preserves * from a semigroup. See note [reducible non-instances].

                                                                                            Equations
                                                                                            Instances For
                                                                                              @[reducible, inline]
                                                                                              abbrev Function.Surjective.addCommMagma {M₁ : Type u_1} {M₂ : Type u_2} [Add M₂] [AddCommMagma M₁] (f : M₁M₂) (hf : Function.Surjective f) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) :

                                                                                              A type endowed with + is an additive commutative semigroup, if it admits a surjective map that preserves + from an additive commutative semigroup.

                                                                                              Equations
                                                                                              Instances For
                                                                                                theorem Function.Surjective.addCommMagma.proof_1 {M₁ : Type u_2} {M₂ : Type u_1} [Add M₂] [AddCommMagma M₁] (f : M₁M₂) (hf : Function.Surjective f) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (y₁ : M₂) (y₂ : M₂) :
                                                                                                y₁ + y₂ = y₂ + y₁
                                                                                                @[reducible, inline]
                                                                                                abbrev Function.Surjective.commMagma {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₂] [CommMagma M₁] (f : M₁M₂) (hf : Function.Surjective f) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) :

                                                                                                A type endowed with * is a commutative semigroup, if it admits a surjective map that preserves * from a commutative semigroup. See note [reducible non-instances].

                                                                                                Equations
                                                                                                Instances For
                                                                                                  @[reducible, inline]
                                                                                                  abbrev Function.Surjective.addCommSemigroup {M₁ : Type u_1} {M₂ : Type u_2} [Add M₂] [AddCommSemigroup M₁] (f : M₁M₂) (hf : Function.Surjective f) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) :

                                                                                                  A type endowed with + is an additive commutative semigroup, if it admits a surjective map that preserves + from an additive commutative semigroup.

                                                                                                  Equations
                                                                                                  Instances For
                                                                                                    @[reducible, inline]
                                                                                                    abbrev Function.Surjective.commSemigroup {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₂] [CommSemigroup M₁] (f : M₁M₂) (hf : Function.Surjective f) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) :

                                                                                                    A type endowed with * is a commutative semigroup, if it admits a surjective map that preserves * from a commutative semigroup. See note [reducible non-instances].

                                                                                                    Equations
                                                                                                    Instances For
                                                                                                      theorem Function.Surjective.addZeroClass.proof_1 {M₁ : Type u_2} {M₂ : Type u_1} [Add M₂] [Zero M₂] [AddZeroClass M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (y : M₂) :
                                                                                                      0 + y = y
                                                                                                      @[reducible, inline]
                                                                                                      abbrev Function.Surjective.addZeroClass {M₁ : Type u_1} {M₂ : Type u_2} [Add M₂] [Zero M₂] [AddZeroClass M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) :

                                                                                                      A type endowed with 0 and + is an AddZeroClass, if it admits a surjective map that preserves 0 and + to an AddZeroClass.

                                                                                                      Equations
                                                                                                      Instances For
                                                                                                        theorem Function.Surjective.addZeroClass.proof_2 {M₁ : Type u_2} {M₂ : Type u_1} [Add M₂] [Zero M₂] [AddZeroClass M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (y : M₂) :
                                                                                                        y + 0 = y
                                                                                                        @[reducible, inline]
                                                                                                        abbrev Function.Surjective.mulOneClass {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₂] [One M₂] [MulOneClass M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) :

                                                                                                        A type endowed with 1 and * is a MulOneClass, if it admits a surjective map that preserves 1 and * from a MulOneClass. See note [reducible non-instances].

                                                                                                        Equations
                                                                                                        Instances For
                                                                                                          theorem Function.Surjective.addMonoid.proof_2 {M₁ : Type u_2} {M₂ : Type u_1} [Add M₂] [SMul M₂] [AddMonoid M₁] (f : M₁M₂) (hf : Function.Surjective f) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (n : ) (y : M₂) :
                                                                                                          (fun (n : ) (x : M₂) => n x) (n + 1) y = (fun (n : ) (x : M₂) => n x) n y + y
                                                                                                          theorem Function.Surjective.addMonoid.proof_1 {M₁ : Type u_2} {M₂ : Type u_1} [Add M₂] [Zero M₂] [SMul M₂] [AddMonoid M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (y : M₂) :
                                                                                                          (fun (n : ) (x : M₂) => n x) 0 y = 0
                                                                                                          @[reducible, inline]
                                                                                                          abbrev Function.Surjective.addMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Add M₂] [Zero M₂] [SMul M₂] [AddMonoid M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                                                                                                          A type endowed with 0 and + is an additive monoid, if it admits a surjective map that preserves 0 and + to an additive monoid. This version takes a custom nsmul as a [SMul ℕ M₂] argument.

                                                                                                          Equations
                                                                                                          Instances For
                                                                                                            @[reducible, inline]
                                                                                                            abbrev Function.Surjective.monoid {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₂] [One M₂] [Pow M₂ ] [Monoid M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :
                                                                                                            Monoid M₂

                                                                                                            A type endowed with 1 and * is a monoid, if it admits a surjective map that preserves 1 and * to a monoid. See note [reducible non-instances].

                                                                                                            Equations
                                                                                                            Instances For
                                                                                                              @[reducible, inline]
                                                                                                              abbrev Function.Surjective.addMonoidWithOne {M₁ : Type u_1} {M₂ : Type u_3} [Zero M₂] [One M₂] [Add M₂] [SMul M₂] [NatCast M₂] [AddMonoidWithOne M₁] (f : M₁M₂) (hf : Function.Surjective f) (zero : f 0 = 0) (one : f 1 = 1) (add : ∀ (x y : M₁), f (x + y) = f x + f y) (nsmul : ∀ (n : ) (x : M₁), f (n x) = n f x) (natCast : ∀ (n : ), f n = n) :

                                                                                                              A type endowed with 0, 1 and + is an additive monoid with one, if it admits a surjective map that preserves 0, 1 and * from an additive monoid with one. See note [reducible non-instances].

                                                                                                              Equations
                                                                                                              Instances For
                                                                                                                @[reducible, inline]
                                                                                                                abbrev Function.Surjective.addCommMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Add M₂] [Zero M₂] [SMul M₂] [AddCommMonoid M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                                                                                                                A type endowed with 0 and + is an additive commutative monoid, if it admits a surjective map that preserves 0 and + to an additive commutative monoid.

                                                                                                                Equations
                                                                                                                Instances For
                                                                                                                  @[reducible, inline]
                                                                                                                  abbrev Function.Surjective.commMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₂] [One M₂] [Pow M₂ ] [CommMonoid M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :

                                                                                                                  A type endowed with 1 and * is a commutative monoid, if it admits a surjective map that preserves 1 and * from a commutative monoid. See note [reducible non-instances].

                                                                                                                  Equations
                                                                                                                  Instances For
                                                                                                                    @[reducible, inline]
                                                                                                                    abbrev Function.Surjective.addCommMonoidWithOne {M₁ : Type u_1} {M₂ : Type u_3} [Zero M₂] [One M₂] [Add M₂] [SMul M₂] [NatCast M₂] [AddCommMonoidWithOne M₁] (f : M₁M₂) (hf : Function.Surjective f) (zero : f 0 = 0) (one : f 1 = 1) (add : ∀ (x y : M₁), f (x + y) = f x + f y) (nsmul : ∀ (n : ) (x : M₁), f (n x) = n f x) (natCast : ∀ (n : ), f n = n) :

                                                                                                                    A type endowed with 0, 1 and + is an additive monoid with one, if it admits a surjective map that preserves 0, 1 and * from an additive monoid with one. See note [reducible non-instances].

                                                                                                                    Equations
                                                                                                                    Instances For
                                                                                                                      @[reducible, inline]
                                                                                                                      abbrev Function.Surjective.involutiveNeg {M₁ : Type u_1} {M₂ : Type u_3} [Neg M₂] [InvolutiveNeg M₁] (f : M₁M₂) (hf : Function.Surjective f) (inv : ∀ (x : M₁), f (-x) = -f x) :

                                                                                                                      A type has an involutive negation if it admits a surjective map that preserves - to a type which has an involutive negation.

                                                                                                                      Equations
                                                                                                                      Instances For
                                                                                                                        theorem Function.Surjective.involutiveNeg.proof_1 {M₁ : Type u_2} {M₂ : Type u_1} [Neg M₂] [InvolutiveNeg M₁] (f : M₁M₂) (hf : Function.Surjective f) (inv : ∀ (x : M₁), f (-x) = -f x) (y : M₂) :
                                                                                                                        - -y = y
                                                                                                                        @[reducible, inline]
                                                                                                                        abbrev Function.Surjective.involutiveInv {M₁ : Type u_1} {M₂ : Type u_3} [Inv M₂] [InvolutiveInv M₁] (f : M₁M₂) (hf : Function.Surjective f) (inv : ∀ (x : M₁), f x⁻¹ = (f x)⁻¹) :

                                                                                                                        A type has an involutive inversion if it admits a surjective map that preserves ⁻¹ to a type which has an involutive inversion. See note [reducible non-instances]

                                                                                                                        Equations
                                                                                                                        Instances For
                                                                                                                          theorem Function.Surjective.subNegMonoid.proof_4 {M₁ : Type u_2} {M₂ : Type u_1} [Neg M₂] [SMul M₂] [SubNegMonoid M₁] (f : M₁M₂) (hf : Function.Surjective f) (inv : ∀ (x : M₁), f (-x) = -f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (n : ) (y : M₂) :
                                                                                                                          (fun (n : ) (x : M₂) => n x) (Int.negSucc n) y = -(fun (n : ) (x : M₂) => n x) (↑n.succ) y
                                                                                                                          theorem Function.Surjective.subNegMonoid.proof_2 {M₁ : Type u_2} {M₂ : Type u_1} [Add M₂] [Zero M₂] [SMul M₂] [SMul M₂] [SubNegMonoid M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (y : M₂) :
                                                                                                                          (fun (n : ) (x : M₂) => n x) 0 y = 0
                                                                                                                          @[reducible, inline]
                                                                                                                          abbrev Function.Surjective.subNegMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Add M₂] [Zero M₂] [SMul M₂] [Neg M₂] [Sub M₂] [SMul M₂] [SubNegMonoid M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                                                                                                                          A type endowed with 0, +, unary -, and binary - is a SubNegMonoid if it admits a surjective map that preserves 0, +, unary -, and binary - to a SubNegMonoid.

                                                                                                                          Equations
                                                                                                                          Instances For
                                                                                                                            theorem Function.Surjective.subNegMonoid.proof_3 {M₁ : Type u_2} {M₂ : Type u_1} [Add M₂] [Zero M₂] [SMul M₂] [SMul M₂] [SubNegMonoid M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (n : ) (y : M₂) :
                                                                                                                            (fun (n : ) (x : M₂) => n x) (↑n.succ) y = (fun (n : ) (x : M₂) => n x) (↑n) y + y
                                                                                                                            theorem Function.Surjective.subNegMonoid.proof_1 {M₁ : Type u_2} {M₂ : Type u_1} [Add M₂] [Zero M₂] [SMul M₂] [Neg M₂] [Sub M₂] [SubNegMonoid M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (y₁ : M₂) (y₂ : M₂) :
                                                                                                                            y₁ - y₂ = y₁ + -y₂
                                                                                                                            @[reducible, inline]
                                                                                                                            abbrev Function.Surjective.divInvMonoid {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₂] [One M₂] [Pow M₂ ] [Inv M₂] [Div M₂] [Pow M₂ ] [DivInvMonoid M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (inv : ∀ (x : M₁), f x⁻¹ = (f x)⁻¹) (div : ∀ (x y : M₁), f (x / y) = f x / f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) (zpow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :

                                                                                                                            A type endowed with 1, *, ⁻¹, and / is a DivInvMonoid if it admits a surjective map that preserves 1, *, ⁻¹, and / to a DivInvMonoid. See note [reducible non-instances].

                                                                                                                            Equations
                                                                                                                            Instances For
                                                                                                                              theorem Function.Surjective.addGroup.proof_1 {M₁ : Type u_2} {M₂ : Type u_1} [Add M₂] [Zero M₂] [SMul M₂] [Neg M₂] [Sub M₂] [SMul M₂] [AddGroup M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (y : M₂) :
                                                                                                                              -y + y = 0
                                                                                                                              @[reducible, inline]
                                                                                                                              abbrev Function.Surjective.addGroup {M₁ : Type u_1} {M₂ : Type u_2} [Add M₂] [Zero M₂] [SMul M₂] [Neg M₂] [Sub M₂] [SMul M₂] [AddGroup M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                                                                                                                              A type endowed with 0 and + is an additive group, if it admits a surjective map that preserves 0 and + to an additive group.

                                                                                                                              Equations
                                                                                                                              Instances For
                                                                                                                                @[reducible, inline]
                                                                                                                                abbrev Function.Surjective.group {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₂] [One M₂] [Pow M₂ ] [Inv M₂] [Div M₂] [Pow M₂ ] [Group M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (inv : ∀ (x : M₁), f x⁻¹ = (f x)⁻¹) (div : ∀ (x y : M₁), f (x / y) = f x / f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) (zpow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :
                                                                                                                                Group M₂

                                                                                                                                A type endowed with 1, * and ⁻¹ is a group, if it admits a surjective map that preserves 1, * and ⁻¹ to a group. See note [reducible non-instances].

                                                                                                                                Equations
                                                                                                                                Instances For
                                                                                                                                  @[reducible, inline]
                                                                                                                                  abbrev Function.Surjective.addGroupWithOne {M₁ : Type u_1} {M₂ : Type u_3} [Zero M₂] [One M₂] [Add M₂] [Neg M₂] [Sub M₂] [SMul M₂] [SMul M₂] [NatCast M₂] [IntCast M₂] [AddGroupWithOne M₁] (f : M₁M₂) (hf : Function.Surjective f) (zero : f 0 = 0) (one : f 1 = 1) (add : ∀ (x y : M₁), f (x + y) = f x + f y) (neg : ∀ (x : M₁), f (-x) = -f x) (sub : ∀ (x y : M₁), f (x - y) = f x - f y) (nsmul : ∀ (n : ) (x : M₁), f (n x) = n f x) (zsmul : ∀ (n : ) (x : M₁), f (n x) = n f x) (natCast : ∀ (n : ), f n = n) (intCast : ∀ (n : ), f n = n) :

                                                                                                                                  A type endowed with 0, 1, + is an additive group with one, if it admits a surjective map that preserves 0, 1, and + to an additive group with one. See note [reducible non-instances].

                                                                                                                                  Equations
                                                                                                                                  Instances For
                                                                                                                                    theorem Function.Surjective.addCommGroup.proof_4 {M₁ : Type u_2} {M₂ : Type u_1} [Add M₂] [Zero M₂] [SMul M₂] [Neg M₂] [Sub M₂] [SMul M₂] [AddCommGroup M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (n : ) (a : M₂) :
                                                                                                                                    theorem Function.Surjective.addCommGroup.proof_2 {M₁ : Type u_2} {M₂ : Type u_1} [Add M₂] [Zero M₂] [SMul M₂] [Neg M₂] [Sub M₂] [SMul M₂] [AddCommGroup M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (a : M₂) :
                                                                                                                                    @[reducible, inline]
                                                                                                                                    abbrev Function.Surjective.addCommGroup {M₁ : Type u_1} {M₂ : Type u_2} [Add M₂] [Zero M₂] [SMul M₂] [Neg M₂] [Sub M₂] [SMul M₂] [AddCommGroup M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) :

                                                                                                                                    A type endowed with 0 and + is an additive commutative group, if it admits a surjective map that preserves 0 and + to an additive commutative group.

                                                                                                                                    Equations
                                                                                                                                    Instances For
                                                                                                                                      theorem Function.Surjective.addCommGroup.proof_3 {M₁ : Type u_2} {M₂ : Type u_1} [Add M₂] [Zero M₂] [SMul M₂] [Neg M₂] [Sub M₂] [SMul M₂] [AddCommGroup M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (n : ) (a : M₂) :
                                                                                                                                      SubNegMonoid.zsmul (↑n.succ) a = SubNegMonoid.zsmul (↑n) a + a
                                                                                                                                      theorem Function.Surjective.addCommGroup.proof_1 {M₁ : Type u_2} {M₂ : Type u_1} [Add M₂] [Zero M₂] [SMul M₂] [Neg M₂] [Sub M₂] [SMul M₂] [AddCommGroup M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 0 = 0) (mul : ∀ (x y : M₁), f (x + y) = f x + f y) (inv : ∀ (x : M₁), f (-x) = -f x) (div : ∀ (x y : M₁), f (x - y) = f x - f y) (npow : ∀ (x : M₁) (n : ), f (n x) = n f x) (zpow : ∀ (x : M₁) (n : ), f (n x) = n f x) (a : M₂) (b : M₂) :
                                                                                                                                      a - b = a + -b
                                                                                                                                      @[reducible, inline]
                                                                                                                                      abbrev Function.Surjective.commGroup {M₁ : Type u_1} {M₂ : Type u_2} [Mul M₂] [One M₂] [Pow M₂ ] [Inv M₂] [Div M₂] [Pow M₂ ] [CommGroup M₁] (f : M₁M₂) (hf : Function.Surjective f) (one : f 1 = 1) (mul : ∀ (x y : M₁), f (x * y) = f x * f y) (inv : ∀ (x : M₁), f x⁻¹ = (f x)⁻¹) (div : ∀ (x y : M₁), f (x / y) = f x / f y) (npow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) (zpow : ∀ (x : M₁) (n : ), f (x ^ n) = f x ^ n) :

                                                                                                                                      A type endowed with 1, *, ⁻¹, and / is a commutative group, if it admits a surjective map that preserves 1, *, ⁻¹, and / from a commutative group. See note [reducible non-instances].

                                                                                                                                      Equations
                                                                                                                                      Instances For
                                                                                                                                        @[reducible, inline]
                                                                                                                                        abbrev Function.Surjective.addCommGroupWithOne {M₁ : Type u_1} {M₂ : Type u_3} [Zero M₂] [One M₂] [Add M₂] [Neg M₂] [Sub M₂] [SMul M₂] [SMul M₂] [NatCast M₂] [IntCast M₂] [AddCommGroupWithOne M₁] (f : M₁M₂) (hf : Function.Surjective f) (zero : f 0 = 0) (one : f 1 = 1) (add : ∀ (x y : M₁), f (x + y) = f x + f y) (neg : ∀ (x : M₁), f (-x) = -f x) (sub : ∀ (x y : M₁), f (x - y) = f x - f y) (nsmul : ∀ (n : ) (x : M₁), f (n x) = n f x) (zsmul : ∀ (n : ) (x : M₁), f (n x) = n f x) (natCast : ∀ (n : ), f n = n) (intCast : ∀ (n : ), f n = n) :

                                                                                                                                        A type endowed with 0, 1, + is an additive commutative group with one, if it admits a surjective map that preserves 0, 1, and + to an additive commutative group with one. See note [reducible non-instances].

                                                                                                                                        Equations
                                                                                                                                        Instances For