Documentation

Mathlib.GroupTheory.GroupExtension.Defs

Group Extensions #

This file defines extensions of multiplicative and additive groups and their associated structures such as splittings and equivalences.

Main definitions #

For multiplicative groups:
      ↗︎ E  ↘
1 → N   ↓    G → 1
      ↘︎ E' ↗︎️

For additive groups:
      ↗︎ E  ↘
0 → N   ↓    G → 0
      ↘︎ E' ↗︎️

TODO #

If N is abelian,

structure AddGroupExtension (N : Type u_1) (E : Type u_2) (G : Type u_3) [AddGroup N] [AddGroup E] [AddGroup G] :
Type (max (max u_1 u_2) u_3)

AddGroupExtension N E G is a short exact sequence of additive groups 0 → N → E → G → 0.

  • inl : N →+ E

    The inclusion homomorphism N →+ E

  • rightHom : E →+ G

    The projection homomorphism E →+ G

  • inl_injective : Function.Injective self.inl

    The inclusion map is injective.

  • range_inl_eq_ker_rightHom : self.inl.range = self.rightHom.ker

    The range of the inclusion map is equal to the kernel of the projection map.

  • rightHom_surjective : Function.Surjective self.rightHom

    The projection map is surjective.

Instances For
    structure GroupExtension (N : Type u_1) (E : Type u_2) (G : Type u_3) [Group N] [Group E] [Group G] :
    Type (max (max u_1 u_2) u_3)

    GroupExtension N E G is a short exact sequence of groups 1 → N → E → G → 1.

    • inl : N →* E

      The inclusion homomorphism N →* E

    • rightHom : E →* G

      The projection homomorphism E →* G

    • inl_injective : Function.Injective self.inl

      The inclusion map is injective.

    • range_inl_eq_ker_rightHom : self.inl.range = self.rightHom.ker

      The range of the inclusion map is equal to the kernel of the projection map.

    • rightHom_surjective : Function.Surjective self.rightHom

      The projection map is surjective.

    Instances For
      structure AddGroupExtension.Equiv {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] (S : AddGroupExtension N E G) {E' : Type u_4} [AddGroup E'] (S' : AddGroupExtension N E' G) extends E ≃+ E' :
      Type (max u_2 u_4)

      AddGroupExtensions are equivalent iff there is an isomorphism making a commuting diagram. Use AddGroupExtension.Equiv.ofMonoidHom in Mathlib/GroupTheory/GroupExtension/Basic.lean to construct an equivalence without providing the inverse map.

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

        Section of an additive group extension is a right inverse to S.rightHom.

        Instances For
          structure AddGroupExtension.Splitting {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] (S : AddGroupExtension N E G) extends G →+ E, S.Section :
          Type (max u_2 u_3)

          Splitting of an additive group extension is a section homomorphism.

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

            The range of the inclusion map is a normal subgroup.

            instance AddGroupExtension.normal_inl_range {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] (S : AddGroupExtension N E G) :

            The range of the inclusion map is a normal additive subgroup.

            @[simp]
            theorem GroupExtension.rightHom_inl {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] (S : GroupExtension N E G) (n : N) :
            S.rightHom (S.inl n) = 1
            @[simp]
            theorem AddGroupExtension.rightHom_inl {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] (S : AddGroupExtension N E G) (n : N) :
            S.rightHom (S.inl n) = 0
            @[simp]
            theorem GroupExtension.rightHom_comp_inl {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] (S : GroupExtension N E G) :
            @[simp]
            theorem AddGroupExtension.rightHom_comp_inl {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] (S : AddGroupExtension N E G) :
            noncomputable def GroupExtension.conjAct {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] (S : GroupExtension N E G) :

            E acts on N by conjugation.

            Equations
            Instances For
              theorem GroupExtension.inl_conjAct_comm {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] (S : GroupExtension N E G) {e : E} {n : N} :
              S.inl ((S.conjAct e) n) = e * S.inl n * e⁻¹

              The inclusion and a conjugation commute.

              structure GroupExtension.Equiv {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] (S : GroupExtension N E G) {E' : Type u_4} [Group E'] (S' : GroupExtension N E' G) extends E ≃* E' :
              Type (max u_2 u_4)

              GroupExtensions are equivalent iff there is an isomorphism making a commuting diagram. Use GroupExtension.Equiv.ofMonoidHom in Mathlib/GroupTheory/GroupExtension/Basic.lean to construct an equivalence without providing the inverse map.

              Instances For
                instance GroupExtension.Equiv.instEquivLike {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} {E' : Type u_4} [Group E'] {S' : GroupExtension N E' G} :
                EquivLike (S.Equiv S') E E'
                Equations
                instance AddGroupExtension.Equiv.instEquivLike {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} {E' : Type u_4} [AddGroup E'] {S' : AddGroupExtension N E' G} :
                EquivLike (S.Equiv S') E E'
                Equations
                • One or more equations did not get rendered due to their size.
                instance GroupExtension.Equiv.instMulEquivClass {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} {E' : Type u_4} [Group E'] {S' : GroupExtension N E' G} :
                MulEquivClass (S.Equiv S') E E'
                instance AddGroupExtension.Equiv.instAddEquivClass {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} {E' : Type u_4} [AddGroup E'] {S' : AddGroupExtension N E' G} :
                AddEquivClass (S.Equiv S') E E'
                @[simp]
                theorem GroupExtension.Equiv.toMulEquiv_eq_coe {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} {E' : Type u_4} [Group E'] {S' : GroupExtension N E' G} (equiv : S.Equiv S') :
                equiv.toMulEquiv = equiv
                @[simp]
                theorem AddGroupExtension.Equiv.toAddEquiv_eq_coe {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} {E' : Type u_4} [AddGroup E'] {S' : AddGroupExtension N E' G} (equiv : S.Equiv S') :
                equiv.toAddEquiv = equiv
                @[simp]
                theorem GroupExtension.Equiv.coe_toMulEquiv {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} {E' : Type u_4} [Group E'] {S' : GroupExtension N E' G} (equiv : S.Equiv S') :
                equiv = equiv
                @[simp]
                theorem AddGroupExtension.Equiv.coe_toAddEquiv {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} {E' : Type u_4} [AddGroup E'] {S' : AddGroupExtension N E' G} (equiv : S.Equiv S') :
                equiv = equiv
                @[simp]
                theorem GroupExtension.Equiv.map_inl {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} {E' : Type u_4} [Group E'] {S' : GroupExtension N E' G} (equiv : S.Equiv S') (n : N) :
                equiv (S.inl n) = S'.inl n
                @[simp]
                theorem AddGroupExtension.Equiv.map_inl {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} {E' : Type u_4} [AddGroup E'] {S' : AddGroupExtension N E' G} (equiv : S.Equiv S') (n : N) :
                equiv (S.inl n) = S'.inl n
                @[simp]
                theorem GroupExtension.Equiv.rightHom_map {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} {E' : Type u_4} [Group E'] {S' : GroupExtension N E' G} (equiv : S.Equiv S') (e : E) :
                S'.rightHom (equiv e) = S.rightHom e
                @[simp]
                theorem AddGroupExtension.Equiv.rightHom_map {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} {E' : Type u_4} [AddGroup E'] {S' : AddGroupExtension N E' G} (equiv : S.Equiv S') (e : E) :
                S'.rightHom (equiv e) = S.rightHom e
                def GroupExtension.Equiv.symm {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} {E' : Type u_4} [Group E'] {S' : GroupExtension N E' G} (equiv : S.Equiv S') :
                S'.Equiv S

                The inverse of an equivalence of group extensions is an equivalence.

                Equations
                • equiv.symm = { toMulEquiv := equiv.symm, inl_comm := , rightHom_comm := }
                Instances For
                  def AddGroupExtension.Equiv.symm {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} {E' : Type u_4} [AddGroup E'] {S' : AddGroupExtension N E' G} (equiv : S.Equiv S') :
                  S'.Equiv S

                  The inverse of an equivalence of additive group extensions is an equivalence.

                  Equations
                  • equiv.symm = { toAddEquiv := equiv.symm, inl_comm := , rightHom_comm := }
                  Instances For
                    def GroupExtension.Equiv.Simps.symm_apply {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} {E' : Type u_4} [Group E'] {S' : GroupExtension N E' G} (equiv : S.Equiv S') :
                    E'E

                    See Note [custom simps projection].

                    Equations
                    Instances For
                      def AddGroupExtension.Equiv.Simps.symm_apply {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} {E' : Type u_4} [AddGroup E'] {S' : AddGroupExtension N E' G} (equiv : S.Equiv S') :
                      E'E

                      See Note [custom simps projection].

                      Equations
                      Instances For
                        @[simp]
                        theorem GroupExtension.Equiv.coe_symm {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} {E' : Type u_4} [Group E'] {S' : GroupExtension N E' G} (equiv : S.Equiv S') :
                        (↑equiv).symm = equiv.symm
                        @[simp]
                        theorem AddGroupExtension.Equiv.coe_symm {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} {E' : Type u_4} [AddGroup E'] {S' : AddGroupExtension N E' G} (equiv : S.Equiv S') :
                        (↑equiv).symm = equiv.symm
                        @[simp]
                        theorem AddGroupExtension.Equiv.symm_symm_apply {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} {E' : Type u_4} [AddGroup E'] {S' : AddGroupExtension N E' G} (equiv : S.Equiv S') (a✝ : E) :
                        equiv.symm.symm a✝ = equiv a✝
                        @[simp]
                        theorem GroupExtension.Equiv.symm_symm_apply {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} {E' : Type u_4} [Group E'] {S' : GroupExtension N E' G} (equiv : S.Equiv S') (a✝ : E) :
                        equiv.symm.symm a✝ = equiv a✝
                        def GroupExtension.Equiv.trans {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} {E' : Type u_4} [Group E'] {S' : GroupExtension N E' G} (equiv : S.Equiv S') {E'' : Type u_5} [Group E''] {S'' : GroupExtension N E'' G} (equiv' : S'.Equiv S'') :
                        S.Equiv S''

                        The composition of monoid isomorphisms associated to equivalences of group extensions gives another equivalence.

                        Equations
                        • equiv.trans equiv' = { toMulEquiv := equiv.trans equiv'.toMulEquiv, inl_comm := , rightHom_comm := }
                        Instances For
                          def AddGroupExtension.Equiv.trans {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} {E' : Type u_4} [AddGroup E'] {S' : AddGroupExtension N E' G} (equiv : S.Equiv S') {E'' : Type u_5} [AddGroup E''] {S'' : AddGroupExtension N E'' G} (equiv' : S'.Equiv S'') :
                          S.Equiv S''

                          The composition of monoid isomorphisms associated to equivalences of additive group extensions gives another equivalence.

                          Equations
                          • equiv.trans equiv' = { toAddEquiv := equiv.trans equiv'.toAddEquiv, inl_comm := , rightHom_comm := }
                          Instances For
                            @[simp]
                            theorem AddGroupExtension.Equiv.trans_apply {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} {E' : Type u_4} [AddGroup E'] {S' : AddGroupExtension N E' G} (equiv : S.Equiv S') {E'' : Type u_5} [AddGroup E''] {S'' : AddGroupExtension N E'' G} (equiv' : S'.Equiv S'') (a✝ : E) :
                            (equiv.trans equiv') a✝ = equiv' (equiv a✝)
                            @[simp]
                            theorem GroupExtension.Equiv.trans_apply {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} {E' : Type u_4} [Group E'] {S' : GroupExtension N E' G} (equiv : S.Equiv S') {E'' : Type u_5} [Group E''] {S'' : GroupExtension N E'' G} (equiv' : S'.Equiv S'') (a✝ : E) :
                            (equiv.trans equiv') a✝ = equiv' (equiv a✝)
                            @[simp]
                            theorem AddGroupExtension.Equiv.trans_symm_apply {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} {E' : Type u_4} [AddGroup E'] {S' : AddGroupExtension N E' G} (equiv : S.Equiv S') {E'' : Type u_5} [AddGroup E''] {S'' : AddGroupExtension N E'' G} (equiv' : S'.Equiv S'') (a✝ : E'') :
                            (equiv.trans equiv').symm a✝ = equiv.symm (equiv'.symm a✝)
                            @[simp]
                            theorem GroupExtension.Equiv.trans_symm_apply {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} {E' : Type u_4} [Group E'] {S' : GroupExtension N E' G} (equiv : S.Equiv S') {E'' : Type u_5} [Group E''] {S'' : GroupExtension N E'' G} (equiv' : S'.Equiv S'') (a✝ : E'') :
                            (equiv.trans equiv').symm a✝ = equiv.symm (equiv'.symm a✝)
                            def GroupExtension.Equiv.refl {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] (S : GroupExtension N E G) :
                            S.Equiv S

                            A group extension is equivalent to itself.

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

                              An additive group extension is equivalent to itself.

                              Equations
                              Instances For
                                @[simp]
                                theorem GroupExtension.Equiv.refl_apply {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] (S : GroupExtension N E G) (a : E) :
                                (refl S) a = a
                                @[simp]
                                theorem AddGroupExtension.Equiv.refl_symm_apply {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] (S : AddGroupExtension N E G) (a : E) :
                                (refl S).symm a = a
                                @[simp]
                                theorem AddGroupExtension.Equiv.refl_apply {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] (S : AddGroupExtension N E G) (a : E) :
                                (refl S) a = a
                                @[simp]
                                theorem GroupExtension.Equiv.refl_symm_apply {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] (S : GroupExtension N E G) (a : E) :
                                (refl S).symm a = a
                                structure GroupExtension.Section {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] (S : GroupExtension N E G) :
                                Type (max u_2 u_3)

                                Section of a group extension is a right inverse to S.rightHom.

                                Instances For
                                  instance GroupExtension.Section.instFunLike {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] (S : GroupExtension N E G) :
                                  Equations
                                  instance AddGroupExtension.Section.instFunLike {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] (S : AddGroupExtension N E G) :
                                  Equations
                                  @[simp]
                                  theorem GroupExtension.Section.coe_mk {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} (σ : GE) (hσ : Function.RightInverse σ S.rightHom) :
                                  { toFun := σ, rightInverse_rightHom := } = σ
                                  @[simp]
                                  theorem AddGroupExtension.Section.coe_mk {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} (σ : GE) (hσ : Function.RightInverse σ S.rightHom) :
                                  { toFun := σ, rightInverse_rightHom := } = σ
                                  @[simp]
                                  theorem GroupExtension.Section.rightHom_section {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} (σ : S.Section) (g : G) :
                                  S.rightHom (σ g) = g
                                  @[simp]
                                  theorem AddGroupExtension.Section.rightHom_section {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} (σ : S.Section) (g : G) :
                                  S.rightHom (σ g) = g
                                  @[simp]
                                  theorem GroupExtension.Section.rightHom_comp_section {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} (σ : S.Section) :
                                  S.rightHom σ = id
                                  @[simp]
                                  theorem AddGroupExtension.Section.rightHom_comp_section {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} (σ : S.Section) :
                                  S.rightHom σ = id
                                  structure GroupExtension.Splitting {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] (S : GroupExtension N E G) extends G →* E, S.Section :
                                  Type (max u_2 u_3)

                                  Splitting of a group extension is a section homomorphism.

                                  Instances For
                                    instance GroupExtension.Splitting.instFunLike {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] (S : GroupExtension N E G) :
                                    Equations
                                    instance AddGroupExtension.Splitting.instFunLike {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] (S : AddGroupExtension N E G) :
                                    Equations
                                    instance GroupExtension.Splitting.instMonoidHomClass {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] (S : GroupExtension N E G) :
                                    @[simp]
                                    theorem GroupExtension.Splitting.coe_mk {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} (s : G →* E) (hs : Function.RightInverse s S.rightHom) :
                                    { toMonoidHom := s, rightInverse_rightHom := hs } = s
                                    @[simp]
                                    theorem AddGroupExtension.Splitting.coe_mk {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} (s : G →+ E) (hs : Function.RightInverse s S.rightHom) :
                                    { toAddMonoidHom := s, rightInverse_rightHom := hs } = s
                                    @[simp]
                                    theorem GroupExtension.Splitting.coe_monoidHom_mk {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} (s : G →* E) (hs : Function.RightInverse s S.rightHom) :
                                    { toMonoidHom := s, rightInverse_rightHom := hs } = s
                                    @[simp]
                                    theorem AddGroupExtension.Splitting.coe_addMonoidHom_mk {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} (s : G →+ E) (hs : Function.RightInverse s S.rightHom) :
                                    { toAddMonoidHom := s, rightInverse_rightHom := hs } = s
                                    @[simp]
                                    theorem GroupExtension.Splitting.rightHom_splitting {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} (s : S.Splitting) (g : G) :
                                    S.rightHom (s g) = g
                                    @[simp]
                                    theorem AddGroupExtension.Splitting.rightHom_splitting {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] {S : AddGroupExtension N E G} (s : S.Splitting) (g : G) :
                                    S.rightHom (s g) = g
                                    @[simp]
                                    theorem GroupExtension.Splitting.rightHom_comp_splitting {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] {S : GroupExtension N E G} (s : S.Splitting) :
                                    @[simp]
                                    def GroupExtension.IsConj {N : Type u_1} {E : Type u_2} {G : Type u_3} [Group N] [Group E] [Group G] (S : GroupExtension N E G) (s s' : S.Splitting) :

                                    A splitting of an extension S is N-conjugate to another iff there exists n : N such that the section homomorphism is a conjugate of the other section homomorphism by S.inl n.

                                    Equations
                                    Instances For
                                      def AddGroupExtension.IsConj {N : Type u_1} {E : Type u_2} {G : Type u_3} [AddGroup N] [AddGroup E] [AddGroup G] (S : AddGroupExtension N E G) (s s' : S.Splitting) :

                                      A splitting of an extension S is N-conjugate to another iff there exists n : N such that the section homomorphism is a conjugate of the other section homomorphism by S.inl n.

                                      Equations
                                      Instances For
                                        def SemidirectProduct.toGroupExtension {N : Type u_1} {G : Type u_3} [Group G] [Group N] (φ : G →* MulAut N) :
                                        GroupExtension N (N ⋊[φ] G) G

                                        The group extension associated to the semidirect product

                                        Equations
                                        Instances For
                                          def SemidirectProduct.inr_splitting {N : Type u_1} {G : Type u_3} [Group G] [Group N] (φ : G →* MulAut N) :

                                          A canonical splitting of the group extension associated to the semidirect product

                                          Equations
                                          Instances For