File: Mathlib/GroupTheory/Schreier.lean

full_name: card_dvd_exponent_pow_rank
code: @[to_additive]
theorem card_dvd_exponent_pow_rank : Nat.card G ∣ Monoid.exponent G ^ Group.rank G 
goal: Nat.card G ∣ Monoid.exponent G ^ Group.rank G

full_name: card_dvd_exponent_nsmul_rank
code: @[to_additive]
theorem card_dvd_exponent_pow_rank : Nat.card G ∣ Monoid.exponent G ^ Group.rank G 
goal: Nat.card G ∣ AddMonoid.exponent G ^ AddGroup.rank G

full_name: card_dvd_exponent_pow_rank'
code: @[to_additive]
theorem card_dvd_exponent_pow_rank' {n : ℕ} (hG : ∀ g : G, g ^ n = 1) :
    Nat.card G ∣ n ^ Group.rank G 
goal: Nat.card G ∣ n ^ Group.rank G

full_name: card_dvd_exponent_nsmul_rank'
code: @[to_additive]
theorem card_dvd_exponent_pow_rank' {n : ℕ} (hG : ∀ g : G, g ^ n = 1) :
    Nat.card G ∣ n ^ Group.rank G 
goal: Nat.card G ∣ n ^ AddGroup.rank G

full_name: Subgroup.closure_mul_image_mul_eq_top
code: theorem closure_mul_image_mul_eq_top
    (hR : R ∈ rightTransversals (H : Set G)) (hR1 : (1 : G) ∈ R) (hS : closure S = ⊤) :
    (closure ((R * S).image fun g => g * (toFun hR g : G)⁻¹)) * R = ⊤ 
goal: ↑(Subgroup.closure ((fun g => g * (↑(Subgroup.MemRightTransversals.toFun hR g))⁻¹) '' (R * S))) * R = ⊤

full_name: Subgroup.closure_mul_image_eq
code: /-- **Schreier's Lemma**: If `R : Set G` is a `rightTransversal` of `H : Subgroup G`
  with `1 ∈ R`, and if `G` is generated by `S : Set G`, then `H` is generated by the `Set`
  `(R * S).image (fun g ↦ g * (toFun hR g)⁻¹)`. -/
theorem closure_mul_image_eq (hR : R ∈ rightTransversals (H : Set G)) (hR1 : (1 : G) ∈ R)
    (hS : closure S = ⊤) : closure ((R * S).image fun g => g * (toFun hR g : G)⁻¹) = H 
goal: Subgroup.closure ((fun g => g * (↑(Subgroup.MemRightTransversals.toFun hR g))⁻¹) '' (R * S)) = H

full_name: Subgroup.closure_mul_image_eq_top
code: /-- **Schreier's Lemma**: If `R : Set G` is a `rightTransversal` of `H : Subgroup G`
  with `1 ∈ R`, and if `G` is generated by `S : Set G`, then `H` is generated by the `Set`
  `(R * S).image (fun g ↦ g * (toFun hR g)⁻¹)`. -/
theorem closure_mul_image_eq_top (hR : R ∈ rightTransversals (H : Set G)) (hR1 : (1 : G) ∈ R)
    (hS : closure S = ⊤) : closure ((R * S).image fun g =>
      ⟨g * (toFun hR g : G)⁻¹, mul_inv_toFun_mem hR g⟩ : Set H) = ⊤ 
goal: Subgroup.closure ((fun g => ⟨g * (↑(Subgroup.MemRightTransversals.toFun hR g))⁻¹, ⋯⟩) '' (R * S)) = ⊤

full_name: Subgroup.closure_mul_image_eq_top'
code: /-- **Schreier's Lemma**: If `R : Finset G` is a `rightTransversal` of `H : Subgroup G`
  with `1 ∈ R`, and if `G` is generated by `S : Finset G`, then `H` is generated by the `Finset`
  `(R * S).image (fun g ↦ g * (toFun hR g)⁻¹)`. -/
theorem closure_mul_image_eq_top' [DecidableEq G] {R S : Finset G}
    (hR : (R : Set G) ∈ rightTransversals (H : Set G)) (hR1 : (1 : G) ∈ R)
    (hS : closure (S : Set G) = ⊤) :
    closure (((R * S).image fun g => ⟨_, mul_inv_toFun_mem hR g⟩ : Finset H) : Set H) = ⊤ 
goal: Subgroup.closure ↑(Finset.image (fun g => ⟨g * (↑(Subgroup.MemRightTransversals.toFun hR g))⁻¹, ⋯⟩) (R * S)) = ⊤

full_name: Subgroup.exists_finset_card_le_mul
code: theorem exists_finset_card_le_mul [FiniteIndex H] {S : Finset G} (hS : closure (S : Set G) = ⊤) :
    ∃ T : Finset H, T.card ≤ H.index * S.card ∧ closure (T : Set H) = ⊤ 
goal: ∃ T, T.card ≤ H.index * S.card ∧ Subgroup.closure ↑T = ⊤

full_name: Subgroup.fg_of_index_ne_zero
code: /-- **Schreier's Lemma**: A finite index subgroup of a finitely generated
  group is finitely generated. -/
instance fg_of_index_ne_zero [hG : Group.FG G] [FiniteIndex H] : Group.FG H 
goal: Group.FG ↥H

full_name: Subgroup.rank_le_index_mul_rank
code: theorem rank_le_index_mul_rank [hG : Group.FG G] [FiniteIndex H] :
    Group.rank H ≤ H.index * Group.rank G 
goal: Group.rank ↥H ≤ H.index * Group.rank G

full_name: Subgroup.card_commutator_dvd_index_center_pow
code: /-- If `G` has `n` commutators `[g₁, g₂]`, then `|G'| ∣ [G : Z(G)] ^ ([G : Z(G)] * n + 1)`,
where `G'` denotes the commutator of `G`. -/
theorem card_commutator_dvd_index_center_pow [Finite (commutatorSet G)] :
    Nat.card (_root_.commutator G) ∣
      (center G).index ^ ((center G).index * Nat.card (commutatorSet G) + 1) 
goal: Nat.card ↥(commutator G) ∣ (Subgroup.center G).index ^ ((Subgroup.center G).index * Nat.card ↑(commutatorSet G) + 1)

full_name: Subgroup.cardCommutatorBound
code: /-- A bound for the size of the commutator subgroup in terms of the number of commutators. -/
def cardCommutatorBound (n : ℕ) 
goal: ℕ

full_name: Subgroup.card_commutator_le_of_finite_commutatorSet
code: /-- A theorem of Schur: The size of the commutator subgroup is bounded in terms of the number of
  commutators. -/
theorem card_commutator_le_of_finite_commutatorSet [Finite (commutatorSet G)] :
    Nat.card (_root_.commutator G) ≤ cardCommutatorBound (Nat.card (commutatorSet G)) 
goal: Nat.card ↥(commutator G) ≤ Subgroup.cardCommutatorBound (Nat.card ↑(commutatorSet G))

full_name: Subgroup.instFiniteSubtypeMemCommutatorOfElemCommutatorSet
code: /-- A theorem of Schur: A group with finitely many commutators has finite commutator subgroup. -/
instance [Finite (commutatorSet G)] : Finite (_root_.commutator G) 
goal: Finite ↥(commutator G)