Documentation

Mathlib.GroupTheory.Submonoid.Inverses

Submonoid of inverses #

Given a submonoid N of a monoid M, we define the submonoid N.leftInv as the submonoid of left inverses of N. When M is commutative, we may define fromCommLeftInv : N.leftInv →* N since the inverses are unique. When N ≤ IsUnit.Submonoid M, this is precisely the pointwise inverse of N, and we may define leftInvEquiv : S.leftInv ≃* S.

For the pointwise inverse of submonoids of groups, please refer to GroupTheory.Submonoid.Pointwise.

TODO #

Define the submonoid of right inverses and two-sided inverses. See the comments of #10679 for a possible implementation.

Equations
  • One or more equations did not get rendered due to their size.
Equations
  • One or more equations did not get rendered due to their size.
Equations
  • One or more equations did not get rendered due to their size.
theorem AddSubmonoid.leftNeg.proof_2 {M : Type u_1} [AddMonoid M] (S : AddSubmonoid M) :
∃ (y : S), 0 + y = 0
abbrev AddSubmonoid.leftNeg.match_1 {M : Type u_1} [AddMonoid M] (S : AddSubmonoid M) (_b : M) (motive : _b {x : M | ∃ (y : S), x + y = 0}Prop) :
∀ (x : _b {x : M | ∃ (y : S), x + y = 0}), (∀ (b' : S) (hb : _b + b' = 0), motive (_ : ∃ (y : S), _b + y = 0))motive x
Equations
  • (_ : motive x) = (_ : motive x)
Instances For
    theorem AddSubmonoid.leftNeg.proof_1 {M : Type u_1} [AddMonoid M] (S : AddSubmonoid M) {a : M} (_b : M) :
    a {x : M | ∃ (y : S), x + y = 0}_b {x : M | ∃ (y : S), x + y = 0}a + _b {x : M | ∃ (y : S), x + y = 0}

    S.leftNeg is the additive submonoid containing all the left additive inverses of S.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      def Submonoid.leftInv {M : Type u_1} [Monoid M] (S : Submonoid M) :

      S.leftInv is the submonoid containing all the left inverses of S.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        theorem AddSubmonoid.addUnit_mem_leftNeg {M : Type u_1} [AddMonoid M] (S : AddSubmonoid M) (x : AddUnits M) (hx : x S) :
        theorem Submonoid.unit_mem_leftInv {M : Type u_1} [Monoid M] (S : Submonoid M) (x : Mˣ) (hx : x S) :
        noncomputable def AddSubmonoid.fromLeftNeg {M : Type u_1} [AddMonoid M] (S : AddSubmonoid M) :
        (AddSubmonoid.leftNeg S)S

        The function from S.leftAdd to S sending an element to its right additive inverse in S. This is an AddMonoidHom when M is commutative.

        Equations
        Instances For
          noncomputable def Submonoid.fromLeftInv {M : Type u_1} [Monoid M] (S : Submonoid M) :
          (Submonoid.leftInv S)S

          The function from S.leftInv to S sending an element to its right inverse in S. This is a MonoidHom when M is commutative.

          Equations
          Instances For
            @[simp]
            theorem AddSubmonoid.add_fromLeftNeg {M : Type u_1} [AddMonoid M] (S : AddSubmonoid M) (x : (AddSubmonoid.leftNeg S)) :
            x + (AddSubmonoid.fromLeftNeg S x) = 0
            @[simp]
            theorem Submonoid.mul_fromLeftInv {M : Type u_1} [Monoid M] (S : Submonoid M) (x : (Submonoid.leftInv S)) :
            x * (Submonoid.fromLeftInv S x) = 1
            @[simp]
            @[simp]
            @[simp]
            theorem Submonoid.fromLeftInv_mul {M : Type u_1} [CommMonoid M] (S : Submonoid M) (x : (Submonoid.leftInv S)) :
            (Submonoid.fromLeftInv S x) * x = 1
            abbrev AddSubmonoid.leftNeg_le_isAddUnit.match_1 {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) (x : M) (motive : x AddSubmonoid.leftNeg SProp) :
            ∀ (x_1 : x AddSubmonoid.leftNeg S), (∀ (y : S) (hx : x + y = 0), motive (_ : ∃ (y : S), x + y = 0))motive x_1
            Equations
            • (_ : motive x) = (_ : motive x)
            Instances For
              theorem AddSubmonoid.fromLeftNeg_eq_iff {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) (a : (AddSubmonoid.leftNeg S)) (b : M) :
              (AddSubmonoid.fromLeftNeg S a) = b a + b = 0
              theorem Submonoid.fromLeftInv_eq_iff {M : Type u_1} [CommMonoid M] (S : Submonoid M) (a : (Submonoid.leftInv S)) (b : M) :
              (Submonoid.fromLeftInv S a) = b a * b = 1
              theorem AddSubmonoid.fromCommLeftNeg.proof_2 {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) (x : (AddSubmonoid.leftNeg S)) (y : (AddSubmonoid.leftNeg S)) :
              { toFun := AddSubmonoid.fromLeftNeg S, map_zero' := (_ : AddSubmonoid.fromLeftNeg S 0 = 0) }.toFun (x + y) = { toFun := AddSubmonoid.fromLeftNeg S, map_zero' := (_ : AddSubmonoid.fromLeftNeg S 0 = 0) }.toFun x + { toFun := AddSubmonoid.fromLeftNeg S, map_zero' := (_ : AddSubmonoid.fromLeftNeg S 0 = 0) }.toFun y
              noncomputable def AddSubmonoid.fromCommLeftNeg {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) :

              The AddMonoidHom from S.leftNeg to S sending an element to its right additive inverse in S.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                noncomputable def Submonoid.fromCommLeftInv {M : Type u_1} [CommMonoid M] (S : Submonoid M) :

                The MonoidHom from S.leftInv to S sending an element to its right inverse in S.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  noncomputable def AddSubmonoid.leftNegEquiv {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) (hS : S IsAddUnit.addSubmonoid M) :

                  The additive submonoid of pointwise additive inverse of S is AddEquiv to S.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    theorem AddSubmonoid.leftNegEquiv.proof_3 {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) (hS : S IsAddUnit.addSubmonoid M) (x : (AddSubmonoid.leftNeg S)) :
                    (fun (x : S) => (fun (x' : AddUnits M) (hx : x' = x) => { val := x'.neg, property := (_ : ∃ (y : S), x'.neg + y = 0) }) (Classical.choose (_ : x IsAddUnit.addSubmonoid M)) (_ : (Classical.choose (_ : x IsAddUnit.addSubmonoid M)) = x)) (((AddSubmonoid.fromCommLeftNeg S)).toFun x) = x
                    theorem AddSubmonoid.leftNegEquiv.proof_4 {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) (hS : S IsAddUnit.addSubmonoid M) (x : S) :
                    ((AddSubmonoid.fromCommLeftNeg S)).toFun ((fun (x : S) => (fun (x' : AddUnits M) (hx : x' = x) => { val := x'.neg, property := (_ : ∃ (y : S), x'.neg + y = 0) }) (Classical.choose (_ : x IsAddUnit.addSubmonoid M)) (_ : (Classical.choose (_ : x IsAddUnit.addSubmonoid M)) = x)) x) = x
                    @[simp]
                    theorem Submonoid.leftInvEquiv_apply {M : Type u_1} [CommMonoid M] (S : Submonoid M) (hS : S IsUnit.submonoid M) :
                    ∀ (a : (Submonoid.leftInv S)), (Submonoid.leftInvEquiv S hS) a = ((Submonoid.fromCommLeftInv S)).toFun a
                    noncomputable def Submonoid.leftInvEquiv {M : Type u_1} [CommMonoid M] (S : Submonoid M) (hS : S IsUnit.submonoid M) :

                    The submonoid of pointwise inverse of S is MulEquiv to S.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      theorem Submonoid.leftInvEquiv_mul {M : Type u_1} [CommMonoid M] (S : Submonoid M) (hS : S IsUnit.submonoid M) (x : (Submonoid.leftInv S)) :
                      ((Submonoid.leftInvEquiv S hS) x) * x = 1
                      theorem Submonoid.mul_leftInvEquiv {M : Type u_1} [CommMonoid M] (S : Submonoid M) (hS : S IsUnit.submonoid M) (x : (Submonoid.leftInv S)) :
                      x * ((Submonoid.leftInvEquiv S hS) x) = 1
                      @[simp]
                      @[simp]
                      theorem Submonoid.leftInvEquiv_symm_mul {M : Type u_1} [CommMonoid M] (S : Submonoid M) (hS : S IsUnit.submonoid M) (x : S) :
                      ((MulEquiv.symm (Submonoid.leftInvEquiv S hS)) x) * x = 1
                      @[simp]
                      @[simp]
                      theorem Submonoid.mul_leftInvEquiv_symm {M : Type u_1} [CommMonoid M] (S : Submonoid M) (hS : S IsUnit.submonoid M) (x : S) :
                      x * ((MulEquiv.symm (Submonoid.leftInvEquiv S hS)) x) = 1
                      @[simp]
                      @[simp]
                      theorem Submonoid.fromLeftInv_eq_inv {M : Type u_1} [Group M] (S : Submonoid M) (x : (Submonoid.leftInv S)) :
                      @[simp]
                      theorem Submonoid.leftInvEquiv_symm_eq_inv {M : Type u_1} [CommGroup M] (S : Submonoid M) (hS : S IsUnit.submonoid M) (x : S) :