diff options
| author | Enrico Tassi | 2018-04-17 16:57:13 +0200 |
|---|---|---|
| committer | Enrico Tassi | 2018-04-17 16:57:13 +0200 |
| commit | eaa90cf9520e43d0b05fc6431a479e6b9559ef0e (patch) | |
| tree | 8499953a468a8d8be510dd0d60232cbd8984c1ec /mathcomp/odd_order/BGsection6.v | |
| parent | c1ec9cd8e7e50f73159613c492aad4c6c40bc3aa (diff) | |
move odd_order to its own repository
Diffstat (limited to 'mathcomp/odd_order/BGsection6.v')
| -rw-r--r-- | mathcomp/odd_order/BGsection6.v | 322 |
1 files changed, 0 insertions, 322 deletions
diff --git a/mathcomp/odd_order/BGsection6.v b/mathcomp/odd_order/BGsection6.v deleted file mode 100644 index 9e06b1a..0000000 --- a/mathcomp/odd_order/BGsection6.v +++ /dev/null @@ -1,322 +0,0 @@ -(* (c) Copyright 2006-2016 Microsoft Corporation and Inria. *) -(* Distributed under the terms of CeCILL-B. *) -Require Import mathcomp.ssreflect.ssreflect. -From mathcomp -Require Import ssrfun ssrbool eqtype ssrnat seq div fintype finset. -From mathcomp -Require Import prime fingroup morphism automorphism quotient gproduct gfunctor. -From mathcomp -Require Import cyclic center commutator pgroup nilpotent sylow abelian hall. -From mathcomp -Require Import maximal. -From mathcomp -Require Import BGsection1 BGappendixAB. - -(******************************************************************************) -(* This file covers most of B & G section 6. *) -(* Theorem 6.4 is not proved, since it is not needed for the revised proof of *) -(* the odd order theorem. *) -(******************************************************************************) - -Set Implicit Arguments. -Unset Strict Implicit. -Unset Printing Implicit Defensive. - -Import GroupScope. - -Section Six. - -Implicit Type gT : finGroupType. -Implicit Type p : nat. - -Section OneType. - -Variable gT : finGroupType. -Implicit Types G H K S U : {group gT}. - -(* This is B & G, Theorem A.4(b) and 6.1, or Gorenstein 6.5.2, the main Hall- *) -(* Higman style p-stability result used in the proof of the Odd Order Theorem *) -Theorem odd_p_abelian_constrained p G : - odd #|G| -> solvable G -> p.-abelian_constrained G. -Proof. -move/odd_p_stable=> stabG /solvable_p_constrained constrG. -exact: p_stable_abelian_constrained. -Qed. - -(* Auxiliary results from AppendixAB, necessary to exploit the results below. *) -Definition center_Puig_char := BGappendixAB.center_Puig_char. -Definition trivg_center_Puig_pgroup := BGappendixAB.trivg_center_Puig_pgroup. - -(* The two parts of B & G, Theorem 6.2 are established in BGappendixAB. *) -Theorem Puig_factorisation p G S : - odd #|G| -> solvable G -> p.-Sylow(G) S -> 'O_p^'(G) * 'N_G('Z('L(S))) = G. -Proof. exact: BGappendixAB.Puig_factorization. Qed. - -(* This is the main statement of B & G, Theorem 6.2. It is not used in the *) -(* actual proof. *) -Theorem Puig_center_p'core_normal p G S : - odd #|G| -> solvable G -> p.-Sylow(G) S -> 'O_p^'(G) * 'Z('L(S)) <| G. -Proof. -move=> oddG solG sylS; rewrite -{2}(Puig_factorisation _ _ sylS) //. -have sZL_G: 'Z('L(S)) \subset G by rewrite !gFsub_trans ?(pHall_sub sylS). -rewrite -!quotientK ?(subset_trans sZL_G) ?subIset ?gFnorm //=. -by rewrite cosetpre_normal quotient_normal // normalSG. -Qed. - -(* This is the second part (special case) of B & G, Theorem 6.2. *) -Theorem Puig_center_normal p G S : - odd #|G| -> solvable G -> p.-Sylow(G) S -> 'O_p^'(G) = 1 -> 'Z('L(S)) <| G. -Proof. exact: BGappendixAB.Puig_center_normal. Qed. - -(* This is B & G, Lemma 6.3(a). *) -Lemma coprime_der1_sdprod K H G : - K ><| H = G -> coprime #|K| #|H| -> solvable K -> K \subset G^`(1) -> - [~: K, H] = K /\ 'C_K(H) \subset K^`(1). -Proof. -case/sdprodP=> _ defG nKH tiKH coKH solK sKG'. -set K' := K^`(1); have [sK'K nK'K] := andP (der_normal 1 K : K' <| K). -have nK'H: H \subset 'N(K') := gFnorm_trans _ nKH. -set R := [~: K, H]; have sRK: R \subset K by rewrite commg_subl. -have [nRK nRH] := joing_subP (commg_norm K H : K <*> H \subset 'N(R)). -have sKbK'H': K / R \subset (K / R)^`(1) * (H / R)^`(1). - have defGb: (K / R) \* (H / R) = G / R. - by rewrite -defG quotientMl ?cprodE // centsC quotient_cents2r. - have [_ -> _ /=] := cprodP (der_cprod 1 defGb). - by rewrite -quotient_der ?quotientS // -defG mul_subG. -have tiKbHb': K / R :&: (H / R)^`(1) = 1. - by rewrite coprime_TIg // (coprimegS (der_sub 1 _)) ?coprime_morph. -have{sKbK'H' tiKbHb'} derKb: (K / R)^`(1) = K / R. - by rewrite -{2}(setIidPr sKbK'H') -group_modl ?der_sub // setIC tiKbHb' mulg1. -have{derKb} Kb1: K / R = 1. - rewrite (contraNeq (sol_der1_proper _ (subxx (K / R)))) ?quotient_sol //. - by rewrite derKb properxx. -have{Kb1 sRK} defKH: [~: K, H] = K. - by apply/eqP; rewrite eqEsubset sRK -quotient_sub1 ?Kb1 //=. -split=> //; rewrite -quotient_sub1 ?subIset ?nK'K //= -/K'. -have cKaKa: abelian (K / K') := der_abelian 0 K. -rewrite coprime_quotient_cent ?quotient_norms ?coprime_morph //= -/K' -defKH. -by rewrite quotientR // coprime_abel_cent_TI ?quotient_norms ?coprime_morph. -Qed. - -(* This is B & G, Lemma 6.3(b). It is apparently not used later. *) -Lemma prime_nil_der1_factor G : - nilpotent G^`(1) -> prime #|G / G^`(1)| -> - Hall G G^`(1) /\ (forall H, G^`(1) ><| H = G -> G^`(1) = [~: G, H]). -Proof. -move=> nilG' /=; set G' := G^`(1); set p := #|G / G'| => p_pr. -have nsG'G: G' <| G := der_normal 1 G; have [sG'G nG'G] := andP nsG'G. -have nsG'p'G: 'O_p^'(G') <| G := gFnormal_trans _ nsG'G. -have nG'p'G := normal_norm nsG'p'G; have solG' := nilpotent_sol nilG'. -have{nilG'} pGb: p.-group (G / 'O_p^'(G')). - rewrite /pgroup card_quotient -?(Lagrange_index sG'G (pcore_sub _ _)) //=. - rewrite pnat_mul // -card_quotient // pnat_id //= -pnatNK. - by case/and3P: (nilpotent_pcore_Hall p^' nilG'). -have{pGb} cycGb: cyclic (G / 'O_p^'(G')). - apply: (cyclic_nilpotent_quo_der1_cyclic (pgroup_nil pGb)). - rewrite -quotient_der // (isog_cyclic (third_isog _ _ _)) ?pcore_sub //. - by apply: prime_cyclic. -have defG': G' = 'O_p^'(G'). - by apply/eqP; rewrite eqEsubset pcore_sub der1_min ?cyclic_abelian. -have hallG': Hall G G'. - rewrite /Hall sG'G -?card_quotient // defG' //= -/p. - by rewrite (p'nat_coprime (pcore_pgroup _ _)) ?pnat_id. -split=> // H defG; have [_ mulG'H nG'H tiG'H] := sdprodP defG. -rewrite -mulG'H commMG ?commg_normr // -derg1 (derG1P _) ?mulg1 //. - by case/coprime_der1_sdprod: (defG); rewrite ?(coprime_sdprod_Hall_l defG). -rewrite (isog_abelian (quotient_isog nG'H tiG'H)) /= -/G'. -by rewrite -quotientMidl mulG'H der_abelian. -Qed. - -Section PprodSubCoprime. - -Variables K U H G : {group gT}. -Hypotheses (defG : K * U = G) (nsKG : K <| G). -Hypotheses (sHU : H \subset U) (coKH : coprime #|K| #|H|). -Let nKG : G \subset 'N(K). Proof. by case/andP: nsKG. Qed. -Let sKG : K \subset G. Proof. by case/mulG_sub: defG. Qed. -Let sUG : U \subset G. Proof. by case/mulG_sub: defG. Qed. -Let nKU : U \subset 'N(K). Proof. exact: subset_trans sUG nKG. Qed. -Let nKH : H \subset 'N(K). Proof. exact: subset_trans sHU nKU. Qed. - -(* This is B & G, Lemma 6.5(a); note that we do not assume solvability. *) -Lemma pprod_focal_coprime : H :&: G^`(1) = H :&: U^`(1). -Proof. -set G' := G^`(1); set U' := U^`(1). -have [sU'U nU'U] := andP (der_normal 1 U : U' <| U). -have{nU'U} nU_U': U :&: _ \subset 'N(U') by move=> A; rewrite subIset ?nU'U. -suffices sHG'U': H :&: G' \subset U'. - by rewrite -(setIidPl sHG'U') -setIA (setIidPr (dergS 1 sUG)). -rewrite -(setIidPr sHU) -setIA -quotient_sub1 // setICA setIC. -rewrite quotientGI ?subsetI ?sU'U ?dergS ?coprime_TIg //= -/G' -/U'. -have sUG'_UKb: (U :&: G') / U' \subset (U :&: K) / U'. - rewrite quotientSK // -normC ?group_modr ?setIS //. - by rewrite -quotientSK ?comm_subG ?quotient_der // -defG quotientMidl. -rewrite (coprimeSg sUG'_UKb) // -(card_isog (second_isog _)) //=. -rewrite setIA (setIidPl sU'U) coprime_morphl ?coprime_morphr //. -exact: coprimeSg (subsetIr U K) coKH. -Qed. - -Hypothesis solG : solvable G. - -(* This is B & G, Lemma 6.5(c). *) -Lemma pprod_trans_coprime g : - g \in G -> H :^ g \subset U -> - exists2 c, c \in 'C_K(H) & exists2 u, u \in U & g = c * u. -Proof. -rewrite -{1}defG => /mulsgP[k u Kk Uu defg] sHgU. -have [sK_KH sH_KH] := joing_sub (erefl (K <*> H)). -have hallH: \pi(H).-Hall(K <*> H :&: U) H. - rewrite (pHall_subl _ (subsetIl _ _)) ?subsetI ?sH_KH //. - rewrite /pHall sH_KH pgroup_pi /= joingC norm_joinEl // indexMg -indexgI. - by rewrite -coprime_pi' ?cardG_gt0 //= coprime_sym coprime_TIg ?indexg1. -have{sHgU} hallHk: \pi(H).-Hall(K <*> H :&: U) (H :^ k). - rewrite pHallE cardJg (card_Hall hallH) eqxx andbT subsetI andbC. - rewrite -(conjSg _ _ u) (conjGid Uu) -conjsgM -defg sHgU. - by rewrite sub_conjg conjGid // groupV (subsetP sK_KH). -have{hallH hallHk} [w KUw defHk]: exists2 w, w \in K :&: U & H :^ k = H :^ w. - have sKHU_G: K <*> H :&: U \subset G by rewrite setIC subIset ?sUG. - have [hw KHUhw ->] := Hall_trans (solvableS sKHU_G solG) hallHk hallH. - have: hw \in H * (K :&: U) by rewrite group_modl // -norm_joinEl // joingC. - by case/mulsgP=> h w Hh KUw ->; exists w; rewrite // conjsgM (conjGid Hh). -have{KUw} [Kw Uw] := setIP KUw. -exists (k * w^-1); last by exists (w * u); rewrite ?groupM // -mulgA mulKg. -by rewrite -coprime_norm_cent // !inE groupM ?groupV //= conjsgM defHk conjsgK. -Qed. - -(* This is B & G, Lemma 6.5(b). *) -Lemma pprod_norm_coprime_prod : 'C_K(H) * 'N_U(H) = 'N_G(H). -Proof. -apply/eqP; rewrite eqEsubset mul_subG ?setISS ?cent_sub //=. -apply/subsetP=> g /setIP[Gg /normP nHg]. -have [|c Cc [u Uu defg]] := pprod_trans_coprime Gg; first by rewrite nHg. -rewrite defg mem_mulg // !inE Uu -{2}nHg defg conjsgM conjSg (normP _) //=. -by case/setIP: Cc => _; apply: (subsetP (cent_sub H)). -Qed. - -End PprodSubCoprime. - -Section Plength1Prod. - -Variables (p : nat) (G S : {group gT}). -Hypotheses (sylS : p.-Sylow(G) S) (pl1G : p.-length_1 G). -Let K := 'O_p^'(G). -Let sSG : S \subset G. Proof. by case/andP: sylS. Qed. -Let nsKG : K <| G. Proof. apply: pcore_normal. Qed. -Let sKG : K \subset G. Proof. by case/andP: nsKG. Qed. -Let nKG : G \subset 'N(K). Proof. by case/andP: nsKG. Qed. -Let nKS : S \subset 'N(K). Proof. apply: subset_trans sSG nKG. Qed. -Let coKS : coprime #|K| #|S|. -Proof. exact: p'nat_coprime (pcore_pgroup _ G) (pHall_pgroup sylS). Qed. -Let sSN : S \subset 'N_G(S). Proof. by rewrite subsetI sSG normG. Qed. - -Let sylGbp : p.-Sylow(G / K) 'O_p(G / K). -Proof. by rewrite -plength1_pcore_quo_Sylow. Qed. - -(* This is B & G, Lemma 6.6(a1); note that we do not assume solvability. *) -Lemma plength1_Sylow_prod : K * S = 'O_{p^',p}(G). -Proof. -by rewrite -quotientK 1?(eq_Hall_pcore sylGbp) ?quotient_pHall //= /K -pseries1. -Qed. - -Let sylS_Gp'p : p.-Sylow('O_{p^',p}(G)) S. -Proof. -have [_ sSGp'p] := mulG_sub plength1_Sylow_prod. -exact: pHall_subl sSGp'p (pseries_sub _ _) sylS. -Qed. - -(* This is B & G, Lemma 6.6(a2); note that we do not assume solvability. *) -Lemma plength1_Frattini : K * 'N_G(S) = G. -Proof. -rewrite -{2}(Frattini_arg _ sylS_Gp'p) ?pseries_normal //= -plength1_Sylow_prod. -by rewrite -mulgA [S * _]mulSGid // subsetI sSG normG. -Qed. -Local Notation defG := plength1_Frattini. - -(* This is B & G, Lemma 6.6(b); note that we do not assume solvability. *) -Lemma plength1_Sylow_sub_der1 : S \subset G^`(1) -> S \subset ('N_G(S))^`(1). -Proof. -by move/setIidPl=> sSG'; apply/setIidPl; rewrite -(pprod_focal_coprime defG). -Qed. - -Hypothesis solG : solvable G. - -(* This is B & G, Lemma 6.6(c). *) -Lemma plength1_Sylow_trans (Y : {set gT}) g : - Y \subset S -> g \in G -> Y :^ g \subset S -> - exists2 c, c \in 'C_G(Y) & exists2 u, u \in 'N_G(S) & g = c * u. -Proof. -rewrite -gen_subG -(gen_subG (Y :^ g)) genJ => sYS Gg sYgS. -have coKY := coprimegS sYS coKS. -have [sYN sYgN] := (subset_trans sYS sSN, subset_trans sYgS sSN). -have [c Cc defg] := pprod_trans_coprime defG nsKG sYN coKY solG Gg sYgN. -by exists c => //; apply: subsetP Cc; rewrite cent_gen setSI. -Qed. - -(* This is B & G, Lemma 6.6(d). *) -Lemma plength1_Sylow_Jsub (Q : {group gT}) : - Q \subset G -> p.-group Q -> - exists2 x, x \in 'C_G(Q :&: S) & Q :^ x \subset S. -Proof. -move=> sQG pQ; have sQ_Gp'p: Q \subset 'O_{p^',p}(G). - rewrite -sub_quotient_pre /= pcore_mod1 ?(subset_trans sQG) //. - by rewrite (sub_Hall_pcore sylGbp) ?quotientS ?quotient_pgroup. -have [xy /= KSxy sQxyS] := Sylow_Jsub sylS_Gp'p sQ_Gp'p pQ. -rewrite -plength1_Sylow_prod in KSxy; have [x y Kx Sy def_xy] := mulsgP KSxy. -have{sQxyS} sQxS: Q :^ x \subset S. - by rewrite -(conjSg _ _ y) (conjGid Sy) -conjsgM -def_xy. -exists x; rewrite // inE (subsetP sKG) //; apply/centP=> z; case/setIP=> Qz Sz. -apply/commgP; rewrite -in_set1 -set1gE -(coprime_TIg coKS) inE. -rewrite groupMl ?groupV ?memJ_norm ?(subsetP nKS) ?Kx //=. -by rewrite commgEr groupMr // (subsetP sQxS) ?memJ_conjg ?groupV. -Qed. - -End Plength1Prod. - -End OneType. - -(* This is B & G, Theorem 6.7 *) -Theorem plength1_norm_pmaxElem gT p (G E L : {group gT}) : - E \in 'E*_p(G) -> odd p -> solvable G -> p.-length_1 G -> - L \subset G -> E \subset 'N(L) -> p^'.-group L -> - L \subset 'O_p^'(G). -Proof. -move=> maxE p_odd solG pl1G sLG nEL p'L. -case p_pr: (prime p); last first. - by rewrite pcore_pgroup_id // p'groupEpi mem_primes p_pr. -wlog Gp'1: gT G E L maxE solG pl1G sLG nEL p'L / 'O_p^'(G) = 1. - set K := 'O_p^'(G); have [sKG nKG] := andP (pcore_normal _ G : K <| G). - move/(_ _ (G / K) (E / K) (L / K))%G; rewrite morphim_sol ?plength1_quo //. - rewrite morphimS ?morphim_norms ?quotient_pgroup // trivg_pcore_quotient. - rewrite (quotient_sub1 (subset_trans sLG nKG)) => -> //. - have [EpE _] := pmaxElemP maxE; have{EpE} [sEG abelE] := pElemP EpE. - apply/pmaxElemP; rewrite inE quotient_abelem ?quotientS //. - split=> // Fb; case/pElemP=> sFbG abelFb; have [pFb _ _] := and3P abelFb. - have [S sylS sES] := Sylow_superset sEG (abelem_pgroup abelE). - have [sSG pS _] := and3P sylS; have nKS := subset_trans sSG nKG. - have: (E / K)%G \in 'E*_p(S / K). - have: E \in 'E*_p(S) by rewrite (subsetP (pmaxElemS p sSG)) // inE maxE inE. - have coKS: coprime #|K| #|S| := p'nat_coprime (pcore_pgroup _ _) pS. - have [injK imK] := isomP (quotient_isom nKS (coprime_TIg coKS)). - by rewrite -(injm_pmaxElem injK) ?imK ?inE //= morphim_restrm (setIidPr _). - case/pmaxElemP=> _; apply; rewrite inE abelFb andbT. - rewrite (sub_normal_Hall (quotient_pHall _ sylS)) //= -quotientMidl /= -/K. - by rewrite plength1_Sylow_prod // quotient_pseries2 pcore_normal. -have [EpE _] := pmaxElemP maxE; have{EpE} [sEG abelE] := pElemP EpE. -have [S sylS sES] := Sylow_superset sEG (abelem_pgroup abelE). -have [sSG pS _] := and3P sylS; have oddS: odd #|S| := odd_pgroup_odd p_odd pS. -have defS: S :=: 'O_p(G) by apply eq_Hall_pcore; rewrite -?plength1_pcore_Sylow. -have coSL: coprime #|S| #|L| := pnat_coprime pS p'L. -have tiSL: S :&: L = 1 := coprime_TIg coSL. -have{solG} scSG: 'C_G(S) \subset S. - by rewrite defS -Fitting_eq_pcore ?cent_sub_Fitting. -rewrite Gp'1 -tiSL subsetIidr (subset_trans _ scSG) // subsetI sLG /=. -have nSL: L \subset 'N(S) by rewrite (subset_trans sLG) // defS gFnorm. -have cLE: L \subset 'C(E). - by rewrite (sameP commG1P trivgP) -tiSL setIC commg_subI ?(introT subsetIP). -have maxES: E \in 'E*_p(S) by rewrite (subsetP (pmaxElemS p sSG)) ?(maxE, inE). -have EpE: E \in 'E_p(S) by apply/setIdP. -by rewrite (coprime_odd_faithful_cent_abelem EpE) ?(pmaxElem_LdivP p_pr maxES). -Qed. - -End Six. - |
