File: Mathlib/Algebra/Group/Subgroup/Finite.lean

full_name: AddSubgroup.instFintypeSubtypeMemOfDecidablePred
code: @[to_additive]
instance (K : Subgroup G) [DecidablePred (· ∈ K)] [Fintype G] : Fintype K 
goal: Fintype ↥K

full_name: Subgroup.instFintypeSubtypeMemOfDecidablePred
code: @[to_additive]
instance (K : Subgroup G) [DecidablePred (· ∈ K)] [Fintype G] : Fintype K 
goal: Fintype ↥K

full_name: AddSubgroup.instFiniteSubtypeMem
code: @[to_additive]
instance (K : Subgroup G) [Finite G] : Finite K 
goal: Finite ↥K

full_name: Subgroup.instFiniteSubtypeMem
code: @[to_additive]
instance (K : Subgroup G) [Finite G] : Finite K 
goal: Finite ↥K

full_name: AddSubgroup.list_sum_mem
code: /-- Product of a list of elements in a subgroup is in the subgroup. -/
@[to_additive "Sum of a list of elements in an `AddSubgroup` is in the `AddSubgroup`."]
protected theorem list_prod_mem {l : List G} : (∀ x ∈ l, x ∈ K) → l.prod ∈ K 
goal: (∀ x ∈ l, x ∈ K) → l.sum ∈ K

full_name: Subgroup.list_prod_mem
code: /-- Product of a list of elements in a subgroup is in the subgroup. -/
@[to_additive "Sum of a list of elements in an `AddSubgroup` is in the `AddSubgroup`."]
protected theorem list_prod_mem {l : List G} : (∀ x ∈ l, x ∈ K) → l.prod ∈ K 
goal: (∀ x ∈ l, x ∈ K) → l.prod ∈ K

full_name: AddSubgroup.multiset_sum_mem
code: /-- Product of a multiset of elements in a subgroup of a `CommGroup` is in the subgroup. -/
@[to_additive "Sum of a multiset of elements in an `AddSubgroup` of an `AddCommGroup` is in
 the `AddSubgroup`."]
protected theorem multiset_prod_mem {G} [CommGroup G] (K : Subgroup G) (g : Multiset G) :
    (∀ a ∈ g, a ∈ K) → g.prod ∈ K 
goal: (∀ a ∈ g, a ∈ K) → g.sum ∈ K

full_name: Subgroup.multiset_prod_mem
code: /-- Product of a multiset of elements in a subgroup of a `CommGroup` is in the subgroup. -/
@[to_additive "Sum of a multiset of elements in an `AddSubgroup` of an `AddCommGroup` is in
 the `AddSubgroup`."]
protected theorem multiset_prod_mem {G} [CommGroup G] (K : Subgroup G) (g : Multiset G) :
    (∀ a ∈ g, a ∈ K) → g.prod ∈ K 
goal: (∀ a ∈ g, a ∈ K) → g.prod ∈ K

full_name: Subgroup.multiset_noncommProd_mem
code: @[to_additive]
theorem multiset_noncommProd_mem (K : Subgroup G) (g : Multiset G) (comm) :
    (∀ a ∈ g, a ∈ K) → g.noncommProd comm ∈ K 
goal: (∀ a ∈ g, a ∈ K) → g.noncommProd comm ∈ K

full_name: AddSubgroup.multiset_noncommSum_mem
code: @[to_additive]
theorem multiset_noncommProd_mem (K : Subgroup G) (g : Multiset G) (comm) :
    (∀ a ∈ g, a ∈ K) → g.noncommProd comm ∈ K 
goal: (∀ a ∈ g, a ∈ K) → g.noncommSum comm ∈ K

full_name: AddSubgroup.sum_mem
code: /-- Product of elements of a subgroup of a `CommGroup` indexed by a `Finset` is in the
    subgroup. -/
@[to_additive "Sum of elements in an `AddSubgroup` of an `AddCommGroup` indexed by a `Finset`
 is in the `AddSubgroup`."]
protected theorem prod_mem {G : Type*} [CommGroup G] (K : Subgroup G) {ι : Type*} {t : Finset ι}
    {f : ι → G} (h : ∀ c ∈ t, f c ∈ K) : (∏ c ∈ t, f c) ∈ K 
goal: ∑ c ∈ t, f c ∈ K

full_name: Subgroup.prod_mem
code: /-- Product of elements of a subgroup of a `CommGroup` indexed by a `Finset` is in the
    subgroup. -/
@[to_additive "Sum of elements in an `AddSubgroup` of an `AddCommGroup` indexed by a `Finset`
 is in the `AddSubgroup`."]
protected theorem prod_mem {G : Type*} [CommGroup G] (K : Subgroup G) {ι : Type*} {t : Finset ι}
    {f : ι → G} (h : ∀ c ∈ t, f c ∈ K) : (∏ c ∈ t, f c) ∈ K 
goal: ∏ c ∈ t, f c ∈ K

full_name: AddSubgroup.noncommSum_mem
code: @[to_additive]
theorem noncommProd_mem (K : Subgroup G) {ι : Type*} {t : Finset ι} {f : ι → G} (comm) :
    (∀ c ∈ t, f c ∈ K) → t.noncommProd f comm ∈ K 
goal: (∀ c ∈ t, f c ∈ K) → t.noncommSum f comm ∈ K

full_name: Subgroup.noncommProd_mem
code: @[to_additive]
theorem noncommProd_mem (K : Subgroup G) {ι : Type*} {t : Finset ι} {f : ι → G} (comm) :
    (∀ c ∈ t, f c ∈ K) → t.noncommProd f comm ∈ K 
goal: (∀ c ∈ t, f c ∈ K) → t.noncommProd f comm ∈ K

full_name: AddSubgroup.val_list_sum
code: @[to_additive (attr := simp 1100, norm_cast)]
theorem val_list_prod (l : List H) : (l.prod : G) = (l.map Subtype.val).prod 
goal: ↑l.sum = (List.map Subtype.val l).sum

full_name: Subgroup.val_list_prod
code: @[to_additive (attr := simp 1100, norm_cast)]
theorem val_list_prod (l : List H) : (l.prod : G) = (l.map Subtype.val).prod 
goal: ↑l.prod = (List.map Subtype.val l).prod

full_name: Subgroup.val_multiset_prod
code: @[to_additive (attr := simp 1100, norm_cast)]
theorem val_multiset_prod {G} [CommGroup G] (H : Subgroup G) (m : Multiset H) :
    (m.prod : G) = (m.map Subtype.val).prod 
goal: ↑m.prod = (Multiset.map Subtype.val m).prod

full_name: AddSubgroup.val_multiset_sum
code: @[to_additive (attr := simp 1100, norm_cast)]
theorem val_multiset_prod {G} [CommGroup G] (H : Subgroup G) (m : Multiset H) :
    (m.prod : G) = (m.map Subtype.val).prod 
goal: ↑m.sum = (Multiset.map Subtype.val m).sum

full_name: AddSubgroup.val_finset_sum
code: @[to_additive (attr := simp 1100, norm_cast)]
theorem val_finset_prod {ι G} [CommGroup G] (H : Subgroup G) (f : ι → H) (s : Finset ι) :
    ↑(∏ i ∈ s, f i) = (∏ i ∈ s, f i : G) 
goal: ↑(∑ i ∈ s, f i) = ∑ i ∈ s, ↑(f i)

full_name: Subgroup.val_finset_prod
code: @[to_additive (attr := simp 1100, norm_cast)]
theorem val_finset_prod {ι G} [CommGroup G] (H : Subgroup G) (f : ι → H) (s : Finset ι) :
    ↑(∏ i ∈ s, f i) = (∏ i ∈ s, f i : G) 
goal: ↑(∏ i ∈ s, f i) = ∏ i ∈ s, ↑(f i)

full_name: Subgroup.fintypeBot
code: @[to_additive]
instance fintypeBot : Fintype (⊥ : Subgroup G) 
goal: Fintype ↥⊥

full_name: AddSubgroup.fintypeBot
code: @[to_additive]
instance fintypeBot : Fintype (⊥ : Subgroup G) 
goal: Fintype ↥⊥

full_name: AddSubgroup.card_bot
code: @[to_additive] -- Porting note: removed `simp` because `simpNF` says it can prove it.
theorem card_bot : Nat.card (⊥ : Subgroup G) = 1 
goal: Nat.card ↥⊥ = 1

full_name: Subgroup.card_bot
code: @[to_additive] -- Porting note: removed `simp` because `simpNF` says it can prove it.
theorem card_bot : Nat.card (⊥ : Subgroup G) = 1 
goal: Nat.card ↥⊥ = 1

full_name: Subgroup.card_top
code: @[to_additive]
theorem card_top : Nat.card (⊤ : Subgroup G) = Nat.card G 
goal: Nat.card ↥⊤ = Nat.card G

full_name: AddSubgroup.card_top
code: @[to_additive]
theorem card_top : Nat.card (⊤ : Subgroup G) = Nat.card G 
goal: Nat.card ↥⊤ = Nat.card G

full_name: AddSubgroup.eq_top_of_card_eq
code: @[to_additive]
theorem eq_top_of_card_eq [Finite H] (h : Nat.card H = Nat.card G) :
    H = ⊤ 
goal: H = ⊤

full_name: Subgroup.eq_top_of_card_eq
code: @[to_additive]
theorem eq_top_of_card_eq [Finite H] (h : Nat.card H = Nat.card G) :
    H = ⊤ 
goal: H = ⊤

full_name: Subgroup.card_eq_iff_eq_top
code: @[to_additive (attr := simp)]
theorem card_eq_iff_eq_top [Finite H] : Nat.card H = Nat.card G ↔ H = ⊤ 
goal: Nat.card ↥H = Nat.card G ↔ H = ⊤

full_name: AddSubgroup.card_eq_iff_eq_top
code: @[to_additive (attr := simp)]
theorem card_eq_iff_eq_top [Finite H] : Nat.card H = Nat.card G ↔ H = ⊤ 
goal: Nat.card ↥H = Nat.card G ↔ H = ⊤

full_name: AddSubgroup.eq_top_of_le_card
code: @[to_additive]
theorem eq_top_of_le_card [Finite G] (h : Nat.card G ≤ Nat.card H) : H = ⊤ 
goal: H = ⊤

full_name: Subgroup.eq_top_of_le_card
code: @[to_additive]
theorem eq_top_of_le_card [Finite G] (h : Nat.card G ≤ Nat.card H) : H = ⊤ 
goal: H = ⊤

full_name: Subgroup.eq_bot_of_card_le
code: @[to_additive]
theorem eq_bot_of_card_le [Finite H] (h : Nat.card H ≤ 1) : H = ⊥ 
goal: H = ⊥

full_name: AddSubgroup.eq_bot_of_card_le
code: @[to_additive]
theorem eq_bot_of_card_le [Finite H] (h : Nat.card H ≤ 1) : H = ⊥ 
goal: H = ⊥

full_name: Subgroup.eq_bot_of_card_eq
code: @[to_additive]
theorem eq_bot_of_card_eq (h : Nat.card H = 1) : H = ⊥ 
goal: H = ⊥

full_name: AddSubgroup.eq_bot_of_card_eq
code: @[to_additive]
theorem eq_bot_of_card_eq (h : Nat.card H = 1) : H = ⊥ 
goal: H = ⊥

full_name: AddSubgroup.card_le_one_iff_eq_bot
code: @[to_additive card_le_one_iff_eq_bot]
theorem card_le_one_iff_eq_bot [Finite H] : Nat.card H ≤ 1 ↔ H = ⊥ 
goal: Nat.card ↥H ≤ 1 ↔ H = ⊥

full_name: Subgroup.card_le_one_iff_eq_bot
code: @[to_additive card_le_one_iff_eq_bot]
theorem card_le_one_iff_eq_bot [Finite H] : Nat.card H ≤ 1 ↔ H = ⊥ 
goal: Nat.card ↥H ≤ 1 ↔ H = ⊥

full_name: AddSubgroup.eq_bot_iff_card
code: @[to_additive] lemma eq_bot_iff_card : H = ⊥ ↔ Nat.card H = 1 
goal: H = ⊥ ↔ Nat.card ↥H = 1

full_name: Subgroup.eq_bot_iff_card
code: @[to_additive] lemma eq_bot_iff_card : H = ⊥ ↔ Nat.card H = 1 
goal: H = ⊥ ↔ Nat.card ↥H = 1

full_name: Subgroup.one_lt_card_iff_ne_bot
code: @[to_additive one_lt_card_iff_ne_bot]
theorem one_lt_card_iff_ne_bot [Finite H] : 1 < Nat.card H ↔ H ≠ ⊥ 
goal: 1 < Nat.card ↥H ↔ H ≠ ⊥

full_name: AddSubgroup.one_lt_card_iff_ne_bot
code: @[to_additive one_lt_card_iff_ne_bot]
theorem one_lt_card_iff_ne_bot [Finite H] : 1 < Nat.card H ↔ H ≠ ⊥ 
goal: 1 < Nat.card ↥H ↔ H ≠ ⊥

full_name: AddSubgroup.card_le_card_addGroup
code: @[to_additive]
theorem card_le_card_group [Finite G] : Nat.card H ≤ Nat.card G 
goal: Nat.card ↥H ≤ Nat.card G

full_name: Subgroup.card_le_card_group
code: @[to_additive]
theorem card_le_card_group [Finite G] : Nat.card H ≤ Nat.card G 
goal: Nat.card ↥H ≤ Nat.card G

full_name: Subgroup.pi_mem_of_mulSingle_mem_aux
code: @[to_additive]
theorem pi_mem_of_mulSingle_mem_aux [DecidableEq η] (I : Finset η) {H : Subgroup (∀ i, f i)}
    (x : ∀ i, f i) (h1 : ∀ i, i ∉ I → x i = 1) (h2 : ∀ i, i ∈ I → Pi.mulSingle i (x i) ∈ H) :
    x ∈ H 
goal: x ∈ H

full_name: AddSubgroup.pi_mem_of_single_mem_aux
code: @[to_additive]
theorem pi_mem_of_mulSingle_mem_aux [DecidableEq η] (I : Finset η) {H : Subgroup (∀ i, f i)}
    (x : ∀ i, f i) (h1 : ∀ i, i ∉ I → x i = 1) (h2 : ∀ i, i ∈ I → Pi.mulSingle i (x i) ∈ H) :
    x ∈ H 
goal: x ∈ H

full_name: AddSubgroup.pi_mem_of_single_mem
code: @[to_additive]
theorem pi_mem_of_mulSingle_mem [Finite η] [DecidableEq η] {H : Subgroup (∀ i, f i)} (x : ∀ i, f i)
    (h : ∀ i, Pi.mulSingle i (x i) ∈ H) : x ∈ H 
goal: x ∈ H

full_name: Subgroup.pi_mem_of_mulSingle_mem
code: @[to_additive]
theorem pi_mem_of_mulSingle_mem [Finite η] [DecidableEq η] {H : Subgroup (∀ i, f i)} (x : ∀ i, f i)
    (h : ∀ i, Pi.mulSingle i (x i) ∈ H) : x ∈ H 
goal: x ∈ H

full_name: AddSubgroup.pi_le_iff
code: /-- For finite index types, the `Subgroup.pi` is generated by the embeddings of the groups.  -/
@[to_additive "For finite index types, the `Subgroup.pi` is generated by the embeddings of the
 additive groups."]
theorem pi_le_iff [DecidableEq η] [Finite η] {H : ∀ i, Subgroup (f i)} {J : Subgroup (∀ i, f i)} :
    pi univ H ≤ J ↔ ∀ i : η, map (MonoidHom.mulSingle f i) (H i) ≤ J 
goal: AddSubgroup.pi Set.univ H ≤ J ↔ ∀ (i : η), AddSubgroup.map (AddMonoidHom.single f i) (H i) ≤ J

full_name: Subgroup.pi_le_iff
code: /-- For finite index types, the `Subgroup.pi` is generated by the embeddings of the groups.  -/
@[to_additive "For finite index types, the `Subgroup.pi` is generated by the embeddings of the
 additive groups."]
theorem pi_le_iff [DecidableEq η] [Finite η] {H : ∀ i, Subgroup (f i)} {J : Subgroup (∀ i, f i)} :
    pi univ H ≤ J ↔ ∀ i : η, map (MonoidHom.mulSingle f i) (H i) ≤ J 
goal: Subgroup.pi Set.univ H ≤ J ↔ ∀ (i : η), Subgroup.map (MonoidHom.mulSingle f i) (H i) ≤ J

full_name: Subgroup.mem_normalizer_fintype
code: theorem mem_normalizer_fintype {S : Set G} [Finite S] {x : G} (h : ∀ n, n ∈ S → x * n * x⁻¹ ∈ S) :
    x ∈ Subgroup.setNormalizer S 
goal: x ∈ Subgroup.setNormalizer S

full_name: MonoidHom.decidableMemRange
code: @[to_additive]
instance decidableMemRange (f : G →* N) [Fintype G] [DecidableEq N] : DecidablePred (· ∈ f.range) 
goal: DecidablePred fun x => x ∈ f.range

full_name: AddMonoidHom.decidableMemRange
code: @[to_additive]
instance decidableMemRange (f : G →* N) [Fintype G] [DecidableEq N] : DecidablePred (· ∈ f.range) 
goal: DecidablePred fun x => x ∈ f.range

full_name: AddMonoidHom.fintypeMrange
code: /-- The range of a finite monoid under a monoid homomorphism is finite.
Note: this instance can form a diamond with `Subtype.fintype` in the
presence of `Fintype N`. -/
@[to_additive "The range of a finite additive monoid under an additive monoid homomorphism is
 finite.

Note: this instance can form a diamond with `Subtype.fintype` or `Subgroup.fintype` in the presence
of `Fintype N`."]
instance fintypeMrange {M N : Type*} [Monoid M] [Monoid N] [Fintype M] [DecidableEq N]
    (f : M →* N) : Fintype (mrange f) 
goal: Fintype ↥(AddMonoidHom.mrange f)

full_name: MonoidHom.fintypeMrange
code: /-- The range of a finite monoid under a monoid homomorphism is finite.
Note: this instance can form a diamond with `Subtype.fintype` in the
presence of `Fintype N`. -/
@[to_additive "The range of a finite additive monoid under an additive monoid homomorphism is
 finite.

Note: this instance can form a diamond with `Subtype.fintype` or `Subgroup.fintype` in the presence
of `Fintype N`."]
instance fintypeMrange {M N : Type*} [Monoid M] [Monoid N] [Fintype M] [DecidableEq N]
    (f : M →* N) : Fintype (mrange f) 
goal: Fintype ↥(MonoidHom.mrange f)

full_name: AddMonoidHom.fintypeRange
code: /-- The range of a finite group under a group homomorphism is finite.

Note: this instance can form a diamond with `Subtype.fintype` or `Subgroup.fintype` in the
presence of `Fintype N`. -/
@[to_additive "The range of a finite additive group under an additive group homomorphism is finite.

Note: this instance can form a diamond with `Subtype.fintype` or `Subgroup.fintype` in the
 presence of `Fintype N`."]
instance fintypeRange [Fintype G] [DecidableEq N] (f : G →* N) : Fintype (range f) 
goal: Fintype ↥f.range

full_name: MonoidHom.fintypeRange
code: /-- The range of a finite group under a group homomorphism is finite.

Note: this instance can form a diamond with `Subtype.fintype` or `Subgroup.fintype` in the
presence of `Fintype N`. -/
@[to_additive "The range of a finite additive group under an additive group homomorphism is finite.

Note: this instance can form a diamond with `Subtype.fintype` or `Subgroup.fintype` in the
 presence of `Fintype N`."]
instance fintypeRange [Fintype G] [DecidableEq N] (f : G →* N) : Fintype (range f) 
goal: Fintype ↥f.range