Documentation

Mathlib.GroupTheory.Subgroup.Basic

Subgroups #

This file defines multiplicative and additive subgroups as an extension of submonoids, in a bundled form (unbundled subgroups are in Deprecated/Subgroups.lean).

We prove subgroups of a group form a complete lattice, and results about images and preimages of subgroups under group homomorphisms. The bundled subgroups use bundled monoid homomorphisms.

There are also theorems about the subgroups generated by an element or a subset of a group, defined both inductively and as the infimum of the set of subgroups containing a given element/subset.

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

class InvMemClass (S : Type u_5) (G : Type u_6) [Inv G] [SetLike S G] :

InvMemClass S G states S is a type of subsets s ⊆ G closed under inverses.

  • inv_mem : ∀ {s : S} {x : G}, x sx⁻¹ s

    s is closed under inverses

Instances
    class NegMemClass (S : Type u_5) (G : Type u_6) [Neg G] [SetLike S G] :

    NegMemClass S G states S is a type of subsets s ⊆ G closed under negation.

    • neg_mem : ∀ {s : S} {x : G}, x s-x s

      s is closed under negation

    Instances
      class SubgroupClass (S : Type u_5) (G : Type u_6) [DivInvMonoid G] [SetLike S G] extends SubmonoidClass , InvMemClass :

      SubgroupClass S G states S is a type of subsets s ⊆ G that are subgroups of G.

        Instances
        @[simp]
        theorem neg_mem_iff {S : Type u_5} {G : Type u_6} [InvolutiveNeg G] :
        ∀ {x : SetLike S G} [inst : NegMemClass S G] {H : S} {x_1 : G}, -x_1 H x_1 H
        @[simp]
        theorem inv_mem_iff {S : Type u_5} {G : Type u_6} [InvolutiveInv G] :
        ∀ {x : SetLike S G} [inst : InvMemClass S G] {H : S} {x_1 : G}, x_1⁻¹ H x_1 H
        @[simp]
        theorem abs_mem_iff {S : Type u_5} {G : Type u_6} [AddGroup G] [LinearOrder G] :
        ∀ {x : SetLike S G} [inst : NegMemClass S G] {H : S} {x_1 : G}, |x_1| H x_1 H
        theorem sub_mem {M : Type u_5} {S : Type u_6} [SubNegMonoid M] [SetLike S M] [hSM : AddSubgroupClass S M] {H : S} {x : M} {y : M} (hx : x H) (hy : y H) :
        x - y H

        An additive subgroup is closed under subtraction.

        theorem div_mem {M : Type u_5} {S : Type u_6} [DivInvMonoid M] [SetLike S M] [hSM : SubgroupClass S M] {H : S} {x : M} {y : M} (hx : x H) (hy : y H) :
        x / y H

        A subgroup is closed under division.

        abbrev zsmul_mem.match_1 (motive : Prop) :
        ∀ (x : ), (∀ (n : ), motive (Int.ofNat n))(∀ (n : ), motive (Int.negSucc n))motive x
        Equations
        • =
        theorem zsmul_mem {M : Type u_5} {S : Type u_6} [SubNegMonoid M] [SetLike S M] [hSM : AddSubgroupClass S M] {K : S} {x : M} (hx : x K) (n : ) :
        n x K
        theorem zpow_mem {M : Type u_5} {S : Type u_6} [DivInvMonoid M] [SetLike S M] [hSM : SubgroupClass S M] {K : S} {x : M} (hx : x K) (n : ) :
        x ^ n K
        theorem sub_mem_comm_iff {G : Type u_1} [AddGroup G] {S : Type u_6} {H : S} [SetLike S G] [AddSubgroupClass S G] {a : G} {b : G} :
        a - b H b - a H
        theorem div_mem_comm_iff {G : Type u_1} [Group G] {S : Type u_6} {H : S} [SetLike S G] [SubgroupClass S G] {a : G} {b : G} :
        a / b H b / a H
        theorem exists_neg_mem_iff_exists_mem {G : Type u_1} [AddGroup G] {S : Type u_6} {H : S} [SetLike S G] [AddSubgroupClass S G] {P : GProp} :
        (∃ x ∈ H, P (-x)) ∃ x ∈ H, P x
        theorem exists_inv_mem_iff_exists_mem {G : Type u_1} [Group G] {S : Type u_6} {H : S} [SetLike S G] [SubgroupClass S G] {P : GProp} :
        (∃ x ∈ H, P x⁻¹) ∃ x ∈ H, P x
        theorem add_mem_cancel_right {G : Type u_1} [AddGroup G] {S : Type u_6} {H : S} [SetLike S G] [AddSubgroupClass S G] {x : G} {y : G} (h : x H) :
        y + x H y H
        theorem mul_mem_cancel_right {G : Type u_1} [Group G] {S : Type u_6} {H : S} [SetLike S G] [SubgroupClass S G] {x : G} {y : G} (h : x H) :
        y * x H y H
        theorem add_mem_cancel_left {G : Type u_1} [AddGroup G] {S : Type u_6} {H : S} [SetLike S G] [AddSubgroupClass S G] {x : G} {y : G} (h : x H) :
        x + y H y H
        theorem mul_mem_cancel_left {G : Type u_1} [Group G] {S : Type u_6} {H : S} [SetLike S G] [SubgroupClass S G] {x : G} {y : G} (h : x H) :
        x * y H y H
        instance NegMemClass.neg {G : Type u_1} {S : Type u_2} [Neg G] [SetLike S G] [NegMemClass S G] {H : S} :
        Neg H

        An additive subgroup of an AddGroup inherits an inverse.

        Equations
        • NegMemClass.neg = { neg := fun (a : H) => { val := -a, property := } }
        theorem NegMemClass.neg.proof_1 {G : Type u_1} {S : Type u_2} [Neg G] [SetLike S G] [NegMemClass S G] {H : S} (a : H) :
        -a H
        instance InvMemClass.inv {G : Type u_1} {S : Type u_2} [Inv G] [SetLike S G] [InvMemClass S G] {H : S} :
        Inv H

        A subgroup of a group inherits an inverse.

        Equations
        • InvMemClass.inv = { inv := fun (a : H) => { val := (a)⁻¹, property := } }
        @[simp]
        theorem NegMemClass.coe_neg {G : Type u_1} [AddGroup G] {S : Type u_6} {H : S} [SetLike S G] [AddSubgroupClass S G] (x : H) :
        (-x) = -x
        @[simp]
        theorem InvMemClass.coe_inv {G : Type u_1} [Group G] {S : Type u_6} {H : S} [SetLike S G] [SubgroupClass S G] (x : H) :
        x⁻¹ = (x)⁻¹
        @[deprecated]
        theorem SubgroupClass.coe_inv {G : Type u_1} [Group G] {S : Type u_6} {H : S} [SetLike S G] [SubgroupClass S G] (x : H) :
        x⁻¹ = (x)⁻¹

        Alias of InvMemClass.coe_inv.

        @[deprecated]
        theorem AddSubgroupClass.coe_neg {G : Type u_1} [AddGroup G] {S : Type u_6} {H : S} [SetLike S G] [AddSubgroupClass S G] (x : H) :
        (-x) = -x
        abbrev AddSubgroupClass.subset_union.match_1 {G : Type u_1} {S : Type u_2} [SetLike S G] {H : S} {K : S} (motive : (∃ x ∈ H, xK)Prop) :
        ∀ (x : ∃ x ∈ H, xK), (∀ (x : G) (xH : x H) (xK : xK), motive )motive x
        Equations
        • =
        theorem AddSubgroupClass.subset_union {G : Type u_1} [AddGroup G] {S : Type u_6} [SetLike S G] [AddSubgroupClass S G] {H : S} {K : S} {L : S} :
        H K L H K H L
        theorem SubgroupClass.subset_union {G : Type u_1} [Group G] {S : Type u_6} [SetLike S G] [SubgroupClass S G] {H : S} {K : S} {L : S} :
        H K L H K H L
        theorem AddSubgroupClass.sub.proof_1 {G : Type u_1} {S : Type u_2} [SubNegMonoid G] [SetLike S G] [AddSubgroupClass S G] {H : S} (a : H) (b : H) :
        a - b H
        instance AddSubgroupClass.sub {G : Type u_1} {S : Type u_2} [SubNegMonoid G] [SetLike S G] [AddSubgroupClass S G] {H : S} :
        Sub H

        An additive subgroup of an AddGroup inherits a subtraction.

        Equations
        • AddSubgroupClass.sub = { sub := fun (a b : H) => { val := a - b, property := } }
        instance SubgroupClass.div {G : Type u_1} {S : Type u_2} [DivInvMonoid G] [SetLike S G] [SubgroupClass S G] {H : S} :
        Div H

        A subgroup of a group inherits a division

        Equations
        • SubgroupClass.div = { div := fun (a b : H) => { val := a / b, property := } }
        instance AddSubgroupClass.zsmul {M : Type u_7} {S : Type u_8} [SubNegMonoid M] [SetLike S M] [AddSubgroupClass S M] {H : S} :
        SMul H

        An additive subgroup of an AddGroup inherits an integer scaling.

        Equations
        • AddSubgroupClass.zsmul = { smul := fun (n : ) (a : H) => { val := n a, property := } }
        instance SubgroupClass.zpow {M : Type u_7} {S : Type u_8} [DivInvMonoid M] [SetLike S M] [SubgroupClass S M] {H : S} :
        Pow H

        A subgroup of a group inherits an integer power.

        Equations
        • SubgroupClass.zpow = { pow := fun (a : H) (n : ) => { val := a ^ n, property := } }
        @[simp]
        theorem AddSubgroupClass.coe_sub {G : Type u_1} [AddGroup G] {S : Type u_6} {H : S} [SetLike S G] [AddSubgroupClass S G] (x : H) (y : H) :
        (x - y) = x - y
        @[simp]
        theorem SubgroupClass.coe_div {G : Type u_1} [Group G] {S : Type u_6} {H : S} [SetLike S G] [SubgroupClass S G] (x : H) (y : H) :
        (x / y) = x / y
        theorem AddSubgroupClass.toAddGroup.proof_9 {G : Type u_1} [AddGroup G] {S : Type u_2} (H : S) [SetLike S G] [AddSubgroupClass S G] :
        ∀ (x : H) (x_1 : ), (x_1 x) = (x_1 x)
        theorem AddSubgroupClass.toAddGroup.proof_10 {G : Type u_1} [AddGroup G] {S : Type u_2} (H : S) [SetLike S G] [AddSubgroupClass S G] :
        ∀ (x : H) (x_1 : ), (x_1 x) = (x_1 x)
        theorem AddSubgroupClass.toAddGroup.proof_7 {G : Type u_1} [AddGroup G] {S : Type u_2} (H : S) [SetLike S G] [AddSubgroupClass S G] :
        ∀ (x : H), (-x) = (-x)
        theorem AddSubgroupClass.toAddGroup.proof_6 {G : Type u_1} [AddGroup G] {S : Type u_2} (H : S) [SetLike S G] [AddSubgroupClass S G] :
        ∀ (x x_1 : H), (x + x_1) = (x + x_1)
        theorem AddSubgroupClass.toAddGroup.proof_5 {G : Type u_1} [AddGroup G] {S : Type u_2} (H : S) [SetLike S G] [AddSubgroupClass S G] :
        0 = 0
        instance AddSubgroupClass.toAddGroup {G : Type u_1} [AddGroup G] {S : Type u_6} (H : S) [SetLike S G] [AddSubgroupClass S G] :

        An additive subgroup of an AddGroup inherits an AddGroup structure.

        Equations
        theorem AddSubgroupClass.toAddGroup.proof_4 {G : Type u_1} {S : Type u_2} (H : S) [SetLike S G] :
        Function.Injective fun (a : H) => a
        theorem AddSubgroupClass.toAddGroup.proof_8 {G : Type u_1} [AddGroup G] {S : Type u_2} (H : S) [SetLike S G] [AddSubgroupClass S G] :
        ∀ (x x_1 : H), (x - x_1) = (x - x_1)
        instance SubgroupClass.toGroup {G : Type u_1} [Group G] {S : Type u_6} (H : S) [SetLike S G] [SubgroupClass S G] :
        Group H

        A subgroup of a group inherits a group structure.

        Equations
        theorem AddSubgroupClass.toAddCommGroup.proof_10 {S : Type u_2} (H : S) {G : Type u_1} [AddCommGroup G] [SetLike S G] [AddSubgroupClass S G] :
        ∀ (x : H) (x_1 : ), (x_1 x) = (x_1 x)
        instance AddSubgroupClass.toAddCommGroup {S : Type u_6} (H : S) {G : Type u_7} [AddCommGroup G] [SetLike S G] [AddSubgroupClass S G] :

        An additive subgroup of an AddCommGroup is an AddCommGroup.

        Equations
        theorem AddSubgroupClass.toAddCommGroup.proof_9 {S : Type u_2} (H : S) {G : Type u_1} [AddCommGroup G] [SetLike S G] [AddSubgroupClass S G] :
        ∀ (x : H) (x_1 : ), (x_1 x) = (x_1 x)
        theorem AddSubgroupClass.toAddCommGroup.proof_7 {S : Type u_2} (H : S) {G : Type u_1} [AddCommGroup G] [SetLike S G] [AddSubgroupClass S G] :
        ∀ (x : H), (-x) = (-x)
        theorem AddSubgroupClass.toAddCommGroup.proof_8 {S : Type u_2} (H : S) {G : Type u_1} [AddCommGroup G] [SetLike S G] [AddSubgroupClass S G] :
        ∀ (x x_1 : H), (x - x_1) = (x - x_1)
        theorem AddSubgroupClass.toAddCommGroup.proof_6 {S : Type u_2} (H : S) {G : Type u_1} [AddCommGroup G] [SetLike S G] [AddSubgroupClass S G] :
        ∀ (x x_1 : H), (x + x_1) = (x + x_1)
        theorem AddSubgroupClass.toAddCommGroup.proof_5 {S : Type u_2} (H : S) {G : Type u_1} [AddCommGroup G] [SetLike S G] [AddSubgroupClass S G] :
        0 = 0
        theorem AddSubgroupClass.toAddCommGroup.proof_4 {S : Type u_2} (H : S) {G : Type u_1} [SetLike S G] :
        Function.Injective fun (a : H) => a
        instance SubgroupClass.toCommGroup {S : Type u_6} (H : S) {G : Type u_7} [CommGroup G] [SetLike S G] [SubgroupClass S G] :

        A subgroup of a CommGroup is a CommGroup.

        Equations
        theorem AddSubgroupClass.subtype.proof_1 {G : Type u_1} [AddGroup G] {S : Type u_2} (H : S) [SetLike S G] [AddSubgroupClass S G] :
        0 = 0
        def AddSubgroupClass.subtype {G : Type u_1} [AddGroup G] {S : Type u_6} (H : S) [SetLike S G] [AddSubgroupClass S G] :
        H →+ G

        The natural group hom from an additive subgroup of AddGroup G to G.

        Equations
        • H = { toZeroHom := { toFun := Subtype.val, map_zero' := }, map_add' := }
        theorem AddSubgroupClass.subtype.proof_2 {G : Type u_1} [AddGroup G] {S : Type u_2} (H : S) [SetLike S G] [AddSubgroupClass S G] :
        ∀ (x x_1 : H), { toFun := Subtype.val, map_zero' := }.toFun (x + x_1) = { toFun := Subtype.val, map_zero' := }.toFun (x + x_1)
        def SubgroupClass.subtype {G : Type u_1} [Group G] {S : Type u_6} (H : S) [SetLike S G] [SubgroupClass S G] :
        H →* G

        The natural group hom from a subgroup of group G to G.

        Equations
        • H = { toOneHom := { toFun := Subtype.val, map_one' := }, map_mul' := }
        @[simp]
        theorem AddSubgroupClass.coeSubtype {G : Type u_1} [AddGroup G] {S : Type u_6} (H : S) [SetLike S G] [AddSubgroupClass S G] :
        H = Subtype.val
        @[simp]
        theorem SubgroupClass.coeSubtype {G : Type u_1} [Group G] {S : Type u_6} (H : S) [SetLike S G] [SubgroupClass S G] :
        H = Subtype.val
        @[simp]
        theorem AddSubgroupClass.coe_nsmul {G : Type u_1} [AddGroup G] {S : Type u_6} {H : S} [SetLike S G] [AddSubgroupClass S G] (x : H) (n : ) :
        (n x) = n x
        @[simp]
        theorem SubgroupClass.coe_pow {G : Type u_1} [Group G] {S : Type u_6} {H : S} [SetLike S G] [SubgroupClass S G] (x : H) (n : ) :
        (x ^ n) = x ^ n
        @[simp]
        theorem AddSubgroupClass.coe_zsmul {G : Type u_1} [AddGroup G] {S : Type u_6} {H : S} [SetLike S G] [AddSubgroupClass S G] (x : H) (n : ) :
        (n x) = n x
        @[simp]
        theorem SubgroupClass.coe_zpow {G : Type u_1} [Group G] {S : Type u_6} {H : S} [SetLike S G] [SubgroupClass S G] (x : H) (n : ) :
        (x ^ n) = x ^ n
        def AddSubgroupClass.inclusion {G : Type u_1} [AddGroup G] {S : Type u_6} [SetLike S G] [AddSubgroupClass S G] {H : S} {K : S} (h : H K) :
        H →+ K

        The inclusion homomorphism from an additive subgroup H contained in K to K.

        Equations
        theorem AddSubgroupClass.inclusion.proof_1 {G : Type u_1} {S : Type u_2} [SetLike S G] {H : S} {K : S} (h : H K) (x : H) :
        x K
        theorem AddSubgroupClass.inclusion.proof_2 {G : Type u_1} [AddGroup G] {S : Type u_2} [SetLike S G] [AddSubgroupClass S G] {H : S} {K : S} (h : H K) :
        ∀ (x x_1 : H), (fun (x : H) => { val := x, property := }) (x + x_1) = (fun (x : H) => { val := x, property := }) (x + x_1)
        def SubgroupClass.inclusion {G : Type u_1} [Group G] {S : Type u_6} [SetLike S G] [SubgroupClass S G] {H : S} {K : S} (h : H K) :
        H →* K

        The inclusion homomorphism from a subgroup H contained in K to K.

        Equations
        @[simp]
        theorem AddSubgroupClass.inclusion_self {G : Type u_1} [AddGroup G] {S : Type u_6} {H : S} [SetLike S G] [AddSubgroupClass S G] (x : H) :
        @[simp]
        theorem SubgroupClass.inclusion_self {G : Type u_1} [Group G] {S : Type u_6} {H : S} [SetLike S G] [SubgroupClass S G] (x : H) :
        @[simp]
        theorem AddSubgroupClass.inclusion_mk {G : Type u_1} [AddGroup G] {S : Type u_6} {H : S} {K : S} [SetLike S G] [AddSubgroupClass S G] {h : H K} (x : G) (hx : x H) :
        (AddSubgroupClass.inclusion h) { val := x, property := hx } = { val := x, property := }
        @[simp]
        theorem SubgroupClass.inclusion_mk {G : Type u_1} [Group G] {S : Type u_6} {H : S} {K : S} [SetLike S G] [SubgroupClass S G] {h : H K} (x : G) (hx : x H) :
        (SubgroupClass.inclusion h) { val := x, property := hx } = { val := x, property := }
        theorem AddSubgroupClass.inclusion_right {G : Type u_1} [AddGroup G] {S : Type u_6} {H : S} {K : S} [SetLike S G] [AddSubgroupClass S G] (h : H K) (x : K) (hx : x H) :
        (AddSubgroupClass.inclusion h) { val := x, property := hx } = x
        theorem SubgroupClass.inclusion_right {G : Type u_1} [Group G] {S : Type u_6} {H : S} {K : S} [SetLike S G] [SubgroupClass S G] (h : H K) (x : K) (hx : x H) :
        (SubgroupClass.inclusion h) { val := x, property := hx } = x
        @[simp]
        theorem SubgroupClass.inclusion_inclusion {G : Type u_1} [Group G] {S : Type u_6} {H : S} {K : S} [SetLike S G] [SubgroupClass S G] {L : S} (hHK : H K) (hKL : K L) (x : H) :
        @[simp]
        theorem AddSubgroupClass.coe_inclusion {G : Type u_1} [AddGroup G] {S : Type u_6} [SetLike S G] [AddSubgroupClass S G] {H : S} {K : S} {h : H K} (a : H) :
        @[simp]
        theorem SubgroupClass.coe_inclusion {G : Type u_1} [Group G] {S : Type u_6} [SetLike S G] [SubgroupClass S G] {H : S} {K : S} {h : H K} (a : H) :
        ((SubgroupClass.inclusion h) a) = a
        @[simp]
        theorem AddSubgroupClass.subtype_comp_inclusion {G : Type u_1} [AddGroup G] {S : Type u_6} [SetLike S G] [AddSubgroupClass S G] {H : S} {K : S} (hH : H K) :
        @[simp]
        theorem SubgroupClass.subtype_comp_inclusion {G : Type u_1} [Group G] {S : Type u_6} [SetLike S G] [SubgroupClass S G] {H : S} {K : S} (hH : H K) :
        theorem AddSubgroup.instSetLikeAddSubgroup.proof_1 {G : Type u_1} [AddGroup G] (p : AddSubgroup G) (q : AddSubgroup G) (h : (fun (s : AddSubgroup G) => s.carrier) p = (fun (s : AddSubgroup G) => s.carrier) q) :
        p = q
        Equations
        • AddSubgroup.instSetLikeAddSubgroup = { coe := fun (s : AddSubgroup G) => s.carrier, coe_injective' := }
        Equations
        • Subgroup.instSetLikeSubgroup = { coe := fun (s : Subgroup G) => s.carrier, coe_injective' := }
        @[simp]
        theorem AddSubgroup.mem_carrier {G : Type u_1} [AddGroup G] {s : AddSubgroup G} {x : G} :
        x s.carrier x s
        @[simp]
        theorem Subgroup.mem_carrier {G : Type u_1} [Group G] {s : Subgroup G} {x : G} :
        x s.carrier x s
        @[simp]
        theorem AddSubgroup.mem_mk {G : Type u_1} [AddGroup G] {s : Set G} {x : G} (h_one : ∀ {a b : G}, a sb sa + b s) (h_mul : s 0) (h_inv : ∀ {x : G}, x { toAddSubsemigroup := { carrier := s, add_mem' := h_one }, zero_mem' := h_mul }.carrier-x { toAddSubsemigroup := { carrier := s, add_mem' := h_one }, zero_mem' := h_mul }.carrier) :
        x { toAddSubmonoid := { toAddSubsemigroup := { carrier := s, add_mem' := h_one }, zero_mem' := h_mul }, neg_mem' := h_inv } x s
        @[simp]
        theorem Subgroup.mem_mk {G : Type u_1} [Group G] {s : Set G} {x : G} (h_one : ∀ {a b : G}, a sb sa * b s) (h_mul : s 1) (h_inv : ∀ {x : G}, x { toSubsemigroup := { carrier := s, mul_mem' := h_one }, one_mem' := h_mul }.carrierx⁻¹ { toSubsemigroup := { carrier := s, mul_mem' := h_one }, one_mem' := h_mul }.carrier) :
        x { toSubmonoid := { toSubsemigroup := { carrier := s, mul_mem' := h_one }, one_mem' := h_mul }, inv_mem' := h_inv } x s
        @[simp]
        theorem AddSubgroup.coe_set_mk {G : Type u_1} [AddGroup G] {s : Set G} (h_one : ∀ {a b : G}, a sb sa + b s) (h_mul : s 0) (h_inv : ∀ {x : G}, x { toAddSubsemigroup := { carrier := s, add_mem' := h_one }, zero_mem' := h_mul }.carrier-x { toAddSubsemigroup := { carrier := s, add_mem' := h_one }, zero_mem' := h_mul }.carrier) :
        { toAddSubmonoid := { toAddSubsemigroup := { carrier := s, add_mem' := h_one }, zero_mem' := h_mul }, neg_mem' := h_inv } = s
        @[simp]
        theorem Subgroup.coe_set_mk {G : Type u_1} [Group G] {s : Set G} (h_one : ∀ {a b : G}, a sb sa * b s) (h_mul : s 1) (h_inv : ∀ {x : G}, x { toSubsemigroup := { carrier := s, mul_mem' := h_one }, one_mem' := h_mul }.carrierx⁻¹ { toSubsemigroup := { carrier := s, mul_mem' := h_one }, one_mem' := h_mul }.carrier) :
        { toSubmonoid := { toSubsemigroup := { carrier := s, mul_mem' := h_one }, one_mem' := h_mul }, inv_mem' := h_inv } = s
        @[simp]
        theorem AddSubgroup.mk_le_mk {G : Type u_1} [AddGroup G] {s : Set G} {t : Set G} (h_one : ∀ {a b : G}, a sb sa + b s) (h_mul : s 0) (h_inv : ∀ {x : G}, x { toAddSubsemigroup := { carrier := s, add_mem' := h_one }, zero_mem' := h_mul }.carrier-x { toAddSubsemigroup := { carrier := s, add_mem' := h_one }, zero_mem' := h_mul }.carrier) (h_one' : ∀ {a b : G}, a tb ta + b t) (h_mul' : t 0) (h_inv' : ∀ {x : G}, x { toAddSubsemigroup := { carrier := t, add_mem' := h_one' }, zero_mem' := h_mul' }.carrier-x { toAddSubsemigroup := { carrier := t, add_mem' := h_one' }, zero_mem' := h_mul' }.carrier) :
        { toAddSubmonoid := { toAddSubsemigroup := { carrier := s, add_mem' := h_one }, zero_mem' := h_mul }, neg_mem' := h_inv } { toAddSubmonoid := { toAddSubsemigroup := { carrier := t, add_mem' := h_one' }, zero_mem' := h_mul' }, neg_mem' := h_inv' } s t
        @[simp]
        theorem Subgroup.mk_le_mk {G : Type u_1} [Group G] {s : Set G} {t : Set G} (h_one : ∀ {a b : G}, a sb sa * b s) (h_mul : s 1) (h_inv : ∀ {x : G}, x { toSubsemigroup := { carrier := s, mul_mem' := h_one }, one_mem' := h_mul }.carrierx⁻¹ { toSubsemigroup := { carrier := s, mul_mem' := h_one }, one_mem' := h_mul }.carrier) (h_one' : ∀ {a b : G}, a tb ta * b t) (h_mul' : t 1) (h_inv' : ∀ {x : G}, x { toSubsemigroup := { carrier := t, mul_mem' := h_one' }, one_mem' := h_mul' }.carrierx⁻¹ { toSubsemigroup := { carrier := t, mul_mem' := h_one' }, one_mem' := h_mul' }.carrier) :
        { toSubmonoid := { toSubsemigroup := { carrier := s, mul_mem' := h_one }, one_mem' := h_mul }, inv_mem' := h_inv } { toSubmonoid := { toSubsemigroup := { carrier := t, mul_mem' := h_one' }, one_mem' := h_mul' }, inv_mem' := h_inv' } s t
        @[simp]
        theorem AddSubgroup.coe_toAddSubmonoid {G : Type u_1} [AddGroup G] (K : AddSubgroup G) :
        K.toAddSubmonoid = K
        @[simp]
        theorem Subgroup.coe_toSubmonoid {G : Type u_1} [Group G] (K : Subgroup G) :
        K.toSubmonoid = K
        @[simp]
        theorem AddSubgroup.mem_toAddSubmonoid {G : Type u_1} [AddGroup G] (K : AddSubgroup G) (x : G) :
        x K.toAddSubmonoid x K
        @[simp]
        theorem Subgroup.mem_toSubmonoid {G : Type u_1} [Group G] (K : Subgroup G) (x : G) :
        x K.toSubmonoid x K
        theorem AddSubgroup.toAddSubmonoid_injective {G : Type u_1} [AddGroup G] :
        Function.Injective AddSubgroup.toAddSubmonoid
        theorem Subgroup.toSubmonoid_injective {G : Type u_1} [Group G] :
        Function.Injective Subgroup.toSubmonoid
        @[simp]
        theorem AddSubgroup.toAddSubmonoid_eq {G : Type u_1} [AddGroup G] {p : AddSubgroup G} {q : AddSubgroup G} :
        p.toAddSubmonoid = q.toAddSubmonoid p = q
        @[simp]
        theorem Subgroup.toSubmonoid_eq {G : Type u_1} [Group G] {p : Subgroup G} {q : Subgroup G} :
        p.toSubmonoid = q.toSubmonoid p = q
        theorem AddSubgroup.toAddSubmonoid_strictMono {G : Type u_1} [AddGroup G] :
        StrictMono AddSubgroup.toAddSubmonoid
        theorem Subgroup.toSubmonoid_strictMono {G : Type u_1} [Group G] :
        StrictMono Subgroup.toSubmonoid
        theorem AddSubgroup.toAddSubmonoid_mono {G : Type u_1} [AddGroup G] :
        Monotone AddSubgroup.toAddSubmonoid
        theorem Subgroup.toSubmonoid_mono {G : Type u_1} [Group G] :
        Monotone Subgroup.toSubmonoid
        @[simp]
        theorem AddSubgroup.toAddSubmonoid_le {G : Type u_1} [AddGroup G] {p : AddSubgroup G} {q : AddSubgroup G} :
        p.toAddSubmonoid q.toAddSubmonoid p q
        @[simp]
        theorem Subgroup.toSubmonoid_le {G : Type u_1} [Group G] {p : Subgroup G} {q : Subgroup G} :
        p.toSubmonoid q.toSubmonoid p q
        @[simp]
        theorem AddSubgroup.coe_nonempty {G : Type u_1} [AddGroup G] (s : AddSubgroup G) :
        @[simp]
        theorem Subgroup.coe_nonempty {G : Type u_1} [Group G] (s : Subgroup G) :

        Conversion to/from Additive/Multiplicative #

        @[simp]
        theorem Subgroup.toAddSubgroup_symm_apply_coe {G : Type u_1} [Group G] (S : AddSubgroup (Additive G)) :
        ((RelIso.symm Subgroup.toAddSubgroup) S) = Multiplicative.toAdd ⁻¹' S
        @[simp]
        theorem Subgroup.toAddSubgroup_apply_coe {G : Type u_1} [Group G] (S : Subgroup G) :
        (Subgroup.toAddSubgroup S) = Additive.toMul ⁻¹' S

        Subgroups of a group G are isomorphic to additive subgroups of Additive G.

        Equations
        • One or more equations did not get rendered due to their size.
        @[inline, reducible]

        Additive subgroup of an additive group Additive G are isomorphic to subgroup of G.

        Equations
        @[simp]
        theorem AddSubgroup.toSubgroup_symm_apply_coe {A : Type u_4} [AddGroup A] (S : Subgroup (Multiplicative A)) :
        ((RelIso.symm AddSubgroup.toSubgroup) S) = Additive.toMul ⁻¹' S
        @[simp]
        theorem AddSubgroup.toSubgroup_apply_coe {A : Type u_4} [AddGroup A] (S : AddSubgroup A) :
        (AddSubgroup.toSubgroup S) = Multiplicative.toAdd ⁻¹' S

        Additive subgroups of an additive group A are isomorphic to subgroups of Multiplicative A.

        Equations
        • One or more equations did not get rendered due to their size.
        @[inline, reducible]

        Subgroups of an additive group Multiplicative A are isomorphic to additive subgroups of A.

        Equations
        theorem AddSubgroup.copy.proof_2 {G : Type u_1} [AddGroup G] (K : AddSubgroup G) (s : Set G) (hs : s = K) :
        0 { carrier := s, add_mem' := }.carrier
        theorem AddSubgroup.copy.proof_3 {G : Type u_1} [AddGroup G] (K : AddSubgroup G) (s : Set G) (hs : s = K) :
        ∀ {x : G}, x { toAddSubsemigroup := { carrier := s, add_mem' := }, zero_mem' := }.carrier-x { toAddSubsemigroup := { carrier := s, add_mem' := }, zero_mem' := }.carrier
        theorem AddSubgroup.copy.proof_1 {G : Type u_1} [AddGroup G] (K : AddSubgroup G) (s : Set G) (hs : s = K) :
        ∀ {a b : G}, a sb sa + b s
        def AddSubgroup.copy {G : Type u_1} [AddGroup G] (K : AddSubgroup G) (s : Set G) (hs : s = K) :

        Copy of an additive subgroup with a new carrier equal to the old one. Useful to fix definitional equalities

        Equations
        • AddSubgroup.copy K s hs = { toAddSubmonoid := { toAddSubsemigroup := { carrier := s, add_mem' := }, zero_mem' := }, neg_mem' := }
        def Subgroup.copy {G : Type u_1} [Group G] (K : Subgroup G) (s : Set G) (hs : s = K) :

        Copy of a subgroup with a new carrier equal to the old one. Useful to fix definitional equalities.

        Equations
        • Subgroup.copy K s hs = { toSubmonoid := { toSubsemigroup := { carrier := s, mul_mem' := }, one_mem' := }, inv_mem' := }
        @[simp]
        theorem AddSubgroup.coe_copy {G : Type u_1} [AddGroup G] (K : AddSubgroup G) (s : Set G) (hs : s = K) :
        (AddSubgroup.copy K s hs) = s
        @[simp]
        theorem Subgroup.coe_copy {G : Type u_1} [Group G] (K : Subgroup G) (s : Set G) (hs : s = K) :
        (Subgroup.copy K s hs) = s
        theorem AddSubgroup.copy_eq {G : Type u_1} [AddGroup G] (K : AddSubgroup G) (s : Set G) (hs : s = K) :
        theorem Subgroup.copy_eq {G : Type u_1} [Group G] (K : Subgroup G) (s : Set G) (hs : s = K) :
        Subgroup.copy K s hs = K
        theorem AddSubgroup.ext {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} (h : ∀ (x : G), x H x K) :
        H = K

        Two AddSubgroups are equal if they have the same elements.

        theorem Subgroup.ext {G : Type u_1} [Group G] {H : Subgroup G} {K : Subgroup G} (h : ∀ (x : G), x H x K) :
        H = K

        Two subgroups are equal if they have the same elements.

        theorem AddSubgroup.zero_mem {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        0 H

        An AddSubgroup contains the group's 0.

        theorem Subgroup.one_mem {G : Type u_1} [Group G] (H : Subgroup G) :
        1 H

        A subgroup contains the group's 1.

        theorem AddSubgroup.add_mem {G : Type u_1} [AddGroup G] (H : AddSubgroup G) {x : G} {y : G} :
        x Hy Hx + y H

        An AddSubgroup is closed under addition.

        theorem Subgroup.mul_mem {G : Type u_1} [Group G] (H : Subgroup G) {x : G} {y : G} :
        x Hy Hx * y H

        A subgroup is closed under multiplication.

        theorem AddSubgroup.neg_mem {G : Type u_1} [AddGroup G] (H : AddSubgroup G) {x : G} :
        x H-x H

        An AddSubgroup is closed under inverse.

        theorem Subgroup.inv_mem {G : Type u_1} [Group G] (H : Subgroup G) {x : G} :
        x Hx⁻¹ H

        A subgroup is closed under inverse.

        theorem AddSubgroup.sub_mem {G : Type u_1} [AddGroup G] (H : AddSubgroup G) {x : G} {y : G} (hx : x H) (hy : y H) :
        x - y H

        An AddSubgroup is closed under subtraction.

        theorem Subgroup.div_mem {G : Type u_1} [Group G] (H : Subgroup G) {x : G} {y : G} (hx : x H) (hy : y H) :
        x / y H

        A subgroup is closed under division.

        theorem AddSubgroup.neg_mem_iff {G : Type u_1} [AddGroup G] (H : AddSubgroup G) {x : G} :
        -x H x H
        theorem Subgroup.inv_mem_iff {G : Type u_1} [Group G] (H : Subgroup G) {x : G} :
        x⁻¹ H x H
        theorem AddSubgroup.sub_mem_comm_iff {G : Type u_1} [AddGroup G] (H : AddSubgroup G) {a : G} {b : G} :
        a - b H b - a H
        theorem Subgroup.div_mem_comm_iff {G : Type u_1} [Group G] (H : Subgroup G) {a : G} {b : G} :
        a / b H b / a H
        theorem AddSubgroup.exists_neg_mem_iff_exists_mem {G : Type u_1} [AddGroup G] (K : AddSubgroup G) {P : GProp} :
        (∃ x ∈ K, P (-x)) ∃ x ∈ K, P x
        theorem Subgroup.exists_inv_mem_iff_exists_mem {G : Type u_1} [Group G] (K : Subgroup G) {P : GProp} :
        (∃ x ∈ K, P x⁻¹) ∃ x ∈ K, P x
        theorem AddSubgroup.add_mem_cancel_right {G : Type u_1} [AddGroup G] (H : AddSubgroup G) {x : G} {y : G} (h : x H) :
        y + x H y H
        theorem Subgroup.mul_mem_cancel_right {G : Type u_1} [Group G] (H : Subgroup G) {x : G} {y : G} (h : x H) :
        y * x H y H
        theorem AddSubgroup.add_mem_cancel_left {G : Type u_1} [AddGroup G] (H : AddSubgroup G) {x : G} {y : G} (h : x H) :
        x + y H y H
        theorem Subgroup.mul_mem_cancel_left {G : Type u_1} [Group G] (H : Subgroup G) {x : G} {y : G} (h : x H) :
        x * y H y H
        theorem AddSubgroup.nsmul_mem {G : Type u_1} [AddGroup G] (K : AddSubgroup G) {x : G} (hx : x K) (n : ) :
        n x K
        theorem Subgroup.pow_mem {G : Type u_1} [Group G] (K : Subgroup G) {x : G} (hx : x K) (n : ) :
        x ^ n K
        theorem AddSubgroup.zsmul_mem {G : Type u_1} [AddGroup G] (K : AddSubgroup G) {x : G} (hx : x K) (n : ) :
        n x K
        theorem Subgroup.zpow_mem {G : Type u_1} [Group G] (K : Subgroup G) {x : G} (hx : x K) (n : ) :
        x ^ n K
        theorem AddSubgroup.ofSub.proof_3 {G : Type u_1} [AddGroup G] (s : Set G) (hs : xs, ys, x + -y s) (inv_mem : xs, -x s) :
        ∀ {a b : G}, a sb sa + b s
        theorem AddSubgroup.ofSub.proof_1 {G : Type u_1} [AddGroup G] (s : Set G) (hsn : Set.Nonempty s) (hs : xs, ys, x + -y s) :
        0 s
        abbrev AddSubgroup.ofSub.match_1 {G : Type u_1} (s : Set G) (motive : Set.Nonempty sProp) :
        ∀ (hsn : Set.Nonempty s), (∀ (x : G) (hx : x s), motive )motive hsn
        Equations
        • =
        def AddSubgroup.ofSub {G : Type u_1} [AddGroup G] (s : Set G) (hsn : Set.Nonempty s) (hs : xs, ys, x + -y s) :

        Construct a subgroup from a nonempty set that is closed under subtraction

        Equations
        • AddSubgroup.ofSub s hsn hs = let_fun one_mem := ; let_fun inv_mem := ; { toAddSubmonoid := { toAddSubsemigroup := { carrier := s, add_mem' := }, zero_mem' := one_mem }, neg_mem' := }
        theorem AddSubgroup.ofSub.proof_2 {G : Type u_1} [AddGroup G] (s : Set G) (hs : xs, ys, x + -y s) (one_mem : 0 s) (x : G) (hx : x s) :
        -x s
        def Subgroup.ofDiv {G : Type u_1} [Group G] (s : Set G) (hsn : Set.Nonempty s) (hs : xs, ys, x * y⁻¹ s) :

        Construct a subgroup from a nonempty set that is closed under division.

        Equations
        • Subgroup.ofDiv s hsn hs = let_fun one_mem := ; let_fun inv_mem := ; { toSubmonoid := { toSubsemigroup := { carrier := s, mul_mem' := }, one_mem' := one_mem }, inv_mem' := }
        instance AddSubgroup.add {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        Add H

        An AddSubgroup of an AddGroup inherits an addition.

        Equations
        instance Subgroup.mul {G : Type u_1} [Group G] (H : Subgroup G) :
        Mul H

        A subgroup of a group inherits a multiplication.

        Equations
        instance AddSubgroup.zero {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        Zero H

        An AddSubgroup of an AddGroup inherits a zero.

        Equations
        instance Subgroup.one {G : Type u_1} [Group G] (H : Subgroup G) :
        One H

        A subgroup of a group inherits a 1.

        Equations
        instance AddSubgroup.neg {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        Neg H

        An AddSubgroup of an AddGroup inherits an inverse.

        Equations
        theorem AddSubgroup.neg.proof_1 {G : Type u_1} [AddGroup G] (H : AddSubgroup G) (a : H) :
        -a H
        instance Subgroup.inv {G : Type u_1} [Group G] (H : Subgroup G) :
        Inv H

        A subgroup of a group inherits an inverse.

        Equations
        theorem AddSubgroup.sub.proof_1 {G : Type u_1} [AddGroup G] (H : AddSubgroup G) (a : H) (b : H) :
        a - b H
        instance AddSubgroup.sub {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        Sub H

        An AddSubgroup of an AddGroup inherits a subtraction.

        Equations
        • AddSubgroup.sub H = { sub := fun (a b : H) => { val := a - b, property := } }
        instance Subgroup.div {G : Type u_1} [Group G] (H : Subgroup G) :
        Div H

        A subgroup of a group inherits a division

        Equations
        • Subgroup.div H = { div := fun (a b : H) => { val := a / b, property := } }
        instance AddSubgroup.nsmul {G : Type u_5} [AddGroup G] {H : AddSubgroup G} :
        SMul H

        An AddSubgroup of an AddGroup inherits a natural scaling.

        Equations
        • AddSubgroup.nsmul = { smul := fun (n : ) (a : H) => { val := n a, property := } }
        instance Subgroup.npow {G : Type u_1} [Group G] (H : Subgroup G) :
        Pow H

        A subgroup of a group inherits a natural power

        Equations
        • Subgroup.npow H = { pow := fun (a : H) (n : ) => { val := a ^ n, property := } }
        instance AddSubgroup.zsmul {G : Type u_5} [AddGroup G] {H : AddSubgroup G} :
        SMul H

        An AddSubgroup of an AddGroup inherits an integer scaling.

        Equations
        • AddSubgroup.zsmul = { smul := fun (n : ) (a : H) => { val := n a, property := } }
        instance Subgroup.zpow {G : Type u_1} [Group G] (H : Subgroup G) :
        Pow H

        A subgroup of a group inherits an integer power

        Equations
        • Subgroup.zpow H = { pow := fun (a : H) (n : ) => { val := a ^ n, property := } }
        @[simp]
        theorem AddSubgroup.coe_add {G : Type u_1} [AddGroup G] (H : AddSubgroup G) (x : H) (y : H) :
        (x + y) = x + y
        @[simp]
        theorem Subgroup.coe_mul {G : Type u_1} [Group G] (H : Subgroup G) (x : H) (y : H) :
        (x * y) = x * y
        @[simp]
        theorem AddSubgroup.coe_zero {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        0 = 0
        @[simp]
        theorem Subgroup.coe_one {G : Type u_1} [Group G] (H : Subgroup G) :
        1 = 1
        @[simp]
        theorem AddSubgroup.coe_neg {G : Type u_1} [AddGroup G] (H : AddSubgroup G) (x : H) :
        (-x) = -x
        @[simp]
        theorem Subgroup.coe_inv {G : Type u_1} [Group G] (H : Subgroup G) (x : H) :
        x⁻¹ = (x)⁻¹
        @[simp]
        theorem AddSubgroup.coe_sub {G : Type u_1} [AddGroup G] (H : AddSubgroup G) (x : H) (y : H) :
        (x - y) = x - y
        @[simp]
        theorem Subgroup.coe_div {G : Type u_1} [Group G] (H : Subgroup G) (x : H) (y : H) :
        (x / y) = x / y
        theorem AddSubgroup.coe_mk {G : Type u_1} [AddGroup G] (H : AddSubgroup G) (x : G) (hx : x H) :
        { val := x, property := hx } = x
        theorem Subgroup.coe_mk {G : Type u_1} [Group G] (H : Subgroup G) (x : G) (hx : x H) :
        { val := x, property := hx } = x
        @[simp]
        theorem AddSubgroup.coe_nsmul {G : Type u_1} [AddGroup G] (H : AddSubgroup G) (x : H) (n : ) :
        (n x) = n x
        @[simp]
        theorem Subgroup.coe_pow {G : Type u_1} [Group G] (H : Subgroup G) (x : H) (n : ) :
        (x ^ n) = x ^ n
        theorem AddSubgroup.coe_zsmul {G : Type u_1} [AddGroup G] (H : AddSubgroup G) (x : H) (n : ) :
        (n x) = n x
        theorem Subgroup.coe_zpow {G : Type u_1} [Group G] (H : Subgroup G) (x : H) (n : ) :
        (x ^ n) = x ^ n
        theorem AddSubgroup.mk_eq_zero {G : Type u_1} [AddGroup G] (H : AddSubgroup G) {g : G} {h : g H} :
        { val := g, property := h } = 0 g = 0
        theorem Subgroup.mk_eq_one {G : Type u_1} [Group G] (H : Subgroup G) {g : G} {h : g H} :
        { val := g, property := h } = 1 g = 1
        theorem AddSubgroup.toAddGroup.proof_3 {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        ∀ (x x_1 : H), (x + x_1) = (x + x_1)
        theorem AddSubgroup.toAddGroup.proof_5 {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        ∀ (x x_1 : H), (x - x_1) = (x - x_1)
        theorem AddSubgroup.toAddGroup.proof_7 {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        ∀ (x : H) (x_1 : ), (x_1 x) = (x_1 x)
        theorem AddSubgroup.toAddGroup.proof_4 {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        ∀ (x : H), (-x) = (-x)
        instance AddSubgroup.toAddGroup {G : Type u_5} [AddGroup G] (H : AddSubgroup G) :

        An AddSubgroup of an AddGroup inherits an AddGroup structure.

        Equations
        theorem AddSubgroup.toAddGroup.proof_2 {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        0 = 0
        theorem AddSubgroup.toAddGroup.proof_6 {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        ∀ (x : H) (x_1 : ), (x_1 x) = (x_1 x)
        theorem AddSubgroup.toAddGroup.proof_1 {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        Function.Injective fun (a : H) => a
        instance Subgroup.toGroup {G : Type u_5} [Group G] (H : Subgroup G) :
        Group H

        A subgroup of a group inherits a group structure.

        Equations

        An AddSubgroup of an AddCommGroup is an AddCommGroup.

        Equations
        theorem AddSubgroup.toAddCommGroup.proof_6 {G : Type u_1} [AddCommGroup G] (H : AddSubgroup G) :
        ∀ (x : H) (x_1 : ), (x_1 x) = (x_1 x)
        theorem AddSubgroup.toAddCommGroup.proof_7 {G : Type u_1} [AddCommGroup G] (H : AddSubgroup G) :
        ∀ (x : H) (x_1 : ), (x_1 x) = (x_1 x)
        theorem AddSubgroup.toAddCommGroup.proof_1 {G : Type u_1} [AddCommGroup G] (H : AddSubgroup G) :
        Function.Injective fun (a : H) => a
        theorem AddSubgroup.toAddCommGroup.proof_5 {G : Type u_1} [AddCommGroup G] (H : AddSubgroup G) :
        ∀ (x x_1 : H), (x - x_1) = (x - x_1)
        theorem AddSubgroup.toAddCommGroup.proof_3 {G : Type u_1} [AddCommGroup G] (H : AddSubgroup G) :
        ∀ (x x_1 : H), (x + x_1) = (x + x_1)
        theorem AddSubgroup.toAddCommGroup.proof_4 {G : Type u_1} [AddCommGroup G] (H : AddSubgroup G) :
        ∀ (x : H), (-x) = (-x)
        instance Subgroup.toCommGroup {G : Type u_5} [CommGroup G] (H : Subgroup G) :

        A subgroup of a CommGroup is a CommGroup.

        Equations
        theorem AddSubgroup.subtype.proof_1 {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        0 = 0
        def AddSubgroup.subtype {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        H →+ G

        The natural group hom from an AddSubgroup of AddGroup G to G.

        Equations
        • AddSubgroup.subtype H = { toZeroHom := { toFun := Subtype.val, map_zero' := }, map_add' := }
        theorem AddSubgroup.subtype.proof_2 {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        ∀ (x x_1 : H), { toFun := Subtype.val, map_zero' := }.toFun (x + x_1) = { toFun := Subtype.val, map_zero' := }.toFun (x + x_1)
        def Subgroup.subtype {G : Type u_1} [Group G] (H : Subgroup G) :
        H →* G

        The natural group hom from a subgroup of group G to G.

        Equations
        • Subgroup.subtype H = { toOneHom := { toFun := Subtype.val, map_one' := }, map_mul' := }
        @[simp]
        theorem AddSubgroup.coeSubtype {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        (AddSubgroup.subtype H) = Subtype.val
        @[simp]
        theorem Subgroup.coeSubtype {G : Type u_1} [Group G] (H : Subgroup G) :
        (Subgroup.subtype H) = Subtype.val
        theorem AddSubgroup.inclusion.proof_2 {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} (h : H K) :
        ∀ (x x_1 : H), (fun (x : H) => { val := x, property := }) (x + x_1) = (fun (x : H) => { val := x, property := }) (x + x_1)
        theorem AddSubgroup.inclusion.proof_1 {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} (h : H K) (x : H) :
        x K
        def AddSubgroup.inclusion {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} (h : H K) :
        H →+ K

        The inclusion homomorphism from an additive subgroup H contained in K to K.

        Equations
        def Subgroup.inclusion {G : Type u_1} [Group G] {H : Subgroup G} {K : Subgroup G} (h : H K) :
        H →* K

        The inclusion homomorphism from a subgroup H contained in K to K.

        Equations
        @[simp]
        theorem AddSubgroup.coe_inclusion {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} {h : H K} (a : H) :
        ((AddSubgroup.inclusion h) a) = a
        @[simp]
        theorem Subgroup.coe_inclusion {G : Type u_1} [Group G] {H : Subgroup G} {K : Subgroup G} {h : H K} (a : H) :
        ((Subgroup.inclusion h) a) = a
        theorem AddSubgroup.instTopAddSubgroup.proof_1 {G : Type u_1} [AddGroup G] :
        ∀ {x : G}, x .carrier-x Set.univ

        The AddSubgroup G of the AddGroup G.

        Equations
        • AddSubgroup.instTopAddSubgroup = { top := let __src := ; { toAddSubmonoid := __src, neg_mem' := } }
        instance Subgroup.instTopSubgroup {G : Type u_1} [Group G] :

        The subgroup G of the group G.

        Equations
        • Subgroup.instTopSubgroup = { top := let __src := ; { toSubmonoid := __src, inv_mem' := } }
        def AddSubgroup.topEquiv {G : Type u_1} [AddGroup G] :
        ≃+ G

        The top additive subgroup is isomorphic to the additive group.

        This is the additive group version of AddSubmonoid.topEquiv.

        Equations
        • AddSubgroup.topEquiv = AddSubmonoid.topEquiv
        @[simp]
        theorem AddSubgroup.topEquiv_symm_apply_coe {G : Type u_1} [AddGroup G] (x : G) :
        ((AddEquiv.symm AddSubgroup.topEquiv) x) = x
        @[simp]
        theorem Subgroup.topEquiv_apply {G : Type u_1} [Group G] (x : ) :
        Subgroup.topEquiv x = x
        @[simp]
        theorem AddSubgroup.topEquiv_apply {G : Type u_1} [AddGroup G] (x : ) :
        AddSubgroup.topEquiv x = x
        @[simp]
        theorem Subgroup.topEquiv_symm_apply_coe {G : Type u_1} [Group G] (x : G) :
        ((MulEquiv.symm Subgroup.topEquiv) x) = x
        def Subgroup.topEquiv {G : Type u_1} [Group G] :
        ≃* G

        The top subgroup is isomorphic to the group.

        This is the group version of Submonoid.topEquiv.

        Equations
        • Subgroup.topEquiv = Submonoid.topEquiv
        theorem AddSubgroup.instBotAddSubgroup.proof_1 {G : Type u_1} [AddGroup G] (a : G) :
        a .carrier-a .carrier

        The trivial AddSubgroup {0} of an AddGroup G.

        Equations
        • AddSubgroup.instBotAddSubgroup = { bot := let __src := ; { toAddSubmonoid := __src, neg_mem' := } }
        instance Subgroup.instBotSubgroup {G : Type u_1} [Group G] :

        The trivial subgroup {1} of a group G.

        Equations
        • Subgroup.instBotSubgroup = { bot := let __src := ; { toSubmonoid := __src, inv_mem' := } }
        Equations
        • AddSubgroup.instInhabitedAddSubgroup = { default := }
        Equations
        • Subgroup.instInhabitedSubgroup = { default := }
        @[simp]
        theorem AddSubgroup.mem_bot {G : Type u_1} [AddGroup G] {x : G} :
        x x = 0
        @[simp]
        theorem Subgroup.mem_bot {G : Type u_1} [Group G] {x : G} :
        x x = 1
        @[simp]
        theorem AddSubgroup.mem_top {G : Type u_1} [AddGroup G] (x : G) :
        @[simp]
        theorem Subgroup.mem_top {G : Type u_1} [Group G] (x : G) :
        @[simp]
        theorem AddSubgroup.coe_top {G : Type u_1} [AddGroup G] :
        = Set.univ
        @[simp]
        theorem Subgroup.coe_top {G : Type u_1} [Group G] :
        = Set.univ
        @[simp]
        theorem AddSubgroup.coe_bot {G : Type u_1} [AddGroup G] :
        = {0}
        @[simp]
        theorem Subgroup.coe_bot {G : Type u_1} [Group G] :
        = {1}
        Equations
        • AddSubgroup.instUniqueSubtypeMemAddSubgroupInstMembershipInstSetLikeAddSubgroupBotInstBotAddSubgroup = { toInhabited := { default := 0 }, uniq := }
        Equations
        • Subgroup.instUniqueSubtypeMemSubgroupInstMembershipInstSetLikeSubgroupBotInstBotSubgroup = { toInhabited := { default := 1 }, uniq := }
        @[simp]
        theorem AddSubgroup.top_toAddSubmonoid {G : Type u_1} [AddGroup G] :
        .toAddSubmonoid =
        @[simp]
        theorem Subgroup.top_toSubmonoid {G : Type u_1} [Group G] :
        .toSubmonoid =
        @[simp]
        theorem AddSubgroup.bot_toAddSubmonoid {G : Type u_1} [AddGroup G] :
        .toAddSubmonoid =
        @[simp]
        theorem Subgroup.bot_toSubmonoid {G : Type u_1} [Group G] :
        .toSubmonoid =
        theorem AddSubgroup.eq_bot_iff_forall {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        H = xH, x = 0
        theorem Subgroup.eq_bot_iff_forall {G : Type u_1} [Group G] (H : Subgroup G) :
        H = xH, x = 1
        @[simp]
        theorem AddSubgroup.coe_eq_univ {G : Type u_1} [AddGroup G] {H : AddSubgroup G} :
        H = Set.univ H =
        @[simp]
        theorem Subgroup.coe_eq_univ {G : Type u_1} [Group G] {H : Subgroup G} :
        H = Set.univ H =
        theorem AddSubgroup.coe_eq_singleton {G : Type u_1} [AddGroup G] {H : AddSubgroup G} :
        (∃ (g : G), H = {g}) H =
        abbrev AddSubgroup.coe_eq_singleton.match_1 {G : Type u_1} [AddGroup G] {H : AddSubgroup G} (motive : (∃ (g : G), H = {g})Prop) :
        ∀ (x : ∃ (g : G), H = {g}), (∀ (g : G) (hg : H = {g}), motive )motive x
        Equations
        • =
        theorem Subgroup.coe_eq_singleton {G : Type u_1} [Group G] {H : Subgroup G} :
        (∃ (g : G), H = {g}) H =
        theorem AddSubgroup.nontrivial_iff_exists_ne_zero {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        Nontrivial H ∃ x ∈ H, x 0
        theorem Subgroup.nontrivial_iff_exists_ne_one {G : Type u_1} [Group G] (H : Subgroup G) :
        Nontrivial H ∃ x ∈ H, x 1
        theorem AddSubgroup.exists_ne_zero_of_nontrivial {G : Type u_1} [AddGroup G] (H : AddSubgroup G) [Nontrivial H] :
        ∃ x ∈ H, x 0
        theorem Subgroup.exists_ne_one_of_nontrivial {G : Type u_1} [Group G] (H : Subgroup G) [Nontrivial H] :
        ∃ x ∈ H, x 1

        A subgroup is either the trivial subgroup or nontrivial.

        theorem Subgroup.bot_or_nontrivial {G : Type u_1} [Group G] (H : Subgroup G) :

        A subgroup is either the trivial subgroup or nontrivial.

        theorem AddSubgroup.bot_or_exists_ne_zero {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        H = ∃ x ∈ H, x 0

        A subgroup is either the trivial subgroup or contains a nonzero element.

        theorem Subgroup.bot_or_exists_ne_one {G : Type u_1} [Group G] (H : Subgroup G) :
        H = ∃ x ∈ H, x 1

        A subgroup is either the trivial subgroup or contains a non-identity element.

        theorem AddSubgroup.ne_bot_iff_exists_ne_zero {G : Type u_1} [AddGroup G] {H : AddSubgroup G} :
        H ∃ (a : H), a 0
        theorem Subgroup.ne_bot_iff_exists_ne_one {G : Type u_1} [Group G] {H : Subgroup G} :
        H ∃ (a : H), a 1
        theorem AddSubgroup.instInfAddSubgroup.proof_1 {G : Type u_1} [AddGroup G] (H₁ : AddSubgroup G) (H₂ : AddSubgroup G) :
        ∀ {x : G}, x (H₁.toAddSubmonoid H₂.toAddSubmonoid).carrier-x (H₁.toAddSubmonoid H₂.toAddSubmonoid).carrier
        abbrev AddSubgroup.instInfAddSubgroup.match_1 {G : Type u_1} [AddGroup G] (H₁ : AddSubgroup G) (H₂ : AddSubgroup G) :
        ∀ {x : G}, let __src := H₁.toAddSubmonoid H₂.toAddSubmonoid; ∀ (motive : x __src.carrierProp) (x_1 : x __src.carrier), (∀ (hx : x H₁.toAddSubmonoid) (hx' : x H₂.toAddSubmonoid), motive )motive x_1
        Equations
        • =

        The inf of two AddSubgroups is their intersection.

        Equations
        • AddSubgroup.instInfAddSubgroup = { inf := fun (H₁ H₂ : AddSubgroup G) => let __src := H₁.toAddSubmonoid H₂.toAddSubmonoid; { toAddSubmonoid := __src, neg_mem' := } }
        instance Subgroup.instInfSubgroup {G : Type u_1} [Group G] :

        The inf of two subgroups is their intersection.

        Equations
        • Subgroup.instInfSubgroup = { inf := fun (H₁ H₂ : Subgroup G) => let __src := H₁.toSubmonoid H₂.toSubmonoid; { toSubmonoid := __src, inv_mem' := } }
        @[simp]
        theorem AddSubgroup.coe_inf {G : Type u_1} [AddGroup G] (p : AddSubgroup G) (p' : AddSubgroup G) :
        (p p') = p p'
        @[simp]
        theorem Subgroup.coe_inf {G : Type u_1} [Group G] (p : Subgroup G) (p' : Subgroup G) :
        (p p') = p p'
        @[simp]
        theorem AddSubgroup.mem_inf {G : Type u_1} [AddGroup G] {p : AddSubgroup G} {p' : AddSubgroup G} {x : G} :
        x p p' x p x p'
        @[simp]
        theorem Subgroup.mem_inf {G : Type u_1} [Group G] {p : Subgroup G} {p' : Subgroup G} {x : G} :
        x p p' x p x p'
        theorem AddSubgroup.instInfSetAddSubgroup.proof_2 {G : Type u_1} [AddGroup G] (s : Set (AddSubgroup G)) {x : G} (hx : x (AddSubmonoid.copy (⨅ S ∈ s, S.toAddSubmonoid) (⋂ S ∈ s, S) ).carrier) :
        -x ⋂ x ∈ s, x
        Equations
        • One or more equations did not get rendered due to their size.
        theorem AddSubgroup.instInfSetAddSubgroup.proof_1 {G : Type u_1} [AddGroup G] (s : Set (AddSubgroup G)) :
        ⋂ S ∈ s, S = (⨅ i ∈ s, i.toAddSubmonoid)
        Equations
        • One or more equations did not get rendered due to their size.
        @[simp]
        theorem AddSubgroup.coe_sInf {G : Type u_1} [AddGroup G] (H : Set (AddSubgroup G)) :
        (sInf H) = ⋂ s ∈ H, s
        @[simp]
        theorem Subgroup.coe_sInf {G : Type u_1} [Group G] (H : Set (Subgroup G)) :
        (sInf H) = ⋂ s ∈ H, s
        @[simp]
        theorem AddSubgroup.mem_sInf {G : Type u_1} [AddGroup G] {S : Set (AddSubgroup G)} {x : G} :
        x sInf S pS, x p
        @[simp]
        theorem Subgroup.mem_sInf {G : Type u_1} [Group G] {S : Set (Subgroup G)} {x : G} :
        x sInf S pS, x p
        theorem AddSubgroup.mem_iInf {G : Type u_1} [AddGroup G] {ι : Sort u_5} {S : ιAddSubgroup G} {x : G} :
        x ⨅ (i : ι), S i ∀ (i : ι), x S i
        theorem Subgroup.mem_iInf {G : Type u_1} [Group G] {ι : Sort u_5} {S : ιSubgroup G} {x : G} :
        x ⨅ (i : ι), S i ∀ (i : ι), x S i
        @[simp]
        theorem AddSubgroup.coe_iInf {G : Type u_1} [AddGroup G] {ι : Sort u_5} {S : ιAddSubgroup G} :
        (⨅ (i : ι), S i) = ⋂ (i : ι), (S i)
        @[simp]
        theorem Subgroup.coe_iInf {G : Type u_1} [Group G] {ι : Sort u_5} {S : ιSubgroup G} :
        (⨅ (i : ι), S i) = ⋂ (i : ι), (S i)
        theorem AddSubgroup.instCompleteLatticeAddSubgroup.proof_3 {G : Type u_1} [AddGroup G] (_a : AddSubgroup G) (_b : AddSubgroup G) (_x : G) (self : _x _a.toAddSubmonoid _x _b.toAddSubmonoid) :
        _x _b.toAddSubmonoid

        The AddSubgroups of an AddGroup form a complete lattice.

        Equations
        theorem AddSubgroup.instCompleteLatticeAddSubgroup.proof_8 {G : Type u_1} [AddGroup G] (s : Set (AddSubgroup G)) (a : AddSubgroup G) :
        (bs, a b)a sInf s
        theorem AddSubgroup.instCompleteLatticeAddSubgroup.proof_6 {G : Type u_1} [AddGroup G] (s : Set (AddSubgroup G)) (a : AddSubgroup G) :
        (bs, b a)sSup s a
        theorem AddSubgroup.instCompleteLatticeAddSubgroup.proof_9 {G : Type u_1} [AddGroup G] (S : AddSubgroup G) (_x : G) (hx : _x ) :
        _x S
        theorem AddSubgroup.instCompleteLatticeAddSubgroup.proof_2 {G : Type u_1} [AddGroup G] (_a : AddSubgroup G) (_b : AddSubgroup G) (_x : G) (self : _x _a.toAddSubmonoid _x _b.toAddSubmonoid) :
        _x _a.toAddSubmonoid
        theorem AddSubgroup.instCompleteLatticeAddSubgroup.proof_4 {G : Type u_1} [AddGroup G] (_a : AddSubgroup G) (_b : AddSubgroup G) (_c : AddSubgroup G) (ha : _a _b) (hb : _a _c) (_x : G) (hx : _x _a) :
        _x _b.toAddSubmonoid _x _c.toAddSubmonoid

        Subgroups of a group form a complete lattice.

        Equations
        theorem AddSubgroup.mem_sup_left {G : Type u_1} [AddGroup G] {S : AddSubgroup G} {T : AddSubgroup G} {x : G} :
        x Sx S T
        theorem Subgroup.mem_sup_left {G : Type u_1} [Group G] {S : Subgroup G} {T : Subgroup G} {x : G} :
        x Sx S T
        theorem AddSubgroup.mem_sup_right {G : Type u_1} [AddGroup G] {S : AddSubgroup G} {T : AddSubgroup G} {x : G} :
        x Tx S T
        theorem Subgroup.mem_sup_right {G : Type u_1} [Group G] {S : Subgroup G} {T : Subgroup G} {x : G} :
        x Tx S T
        theorem AddSubgroup.add_mem_sup {G : Type u_1} [AddGroup G] {S : AddSubgroup G} {T : AddSubgroup G} {x : G} {y : G} (hx : x S) (hy : y T) :
        x + y S T
        theorem Subgroup.mul_mem_sup {G : Type u_1} [Group G] {S : Subgroup G} {T : Subgroup G} {x : G} {y : G} (hx : x S) (hy : y T) :
        x * y S T
        theorem AddSubgroup.mem_iSup_of_mem {G : Type u_1} [AddGroup G] {ι : Sort u_5} {S : ιAddSubgroup G} (i : ι) {x : G} :
        x S ix iSup S
        theorem Subgroup.mem_iSup_of_mem {G : Type u_1} [Group G] {ι : Sort u_5} {S : ιSubgroup G} (i : ι) {x : G} :
        x S ix iSup S
        theorem AddSubgroup.mem_sSup_of_mem {G : Type u_1} [AddGroup G] {S : Set (AddSubgroup G)} {s : AddSubgroup G} (hs : s S) {x : G} :
        x sx sSup S
        theorem Subgroup.mem_sSup_of_mem {G : Type u_1} [Group G] {S : Set (Subgroup G)} {s : Subgroup G} (hs : s S) {x : G} :
        x sx sSup S
        Equations
        • AddSubgroup.instUniqueAddSubgroup = { toInhabited := { default := }, uniq := }
        Equations
        • Subgroup.instUniqueSubgroup = { toInhabited := { default := }, uniq := }
        Equations
        • =
        theorem AddSubgroup.eq_top_iff' {G : Type u_1} [AddGroup G] (H : AddSubgroup G) :
        H = ∀ (x : G), x H
        theorem Subgroup.eq_top_iff' {G : Type u_1} [Group G] (H : Subgroup G) :
        H = ∀ (x : G), x H
        def AddSubgroup.closure {G : Type u_1} [AddGroup G] (k : Set G) :

        The AddSubgroup generated by a set

        Equations
        def Subgroup.closure {G : Type u_1} [Group G] (k : Set G) :

        The Subgroup generated by a set.

        Equations
        theorem AddSubgroup.mem_closure {G : Type u_1} [AddGroup G] {k : Set G} {x : G} :
        x AddSubgroup.closure k ∀ (K : AddSubgroup G), k Kx K
        theorem Subgroup.mem_closure {G : Type u_1} [Group G] {k : Set G} {x : G} :
        x Subgroup.closure k ∀ (K : Subgroup G), k Kx K
        @[simp]
        theorem AddSubgroup.subset_closure {G : Type u_1} [AddGroup G] {k : Set G} :

        The AddSubgroup generated by a set includes the set.

        @[simp]
        theorem Subgroup.subset_closure {G : Type u_1} [Group G] {k : Set G} :

        The subgroup generated by a set includes the set.

        theorem AddSubgroup.not_mem_of_not_mem_closure {G : Type u_1} [AddGroup G] {k : Set G} {P : G} (hP : PAddSubgroup.closure k) :
        Pk
        theorem Subgroup.not_mem_of_not_mem_closure {G : Type u_1} [Group G] {k : Set G} {P : G} (hP : PSubgroup.closure k) :
        Pk
        @[simp]
        theorem AddSubgroup.closure_le {G : Type u_1} [AddGroup G] (K : AddSubgroup G) {k : Set G} :

        An additive subgroup K includes closure k if and only if it includes k

        @[simp]
        theorem Subgroup.closure_le {G : Type u_1} [Group G] (K : Subgroup G) {k : Set G} :

        A subgroup K includes closure k if and only if it includes k.

        theorem AddSubgroup.closure_eq_of_le {G : Type u_1} [AddGroup G] (K : AddSubgroup G) {k : Set G} (h₁ : k K) (h₂ : K AddSubgroup.closure k) :
        theorem Subgroup.closure_eq_of_le {G : Type u_1} [Group G] (K : Subgroup G) {k : Set G} (h₁ : k K) (h₂ : K Subgroup.closure k) :
        theorem AddSubgroup.closure_induction {G : Type u_1} [AddGroup G] {k : Set G} {p : GProp} {x : G} (h : x AddSubgroup.closure k) (mem : xk, p x) (one : p 0) (mul : ∀ (x y : G), p xp yp (x + y)) (inv : ∀ (x : G), p xp (-x)) :
        p x

        An induction principle for additive closure membership. If p holds for 0 and all elements of k, and is preserved under addition and inverses, then p holds for all elements of the additive closure of k.

        theorem Subgroup.closure_induction {G : Type u_1} [Group G] {k : Set G} {p : GProp} {x : G} (h : x Subgroup.closure k) (mem : xk, p x) (one : p 1) (mul : ∀ (x y : G), p xp yp (x * y)) (inv : ∀ (x : G), p xp x⁻¹) :
        p x

        An induction principle for closure membership. If p holds for 1 and all elements of k, and is preserved under multiplication and inverse, then p holds for all elements of the closure of k.

        abbrev AddSubgroup.closure_induction'.match_1 {G : Type u_1} [AddGroup G] {k : Set G} {p : (x : G) → x AddSubgroup.closure kProp} (y : G) (motive : (∃ (x : y AddSubgroup.closure k), p y x)Prop) :
        ∀ (x : ∃ (x : y AddSubgroup.closure k), p y x), (∀ (hy' : y AddSubgroup.closure k) (hy : p y hy'), motive )motive x
        Equations
        • =
        theorem AddSubgroup.closure_induction' {G : Type u_1} [AddGroup G] {k : Set G} {p : (x : G) → x AddSubgroup.closure kProp} (mem : ∀ (x : G) (h : x k), p x ) (one : p 0 ) (mul : ∀ (x : G) (hx : x AddSubgroup.closure k) (y : G) (hy : y AddSubgroup.closure k), p x hxp y hyp (x + y) ) (inv : ∀ (x : G) (hx : x AddSubgroup.closure k), p x hxp (-x) ) {x : G} (hx : x AddSubgroup.closure k) :
        p x hx

        A dependent version of AddSubgroup.closure_induction.

        theorem Subgroup.closure_induction' {G : Type u_1} [Group G] {k : Set G} {p : (x : G) → x Subgroup.closure kProp} (mem : ∀ (x : G) (h : x k), p x ) (one : p 1 ) (mul : ∀ (x : G) (hx : x Subgroup.closure k) (y : G) (hy : y Subgroup.closure k), p x hxp y hyp (x * y) ) (inv : ∀ (x : G) (hx : x Subgroup.closure k), p x hxp x⁻¹ ) {x : G} (hx : x Subgroup.closure k) :
        p x hx

        A dependent version of Subgroup.closure_induction.

        theorem AddSubgroup.closure_induction₂ {G : Type u_1} [AddGroup G] {k : Set G} {p : GGProp} {x : G} {y : G} (hx : x AddSubgroup.closure k) (hy : y AddSubgroup.closure k) (Hk : xk, yk, p x y) (H1_left : ∀ (x : G), p 0 x) (H1_right : ∀ (x : G), p x 0) (Hmul_left : ∀ (x₁ x₂ y : G), p x₁ yp x₂ yp (x₁ + x₂) y) (Hmul_right : ∀ (x y₁ y₂ : G), p x y₁p x y₂p x (y₁ + y₂)) (Hinv_left : ∀ (x y : G), p x yp (-x) y) (Hinv_right : ∀ (x y : G), p x yp x (-y)) :
        p x y

        An induction principle for additive closure membership, for predicates with two arguments.

        theorem Subgroup.closure_induction₂ {G : Type u_1} [Group G] {k : Set G} {p : GGProp} {x : G} {y : G} (hx : x Subgroup.closure k) (hy : y Subgroup.closure k) (Hk : xk, yk, p x y) (H1_left : ∀ (x : G), p 1 x) (H1_right : ∀ (x : G), p x 1) (Hmul_left : ∀ (x₁ x₂ y : G), p x₁ yp x₂ yp (x₁ * x₂) y) (Hmul_right : ∀ (x y₁ y₂ : G), p x y₁p x y₂p x (y₁ * y₂)) (Hinv_left : ∀ (x y : G), p x yp x⁻¹ y) (Hinv_right : ∀ (x y : G), p x yp x y⁻¹) :
        p x y

        An induction principle for closure membership for predicates with two arguments.

        @[simp]
        @[simp]
        theorem Subgroup.closure_closure_coe_preimage {G : Type u_1} [Group G] {k : Set G} :
        Subgroup.closure (Subtype.val ⁻¹' k) =
        theorem AddSubgroup.closureAddCommGroupOfComm.proof_1 {G : Type u_1} [AddGroup G] {k : Set G} (hcomm : xk, yk, x + y = y + x) (x : (AddSubgroup.closure k)) (y : (AddSubgroup.closure k)) :
        x + y = y + x
        def AddSubgroup.closureAddCommGroupOfComm {G : Type u_1} [AddGroup G] {k : Set G} (hcomm : xk, yk, x + y = y + x) :

        If all the elements of a set s commute, then closure s is an additive commutative group.

        Equations
        def Subgroup.closureCommGroupOfComm {G : Type u_1} [Group G] {k : Set G} (hcomm : xk, yk, x * y = y * x) :

        If all the elements of a set s commute, then closure s is a commutative group.

        Equations
        theorem AddSubgroup.gi.proof_2 (G : Type u_1) [AddGroup G] (_s : Set G) (_h : (AddSubgroup.closure _s) _s) :
        (fun (s : Set G) (x : (AddSubgroup.closure s) s) => AddSubgroup.closure s) _s _h = (fun (s : Set G) (x : (AddSubgroup.closure s) s) => AddSubgroup.closure s) _s _h
        def AddSubgroup.gi (G : Type u_1) [AddGroup G] :
        GaloisInsertion AddSubgroup.closure SetLike.coe

        closure forms a Galois insertion with the coercion to set.

        Equations
        theorem AddSubgroup.gi.proof_1 (G : Type u_1) [AddGroup G] (_s : AddSubgroup G) :
        _s (AddSubgroup.closure _s)
        def Subgroup.gi (G : Type u_1) [Group G] :
        GaloisInsertion Subgroup.closure SetLike.coe

        closure forms a Galois insertion with the coercion to set.

        Equations
        theorem AddSubgroup.closure_mono {G : Type u_1} [AddGroup G] ⦃h : Set G ⦃k : Set G (h' : h k) :

        Additive subgroup closure of a set is monotone in its argument: if h ⊆ k, then closure h ≤ closure k

        theorem Subgroup.closure_mono {G : Type u_1} [Group G] ⦃h : Set G ⦃k : Set G (h' : h k) :

        Subgroup closure of a set is monotone in its argument: if h ⊆ k, then closure h ≤ closure k.

        @[simp]

        Additive closure of an additive subgroup K equals K

        @[simp]
        theorem Subgroup.closure_eq {G : Type u_1} [Group G] (K : Subgroup G) :

        Closure of a subgroup K equals K.

        @[simp]
        @[simp]
        theorem Subgroup.closure_univ {G : Type u_1} [Group G] :
        theorem AddSubgroup.sup_eq_closure {G : Type u_1} [AddGroup G] (H : AddSubgroup G) (H' : AddSubgroup G) :
        H H' = AddSubgroup.closure (H H')
        theorem Subgroup.sup_eq_closure {G : Type u_1} [Group G] (H : Subgroup G) (H' : Subgroup G) :
        H H' = Subgroup.closure (H H')
        theorem AddSubgroup.closure_iUnion {G : Type u_1} [AddGroup G] {ι : Sort u_5} (s : ιSet G) :
        AddSubgroup.closure (⋃ (i : ι), s i) = ⨆ (i : ι), AddSubgroup.closure (s i)
        theorem Subgroup.closure_iUnion {G : Type u_1} [Group G] {ι : Sort u_5} (s : ιSet G) :
        Subgroup.closure (⋃ (i : ι), s i) = ⨆ (i : ι), Subgroup.closure (s i)
        @[simp]
        @[simp]
        theorem Subgroup.closure_eq_bot_iff {G : Type u_1} [Group G] {k : Set G} :
        theorem AddSubgroup.iSup_eq_closure {G : Type u_1} [AddGroup G] {ι : Sort u_5} (p : ιAddSubgroup G) :
        ⨆ (i : ι), p i = AddSubgroup.closure (⋃ (i : ι), (p i))
        theorem Subgroup.iSup_eq_closure {G : Type u_1} [Group G] {ι : Sort u_5} (p : ιSubgroup G) :
        ⨆ (i : ι), p i = Subgroup.closure (⋃ (i : ι), (p i))
        theorem AddSubgroup.mem_closure_singleton {G : Type u_1} [AddGroup G] {x : G} {y : G} :
        y AddSubgroup.closure {x} ∃ (n : ), n x = y

        The AddSubgroup generated by an element of an AddGroup equals the set of natural number multiples of the element.

        abbrev AddSubgroup.mem_closure_singleton.match_1 {G : Type u_1} [AddGroup G] {x : G} {y : G} (motive : (∃ (n : ), n x = y)Prop) :
        ∀ (x_1 : ∃ (n : ), n x = y), (∀ (n : ) (hn : n x = y), motive )motive x_1
        Equations
        • =
        theorem Subgroup.mem_closure_singleton {G : Type u_1} [Group G] {x : G} {y : G} :
        y Subgroup.closure {x} ∃ (n : ), x ^ n = y

        The subgroup generated by an element of a group equals the set of integer number powers of the element.

        theorem AddSubgroup.mem_iSup_of_directed {G : Type u_1} [AddGroup G] {ι : Sort u_5} [hι : Nonempty ι] {K : ιAddSubgroup G} (hK : Directed (fun (x x_1 : AddSubgroup G) => x x_1) K) {x : G} :
        x iSup K ∃ (i : ι), x K i
        abbrev AddSubgroup.mem_iSup_of_directed.match_1 {G : Type u_2} [AddGroup G] {ι : Sort u_1} {K : ιAddSubgroup G} {x : G} (motive : (∃ (i : ι), x K i)Prop) :
        ∀ (x_1 : ∃ (i : ι), x K i), (∀ (i : ι) (hi : x K i), motive )motive x_1
        Equations
        • =
        theorem Subgroup.mem_iSup_of_directed {G : Type u_1} [Group G] {ι : Sort u_5} [hι : Nonempty ι] {K : ιSubgroup G} (hK : Directed (fun (x x_1 : Subgroup G) => x x_1) K) {x : G} :
        x iSup K ∃ (i : ι), x K i
        theorem AddSubgroup.coe_iSup_of_directed {G : Type u_1} [AddGroup G] {ι : Sort u_5} [Nonempty ι] {S : ιAddSubgroup G} (hS : Directed (fun (x x_1 : AddSubgroup G) => x x_1) S) :
        (⨆ (i : ι), S i) = ⋃ (i : ι), (S i)
        theorem Subgroup.coe_iSup_of_directed {G : Type u_1} [Group G] {ι : Sort u_5} [Nonempty ι] {S : ιSubgroup G} (hS : Directed (fun (x x_1 : Subgroup G) => x x_1) S) :
        (⨆ (i : ι), S i) = ⋃ (i : ι), (S i)
        theorem AddSubgroup.mem_sSup_of_directedOn {G : Type u_1} [AddGroup G] {K : Set (AddSubgroup G)} (Kne : Set.Nonempty K) (hK : DirectedOn (fun (x x_1 : AddSubgroup G) => x x_1) K) {x : G} :
        x sSup K ∃ s ∈ K, x s
        theorem Subgroup.mem_sSup_of_directedOn {G : Type u_1} [Group G] {K : Set (Subgroup G)} (Kne : Set.Nonempty K) (hK : DirectedOn (fun (x x_1 : Subgroup G) => x x_1) K) {x : G} :
        x sSup K ∃ s ∈ K, x s
        theorem AddSubgroup.comap.proof_3 {G : Type u_1} [AddGroup G] {N : Type u_2} [AddGroup N] (f : G →+ N) (H : AddSubgroup N) :
        0 (AddSubmonoid.comap f H.toAddSubmonoid).carrier
        theorem AddSubgroup.comap.proof_1 {G : Type u_2} [AddGroup G] {N : Type u_1} [AddGroup N] :
        theorem AddSubgroup.comap.proof_4 {G : Type u_1} [AddGroup G] {N : Type u_2} [AddGroup N] (f : G →+ N) (H : AddSubgroup N) {a : G} (ha : a { toAddSubsemigroup := { carrier := f ⁻¹' H, add_mem' := }, zero_mem' := }.carrier) :
        f (-a) H
        def AddSubgroup.comap {G : Type u_1} [AddGroup G] {N : Type u_7} [AddGroup N] (f : G →+ N) (H : AddSubgroup N) :

        The preimage of an AddSubgroup along an AddMonoid homomorphism is an AddSubgroup.

        Equations
        Instances For
        theorem AddSubgroup.comap.proof_2 {G : Type u_1} [AddGroup G] {N : Type u_2} [AddGroup N] (f : G →+ N) (H : AddSubgroup N) :
        ∀ {a b : G}, a (AddSubmonoid.comap f H.toAddSubmonoid).carrierb (AddSubmonoid.comap f H.toAddSubmonoid).carriera + b (AddSubmonoid.comap f H.toAddSubmonoid).carrier
        def Subgroup.comap {G : Type u_1} [Group G] {N : Type u_7} [Group N] (f : G →* N) (H : Subgroup N) :

        The preimage of a subgroup along a monoid homomorphism is a subgroup.

        Equations
        • Subgroup.comap f H = let __src := Submonoid.comap f H.toSubmonoid; { toSubmonoid := { toSubsemigroup := { carrier := f ⁻¹' H, mul_mem' := }, one_mem' := }, inv_mem' := }
        Instances For
        @[simp]
        theorem AddSubgroup.coe_comap {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (K : AddSubgroup N) (f : G →+ N) :
        (AddSubgroup.comap f K) = f ⁻¹' K
        @[simp]
        theorem Subgroup.coe_comap {G : Type u_1} [Group G] {N : Type u_5} [Group N] (K : Subgroup N) (f : G →* N) :
        (Subgroup.comap f K) = f ⁻¹' K
        @[simp]
        theorem Subgroup.toAddSubgroup_comap {G : Type u_1} [Group G] {G₂ : Type u_7} [Group G₂] (f : G →* G₂) (s : Subgroup G₂) :
        AddSubgroup.comap (MonoidHom.toAdditive f) (Subgroup.toAddSubgroup s) = Subgroup.toAddSubgroup (Subgroup.comap f s)
        @[simp]
        theorem AddSubgroup.toSubgroup_comap {A : Type u_7} {A₂ : Type u_8} [AddGroup A] [AddGroup A₂] (f : A →+ A₂) (s : AddSubgroup A₂) :
        Subgroup.comap (AddMonoidHom.toMultiplicative f) (AddSubgroup.toSubgroup s) = AddSubgroup.toSubgroup (AddSubgroup.comap f s)
        @[simp]
        theorem AddSubgroup.mem_comap {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {K : AddSubgroup N} {f : G →+ N} {x : G} :
        @[simp]
        theorem Subgroup.mem_comap {G : Type u_1} [Group G] {N : Type u_5} [Group N] {K : Subgroup N} {f : G →* N} {x : G} :
        theorem AddSubgroup.comap_mono {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G →+ N} {K : AddSubgroup N} {K' : AddSubgroup N} :
        theorem Subgroup.comap_mono {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G →* N} {K : Subgroup N} {K' : Subgroup N} :
        theorem AddSubgroup.comap_comap {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {P : Type u_6} [AddGroup P] (K : AddSubgroup P) (g : N →+ P) (f : G →+ N) :
        theorem Subgroup.comap_comap {G : Type u_1} [Group G] {N : Type u_5} [Group N] {P : Type u_6} [Group P] (K : Subgroup P) (g : N →* P) (f : G →* N) :
        @[simp]
        theorem Subgroup.comap_id {N : Type u_5} [Group N] (K : Subgroup N) :
        def AddSubgroup.map {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) (H : AddSubgroup G) :

        The image of an AddSubgroup along an AddMonoid homomorphism is an AddSubgroup.

        Equations
        • AddSubgroup.map f H = let __src := AddSubmonoid.map f H.toAddSubmonoid; { toAddSubmonoid := { toAddSubsemigroup := { carrier := f '' H, add_mem' := }, zero_mem' := }, neg_mem' := }
        Instances For
        theorem AddSubgroup.map.proof_1 {G : Type u_2} [AddGroup G] {N : Type u_1} [AddGroup N] :
        theorem AddSubgroup.map.proof_4 {G : Type u_2} [AddGroup G] {N : Type u_1} [AddGroup N] (f : G →+ N) (H : AddSubgroup G) :
        ∀ {x : N}, x { toAddSubsemigroup := { carrier := f '' H, add_mem' := }, zero_mem' := }.carrier-x { toAddSubsemigroup := { carrier := f '' H, add_mem' := }, zero_mem' := }.carrier
        theorem AddSubgroup.map.proof_3 {G : Type u_2} [AddGroup G] {N : Type u_1} [AddGroup N] (f : G →+ N) (H : AddSubgroup G) :
        0 (AddSubmonoid.map f H.toAddSubmonoid).carrier
        theorem AddSubgroup.map.proof_2 {G : Type u_2} [AddGroup G] {N : Type u_1} [AddGroup N] (f : G →+ N) (H : AddSubgroup G) :
        ∀ {a b : N}, a (AddSubmonoid.map f H.toAddSubmonoid).carrierb (AddSubmonoid.map f H.toAddSubmonoid).carriera + b (AddSubmonoid.map f H.toAddSubmonoid).carrier
        def Subgroup.map {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) (H : Subgroup G) :

        The image of a subgroup along a monoid homomorphism is a subgroup.

        Equations
        • Subgroup.map f H = let __src := Submonoid.map f H.toSubmonoid; { toSubmonoid := { toSubsemigroup := { carrier := f '' H, mul_mem' := }, one_mem' := }, inv_mem' := }
        Instances For
        @[simp]
        theorem AddSubgroup.coe_map {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) (K : AddSubgroup G) :
        (AddSubgroup.map f K) = f '' K
        @[simp]
        theorem Subgroup.coe_map {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) (K : Subgroup G) :
        (Subgroup.map f K) = f '' K
        @[simp]
        theorem AddSubgroup.mem_map {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G →+ N} {K : AddSubgroup G} {y : N} :
        y AddSubgroup.map f K ∃ x ∈ K, f x = y
        @[simp]
        theorem Subgroup.mem_map {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G →* N} {K : Subgroup G} {y : N} :
        y Subgroup.map f K ∃ x ∈ K, f x = y
        theorem AddSubgroup.mem_map_of_mem {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) {K : AddSubgroup G} {x : G} (hx : x K) :
        theorem Subgroup.mem_map_of_mem {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) {K : Subgroup G} {x : G} (hx : x K) :
        theorem AddSubgroup.apply_coe_mem_map {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) (K : AddSubgroup G) (x : K) :
        f x AddSubgroup.map f K
        theorem Subgroup.apply_coe_mem_map {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) (K : Subgroup G) (x : K) :
        f x Subgroup.map f K
        theorem AddSubgroup.map_mono {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G →+ N} {K : AddSubgroup G} {K' : AddSubgroup G} :
        theorem Subgroup.map_mono {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G →* N} {K : Subgroup G} {K' : Subgroup G} :
        K K'Subgroup.map f K Subgroup.map f K'
        @[simp]
        @[simp]
        theorem Subgroup.map_id {G : Type u_1} [Group G] (K : Subgroup G) :
        theorem AddSubgroup.map_map {G : Type u_1} [AddGroup G] (K : AddSubgroup G) {N : Type u_5} [AddGroup N] {P : Type u_6} [AddGroup P] (g : N →+ P) (f : G →+ N) :
        theorem Subgroup.map_map {G : Type u_1} [Group G] (K : Subgroup G) {N : Type u_5} [Group N] {P : Type u_6} [Group P] (g : N →* P) (f : G →* N) :
        @[simp]
        theorem AddSubgroup.map_zero_eq_bot {G : Type u_1} [AddGroup G] (K : AddSubgroup G) {N : Type u_5} [AddGroup N] :
        @[simp]
        theorem Subgroup.map_one_eq_bot {G : Type u_1} [Group G] (K : Subgroup G) {N : Type u_5} [Group N] :
        theorem AddSubgroup.mem_map_equiv {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G ≃+ N} {K : AddSubgroup G} {x : N} :
        theorem Subgroup.mem_map_equiv {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G ≃* N} {K : Subgroup G} {x : N} :
        @[simp]
        theorem AddSubgroup.mem_map_iff_mem {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G →+ N} (hf : Function.Injective f) {K : AddSubgroup G} {x : G} :
        @[simp]
        theorem Subgroup.mem_map_iff_mem {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G →* N} (hf : Function.Injective f) {K : Subgroup G} {x : G} :
        f x Subgroup.map f K x K
        theorem AddSubgroup.map_equiv_eq_comap_symm {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G ≃+ N) (K : AddSubgroup G) :
        theorem Subgroup.map_equiv_eq_comap_symm {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G ≃* N) (K : Subgroup G) :
        theorem AddSubgroup.comap_equiv_eq_map_symm {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : N ≃+ G) (K : AddSubgroup G) :
        theorem Subgroup.comap_equiv_eq_map_symm {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : N ≃* G) (K : Subgroup G) :
        theorem AddSubgroup.map_symm_eq_iff_map_eq {G : Type u_1} [AddGroup G] (K : AddSubgroup G) {N : Type u_5} [AddGroup N] {H : AddSubgroup N} {e : G ≃+ N} :
        theorem Subgroup.map_symm_eq_iff_map_eq {G : Type u_1} [Group G] (K : Subgroup G) {N : Type u_5} [Group N] {H : Subgroup N} {e : G ≃* N} :
        Subgroup.map ((MulEquiv.symm e)) H = K Subgroup.map (e) K = H
        theorem AddSubgroup.map_le_iff_le_comap {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G →+ N} {K : AddSubgroup G} {H : AddSubgroup N} :
        theorem Subgroup.map_le_iff_le_comap {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G →* N} {K : Subgroup G} {H : Subgroup N} :
        theorem Subgroup.gc_map_comap {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) :
        theorem AddSubgroup.map_sup {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) (K : AddSubgroup G) (f : G →+ N) :
        theorem Subgroup.map_sup {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) (K : Subgroup G) (f : G →* N) :
        theorem AddSubgroup.map_iSup {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {ι : Sort u_7} (f : G →+ N) (s : ιAddSubgroup G) :
        AddSubgroup.map f (iSup s) = ⨆ (i : ι), AddSubgroup.map f (s i)
        theorem Subgroup.map_iSup {G : Type u_1} [Group G] {N : Type u_5} [Group N] {ι : Sort u_7} (f : G →* N) (s : ιSubgroup G) :
        Subgroup.map f (iSup s) = ⨆ (i : ι), Subgroup.map f (s i)
        theorem Subgroup.comap_sup_comap_le {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup N) (K : Subgroup N) (f : G →* N) :
        theorem AddSubgroup.iSup_comap_le {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {ι : Sort u_7} (f : G →+ N) (s : ιAddSubgroup N) :
        ⨆ (i : ι), AddSubgroup.comap f (s i) AddSubgroup.comap f (iSup s)
        theorem Subgroup.iSup_comap_le {G : Type u_1} [Group G] {N : Type u_5} [Group N] {ι : Sort u_7} (f : G →* N) (s : ιSubgroup N) :
        ⨆ (i : ι), Subgroup.comap f (s i) Subgroup.comap f (iSup s)
        theorem AddSubgroup.comap_inf {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup N) (K : AddSubgroup N) (f : G →+ N) :
        theorem Subgroup.comap_inf {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup N) (K : Subgroup N) (f : G →* N) :
        theorem AddSubgroup.comap_iInf {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {ι : Sort u_7} (f : G →+ N) (s : ιAddSubgroup N) :
        AddSubgroup.comap f (iInf s) = ⨅ (i : ι), AddSubgroup.comap f (s i)
        theorem Subgroup.comap_iInf {G : Type u_1} [Group G] {N : Type u_5} [Group N] {ι : Sort u_7} (f : G →* N) (s : ιSubgroup N) :
        Subgroup.comap f (iInf s) = ⨅ (i : ι), Subgroup.comap f (s i)
        theorem AddSubgroup.map_inf_le {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) (K : AddSubgroup G) (f : G →+ N) :
        theorem Subgroup.map_inf_le {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) (K : Subgroup G) (f : G →* N) :
        theorem AddSubgroup.map_inf_eq {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) (K : AddSubgroup G) (f : G →+ N) (hf : Function.Injective f) :
        theorem Subgroup.map_inf_eq {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) (K : Subgroup G) (f : G →* N) (hf : Function.Injective f) :
        @[simp]
        theorem AddSubgroup.map_bot {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) :
        @[simp]
        theorem Subgroup.map_bot {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) :
        @[simp]
        theorem AddSubgroup.map_top_of_surjective {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) (h : Function.Surjective f) :
        @[simp]
        theorem Subgroup.map_top_of_surjective {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) (h : Function.Surjective f) :
        @[simp]
        theorem AddSubgroup.comap_top {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) :
        @[simp]
        theorem Subgroup.comap_top {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) :

        If H ≤ K, then H as a subgroup of K is isomorphic to H.

        Equations
        • One or more equations did not get rendered due to their size.
        theorem AddSubgroup.addSubgroupOfEquivOfLe.proof_4 {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} (h : H K) (_g : (AddSubgroup.addSubgroupOf H K)) :
        (fun (g : H) => { val := { val := g, property := }, property := }) ((fun (g : (AddSubgroup.addSubgroupOf H K)) => { val := g, property := }) _g) = _g
        theorem AddSubgroup.addSubgroupOfEquivOfLe.proof_2 {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} (h : H K) (g : H) :
        g K
        theorem AddSubgroup.addSubgroupOfEquivOfLe.proof_3 {G : Type u_1} [AddGroup G] {H : AddSubgroup G} (g : H) :
        g H
        theorem AddSubgroup.addSubgroupOfEquivOfLe.proof_5 {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} (h : H K) (_g : H) :
        (fun (g : (AddSubgroup.addSubgroupOf H K)) => { val := g, property := }) ((fun (g : H) => { val := { val := g, property := }, property := }) _g) = _g
        theorem AddSubgroup.addSubgroupOfEquivOfLe.proof_6 {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} (h : H K) (_g : (AddSubgroup.addSubgroupOf H K)) (_h : (AddSubgroup.addSubgroupOf H K)) :
        { toFun := fun (g : (AddSubgroup.addSubgroupOf H K)) => { val := g, property := }, invFun := fun (g : H) => { val := { val := g, property := }, property := }, left_inv := , right_inv := }.toFun (_g + _h) = { toFun := fun (g : (AddSubgroup.addSubgroupOf H K)) => { val := g, property := }, invFun := fun (g : H) => { val := { val := g, property := }, property := }, left_inv := , right_inv := }.toFun (_g + _h)
        @[simp]
        @[simp]
        @[simp]
        theorem Subgroup.subgroupOfEquivOfLe_symm_apply_coe_coe {G : Type u_7} [Group G] {H : Subgroup G} {K : Subgroup G} (h : H K) (g : H) :
        @[simp]
        theorem Subgroup.subgroupOfEquivOfLe_apply_coe {G : Type u_7} [Group G] {H : Subgroup G} {K : Subgroup G} (h : H K) (g : (Subgroup.subgroupOf H K)) :
        ((Subgroup.subgroupOfEquivOfLe h) g) = g
        def Subgroup.subgroupOfEquivOfLe {G : Type u_7} [Group G] {H : Subgroup G} {K : Subgroup G} (h : H K) :

        If H ≤ K, then H as a subgroup of K is isomorphic to H.

        Equations
        • One or more equations did not get rendered due to their size.
        @[simp]
        theorem Subgroup.comap_inclusion_subgroupOf {G : Type u_1} [Group G] {K₁ : Subgroup G} {K₂ : Subgroup G} (h : K₁ K₂) (H : Subgroup G) :
        theorem Subgroup.coe_subgroupOf {G : Type u_1} [Group G] (H : Subgroup G) (K : Subgroup G) :
        theorem AddSubgroup.mem_addSubgroupOf {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} {h : K} :
        theorem Subgroup.mem_subgroupOf {G : Type u_1} [Group G] {H : Subgroup G} {K : Subgroup G} {h : K} :
        @[simp]
        @[simp]
        @[simp]
        @[simp]
        theorem AddSubgroup.addSubgroupOf_inj {G : Type u_1} [AddGroup G] {H₁ : AddSubgroup G} {H₂ : AddSubgroup G} {K : AddSubgroup G} :
        @[simp]
        theorem Subgroup.subgroupOf_inj {G : Type u_1} [Group G] {H₁ : Subgroup G} {H₂ : Subgroup G} {K : Subgroup G} :
        Subgroup.subgroupOf H₁ K = Subgroup.subgroupOf H₂ K H₁ K = H₂ K
        @[simp]
        @[simp]
        theorem Subgroup.subgroupOf_eq_top {G : Type u_1} [Group G] {H : Subgroup G} {K : Subgroup G} :
        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 AddSubgroup.prod.proof_1 {G : Type u_1} [AddGroup G] {N : Type u_2} [AddGroup N] (H : AddSubgroup G) (K : AddSubgroup N) :
        ∀ {x : G × N}, x (AddSubmonoid.prod H.toAddSubmonoid K.toAddSubmonoid).carrier(-x).1 H.toAddSubmonoid (-x).2 K.toAddSubmonoid
        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
        theorem AddSubgroup.coe_prod {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) (K : AddSubgroup N) :
        (AddSubgroup.prod H K) = H ×ˢ K
        theorem Subgroup.coe_prod {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) (K : Subgroup N) :
        (Subgroup.prod H K) = H ×ˢ 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 AddSubgroup.prod H K p.1 H p.2 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 Subgroup.prod H K p.1 H p.2 K
        theorem AddSubgroup.prod_mono {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] :
        ((fun (x x_1 : AddSubgroup G) => x x_1) (fun (x x_1 : AddSubgroup N) => x x_1) fun (x x_1 : AddSubgroup (G × N)) => x x_1) AddSubgroup.prod AddSubgroup.prod
        theorem Subgroup.prod_mono {G : Type u_1} [Group G] {N : Type u_5} [Group N] :
        ((fun (x x_1 : Subgroup G) => x x_1) (fun (x x_1 : Subgroup N) => x x_1) fun (x x_1 : Subgroup (G × N)) => x x_1) Subgroup.prod Subgroup.prod
        theorem AddSubgroup.prod_mono_right {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (K : AddSubgroup G) :
        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) => Subgroup.prod K t
        theorem AddSubgroup.prod_mono_left {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup N) :
        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) => Subgroup.prod K H
        theorem Subgroup.prod_top {G : Type u_1} [Group G] {N : Type u_5} [Group N] (K : Subgroup G) :
        theorem Subgroup.top_prod {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup N) :
        @[simp]
        @[simp]
        theorem Subgroup.top_prod_top {G : Type u_1} [Group G] {N : Type u_5} [Group N] :
        theorem Subgroup.bot_prod_bot {G : Type u_1} [Group G] {N : Type u_5} [Group 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)} :
        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)} :
        @[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} :
        @[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} :
        theorem AddSubgroup.prodEquiv.proof_1 {G : Type u_1} [AddGroup G] {N : Type u_2} [AddGroup N] (H : AddSubgroup G) (K : AddSubgroup N) :
        ∀ (x x_1 : (AddSubgroup.prod H K)), (Equiv.Set.prod H K).toFun (x + x_1) = (Equiv.Set.prod H K).toFun (x + x_1)
        def AddSubgroup.prodEquiv {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) (K : AddSubgroup N) :
        (AddSubgroup.prod H K) ≃+ H × K

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

        Equations
        def Subgroup.prodEquiv {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) (K : Subgroup N) :
        (Subgroup.prod H K) ≃* H × K

        Product of subgroups is isomorphic to their product as groups.

        Equations
        def AddSubmonoid.pi {η : Type u_7} {f : ηType u_8} [(i : η) → AddZeroClass (f i)] (I : Set η) (s : (i : η) → AddSubmonoid (f i)) :
        AddSubmonoid ((i : η) → f i)

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

        Equations
        • AddSubmonoid.pi I s = { toAddSubsemigroup := { carrier := Set.pi I fun (i : η) => (s i).carrier, add_mem' := }, zero_mem' := }
        theorem AddSubmonoid.pi.proof_2 {η : Type u_1} {f : ηType u_2} [(i : η) → AddZeroClass (f i)] (I : Set η) (s : (i : η) → AddSubmonoid (f i)) (i : η) :
        i I0 s i
        theorem AddSubmonoid.pi.proof_1 {η : Type u_1} {f : ηType u_2} [(i : η) → AddZeroClass (f i)] (I : Set η) (s : (i : η) → AddSubmonoid (f i)) :
        ∀ {a b : (i : η) → f i}, (a Set.pi I fun (i : η) => (s i).carrier)(b Set.pi I fun (i : η) => (s i).carrier)iI, a i + b i s i
        def Submonoid.pi {η : Type u_7} {f : ηType u_8} [(i : η) → MulOneClass (f i)] (I : Set η) (s : (i : η) → Submonoid (f i)) :
        Submonoid ((i : η) → f i)

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

        Equations
        • Submonoid.pi I s = { toSubsemigroup := { carrier := Set.pi I fun (i : η) => (s i).carrier, mul_mem' := }, one_mem' := }
        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
        theorem AddSubgroup.pi.proof_1 {η : Type u_1} {f : ηType u_2} [(i : η) → AddGroup (f i)] (I : Set η) (H : (i : η) → AddSubgroup (f i)) :
        ∀ {x : (i : η) → f i}, x (AddSubmonoid.pi I fun (i : η) => (H i).toAddSubmonoid).carrieriI, -x i H i
        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
        • Subgroup.pi I H = let __src := Submonoid.pi I fun (i : η) => (H i).toSubmonoid; { toSubmonoid := __src, inv_mem' := }
        theorem AddSubgroup.coe_pi {η : Type u_7} {f : ηType u_8} [(i : η) → AddGroup (f i)] (I : Set η) (H : (i : η) → AddSubgroup (f i)) :
        (AddSubgroup.pi I H) = Set.pi I fun (i : η) => (H i)
        theorem Subgroup.coe_pi {η : Type u_7} {f : ηType u_8} [(i : η) → Group (f i)] (I : Set η) (H : (i : η) → Subgroup (f i)) :
        (Subgroup.pi I H) = Set.pi I fun (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 AddSubgroup.pi I H iI, p 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 Subgroup.pi I H iI, p i H i
        theorem AddSubgroup.pi_top {η : Type u_7} {f : ηType u_8} [(i : η) → AddGroup (f i)] (I : Set η) :
        (AddSubgroup.pi I fun (i : η) => ) =
        theorem Subgroup.pi_top {η : Type u_7} {f : ηType u_8} [(i : η) → Group (f i)] (I : Set η) :
        (Subgroup.pi I fun (i : η) => ) =
        theorem AddSubgroup.pi_empty {η : Type u_7} {f : ηType u_8} [(i : η) → AddGroup (f i)] (H : (i : η) → AddSubgroup (f i)) :
        theorem Subgroup.pi_empty {η : Type u_7} {f : ηType u_8} [(i : η) → Group (f i)] (H : (i : η) → Subgroup (f i)) :
        theorem AddSubgroup.pi_bot {η : Type u_7} {f : ηType u_8} [(i : η) → AddGroup (f i)] :
        (AddSubgroup.pi Set.univ fun (i : η) => ) =
        theorem Subgroup.pi_bot {η : Type u_7} {f : ηType u_8} [(i : η) → Group (f i)] :
        (Subgroup.pi Set.univ fun (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)} :
        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 Subgroup.pi I H iI, Subgroup.map (Pi.evalMonoidHom f i) J 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 AddSubgroup.pi I H i Ix 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 Subgroup.pi I H i Ix H i
        theorem AddSubgroup.pi_eq_bot_iff {η : Type u_7} {f : ηType u_8} [(i : η) → AddGroup (f i)] (H : (i : η) → AddSubgroup (f i)) :
        AddSubgroup.pi Set.univ H = ∀ (i : η), H i =
        theorem Subgroup.pi_eq_bot_iff {η : Type u_7} {f : ηType u_8} [(i : η) → Group (f i)] (H : (i : η) → Subgroup (f i)) :
        Subgroup.pi Set.univ H = ∀ (i : η), H i =
        Equations
        • =
        Equations
        • =
        theorem AddSubgroup.Normal.mem_comm {G : Type u_1} [AddGroup G] {H : AddSubgroup G} (nH : AddSubgroup.Normal H) {a : G} {b : G} (h : a + b H) :
        b + a H
        theorem Subgroup.Normal.mem_comm {G : Type u_1} [Group G] {H : Subgroup G} (nH : Subgroup.Normal H) {a : G} {b : G} (h : a * b H) :
        b * a H
        theorem AddSubgroup.Normal.mem_comm_iff {G : Type u_1} [AddGroup G] {H : AddSubgroup G} (nH : AddSubgroup.Normal H) {a : G} {b : G} :
        a + b H b + a H
        theorem Subgroup.Normal.mem_comm_iff {G : Type u_1} [Group G] {H : Subgroup G} (nH : Subgroup.Normal H) {a : G} {b : G} :
        a * b H b * a H
        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
        Equations
        • =

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

        Instances

        The center of an additive group G is the set of elements that commute with everything in G

        Equations
        Instances For
        theorem AddSubgroup.center.proof_1 (G : Type u_1) [AddGroup G] :
        ∀ {a b : G}, a (AddSubmonoid.center G).carrierb (AddSubmonoid.center G).carriera + b (AddSubmonoid.center G).carrier
        def Subgroup.center (G : Type u_1) [Group G] :

        The center of a group G is the set of elements that commute with everything in G

        Equations
        Instances For
        @[simp]
        theorem Subgroup.center_toSubmonoid (G : Type u_1) [Group G] :

        For a group with zero, the center of the units is the same as the units of the center.

        Equations
        • One or more equations did not get rendered due to their size.
        theorem AddSubgroup.mem_center_iff {G : Type u_1} [AddGroup G] {z : G} :
        z AddSubgroup.center G ∀ (g : G), g + z = z + g
        theorem Subgroup.mem_center_iff {G : Type u_1} [Group G] {z : G} :
        z Subgroup.center G ∀ (g : G), g * z = z * g
        instance Subgroup.decidableMemCenter {G : Type u_1} [Group G] (z : G) [Decidable (∀ (g : G), g * z = z * g)] :
        Equations

        A group is commutative if the center is the whole group

        Equations

        The normalizer of H is the largest subgroup of G inside which H is normal.

        Equations
        • One or more equations did not get rendered due to their size.
        theorem AddSubgroup.normalizer.proof_1 {G : Type u_1} [AddGroup G] (H : AddSubgroup G) {a : G} {b : G} (ha : ∀ (n : G), n H a + n + -a H) (hb : ∀ (n : G), n H b + n + -b H) (n : G) :
        n H a + b + n + -(a + b) H
        theorem AddSubgroup.normalizer.proof_2 {G : Type u_1} [AddGroup G] (H : AddSubgroup G) (a : G) :
        a H 0 + a + -0 H
        theorem AddSubgroup.normalizer.proof_3 {G : Type u_1} [AddGroup G] (H : AddSubgroup G) {a : G} (ha : ∀ (n : G), n H a + n + -a H) (n : G) :
        n H -a + n + - -a H
        def Subgroup.normalizer {G : Type u_1} [Group G] (H : Subgroup G) :

        The normalizer of H is the largest subgroup of G inside which H is normal.

        Equations
        • Subgroup.normalizer H = { toSubmonoid := { toSubsemigroup := { carrier := {g : G | ∀ (n : G), n H g * n * g⁻¹ H}, mul_mem' := }, one_mem' := }, inv_mem' := }
        theorem AddSubgroup.setNormalizer.proof_3 {G : Type u_1} [AddGroup G] (S : Set G) {a : G} (ha : ∀ (n : G), n S a + n + -a S) (n : G) :
        n S -a + n + - -a S
        theorem AddSubgroup.setNormalizer.proof_2 {G : Type u_1} [AddGroup G] (S : Set G) (a : G) :
        a S 0 + a + -0 S

        The setNormalizer of S is the subgroup of G whose elements satisfy g+S-g=S.

        Equations
        • One or more equations did not get rendered due to their size.
        theorem AddSubgroup.setNormalizer.proof_1 {G : Type u_1} [AddGroup G] (S : Set G) {a : G} {b : G} (ha : ∀ (n : G), n S a + n + -a S) (hb : ∀ (n : G), n S b + n + -b S) (n : G) :
        n S a + b + n + -(a + b) S
        def Subgroup.setNormalizer {G : Type u_1} [Group G] (S : Set G) :

        The setNormalizer of S is the subgroup of G whose elements satisfy g*S*g⁻¹=S

        Equations
        theorem AddSubgroup.mem_normalizer_iff {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {g : G} :
        g AddSubgroup.normalizer H ∀ (h : G), h H g + h + -g H
        theorem Subgroup.mem_normalizer_iff {G : Type u_1} [Group G] {H : Subgroup G} {g : G} :
        g Subgroup.normalizer H ∀ (h : G), h H g * h * g⁻¹ H
        theorem AddSubgroup.mem_normalizer_iff'' {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {g : G} :
        g AddSubgroup.normalizer H ∀ (h : G), h H -g + h + g H
        theorem Subgroup.mem_normalizer_iff'' {G : Type u_1} [Group G] {H : Subgroup G} {g : G} :
        g Subgroup.normalizer H ∀ (h : G), h H g⁻¹ * h * g H
        theorem AddSubgroup.mem_normalizer_iff' {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {g : G} :
        g AddSubgroup.normalizer H ∀ (n : G), n + g H g + n H
        theorem Subgroup.mem_normalizer_iff' {G : Type u_1} [Group G] {H : Subgroup G} {g : G} :
        g Subgroup.normalizer H ∀ (n : G), n * g H g * n H

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

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

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

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

        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

        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.

        In a group that satisfies the normalizer condition, every maximal subgroup is normal

        theorem AddSubgroup.centralizer.proof_1 {G : Type u_1} [AddGroup G] (s : Set G) :
        ∀ {a b : G}, a (AddSubmonoid.centralizer s).carrierb (AddSubmonoid.centralizer s).carriera + b (AddSubmonoid.centralizer s).carrier
        def AddSubgroup.centralizer {G : Type u_1} [AddGroup G] (s : Set G) :

        The centralizer of H is the additive subgroup of g : G commuting with every h : H.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
        def Subgroup.centralizer {G : Type u_1} [Group G] (s : Set G) :

        The centralizer of H is the subgroup of g : G commuting with every h : H.

        Equations
        Instances For
        theorem AddSubgroup.mem_centralizer_iff {G : Type u_1} [AddGroup G] {g : G} {s : Set G} :
        g AddSubgroup.centralizer s hs, h + g = g + h
        theorem Subgroup.mem_centralizer_iff {G : Type u_1} [Group G] {g : G} {s : Set G} :
        g Subgroup.centralizer s hs, h * g = g * h
        theorem AddSubgroup.mem_centralizer_iff_commutator_eq_zero {G : Type u_1} [AddGroup G] {g : G} {s : Set G} :
        g AddSubgroup.centralizer s hs, h + g + -h + -g = 0
        theorem Subgroup.mem_centralizer_iff_commutator_eq_one {G : Type u_1} [Group G] {g : G} {s : Set G} :
        g Subgroup.centralizer s hs, h * g * h⁻¹ * g⁻¹ = 1
        theorem Subgroup.centralizer_le {G : Type u_1} [Group G] {s : Set G} {t : Set G} (h : s t) :
        class Subgroup.IsCommutative {G : Type u_1} [Group G] (H : Subgroup G) :

        Commutativity of a subgroup

        Instances

        Commutativity of an additive subgroup

        Instances
        theorem AddSubgroup.IsCommutative.addCommGroup.proof_1 {G : Type u_1} [AddGroup G] (H : AddSubgroup G) [h : AddSubgroup.IsCommutative H] (a : H) (b : H) :
        a + b = b + a

        A commutative subgroup is commutative.

        Equations

        A commutative subgroup is commutative.

        Equations
        Equations
        • =
        instance Subgroup.map_isCommutative {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] (H : Subgroup G) (f : G →* G') [Subgroup.IsCommutative H] :
        Equations
        • =
        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
        theorem Group.mem_conjugatesOfSet_iff {G : Type u_1} [Group G] {s : Set G} {x : G} :
        x Group.conjugatesOfSet s ∃ a ∈ s, IsConj a x
        theorem Group.conjugates_subset_normal {G : Type u_1} [Group G] {N : Subgroup G} [tn : Subgroup.Normal N] {a : G} (h : a N) :
        theorem Group.conjugatesOfSet_subset {G : Type u_1} [Group G] {s : Set G} {N : Subgroup G} [Subgroup.Normal N] (h : s N) :
        theorem Group.conj_mem_conjugatesOfSet {G : Type u_1} [Group G] {s : Set G} {x : G} {c : G} :

        The set of conjugates of s is closed under 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 s is a normal subgroup.

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

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

        theorem Subgroup.normalClosure_eq_iInf {G : Type u_1} [Group G] {s : Set G} :
        Subgroup.normalClosure s = ⨅ (N : Subgroup G), ⨅ (_ : Subgroup.Normal N), ⨅ (_ : s N), N
        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
        • Subgroup.normalCore H = { toSubmonoid := { toSubsemigroup := { carrier := {a : G | ∀ (b : G), b * a * b⁻¹ H}, mul_mem' := }, one_mem' := }, inv_mem' := }
        Instances For
        Equations
        • =
        theorem Subgroup.normalCore_eq_iSup {G : Type u_1} [Group G] (H : Subgroup G) :
        Subgroup.normalCore H = ⨆ (N : Subgroup G), ⨆ (_ : Subgroup.Normal N), ⨆ (_ : N H), N
        theorem AddMonoidHom.range.proof_1 {G : Type u_2} [AddGroup G] {N : Type u_1} [AddGroup N] (f : G →+ N) :
        Set.range f = f '' Set.univ
        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
        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
        @[simp]
        theorem AddMonoidHom.coe_range {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) :
        @[simp]
        theorem MonoidHom.coe_range {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) :
        @[simp]
        theorem AddMonoidHom.mem_range {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G →+ N} {y : N} :
        y AddMonoidHom.range f ∃ (x : G), f x = y
        @[simp]
        theorem MonoidHom.mem_range {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G →* N} {y : N} :
        y MonoidHom.range f ∃ (x : G), f x = y
        theorem MonoidHom.range_eq_map {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) :
        @[simp]
        theorem MonoidHom.restrict_range {G : Type u_1} [Group G] {N : Type u_5} [Group N] (K : Subgroup G) (f : G →* N) :
        theorem AddMonoidHom.rangeRestrict.proof_2 {G : Type u_1} [AddGroup G] {N : Type u_2} [AddGroup N] (f : G →+ N) (x : G) :
        ∃ (y : G), f y = f x
        def AddMonoidHom.rangeRestrict {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) :

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

        Equations
        def MonoidHom.rangeRestrict {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) :

        The canonical surjective group homomorphism G →* f(G) induced by a group homomorphism G →* N.

        Equations
        @[simp]
        theorem AddMonoidHom.coe_rangeRestrict {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) (g : G) :
        @[simp]
        theorem MonoidHom.coe_rangeRestrict {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) (g : G) :
        ((MonoidHom.rangeRestrict f) g) = f g
        theorem AddMonoidHom.coe_comp_rangeRestrict {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) :
        Subtype.val (AddMonoidHom.rangeRestrict f) = f
        theorem MonoidHom.coe_comp_rangeRestrict {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) :
        Subtype.val (MonoidHom.rangeRestrict f) = f
        abbrev AddMonoidHom.rangeRestrict_surjective.match_1 {G : Type u_2} [AddGroup G] {N : Type u_1} [AddGroup N] (f : G →+ N) (motive : (AddMonoidHom.range f)Prop) :
        ∀ (x : (AddMonoidHom.range f)), (∀ (g : G), motive { val := f g, property := })motive x
        Equations
        • =
        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.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) :
        @[simp]
        theorem AddMonoidHom.range_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_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_zero {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] :
        @[simp]
        theorem MonoidHom.range_one {G : Type u_1} [Group G] {N : Type u_5} [Group N] :
        @[simp]
        theorem Subgroup.inclusion_range {G : Type u_1} [Group G] {H : Subgroup G} {K : Subgroup 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 : MonoidHom.range f K) :
        @[simp]
        theorem MonoidHom.coe_toAdditive_range {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] (f : G →* G') :
        AddMonoidHom.range (MonoidHom.toAdditive f) = Subgroup.toAddSubgroup (MonoidHom.range f)
        @[simp]
        theorem MonoidHom.coe_toMultiplicative_range {A : Type u_7} {A' : Type u_8} [AddGroup A] [AddGroup A'] (f : A →+ A') :
        MonoidHom.range (AddMonoidHom.toMultiplicative f) = AddSubgroup.toSubgroup (AddMonoidHom.range f)
        theorem AddMonoidHom.ofLeftInverse.proof_1 {G : Type u_2} [AddGroup G] {N : Type u_1} [AddGroup N] {f : G →+ N} {g : N →+ G} (h : Function.LeftInverse g f) :
        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) :

        Computable alternative to AddMonoidHom.ofInjective.

        Equations
        • One or more equations did not get rendered due to their size.
        theorem AddMonoidHom.ofLeftInverse.proof_2 {G : Type u_2} [AddGroup G] {N : Type u_1} [AddGroup N] {f : G →+ N} (x : G) (y : G) :
        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) :

        Computable alternative to MonoidHom.ofInjective.

        Equations
        • One or more equations did not get rendered due to their size.
        @[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) :
        @[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) :
        ((MonoidHom.ofLeftInverse h) x) = f 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 : (AddMonoidHom.range f)) :
        @[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 : (MonoidHom.range f)) :
        theorem AddMonoidHom.ofInjective.proof_3 {G : Type u_1} [AddGroup G] {N : Type u_2} [AddGroup N] {f : G →+ N} (x : G) :
        ∃ (y : G), f y = f x
        noncomputable def AddMonoidHom.ofInjective {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G →+ N} (hf : Function.Injective f) :

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

        Equations
        noncomputable def MonoidHom.ofInjective {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G →* N} (hf : Function.Injective f) :

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

        Equations
        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} :
        ((AddMonoidHom.ofInjective hf) x) = f x
        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} :
        ((MonoidHom.ofInjective hf) x) = f 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 : (AddMonoidHom.range f)) :
        @[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 : (MonoidHom.range f)) :
        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
        theorem AddMonoidHom.ker.proof_2 {G : Type u_2} [AddGroup G] {M : Type u_1} [AddZeroClass M] (f : G →+ M) {x : G} (hx : f x = 0) :
        f (-x) = 0
        theorem AddMonoidHom.ker.proof_1 {G : Type u_2} [AddGroup G] {M : Type u_1} [AddZeroClass M] :
        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
        theorem AddMonoidHom.mem_ker {G : Type u_1} [AddGroup G] {M : Type u_7} [AddZeroClass M] (f : G →+ M) {x : G} :
        theorem MonoidHom.mem_ker {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] (f : G →* M) {x : G} :
        theorem AddMonoidHom.coe_ker {G : Type u_1} [AddGroup G] {M : Type u_7} [AddZeroClass M] (f : G →+ M) :
        (AddMonoidHom.ker f) = f ⁻¹' {0}
        theorem MonoidHom.coe_ker {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] (f : G →* M) :
        (MonoidHom.ker f) = f ⁻¹' {1}
        @[simp]
        theorem AddMonoidHom.eq_iff {G : Type u_1} [AddGroup G] {M : Type u_7} [AddZeroClass M] (f : G →+ M) {x : G} {y : G} :
        f x = f y -y + x AddMonoidHom.ker f
        theorem MonoidHom.eq_iff {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] (f : G →* M) {x : G} {y : G} :
        f x = f y y⁻¹ * x MonoidHom.ker f
        instance AddMonoidHom.decidableMemKer {G : Type u_1} [AddGroup G] {M : Type u_7} [AddZeroClass M] [DecidableEq M] (f : G →+ M) :
        Equations
        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 MonoidHom.ker f
        Equations
        theorem AddMonoidHom.comap_ker {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.comap_ker {G : Type u_1} [Group G] {N : Type u_5} {P : Type u_6} [Group N] [Group P] (g : N →* P) (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.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] {N : Type u_5} [Group N] (K : Subgroup G) (f : G →* N) :
        @[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) :
        @[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) :
        @[simp]
        @[simp]
        theorem AddMonoidHom.ker_zero {G : Type u_1} [AddGroup G] {M : Type u_7} [AddZeroClass M] :
        @[simp]
        theorem MonoidHom.ker_one {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] :
        @[simp]
        theorem MonoidHom.ker_eq_bot_iff {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] (f : G →* M) :
        @[simp]
        theorem Subgroup.ker_inclusion {G : Type u_1} [Group G] {H : Subgroup G} {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) :
        theorem AddMonoidHom.sumMap_comap_sum {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.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.ker_sumMap {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') :
        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') :
        theorem AddMonoidHom.range_le_ker_iff {G : Type u_1} {G' : Type u_2} {G'' : Type u_3} [AddGroup G] [AddGroup G'] [AddGroup G''] (f : G →+ G') (g : G' →+ G'') :
        theorem MonoidHom.range_le_ker_iff {G : Type u_1} {G' : Type u_2} {G'' : Type u_3} [Group G] [Group G'] [Group G''] (f : G →* G') (g : G' →* G'') :
        Equations
        • =
        instance MonoidHom.normal_ker {G : Type u_1} [Group G] {M : Type u_7} [MulOneClass M] (f : G →* M) :
        Equations
        • =
        @[simp]
        theorem MonoidHom.ker_fst {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] :
        @[simp]
        theorem MonoidHom.ker_snd {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] :
        @[simp]
        theorem MonoidHom.coe_toAdditive_ker {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] (f : G →* G') :
        AddMonoidHom.ker (MonoidHom.toAdditive f) = Subgroup.toAddSubgroup (MonoidHom.ker f)
        @[simp]
        theorem MonoidHom.coe_toMultiplicative_ker {A : Type u_8} {A' : Type u_9} [AddGroup A] [AddGroup A'] (f : A →+ A') :
        MonoidHom.ker (AddMonoidHom.toMultiplicative f) = AddSubgroup.toSubgroup (AddMonoidHom.ker f)
        theorem AddMonoidHom.eqLocus.proof_1 {G : Type u_2} [AddGroup G] {M : Type u_1} [AddMonoid M] (f : G →+ M) (g : G →+ M) :
        ∀ {x : G}, f x = g xf (-x) = g (-x)
        def AddMonoidHom.eqLocus {G : Type u_1} [AddGroup G] {M : Type u_7} [AddMonoid M] (f : G →+ M) (g : G →+ M) :

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

        Equations
        def MonoidHom.eqLocus {G : Type u_1} [Group G] {M : Type u_7} [Monoid M] (f : G →* M) (g : G →* M) :

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

        Equations
        @[simp]
        theorem AddMonoidHom.eqLocus_same {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) :
        @[simp]
        theorem MonoidHom.eqLocus_same {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) :
        theorem AddMonoidHom.eqOn_closure {G : Type u_1} [AddGroup G] {M : Type u_7} [AddMonoid M] {f : G →+ M} {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.eqOn_closure {G : Type u_1} [Group G] {M : Type u_7} [Monoid M] {f : G →* M} {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.eq_of_eqOn_top {G : Type u_1} [AddGroup G] {M : Type u_7} [AddMonoid M] {f : G →+ M} {g : G →+ M} (h : Set.EqOn f g ) :
        f = g
        theorem MonoidHom.eq_of_eqOn_top {G : Type u_1} [Group G] {M : Type u_7} [Monoid M] {f : G →* M} {g : G →* M} (h : Set.EqOn f g ) :
        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 →+ M} {g : G →+ M} (h : Set.EqOn (f) (g) s) :
        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 →* M} {g : G →* M} (h : Set.EqOn (f) (g) s) :
        f = g
        theorem MonoidHom.closure_preimage_le {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) (s : Set N) :
        theorem AddMonoidHom.map_closure {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) (s : Set G) :

        The image under an AddMonoid hom of the AddSubgroup generated by a set equals the AddSubgroup generated by the image of the set.

        theorem MonoidHom.map_closure {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) (s : Set G) :

        The image under a monoid homomorphism of the subgroup generated by a set equals the subgroup generated by the image of the set.

        theorem Subgroup.Normal.map {G : Type u_1} [Group G] {N : Type u_5} [Group N] {H : Subgroup G} (h : Subgroup.Normal H) (f : G →* N) (hf : Function.Surjective f) :
        theorem AddSubgroup.map_eq_bot_iff {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) {f : G →+ N} :
        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 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) :
        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) :
        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_le_range {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) (H : Subgroup G) :
        theorem Subgroup.map_subtype_le {G : Type u_1} [Group G] {H : Subgroup G} (K : Subgroup H) :
        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.ker_le_comap {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) (H : Subgroup N) :
        theorem AddSubgroup.map_comap_le {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) (H : AddSubgroup N) :
        theorem Subgroup.map_comap_le {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) (H : Subgroup N) :
        theorem AddSubgroup.le_comap_map {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) (H : AddSubgroup G) :
        theorem Subgroup.le_comap_map {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) (H : Subgroup G) :
        theorem Subgroup.map_comap_eq {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) (H : Subgroup N) :
        theorem Subgroup.comap_map_eq {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) (H : Subgroup G) :
        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 AddMonoidHom.range f) :
        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 MonoidHom.range f) :
        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) :
        theorem Subgroup.comap_le_comap_of_le_range {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G →* N} {K : Subgroup N} {L : Subgroup N} (hf : K MonoidHom.range f) :
        theorem Subgroup.comap_le_comap_of_surjective {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G →* N} {K : Subgroup N} {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 : Subgroup N} {L : Subgroup N} (hf : Function.Surjective f) :
        theorem Subgroup.comap_injective {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G →* N} (h : Function.Surjective f) :
        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 : AddMonoidHom.ker f H) :
        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 : MonoidHom.ker f 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) :
        theorem Subgroup.map_le_map_iff {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G →* N} {H : Subgroup G} {K : Subgroup G} :
        theorem Subgroup.map_le_map_iff' {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G →* N} {H : Subgroup G} {K : Subgroup G} :
        theorem Subgroup.map_eq_map_iff {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G →* N} {H : Subgroup G} {K : Subgroup G} :
        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 : Subgroup G} {K : Subgroup G} :
        @[simp]
        theorem Subgroup.map_injective {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G →* N} (h : Function.Injective f) :
        theorem AddSubgroup.map_eq_comap_of_inverse {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {f : G →+ N} {g : N →+ G} (hl : Function.LeftInverse g f) (hr : Function.RightInverse g f) (H : AddSubgroup G) :
        theorem Subgroup.map_eq_comap_of_inverse {G : Type u_1} [Group G] {N : Type u_5} [Group N] {f : G →* N} {g : N →* G} (hl : Function.LeftInverse g f) (hr : Function.RightInverse g f) (H : Subgroup G) :
        theorem AddSubgroup.map_injective_of_ker_le {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) {H : AddSubgroup G} {K : AddSubgroup G} (hH : AddMonoidHom.ker f H) (hK : AddMonoidHom.ker f K) (hf : AddSubgroup.map f H = AddSubgroup.map f K) :
        H = K

        Given f(A) = f(B), ker f ≤ A, and ker f ≤ B, deduce that A = B.

        theorem Subgroup.map_injective_of_ker_le {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) {H : Subgroup G} {K : Subgroup G} (hH : MonoidHom.ker f H) (hK : MonoidHom.ker f K) (hf : Subgroup.map f H = Subgroup.map f K) :
        H = K

        Given f(A) = f(B), ker f ≤ A, and ker f ≤ B, deduce that A = B.

        theorem Subgroup.comap_sup_eq_of_le_range {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) {H : Subgroup N} {K : Subgroup N} (hH : H MonoidHom.range f) (hK : K MonoidHom.range f) :
        theorem AddSubgroup.comap_sup_eq {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (f : G →+ N) (H : AddSubgroup N) (K : AddSubgroup N) (hf : Function.Surjective f) :
        theorem Subgroup.comap_sup_eq {G : Type u_1} [Group G] {N : Type u_5} [Group N] (f : G →* N) (H : Subgroup N) (K : Subgroup N) (hf : Function.Surjective f) :
        theorem Subgroup.sup_subgroupOf_eq {G : Type u_1} [Group G] {H : Subgroup G} {K : Subgroup G} {L : Subgroup G} (hH : H L) (hK : K L) :
        noncomputable def AddSubgroup.equivMapOfInjective {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) (f : G →+ N) (hf : Function.Injective f) :
        H ≃+ (AddSubgroup.map f H)

        An additive subgroup is isomorphic to its image under an injective function. If you have an isomorphism, use AddEquiv.addSubgroupMap for better definitional equalities.

        Equations
        theorem AddSubgroup.equivMapOfInjective.proof_1 {G : Type u_1} [AddGroup G] {N : Type u_2} [AddGroup N] (H : AddSubgroup G) (f : G →+ N) (hf : Function.Injective f) :
        ∀ (x x_1 : H), (Equiv.Set.image (f) (H) hf).toFun (x + x_1) = (Equiv.Set.image (f) (H) hf).toFun x + (Equiv.Set.image (f) (H) hf).toFun x_1
        noncomputable def Subgroup.equivMapOfInjective {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) (f : G →* N) (hf : Function.Injective f) :
        H ≃* (Subgroup.map f H)

        A subgroup is isomorphic to its image under an injective function. If you have an isomorphism, use MulEquiv.subgroupMap for better definitional equalities.

        Equations
        @[simp]
        theorem AddSubgroup.coe_equivMapOfInjective_apply {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] (H : AddSubgroup G) (f : G →+ N) (hf : Function.Injective f) (h : H) :
        ((AddSubgroup.equivMapOfInjective H f hf) h) = f h
        @[simp]
        theorem Subgroup.coe_equivMapOfInjective_apply {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) (f : G →* N) (hf : Function.Injective f) (h : H) :
        ((Subgroup.equivMapOfInjective H f hf) h) = f h

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

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

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

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

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

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

        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_inv : G₂G₁) (hf : Function.RightInverse f_inv f) (g : G₁ →+ G₃) (hg : AddMonoidHom.ker f AddMonoidHom.ker g) :
        G₂ →+ G₃

        Auxiliary definition used to define liftOfRightInverse

        Equations
        theorem AddMonoidHom.liftOfRightInverseAux.proof_2 {G₁ : Type u_3} {G₂ : Type u_2} {G₃ : Type u_1} [AddGroup G₁] [AddGroup G₂] [AddGroup G₃] (f : G₁ →+ G₂) (f_inv : G₂G₁) (hf : Function.RightInverse f_inv f) (g : G₁ →+ G₃) (hg : AddMonoidHom.ker f AddMonoidHom.ker g) (x : G₂) (y : G₂) :
        { toFun := fun (b : G₂) => g (f_inv b), map_zero' := }.toFun (x + y) = { toFun := fun (b : G₂) => g (f_inv b), map_zero' := }.toFun x + { toFun := fun (b : G₂) => g (f_inv b), map_zero' := }.toFun y
        theorem AddMonoidHom.liftOfRightInverseAux.proof_1 {G₁ : Type u_1} {G₂ : Type u_2} {G₃ : Type u_3} [AddGroup G₁] [AddGroup G₂] [AddGroup G₃] (f : G₁ →+ G₂) (f_inv : G₂G₁) (hf : Function.RightInverse f_inv f) (g : G₁ →+ G₃) (hg : AddMonoidHom.ker f AddMonoidHom.ker g) :
        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 : MonoidHom.ker f MonoidHom.ker g) :
        G₂ →* G₃

        Auxiliary definition used to define liftOfRightInverse

        Equations
        @[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_inv : G₂G₁) (hf : Function.RightInverse f_inv f) (g : G₁ →+ G₃) (hg : AddMonoidHom.ker f AddMonoidHom.ker g) (x : G₁) :
        (AddMonoidHom.liftOfRightInverseAux f f_inv hf g hg) (f x) = g x
        @[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 : MonoidHom.ker f MonoidHom.ker g) (x : G₁) :
        (MonoidHom.liftOfRightInverseAux f f_inv hf g hg) (f x) = g x
        theorem AddMonoidHom.liftOfRightInverse.proof_2 {G₁ : Type u_1} {G₂ : Type u_2} {G₃ : Type u_3} [AddGroup G₁] [AddGroup G₂] [AddGroup G₃] (f : G₁ →+ G₂) (φ : G₂ →+ G₃) (x : G₁) (hx : x AddMonoidHom.ker f) :
        theorem AddMonoidHom.liftOfRightInverse.proof_3 {G₁ : Type u_1} {G₂ : Type u_3} {G₃ : Type u_2} [AddGroup G₁] [AddGroup G₂] [AddGroup G₃] (f : G₁ →+ G₂) (f_inv : G₂G₁) (hf : Function.RightInverse f_inv f) (g : { g : G₁ →+ G₃ // AddMonoidHom.ker f AddMonoidHom.ker g }) :
        (fun (φ : G₂ →+ G₃) => { val := AddMonoidHom.comp φ f, property := }) ((fun (g : { g : G₁ →+ G₃ // AddMonoidHom.ker f AddMonoidHom.ker g }) => AddMonoidHom.liftOfRightInverseAux f f_inv hf g ) g) = g
        theorem AddMonoidHom.liftOfRightInverse.proof_1 {G₁ : Type u_1} {G₂ : Type u_2} {G₃ : Type u_3} [AddGroup G₁] [AddGroup G₂] [AddGroup G₃] (f : G₁ →+ G₂) (g : { g : G₁ →+ G₃ // AddMonoidHom.ker f AddMonoidHom.ker g }) :
        theorem AddMonoidHom.liftOfRightInverse.proof_4 {G₁ : Type u_3} {G₂ : Type u_2} {G₃ : Type u_1} [AddGroup G₁] [AddGroup G₂] [AddGroup G₃] (f : G₁ →+ G₂) (f_inv : G₂G₁) (hf : Function.RightInverse f_inv f) (φ : G₂ →+ G₃) :
        (fun (g : { g : G₁ →+ G₃ // AddMonoidHom.ker f AddMonoidHom.ker g }) => AddMonoidHom.liftOfRightInverseAux f f_inv hf g ) ((fun (φ : G₂ →+ G₃) => { val := AddMonoidHom.comp φ f, property := }) φ) = φ
        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_inv : G₂G₁) (hf : Function.RightInverse f_inv f) :
        { g : G₁ →+ G₃ // AddMonoidHom.ker f AddMonoidHom.ker g } (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.
        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₃ // MonoidHom.ker f MonoidHom.ker g } (G₂ →* G₃)

        liftOfRightInverse f hf g hg is the unique group homomorphism φ

        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.
        theorem AddMonoidHom.liftOfSurjective.proof_1 {G₁ : Type u_1} {G₂ : Type u_2} [AddGroup G₁] [AddGroup G₂] (f : G₁ →+ G₂) (hf : Function.Surjective f) :
        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₃ // AddMonoidHom.ker f AddMonoidHom.ker g } (G₂ →+ G₃)

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

        Equations
        @[inline, reducible]
        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₃ // MonoidHom.ker f MonoidHom.ker g } (G₂ →* G₃)

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

        Equations
        @[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_inv : G₂G₁) (hf : Function.RightInverse f_inv f) (g : { g : G₁ →+ G₃ // AddMonoidHom.ker f AddMonoidHom.ker g }) (x : G₁) :
        ((AddMonoidHom.liftOfRightInverse f f_inv hf) g) (f x) = g x
        @[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₃ // MonoidHom.ker f MonoidHom.ker g }) (x : G₁) :
        ((MonoidHom.liftOfRightInverse f f_inv hf) g) (f x) = g x
        @[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_inv : G₂G₁) (hf : Function.RightInverse f_inv f) (g : { g : G₁ →+ G₃ // AddMonoidHom.ker f AddMonoidHom.ker g }) :
        @[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₃ // MonoidHom.ker f MonoidHom.ker g }) :
        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_inv : G₂G₁) (hf : Function.RightInverse f_inv f) (g : G₁ →+ G₃) (hg : AddMonoidHom.ker f AddMonoidHom.ker g) (h : G₂ →+ G₃) (hh : AddMonoidHom.comp h f = g) :
        h = (AddMonoidHom.liftOfRightInverse f f_inv hf) { val := g, property := hg }
        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 : MonoidHom.ker f MonoidHom.ker g) (h : G₂ →* G₃) (hh : MonoidHom.comp h f = g) :
        h = (MonoidHom.liftOfRightInverse f f_inv hf) { val := g, property := hg }
        theorem Subgroup.Normal.comap {G : Type u_1} [Group G] {N : Type u_5} [Group N] {H : Subgroup N} (hH : Subgroup.Normal H) (f : G →* N) :
        instance AddSubgroup.normal_comap {G : Type u_1} [AddGroup G] {N : Type u_5} [AddGroup N] {H : AddSubgroup N} [nH : AddSubgroup.Normal H] (f : G →+ N) :
        Equations
        • =
        instance Subgroup.normal_comap {G : Type u_1} [Group G] {N : Type u_5} [Group N] {H : Subgroup N} [nH : Subgroup.Normal H] (f : G →* N) :
        Equations
        • =
        Equations
        • =
        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) :
        def AddMonoidHom.addSubgroupComap {G : Type u_1} {G' : Type u_2} [AddGroup G] [AddGroup G'] (f : G →+ G') (H' : AddSubgroup G') :
        (AddSubgroup.comap f H') →+ H'

        the AddMonoidHom from the preimage of an additive subgroup to itself.

        Equations
        @[simp]
        theorem AddMonoidHom.addSubgroupComap_apply_coe {G : Type u_1} {G' : Type u_2} [AddGroup G] [AddGroup G'] (f : G →+ G') (H' : AddSubgroup G') (x : (AddSubmonoid.comap f H'.toAddSubmonoid)) :
        ((AddMonoidHom.addSubgroupComap f H') x) = f x
        @[simp]
        theorem MonoidHom.subgroupComap_apply_coe {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] (f : G →* G') (H' : Subgroup G') (x : (Submonoid.comap f H'.toSubmonoid)) :
        ((MonoidHom.subgroupComap f H') x) = f x
        def MonoidHom.subgroupComap {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] (f : G →* G') (H' : Subgroup G') :
        (Subgroup.comap f H') →* H'

        The MonoidHom from the preimage of a subgroup to itself.

        Equations
        def AddMonoidHom.addSubgroupMap {G : Type u_1} {G' : Type u_2} [AddGroup G] [AddGroup G'] (f : G →+ G') (H : AddSubgroup G) :
        H →+ (AddSubgroup.map f H)

        the AddMonoidHom from an additive subgroup to its image

        Equations
        @[simp]
        theorem MonoidHom.subgroupMap_apply_coe {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] (f : G →* G') (H : Subgroup G) (x : H.toSubmonoid) :
        ((MonoidHom.subgroupMap f H) x) = f x
        @[simp]
        theorem AddMonoidHom.addSubgroupMap_apply_coe {G : Type u_1} {G' : Type u_2} [AddGroup G] [AddGroup G'] (f : G →+ G') (H : AddSubgroup G) (x : H.toAddSubmonoid) :
        ((AddMonoidHom.addSubgroupMap f H) x) = f x
        def MonoidHom.subgroupMap {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] (f : G →* G') (H : Subgroup G) :
        H →* (Subgroup.map f H)

        The MonoidHom from a subgroup to its image.

        Equations
        theorem MonoidHom.subgroupMap_surjective {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] (f : G →* G') (H : Subgroup G) :
        theorem AddEquiv.addSubgroupCongr.proof_1 {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} (h : H = K) :
        H = K
        theorem AddEquiv.addSubgroupCongr.proof_2 {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} (h : H = K) :
        ∀ (x x_1 : H), (Equiv.setCongr ).toFun (x + x_1) = (Equiv.setCongr ).toFun (x + x_1)
        def AddEquiv.addSubgroupCongr {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} (h : H = K) :
        H ≃+ K

        Makes the identity additive isomorphism from a proof two subgroups of an additive group are equal.

        Equations
        def MulEquiv.subgroupCongr {G : Type u_1} [Group G] {H : Subgroup G} {K : Subgroup G} (h : H = K) :
        H ≃* K

        Makes the identity isomorphism from a proof two subgroups of a multiplicative group are equal.

        Equations
        @[simp]
        theorem AddEquiv.addSubgroupCongr_apply {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} (h : H = K) (x : H) :
        @[simp]
        theorem MulEquiv.subgroupCongr_apply {G : Type u_1} [Group G] {H : Subgroup G} {K : Subgroup G} (h : H = K) (x : H) :
        ((MulEquiv.subgroupCongr h) x) = x
        @[simp]
        theorem AddEquiv.addSubgroupCongr_symm_apply {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} (h : H = K) (x : K) :
        @[simp]
        theorem MulEquiv.subgroupCongr_symm_apply {G : Type u_1} [Group G] {H : Subgroup G} {K : Subgroup G} (h : H = K) (x : K) :
        def AddEquiv.addSubgroupMap {G : Type u_1} {G' : Type u_2} [AddGroup G] [AddGroup G'] (e : G ≃+ G') (H : AddSubgroup G) :
        H ≃+ (AddSubgroup.map (e) H)

        An additive subgroup is isomorphic to its image under an isomorphism. If you only have an injective map, use AddSubgroup.equiv_map_of_injective.

        Equations
        def MulEquiv.subgroupMap {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] (e : G ≃* G') (H : Subgroup G) :
        H ≃* (Subgroup.map (e) H)

        A subgroup is isomorphic to its image under an isomorphism. If you only have an injective map, use Subgroup.equiv_map_of_injective.

        Equations
        @[simp]
        theorem AddEquiv.coe_addSubgroupMap_apply {G : Type u_1} {G' : Type u_2} [AddGroup G] [AddGroup G'] (e : G ≃+ G') (H : AddSubgroup G) (g : H) :
        ((AddEquiv.addSubgroupMap e H) g) = e g
        @[simp]
        theorem MulEquiv.coe_subgroupMap_apply {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] (e : G ≃* G') (H : Subgroup G) (g : H) :
        ((MulEquiv.subgroupMap e H) g) = e g
        @[simp]
        theorem AddEquiv.addSubgroupMap_symm_apply {G : Type u_1} {G' : Type u_2} [AddGroup G] [AddGroup G'] (e : G ≃+ G') (H : AddSubgroup G) (g : (AddSubgroup.map (e) H)) :
        (AddEquiv.symm (AddEquiv.addSubgroupMap e H)) g = { val := (AddEquiv.symm e) g, property := }
        @[simp]
        theorem MulEquiv.subgroupMap_symm_apply {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] (e : G ≃* G') (H : Subgroup G) (g : (Subgroup.map (e) H)) :
        (MulEquiv.symm (MulEquiv.subgroupMap e H)) g = { val := (MulEquiv.symm e) g, property := }
        @[simp]
        theorem Subgroup.equivMapOfInjective_coe_mulEquiv {G : Type u_1} {G' : Type u_2} [Group G] [Group G'] (H : Subgroup G) (e : G ≃* G') :
        theorem AddSubgroup.mem_sup {C : Type u_6} [AddCommGroup C] {s : AddSubgroup C} {t : AddSubgroup C} {x : C} :
        x s t ∃ y ∈ s, ∃ z ∈ t, y + z = x
        theorem Subgroup.mem_sup {C : Type u_6} [CommGroup C] {s : Subgroup C} {t : Subgroup C} {x : C} :
        x s t ∃ y ∈ s, ∃ z ∈ t, y * z = x
        theorem AddSubgroup.mem_sup' {C : Type u_6} [AddCommGroup C] {s : AddSubgroup C} {t : AddSubgroup C} {x : C} :
        x s t ∃ (y : s) (z : t), y + z = x
        theorem Subgroup.mem_sup' {C : Type u_6} [CommGroup C] {s : Subgroup C} {t : Subgroup C} {x : C} :
        x s t ∃ (y : s) (z : t), y * z = x
        theorem AddSubgroup.mem_closure_pair {C : Type u_6} [AddCommGroup C] {x : C} {y : C} {z : C} :
        z AddSubgroup.closure {x, y} ∃ (m : ) (n : ), m x + n y = z
        theorem Subgroup.mem_closure_pair {C : Type u_6} [CommGroup C] {x : C} {y : C} {z : C} :
        z Subgroup.closure {x, y} ∃ (m : ) (n : ), x ^ m * y ^ n = z
        theorem AddSubgroup.normal_addSubgroupOf_iff {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} (hHK : H K) :
        AddSubgroup.Normal (AddSubgroup.addSubgroupOf H K) ∀ (h k : G), h Hk Kk + h + -k H
        theorem Subgroup.normal_subgroupOf_iff {G : Type u_1} [Group G] {H : Subgroup G} {K : Subgroup G} (hHK : H K) :
        Subgroup.Normal (Subgroup.subgroupOf H K) ∀ (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₁ : Subgroup G} {K₁ : Subgroup G} {H₂ : Subgroup N} {K₂ : Subgroup N} [h₁ : Subgroup.Normal (Subgroup.subgroupOf H₁ K₁)] [h₂ : Subgroup.Normal (Subgroup.subgroupOf H₂ K₂)] :
        Equations
        • =
        Equations
        • =
        instance Subgroup.prod_normal {G : Type u_1} [Group G] {N : Type u_5} [Group N] (H : Subgroup G) (K : Subgroup N) [hH : Subgroup.Normal H] [hK : Subgroup.Normal K] :
        Equations
        • =
        Equations
        • =
        instance Subgroup.normal_inf_normal {G : Type u_1} [Group G] (H : Subgroup G) (K : Subgroup G) [hH : Subgroup.Normal H] [hK : Subgroup.Normal K] :
        Equations
        • =
        theorem Subgroup.subgroupOf_sup {G : Type u_1} [Group G] (A : Subgroup G) (A' : Subgroup G) (B : Subgroup G) (hA : A B) (hA' : A' B) :
        theorem AddSubgroup.SubgroupNormal.mem_comm {G : Type u_1} [AddGroup G] {H : AddSubgroup G} {K : AddSubgroup G} (hK : H K) [hN : AddSubgroup.Normal (AddSubgroup.addSubgroupOf H K)] {a : G} {b : G} (hb : b K) (h : a + b H) :
        b + a H
        theorem Subgroup.SubgroupNormal.mem_comm {G : Type u_1} [Group G] {H : Subgroup G} {K : Subgroup G} (hK : H K) [hN : Subgroup.Normal (Subgroup.subgroupOf H K)] {a : G} {b : G} (hb : b K) (h : a * b H) :
        b * a H
        theorem AddSubgroup.addCommute_of_normal_of_disjoint {G : Type u_1} [AddGroup G] (H₁ : AddSubgroup G) (H₂ : AddSubgroup G) (hH₁ : AddSubgroup.Normal H₁) (hH₂ : AddSubgroup.Normal H₂) (hdis : Disjoint H₁ H₂) (x : G) (y : G) (hx : x H₁) (hy : y H₂) :

        Elements of disjoint, normal subgroups commute.

        theorem Subgroup.commute_of_normal_of_disjoint {G : Type u_1} [Group G] (H₁ : Subgroup G) (H₂ : Subgroup G) (hH₁ : Subgroup.Normal H₁) (hH₂ : Subgroup.Normal H₂) (hdis : Disjoint H₁ H₂) (x : G) (y : G) (hx : x H₁) (hy : y H₂) :

        Elements of disjoint, normal subgroups commute.

        theorem AddSubgroup.disjoint_def {G : Type u_1} [AddGroup G] {H₁ : AddSubgroup G} {H₂ : AddSubgroup G} :
        Disjoint H₁ H₂ ∀ {x : G}, x H₁x H₂x = 0
        theorem Subgroup.disjoint_def {G : Type u_1} [Group G] {H₁ : Subgroup G} {H₂ : Subgroup G} :
        Disjoint H₁ H₂ ∀ {x : G}, x H₁x H₂x = 1
        theorem AddSubgroup.disjoint_def' {G : Type u_1} [AddGroup G] {H₁ : AddSubgroup G} {H₂ : AddSubgroup G} :
        Disjoint H₁ H₂ ∀ {x y : G}, x H₁y H₂x = yx = 0
        theorem Subgroup.disjoint_def' {G : Type u_1} [Group G] {H₁ : Subgroup G} {H₂ : Subgroup G} :
        Disjoint H₁ H₂ ∀ {x y : G}, x H₁y H₂x = yx = 1
        theorem AddSubgroup.disjoint_iff_add_eq_zero {G : Type u_1} [AddGroup G] {H₁ : AddSubgroup G} {H₂ : AddSubgroup G} :
        Disjoint H₁ H₂ ∀ {x y : G}, x H₁y H₂x + y = 0x = 0 y = 0
        theorem Subgroup.disjoint_iff_mul_eq_one {G : Type u_1} [Group G] {H₁ : Subgroup G} {H₂ : Subgroup G} :
        Disjoint H₁ H₂ ∀ {x y : G}, x H₁y H₂x * y = 1x = 1 y = 1
        theorem AddSubgroup.add_injective_of_disjoint {G : Type u_1} [AddGroup G] {H₁ : AddSubgroup G} {H₂ : AddSubgroup G} (h : Disjoint H₁ H₂) :
        Function.Injective fun (g : H₁ × H₂) => g.1 + g.2
        theorem Subgroup.mul_injective_of_disjoint {G : Type u_1} [Group G] {H₁ : Subgroup G} {H₂ : Subgroup G} (h : Disjoint H₁ H₂) :
        Function.Injective fun (g : H₁ × H₂) => g.1 * g.2
        theorem IsConj.normalClosure_eq_top_of {G : Type u_1} [Group G] {N : Subgroup G} [hn : Subgroup.Normal N] {g : G} {g' : G} {hg : g N} {hg' : g' N} (hc : IsConj g g') (ht : Subgroup.normalClosure {{ val := g, property := hg }} = ) :
        Subgroup.normalClosure {{ val := g', property := hg' }} =
        theorem IsConj.eq_of_left_mem_center {M : Type u_6} [Monoid M] {g : M} {h : M} (H : IsConj g h) (Hg : g Set.center M) :
        g = h
        theorem IsConj.eq_of_right_mem_center {M : Type u_6} [Monoid M] {g : M} {h : M} (H : IsConj g h) (Hh : h Set.center M) :
        g = h

        The conjugacy classes that are not trivial.

        Equations
        theorem ConjClasses.mk_bijOn (G : Type u_6) [Group G] :