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.

noncomputable instance Submonoid.instGroupSubtypeMemSubmonoid {M : Type u_1} [Monoid M] :
Equations
    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
      Instances For

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

        Equations
          Instances For
            theorem Submonoid.unit_mem_leftInv {M : Type u_1} [Monoid M] (S : Submonoid M) (x : Mหฃ) (hx : โ†‘x โˆˆ S) :
            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.

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

                Equations
                  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_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.

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

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

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

                                Equations
                                  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) :
                                    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