Documentation

Mathlib.GroupTheory.QuotientGroup.Basic

Quotients of groups by normal subgroups #

This file develops the basic theory of quotients of groups by normal subgroups. In particular, it proves Noether's first and second isomorphism theorems.

Main statements #

Tags #

isomorphism theorems, quotient groups

theorem QuotientGroup.sound {G : Type u} [Group G] (N : Subgroup G) [nN : N.Normal] (U : Set (G N)) (g : N.op) :
g (mk' N) ⁻¹' U = (mk' N) ⁻¹' U
theorem QuotientAddGroup.sound {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : N.Normal] (U : Set (G N)) (g : N.op) :
g +ᵥ (mk' N) ⁻¹' U = (mk' N) ⁻¹' U
@[simp]
theorem QuotientGroup.mk_prod {G : Type u_1} {ι : Type u_2} [CommGroup G] (N : Subgroup G) (s : Finset ι) {f : ιG} :
(s.prod f) = is, (f i)
@[simp]
theorem QuotientAddGroup.mk_sum {G : Type u_1} {ι : Type u_2} [AddCommGroup G] (N : AddSubgroup G) (s : Finset ι) {f : ιG} :
(s.sum f) = is, (f i)
def QuotientGroup.kerLift {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) :
G φ.ker →* H

The induced map from the quotient by the kernel to the codomain.

Instances For
    def QuotientAddGroup.kerLift {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) :
    G φ.ker →+ H

    The induced map from the quotient by the kernel to the codomain.

    Instances For
      @[simp]
      theorem QuotientGroup.kerLift_mk {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) (g : G) :
      (kerLift φ) g = φ g
      @[simp]
      theorem QuotientAddGroup.kerLift_mk {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) (g : G) :
      (kerLift φ) g = φ g
      @[deprecated QuotientAddGroup.kerLift_mk (since := "2025-10-28")]
      theorem QuotientAddGroup.kerLift_mk' {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) (g : G) :
      (kerLift φ) g = φ g

      Alias of QuotientAddGroup.kerLift_mk.

      @[deprecated QuotientGroup.kerLift_mk (since := "2025-10-28")]
      theorem QuotientGroup.kerLift_mk' {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) (g : G) :
      (kerLift φ) g = φ g

      Alias of QuotientGroup.kerLift_mk.

      theorem QuotientGroup.kerLift_injective {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) :
      Function.Injective (kerLift φ)
      theorem QuotientAddGroup.kerLift_injective {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) :
      Function.Injective (kerLift φ)
      def QuotientGroup.rangeKerLift {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) :
      G φ.ker →* φ.range

      The induced map from the quotient by the kernel to the range.

      Instances For
        def QuotientAddGroup.rangeKerLift {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) :
        G φ.ker →+ φ.range

        The induced map from the quotient by the kernel to the range.

        Instances For
          theorem QuotientGroup.rangeKerLift_injective {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) :
          Function.Injective (rangeKerLift φ)
          theorem QuotientAddGroup.rangeKerLift_injective {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) :
          Function.Injective (rangeKerLift φ)
          theorem QuotientGroup.rangeKerLift_surjective {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) :
          Function.Surjective (rangeKerLift φ)
          theorem QuotientAddGroup.rangeKerLift_surjective {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) :
          Function.Surjective (rangeKerLift φ)
          noncomputable def QuotientGroup.quotientKerEquivRange {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) :
          G φ.ker ≃* φ.range

          Noether's first isomorphism theorem (a definition): the canonical isomorphism between G/(ker φ) to range φ.

          Instances For
            noncomputable def QuotientAddGroup.quotientKerEquivRange {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) :
            G φ.ker ≃+ φ.range

            The first isomorphism theorem (a definition): the canonical isomorphism between G/(ker φ) to range φ.

            Instances For
              def QuotientGroup.quotientKerEquivOfRightInverse {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) (ψ : HG) ( : Function.RightInverse ψ φ) :
              G φ.ker ≃* H

              The canonical isomorphism G/(ker φ) ≃* H induced by a homomorphism φ : G →* H with a right inverse ψ : H → G.

              Instances For
                def QuotientAddGroup.quotientKerEquivOfRightInverse {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) (ψ : HG) ( : Function.RightInverse ψ φ) :
                G φ.ker ≃+ H

                The canonical isomorphism G/(ker φ) ≃+ H induced by a homomorphism φ : G →+ H with a right inverse ψ : H → G.

                Instances For
                  @[simp]
                  theorem QuotientAddGroup.quotientKerEquivOfRightInverse_symm_apply {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) (ψ : HG) ( : Function.RightInverse ψ φ) (a✝ : H) :
                  (quotientKerEquivOfRightInverse φ ψ ).symm a✝ = (mk ψ) a✝
                  @[simp]
                  theorem QuotientGroup.quotientKerEquivOfRightInverse_apply {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) (ψ : HG) ( : Function.RightInverse ψ φ) (a : G φ.ker) :
                  @[simp]
                  theorem QuotientGroup.quotientKerEquivOfRightInverse_symm_apply {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) (ψ : HG) ( : Function.RightInverse ψ φ) (a✝ : H) :
                  (quotientKerEquivOfRightInverse φ ψ ).symm a✝ = (mk ψ) a✝
                  @[simp]
                  theorem QuotientAddGroup.quotientKerEquivOfRightInverse_apply {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) (ψ : HG) ( : Function.RightInverse ψ φ) (a : G φ.ker) :

                  The canonical isomorphism G/⊥ ≃* G.

                  Instances For

                    The canonical isomorphism G/⊥ ≃+ G.

                    Instances For
                      @[simp]
                      theorem QuotientAddGroup.quotientBot_symm_apply {G : Type u} [AddGroup G] (a✝ : G) :
                      quotientBot.symm a✝ = a✝
                      @[simp]
                      theorem QuotientGroup.quotientBot_symm_apply {G : Type u} [Group G] (a✝ : G) :
                      quotientBot.symm a✝ = a✝
                      noncomputable def QuotientGroup.quotientKerEquivOfSurjective {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) ( : Function.Surjective φ) :
                      G φ.ker ≃* H

                      The canonical isomorphism G/(ker φ) ≃* H induced by a surjection φ : G →* H.

                      For a computable version, see QuotientGroup.quotientKerEquivOfRightInverse.

                      Instances For
                        noncomputable def QuotientAddGroup.quotientKerEquivOfSurjective {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) ( : Function.Surjective φ) :
                        G φ.ker ≃+ H

                        The canonical isomorphism G/(ker φ) ≃+ H induced by a surjection φ : G →+ H. For a computable version, see QuotientAddGroup.quotientKerEquivOfRightInverse.

                        Instances For
                          def QuotientGroup.quotientMulEquivOfEq {G : Type u} [Group G] {M N : Subgroup G} [M.Normal] [N.Normal] (h : M = N) :
                          G M ≃* G N

                          If two normal subgroups M and N of G are the same, their quotient groups are isomorphic.

                          Instances For
                            def QuotientAddGroup.quotientAddEquivOfEq {G : Type u} [AddGroup G] {M N : AddSubgroup G} [M.Normal] [N.Normal] (h : M = N) :
                            G M ≃+ G N

                            If two normal subgroups M and N of G are the same, their quotient groups are isomorphic.

                            Instances For
                              @[simp]
                              theorem QuotientGroup.quotientMulEquivOfEq_mk {G : Type u} [Group G] {M N : Subgroup G} [M.Normal] [N.Normal] (h : M = N) (x : G) :
                              (quotientMulEquivOfEq h) x = x
                              @[simp]
                              theorem QuotientAddGroup.quotientAddEquivOfEq_mk {G : Type u} [AddGroup G] {M N : AddSubgroup G} [M.Normal] [N.Normal] (h : M = N) (x : G) :
                              (quotientAddEquivOfEq h) x = x
                              def QuotientGroup.quotientMapSubgroupOfOfLe {G : Type u} [Group G] {A' A B' B : Subgroup G} [_hAN : (A'.subgroupOf A).Normal] [_hBN : (B'.subgroupOf B).Normal] (h' : A' B') (h : A B) :
                              A A'.subgroupOf A →* B B'.subgroupOf B

                              Let A', A, B', B be subgroups of G. If A' ≤ B' and A ≤ B, then there is a map A / (A' ⊓ A) →* B / (B' ⊓ B) induced by the inclusions.

                              Instances For
                                def QuotientAddGroup.quotientMapAddSubgroupOfOfLe {G : Type u} [AddGroup G] {A' A B' B : AddSubgroup G} [_hAN : (A'.addSubgroupOf A).Normal] [_hBN : (B'.addSubgroupOf B).Normal] (h' : A' B') (h : A B) :
                                A A'.addSubgroupOf A →+ B B'.addSubgroupOf B

                                Let A', A, B', B be subgroups of G. If A' ≤ B' and A ≤ B, then there is a map A / (A' ⊓ A) →+ B / (B' ⊓ B) induced by the inclusions.

                                Instances For
                                  @[simp]
                                  theorem QuotientGroup.quotientMapSubgroupOfOfLe_mk {G : Type u} [Group G] {A' A B' B : Subgroup G} [_hAN : (A'.subgroupOf A).Normal] [_hBN : (B'.subgroupOf B).Normal] (h' : A' B') (h : A B) (x : A) :
                                  @[simp]
                                  theorem QuotientAddGroup.quotientMapAddSubgroupOfOfLe_mk {G : Type u} [AddGroup G] {A' A B' B : AddSubgroup G} [_hAN : (A'.addSubgroupOf A).Normal] [_hBN : (B'.addSubgroupOf B).Normal] (h' : A' B') (h : A B) (x : A) :
                                  def QuotientGroup.equivQuotientSubgroupOfOfEq {G : Type u} [Group G] {A' A B' B : Subgroup G} [hAN : (A'.subgroupOf A).Normal] [hBN : (B'.subgroupOf B).Normal] (h' : A' = B') (h : A = B) :
                                  A A'.subgroupOf A ≃* B B'.subgroupOf B

                                  Let A', A, B', B be subgroups of G. If A' = B' and A = B, then the quotients A / (A' ⊓ A) and B / (B' ⊓ B) are isomorphic.

                                  Applying this equiv is nicer than rewriting along the equalities, since the type of (A'.subgroupOf A : Subgroup A) depends on A.

                                  Instances For
                                    def QuotientAddGroup.equivQuotientAddSubgroupOfOfEq {G : Type u} [AddGroup G] {A' A B' B : AddSubgroup G} [hAN : (A'.addSubgroupOf A).Normal] [hBN : (B'.addSubgroupOf B).Normal] (h' : A' = B') (h : A = B) :
                                    A A'.addSubgroupOf A ≃+ B B'.addSubgroupOf B

                                    Let A', A, B', B be subgroups of G. If A' = B' and A = B, then the quotients A / (A' ⊓ A) and B / (B' ⊓ B) are isomorphic. Applying this equiv is nicer than rewriting along the equalities, since the type of (A'.addSubgroupOf A : AddSubgroup A) depends on A.

                                    Instances For

                                      The map of quotients by powers of an integer induced by a group homomorphism.

                                      Instances For

                                        The map of quotients by multiples of an integer induced by an additive group homomorphism.

                                        Instances For
                                          @[simp]
                                          theorem QuotientGroup.homQuotientZPowOfHom_comp_of_rightInverse {A B : Type u} [CommGroup A] [CommGroup B] (f : A →* B) (g : B →* A) (n : ) (i : Function.RightInverse g f) :
                                          @[simp]
                                          theorem QuotientAddGroup.homQuotientZSMulOfHom_comp_of_rightInverse {A B : Type u} [AddCommGroup A] [AddCommGroup B] (f : A →+ B) (g : B →+ A) (n : ) (i : Function.RightInverse g f) :

                                          The equivalence of quotients by powers of an integer induced by a group isomorphism.

                                          Instances For

                                            The equivalence of quotients by multiples of an integer induced by an additive group isomorphism.

                                            Instances For
                                              noncomputable def QuotientGroup.quotientInfEquivProdNormalizerQuotient {G : Type u} [Group G] (H N : Subgroup G) (hLE : H Subgroup.normalizer N) :
                                              H N.subgroupOf H ≃* (HN) N.subgroupOf (HN)

                                              Noether's second isomorphism theorem: given a subgroup N of G and a subgroup H of the normalizer of N in G, defines an isomorphism between H/(H ∩ N) and (HN)/N.

                                              Instances For
                                                noncomputable def QuotientAddGroup.quotientInfEquivSumNormalizerQuotient {G : Type u} [AddGroup G] (H N : AddSubgroup G) (hLE : H AddSubgroup.normalizer N) :
                                                H N.addSubgroupOf H ≃+ (HN) N.addSubgroupOf (HN)

                                                Noether's second isomorphism theorem: given a subgroup N of G and a subgroup H of the normalizer of N in G, defines an isomorphism between H/(H ∩ N) and (H + N)/N

                                                Instances For
                                                  noncomputable def QuotientGroup.quotientInfEquivProdNormalQuotient {G : Type u} [Group G] (H N : Subgroup G) [hN : N.Normal] :
                                                  H N.subgroupOf H ≃* (HN) N.subgroupOf (HN)

                                                  Noether's second isomorphism theorem: given two subgroups H and N of a group G, where N is normal, defines an isomorphism between H/(H ∩ N) and (HN)/N.

                                                  Instances For
                                                    noncomputable def QuotientAddGroup.quotientInfEquivSumNormalQuotient {G : Type u} [AddGroup G] (H N : AddSubgroup G) [hN : N.Normal] :
                                                    H N.addSubgroupOf H ≃+ (HN) N.addSubgroupOf (HN)

                                                    Noether's second isomorphism theorem: given two subgroups H and N of a group G, where N is normal, defines an isomorphism between H/(H ∩ N) and (H + N)/N.

                                                    Instances For
                                                      instance QuotientGroup.map_normal {G : Type u} [Group G] (N : Subgroup G) [nN : N.Normal] (M : Subgroup G) [nM : M.Normal] :
                                                      def QuotientGroup.quotientQuotientEquivQuotientAux {G : Type u} [Group G] (N : Subgroup G) [nN : N.Normal] (M : Subgroup G) [nM : M.Normal] (h : N M) :
                                                      (G N) Subgroup.map (mk' N) M →* G M

                                                      The map from the third isomorphism theorem for groups: (G / N) / (M / N) → G / M.

                                                      Instances For
                                                        def QuotientAddGroup.quotientQuotientEquivQuotientAux {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : N.Normal] (M : AddSubgroup G) [nM : M.Normal] (h : N M) :
                                                        (G N) AddSubgroup.map (mk' N) M →+ G M

                                                        The map from the third isomorphism theorem for additive groups: (A / N) / (M / N) → A / M.

                                                        Instances For
                                                          @[simp]
                                                          theorem QuotientGroup.quotientQuotientEquivQuotientAux_mk {G : Type u} [Group G] (N : Subgroup G) [nN : N.Normal] (M : Subgroup G) [nM : M.Normal] (h : N M) (x : G N) :
                                                          @[simp]
                                                          theorem QuotientAddGroup.quotientQuotientEquivQuotientAux_mk {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : N.Normal] (M : AddSubgroup G) [nM : M.Normal] (h : N M) (x : G N) :
                                                          theorem QuotientGroup.quotientQuotientEquivQuotientAux_mk_mk {G : Type u} [Group G] (N : Subgroup G) [nN : N.Normal] (M : Subgroup G) [nM : M.Normal] (h : N M) (x : G) :
                                                          (quotientQuotientEquivQuotientAux N M h) x = x
                                                          theorem QuotientAddGroup.quotientQuotientEquivQuotientAux_mk_mk {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : N.Normal] (M : AddSubgroup G) [nM : M.Normal] (h : N M) (x : G) :
                                                          (quotientQuotientEquivQuotientAux N M h) x = x
                                                          def QuotientGroup.quotientQuotientEquivQuotient {G : Type u} [Group G] (N : Subgroup G) [nN : N.Normal] (M : Subgroup G) [nM : M.Normal] (h : N M) :
                                                          (G N) Subgroup.map (mk' N) M ≃* G M

                                                          Noether's third isomorphism theorem for groups: (G / N) / (M / N) ≃* G / M.

                                                          Instances For
                                                            def QuotientAddGroup.quotientQuotientEquivQuotient {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : N.Normal] (M : AddSubgroup G) [nM : M.Normal] (h : N M) :
                                                            (G N) AddSubgroup.map (mk' N) M ≃+ G M

                                                            Noether's third isomorphism theorem for additive groups: (A / N) / (M / N) ≃+ A / M.

                                                            Instances For
                                                              @[simp]
                                                              theorem QuotientGroup.comap_map_mk' {G : Type u} [Group G] (N H : Subgroup G) [N.Normal] :
                                                              Subgroup.comap (mk' N) (Subgroup.map (mk' N) H) = NH
                                                              def QuotientGroup.comapMk'OrderIso {G : Type u} [Group G] (N : Subgroup G) [hn : N.Normal] :
                                                              Subgroup (G N) ≃o { H : Subgroup G // N H }

                                                              The correspondence theorem, or lattice theorem, or fourth isomorphism theorem for multiplicative groups

                                                              Instances For
                                                                def QuotientAddGroup.comapMk'OrderIso {G : Type u} [AddGroup G] (N : AddSubgroup G) [hn : N.Normal] :
                                                                AddSubgroup (G N) ≃o { H : AddSubgroup G // N H }

                                                                The correspondence theorem, or lattice theorem, or fourth isomorphism theorem for additive groups

                                                                Instances For
                                                                  theorem QuotientGroup.subgroup_eq_top_of_subsingleton {G : Type u} [Group G] (H : Subgroup G) (h : Subsingleton (G H)) :
                                                                  H =

                                                                  If the quotient by a subgroup gives a singleton then the subgroup is the whole group.

                                                                  theorem QuotientAddGroup.addSubgroup_eq_top_of_subsingleton {G : Type u} [AddGroup G] (H : AddSubgroup G) (h : Subsingleton (G H)) :
                                                                  H =

                                                                  If the quotient by an additive subgroup gives a singleton then the additive subgroup is the whole additive group.

                                                                  theorem QuotientGroup.comap_comap_center {G : Type u} [Group G] {H₁ : Subgroup G} [H₁.Normal] {H₂ : Subgroup (G H₁)} [H₂.Normal] :
                                                                  Subgroup.comap (mk' H₁) (Subgroup.comap (mk' H₂) (Subgroup.center ((G H₁) H₂))) = Subgroup.comap (mk' (Subgroup.comap (mk' H₁) H₂)) (Subgroup.center (G Subgroup.comap (mk' H₁) H₂))
                                                                  def MonoidHom.restrictHomKerEquiv {G : Type u} [Group G] (A : Type u_1) [CommGroup A] (H : Subgroup G) [H.Normal] :
                                                                  (restrictHom H A).ker ≃* (G H →* A)

                                                                  The MulEquiv between the kernel of the restriction map to a normal subgroup H of homomorphisms of type G →* A and the group of homomorphisms G ⧸ H →* A.

                                                                  Instances For
                                                                    def AddMonoidHom.restrictHomKerEquiv {G : Type u} [AddGroup G] (A : Type u_1) [AddCommGroup A] (H : AddSubgroup G) [H.Normal] :
                                                                    (restrictHom H A).ker ≃+ (G H →+ A)

                                                                    The AddEquiv between the kernel of the restriction map to a normal subgroup H of homomorphisms of type G →+ A and the group of homomorphisms G ⧸ H →+ A.

                                                                    Instances For
                                                                      @[simp]
                                                                      theorem MonoidHom.restrictHomKerEquiv_apply_coe {G : Type u} [Group G] (A : Type u_1) [CommGroup A] (H : Subgroup G) [H.Normal] (f : (restrictHom H A).ker) (g : G) :
                                                                      ((restrictHomKerEquiv A H) f) g = f g
                                                                      @[simp]
                                                                      theorem MonoidHom.restrictHomKerEquiv_symm_coe_apply {G : Type u} [Group G] (A : Type u_1) [CommGroup A] (H : Subgroup G) [H.Normal] (f : G H →* A) (g : G) :
                                                                      ((restrictHomKerEquiv A H).symm f) g = f g
                                                                      @[simp]
                                                                      theorem QuotientAddGroup.mk_nat_mul {R : Type u_1} [NonAssocRing R] (N : AddSubgroup R) [N.Normal] (n : ) (a : R) :
                                                                      (n * a) = n a
                                                                      @[simp]
                                                                      theorem QuotientAddGroup.mk_int_mul {R : Type u_1} [NonAssocRing R] (N : AddSubgroup R) [N.Normal] (n : ) (a : R) :
                                                                      (n * a) = n a
                                                                      noncomputable def QuotientGroup.mulEquivPiModRangePowMonoidHom {ι : Type u_1} (A : ιType u_2) [(i : ι) → CommGroup (A i)] (n : ) :
                                                                      ((i : ι) → A i) (powMonoidHom n).range ≃* ((i : ι) → A i (powMonoidHom n).range)

                                                                      The isomorphism between the quotient of a product by the image of the nth power map and the product of the quotients by the images of the nth power maps on the factors.

                                                                      Instances For
                                                                        noncomputable def QuotientAddGroup.addEquivPiModRangeNSMulAddMonoidHom {ι : Type u_1} (A : ιType u_2) [(i : ι) → AddCommGroup (A i)] (n : ) :
                                                                        ((i : ι) → A i) (nsmulAddMonoidHom n).range ≃+ ((i : ι) → A i (nsmulAddMonoidHom n).range)

                                                                        The isomorphism between the quotient of a product by the image of the multiplication-by-n map and the product of the quotients by the images of the multiplication-by-n maps on the factors.

                                                                        Instances For
                                                                          @[simp]
                                                                          theorem QuotientGroup.mulEquivPiModRangePowMonoidHom_apply {ι : Type u_1} (A : ιType u_2) [(i : ι) → CommGroup (A i)] (n : ) (x : (i : ι) → A i) :
                                                                          (mulEquivPiModRangePowMonoidHom A n) x = fun (i : ι) => (x i)
                                                                          @[simp]
                                                                          theorem QuotientAddGroup.addEquivPiModRangeNSMulAddMonoidHom_apply {ι : Type u_1} (A : ιType u_2) [(i : ι) → AddCommGroup (A i)] (n : ) (x : (i : ι) → A i) :
                                                                          (addEquivPiModRangeNSMulAddMonoidHom A n) x = fun (i : ι) => (x i)