Documentation

Mathlib.Algebra.Group.Subgroup.Ker

Kernel and range of group homomorphisms #

We define and prove results about the kernel and range of group 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

def MonoidHom.range {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) :

The range of a monoid homomorphism from a group is a subgroup.

Equations
    Instances For
      def AddMonoidHom.range {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G โ†’+ N) :

      The range of an AddMonoidHom from an AddGroup is an AddSubgroup.

      Equations
        Instances For
          @[simp]
          theorem MonoidHom.coe_range {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) :
          โ†‘f.range = Set.range โ‡‘f
          @[simp]
          theorem AddMonoidHom.coe_range {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G โ†’+ N) :
          โ†‘f.range = Set.range โ‡‘f
          @[simp]
          theorem MonoidHom.mem_range {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} {y : N} :
          y โˆˆ f.range โ†” โˆƒ (x : G), f x = y
          @[simp]
          theorem AddMonoidHom.mem_range {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} {y : N} :
          y โˆˆ f.range โ†” โˆƒ (x : G), f x = y
          @[simp]
          theorem MonoidHom.restrict_range {G : Type u_1} [Group G] {N : Type u_5} [Group N] (K : Subgroup G) (f : G โ†’* N) :
          @[simp]
          theorem AddMonoidHom.restrict_range {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (K : AddSubgroup G) (f : G โ†’+ N) :
          def MonoidHom.rangeRestrict {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) :
          G โ†’* โ†ฅf.range

          The canonical surjective group homomorphism G โ†’* f(G) induced by a group homomorphism G โ†’* N.

          Equations
            Instances For
              def AddMonoidHom.rangeRestrict {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G โ†’+ N) :
              G โ†’+ โ†ฅf.range

              The canonical surjective AddGroup homomorphism G โ†’+ f(G) induced by a group homomorphism G โ†’+ N.

              Equations
                Instances For
                  @[simp]
                  theorem MonoidHom.coe_rangeRestrict {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) (g : G) :
                  โ†‘(f.rangeRestrict g) = f g
                  @[simp]
                  theorem AddMonoidHom.coe_rangeRestrict {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G โ†’+ N) (g : G) :
                  โ†‘(f.rangeRestrict g) = f g
                  theorem MonoidHom.coe_comp_rangeRestrict {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) :
                  theorem MonoidHom.map_range {G : Type u_1} [Group G] {N : Type u_5} {P : Type u_6} [Group N] [Group P] (g : N โ†’* P) (f : G โ†’* N) :
                  theorem AddMonoidHom.map_range {G : Type u_1} [AddGroup G] {N : Type u_5} {P : Type u_6} [AddGroup N] [AddGroup P] (g : N โ†’+ P) (f : G โ†’+ N) :
                  theorem MonoidHom.range_comp {G : Type u_1} [Group G] {N : Type u_5} {P : Type u_6} [Group N] [Group P] (g : N โ†’* P) (f : G โ†’* N) :
                  theorem AddMonoidHom.range_comp {G : Type u_1} [AddGroup G] {N : Type u_5} {P : Type u_6} [AddGroup N] [AddGroup P] (g : N โ†’+ P) (f : G โ†’+ N) :
                  @[simp]
                  theorem MonoidHom.range_eq_top_of_surjective {G : Type u_1} [Group G] {N : Type u_7} [Group N] (f : G โ†’* N) (hf : Function.Surjective โ‡‘f) :

                  The range of a surjective monoid homomorphism is the whole of the codomain.

                  @[simp]
                  theorem AddMonoidHom.range_eq_top_of_surjective {G : Type u_1} [AddGroup G] {N : Type u_7} [AddGroup N] (f : G โ†’+ N) (hf : Function.Surjective โ‡‘f) :

                  The range of a surjective AddMonoid homomorphism is the whole of the codomain.

                  @[simp]
                  theorem MonoidHom.range_one {G : Type u_1} [Group G] {N : Type u_5} [Group N] :
                  @[simp]
                  theorem Subgroup.range_subtype {G : Type u_1} [Group G] (H : Subgroup G) :
                  @[simp]
                  theorem Subgroup.inclusion_range {G : Type u_1} [Group G] {H K : Subgroup G} (h_le : H โ‰ค K) :
                  @[simp]
                  theorem AddSubgroup.inclusion_range {G : Type u_1} [AddGroup G] {H K : AddSubgroup G} (h_le : H โ‰ค K) :
                  theorem MonoidHom.subgroupOf_range_eq_of_le {Gโ‚ : Type u_7} {Gโ‚‚ : Type u_8} [Group Gโ‚] [Group Gโ‚‚] {K : Subgroup Gโ‚‚} (f : Gโ‚ โ†’* Gโ‚‚) (h : f.range โ‰ค K) :
                  f.range.subgroupOf K = (f.codRestrict K โ‹ฏ).range
                  theorem AddMonoidHom.addSubgroupOf_range_eq_of_le {Gโ‚ : Type u_7} {Gโ‚‚ : Type u_8} [AddGroup Gโ‚] [AddGroup Gโ‚‚] {K : AddSubgroup Gโ‚‚} (f : Gโ‚ โ†’+ Gโ‚‚) (h : f.range โ‰ค K) :
                  def MonoidHom.ofLeftInverse {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} {g : N โ†’* G} (h : Function.LeftInverse โ‡‘g โ‡‘f) :
                  G โ‰ƒ* โ†ฅf.range

                  Computable alternative to MonoidHom.ofInjective.

                  Equations
                    Instances For
                      def AddMonoidHom.ofLeftInverse {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} {g : N โ†’+ G} (h : Function.LeftInverse โ‡‘g โ‡‘f) :
                      G โ‰ƒ+ โ†ฅf.range

                      Computable alternative to AddMonoidHom.ofInjective.

                      Equations
                        Instances For
                          @[simp]
                          theorem MonoidHom.ofLeftInverse_apply {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} {g : N โ†’* G} (h : Function.LeftInverse โ‡‘g โ‡‘f) (x : G) :
                          โ†‘((ofLeftInverse h) x) = f x
                          @[simp]
                          theorem AddMonoidHom.ofLeftInverse_apply {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} {g : N โ†’+ G} (h : Function.LeftInverse โ‡‘g โ‡‘f) (x : G) :
                          โ†‘((ofLeftInverse h) x) = f x
                          @[simp]
                          theorem MonoidHom.ofLeftInverse_symm_apply {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} {g : N โ†’* G} (h : Function.LeftInverse โ‡‘g โ‡‘f) (x : โ†ฅf.range) :
                          (ofLeftInverse h).symm x = g โ†‘x
                          @[simp]
                          theorem AddMonoidHom.ofLeftInverse_symm_apply {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} {g : N โ†’+ G} (h : Function.LeftInverse โ‡‘g โ‡‘f) (x : โ†ฅf.range) :
                          (ofLeftInverse h).symm x = g โ†‘x
                          noncomputable def MonoidHom.ofInjective {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} (hf : Function.Injective โ‡‘f) :
                          G โ‰ƒ* โ†ฅf.range

                          The range of an injective group homomorphism is isomorphic to its domain.

                          Equations
                            Instances For
                              noncomputable def AddMonoidHom.ofInjective {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} (hf : Function.Injective โ‡‘f) :
                              G โ‰ƒ+ โ†ฅf.range

                              The range of an injective additive group homomorphism is isomorphic to its domain.

                              Equations
                                Instances For
                                  theorem MonoidHom.ofInjective_apply {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} (hf : Function.Injective โ‡‘f) {x : G} :
                                  โ†‘((ofInjective hf) x) = f x
                                  theorem AddMonoidHom.ofInjective_apply {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} (hf : Function.Injective โ‡‘f) {x : G} :
                                  โ†‘((ofInjective hf) x) = f x
                                  @[simp]
                                  theorem MonoidHom.apply_ofInjective_symm {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} (hf : Function.Injective โ‡‘f) (x : โ†ฅf.range) :
                                  f ((ofInjective hf).symm x) = โ†‘x
                                  @[simp]
                                  theorem AddMonoidHom.apply_ofInjective_symm {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} (hf : Function.Injective โ‡‘f) (x : โ†ฅf.range) :
                                  f ((ofInjective hf).symm x) = โ†‘x
                                  def MonoidHom.ker {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] (f : G โ†’* M) :

                                  The multiplicative kernel of a monoid homomorphism is the subgroup of elements x : G such that f x = 1

                                  Equations
                                    Instances For
                                      def AddMonoidHom.ker {G : Type u_1} [AddGroup G] {M : Type u_7} [AddZeroClass M] (f : G โ†’+ M) :

                                      The additive kernel of an AddMonoid homomorphism is the AddSubgroup of elements such that f x = 0

                                      Equations
                                        Instances For
                                          @[simp]
                                          theorem MonoidHom.ker_toSubmonoid {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] (f : G โ†’* M) :
                                          @[simp]
                                          theorem MonoidHom.mem_ker {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] {f : G โ†’* M} {x : G} :
                                          x โˆˆ f.ker โ†” f x = 1
                                          @[simp]
                                          theorem AddMonoidHom.mem_ker {G : Type u_1} [AddGroup G] {M : Type u_7} [AddZeroClass M] {f : G โ†’+ M} {x : G} :
                                          x โˆˆ f.ker โ†” f x = 0
                                          theorem MonoidHom.div_mem_ker_iff {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] (f : G โ†’* M) {x y : G} :
                                          x / y โˆˆ f.ker โ†” f x = f y
                                          theorem AddMonoidHom.sub_mem_ker_iff {G : Type u_1} [AddGroup G] {M : Type u_7} [AddZeroClass M] (f : G โ†’+ M) {x y : G} :
                                          x - y โˆˆ f.ker โ†” f x = f y
                                          theorem MonoidHom.coe_ker {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] (f : G โ†’* M) :
                                          โ†‘f.ker = โ‡‘f โปยน' {1}
                                          theorem AddMonoidHom.coe_ker {G : Type u_1} [AddGroup G] {M : Type u_7} [AddZeroClass M] (f : G โ†’+ M) :
                                          โ†‘f.ker = โ‡‘f โปยน' {0}
                                          @[simp]
                                          theorem MonoidHom.ker_toHomUnits {G : Type u_1} [Group G] {M : Type u_8} [Monoid M] (f : G โ†’* M) :
                                          theorem MonoidHom.eq_iff {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] (f : G โ†’* M) {x y : G} :
                                          theorem AddMonoidHom.eq_iff {G : Type u_1} [AddGroup G] {M : Type u_7} [AddZeroClass M] (f : G โ†’+ M) {x y : G} :
                                          f x = f y โ†” -y + x โˆˆ f.ker
                                          instance MonoidHom.decidableMemKer {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] [DecidableEq M] (f : G โ†’* M) :
                                          DecidablePred fun (x : G) => x โˆˆ f.ker
                                          Equations
                                            instance AddMonoidHom.decidableMemKer {G : Type u_1} [AddGroup G] {M : Type u_7} [AddZeroClass M] [DecidableEq M] (f : G โ†’+ M) :
                                            DecidablePred fun (x : G) => x โˆˆ f.ker
                                            Equations
                                              theorem MonoidHom.comap_ker {G : Type u_1} [Group G] {N : Type u_5} [Group N] {P : Type u_8} [MulOneClass P] (g : N โ†’* P) (f : G โ†’* N) :
                                              theorem AddMonoidHom.comap_ker {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {P : Type u_8} [AddZeroClass P] (g : N โ†’+ P) (f : G โ†’+ N) :
                                              @[simp]
                                              theorem MonoidHom.ker_comp_mulEquiv {G : Type u_1} [Group G] {N : Type u_5} [Group N] {P : Type u_8} [MulOneClass P] (g : N โ†’* P) (iso : G โ‰ƒ* N) :
                                              (g.comp โ†‘iso).ker = Subgroup.map (โ†‘iso.symm) g.ker

                                              The kernel of a homomorphism composed with an isomorphism is equal to the kernel of the homomorphism mapped by the inverse isomorphism.

                                              @[simp]
                                              theorem AddMonoidHom.ker_comp_addEquiv {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {P : Type u_8} [AddZeroClass P] (g : N โ†’+ P) (iso : G โ‰ƒ+ N) :
                                              (g.comp โ†‘iso).ker = AddSubgroup.map (โ†‘iso.symm) g.ker
                                              @[simp]
                                              theorem MonoidHom.comap_bot {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) :
                                              @[simp]
                                              theorem MonoidHom.ker_restrict {G : Type u_1} [Group G] (K : Subgroup G) {M : Type u_7} [MulOneClass M] (f : G โ†’* M) :
                                              @[simp]
                                              theorem AddMonoidHom.ker_restrict {G : Type u_1} [AddGroup G] (K : AddSubgroup G) {M : Type u_7} [AddZeroClass M] (f : G โ†’+ M) :
                                              @[simp]
                                              theorem MonoidHom.ker_codRestrict {G : Type u_1} [Group G] {N : Type u_5} [Group N] {S : Type u_8} [SetLike S N] [SubmonoidClass S N] (f : G โ†’* N) (s : S) (h : โˆ€ (x : G), f x โˆˆ s) :
                                              (f.codRestrict s h).ker = f.ker
                                              @[simp]
                                              theorem AddMonoidHom.ker_codRestrict {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {S : Type u_8} [SetLike S N] [AddSubmonoidClass S N] (f : G โ†’+ N) (s : S) (h : โˆ€ (x : G), f x โˆˆ s) :
                                              (f.codRestrict s h).ker = f.ker
                                              @[simp]
                                              theorem MonoidHom.ker_rangeRestrict {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) :
                                              @[simp]
                                              theorem MonoidHom.ker_one {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] :
                                              @[simp]
                                              theorem MonoidHom.ker_id {G : Type u_1} [Group G] :
                                              theorem MonoidHom.range_eq_bot_iff {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] {f : G โ†’* G'} :
                                              @[simp]
                                              theorem Subgroup.ker_inclusion {G : Type u_1} [Group G] {H K : Subgroup G} (h : H โ‰ค K) :
                                              theorem MonoidHom.ker_prod {G : Type u_1} [Group G] {M : Type u_8} {N : Type u_9} [MulOneClass M] [MulOneClass N] (f : G โ†’* M) (g : G โ†’* N) :
                                              (f.prod g).ker = f.ker โŠ“ g.ker
                                              theorem AddMonoidHom.ker_prod {G : Type u_1} [AddGroup G] {M : Type u_8} {N : Type u_9} [AddZeroClass M] [AddZeroClass N] (f : G โ†’+ M) (g : G โ†’+ N) :
                                              (f.prod g).ker = f.ker โŠ“ g.ker
                                              theorem MonoidHom.range_le_ker_iff {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] {M : Type u_7} [MulOneClass M] (f : G โ†’* G') (g : G' โ†’* M) :
                                              theorem AddMonoidHom.range_le_ker_iff {G : Type u_1} {G' : Type u_2} [AddGroup G] [AddGroup G'] {M : Type u_7} [AddZeroClass M] (f : G โ†’+ G') (g : G' โ†’+ M) :
                                              @[instance 100]
                                              instance MonoidHom.normal_ker {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] (f : G โ†’* M) :
                                              @[instance 100]
                                              instance AddMonoidHom.normal_ker {G : Type u_1} [AddGroup G] {M : Type u_7} [AddZeroClass M] (f : G โ†’+ M) :
                                              def MonoidHom.eqLocus {G : Type u_1} [Group G] {M : Type u_7} [Monoid M] (f g : G โ†’* M) :

                                              The subgroup of elements x : G such that f x = g x

                                              Equations
                                                Instances For
                                                  def AddMonoidHom.eqLocus {G : Type u_1} [AddGroup G] {M : Type u_7} [AddMonoid M] (f g : G โ†’+ M) :

                                                  The additive subgroup of elements x : G such that f x = g x

                                                  Equations
                                                    Instances For
                                                      @[simp]
                                                      theorem MonoidHom.eqLocus_same {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) :
                                                      @[simp]
                                                      theorem AddMonoidHom.eqLocus_same {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G โ†’+ N) :
                                                      theorem MonoidHom.eqOn_closure {G : Type u_1} [Group G] {M : Type u_7} [Monoid M] {f g : G โ†’* M} {s : Set G} (h : Set.EqOn (โ‡‘f) (โ‡‘g) s) :
                                                      Set.EqOn โ‡‘f โ‡‘g โ†‘(Subgroup.closure s)

                                                      If two monoid homomorphisms are equal on a set, then they are equal on its subgroup closure.

                                                      theorem AddMonoidHom.eqOn_closure {G : Type u_1} [AddGroup G] {M : Type u_7} [AddMonoid M] {f g : G โ†’+ M} {s : Set G} (h : Set.EqOn (โ‡‘f) (โ‡‘g) s) :
                                                      Set.EqOn โ‡‘f โ‡‘g โ†‘(AddSubgroup.closure s)

                                                      If two monoid homomorphisms are equal on a set, then they are equal on its subgroup closure.

                                                      theorem MonoidHom.eq_of_eqOn_top {G : Type u_1} [Group G] {M : Type u_7} [Monoid M] {f g : G โ†’* M} (h : Set.EqOn โ‡‘f โ‡‘g โ†‘โŠค) :
                                                      f = g
                                                      theorem AddMonoidHom.eq_of_eqOn_top {G : Type u_1} [AddGroup G] {M : Type u_7} [AddMonoid M] {f g : G โ†’+ M} (h : Set.EqOn โ‡‘f โ‡‘g โ†‘โŠค) :
                                                      f = g
                                                      theorem MonoidHom.eq_of_eqOn_dense {G : Type u_1} [Group G] {M : Type u_7} [Monoid M] {s : Set G} (hs : Subgroup.closure s = โŠค) {f g : G โ†’* M} (h : Set.EqOn (โ‡‘f) (โ‡‘g) s) :
                                                      f = g
                                                      theorem AddMonoidHom.eq_of_eqOn_dense {G : Type u_1} [AddGroup G] {M : Type u_7} [AddMonoid M] {s : Set G} (hs : AddSubgroup.closure s = โŠค) {f g : G โ†’+ M} (h : Set.EqOn (โ‡‘f) (โ‡‘g) s) :
                                                      f = g
                                                      theorem Subgroup.map_eq_bot_iff {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) {f : G โ†’* N} :
                                                      theorem Subgroup.map_le_range {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) (H : Subgroup G) :
                                                      theorem AddSubgroup.map_le_range {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G โ†’+ N) (H : AddSubgroup G) :
                                                      theorem Subgroup.map_subtype_le {G : Type u_1} [Group G] {H : Subgroup G} (K : Subgroup โ†ฅH) :
                                                      theorem Subgroup.ker_le_comap {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) (H : Subgroup N) :
                                                      theorem AddSubgroup.ker_le_comap {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G โ†’+ N) (H : AddSubgroup N) :
                                                      theorem Subgroup.map_comap_eq {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) (H : Subgroup N) :
                                                      map f (comap f H) = f.range โŠ“ H
                                                      theorem AddSubgroup.map_comap_eq {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G โ†’+ N) (H : AddSubgroup N) :
                                                      map f (comap f H) = f.range โŠ“ H
                                                      theorem Subgroup.comap_map_eq {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) (H : Subgroup G) :
                                                      comap f (map f H) = H โŠ” f.ker
                                                      theorem AddSubgroup.comap_map_eq {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G โ†’+ N) (H : AddSubgroup G) :
                                                      comap f (map f H) = H โŠ” f.ker
                                                      theorem Subgroup.map_comap_eq_self {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} {H : Subgroup N} (h : H โ‰ค f.range) :
                                                      map f (comap f H) = H
                                                      theorem AddSubgroup.map_comap_eq_self {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} {H : AddSubgroup N} (h : H โ‰ค f.range) :
                                                      map f (comap f H) = H
                                                      theorem Subgroup.map_comap_eq_self_of_surjective {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} (h : Function.Surjective โ‡‘f) (H : Subgroup N) :
                                                      map f (comap f H) = H
                                                      theorem AddSubgroup.map_comap_eq_self_of_surjective {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} (h : Function.Surjective โ‡‘f) (H : AddSubgroup N) :
                                                      map f (comap f H) = H
                                                      theorem Subgroup.comap_le_comap_of_le_range {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} {K L : Subgroup N} (hf : K โ‰ค f.range) :
                                                      theorem Subgroup.comap_le_comap_of_surjective {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} {K L : Subgroup N} (hf : Function.Surjective โ‡‘f) :
                                                      theorem Subgroup.comap_lt_comap_of_surjective {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} {K L : Subgroup N} (hf : Function.Surjective โ‡‘f) :
                                                      comap f K < comap f L โ†” K < L
                                                      theorem AddSubgroup.comap_lt_comap_of_surjective {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} {K L : AddSubgroup N} (hf : Function.Surjective โ‡‘f) :
                                                      comap f K < comap f L โ†” K < L
                                                      theorem Subgroup.comap_map_eq_self {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} {H : Subgroup G} (h : f.ker โ‰ค H) :
                                                      comap f (map f H) = H
                                                      theorem AddSubgroup.comap_map_eq_self {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} {H : AddSubgroup G} (h : f.ker โ‰ค H) :
                                                      comap f (map f H) = H
                                                      theorem Subgroup.comap_map_eq_self_of_injective {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} (h : Function.Injective โ‡‘f) (H : Subgroup G) :
                                                      comap f (map f H) = H
                                                      theorem AddSubgroup.comap_map_eq_self_of_injective {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} (h : Function.Injective โ‡‘f) (H : AddSubgroup G) :
                                                      comap f (map f H) = H
                                                      theorem Subgroup.map_le_map_iff {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} {H K : Subgroup G} :
                                                      map f H โ‰ค map f K โ†” H โ‰ค K โŠ” f.ker
                                                      theorem AddSubgroup.map_le_map_iff {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} {H K : AddSubgroup G} :
                                                      map f H โ‰ค map f K โ†” H โ‰ค K โŠ” f.ker
                                                      theorem Subgroup.map_le_map_iff' {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} {H K : Subgroup G} :
                                                      map f H โ‰ค map f K โ†” H โŠ” f.ker โ‰ค K โŠ” f.ker
                                                      theorem AddSubgroup.map_le_map_iff' {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} {H K : AddSubgroup G} :
                                                      map f H โ‰ค map f K โ†” H โŠ” f.ker โ‰ค K โŠ” f.ker
                                                      theorem Subgroup.map_eq_map_iff {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} {H K : Subgroup G} :
                                                      map f H = map f K โ†” H โŠ” f.ker = K โŠ” f.ker
                                                      theorem AddSubgroup.map_eq_map_iff {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} {H K : AddSubgroup G} :
                                                      map f H = map f K โ†” H โŠ” f.ker = K โŠ” f.ker
                                                      theorem Subgroup.map_eq_range_iff {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} {H : Subgroup G} :
                                                      theorem Subgroup.map_le_map_iff_of_injective {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} (hf : Function.Injective โ‡‘f) {H K : Subgroup G} :
                                                      @[simp]
                                                      theorem Subgroup.map_subtype_le_map_subtype {G : Type u_1} [Group G] {G' : Subgroup G} {H K : Subgroup โ†ฅG'} :
                                                      def Subgroup.MapSubtype.orderIso {G : Type u_1} [Group G] (H : Subgroup G) :
                                                      Subgroup โ†ฅH โ‰ƒo { H' : Subgroup G // H' โ‰ค H }

                                                      Subgroups of the subgroup H are considered as subgroups that are less than or equal to H.

                                                      Equations
                                                        Instances For

                                                          Additive subgroups of the subgroup H are considered as additive subgroups that are less than or equal to H.

                                                          Equations
                                                            Instances For
                                                              @[simp]
                                                              theorem Subgroup.MapSubtype.orderIso_apply_coe {G : Type u_1} [Group G] (H : Subgroup G) (H' : Subgroup โ†ฅH) :
                                                              โ†‘((orderIso H) H') = map H.subtype H'
                                                              @[simp]
                                                              theorem AddSubgroup.MapSubtype.orderIso_apply_coe {G : Type u_1} [AddGroup G] (H : AddSubgroup G) (H' : AddSubgroup โ†ฅH) :
                                                              โ†‘((orderIso H) H') = map H.subtype H'
                                                              @[simp]
                                                              theorem Subgroup.MapSubtype.orderIso_symm_apply {G : Type u_1} [Group G] (H : Subgroup G) (sH' : { H' : Subgroup G // H' โ‰ค H }) :
                                                              (orderIso H).symm sH' = (โ†‘sH').subgroupOf H
                                                              @[simp]
                                                              theorem AddSubgroup.MapSubtype.orderIso_symm_apply {G : Type u_1} [AddGroup G] (H : AddSubgroup G) (sH' : { H' : AddSubgroup G // H' โ‰ค H }) :
                                                              (orderIso H).symm sH' = (โ†‘sH').addSubgroupOf H
                                                              theorem Subgroup.forall {G : Type u_1} [Group G] {H : Subgroup G} {P : Subgroup โ†ฅH โ†’ Prop} :
                                                              (โˆ€ (H' : Subgroup โ†ฅH), P H') โ†” โˆ€ H' โ‰ค H, P (H'.subgroupOf H)
                                                              theorem AddSubgroup.forall {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {P : AddSubgroup โ†ฅH โ†’ Prop} :
                                                              (โˆ€ (H' : AddSubgroup โ†ฅH), P H') โ†” โˆ€ H' โ‰ค H, P (H'.addSubgroupOf H)
                                                              theorem Subgroup.map_lt_map_iff_of_injective {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} (hf : Function.Injective โ‡‘f) {H K : Subgroup G} :
                                                              map f H < map f K โ†” H < K
                                                              theorem AddSubgroup.map_lt_map_iff_of_injective {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} (hf : Function.Injective โ‡‘f) {H K : AddSubgroup G} :
                                                              map f H < map f K โ†” H < K
                                                              @[simp]
                                                              theorem Subgroup.map_subtype_lt_map_subtype {G : Type u_1} [Group G] {G' : Subgroup G} {H K : Subgroup โ†ฅG'} :
                                                              map G'.subtype H < map G'.subtype K โ†” H < K
                                                              @[simp]
                                                              theorem AddSubgroup.map_subtype_lt_map_subtype {G : Type u_1} [AddGroup G] {G' : AddSubgroup G} {H K : AddSubgroup โ†ฅG'} :
                                                              map G'.subtype H < map G'.subtype K โ†” H < K
                                                              theorem Subgroup.map_injective {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} (h : Function.Injective โ‡‘f) :
                                                              theorem Subgroup.map_injective_of_ker_le {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) {H K : Subgroup G} (hH : f.ker โ‰ค H) (hK : f.ker โ‰ค K) (hf : map f H = map f K) :
                                                              H = K

                                                              Given f(A) = f(B), ker f โ‰ค A, and ker f โ‰ค B, deduce that A = B.

                                                              theorem AddSubgroup.map_injective_of_ker_le {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G โ†’+ N) {H K : AddSubgroup G} (hH : f.ker โ‰ค H) (hK : f.ker โ‰ค K) (hf : map f H = map f K) :
                                                              H = K

                                                              Given f(A) = f(B), ker f โ‰ค A, and ker f โ‰ค B, deduce that A = B.

                                                              theorem Subgroup.ker_subgroupMap {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) (f : G โ†’* N) :
                                                              theorem Subgroup.comap_sup_eq_of_le_range {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) {H K : Subgroup N} (hH : H โ‰ค f.range) (hK : K โ‰ค f.range) :
                                                              comap f H โŠ” comap f K = comap f (H โŠ” K)
                                                              theorem AddSubgroup.comap_sup_eq_of_le_range {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G โ†’+ N) {H K : AddSubgroup N} (hH : H โ‰ค f.range) (hK : K โ‰ค f.range) :
                                                              comap f H โŠ” comap f K = comap f (H โŠ” K)
                                                              theorem Subgroup.comap_sup_eq {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) (H K : Subgroup N) (hf : Function.Surjective โ‡‘f) :
                                                              comap f H โŠ” comap f K = comap f (H โŠ” K)
                                                              theorem AddSubgroup.comap_sup_eq {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G โ†’+ N) (H K : AddSubgroup N) (hf : Function.Surjective โ‡‘f) :
                                                              comap f H โŠ” comap f K = comap f (H โŠ” K)
                                                              theorem Subgroup.subgroupOf_sup {G : Type u_1} [Group G] {A A' B : Subgroup G} (hA : A โ‰ค B) (hA' : A' โ‰ค B) :
                                                              (A โŠ” A').subgroupOf B = A.subgroupOf B โŠ” A'.subgroupOf B
                                                              theorem AddSubgroup.addSubgroupOf_sup {G : Type u_1} [AddGroup G] {A A' B : AddSubgroup G} (hA : A โ‰ค B) (hA' : A' โ‰ค B) :
                                                              (A โŠ” A').addSubgroupOf B = A.addSubgroupOf B โŠ” A'.addSubgroupOf B
                                                              @[deprecated Subgroup.subgroupOf_sup "Use in reverse direction." (since := "2025-11-03")]
                                                              theorem Subgroup.sup_subgroupOf_eq {G : Type u_1} [Group G] {A A' B : Subgroup G} (hA : A โ‰ค B) (hA' : A' โ‰ค B) :
                                                              (A โŠ” A').subgroupOf B = A.subgroupOf B โŠ” A'.subgroupOf B

                                                              Alias of Subgroup.subgroupOf_sup.

                                                              theorem Subgroup.codisjoint_subgroupOf_sup {G : Type u_1} [Group G] (H K : Subgroup G) :
                                                              Codisjoint (H.subgroupOf (H โŠ” K)) (K.subgroupOf (H โŠ” K))