Documentation

Mathlib.GroupTheory.QuotientGroup

Quotients of groups by normal subgroups #

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

Main definitions #

Main statements #

Tags #

isomorphism theorems, quotient groups

The additive congruence relation generated by a normal additive subgroup.

Instances For
    theorem QuotientAddGroup.con.proof_1 {G : Type u_1} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] (a : G) (b : G) (c : G) (d : G) (hab : Setoid.r a b) (hcd : Setoid.r c d) :
    Setoid.r (a + c) (b + d)
    def QuotientGroup.con {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] :
    Con G

    The congruence relation generated by a normal subgroup.

    Instances For
      instance QuotientGroup.Quotient.group {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] :
      Group (G N)
      theorem QuotientAddGroup.mk'.proof_1 {G : Type u_1} [AddGroup G] (N : AddSubgroup G) :
      ∀ (x x_1 : G), ↑(x + x_1) = ↑(x + x_1)
      def QuotientAddGroup.mk' {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] :
      G →+ G N

      The additive group homomorphism from G to G/N.

      Instances For
        def QuotientGroup.mk' {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] :
        G →* G N

        The group homomorphism from G to G/N.

        Instances For
          @[simp]
          theorem QuotientAddGroup.coe_mk' {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] :
          ↑(QuotientAddGroup.mk' N) = QuotientAddGroup.mk
          @[simp]
          theorem QuotientGroup.coe_mk' {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] :
          ↑(QuotientGroup.mk' N) = QuotientGroup.mk
          @[simp]
          theorem QuotientAddGroup.mk'_apply {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] (x : G) :
          ↑(QuotientAddGroup.mk' N) x = x
          @[simp]
          theorem QuotientGroup.mk'_apply {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] (x : G) :
          ↑(QuotientGroup.mk' N) x = x
          theorem QuotientAddGroup.mk'_eq_mk' {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] {x : G} {y : G} :
          ↑(QuotientAddGroup.mk' N) x = ↑(QuotientAddGroup.mk' N) y z, z N x + z = y
          theorem QuotientGroup.mk'_eq_mk' {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] {x : G} {y : G} :
          ↑(QuotientGroup.mk' N) x = ↑(QuotientGroup.mk' N) y z, z N x * z = y
          theorem QuotientAddGroup.addMonoidHom_ext {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] {M : Type x} [AddMonoid M] ⦃f : G N →+ M ⦃g : G N →+ M (h : AddMonoidHom.comp f (QuotientAddGroup.mk' N) = AddMonoidHom.comp g (QuotientAddGroup.mk' N)) :
          f = g

          Two AddMonoidHoms from an additive quotient group are equal if their compositions with AddQuotientGroup.mk' are equal.

          See note [partially-applied ext lemmas].

          theorem QuotientGroup.monoidHom_ext {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] {M : Type x} [Monoid M] ⦃f : G N →* M ⦃g : G N →* M (h : MonoidHom.comp f (QuotientGroup.mk' N) = MonoidHom.comp g (QuotientGroup.mk' N)) :
          f = g

          Two MonoidHoms from a quotient group are equal if their compositions with QuotientGroup.mk' are equal.

          See note [partially-applied ext lemmas].

          @[simp]
          theorem QuotientAddGroup.eq_zero_iff {G : Type u} [AddGroup G] {N : AddSubgroup G} [nN : AddSubgroup.Normal N] (x : G) :
          x = 0 x N
          @[simp]
          theorem QuotientGroup.eq_one_iff {G : Type u} [Group G] {N : Subgroup G} [nN : Subgroup.Normal N] (x : G) :
          x = 1 x N
          abbrev QuotientAddGroup.ker_le_range_iff.match_1 {H : Type u_1} [AddGroup H] {I : Type u_2} [AddGroup I] (g : H →+ I) (motive : { x // x AddMonoidHom.ker g }Prop) :
          (x : { x // x AddMonoidHom.ker g }) → ((val : H) → (hx : val AddMonoidHom.ker g) → motive { val := val, property := hx }) → motive x
          Instances For
            theorem QuotientAddGroup.eq_iff_sub_mem {G : Type u} [AddGroup G] {N : AddSubgroup G} [nN : AddSubgroup.Normal N] {x : G} {y : G} :
            x = y x - y N
            theorem QuotientGroup.eq_iff_div_mem {G : Type u} [Group G] {N : Subgroup G} [nN : Subgroup.Normal N] {x : G} {y : G} :
            x = y x / y N
            theorem QuotientAddGroup.Quotient.addCommGroup.proof_1 {G : Type u_1} [AddCommGroup G] (N : AddSubgroup G) (a : G N) (b : G N) :
            a + b = b + a
            @[simp]
            theorem QuotientAddGroup.mk_zero {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] :
            0 = 0
            @[simp]
            theorem QuotientGroup.mk_one {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] :
            1 = 1
            @[simp]
            theorem QuotientAddGroup.mk_add {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] (a : G) (b : G) :
            ↑(a + b) = a + b
            @[simp]
            theorem QuotientGroup.mk_mul {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] (a : G) (b : G) :
            ↑(a * b) = a * b
            @[simp]
            theorem QuotientAddGroup.mk_neg {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] (a : G) :
            ↑(-a) = -a
            @[simp]
            theorem QuotientGroup.mk_inv {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] (a : G) :
            a⁻¹ = (a)⁻¹
            @[simp]
            theorem QuotientAddGroup.mk_sub {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] (a : G) (b : G) :
            ↑(a - b) = a - b
            @[simp]
            theorem QuotientGroup.mk_div {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] (a : G) (b : G) :
            ↑(a / b) = a / b
            @[simp]
            theorem QuotientAddGroup.mk_nsmul {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] (a : G) (n : ) :
            ↑(n a) = n a
            @[simp]
            theorem QuotientGroup.mk_pow {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] (a : G) (n : ) :
            ↑(a ^ n) = a ^ n
            @[simp]
            theorem QuotientAddGroup.mk_zsmul {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] (a : G) (n : ) :
            ↑(n a) = n a
            @[simp]
            theorem QuotientGroup.mk_zpow {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] (a : G) (n : ) :
            ↑(a ^ n) = a ^ n
            theorem QuotientAddGroup.lift.proof_1 {G : Type u_1} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] {M : Type u_2} [AddMonoid M] (φ : G →+ M) (HN : N AddMonoidHom.ker φ) (x : G) (y : G) (h : ↑(QuotientAddGroup.con N) x y) :
            ↑(AddCon.ker φ) x y
            def QuotientAddGroup.lift {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] {M : Type x} [AddMonoid M] (φ : G →+ M) (HN : N AddMonoidHom.ker φ) :
            G N →+ M

            An AddGroup homomorphism φ : G →+ M with N ⊆ ker(φ) descends (i.e. lifts) to a group homomorphism G/N →* M.

            Instances For
              def QuotientGroup.lift {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] {M : Type x} [Monoid M] (φ : G →* M) (HN : N MonoidHom.ker φ) :
              G N →* M

              A group homomorphism φ : G →* M with N ⊆ ker(φ) descends (i.e. lifts) to a group homomorphism G/N →* M.

              Instances For
                @[simp]
                theorem QuotientAddGroup.lift_mk {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] {M : Type x} [AddMonoid M] {φ : G →+ M} (HN : N AddMonoidHom.ker φ) (g : G) :
                ↑(QuotientAddGroup.lift N φ HN) g = φ g
                @[simp]
                theorem QuotientGroup.lift_mk {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] {M : Type x} [Monoid M] {φ : G →* M} (HN : N MonoidHom.ker φ) (g : G) :
                ↑(QuotientGroup.lift N φ HN) g = φ g
                @[simp]
                theorem QuotientAddGroup.lift_mk' {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] {M : Type x} [AddMonoid M] {φ : G →+ M} (HN : N AddMonoidHom.ker φ) (g : G) :
                ↑(QuotientAddGroup.lift N φ HN) g = φ g
                @[simp]
                theorem QuotientGroup.lift_mk' {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] {M : Type x} [Monoid M] {φ : G →* M} (HN : N MonoidHom.ker φ) (g : G) :
                ↑(QuotientGroup.lift N φ HN) g = φ g
                @[simp]
                theorem QuotientAddGroup.lift_quot_mk {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] {M : Type x} [AddMonoid M] {φ : G →+ M} (HN : N AddMonoidHom.ker φ) (g : G) :
                ↑(QuotientAddGroup.lift N φ HN) (Quot.mk Setoid.r g) = φ g
                @[simp]
                theorem QuotientGroup.lift_quot_mk {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] {M : Type x} [Monoid M] {φ : G →* M} (HN : N MonoidHom.ker φ) (g : G) :
                ↑(QuotientGroup.lift N φ HN) (Quot.mk Setoid.r g) = φ g
                def QuotientAddGroup.map {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] {H : Type v} [AddGroup H] (M : AddSubgroup H) [AddSubgroup.Normal M] (f : G →+ H) (h : N AddSubgroup.comap f M) :
                G N →+ H M

                An AddGroup homomorphism f : G →+ H induces a map G/N →+ H/M if N ⊆ f⁻¹(M).

                Instances For
                  theorem QuotientAddGroup.map.proof_1 {G : Type u_1} [AddGroup G] (N : AddSubgroup G) {H : Type u_2} [AddGroup H] (M : AddSubgroup H) (f : G →+ H) (h : N AddSubgroup.comap f M) ⦃x : G (hx : x N) :
                  ↑(f x) = 0
                  def QuotientGroup.map {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] {H : Type v} [Group H] (M : Subgroup H) [Subgroup.Normal M] (f : G →* H) (h : N Subgroup.comap f M) :
                  G N →* H M

                  A group homomorphism f : G →* H induces a map G/N →* H/M if N ⊆ f⁻¹(M).

                  Instances For
                    @[simp]
                    theorem QuotientAddGroup.map_mk {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] {H : Type v} [AddGroup H] (M : AddSubgroup H) [AddSubgroup.Normal M] (f : G →+ H) (h : N AddSubgroup.comap f M) (x : G) :
                    ↑(QuotientAddGroup.map N M f h) x = ↑(f x)
                    @[simp]
                    theorem QuotientGroup.map_mk {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] {H : Type v} [Group H] (M : Subgroup H) [Subgroup.Normal M] (f : G →* H) (h : N Subgroup.comap f M) (x : G) :
                    ↑(QuotientGroup.map N M f h) x = ↑(f x)
                    theorem QuotientAddGroup.map_mk' {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] {H : Type v} [AddGroup H] (M : AddSubgroup H) [AddSubgroup.Normal M] (f : G →+ H) (h : N AddSubgroup.comap f M) (x : G) :
                    ↑(QuotientAddGroup.map N M f h) (↑(QuotientAddGroup.mk' N) x) = ↑(f x)
                    theorem QuotientGroup.map_mk' {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] {H : Type v} [Group H] (M : Subgroup H) [Subgroup.Normal M] (f : G →* H) (h : N Subgroup.comap f M) (x : G) :
                    ↑(QuotientGroup.map N M f h) (↑(QuotientGroup.mk' N) x) = ↑(f x)
                    theorem QuotientGroup.map_id_apply {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] (h : optParam (N Subgroup.comap (MonoidHom.id G) N) (_ : Subgroup.comap (MonoidHom.id G) N N)) (x : G N) :
                    ↑(QuotientGroup.map N N (MonoidHom.id G) h) x = x
                    @[simp]
                    theorem QuotientAddGroup.map_map {G : Type u} [AddGroup G] (N : AddSubgroup G) [nN : AddSubgroup.Normal N] {H : Type v} [AddGroup H] {I : Type u_1} [AddGroup I] (M : AddSubgroup H) (O : AddSubgroup I) [AddSubgroup.Normal M] [AddSubgroup.Normal O] (f : G →+ H) (g : H →+ I) (hf : N AddSubgroup.comap f M) (hg : M AddSubgroup.comap g O) (hgf : optParam (N AddSubgroup.comap (AddMonoidHom.comp g f) O) (_ : N AddSubgroup.comap (AddMonoidHom.comp g f) O)) (x : G N) :
                    ↑(QuotientAddGroup.map M O g hg) (↑(QuotientAddGroup.map N M f hf) x) = ↑(QuotientAddGroup.map N O (AddMonoidHom.comp g f) hgf) x
                    @[simp]
                    theorem QuotientGroup.map_map {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] {H : Type v} [Group H] {I : Type u_1} [Group I] (M : Subgroup H) (O : Subgroup I) [Subgroup.Normal M] [Subgroup.Normal O] (f : G →* H) (g : H →* I) (hf : N Subgroup.comap f M) (hg : M Subgroup.comap g O) (hgf : optParam (N Subgroup.comap (MonoidHom.comp g f) O) (_ : N Subgroup.comap (MonoidHom.comp g f) O)) (x : G N) :
                    ↑(QuotientGroup.map M O g hg) (↑(QuotientGroup.map N M f hf) x) = ↑(QuotientGroup.map N O (MonoidHom.comp g f) hgf) x
                    @[simp]
                    theorem QuotientGroup.map_comp_map {G : Type u} [Group G] (N : Subgroup G) [nN : Subgroup.Normal N] {H : Type v} [Group H] {I : Type u_1} [Group I] (M : Subgroup H) (O : Subgroup I) [Subgroup.Normal M] [Subgroup.Normal O] (f : G →* H) (g : H →* I) (hf : N Subgroup.comap f M) (hg : M Subgroup.comap g O) (hgf : optParam (N Subgroup.comap (MonoidHom.comp g f) O) (_ : N Subgroup.comap (MonoidHom.comp g f) O)) :
                    theorem QuotientAddGroup.congr.proof_3 {G : Type u_2} [AddGroup G] {H : Type u_1} [AddGroup H] (G' : AddSubgroup G) (H' : AddSubgroup H) (e : G ≃+ H) (he : AddSubgroup.map (e) G' = H') :
                    theorem QuotientAddGroup.congr.proof_1 {G : Type u_1} [AddGroup G] {H : Type u_2} [AddGroup H] (G' : AddSubgroup G) (H' : AddSubgroup H) (e : G ≃+ H) (he : AddSubgroup.map (e) G' = H') :
                    G' AddSubgroup.comap (e) H'
                    theorem QuotientAddGroup.congr.proof_5 {G : Type u_2} [AddGroup G] {H : Type u_1} [AddGroup H] (G' : AddSubgroup G) (H' : AddSubgroup H) [AddSubgroup.Normal G'] [AddSubgroup.Normal H'] (e : G ≃+ H) (he : AddSubgroup.map (e) G' = H') (x : H H') :
                    ↑(QuotientAddGroup.map G' H' e (_ : G' AddSubgroup.comap (e) H')) (↑(QuotientAddGroup.map H' G' ↑(AddEquiv.symm e) (_ : H' AddSubgroup.comap (↑(AddEquiv.symm e)) G')) x) = x
                    theorem QuotientAddGroup.congr.proof_4 {G : Type u_1} [AddGroup G] {H : Type u_2} [AddGroup H] (G' : AddSubgroup G) (H' : AddSubgroup H) [AddSubgroup.Normal G'] [AddSubgroup.Normal H'] (e : G ≃+ H) (he : AddSubgroup.map (e) G' = H') (x : G G') :
                    ↑(QuotientAddGroup.map H' G' ↑(AddEquiv.symm e) (_ : H' AddSubgroup.comap (↑(AddEquiv.symm e)) G')) (↑(QuotientAddGroup.map G' H' e (_ : G' AddSubgroup.comap (e) H')) x) = x
                    def QuotientAddGroup.congr {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (G' : AddSubgroup G) (H' : AddSubgroup H) [AddSubgroup.Normal G'] [AddSubgroup.Normal H'] (e : G ≃+ H) (he : AddSubgroup.map (e) G' = H') :
                    G G' ≃+ H H'

                    QuotientAddGroup.congr lifts the isomorphism e : G ≃ H to G ⧸ G' ≃ H ⧸ H', given that e maps G to H.

                    Instances For
                      theorem QuotientAddGroup.congr.proof_6 {G : Type u_1} [AddGroup G] {H : Type u_2} [AddGroup H] (G' : AddSubgroup G) (H' : AddSubgroup H) [AddSubgroup.Normal G'] [AddSubgroup.Normal H'] (e : G ≃+ H) (he : AddSubgroup.map (e) G' = H') (x : G G') (y : G G') :
                      ZeroHom.toFun (↑(QuotientAddGroup.map G' H' e (_ : G' AddSubgroup.comap (e) H'))) (x + y) = ZeroHom.toFun (↑(QuotientAddGroup.map G' H' e (_ : G' AddSubgroup.comap (e) H'))) x + ZeroHom.toFun (↑(QuotientAddGroup.map G' H' e (_ : G' AddSubgroup.comap (e) H'))) y
                      theorem QuotientAddGroup.congr.proof_2 {G : Type u_1} [AddGroup G] {H : Type u_2} [AddGroup H] (G' : AddSubgroup G) (H' : AddSubgroup H) (e : G ≃+ H) (he : AddSubgroup.map (e) G' = H') :
                      G' AddSubgroup.comap (e) H'
                      def QuotientGroup.congr {G : Type u} [Group G] {H : Type v} [Group H] (G' : Subgroup G) (H' : Subgroup H) [Subgroup.Normal G'] [Subgroup.Normal H'] (e : G ≃* H) (he : Subgroup.map (e) G' = H') :
                      G G' ≃* H H'

                      QuotientGroup.congr lifts the isomorphism e : G ≃ H to G ⧸ G' ≃ H ⧸ H', given that e maps G to H.

                      Instances For
                        @[simp]
                        theorem QuotientGroup.congr_mk {G : Type u} [Group G] {H : Type v} [Group H] (G' : Subgroup G) (H' : Subgroup H) [Subgroup.Normal G'] [Subgroup.Normal H'] (e : G ≃* H) (he : Subgroup.map (e) G' = H') (x : G) :
                        ↑(QuotientGroup.congr G' H' e he) x = ↑(e x)
                        theorem QuotientGroup.congr_mk' {G : Type u} [Group G] {H : Type v} [Group H] (G' : Subgroup G) (H' : Subgroup H) [Subgroup.Normal G'] [Subgroup.Normal H'] (e : G ≃* H) (he : Subgroup.map (e) G' = H') (x : G) :
                        ↑(QuotientGroup.congr G' H' e he) (↑(QuotientGroup.mk' G') x) = ↑(QuotientGroup.mk' H') (e x)
                        @[simp]
                        theorem QuotientGroup.congr_apply {G : Type u} [Group G] {H : Type v} [Group H] (G' : Subgroup G) (H' : Subgroup H) [Subgroup.Normal G'] [Subgroup.Normal H'] (e : G ≃* H) (he : Subgroup.map (e) G' = H') (x : G) :
                        ↑(QuotientGroup.congr G' H' e he) x = ↑(QuotientGroup.mk' H') (e x)
                        @[simp]
                        theorem QuotientGroup.congr_refl {G : Type u} [Group G] (G' : Subgroup G) [Subgroup.Normal G'] (he : optParam (Subgroup.map (↑(MulEquiv.refl G)) G' = G') (_ : Subgroup.map (MonoidHom.id G) G' = G')) :
                        @[simp]
                        theorem QuotientGroup.congr_symm {G : Type u} [Group G] {H : Type v} [Group H] (G' : Subgroup G) (H' : Subgroup H) [Subgroup.Normal G'] [Subgroup.Normal H'] (e : G ≃* H) (he : Subgroup.map (e) G' = H') :
                        def QuotientAddGroup.kerLift {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) :

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

                        Instances For
                          theorem QuotientAddGroup.kerLift.proof_2 {G : Type u_1} [AddGroup G] {H : Type u_2} [AddGroup H] (φ : G →+ H) (_g : G) :
                          _g AddMonoidHom.ker φφ _g = 0
                          def QuotientGroup.kerLift {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) :

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

                          Instances For
                            @[simp]
                            theorem QuotientAddGroup.kerLift_mk {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) (g : G) :
                            ↑(QuotientAddGroup.kerLift φ) g = φ g
                            @[simp]
                            theorem QuotientGroup.kerLift_mk {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) (g : G) :
                            ↑(QuotientGroup.kerLift φ) g = φ g
                            @[simp]
                            theorem QuotientAddGroup.kerLift_mk' {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) (g : G) :
                            ↑(QuotientAddGroup.kerLift φ) g = φ g
                            @[simp]
                            theorem QuotientGroup.kerLift_mk' {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) (g : G) :
                            ↑(QuotientGroup.kerLift φ) g = φ g
                            theorem QuotientAddGroup.rangeKerLift.proof_2 {G : Type u_1} [AddGroup G] {H : Type u_2} [AddGroup H] (φ : G →+ H) (g : G) (hg : g AddMonoidHom.ker φ) :
                            def QuotientAddGroup.rangeKerLift {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) :

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

                            Instances For
                              def QuotientGroup.rangeKerLift {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) :

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

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

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

                                Instances For
                                  noncomputable def QuotientGroup.quotientKerEquivRange {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) :

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

                                  Instances For
                                    theorem QuotientAddGroup.quotientKerEquivOfRightInverse.proof_2 {G : Type u_1} [AddGroup G] {H : Type u_2} [AddGroup H] (φ : G →+ H) (ψ : HG) (hφ : Function.RightInverse ψ φ) (x : G AddMonoidHom.ker φ) :
                                    def QuotientAddGroup.quotientKerEquivOfRightInverse {G : Type u} [AddGroup G] {H : Type v} [AddGroup H] (φ : G →+ H) (ψ : HG) (hφ : Function.RightInverse ψ φ) :

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

                                    Instances For
                                      @[simp]
                                      @[simp]
                                      theorem QuotientGroup.quotientKerEquivOfRightInverse_symm_apply {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) (ψ : HG) (hφ : Function.RightInverse ψ φ) :
                                      @[simp]
                                      @[simp]
                                      theorem QuotientGroup.quotientKerEquivOfRightInverse_apply {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) (ψ : HG) (hφ : Function.RightInverse ψ φ) (a : G MonoidHom.ker φ) :
                                      def QuotientGroup.quotientKerEquivOfRightInverse {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) (ψ : HG) (hφ : Function.RightInverse ψ φ) :

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

                                      Instances For
                                        theorem QuotientAddGroup.quotientBot.proof_1 {G : Type u_1} [AddGroup G] (_x : G) :
                                        ↑(AddMonoidHom.id G) (id _x) = ↑(AddMonoidHom.id G) (id _x)

                                        The canonical isomorphism G/⊥ ≃+ G.

                                        Instances For
                                          @[simp]
                                          theorem QuotientGroup.quotientBot_symm_apply {G : Type u} [Group G] :
                                          ∀ (a : G), ↑(MulEquiv.symm QuotientGroup.quotientBot) a = a
                                          @[simp]
                                          theorem QuotientAddGroup.quotientBot_apply {G : Type u} [AddGroup G] (a : G AddMonoidHom.ker (AddMonoidHom.id G)) :
                                          QuotientAddGroup.quotientBot a = ↑(QuotientAddGroup.kerLift (AddMonoidHom.id G)) a
                                          @[simp]
                                          theorem QuotientGroup.quotientBot_apply {G : Type u} [Group G] (a : G MonoidHom.ker (MonoidHom.id G)) :
                                          QuotientGroup.quotientBot a = ↑(QuotientGroup.kerLift (MonoidHom.id G)) a
                                          @[simp]
                                          theorem QuotientAddGroup.quotientBot_symm_apply {G : Type u} [AddGroup G] :
                                          ∀ (a : G), ↑(AddEquiv.symm QuotientAddGroup.quotientBot) a = a

                                          The canonical isomorphism G/⊥ ≃* G.

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

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

                                            Instances For
                                              noncomputable def QuotientGroup.quotientKerEquivOfSurjective {G : Type u} [Group G] {H : Type v} [Group H] (φ : G →* H) (hφ : Function.Surjective φ) :

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

                                              For a computable version, see QuotientGroup.quotientKerEquivOfRightInverse.

                                              Instances For

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

                                                Instances For
                                                  def QuotientGroup.quotientMulEquivOfEq {G : Type u} [Group G] {M : Subgroup G} {N : Subgroup G} [Subgroup.Normal M] [Subgroup.Normal N] (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 : Subgroup G} {N : Subgroup G} [Subgroup.Normal M] [Subgroup.Normal N] (h : M = N) (x : G) :

                                                    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 QuotientGroup.quotientMapSubgroupOfOfLe {G : Type u} [Group G] {A' : Subgroup G} {A : Subgroup G} {B' : Subgroup G} {B : Subgroup G} [_hAN : Subgroup.Normal (Subgroup.subgroupOf A' A)] [_hBN : Subgroup.Normal (Subgroup.subgroupOf B' B)] (h' : A' B') (h : A B) :
                                                      { x // x A } Subgroup.subgroupOf A' A →* { x // x B } Subgroup.subgroupOf B' 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]
                                                        @[simp]
                                                        theorem QuotientGroup.quotientMapSubgroupOfOfLe_mk {G : Type u} [Group G] {A' : Subgroup G} {A : Subgroup G} {B' : Subgroup G} {B : Subgroup G} [_hAN : Subgroup.Normal (Subgroup.subgroupOf A' A)] [_hBN : Subgroup.Normal (Subgroup.subgroupOf B' B)] (h' : A' B') (h : A B) (x : { x // x A }) :

                                                        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 on A.

                                                        Instances For
                                                          theorem QuotientAddGroup.equivQuotientAddSubgroupOfOfEq.proof_1 {G : Type u_1} [AddGroup G] {A' : AddSubgroup G} {B' : AddSubgroup G} (h' : A' = B') :
                                                          A' B'
                                                          theorem QuotientAddGroup.equivQuotientAddSubgroupOfOfEq.proof_3 {G : Type u_1} [AddGroup G] {A' : AddSubgroup G} {B' : AddSubgroup G} (h' : A' = B') :
                                                          B' A'
                                                          def QuotientGroup.equivQuotientSubgroupOfOfEq {G : Type u} [Group G] {A' : Subgroup G} {A : Subgroup G} {B' : Subgroup G} {B : Subgroup G} [hAN : Subgroup.Normal (Subgroup.subgroupOf A' A)] [hBN : Subgroup.Normal (Subgroup.subgroupOf B' B)] (h' : A' = B') (h : A = B) :
                                                          { x // x A } Subgroup.subgroupOf A' A ≃* { x // x B } Subgroup.subgroupOf B' 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

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

                                                            Instances For
                                                              abbrev QuotientAddGroup.homQuotientZSMulOfHom.match_1 {A : Type u_1} [AddCommGroup A] (n : ) (g : A) (motive : g AddMonoidHom.range (zsmulAddGroupHom n)Prop) :
                                                              (x : g AddMonoidHom.range (zsmulAddGroupHom n)) → ((h : A) → (hg : n h = g) → motive (_ : y, ↑(zsmulAddGroupHom n) y = g)) → motive x
                                                              Instances For

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

                                                                Instances For

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

                                                                  Instances For

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

                                                                    Instances For

                                                                      The 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
                                                                        noncomputable def QuotientGroup.quotientInfEquivProdNormalQuotient {G : Type u} [Group G] (H : Subgroup G) (N : Subgroup G) [Subgroup.Normal N] :
                                                                        { x // x H } Subgroup.subgroupOf N H ≃* { x // x H N } Subgroup.subgroupOf N (H N)

                                                                        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

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

                                                                          Instances For

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

                                                                            Instances For
                                                                              @[simp]

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

                                                                              Instances For

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

                                                                                Instances For

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

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

                                                                                  noncomputable def AddGroup.fintypeOfKerLeRange {F : Type u} {G : Type u} {H : Type u} [AddGroup F] [AddGroup G] [AddGroup H] [Fintype F] [Fintype H] (f : F →+ G) (g : G →+ H) (h : AddMonoidHom.ker g AddMonoidHom.range f) :

                                                                                  If F and H are finite such that ker(G →+ H) ≤ im(F →+ G), then G is finite.

                                                                                  Instances For
                                                                                    noncomputable def Group.fintypeOfKerLeRange {F : Type u} {G : Type u} {H : Type u} [Group F] [Group G] [Group H] [Fintype F] [Fintype H] (f : F →* G) (g : G →* H) (h : MonoidHom.ker g MonoidHom.range f) :

                                                                                    If F and H are finite such that ker(G →* H) ≤ im(F →* G), then G is finite.

                                                                                    Instances For
                                                                                      noncomputable def AddGroup.fintypeOfKerEqRange {F : Type u} {G : Type u} {H : Type u} [AddGroup F] [AddGroup G] [AddGroup H] [Fintype F] [Fintype H] (f : F →+ G) (g : G →+ H) (h : AddMonoidHom.ker g = AddMonoidHom.range f) :

                                                                                      If F and H are finite such that ker(G →+ H) = im(F →+ G), then G is finite.

                                                                                      Instances For
                                                                                        noncomputable def Group.fintypeOfKerEqRange {F : Type u} {G : Type u} {H : Type u} [Group F] [Group G] [Group H] [Fintype F] [Fintype H] (f : F →* G) (g : G →* H) (h : MonoidHom.ker g = MonoidHom.range f) :

                                                                                        If F and H are finite such that ker(G →* H) = im(F →* G), then G is finite.

                                                                                        Instances For
                                                                                          theorem AddGroup.fintypeOfKerOfCodom.proof_2 {G : Type u_1} {H : Type u_1} [AddGroup G] [AddGroup H] (g : G →+ H) (x : G) (hx : x AddMonoidHom.ker g) :
                                                                                          noncomputable def AddGroup.fintypeOfKerOfCodom {G : Type u} {H : Type u} [AddGroup G] [AddGroup H] [Fintype H] (g : G →+ H) [Fintype { x // x AddMonoidHom.ker g }] :

                                                                                          If ker(G →+ H) and H are finite, then G is finite.

                                                                                          Instances For
                                                                                            noncomputable def Group.fintypeOfKerOfCodom {G : Type u} {H : Type u} [Group G] [Group H] [Fintype H] (g : G →* H) [Fintype { x // x MonoidHom.ker g }] :

                                                                                            If ker(G →* H) and H are finite, then G is finite.

                                                                                            Instances For
                                                                                              theorem AddGroup.fintypeOfDomOfCoker.proof_1 {F : Type u_1} {G : Type u_1} [AddGroup F] [AddGroup G] (f : F →+ G) [AddSubgroup.Normal (AddMonoidHom.range f)] (x : G) :
                                                                                              x = 0x AddMonoidHom.range f

                                                                                              If F and coker(F →+ G) are finite, then G is finite.

                                                                                              Instances For
                                                                                                noncomputable def Group.fintypeOfDomOfCoker {F : Type u} {G : Type u} [Group F] [Group G] [Fintype F] (f : F →* G) [Subgroup.Normal (MonoidHom.range f)] [Fintype (G MonoidHom.range f)] :

                                                                                                If F and coker(F →* G) are finite, then G is finite.

                                                                                                Instances For