Module docstring
{"# Lagrange's theorem: the order of a subgroup divides the order of the group.
Subgroup.card_subgroup_dvd_card: Lagrange's theorem (for multiplicative groups); there is an analogous version for additive groups
"}
{"# Lagrange's theorem: the order of a subgroup divides the order of the group.
Subgroup.card_subgroup_dvd_card: Lagrange's theorem (for multiplicative groups);
there is an analogous version for additive groups"}
Subgroup.card_eq_card_quotient_mul_card_subgroup
theorem
(s : Subgroup α) : Nat.card α = Nat.card (α ⧸ s) * Nat.card s
@[to_additive AddSubgroup.card_eq_card_quotient_mul_card_addSubgroup]
theorem card_eq_card_quotient_mul_card_subgroup (s : Subgroup α) :
Nat.card α = Nat.card (α ⧸ s) * Nat.card s := by
rw [← Nat.card_prod]; exact Nat.card_congr Subgroup.groupEquivQuotientProdSubgroup
Subgroup.card_mul_eq_card_subgroup_mul_card_quotient
theorem
(s : Subgroup α) (t : Set α) : Nat.card (t * s : Set α) = Nat.card s * Nat.card (t.image (↑) : Set (α ⧸ s))
@[to_additive]
lemma card_mul_eq_card_subgroup_mul_card_quotient (s : Subgroup α) (t : Set α) :
Nat.card (t * s : Set α) = Nat.card s * Nat.card (t.image (↑) : Set (α ⧸ s)) := by
rw [← Nat.card_prod, Nat.card_congr]
apply Equiv.trans _ (QuotientGroup.preimageMkEquivSubgroupProdSet _ _)
rw [QuotientGroup.preimage_image_mk]
convert Equiv.refl ↑(t * s)
aesop (add simp [Set.mem_mul])
Subgroup.card_subgroup_dvd_card
theorem
(s : Subgroup α) : Nat.card s ∣ Nat.card α
/-- **Lagrange's Theorem**: The order of a subgroup divides the order of its ambient group. -/
@[to_additive "**Lagrange's Theorem**: The order of an additive subgroup divides the order of its
ambient additive group."]
theorem card_subgroup_dvd_card (s : Subgroup α) : Nat.cardNat.card s ∣ Nat.card α := by
classical simp [card_eq_card_quotient_mul_card_subgroup s, @dvd_mul_left ℕ]
Subgroup.card_quotient_dvd_card
theorem
(s : Subgroup α) : Nat.card (α ⧸ s) ∣ Nat.card α
@[to_additive]
theorem card_quotient_dvd_card (s : Subgroup α) : Nat.cardNat.card (α ⧸ s) ∣ Nat.card α := by
simp [card_eq_card_quotient_mul_card_subgroup s, @dvd_mul_right ℕ]
Subgroup.card_dvd_of_injective
theorem
(f : α →* H) (hf : Function.Injective f) : Nat.card α ∣ Nat.card H
@[to_additive]
theorem card_dvd_of_injective (f : α →* H) (hf : Function.Injective f) :
Nat.cardNat.card α ∣ Nat.card H := by
classical calc
Nat.card α = Nat.card (f.range : Subgroup H) := Nat.card_congr (Equiv.ofInjective f hf)
_ ∣ Nat.card H := card_subgroup_dvd_card _
Subgroup.card_dvd_of_le
theorem
{H K : Subgroup α} (hHK : H ≤ K) : Nat.card H ∣ Nat.card K
@[to_additive]
theorem card_dvd_of_le {H K : Subgroup α} (hHK : H ≤ K) : Nat.cardNat.card H ∣ Nat.card K :=
card_dvd_of_injective (inclusion hHK) (inclusion_injective hHK)
Subgroup.card_comap_dvd_of_injective
theorem
(K : Subgroup H) (f : α →* H) (hf : Function.Injective f) : Nat.card (K.comap f) ∣ Nat.card K
@[to_additive]
theorem card_comap_dvd_of_injective (K : Subgroup H) (f : α →* H)
(hf : Function.Injective f) : Nat.cardNat.card (K.comap f) ∣ Nat.card K :=
calc Nat.card (K.comap f) = Nat.card ((K.comap f).map f) :=
Nat.card_congr (equivMapOfInjective _ _ hf).toEquiv
_ ∣ Nat.card K := card_dvd_of_le (map_comap_le _ _)