Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 24bbbdc

Browse files
committed
feat(group_theory/sylow): Generalize proof of first Sylow theorem (#8383)
Generalize the first proof. There is now a proof that every p-subgroup is contained in a Sylow subgroup. Co-authored-by: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>
1 parent 4813b73 commit 24bbbdc

File tree

2 files changed

+51
-17
lines changed

2 files changed

+51
-17
lines changed

src/group_theory/subgroup.lean

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -404,12 +404,10 @@ end
404404
@[to_additive] instance fintype_bot : fintype (⊥ : subgroup G) := ⟨{1},
405405
by {rintro ⟨x, ⟨hx⟩⟩, exact finset.mem_singleton_self _}⟩
406406

407-
@[simp] lemma _root_.add_subgroup.card_bot : fintype.card (⊥ : add_subgroup A) = 1 :=
408-
fintype.card_eq_one_iff.2
409-
⟨⟨(0 : A), set.mem_singleton 0⟩, λ ⟨y, hy⟩, subtype.eq $ add_subgroup.mem_bot.1 hy⟩
410-
411-
-- `@[to_additive]` doesn't work, because it converts the `1 : ℕ` to `0`.
412-
@[simp] lemma card_bot : fintype.card (⊥ : subgroup G) = 1 :=
407+
/- curly brackets `{}` are used here instead of instance brackets `[]` because
408+
the instance in a goal is often not the same as the one inferred by type class inference. -/
409+
@[simp, to_additive] lemma card_bot {_ : fintype ↥(⊥ : subgroup G)} :
410+
fintype.card (⊥ : subgroup G) = 1 :=
413411
fintype.card_eq_one_iff.2
414412
⟨⟨(1 : G), set.mem_singleton 1⟩, λ ⟨y, hy⟩, subtype.eq $ subgroup.mem_bot.1 hy⟩
415413

@@ -455,6 +453,11 @@ begin
455453
rw nontrivial_iff_exists_ne_one
456454
end
457455

456+
@[to_additive] lemma card_le_one_iff_eq_bot [fintype H] : fintype.card H ≤ 1 ↔ H = ⊥ :=
457+
⟨λ h, (eq_bot_iff_forall _).2
458+
(λ x hx, by simpa [subtype.ext_iff] using fintype.card_le_one_iff.1 h ⟨x, hx⟩ 1),
459+
λ h, by simp [h]⟩
460+
458461
/-- The inf of two subgroups is their intersection. -/
459462
@[to_additive "The inf of two `add_subgroups`s is their intersection."]
460463
instance : has_inf (subgroup G) :=

src/group_theory/sylow.lean

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -248,31 +248,29 @@ def fixed_points_mul_left_cosets_equiv_quotient (H : subgroup G) [fintype (H : s
248248
(λ a, (@mem_fixed_points_mul_left_cosets_iff_mem_normalizer _ _ _ _inst_2 _).symm)
249249
(by intros; refl)
250250

251-
/-- The first of the **Sylow theorems** -/
252-
theorem exists_subgroup_card_pow_prime [fintype G] (p : ℕ) : ∀ {n : ℕ} [hp : fact p.prime]
253-
(hdvd : p ^ n ∣ card G), ∃ H : subgroup G, fintype.card H = p ^ n
254-
| 0 := λ _ _, ⟨(⊥ : subgroup G), by convert card_bot⟩
255-
| (n+1) := λ hp hdvd,
256-
let ⟨H, hH2⟩ := @exists_subgroup_card_pow_prime _ hp
257-
(dvd.trans (pow_dvd_pow _ (nat.le_succ _)) hdvd) in
251+
/-- If `H` is a subgroup of `G` of cardinality `p ^ n`,
252+
then `H` is contained in a subgroup of cardinality `p ^ (n + 1)`
253+
if `p ^ (n + 1)` divides the cardinality of `G` -/
254+
theorem exists_subgroup_card_pow_succ [fintype G] {p : ℕ} {n : ℕ} [hp : fact p.prime]
255+
(hdvd : p ^ (n + 1) ∣ card G) {H : subgroup G} (hH : fintype.card H = p ^ n) :
256+
∃ K : subgroup G, fintype.card K = p ^ (n + 1) ∧ H ≤ K :=
258257
let ⟨s, hs⟩ := exists_eq_mul_left_of_dvd hdvd in
259258
have hcard : card (quotient H) = s * p :=
260259
(nat.mul_left_inj (show card H > 0, from fintype.card_pos_iff.2
261260
⟨⟨1, H.one_mem⟩⟩)).1
262-
(by rwa [← card_eq_card_quotient_mul_card_subgroup H, hH2, hs,
261+
(by rwa [← card_eq_card_quotient_mul_card_subgroup H, hH, hs,
263262
pow_succ', mul_assoc, mul_comm p]),
264263
have hm : s * p % p =
265264
card (quotient (subgroup.comap ((normalizer H).subtype : normalizer H →* G) H)) % p :=
266265
card_congr (fixed_points_mul_left_cosets_equiv_quotient H) ▸ hcard ▸
267-
@card_modeq_card_fixed_points _ _ _ _ _ _ _ p _ hp hH2,
266+
@card_modeq_card_fixed_points _ _ _ _ _ _ _ p _ hp hH,
268267
have hm' : p ∣ card (quotient (subgroup.comap ((normalizer H).subtype : normalizer H →* G) H)) :=
269268
nat.dvd_of_mod_eq_zero
270269
(by rwa [nat.mod_eq_zero_of_dvd (dvd_mul_left _ _), eq_comm] at hm),
271270
let ⟨x, hx⟩ := @exists_prime_order_of_dvd_card _ (quotient_group.quotient.group _) _ _ hp hm' in
272271
have hequiv : H ≃ (subgroup.comap ((normalizer H).subtype : normalizer H →* G) H) :=
273272
⟨λ a, ⟨⟨a.1, le_normalizer a.2⟩, a.2⟩, λ a, ⟨a.1.1, a.2⟩,
274273
λ ⟨_, _⟩, rfl, λ ⟨⟨_, _⟩, _⟩, rfl⟩,
275-
-- begin proof of ∃ H : subgroup G, fintype.card H = p ^ n
276274
⟨subgroup.map ((normalizer H).subtype) (subgroup.comap
277275
(quotient_group.mk' (comap H.normalizer.subtype H)) (gpowers x)),
278276
begin
@@ -284,9 +282,42 @@ begin
284282
rw [set.card_image_of_injective
285283
(subgroup.comap (mk' (comap H.normalizer.subtype H)) (gpowers x) : set (H.normalizer))
286284
subtype.val_injective,
287-
pow_succ', ← hH2, fintype.card_congr hequiv, ← hx, order_eq_card_gpowers,
285+
pow_succ', ← hH, fintype.card_congr hequiv, ← hx, order_eq_card_gpowers,
288286
← fintype.card_prod],
289287
exact @fintype.card_congr _ _ (id _) (id _) (preimage_mk_equiv_subgroup_times_set _ _)
288+
end,
289+
begin
290+
assume y hy,
291+
simp only [exists_prop, subgroup.coe_subtype, mk'_apply, subgroup.mem_map, subgroup.mem_comap],
292+
refine ⟨⟨y, le_normalizer hy⟩, ⟨0, _⟩, rfl⟩,
293+
rw [gpow_zero, eq_comm, quotient_group.eq_one_iff],
294+
simpa using hy
290295
end
291296

297+
/-- If `H` is a subgroup of `G` of cardinality `p ^ n`,
298+
then `H` is contained in a subgroup of cardinality `p ^ m`
299+
if `n ≤ m` and `p ^ m` divides the cardinality of `G` -/
300+
theorem exists_subgroup_card_pow_prime_le [fintype G] (p : ℕ) : ∀ {n m : ℕ} [hp : fact p.prime]
301+
(hdvd : p ^ m ∣ card G) (H : subgroup G) (hH : card H = p ^ n) (hnm : n ≤ m),
302+
∃ K : subgroup G, card K = p ^ m ∧ H ≤ K
303+
| n m := λ hp hdvd H hH hnm,
304+
(lt_or_eq_of_le hnm).elim
305+
(λ hnm : n < m,
306+
have h0m : 0 < m, from (lt_of_le_of_lt n.zero_le hnm),
307+
have wf : m - 1 < m, from nat.sub_lt h0m zero_lt_one,
308+
have hnm1 : n ≤ m - 1, from nat.le_sub_right_of_add_le hnm,
309+
let ⟨K, hK⟩ := @exists_subgroup_card_pow_prime_le n (m - 1) hp
310+
(nat.pow_dvd_of_le_of_pow_dvd (nat.sub_le_self _ _) hdvd) H hH hnm1 in
311+
have hdvd' : p ^ ((m - 1) + 1) ∣ card G, by rwa [nat.sub_add_cancel h0m],
312+
let ⟨K', hK'⟩ := @exists_subgroup_card_pow_succ _ _ _ _ _ hp hdvd' K hK.1 in
313+
⟨K', by rw [hK'.1, nat.sub_add_cancel h0m], le_trans hK.2 hK'.2⟩)
314+
(λ hnm : n = m, ⟨H, by simp [hH, hnm]⟩)
315+
316+
/-- A generalisation of **Sylow's first theorem**. If `p ^ n` divides
317+
the cardinality of `G`, then there is a subgroup of cardinality `p ^ n` -/
318+
theorem exists_subgroup_card_pow_prime [fintype G] (p : ℕ) {n : ℕ} [fact p.prime]
319+
(hdvd : p ^ n ∣ card G) : ∃ K : subgroup G, fintype.card K = p ^ n :=
320+
let ⟨K, hK⟩ := exists_subgroup_card_pow_prime_le p hdvd ⊥ (by simp) n.zero_le in
321+
⟨K, hK.1
322+
292323
end sylow

0 commit comments

Comments
 (0)