Skip to content

Commit 2f04ff0

Browse files
committed
refactor(GroupTheory/Sylow): Add version of Sylow.not_dvd_index with only typeclass assumptions (#18572)
This PR adds a version of `Sylow.not_dvd_index` with only typeclass assumptions since in practice it is applied to finite groups where the typeclass assumptions can be inferred automatically. This allows for a little golfing in `Transfer.lean`.
1 parent 5e5231d commit 2f04ff0

File tree

2 files changed

+22
-14
lines changed

2 files changed

+22
-14
lines changed

Mathlib/GroupTheory/Sylow.lean

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -396,8 +396,9 @@ theorem card_sylow_dvd_index [Fact p.Prime] [Finite (Sylow p G)] (P : Sylow p G)
396396
((congr_arg _ (card_sylow_eq_index_normalizer P)).mp dvd_rfl).trans
397397
(index_dvd_of_le le_normalizer)
398398

399-
theorem not_dvd_index_sylow' [hp : Fact p.Prime] (P : Sylow p G) [(P : Subgroup G).Normal]
400-
[fP : FiniteIndex (P : Subgroup G)] : ¬p ∣ (P : Subgroup G).index := by
399+
/-- Auxilliary lemma for `Sylow.not_dvd_index` which is strictly stronger. -/
400+
private theorem Sylow.not_dvd_index_aux [hp : Fact p.Prime] (P : Sylow p G) [P.Normal]
401+
[P.FiniteIndex] : ¬ p ∣ P.index := by
401402
intro h
402403
rw [index_eq_card (P : Subgroup G)] at h
403404
obtain ⟨x, hx⟩ := exists_prime_orderOf_dvd_card' (G := G ⧸ (P : Subgroup G)) p h
@@ -413,15 +414,27 @@ theorem not_dvd_index_sylow' [hp : Fact p.Prime] (P : Sylow p G) [(P : Subgroup
413414
QuotientGroup.ker_mk'] at hp
414415
exact hp.ne' (P.3 hQ hp.le)
415416

416-
theorem not_dvd_index_sylow [hp : Fact p.Prime] [Finite (Sylow p G)] (P : Sylow p G)
417-
(hP : relindex ↑P (P : Subgroup G).normalizer ≠ 0) : ¬p ∣ (P : Subgroup G).index := by
417+
/-- A Sylow p-subgroup has index indivisible by `p`, assuming [N(P) : P] < ∞. -/
418+
theorem Sylow.not_dvd_index' [hp : Fact p.Prime] [Finite (Sylow p G)] (P : Sylow p G)
419+
(hP : P.relindex P.normalizer ≠ 0) : ¬ p ∣ P.index := by
418420
rw [← relindex_mul_index le_normalizer, ← card_sylow_eq_index_normalizer]
419421
haveI : (P.subtype le_normalizer : Subgroup (P : Subgroup G).normalizer).Normal :=
420422
Subgroup.normal_in_normalizer
421423
haveI : FiniteIndex ↑(P.subtype le_normalizer : Subgroup (P : Subgroup G).normalizer) := ⟨hP⟩
422-
replace hP := not_dvd_index_sylow' (P.subtype le_normalizer)
424+
replace hP := not_dvd_index_aux (P.subtype le_normalizer)
423425
exact hp.1.not_dvd_mul hP (not_dvd_card_sylow p G)
424426

427+
@[deprecated (since := "2024-11-03")]
428+
alias not_dvd_index_sylow := Sylow.not_dvd_index'
429+
430+
/-- A Sylow p-subgroup has index indivisible by `p`. -/
431+
theorem Sylow.not_dvd_index [Fact p.Prime] [Finite (Sylow p G)] (P : Sylow p G) [P.FiniteIndex] :
432+
¬ p ∣ P.index :=
433+
P.not_dvd_index' Nat.card_pos.ne'
434+
435+
@[deprecated (since := "2024-11-03")]
436+
alias not_dvd_index_sylow' := Sylow.not_dvd_index
437+
425438
/-- **Frattini's Argument**: If `N` is a normal subgroup of `G`, and if `P` is a Sylow `p`-subgroup
426439
of `N`, then `N_G(P) ⊔ N = G`. -/
427440
theorem Sylow.normalizer_sup_eq_top {p : ℕ} [Fact p.Prime] {N : Subgroup G} [N.Normal]
@@ -636,8 +649,7 @@ lemma exists_subgroup_le_card_le {k p : ℕ} (hp : p.Prime) (h : IsPGroup p G) {
636649
theorem pow_dvd_card_of_pow_dvd_card [Finite G] {p n : ℕ} [hp : Fact p.Prime] (P : Sylow p G)
637650
(hdvd : p ^ n ∣ Nat.card G) : p ^ n ∣ Nat.card P := by
638651
rw [← index_mul_card P.1] at hdvd
639-
exact (hp.1.coprime_pow_of_not_dvd
640-
(not_dvd_index_sylow P index_ne_zero_of_finite)).symm.dvd_of_dvd_mul_left hdvd
652+
exact (hp.1.coprime_pow_of_not_dvd P.not_dvd_index).symm.dvd_of_dvd_mul_left hdvd
641653

642654
theorem dvd_card_of_dvd_card [Finite G] {p : ℕ} [Fact p.Prime] (P : Sylow p G)
643655
(hdvd : p ∣ Nat.card G) : p ∣ Nat.card P := by
@@ -649,7 +661,7 @@ theorem dvd_card_of_dvd_card [Finite G] {p : ℕ} [Fact p.Prime] (P : Sylow p G)
649661
theorem card_coprime_index [Finite G] {p : ℕ} [hp : Fact p.Prime] (P : Sylow p G) :
650662
(Nat.card P).Coprime (index (P : Subgroup G)) :=
651663
let ⟨_n, hn⟩ := IsPGroup.iff_card.mp P.2
652-
hn.symm ▸ (hp.1.coprime_pow_of_not_dvd (not_dvd_index_sylow P index_ne_zero_of_finite)).symm
664+
hn.symm ▸ (hp.1.coprime_pow_of_not_dvd P.not_dvd_index).symm
653665

654666
theorem ne_bot_of_dvd_card [Finite G] {p : ℕ} [hp : Fact p.Prime] (P : Sylow p G)
655667
(hdvd : p ∣ Nat.card G) : (P : Subgroup G) ≠ ⊥ := by

Mathlib/GroupTheory/Transfer.lean

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -222,10 +222,7 @@ theorem transferSylow_restrict_eq_pow : ⇑((transferSylow P hP).restrict (P : S
222222
complement. -/
223223
theorem ker_transferSylow_isComplement' : IsComplement' (transferSylow P hP).ker P := by
224224
have hf : Function.Bijective ((transferSylow P hP).restrict (P : Subgroup G)) :=
225-
(transferSylow_restrict_eq_pow P hP).symm ▸
226-
(P.2.powEquiv'
227-
(not_dvd_index_sylow P
228-
(mt index_eq_zero_of_relindex_eq_zero index_ne_zero_of_finite))).bijective
225+
(transferSylow_restrict_eq_pow P hP).symm ▸ (P.2.powEquiv' P.not_dvd_index).bijective
229226
rw [Function.Bijective, ← range_top_iff_surjective, restrict_range] at hf
230227
have := range_top_iff_surjective.mp (top_le_iff.mp (hf.2.ge.trans
231228
(map_le_range (transferSylow P hP) P)))
@@ -235,8 +232,7 @@ theorem ker_transferSylow_isComplement' : IsComplement' (transferSylow P hP).ker
235232
exact isComplement'_of_disjoint_and_mul_eq_univ (disjoint_iff.2 hf.1) hf.2
236233

237234
theorem not_dvd_card_ker_transferSylow : ¬p ∣ Nat.card (transferSylow P hP).ker :=
238-
(ker_transferSylow_isComplement' P hP).index_eq_card ▸ not_dvd_index_sylow P <|
239-
mt index_eq_zero_of_relindex_eq_zero index_ne_zero_of_finite
235+
(ker_transferSylow_isComplement' P hP).index_eq_card ▸ P.not_dvd_index
240236

241237
theorem ker_transferSylow_disjoint (Q : Subgroup G) (hQ : IsPGroup p Q) :
242238
Disjoint (transferSylow P hP).ker Q :=

0 commit comments

Comments
 (0)