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.

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.

    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.

      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.

        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) :
          Subtype.val โˆ˜ โ‡‘f.rangeRestrict = โ‡‘f
          theorem AddMonoidHom.coe_comp_rangeRestrict {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G โ†’+ N) :
          Subtype.val โˆ˜ โ‡‘f.rangeRestrict = โ‡‘f
          theorem MonoidHom.rangeRestrict_surjective {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) :
          Function.Surjective โ‡‘f.rangeRestrict
          theorem AddMonoidHom.rangeRestrict_surjective {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G โ†’+ N) :
          Function.Surjective โ‡‘f.rangeRestrict
          @[simp]
          theorem MonoidHom.rangeRestrict_injective_iff {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} :
          Function.Injective โ‡‘f.rangeRestrict โ†” Function.Injective โ‡‘f
          @[simp]
          theorem AddMonoidHom.rangeRestrict_injective_iff {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} :
          Function.Injective โ‡‘f.rangeRestrict โ†” Function.Injective โ‡‘f
          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) :
          theorem MonoidHom.range_eq_top {G : Type u_1} [Group G] {N : Type u_7} [Group N] {f : G โ†’* N} :
          f.range = โŠค โ†” Function.Surjective โ‡‘f
          theorem AddMonoidHom.range_eq_top {G : Type u_1} [AddGroup G] {N : Type u_7} [AddGroup N] {f : G โ†’+ N} :
          f.range = โŠค โ†” Function.Surjective โ‡‘f
          @[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 AddMonoidHom.range_zero {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup 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) :
          f.range.addSubgroupOf K = (f.codRestrict K โ‹ฏ).range
          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.

          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.

            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.

              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.

                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

                  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

                    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) :
                      @[simp]
                      theorem AddMonoidHom.ker_toHomAddUnits {G : Type u_1} [AddGroup G] {M : Type u_8} [AddMonoid 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} :
                      f x = f y โ†” yโปยน * x โˆˆ f.ker
                      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
                      @[implicit_reducible]
                      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
                      @[implicit_reducible]
                      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
                      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.ker_mulEquiv_comp {G : Type u_1} [Group G] {N : Type u_5} [Group N] {P : Type u_8} [MulOneClass P] (f : G โ†’* N) (iso : N โ‰ƒ* P) :
                      ((โ†‘iso).comp f).ker = f.ker

                      Composing with an isomorphism on the codomain does not change the kernel.

                      @[simp]
                      theorem AddMonoidHom.ker_addEquiv_comp {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {P : Type u_8} [AddZeroClass P] (f : G โ†’+ N) (iso : N โ‰ƒ+ P) :
                      ((โ†‘iso).comp f).ker = f.ker
                      @[simp]
                      theorem MonoidHom.comap_bot {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G โ†’* N) :
                      @[simp]
                      theorem AddMonoidHom.comap_bot {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup 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 AddMonoidHom.ker_rangeRestrict {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G โ†’+ N) :
                      @[simp]
                      theorem MonoidHom.ker_one {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] :
                      @[simp]
                      theorem AddMonoidHom.ker_zero {G : Type u_1} [AddGroup G] {M : Type u_7} [AddZeroClass M] :
                      @[simp]
                      theorem MonoidHom.ker_id {G : Type u_1} [Group G] :
                      theorem MonoidHom.ker_eq_top_iff {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] {f : G โ†’* M} :
                      f.ker = โŠค โ†” f = 1
                      theorem AddMonoidHom.ker_eq_top_iff {G : Type u_1} [AddGroup G] {M : Type u_7} [AddZeroClass M] {f : G โ†’+ M} :
                      f.ker = โŠค โ†” f = 0
                      theorem MonoidHom.range_eq_bot_iff {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] {f : G โ†’* G'} :
                      f.range = โŠฅ โ†” f = 1
                      theorem AddMonoidHom.range_eq_bot_iff {G : Type u_1} {G' : Type u_2} [AddGroup G] [AddGroup G'] {f : G โ†’+ G'} :
                      f.range = โŠฅ โ†” f = 0
                      theorem MonoidHom.ker_eq_bot_iff {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] (f : G โ†’* M) :
                      f.ker = โŠฅ โ†” Function.Injective โ‡‘f
                      theorem AddMonoidHom.ker_eq_bot_iff {G : Type u_1} [AddGroup G] {M : Type u_7} [AddZeroClass M] (f : G โ†’+ M) :
                      f.ker = โŠฅ โ†” Function.Injective โ‡‘f
                      @[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) :
                      f.range โ‰ค g.ker โ†” g.comp f = 1
                      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) :
                      f.range โ‰ค g.ker โ†” g.comp f = 0
                      @[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

                      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

                        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} :
                          map f H = โŠฅ โ†” H โ‰ค f.ker
                          theorem AddSubgroup.map_eq_bot_iff {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) {f : G โ†’+ N} :
                          map f H = โŠฅ โ†” H โ‰ค f.ker
                          theorem Subgroup.map_eq_bot_iff_of_injective {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) {f : G โ†’* N} (hf : Function.Injective โ‡‘f) :
                          map f H = โŠฅ โ†” H = โŠฅ
                          theorem AddSubgroup.map_eq_bot_iff_of_injective {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) {f : G โ†’+ N} (hf : Function.Injective โ‡‘f) :
                          map f H = โŠฅ โ†” H = โŠฅ
                          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) :
                          comap f K โ‰ค comap f L โ†” K โ‰ค L
                          theorem AddSubgroup.comap_le_comap_of_le_range {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} {K L : AddSubgroup N} (hf : K โ‰ค f.range) :
                          comap f K โ‰ค comap f L โ†” K โ‰ค L
                          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) :
                          comap f K โ‰ค comap f L โ†” K โ‰ค L
                          theorem AddSubgroup.comap_le_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_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_injective {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G โ†’* N} (h : Function.Surjective โ‡‘f) :
                          Function.Injective (comap f)
                          theorem AddSubgroup.comap_injective {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} (h : Function.Surjective โ‡‘f) :
                          Function.Injective (comap f)
                          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} :
                          map f H = f.range โ†” Codisjoint H f.ker
                          theorem AddSubgroup.map_eq_range_iff {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} {H : AddSubgroup G} :
                          map f H = f.range โ†” Codisjoint H f.ker
                          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} :
                          map f H โ‰ค map f K โ†” H โ‰ค K
                          theorem AddSubgroup.map_le_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_le_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_le_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
                          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.

                          Instances For
                            def AddSubgroup.MapSubtype.orderIso {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
                            AddSubgroup โ†ฅH โ‰ƒo { H' : AddSubgroup G // H' โ‰ค H }

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

                            Instances For
                              @[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_apply_coe {G : Type u_1} [Group G] (H : Subgroup G) (H' : Subgroup โ†ฅ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) :
                              Function.Injective (map f)
                              theorem AddSubgroup.map_injective {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G โ†’+ N} (h : Function.Injective โ‡‘f) :
                              Function.Injective (map f)
                              theorem Subgroup.map_subtype_inj {G : Type u_1} [Group G] {H : Subgroup G} {K L : Subgroup โ†ฅH} :
                              map H.subtype K = map H.subtype L โ†” K = L
                              theorem AddSubgroup.map_subtype_inj {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K L : AddSubgroup โ†ฅH} :
                              map H.subtype K = map H.subtype L โ†” K = L
                              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))
                              @[simp]
                              theorem MulEquiv.range_eq_top {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] (e : G โ‰ƒ* G') :
                              (โ†‘e).range = โŠค
                              @[simp]
                              theorem AddEquiv.range_eq_top {G : Type u_1} {G' : Type u_2} [AddGroup G] [AddGroup G'] (e : G โ‰ƒ+ G') :
                              (โ†‘e).range = โŠค
                              theorem MulEquiv.map_range_powMonoidHom {M : Type u_5} {N : Type u_6} [CommGroup M] [CommGroup N] (e : M โ‰ƒ* N) (n : โ„•) :