Documentation

Mathlib.GroupTheory.GroupExtension.Basic

Basic lemmas about group extensions #

This file gives basic lemmas about group extensions.

For the main definitions, see Mathlib/GroupTheory/GroupExtension/Defs.lean.

noncomputable def GroupExtension.quotientKerRightHomEquivRight {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] (S : GroupExtension N E G) :

The isomorphism E โงธ S.rightHom.ker โ‰ƒ* G induced by S.rightHom

Instances For
    noncomputable def AddGroupExtension.quotientKerRightHomEquivRight {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] (S : AddGroupExtension N E G) :

    The isomorphism E โงธ S.rightHom.ker โ‰ƒ+ G induced by S.rightHom

    Instances For
      noncomputable def GroupExtension.quotientRangeInlEquivRight {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] (S : GroupExtension N E G) :

      The isomorphism E โงธ S.inl.range โ‰ƒ* G induced by S.rightHom

      Instances For
        noncomputable def AddGroupExtension.quotientRangeInlEquivRight {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] (S : AddGroupExtension N E G) :

        The isomorphism E โงธ S.inl.range โ‰ƒ+ G induced by S.rightHom

        Instances For
          noncomputable def GroupExtension.surjInvRightHom {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] (S : GroupExtension N E G) :

          An arbitrarily chosen section

          Instances For
            noncomputable def AddGroupExtension.surjInvRightHom {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] (S : AddGroupExtension N E G) :

            An arbitrarily chosen section

            Instances For
              theorem GroupExtension.Section.mul_inv_mem_range_inl {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] {S : GroupExtension N E G} (ฯƒ ฯƒ' : S.Section) (g : G) :
              ฯƒ g * (ฯƒ' g)โปยน โˆˆ S.inl.range
              theorem AddGroupExtension.Section.add_neg_mem_range_inl {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] {S : AddGroupExtension N E G} (ฯƒ ฯƒ' : S.Section) (g : G) :
              ฯƒ g + -ฯƒ' g โˆˆ S.inl.range
              theorem GroupExtension.Section.inv_mul_mem_range_inl {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] {S : GroupExtension N E G} (ฯƒ ฯƒ' : S.Section) (g : G) :
              (ฯƒ g)โปยน * ฯƒ' g โˆˆ S.inl.range
              theorem AddGroupExtension.Section.neg_add_mem_range_inl {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] {S : AddGroupExtension N E G} (ฯƒ ฯƒ' : S.Section) (g : G) :
              -ฯƒ g + ฯƒ' g โˆˆ S.inl.range
              theorem GroupExtension.Section.exists_eq_inl_mul {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] {S : GroupExtension N E G} (ฯƒ ฯƒ' : S.Section) (g : G) :
              โˆƒ (n : N), ฯƒ g = S.inl n * ฯƒ' g
              theorem AddGroupExtension.Section.exists_eq_inl_add {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] {S : AddGroupExtension N E G} (ฯƒ ฯƒ' : S.Section) (g : G) :
              โˆƒ (n : N), ฯƒ g = S.inl n + ฯƒ' g
              theorem GroupExtension.Section.exists_eq_mul_inl {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] {S : GroupExtension N E G} (ฯƒ ฯƒ' : S.Section) (g : G) :
              โˆƒ (n : N), ฯƒ g = ฯƒ' g * S.inl n
              theorem AddGroupExtension.Section.exists_eq_add_inl {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] {S : AddGroupExtension N E G} (ฯƒ ฯƒ' : S.Section) (g : G) :
              โˆƒ (n : N), ฯƒ g = ฯƒ' g + S.inl n
              theorem GroupExtension.Section.mul_mul_mul_inv_mem_range_inl {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] {S : GroupExtension N E G} (ฯƒ : S.Section) (gโ‚ gโ‚‚ : G) :
              ฯƒ gโ‚ * ฯƒ gโ‚‚ * (ฯƒ (gโ‚ * gโ‚‚))โปยน โˆˆ S.inl.range
              theorem AddGroupExtension.Section.add_add_add_neg_mem_range_inl {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] {S : AddGroupExtension N E G} (ฯƒ : S.Section) (gโ‚ gโ‚‚ : G) :
              ฯƒ gโ‚ + ฯƒ gโ‚‚ + -ฯƒ (gโ‚ + gโ‚‚) โˆˆ S.inl.range
              theorem GroupExtension.Section.mul_inv_mul_mul_mem_range_inl {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] {S : GroupExtension N E G} (ฯƒ : S.Section) (gโ‚ gโ‚‚ : G) :
              (ฯƒ (gโ‚ * gโ‚‚))โปยน * ฯƒ gโ‚ * ฯƒ gโ‚‚ โˆˆ S.inl.range
              theorem AddGroupExtension.Section.add_neg_add_add_mem_range_inl {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] {S : AddGroupExtension N E G} (ฯƒ : S.Section) (gโ‚ gโ‚‚ : G) :
              -ฯƒ (gโ‚ + gโ‚‚) + ฯƒ gโ‚ + ฯƒ gโ‚‚ โˆˆ S.inl.range
              theorem GroupExtension.Section.exists_mul_eq_inl_mul_mul {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] {S : GroupExtension N E G} (ฯƒ : S.Section) (gโ‚ gโ‚‚ : G) :
              โˆƒ (n : N), ฯƒ (gโ‚ * gโ‚‚) = S.inl n * ฯƒ gโ‚ * ฯƒ gโ‚‚
              theorem AddGroupExtension.Section.exists_add_eq_inl_add_add {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] {S : AddGroupExtension N E G} (ฯƒ : S.Section) (gโ‚ gโ‚‚ : G) :
              โˆƒ (n : N), ฯƒ (gโ‚ + gโ‚‚) = S.inl n + ฯƒ gโ‚ + ฯƒ gโ‚‚
              theorem GroupExtension.Section.exists_mul_eq_mul_mul_inl {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] {S : GroupExtension N E G} (ฯƒ : S.Section) (gโ‚ gโ‚‚ : G) :
              โˆƒ (n : N), ฯƒ (gโ‚ * gโ‚‚) = ฯƒ gโ‚ * ฯƒ gโ‚‚ * S.inl n
              theorem AddGroupExtension.Section.exists_add_eq_add_add_inl {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] {S : AddGroupExtension N E G} (ฯƒ : S.Section) (gโ‚ gโ‚‚ : G) :
              โˆƒ (n : N), ฯƒ (gโ‚ + gโ‚‚) = ฯƒ gโ‚ + ฯƒ gโ‚‚ + S.inl n
              def GroupExtension.Section.equivComp {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] {S : GroupExtension N E G} {E' : Type u_4} [Group E'] {S' : GroupExtension N E' G} (ฯƒ : S.Section) (equiv : S.Equiv S') :

              The composition of an isomorphism between equivalent group extensions and a section

              Instances For
                def AddGroupExtension.Section.equivComp {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] {S : AddGroupExtension N E G} {E' : Type u_4} [AddGroup E'] {S' : AddGroupExtension N E' G} (ฯƒ : S.Section) (equiv : S.Equiv S') :

                The composition of an isomorphism between equivalent additive group extensions and a section

                Instances For
                  @[simp]
                  theorem GroupExtension.Section.equivComp_apply {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] {S : GroupExtension N E G} {E' : Type u_4} [Group E'] {S' : GroupExtension N E' G} (ฯƒ : S.Section) (equiv : S.Equiv S') (aโœ : G) :
                  (ฯƒ.equivComp equiv) aโœ = equiv (ฯƒ aโœ)
                  @[simp]
                  theorem AddGroupExtension.Section.equivComp_apply {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] {S : AddGroupExtension N E G} {E' : Type u_4} [AddGroup E'] {S' : AddGroupExtension N E' G} (ฯƒ : S.Section) (equiv : S.Equiv S') (aโœ : G) :
                  (ฯƒ.equivComp equiv) aโœ = equiv (ฯƒ aโœ)
                  noncomputable def GroupExtension.Equiv.ofMonoidHom {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] {S : GroupExtension N E G} {E' : Type u_4} [Group E'] {S' : GroupExtension N E' G} (f : E โ†’* E') (comp_inl : f.comp S.inl = S'.inl) (rightHom_comp : S'.rightHom.comp f = S.rightHom) :
                  S.Equiv S'

                  An equivalence of group extensions from a homomorphism making a commuting diagram. Such a homomorphism is necessarily an isomorphism.

                  Instances For
                    noncomputable def AddGroupExtension.Equiv.ofAddMonoidHom {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] {S : AddGroupExtension N E G} {E' : Type u_4} [AddGroup E'] {S' : AddGroupExtension N E' G} (f : E โ†’+ E') (comp_inl : f.comp S.inl = S'.inl) (rightHom_comp : S'.rightHom.comp f = S.rightHom) :
                    S.Equiv S'

                    An equivalence of additive group extensions from a homomorphism making a commuting diagram. Such a homomorphism is necessarily an isomorphism.

                    Instances For
                      noncomputable def GroupExtension.Splitting.conjAct {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] {S : GroupExtension N E G} (s : S.Splitting) :

                      G acts on N by conjugation.

                      Instances For

                        A split group extension is equivalent to the extension associated to a semidirect product.

                        Instances For
                          noncomputable def GroupExtension.Splitting.semidirectProductMulEquiv {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] {S : GroupExtension N E G} (s : S.Splitting) :

                          The group associated to a split extension is isomorphic to a semidirect product.

                          Instances For
                            theorem GroupExtension.IsConj.refl {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] (S : GroupExtension N E G) (s : S.Splitting) :
                            S.IsConj s s

                            N-conjugacy is reflexive.

                            theorem AddGroupExtension.IsAddConj.refl {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] (S : AddGroupExtension N E G) (s : S.Splitting) :
                            S.IsAddConj s s

                            N-conjugacy is reflexive.

                            theorem GroupExtension.IsConj.symm {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] (S : GroupExtension N E G) {sโ‚ sโ‚‚ : S.Splitting} (h : S.IsConj sโ‚ sโ‚‚) :
                            S.IsConj sโ‚‚ sโ‚

                            N-conjugacy is symmetric.

                            theorem AddGroupExtension.IsAddConj.symm {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] (S : AddGroupExtension N E G) {sโ‚ sโ‚‚ : S.Splitting} (h : S.IsAddConj sโ‚ sโ‚‚) :
                            S.IsAddConj sโ‚‚ sโ‚

                            N-conjugacy is symmetric.

                            theorem GroupExtension.IsConj.trans {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] (S : GroupExtension N E G) {sโ‚ sโ‚‚ sโ‚ƒ : S.Splitting} (hโ‚ : S.IsConj sโ‚ sโ‚‚) (hโ‚‚ : S.IsConj sโ‚‚ sโ‚ƒ) :
                            S.IsConj sโ‚ sโ‚ƒ

                            N-conjugacy is transitive.

                            theorem AddGroupExtension.IsAddConj.trans {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] (S : AddGroupExtension N E G) {sโ‚ sโ‚‚ sโ‚ƒ : S.Splitting} (hโ‚ : S.IsAddConj sโ‚ sโ‚‚) (hโ‚‚ : S.IsAddConj sโ‚‚ sโ‚ƒ) :
                            S.IsAddConj sโ‚ sโ‚ƒ

                            N-conjugacy is transitive.

                            def GroupExtension.IsConj.setoid {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] (S : GroupExtension N E G) :
                            Setoid S.Splitting

                            The setoid of splittings with N-conjugacy

                            Instances For
                              def AddGroupExtension.IsAddConj.setoid {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] (S : AddGroupExtension N E G) :
                              Setoid S.Splitting

                              The setoid of splittings with N-conjugacy

                              Instances For
                                def GroupExtension.ConjClasses {N : Type u_1} {G : Type u_2} [Group N] [Group G] {E : Type u_3} [Group E] (S : GroupExtension N E G) :
                                Type (max u_2 u_3)

                                The N-conjugacy classes of splittings

                                Instances For
                                  def AddGroupExtension.AddConjClasses {N : Type u_1} {G : Type u_2} [AddGroup N] [AddGroup G] {E : Type u_3} [AddGroup E] (S : AddGroupExtension N E G) :
                                  Type (max u_2 u_3)

                                  The N-conjugacy classes of splittings

                                  Instances For
                                    theorem SemidirectProduct.right_splitting {N : Type u_1} {G : Type u_2} [Group N] [Group G] {ฯ† : G โ†’* MulAut N} (s : (toGroupExtension ฯ†).Splitting) (g : G) :
                                    (s g).right = g