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 the file Mathlib/Algebra/Group/Submonoid/Pointwise.lean.

N.leftInv is distinct from N.units, which is the subgroup of Mหฃ containing all units that are in N. See the implementation notes of Mathlib/Algebra/Group/Submonoid/Units.lean for more details on related constructions.

TODO #

Define the submonoid of right inverses and two-sided inverses. See the comments of https://github.com/leanprover-community/mathlib4/pull/10679 for a possible implementation.

@[implicit_reducible]
noncomputable instance Submonoid.instGroupSubtypeMemSubmonoid {M : Type u_1} [Monoid M] :
@[implicit_reducible]
@[implicit_reducible]
noncomputable instance Submonoid.instCommGroupSubtypeMemSubmonoid {M : Type u_1} [CommMonoid M] :
theorem AddSubmonoid.IsUnit.Submonoid.coe_neg {M : Type u_1} [AddMonoid M] (x : โ†ฅ(IsAddUnit.addSubmonoid M)) :
โ†‘(-x) = โ†‘(-IsAddUnit.addUnit โ‹ฏ)
def Submonoid.leftInv {M : Type u_1} [Monoid M] (S : Submonoid M) :

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

Instances For

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

    Instances For
      theorem Submonoid.unit_mem_leftInv {M : Type u_1} [Monoid M] (S : Submonoid M) (x : Mหฃ) (hx : โ†‘x โˆˆ S) :
      โ†‘xโปยน โˆˆ S.leftInv
      theorem AddSubmonoid.addUnit_mem_leftNeg {M : Type u_1} [AddMonoid M] (S : AddSubmonoid M) (x : AddUnits M) (hx : โ†‘x โˆˆ S) :
      โ†‘(-x) โˆˆ S.leftNeg
      noncomputable def Submonoid.fromLeftInv {M : Type u_1} [Monoid M] (S : Submonoid M) :
      โ†ฅS.leftInv โ†’ โ†ฅ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.

      Instances For
        noncomputable def AddSubmonoid.fromLeftNeg {M : Type u_1} [AddMonoid M] (S : AddSubmonoid M) :
        โ†ฅS.leftNeg โ†’ โ†ฅ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.

        Instances For
          @[simp]
          theorem Submonoid.mul_fromLeftInv {M : Type u_1} [Monoid M] (S : Submonoid M) (x : โ†ฅS.leftInv) :
          โ†‘x * โ†‘(S.fromLeftInv x) = 1
          @[simp]
          theorem AddSubmonoid.add_fromLeftNeg {M : Type u_1} [AddMonoid M] (S : AddSubmonoid M) (x : โ†ฅS.leftNeg) :
          โ†‘x + โ†‘(S.fromLeftNeg x) = 0
          @[simp]
          theorem Submonoid.fromLeftInv_one {M : Type u_1} [Monoid M] (S : Submonoid M) :
          S.fromLeftInv 1 = 1
          @[simp]
          theorem Submonoid.fromLeftInv_mul {M : Type u_1} [CommMonoid M] (S : Submonoid M) (x : โ†ฅS.leftInv) :
          โ†‘(S.fromLeftInv x) * โ†‘x = 1
          @[simp]
          theorem AddSubmonoid.fromLeftNeg_add {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) (x : โ†ฅS.leftNeg) :
          โ†‘(S.fromLeftNeg x) + โ†‘x = 0
          theorem Submonoid.fromLeftInv_eq_iff {M : Type u_1} [CommMonoid M] (S : Submonoid M) (a : โ†ฅS.leftInv) (b : M) :
          โ†‘(S.fromLeftInv a) = b โ†” โ†‘a * b = 1
          theorem AddSubmonoid.fromLeftNeg_eq_iff {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) (a : โ†ฅS.leftNeg) (b : M) :
          โ†‘(S.fromLeftNeg a) = b โ†” โ†‘a + b = 0
          noncomputable def Submonoid.fromCommLeftInv {M : Type u_1} [CommMonoid M] (S : Submonoid M) :
          โ†ฅS.leftInv โ†’* โ†ฅS

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

          Instances For
            noncomputable def AddSubmonoid.fromCommLeftNeg {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) :
            โ†ฅS.leftNeg โ†’+ โ†ฅS

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

            Instances For
              @[simp]
              theorem Submonoid.fromCommLeftInv_apply {M : Type u_1} [CommMonoid M] (S : Submonoid M) (aโœ : โ†ฅS.leftInv) :
              S.fromCommLeftInv aโœ = S.fromLeftInv aโœ
              @[simp]
              theorem AddSubmonoid.fromCommLeftNeg_apply {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) (aโœ : โ†ฅS.leftNeg) :
              S.fromCommLeftNeg aโœ = S.fromLeftNeg aโœ
              noncomputable def Submonoid.leftInvEquiv {M : Type u_1} [CommMonoid M] (S : Submonoid M) (hS : S โ‰ค IsUnit.submonoid M) :
              โ†ฅS.leftInv โ‰ƒ* โ†ฅS

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

              Instances For
                noncomputable def AddSubmonoid.leftNegEquiv {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) (hS : S โ‰ค IsAddUnit.addSubmonoid M) :
                โ†ฅS.leftNeg โ‰ƒ+ โ†ฅS

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

                Instances For
                  @[simp]
                  theorem AddSubmonoid.leftNegEquiv_apply {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) (hS : S โ‰ค IsAddUnit.addSubmonoid M) (aโœ : โ†ฅS.leftNeg) :
                  (S.leftNegEquiv hS) aโœ = (โ†‘S.fromCommLeftNeg).toFun aโœ
                  @[simp]
                  theorem Submonoid.leftInvEquiv_apply {M : Type u_1} [CommMonoid M] (S : Submonoid M) (hS : S โ‰ค IsUnit.submonoid M) (aโœ : โ†ฅS.leftInv) :
                  (S.leftInvEquiv hS) aโœ = (โ†‘S.fromCommLeftInv).toFun aโœ
                  @[simp]
                  theorem Submonoid.fromLeftInv_leftInvEquiv_symm {M : Type u_1} [CommMonoid M] (S : Submonoid M) (hS : S โ‰ค IsUnit.submonoid M) (x : โ†ฅS) :
                  S.fromLeftInv ((S.leftInvEquiv hS).symm x) = x
                  theorem Submonoid.leftInvEquiv_mul {M : Type u_1} [CommMonoid M] (S : Submonoid M) (hS : S โ‰ค IsUnit.submonoid M) (x : โ†ฅS.leftInv) :
                  โ†‘((S.leftInvEquiv hS) x) * โ†‘x = 1
                  theorem AddSubmonoid.leftNegEquiv_add {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) (hS : S โ‰ค IsAddUnit.addSubmonoid M) (x : โ†ฅS.leftNeg) :
                  โ†‘((S.leftNegEquiv hS) x) + โ†‘x = 0
                  theorem Submonoid.mul_leftInvEquiv {M : Type u_1} [CommMonoid M] (S : Submonoid M) (hS : S โ‰ค IsUnit.submonoid M) (x : โ†ฅS.leftInv) :
                  โ†‘x * โ†‘((S.leftInvEquiv hS) x) = 1
                  theorem AddSubmonoid.add_leftNegEquiv {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) (hS : S โ‰ค IsAddUnit.addSubmonoid M) (x : โ†ฅS.leftNeg) :
                  โ†‘x + โ†‘((S.leftNegEquiv hS) x) = 0
                  @[simp]
                  theorem Submonoid.leftInvEquiv_symm_mul {M : Type u_1} [CommMonoid M] (S : Submonoid M) (hS : S โ‰ค IsUnit.submonoid M) (x : โ†ฅS) :
                  โ†‘((S.leftInvEquiv hS).symm x) * โ†‘x = 1
                  @[simp]
                  theorem AddSubmonoid.leftNegEquiv_symm_add {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) (hS : S โ‰ค IsAddUnit.addSubmonoid M) (x : โ†ฅS) :
                  โ†‘((S.leftNegEquiv hS).symm x) + โ†‘x = 0
                  @[simp]
                  theorem Submonoid.mul_leftInvEquiv_symm {M : Type u_1} [CommMonoid M] (S : Submonoid M) (hS : S โ‰ค IsUnit.submonoid M) (x : โ†ฅS) :
                  โ†‘x * โ†‘((S.leftInvEquiv hS).symm x) = 1
                  @[simp]
                  theorem AddSubmonoid.add_leftNegEquiv_symm {M : Type u_1} [AddCommMonoid M] (S : AddSubmonoid M) (hS : S โ‰ค IsAddUnit.addSubmonoid M) (x : โ†ฅS) :
                  โ†‘x + โ†‘((S.leftNegEquiv hS).symm x) = 0
                  @[simp]
                  theorem Submonoid.fromLeftInv_eq_inv {M : Type u_1} [Group M] (S : Submonoid M) (x : โ†ฅS.leftInv) :
                  โ†‘(S.fromLeftInv x) = (โ†‘x)โปยน
                  @[simp]
                  theorem AddSubmonoid.fromLeftNeg_eq_neg {M : Type u_1} [AddGroup M] (S : AddSubmonoid M) (x : โ†ฅS.leftNeg) :
                  โ†‘(S.fromLeftNeg x) = -โ†‘x
                  @[simp]
                  theorem Submonoid.leftInvEquiv_symm_eq_inv {M : Type u_1} [CommGroup M] (S : Submonoid M) (hS : S โ‰ค IsUnit.submonoid M) (x : โ†ฅS) :
                  โ†‘((S.leftInvEquiv hS).symm x) = (โ†‘x)โปยน
                  @[simp]
                  theorem AddSubmonoid.leftNegEquiv_symm_eq_neg {M : Type u_1} [AddCommGroup M] (S : AddSubmonoid M) (hS : S โ‰ค IsAddUnit.addSubmonoid M) (x : โ†ฅS) :
                  โ†‘((S.leftNegEquiv hS).symm x) = -โ†‘x