Documentation

Mathlib.Algebra.Group.Subgroup.Basic

Basic results on subgroups #

We prove basic results on the definitions of subgroups. The bundled subgroups use bundled monoid homomorphisms.

Special thanks goes to Amelia Livingston and Yury Kudryashov for their help and inspiration.

Main definitions #

Notation used here:

Definitions in the file:

Implementation notes #

Subgroup inclusion is denoted rather than , although is defined as membership of a subgroup's underlying set.

Tags #

subgroup, subgroups

theorem div_mem_comm_iff {G : Type u_1} [Group G] {S : Type u_6} {H : S} [SetLike S G] [SubgroupClass S G] {a b : G} :
a / b H b / a H
theorem sub_mem_comm_iff {G : Type u_1} [AddGroup G] {S : Type u_6} {H : S} [SetLike S G] [AddSubgroupClass S G] {a b : G} :
a - b H b - a H
theorem Subgroup.div_mem_comm_iff {G : Type u_1} [Group G] (H : Subgroup G) {a b : G} :
a / b H b / a H
theorem AddSubgroup.sub_mem_comm_iff {G : Type u_1} [AddGroup G] (H : AddSubgroup G) {a b : G} :
a - b H b - a H
def Subgroup.prod {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) (K : Subgroup N) :
Subgroup (G × N)

Given Subgroups H, K of groups G, N respectively, H × K as a subgroup of G × N.

Equations
Instances For
    def AddSubgroup.prod {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) (K : AddSubgroup N) :

    Given AddSubgroups H, K of AddGroups A, B respectively, H × K as an AddSubgroup of A × B.

    Equations
    Instances For
      theorem Subgroup.coe_prod {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) (K : Subgroup N) :
      (H.prod K) = H ×ˢ K
      theorem AddSubgroup.coe_prod {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) (K : AddSubgroup N) :
      (H.prod K) = H ×ˢ K
      theorem Subgroup.mem_prod {G : Type u_1} [Group G] {N : Type u_5} [Group N] {H : Subgroup G} {K : Subgroup N} {p : G × N} :
      p H.prod K p.1 H p.2 K
      theorem AddSubgroup.mem_prod {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {H : AddSubgroup G} {K : AddSubgroup N} {p : G × N} :
      p H.prod K p.1 H p.2 K
      theorem Subgroup.prod_mono {G : Type u_1} [Group G] {N : Type u_5} [Group N] :
      Relator.LiftFun (fun (x1 x2 : Subgroup G) => x1 x2) (Relator.LiftFun (fun (x1 x2 : Subgroup N) => x1 x2) fun (x1 x2 : Subgroup (G × N)) => x1 x2) prod prod
      theorem AddSubgroup.prod_mono {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] :
      Relator.LiftFun (fun (x1 x2 : AddSubgroup G) => x1 x2) (Relator.LiftFun (fun (x1 x2 : AddSubgroup N) => x1 x2) fun (x1 x2 : AddSubgroup (G × N)) => x1 x2) prod prod
      theorem Subgroup.prod_mono_right {G : Type u_1} [Group G] {N : Type u_5} [Group N] (K : Subgroup G) :
      Monotone fun (t : Subgroup N) => K.prod t
      theorem AddSubgroup.prod_mono_right {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (K : AddSubgroup G) :
      Monotone fun (t : AddSubgroup N) => K.prod t
      theorem Subgroup.prod_mono_left {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup N) :
      Monotone fun (K : Subgroup G) => K.prod H
      theorem AddSubgroup.prod_mono_left {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup N) :
      Monotone fun (K : AddSubgroup G) => K.prod H
      theorem Subgroup.prod_top {G : Type u_1} [Group G] {N : Type u_5} [Group N] (K : Subgroup G) :
      theorem AddSubgroup.prod_top {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (K : AddSubgroup G) :
      theorem Subgroup.top_prod {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup N) :
      theorem AddSubgroup.top_prod {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup N) :
      @[simp]
      theorem Subgroup.top_prod_top {G : Type u_1} [Group G] {N : Type u_5} [Group N] :
      @[simp]
      theorem AddSubgroup.top_prod_top {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] :
      @[simp]
      theorem Subgroup.bot_prod_bot {G : Type u_1} [Group G] {N : Type u_5} [Group N] :
      @[simp]
      theorem AddSubgroup.bot_prod_bot {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] :
      theorem Subgroup.le_prod_iff {G : Type u_1} [Group G] {N : Type u_5} [Group N] {H : Subgroup G} {K : Subgroup N} {J : Subgroup (G × N)} :
      J H.prod K map (MonoidHom.fst G N) J H map (MonoidHom.snd G N) J K
      theorem AddSubgroup.le_prod_iff {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {H : AddSubgroup G} {K : AddSubgroup N} {J : AddSubgroup (G × N)} :
      theorem Subgroup.prod_le_iff {G : Type u_1} [Group G] {N : Type u_5} [Group N] {H : Subgroup G} {K : Subgroup N} {J : Subgroup (G × N)} :
      H.prod K J map (MonoidHom.inl G N) H J map (MonoidHom.inr G N) K J
      theorem AddSubgroup.prod_le_iff {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {H : AddSubgroup G} {K : AddSubgroup N} {J : AddSubgroup (G × N)} :
      @[simp]
      theorem Subgroup.prod_eq_bot_iff {G : Type u_1} [Group G] {N : Type u_5} [Group N] {H : Subgroup G} {K : Subgroup N} :
      H.prod K = H = K =
      @[simp]
      theorem AddSubgroup.prod_eq_bot_iff {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {H : AddSubgroup G} {K : AddSubgroup N} :
      H.prod K = H = K =
      theorem Subgroup.closure_prod {G : Type u_1} [Group G] {N : Type u_5} [Group N] {s : Set G} {t : Set N} (hs : 1 s) (ht : 1 t) :
      theorem AddSubgroup.closure_prod {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {s : Set G} {t : Set N} (hs : 0 s) (ht : 0 t) :
      def Subgroup.prodEquiv {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) (K : Subgroup N) :
      (H.prod K) ≃* H × K

      Product of subgroups is isomorphic to their product as groups.

      Equations
      Instances For
        def AddSubgroup.prodEquiv {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) (K : AddSubgroup N) :
        (H.prod K) ≃+ H × K

        Product of additive subgroups is isomorphic to their product as additive groups

        Equations
        Instances For
          def Subgroup.pi {η : Type u_7} {f : ηType u_8} [(i : η) → Group (f i)] (I : Set η) (H : (i : η) → Subgroup (f i)) :
          Subgroup ((i : η) → f i)

          A version of Set.pi for subgroups. Given an index set I and a family of submodules s : Π i, Subgroup f i, pi I s is the subgroup of dependent functions f : Π i, f i such that f i belongs to pi I s whenever i ∈ I.

          Equations
          Instances For
            def AddSubgroup.pi {η : Type u_7} {f : ηType u_8} [(i : η) → AddGroup (f i)] (I : Set η) (H : (i : η) → AddSubgroup (f i)) :
            AddSubgroup ((i : η) → f i)

            A version of Set.pi for AddSubgroups. Given an index set I and a family of submodules s : Π i, AddSubgroup f i, pi I s is the AddSubgroup of dependent functions f : Π i, f i such that f i belongs to pi I s whenever i ∈ I.

            Equations
            Instances For
              theorem Subgroup.coe_pi {η : Type u_7} {f : ηType u_8} [(i : η) → Group (f i)] (I : Set η) (H : (i : η) → Subgroup (f i)) :
              (pi I H) = I.pi fun (i : η) => (H i)
              theorem AddSubgroup.coe_pi {η : Type u_7} {f : ηType u_8} [(i : η) → AddGroup (f i)] (I : Set η) (H : (i : η) → AddSubgroup (f i)) :
              (pi I H) = I.pi fun (i : η) => (H i)
              theorem Subgroup.mem_pi {η : Type u_7} {f : ηType u_8} [(i : η) → Group (f i)] (I : Set η) {H : (i : η) → Subgroup (f i)} {p : (i : η) → f i} :
              p pi I H iI, p i H i
              theorem AddSubgroup.mem_pi {η : Type u_7} {f : ηType u_8} [(i : η) → AddGroup (f i)] (I : Set η) {H : (i : η) → AddSubgroup (f i)} {p : (i : η) → f i} :
              p pi I H iI, p i H i
              theorem Subgroup.pi_top {η : Type u_7} {f : ηType u_8} [(i : η) → Group (f i)] (I : Set η) :
              (pi I fun (i : η) => ) =
              theorem AddSubgroup.pi_top {η : Type u_7} {f : ηType u_8} [(i : η) → AddGroup (f i)] (I : Set η) :
              (pi I fun (i : η) => ) =
              theorem Subgroup.pi_empty {η : Type u_7} {f : ηType u_8} [(i : η) → Group (f i)] (H : (i : η) → Subgroup (f i)) :
              theorem AddSubgroup.pi_empty {η : Type u_7} {f : ηType u_8} [(i : η) → AddGroup (f i)] (H : (i : η) → AddSubgroup (f i)) :
              theorem Subgroup.pi_bot {η : Type u_7} {f : ηType u_8} [(i : η) → Group (f i)] :
              (pi Set.univ fun (i : η) => ) =
              theorem AddSubgroup.pi_bot {η : Type u_7} {f : ηType u_8} [(i : η) → AddGroup (f i)] :
              (pi Set.univ fun (i : η) => ) =
              theorem Subgroup.le_pi_iff {η : Type u_7} {f : ηType u_8} [(i : η) → Group (f i)] {I : Set η} {H : (i : η) → Subgroup (f i)} {J : Subgroup ((i : η) → f i)} :
              J pi I H iI, J comap (Pi.evalMonoidHom f i) (H i)
              theorem AddSubgroup.le_pi_iff {η : Type u_7} {f : ηType u_8} [(i : η) → AddGroup (f i)] {I : Set η} {H : (i : η) → AddSubgroup (f i)} {J : AddSubgroup ((i : η) → f i)} :
              J pi I H iI, J comap (Pi.evalAddMonoidHom f i) (H i)
              @[simp]
              theorem Subgroup.mulSingle_mem_pi {η : Type u_7} {f : ηType u_8} [(i : η) → Group (f i)] [DecidableEq η] {I : Set η} {H : (i : η) → Subgroup (f i)} (i : η) (x : f i) :
              Pi.mulSingle i x pi I H i Ix H i
              @[simp]
              theorem AddSubgroup.single_mem_pi {η : Type u_7} {f : ηType u_8} [(i : η) → AddGroup (f i)] [DecidableEq η] {I : Set η} {H : (i : η) → AddSubgroup (f i)} (i : η) (x : f i) :
              Pi.single i x pi I H i Ix H i
              theorem Subgroup.pi_eq_bot_iff {η : Type u_7} {f : ηType u_8} [(i : η) → Group (f i)] (H : (i : η) → Subgroup (f i)) :
              pi Set.univ H = ∀ (i : η), H i =
              theorem AddSubgroup.pi_eq_bot_iff {η : Type u_7} {f : ηType u_8} [(i : η) → AddGroup (f i)] (H : (i : η) → AddSubgroup (f i)) :
              pi Set.univ H = ∀ (i : η), H i =
              class Subgroup.Characteristic {G : Type u_1} [Group G] (H : Subgroup G) :

              A subgroup is characteristic if it is fixed by all automorphisms. Several equivalent conditions are provided by lemmas of the form Characteristic.iff...

              Instances
                @[instance 100]
                instance Subgroup.normal_of_characteristic {G : Type u_1} [Group G] (H : Subgroup G) [h : H.Characteristic] :

                An AddSubgroup is characteristic if it is fixed by all automorphisms. Several equivalent conditions are provided by lemmas of the form Characteristic.iff...

                Instances
                  @[instance 100]
                  @[simp]
                  instance Subgroup.normal_top {G : Type u_1} [Group G] :

                  The whole group G is normal.

                  @[simp]

                  The whole group G is normal.

                  @[simp]
                  instance Subgroup.normal_bot {G : Type u_1} [Group G] :

                  The trivial subgroup {1} is normal.

                  @[simp]

                  The trivial subgroup {0} is normal.

                  theorem Subgroup.characteristic_iff_comap_eq {G : Type u_1} [Group G] {H : Subgroup G} :
                  H.Characteristic ∀ (ϕ : G ≃* G), comap ϕ.toMonoidHom H = H
                  theorem Subgroup.characteristic_iff_map_eq {G : Type u_1} [Group G] {H : Subgroup G} :
                  H.Characteristic ∀ (ϕ : G ≃* G), map ϕ.toMonoidHom H = H
                  theorem Subgroup.characteristic_iff_map_le {G : Type u_1} [Group G] {H : Subgroup G} :
                  H.Characteristic ∀ (ϕ : G ≃* G), map ϕ.toMonoidHom H H
                  theorem Subgroup.characteristic_iff_le_map {G : Type u_1} [Group G] {H : Subgroup G} :
                  H.Characteristic ∀ (ϕ : G ≃* G), H map ϕ.toMonoidHom H
                  theorem Subgroup.normalizer_eq_top {G : Type u_1} [Group G] (H : Subgroup G) [h : H.Normal] :
                  theorem Subgroup.le_normalizer_comap {G : Type u_1} [Group G] {H : Subgroup G} {N : Type u_5} [Group N] (f : N →* G) :
                  comap f (normalizer H) normalizer (comap f H)

                  The preimage of the normalizer is contained in the normalizer of the preimage.

                  theorem AddSubgroup.le_normalizer_comap {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {N : Type u_5} [AddGroup N] (f : N →+ G) :
                  comap f (normalizer H) normalizer (comap f H)

                  The preimage of the normalizer is contained in the normalizer of the preimage.

                  theorem Subgroup.le_normalizer_map {G : Type u_1} [Group G] {H : Subgroup G} {N : Type u_5} [Group N] (f : G →* N) :
                  map f (normalizer H) normalizer (map f H)

                  The image of the normalizer is contained in the normalizer of the image.

                  theorem AddSubgroup.le_normalizer_map {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {N : Type u_5} [AddGroup N] (f : G →+ N) :
                  map f (normalizer H) normalizer (map f H)

                  The image of the normalizer is contained in the normalizer of the image.

                  theorem Subgroup.comap_normalizer_eq_of_le_range {G : Type u_1} [Group G] {H : Subgroup G} {N : Type u_5} [Group N] {f : N →* G} (h : H f.range) :
                  comap f (normalizer H) = normalizer (comap f H)
                  theorem AddSubgroup.comap_normalizer_eq_of_le_range {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {N : Type u_5} [AddGroup N] {f : N →+ G} (h : H f.range) :
                  comap f (normalizer H) = normalizer (comap f H)
                  theorem Subgroup.subgroupOf_normalizer_eq {G : Type u_1} [Group G] {H N : Subgroup G} (h : H N) :
                  @[instance 100]
                  instance Subgroup.normal_in_normalizer {G : Type u_1} [Group G] {H : Subgroup G} :
                  @[instance 100]
                  theorem Subgroup.le_normalizer_of_normal_subgroupOf {G : Type u_1} [Group G] {H K : Subgroup G} [hK : (H.subgroupOf K).Normal] (HK : H K) :
                  theorem Subgroup.subset_normalizer_of_normal {G : Type u_1} [Group G] {H : Subgroup G} {S : Set G} [hH : H.Normal] :
                  S (normalizer H)
                  theorem AddSubgroup.subset_normalizer_of_normal {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {S : Set G} [hH : H.Normal] :
                  S (normalizer H)
                  theorem Subgroup.le_normalizer_of_normal {G : Type u_1} [Group G] {H K : Subgroup G} [H.Normal] :
                  theorem Subgroup.inf_normalizer_le_normalizer_inf {G : Type u_1} [Group G] {H K : Subgroup G} :
                  normalizer Hnormalizer K normalizer (HK)
                  def NormalizerCondition (G : Type u_1) [Group G] :

                  Every proper subgroup H of G is a proper normal subgroup of the normalizer of H in G.

                  Equations
                  Instances For

                    Alternative phrasing of the normalizer condition: Only the full group is self-normalizing. This may be easier to work with, as it avoids inequalities and negations.

                    def Group.conjugatesOfSet {G : Type u_1} [Group G] (s : Set G) :
                    Set G

                    Given a set s, conjugatesOfSet s is the set of all conjugates of the elements of s.

                    Equations
                    Instances For
                      def AddGroup.addConjugatesOfSet {G : Type u_1} [AddGroup G] (s : Set G) :
                      Set G

                      Given a set s, addConjugatesOfSet s is the set of all additive conjugates of the elements of s.

                      Equations
                      Instances For
                        theorem Group.mem_conjugatesOfSet_iff {G : Type u_1} [Group G] {s : Set G} {x : G} :
                        x conjugatesOfSet s as, IsConj a x
                        theorem AddGroup.mem_addConjugatesOfSet_iff {G : Type u_1} [AddGroup G] {s : Set G} {x : G} :
                        x addConjugatesOfSet s as, IsAddConj a x
                        theorem Group.conjugatesOfSet_mono {G : Type u_1} [Group G] {s t : Set G} (h : s t) :
                        theorem Group.conjugates_subset_normal {G : Type u_1} [Group G] {N : Subgroup G} [tn : N.Normal] {a : G} (h : a N) :
                        theorem AddGroup.addConjugates_subset_normal {G : Type u_1} [AddGroup G] {N : AddSubgroup G} [tn : N.Normal] {a : G} (h : a N) :
                        theorem Group.conjugatesOfSet_subset {G : Type u_1} [Group G] {s : Set G} {N : Subgroup G} [N.Normal] (h : s N) :
                        theorem AddGroup.addConjugatesOfSet_subset {G : Type u_1} [AddGroup G] {s : Set G} {N : AddSubgroup G} [N.Normal] (h : s N) :
                        theorem Group.conj_mem_conjugatesOfSet {G : Type u_1} [Group G] {s : Set G} {x c : G} :

                        The set of conjugates of s is closed under conjugation.

                        theorem AddGroup.addConj_mem_addConjugatesOfSet {G : Type u_1} [AddGroup G] {s : Set G} {x c : G} :

                        The set of additive conjugates of s is closed under additive conjugation.

                        def Subgroup.normalClosure {G : Type u_1} [Group G] (s : Set G) :

                        The normal closure of a set s is the subgroup closure of all the conjugates of elements of s. It is the smallest normal subgroup containing s.

                        Equations
                        Instances For

                          The normal closure of a set s is the closure of all the additive conjugates of elements of s. It is the smallest normal additive subgroup containing s.

                          Equations
                          Instances For
                            theorem Subgroup.subset_normalClosure {G : Type u_1} [Group G] {s : Set G} :
                            theorem Subgroup.le_normalClosure {G : Type u_1} [Group G] {H : Subgroup G} :
                            instance Subgroup.normalClosure_normal {G : Type u_1} [Group G] {s : Set G} :

                            The normal closure of s is a normal subgroup.

                            The normal closure of s is a normal additive subgroup.

                            theorem Subgroup.normalClosure_le_normal {G : Type u_1} [Group G] {s : Set G} {N : Subgroup G} [N.Normal] (h : s N) :

                            The normal closure of s is the smallest normal subgroup containing s.

                            theorem AddSubgroup.normalClosure_le_normal {G : Type u_1} [AddGroup G] {s : Set G} {N : AddSubgroup G} [N.Normal] (h : s N) :

                            The normal closure of s is the smallest normal additive subgroup containings.

                            theorem Subgroup.normalClosure_subset_iff {G : Type u_1} [Group G] {s : Set G} {N : Subgroup G} [N.Normal] :
                            theorem Subgroup.normalClosure_mono {G : Type u_1} [Group G] {s t : Set G} (h : s t) :
                            theorem Subgroup.normalClosure_eq_iInf {G : Type u_1} [Group G] {s : Set G} :
                            normalClosure s = ⨅ (N : Subgroup G), ⨅ (_ : N.Normal), ⨅ (_ : s N), N
                            theorem AddSubgroup.normalClosure_eq_iInf {G : Type u_1} [AddGroup G] {s : Set G} :
                            normalClosure s = ⨅ (N : AddSubgroup G), ⨅ (_ : N.Normal), ⨅ (_ : s N), N
                            @[simp]
                            theorem Subgroup.normalClosure_eq_self {G : Type u_1} [Group G] (H : Subgroup G) [H.Normal] :
                            @[simp]
                            @[simp]

                            The normal closure of an empty set is the trivial subgroup.

                            def Subgroup.normalCore {G : Type u_1} [Group G] (H : Subgroup G) :

                            The normal core of a subgroup H is the largest normal subgroup of G contained in H, as shown by Subgroup.normalCore_eq_iSup.

                            Equations
                            Instances For

                              The normal core of an additive subgroup H is the largest normal additive subgroup of G contained in H, as shown by AddSubgroup.normalCore_eq_iSup.

                              Equations
                              • H.normalCore = { carrier := {a : G | ∀ (b : G), b + a + -b H}, add_mem' := , zero_mem' := , neg_mem' := }
                              Instances For
                                theorem Subgroup.normalCore_le {G : Type u_1} [Group G] (H : Subgroup G) :
                                theorem Subgroup.normal_le_normalCore {G : Type u_1} [Group G] {H N : Subgroup G} [hN : N.Normal] :
                                theorem AddSubgroup.normal_le_normalCore {G : Type u_1} [AddGroup G] {H N : AddSubgroup G} [hN : N.Normal] :
                                theorem Subgroup.normalCore_mono {G : Type u_1} [Group G] {H K : Subgroup G} (h : H K) :
                                theorem Subgroup.normalCore_eq_iSup {G : Type u_1} [Group G] (H : Subgroup G) :
                                H.normalCore = ⨆ (N : Subgroup G), ⨆ (_ : N.Normal), ⨆ (_ : N H), N
                                theorem AddSubgroup.normalCore_eq_iSup {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
                                H.normalCore = ⨆ (N : AddSubgroup G), ⨆ (_ : N.Normal), ⨆ (_ : N H), N
                                @[simp]
                                theorem Subgroup.normalCore_eq_self {G : Type u_1} [Group G] (H : Subgroup G) [H.Normal] :
                                @[simp]
                                theorem MonoidHom.prodMap_comap_prod {G : Type u_1} [Group G] {N : Type u_5} [Group N] {G' : Type u_8} {N' : Type u_9} [Group G'] [Group N'] (f : G →* N) (g : G' →* N') (S : Subgroup N) (S' : Subgroup N') :
                                theorem AddMonoidHom.prodMap_comap_prod {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {G' : Type u_8} {N' : Type u_9} [AddGroup G'] [AddGroup N'] (f : G →+ N) (g : G' →+ N') (S : AddSubgroup N) (S' : AddSubgroup N') :
                                theorem MonoidHom.ker_prodMap {G : Type u_1} [Group G] {N : Type u_5} [Group N] {G' : Type u_8} {N' : Type u_9} [Group G'] [Group N'] (f : G →* N) (g : G' →* N') :
                                (f.prodMap g).ker = f.ker.prod g.ker
                                theorem AddMonoidHom.ker_prodMap {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {G' : Type u_8} {N' : Type u_9} [AddGroup G'] [AddGroup N'] (f : G →+ N) (g : G' →+ N') :
                                (f.prodMap g).ker = f.ker.prod g.ker
                                @[simp]
                                theorem MonoidHom.ker_fst {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] :
                                (fst G G').ker = .prod
                                @[simp]
                                theorem AddMonoidHom.ker_fst {G : Type u_1} {G' : Type u_2} [AddGroup G] [AddGroup G'] :
                                (fst G G').ker = .prod
                                @[simp]
                                theorem MonoidHom.ker_snd {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] :
                                (snd G G').ker = .prod
                                @[simp]
                                theorem AddMonoidHom.ker_snd {G : Type u_1} {G' : Type u_2} [AddGroup G] [AddGroup G'] :
                                (snd G G').ker = .prod
                                theorem Subgroup.Normal.map {G : Type u_1} [Group G] {N : Type u_5} [Group N] {H : Subgroup G} (h : H.Normal) (f : G →* N) (hf : Function.Surjective f) :
                                theorem AddSubgroup.Normal.map {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {H : AddSubgroup G} (h : H.Normal) (f : G →+ N) (hf : Function.Surjective f) :
                                theorem Subgroup.comap_normalizer_eq_of_surjective {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) {f : N →* G} (hf : Function.Surjective f) :
                                comap f (normalizer H) = normalizer (comap f H)

                                The preimage of the normalizer is equal to the normalizer of the preimage of a surjective function.

                                theorem AddSubgroup.comap_normalizer_eq_of_surjective {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) {f : N →+ G} (hf : Function.Surjective f) :
                                comap f (normalizer H) = normalizer (comap f H)

                                The preimage of the normalizer is equal to the normalizer of the preimage of a surjective function.

                                theorem Subgroup.map_equiv_normalizer_eq {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) (f : G ≃* N) :

                                The image of the normalizer is equal to the normalizer of the image of an isomorphism.

                                theorem AddSubgroup.map_equiv_normalizer_eq {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) (f : G ≃+ N) :

                                The image of the normalizer is equal to the normalizer of the image of an isomorphism.

                                theorem Subgroup.map_normalizer_eq_of_bijective {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) {f : G →* N} (hf : Function.Bijective f) :
                                map f (normalizer H) = normalizer (map f H)

                                The image of the normalizer is equal to the normalizer of the image of a bijective function.

                                theorem AddSubgroup.map_normalizer_eq_of_bijective {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) {f : G →+ N} (hf : Function.Bijective f) :
                                map f (normalizer H) = normalizer (map f H)

                                The image of the normalizer is equal to the normalizer of the image of a bijective function.

                                def MonoidHom.liftOfRightInverseAux {G₁ : Type u_5} {G₂ : Type u_6} {G₃ : Type u_7} [Group G₁] [Group G₂] [Group G₃] (f : G₁ →* G₂) (f_inv : G₂G₁) (hf : Function.RightInverse f_inv f) (g : G₁ →* G₃) (hg : f.ker g.ker) :
                                G₂ →* G₃

                                Auxiliary definition used to define liftOfRightInverse

                                Equations
                                Instances For
                                  def AddMonoidHom.liftOfRightInverseAux {G₁ : Type u_5} {G₂ : Type u_6} {G₃ : Type u_7} [AddGroup G₁] [AddGroup G₂] [AddGroup G₃] (f : G₁ →+ G₂) (f_neg : G₂G₁) (hf : Function.RightInverse f_neg f) (g : G₁ →+ G₃) (hg : f.ker g.ker) :
                                  G₂ →+ G₃

                                  Auxiliary definition used to define liftOfRightInverse

                                  Equations
                                  Instances For
                                    @[simp]
                                    theorem MonoidHom.liftOfRightInverseAux_comp_apply {G₁ : Type u_5} {G₂ : Type u_6} {G₃ : Type u_7} [Group G₁] [Group G₂] [Group G₃] (f : G₁ →* G₂) (f_inv : G₂G₁) (hf : Function.RightInverse f_inv f) (g : G₁ →* G₃) (hg : f.ker g.ker) (x : G₁) :
                                    (f.liftOfRightInverseAux f_inv hf g hg) (f x) = g x
                                    @[simp]
                                    theorem AddMonoidHom.liftOfRightInverseAux_comp_apply {G₁ : Type u_5} {G₂ : Type u_6} {G₃ : Type u_7} [AddGroup G₁] [AddGroup G₂] [AddGroup G₃] (f : G₁ →+ G₂) (f_neg : G₂G₁) (hf : Function.RightInverse f_neg f) (g : G₁ →+ G₃) (hg : f.ker g.ker) (x : G₁) :
                                    (f.liftOfRightInverseAux f_neg hf g hg) (f x) = g x
                                    def MonoidHom.liftOfRightInverse {G₁ : Type u_5} {G₂ : Type u_6} {G₃ : Type u_7} [Group G₁] [Group G₂] [Group G₃] (f : G₁ →* G₂) (f_inv : G₂G₁) (hf : Function.RightInverse f_inv f) :
                                    { g : G₁ →* G₃ // f.ker g.ker } (G₂ →* G₃)

                                    liftOfRightInverse f hf g hg is the unique group homomorphism φ

                                    • such that φ.comp f = g (MonoidHom.liftOfRightInverse_comp),
                                    • where f : G₁ →+* G₂ has a RightInverse f_inv (hf),
                                    • and g : G₂ →+* G₃ satisfies hg : f.ker ≤ g.ker.

                                    See MonoidHom.eq_liftOfRightInverse for the uniqueness lemma.

                                       G₁.
                                       |  \
                                     f |   \ g
                                       |    \
                                       v     \⌟
                                       G₂----> G₃
                                          ∃!φ
                                    
                                    Equations
                                    • One or more equations did not get rendered due to their size.
                                    Instances For
                                      def AddMonoidHom.liftOfRightInverse {G₁ : Type u_5} {G₂ : Type u_6} {G₃ : Type u_7} [AddGroup G₁] [AddGroup G₂] [AddGroup G₃] (f : G₁ →+ G₂) (f_neg : G₂G₁) (hf : Function.RightInverse f_neg f) :
                                      { g : G₁ →+ G₃ // f.ker g.ker } (G₂ →+ G₃)

                                      liftOfRightInverse f f_inv hf g hg is the unique additive group homomorphism φ

                                         G₁.
                                         |  \
                                       f |   \ g
                                         |    \
                                         v     \⌟
                                         G₂----> G₃
                                            ∃!φ
                                      
                                      Equations
                                      • One or more equations did not get rendered due to their size.
                                      Instances For
                                        @[reducible, inline]
                                        noncomputable abbrev MonoidHom.liftOfSurjective {G₁ : Type u_5} {G₂ : Type u_6} {G₃ : Type u_7} [Group G₁] [Group G₂] [Group G₃] (f : G₁ →* G₂) (hf : Function.Surjective f) :
                                        { g : G₁ →* G₃ // f.ker g.ker } (G₂ →* G₃)

                                        A non-computable version of MonoidHom.liftOfRightInverse for when no computable right inverse is available, that uses Function.surjInv.

                                        Equations
                                        Instances For
                                          @[reducible, inline]
                                          noncomputable abbrev AddMonoidHom.liftOfSurjective {G₁ : Type u_5} {G₂ : Type u_6} {G₃ : Type u_7} [AddGroup G₁] [AddGroup G₂] [AddGroup G₃] (f : G₁ →+ G₂) (hf : Function.Surjective f) :
                                          { g : G₁ →+ G₃ // f.ker g.ker } (G₂ →+ G₃)

                                          A non-computable version of AddMonoidHom.liftOfRightInverse for when no computable right inverse is available.

                                          Equations
                                          Instances For
                                            @[simp]
                                            theorem MonoidHom.liftOfRightInverse_comp_apply {G₁ : Type u_5} {G₂ : Type u_6} {G₃ : Type u_7} [Group G₁] [Group G₂] [Group G₃] (f : G₁ →* G₂) (f_inv : G₂G₁) (hf : Function.RightInverse f_inv f) (g : { g : G₁ →* G₃ // f.ker g.ker }) (x : G₁) :
                                            ((f.liftOfRightInverse f_inv hf) g) (f x) = g x
                                            @[simp]
                                            theorem AddMonoidHom.liftOfRightInverse_comp_apply {G₁ : Type u_5} {G₂ : Type u_6} {G₃ : Type u_7} [AddGroup G₁] [AddGroup G₂] [AddGroup G₃] (f : G₁ →+ G₂) (f_neg : G₂G₁) (hf : Function.RightInverse f_neg f) (g : { g : G₁ →+ G₃ // f.ker g.ker }) (x : G₁) :
                                            ((f.liftOfRightInverse f_neg hf) g) (f x) = g x
                                            @[simp]
                                            theorem MonoidHom.liftOfRightInverse_comp {G₁ : Type u_5} {G₂ : Type u_6} {G₃ : Type u_7} [Group G₁] [Group G₂] [Group G₃] (f : G₁ →* G₂) (f_inv : G₂G₁) (hf : Function.RightInverse f_inv f) (g : { g : G₁ →* G₃ // f.ker g.ker }) :
                                            ((f.liftOfRightInverse f_inv hf) g).comp f = g
                                            @[simp]
                                            theorem AddMonoidHom.liftOfRightInverse_comp {G₁ : Type u_5} {G₂ : Type u_6} {G₃ : Type u_7} [AddGroup G₁] [AddGroup G₂] [AddGroup G₃] (f : G₁ →+ G₂) (f_neg : G₂G₁) (hf : Function.RightInverse f_neg f) (g : { g : G₁ →+ G₃ // f.ker g.ker }) :
                                            ((f.liftOfRightInverse f_neg hf) g).comp f = g
                                            theorem MonoidHom.eq_liftOfRightInverse {G₁ : Type u_5} {G₂ : Type u_6} {G₃ : Type u_7} [Group G₁] [Group G₂] [Group G₃] (f : G₁ →* G₂) (f_inv : G₂G₁) (hf : Function.RightInverse f_inv f) (g : G₁ →* G₃) (hg : f.ker g.ker) (h : G₂ →* G₃) (hh : h.comp f = g) :
                                            h = (f.liftOfRightInverse f_inv hf) g, hg
                                            theorem AddMonoidHom.eq_liftOfRightInverse {G₁ : Type u_5} {G₂ : Type u_6} {G₃ : Type u_7} [AddGroup G₁] [AddGroup G₂] [AddGroup G₃] (f : G₁ →+ G₂) (f_neg : G₂G₁) (hf : Function.RightInverse f_neg f) (g : G₁ →+ G₃) (hg : f.ker g.ker) (h : G₂ →+ G₃) (hh : h.comp f = g) :
                                            h = (f.liftOfRightInverse f_neg hf) g, hg
                                            theorem Subgroup.Normal.comap {G : Type u_1} [Group G] {N : Type u_5} [Group N] {H : Subgroup N} (hH : H.Normal) (f : G →* N) :
                                            theorem AddSubgroup.Normal.comap {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {H : AddSubgroup N} (hH : H.Normal) (f : G →+ N) :
                                            @[instance 100]
                                            instance Subgroup.normal_comap {G : Type u_1} [Group G] {N : Type u_5} [Group N] {H : Subgroup N} [nH : H.Normal] (f : G →* N) :
                                            @[instance 100]
                                            instance AddSubgroup.normal_comap {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {H : AddSubgroup N} [nH : H.Normal] (f : G →+ N) :
                                            theorem Subgroup.Normal.subgroupOf {G : Type u_1} [Group G] {H : Subgroup G} (hH : H.Normal) (K : Subgroup G) :
                                            @[instance 100]
                                            instance Subgroup.normal_subgroupOf {G : Type u_1} [Group G] {H N : Subgroup G} [N.Normal] :
                                            @[instance 100]
                                            theorem Subgroup.map_normalClosure {G : Type u_1} [Group G] {N : Type u_5} [Group N] (s : Set G) (f : G →* N) (hf : Function.Surjective f) :
                                            theorem Subgroup.comap_normalClosure {G : Type u_1} [Group G] {N : Type u_5} [Group N] (s : Set N) (f : G ≃* N) :
                                            theorem Subgroup.Normal.of_map_injective {G : Type u_6} {H : Type u_7} [Group G] [Group H] {φ : G →* H} ( : Function.Injective φ) {L : Subgroup G} (n : (Subgroup.map φ L).Normal) :
                                            theorem Subgroup.Normal.of_map_subtype {G : Type u_1} [Group G] {K : Subgroup G} {L : Subgroup K} (n : (Subgroup.map K.subtype L).Normal) :
                                            theorem Subgroup.normal_subgroupOf_iff {G : Type u_1} [Group G] {H K : Subgroup G} (hHK : H K) :
                                            (H.subgroupOf K).Normal ∀ (h k : G), h Hk Kk * h * k⁻¹ H
                                            theorem AddSubgroup.normal_addSubgroupOf_iff {G : Type u_1} [AddGroup G] {H K : AddSubgroup G} (hHK : H K) :
                                            (H.addSubgroupOf K).Normal ∀ (h k : G), h Hk Kk + h + -k H
                                            instance Subgroup.prod_subgroupOf_prod_normal {G : Type u_1} [Group G] {N : Type u_5} [Group N] {H₁ K₁ : Subgroup G} {H₂ K₂ : Subgroup N} [h₁ : (H₁.subgroupOf K₁).Normal] [h₂ : (H₂.subgroupOf K₂).Normal] :
                                            ((H₁.prod H₂).subgroupOf (K₁.prod K₂)).Normal
                                            instance AddSubgroup.prod_addSubgroupOf_prod_normal {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {H₁ K₁ : AddSubgroup G} {H₂ K₂ : AddSubgroup N} [h₁ : (H₁.addSubgroupOf K₁).Normal] [h₂ : (H₂.addSubgroupOf K₂).Normal] :
                                            ((H₁.prod H₂).addSubgroupOf (K₁.prod K₂)).Normal
                                            instance Subgroup.prod_normal {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) (K : Subgroup N) [hH : H.Normal] [hK : K.Normal] :
                                            (H.prod K).Normal
                                            instance AddSubgroup.prod_normal {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) (K : AddSubgroup N) [hH : H.Normal] [hK : K.Normal] :
                                            (H.prod K).Normal
                                            theorem Subgroup.inf_subgroupOf_inf_normal_of_right {G : Type u_1} [Group G] (A B' B : Subgroup G) [hN : (B'.subgroupOf B).Normal] :
                                            ((AB').subgroupOf (AB)).Normal
                                            theorem AddSubgroup.inf_addSubgroupOf_inf_normal_of_right {G : Type u_1} [AddGroup G] (A B' B : AddSubgroup G) [hN : (B'.addSubgroupOf B).Normal] :
                                            ((AB').addSubgroupOf (AB)).Normal
                                            theorem Subgroup.inf_subgroupOf_inf_normal_of_left {G : Type u_1} [Group G] {A' A : Subgroup G} (B : Subgroup G) [hN : (A'.subgroupOf A).Normal] :
                                            ((A'B).subgroupOf (AB)).Normal
                                            theorem AddSubgroup.inf_addSubgroupOf_inf_normal_of_left {G : Type u_1} [AddGroup G] {A' A : AddSubgroup G} (B : AddSubgroup G) [hN : (A'.addSubgroupOf A).Normal] :
                                            ((A'B).addSubgroupOf (AB)).Normal
                                            instance Subgroup.normal_inf_normal {G : Type u_1} [Group G] (H K : Subgroup G) [hH : H.Normal] [hK : K.Normal] :
                                            (HK).Normal
                                            instance AddSubgroup.normal_inf_normal {G : Type u_1} [AddGroup G] (H K : AddSubgroup G) [hH : H.Normal] [hK : K.Normal] :
                                            (HK).Normal
                                            theorem Subgroup.normal_iInf_normal {G : Type u_1} [Group G] {ι : Sort u_6} {a : ιSubgroup G} (norm : ∀ (i : ι), (a i).Normal) :
                                            theorem AddSubgroup.normal_iInf_normal {G : Type u_1} [AddGroup G] {ι : Sort u_6} {a : ιAddSubgroup G} (norm : ∀ (i : ι), (a i).Normal) :
                                            theorem Subgroup.SubgroupNormal.mem_comm {G : Type u_1} [Group G] {H K : Subgroup G} (hK : H K) [hN : (H.subgroupOf K).Normal] {a b : G} (hb : b K) (h : a * b H) :
                                            b * a H
                                            theorem AddSubgroup.SubgroupNormal.mem_comm {G : Type u_1} [AddGroup G] {H K : AddSubgroup G} (hK : H K) [hN : (H.addSubgroupOf K).Normal] {a b : G} (hb : b K) (h : a + b H) :
                                            b + a H
                                            theorem Subgroup.commute_of_normal_of_disjoint {G : Type u_1} [Group G] (H₁ H₂ : Subgroup G) (hH₁ : H₁.Normal) (hH₂ : H₂.Normal) (hdis : Disjoint H₁ H₂) (x y : G) (hx : x H₁) (hy : y H₂) :

                                            Elements of disjoint, normal subgroups commute.

                                            theorem AddSubgroup.addCommute_of_normal_of_disjoint {G : Type u_1} [AddGroup G] (H₁ H₂ : AddSubgroup G) (hH₁ : H₁.Normal) (hH₂ : H₂.Normal) (hdis : Disjoint H₁ H₂) (x y : G) (hx : x H₁) (hy : y H₂) :

                                            Elements of disjoint, normal subgroups commute.

                                            theorem Subgroup.normal_subgroupOf_sup_of_le_normalizer {G : Type u_1} [Group G] {H N : Subgroup G} (hLE : H normalizer N) :
                                            (N.subgroupOf (HN)).Normal
                                            theorem IsConj.normalClosure_eq_top_of {G : Type u_1} [Group G] {N : Subgroup G} [hn : N.Normal] {g g' : G} {hg : g N} {hg' : g' N} (hc : IsConj g g') (ht : Subgroup.normalClosure {g, hg} = ) :

                                            The conjugacy classes that are not trivial.

                                            Equations
                                            Instances For
                                              def AddSubgroup.inertia {M : Type u_6} [AddGroup M] (I : AddSubgroup M) (G : Type u_7) [Group G] [MulAction G M] :

                                              Suppose G acts on M and I is a subgroup of M. The inertia subgroup of I is the subgroup of G whose action is trivial mod I.

                                              Equations
                                              • I.inertia G = { carrier := {σ : G | ∀ (x : M), σ x - x I}, mul_mem' := , one_mem' := , inv_mem' := }
                                              Instances For
                                                @[simp]
                                                theorem AddSubgroup.mem_inertia {M : Type u_6} [AddGroup M] {I : AddSubgroup M} {G : Type u_7} [Group G] [MulAction G M] {σ : G} :
                                                σ I.inertia G ∀ (x : M), σ x - x I
                                                @[simp]
                                                theorem AddSubgroup.subgroupOf_inertia {M : Type u_6} [AddGroup M] (I : AddSubgroup M) {G : Type u_7} [Group G] [MulAction G M] (H : Subgroup G) :
                                                (I.inertia G).subgroupOf H = I.inertia H
                                                @[simp]
                                                theorem AddSubgroup.inertia_map_subtype {M : Type u_6} [AddGroup M] (I : AddSubgroup M) {G : Type u_7} [Group G] [MulAction G M] (H : Subgroup G) :
                                                Subgroup.map H.subtype (I.inertia H) = I.inertia GH