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

Commit 1fe9708

Browse files
committed
feat(group_theory/nilpotent): is_nilpotent_of_product_of_sylow_group (#11834)
1 parent add068d commit 1fe9708

File tree

1 file changed

+54
-27
lines changed

1 file changed

+54
-27
lines changed

src/group_theory/nilpotent.lean

Lines changed: 54 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import group_theory.general_commutator
88
import group_theory.quotient_group
99
import group_theory.solvable
1010
import group_theory.p_group
11+
import group_theory.sylow
12+
import data.nat.factorization
1113

1214
/-!
1315
@@ -77,6 +79,8 @@ are not central series if `G` is not nilpotent is a standard abuse of notation.
7779

7880
open subgroup
7981

82+
section with_group
83+
8084
variables {G : Type*} [group G] (H : subgroup G) [normal H]
8185

8286
/-- If `H` is a normal subgroup of `G`, then the set `{x : G | ∀ y : G, x*y*x⁻¹*y⁻¹ ∈ H}`
@@ -533,7 +537,7 @@ begin
533537
simp only [lower_central_series_nilpotency_class, le_bot_iff],
534538
end
535539

536-
/-- The range of a surejctive homomorphism from a nilpotent group is nilpotent -/
540+
/-- The range of a surjective homomorphism from a nilpotent group is nilpotent -/
537541
lemma nilpotent_of_surjective {G' : Type*} [group G'] [h : is_nilpotent G]
538542
(f : G →* G') (hf : function.surjective f) :
539543
is_nilpotent G' :=
@@ -563,6 +567,11 @@ begin
563567
... ≤ upper_central_series G' n : upper_central_series.map hf n,
564568
end
565569

570+
/-- Nilpotency respects isomorphisms -/
571+
lemma nilpotent_of_mul_equiv {G' : Type*} [group G'] [h : is_nilpotent G] (f : G ≃* G') :
572+
is_nilpotent G' :=
573+
nilpotent_of_surjective f.to_monoid_hom (mul_equiv.surjective f)
574+
566575
/-- A quotient of a nilpotent group is nilpotent -/
567576
instance nilpotent_quotient_of_nilpotent (H : subgroup G) [H.normal] [h : is_nilpotent G] :
568577
is_nilpotent (G ⧸ H) :=
@@ -823,32 +832,6 @@ begin
823832
exact derived_le_lower_central n,
824833
end
825834

826-
section classical
827-
828-
open_locale classical -- to get the fintype instance for quotient groups
829-
830-
/-- A p-group is nilpotent -/
831-
lemma is_p_group.is_nilpotent {G : Type*} [hG : group G] [hf : fintype G]
832-
{p : ℕ} (hp : fact (nat.prime p)) (h : is_p_group p G) :
833-
is_nilpotent G :=
834-
begin
835-
unfreezingI
836-
{ revert hG,
837-
induction hf using fintype.induction_subsingleton_or_nontrivial with G hG hS G hG hN ih },
838-
{ apply_instance, },
839-
{ introI _, intro h,
840-
have hc : center G > ⊥ := gt_iff_lt.mp h.bot_lt_center,
841-
have hcq : fintype.card (G ⧸ center G) < fintype.card G,
842-
{ rw card_eq_card_quotient_mul_card_subgroup (center G),
843-
apply lt_mul_of_one_lt_right,
844-
exact (fintype.card_pos_iff.mpr has_one.nonempty),
845-
exact ((subgroup.one_lt_card_iff_ne_bot _).mpr (ne_of_gt hc)), },
846-
have hnq : is_nilpotent (G ⧸ center G) := ih _ hcq (h.to_quotient (center G)),
847-
exact (of_quotient_center_nilpotent hnq), }
848-
end
849-
850-
end classical
851-
852835
lemma normalizer_condition_of_is_nilpotent [h : is_nilpotent G] : normalizer_condition G :=
853836
begin
854837
-- roughly based on https://groupprops.subwiki.org/wiki/Nilpotent_implies_normalizer_condition
@@ -871,3 +854,47 @@ begin
871854
apply map_injective_of_ker_le (mk' (center G)) hkh le_top,
872855
exact (ih H' hH').trans (symm (map_top_of_surjective _ hsur)), },
873856
end
857+
858+
end with_group
859+
860+
section with_finite_group
861+
862+
open group
863+
864+
variables {G : Type*} [hG : group G] [hf : fintype G]
865+
include hG hf
866+
867+
/-- A p-group is nilpotent -/
868+
lemma is_p_group.is_nilpotent {p : ℕ} [hp : fact (nat.prime p)] (h : is_p_group p G) :
869+
is_nilpotent G :=
870+
begin
871+
classical,
872+
unfreezingI
873+
{ revert hG,
874+
induction hf using fintype.induction_subsingleton_or_nontrivial with G hG hS G hG hN ih },
875+
{ apply_instance, },
876+
{ introI _, intro h,
877+
have hcq : fintype.card (G ⧸ center G) < fintype.card G,
878+
{ rw card_eq_card_quotient_mul_card_subgroup (center G),
879+
apply lt_mul_of_one_lt_right,
880+
exact (fintype.card_pos_iff.mpr has_one.nonempty),
881+
exact ((subgroup.one_lt_card_iff_ne_bot _).mpr (ne_of_gt h.bot_lt_center)), },
882+
have hnq : is_nilpotent (G ⧸ center G) := ih _ hcq (h.to_quotient (center G)),
883+
exact (of_quotient_center_nilpotent hnq), }
884+
end
885+
886+
/-- If a finite group is the direct product of its Sylow groups, it is nilpotent -/
887+
theorem is_nilpotent_of_product_of_sylow_group
888+
(e : (Π p : (fintype.card G).factorization.support, Π P : sylow p G, (↑P : subgroup G)) ≃* G) :
889+
is_nilpotent G :=
890+
begin
891+
classical,
892+
let ps := (fintype.card G).factorization.support,
893+
haveI : ∀ (p : ps) (P : sylow p G), is_nilpotent (↑P : subgroup G),
894+
{ intros p P,
895+
haveI : fact (nat.prime ↑p) := fact.mk (nat.prime_of_mem_factorization (finset.coe_mem p)),
896+
exact P.is_p_group'.is_nilpotent, },
897+
exact nilpotent_of_mul_equiv e,
898+
end
899+
900+
end with_finite_group

0 commit comments

Comments
 (0)