aboutsummaryrefslogtreecommitdiff
path: root/mathcomp/odd_order/BGsection13.v
diff options
context:
space:
mode:
authorEnrico Tassi2018-04-17 16:57:13 +0200
committerEnrico Tassi2018-04-17 16:57:13 +0200
commiteaa90cf9520e43d0b05fc6431a479e6b9559ef0e (patch)
tree8499953a468a8d8be510dd0d60232cbd8984c1ec /mathcomp/odd_order/BGsection13.v
parentc1ec9cd8e7e50f73159613c492aad4c6c40bc3aa (diff)
move odd_order to its own repository
Diffstat (limited to 'mathcomp/odd_order/BGsection13.v')
-rw-r--r--mathcomp/odd_order/BGsection13.v1123
1 files changed, 0 insertions, 1123 deletions
diff --git a/mathcomp/odd_order/BGsection13.v b/mathcomp/odd_order/BGsection13.v
deleted file mode 100644
index de9ddaf..0000000
--- a/mathcomp/odd_order/BGsection13.v
+++ /dev/null
@@ -1,1123 +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 ssrbool ssrfun eqtype ssrnat seq div path fintype.
-From mathcomp
-Require Import bigop finset prime fingroup morphism perm automorphism quotient.
-From mathcomp
-Require Import action gproduct gfunctor pgroup cyclic center commutator.
-From mathcomp
-Require Import gseries nilpotent sylow abelian maximal hall frobenius.
-From mathcomp
-Require Import BGsection1 BGsection3 BGsection4 BGsection5 BGsection6.
-From mathcomp
-Require Import BGsection7 BGsection9 BGsection10 BGsection12.
-
-(******************************************************************************)
-(* This file covers B & G, section 13; the title subject of the section, *)
-(* prime and regular actions, was defined in the frobenius.v file. *)
-(******************************************************************************)
-
-Set Implicit Arguments.
-Unset Strict Implicit.
-Unset Printing Implicit Defensive.
-
-Import GroupScope.
-
-Section Section13.
-
-Variable gT : minSimpleOddGroupType.
-Local Notation G := (TheMinSimpleOddGroup gT).
-Implicit Types p q q_star r : nat.
-Implicit Types A E H K L M Mstar N P Q Qstar R S T U V W X Y Z : {group gT}.
-
-Section OneComplement.
-
-Variables M E : {group gT}.
-Hypotheses (maxM : M \in 'M) (hallE : \sigma(M)^'.-Hall(M) E).
-
-Let sEM : E \subset M := pHall_sub hallE.
-Let sM'E : \sigma(M)^'.-group E := pHall_pgroup hallE.
-
-(* This is B & G, Lemma 13.1. *)
-Lemma Msigma_setI_mmax_central p H :
- H \in 'M -> p \in \pi(E) -> p \in \pi(H) -> p \notin \tau1(H) ->
- [~: M`_\sigma :&: H, M :&: H] != 1 -> gval H \notin M :^: G ->
- [/\ (*a*) forall P, P \subset M :&: H -> p.-group P ->
- P \subset 'C(M`_\sigma :&: H),
- (*b*) p \notin \tau2(H)
- & (*c*) p \in \tau1(M) -> p \in \beta(G)].
-Proof.
-move=> maxH piEp piHp t1H'p; set R := [~: _, _] => ntR notMGH.
-have [q sMq piH'q]: exists2 q, q \in \sigma(M) & q \in \pi(H^`(1)).
- pose q := pdiv #|R|; have q_pr: prime q by rewrite pdiv_prime ?cardG_gt1.
- have q_dv : q %| _ := dvdn_trans (pdiv_dvd _) (cardSg _).
- exists q; last by rewrite mem_primes q_pr cardG_gt0 q_dv ?commgSS ?subsetIr.
- rewrite (pgroupP (pcore_pgroup _ M)) ?q_dv //.
- have sR_MsM: R \subset [~: M`_\sigma, M] by rewrite commgSS ?subsetIl.
- by rewrite (subset_trans sR_MsM) // commg_subl gFnorm.
-have [Y sylY] := Sylow_exists q H^`(1); have [sYH' qY _] := and3P sylY.
-have nsHbH: H`_\beta <| H := pcore_normal _ _; have [_ nHbH] := andP nsHbH.
-have sYH := subset_trans sYH' (der_sub 1 H); have nHbY := subset_trans sYH nHbH.
-have nsHbY_H: H`_\beta <*> Y <| H.
- rewrite -{2}(quotientGK nsHbH) -quotientYK ?cosetpre_normal //.
- have ->: Y / H`_\beta = 'O_q(H^`(1) / H`_\beta).
- by apply: nilpotent_Hall_pcore; rewrite ?Mbeta_quo_nil ?quotient_pHall.
- by rewrite quotient_der ?gFnormal_trans.
-have sYNY: Y \subset 'N_H(Y) by rewrite subsetI sYH normG.
-have{nsHbY_H} defH: H`_\beta * 'N_H(Y) = H.
- rewrite -(mulSGid sYNY) mulgA -(norm_joinEr nHbY).
- rewrite (Frattini_arg _ (pHall_subl _ _ sylY)) ?joing_subr //.
- by rewrite join_subG Mbeta_der1.
-have ntY: Y :!=: 1 by rewrite -cardG_gt1 (card_Hall sylY) p_part_gt1.
-have{ntY} [_] := sigma_Jsub maxM (pi_pgroup qY sMq) ntY.
-have maxY_H: H \in 'M(Y) by apply/setIdP.
-move/(_ E p H hallE piEp _ maxY_H notMGH) => b'p_t3Hp.
-case t2Hp: (p \in \tau2(H)).
- have b'p: p \notin \beta(G) by case/tau2_not_beta: t2Hp.
- have rpH: 'r_p(H) = 2 by apply/eqP; case/andP: t2Hp.
- have p'Hb: p^'.-group H`_\beta.
- rewrite (pi_p'group (pcore_pgroup _ H)) // inE /=.
- by rewrite -predI_sigma_beta // negb_and b'p orbT.
- case: b'p_t3Hp; rewrite // -(p_rank_p'quotient p'Hb) ?subIset ?nHbH //=.
- by rewrite -quotientMidl defH p_rank_p'quotient ?rpH.
-have [S sylS] := Sylow_exists p H; have [sSH pS _] := and3P sylS.
-have sSH': S \subset H^`(1).
- have [sHp | sH'p] := boolP (p \in \sigma(H)).
- apply: subset_trans (Msigma_der1 maxH).
- by rewrite (sub_Hall_pcore (Msigma_Hall _)) // (pi_pgroup pS).
- have sH'_S: \sigma(H)^'.-group S by rewrite (pi_pgroup pS).
- have [F hallF sSF] := Hall_superset (mmax_sol maxH) sSH sH'_S.
- have t3Hp: p \in \tau3(H).
- have:= partition_pi_sigma_compl maxH hallF p.
- by rewrite (pi_sigma_compl hallF) inE /= sH'p piHp (negPf t1H'p) t2Hp.
- have [[F1 hallF1] [F3 hallF3]] := ex_tau13_compl hallF.
- have [F2 _ complFi] := ex_tau2_compl hallF hallF1 hallF3.
- have [[sF3F' nsF3F] _ _ _ _] := sigma_compl_context maxH complFi.
- apply: subset_trans (subset_trans sF3F' (dergS 1 (pHall_sub hallF))).
- by rewrite (sub_normal_Hall hallF3) ?(pi_pgroup pS).
-have sylS_H' := pHall_subl sSH' (der_sub 1 H) sylS.
-split=> // [P sPMH pP | t1Mp]; last first.
- apply/idPn=> b'p; have [_ /(_ t1Mp)/negP[]] := b'p_t3Hp b'p.
- have p'Hb: p^'.-group H`_\beta.
- rewrite (pi_p'group (pcore_pgroup _ H)) // inE /=.
- by rewrite -predI_sigma_beta // negb_and b'p orbT.
- rewrite -p_rank_gt0 -(p_rank_p'quotient p'Hb) ?comm_subG ?subIset ?nHbH //=.
- rewrite quotient_der ?subIset ?nHbH // -quotientMidl defH -quotient_der //=.
- rewrite p_rank_p'quotient ?comm_subG // -(rank_Sylow sylS_H').
- by rewrite (rank_Sylow sylS) p_rank_gt0.
-have nsHaH: H`_\alpha <| H := pcore_normal _ _; have [_ nHaH] := andP nsHaH.
-have [sPM sPH] := subsetIP sPMH; have nHaS := subset_trans sSH nHaH.
-have nsHaS_H: H`_\alpha <*> S <| H.
- rewrite -[H in _ <| H](quotientGK nsHaH) -quotientYK ?cosetpre_normal //.
- have ->: S / H`_\alpha = 'O_p(H^`(1) / H`_\alpha).
- by apply: nilpotent_Hall_pcore; rewrite ?Malpha_quo_nil ?quotient_pHall.
- by rewrite quotient_der ?gFnormal_trans.
-have [sHaS_H nHaS_H] := andP nsHaS_H.
-have sP_HaS: P \subset H`_\alpha <*> S.
- have [x Hx sPSx] := Sylow_subJ sylS sPH pP; apply: subset_trans sPSx _.
- by rewrite sub_conjg (normsP nHaS_H) ?groupV ?joing_subr.
-have coHaS_Ms: coprime #|H`_\alpha <*> S| #|M`_\sigma|.
- rewrite (p'nat_coprime _ (pcore_pgroup _ _)) // -pgroupE norm_joinEr //.
- rewrite pgroupM andbC (pi_pgroup pS) ?(pnatPpi (pHall_pgroup hallE)) //=.
- apply: sub_pgroup (pcore_pgroup _ _) => r aHr.
- have [|_ ti_aH_sM _] := sigma_disjoint maxH maxM; first by rewrite orbit_sym.
- by apply: contraFN (ti_aH_sM r) => sMr; apply/andP.
-rewrite (sameP commG1P trivgP) -(coprime_TIg coHaS_Ms) commg_subI ?setIS //.
-by rewrite subsetI sP_HaS (subset_trans sPM) ?gFnorm.
-Qed.
-
-(* This is B & G, Corollary 13.2. *)
-Corollary cent_norm_tau13_mmax p P H :
- (p \in \tau1(M)) || (p \in \tau3(M)) ->
- P \subset M -> p.-group P -> H \in 'M('N(P)) ->
- [/\ (*a*) forall P1, P1 \subset M :&: H -> p.-group P1 ->
- P1 \subset 'C(M`_\sigma :&: H),
- (*b*) forall X, X \subset E :&: H -> \tau1(H)^'.-group X ->
- X \subset 'C(M`_\sigma :&: H)
- & (*c*) [~: M`_\sigma :&: H, M :&: H] != 1 ->
- p \in \sigma(H) /\ (p \in \tau1(M) -> p \in \beta(H))].
-Proof.
-move=> t13Mp sPM pP /setIdP[maxH sNP_H].
-have ntP: P :!=: 1.
- by apply: contraTneq sNP_H => ->; rewrite norm1 proper_subn ?mmax_proper.
-have st2Hp: (p \in \sigma(H)) || (p \in \tau2(H)).
- exact: (prime_class_mmax_norm maxH pP sNP_H).
-have not_MGH: gval H \notin M :^: G.
- apply: contraL st2Hp => /imsetP[x _ ->]; rewrite sigmaJ tau2J negb_or.
- by have:= t13Mp; rewrite -2!andb_orr !inE => /and3P[-> /eqP->].
-set R := [~: _, _]; have [/commG1P | ntR] := altP (R =P 1).
- rewrite centsC => cMH; split=> // X sX_EH _; apply: subset_trans cMH => //.
- by rewrite (subset_trans sX_EH) ?setSI.
-have piEp: p \in \pi(E).
- by rewrite (partition_pi_sigma_compl maxM) // orbCA t13Mp orbT.
-have piHp: p \in \pi(H).
- by rewrite (partition_pi_mmax maxH) orbCA orbC -!orbA st2Hp !orbT.
-have t1H'p: p \notin \tau1(H).
- by apply: contraL st2Hp; rewrite negb_or !inE => /and3P[-> /eqP->].
-case: (Msigma_setI_mmax_central maxH piEp) => // cMsH t2H'p b_p.
-split=> // [X sX_EH t1'X | _].
- have [sXE sXH] := subsetIP sX_EH.
- rewrite -(Sylow_gen X) gen_subG; apply/bigcupsP=> Q; case/SylowP=> q _ sylQ.
- have [-> | ntQ] := eqsVneq Q 1; first exact: sub1G.
- have piXq: q \in \pi(X) by rewrite -p_rank_gt0 -(rank_Sylow sylQ) rank_gt0.
- have [[piEq piHq] t1H'q] := (piSg sXE piXq, piSg sXH piXq, pnatPpi t1'X piXq).
- have [sQX qQ _] := and3P sylQ; have sXM := subset_trans sXE sEM.
- case: (Msigma_setI_mmax_central maxH piEq) => // -> //.
- by rewrite subsetI !(subset_trans sQX).
-rewrite (negPf t2H'p) orbF in st2Hp.
-by rewrite -predI_sigma_beta // {3}/in_mem /= st2Hp.
-Qed.
-
-(* This is B & G, Corollary 13.3(a). *)
-Lemma cyclic_primact_Msigma p P :
- p.-Sylow(E) P -> cyclic P -> semiprime M`_\sigma P.
-Proof.
-move=> sylP cycP x /setD1P[]; rewrite -cycle_eq1 -cycle_subG => ntX sXP.
-have [sPE pP _] := and3P sylP; rewrite -cent_cycle.
-have sPM := subset_trans sPE sEM; have sXM := subset_trans sXP sPM.
-have pX := pgroupS sXP pP; have ltXG := mFT_pgroup_proper pX.
-have t13p: (p \in \tau1(M)) || (p \in \tau3(M)).
- rewrite (tau1E maxM hallE) (tau3E maxM hallE) -p_rank_gt0 -(rank_Sylow sylP).
- rewrite eqn_leq rank_gt0 (subG1_contra sXP) //= andbT -andb_orl orNb.
- by rewrite -abelian_rank1_cyclic ?cyclic_abelian.
-have [H maxNH] := mmax_exists (mFT_norm_proper ntX ltXG).
-have [cMsX _ _] := cent_norm_tau13_mmax t13p sXM pX maxNH.
-have [_ sNH] := setIdP maxNH.
-apply/eqP; rewrite eqEsubset andbC setIS ?centS // subsetI subsetIl /= centsC.
-apply: subset_trans (cMsX P _ pP) (centS _).
- rewrite subsetI sPM (subset_trans (cents_norm _) sNH) //.
- by rewrite sub_abelian_cent // cyclic_abelian.
-by rewrite setIS // (subset_trans (cent_sub _) sNH).
-Qed.
-
-(* This is B & G, Corollary 13.3(b). *)
-Corollary tau3_primact_Msigma E3 :
- \tau3(M).-Hall(E) E3 -> semiprime M`_\sigma E3.
-Proof.
-move=> hallE3 x /setD1P[]; rewrite -cycle_eq1 -cycle_subG => ntX sXE3.
-have [sE3E t3E3 _] := and3P hallE3; rewrite -cent_cycle.
-have [[E1 hallE1] _] := ex_tau13_compl hallE.
-have [E2 _ complEi] := ex_tau2_compl hallE hallE1 hallE3.
-have [[sE3E' nsE3E] _ [_ cycE3] _ _] := sigma_compl_context maxM complEi.
-apply/eqP; rewrite eqEsubset andbC setIS ?centS // subsetI subsetIl /= centsC.
-pose p := pdiv #[x]; have p_pr: prime p by rewrite pdiv_prime ?cardG_gt1.
-have t3p: p \in \tau3(M) by rewrite (pgroupP (pgroupS sXE3 t3E3)) ?pdiv_dvd.
-have t13p: [|| p \in \tau1(M) | p \in \tau3(M)] by rewrite t3p orbT.
-have [y Xy oy]:= Cauchy p_pr (pdiv_dvd _).
-have ntY: <[y]> != 1 by rewrite -cardG_gt1 -orderE oy prime_gt1.
-have pY: p.-group <[y]> by rewrite /pgroup -orderE oy pnat_id.
-have [H maxNH] := mmax_exists (mFT_norm_proper ntY (mFT_pgroup_proper pY)).
-have sYE3: <[y]> \subset E3 by rewrite cycle_subG (subsetP sXE3).
-have sYE := subset_trans sYE3 sE3E; have sYM := subset_trans sYE sEM.
-have [_ cMsY _] := cent_norm_tau13_mmax t13p sYM pY maxNH.
-have [_ sNH] := setIdP maxNH.
-have sE3H': E3 \subset H^`(1).
- rewrite (subset_trans sE3E') ?dergS // (subset_trans _ sNH) ?normal_norm //.
- by rewrite (char_normal_trans _ nsE3E) // sub_cyclic_char.
-apply: subset_trans (cMsY E3 _ _) (centS _).
-- rewrite subsetI sE3E (subset_trans (cents_norm _) sNH) //.
- by rewrite sub_abelian_cent ?cyclic_abelian.
-- rewrite (pgroupS sE3H') //; apply/pgroupP=> q _ q_dv_H'.
- by rewrite !inE q_dv_H' !andbF.
-by rewrite setIS // (subset_trans _ sNH) // cents_norm ?centS ?cycle_subG.
-Qed.
-
-(* This is B & G, Theorem 13.4. *)
-(* Note how the non-structural steps in the proof (top of p. 99, where it is *)
-(* deduced that C_M_alpha(P) <= C_M_alpha(R) from q \notin \alpha, and then *)
-(* C_M_alpha(P) = C_M_alpha(R) from r \in tau_1(M) !!), are handled cleanly *)
-(* on lines 5-12 of the proof by a conditional expression for the former, and *)
-(* a without loss tactic for the latter. *)
-(* Also note that the references to 10.12 and 12.2 are garbled (some are *)
-(* missing, and some are exchanged!). *)
-Theorem cent_tau1Elem_Msigma p r P R (Ms := M`_\sigma) :
- p \in \tau1(M) -> P \in 'E_p^1(E) -> R \in 'E_r^1('C_E(P)) ->
- 'C_Ms(P) \subset 'C_Ms(R).
-Proof.
-have /andP[sMsM nMsM]: Ms <| M := pcore_normal _ M.
-have coMsE: coprime #|Ms| #|E| := coprime_sigma_compl hallE.
-pose Ma := M`_\alpha; have sMaMs: Ma \subset Ms := Malpha_sub_Msigma maxM.
-rewrite pnElemI -setIdE => t1Mp EpP /setIdP[ErR cPR].
-without loss symPR: p r P R EpP ErR cPR t1Mp /
- r \in \tau1(M) -> 'C_Ma(P) \subset 'C_Ma(R) -> 'C_Ma(P) = 'C_Ma(R).
-- move=> IH; apply: (IH p r) => // t1Mr sCaPR; apply/eqP; rewrite eqEsubset.
- rewrite sCaPR -(setIidPl sMaMs) -!setIA setIS ?(IH r p) 1?centsC // => _.
- by case/eqVproper; rewrite // /proper sCaPR andbF.
-do [rewrite !subsetI !subsetIl /=; set cRCaP := _ \subset _] in symPR *.
-pose Mz := 'O_(if cRCaP then \sigma(M) else \alpha(M))(M); pose C := 'C_Mz(P).
-suffices: C \subset 'C(R) by rewrite /C /Mz /cRCaP; case: ifP => // ->.
-have sMzMs: Mz \subset Ms by rewrite /Mz; case: ifP => // _.
-have sCMs: C \subset Ms by rewrite subIset ?sMzMs.
-have [[sPE abelP dimP] [sRE abelR dimR]] := (pnElemP EpP, pnElemP ErR).
-have [sPM sRM] := (subset_trans sPE sEM, subset_trans sRE sEM).
-have [[pP cPP _] [rR _]] := (and3P abelP, andP abelR).
-have coCR: coprime #|C| #|R| := coprimeSg sCMs (coprimegS sRE coMsE).
-have ntP: P :!=: 1 by apply: nt_pnElem EpP _.
-pose ST := [set S | Sylow C (gval S) & R \subset 'N(S)].
-have sST_CP S: S \in ST -> S \subset C by case/setIdP=> /SylowP[q _ /andP[]].
-rewrite -{sST_CP}[C](Sylow_transversal_gen sST_CP) => [|q _]; last first.
- have nMzR: R \subset 'N(Mz) by rewrite (subset_trans sRM) // gFnorm.
- have{nMzR} nCR: R \subset 'N(C) by rewrite normsI // norms_cent // cents_norm.
- have solC := solvableS (subset_trans sCMs sMsM) (mmax_sol maxM).
- have [S sylS nSR] := coprime_Hall_exists q nCR coCR solC.
- by exists S; rewrite // inE (p_Sylow sylS) nSR.
-rewrite gen_subG; apply/bigcupsP=> S /setIdP[/SylowP[q _ sylS] nSR] {ST}.
-have [sSC qS _] := and3P sylS.
-have [sSMs [sSMz cPS]] := (subset_trans sSC sCMs, subsetIP sSC).
-rewrite (sameP commG1P eqP) /=; set Q := [~: S, R]; apply/idPn => ntQ.
-have sQS: Q \subset S by [rewrite commg_subl]; have qQ := pgroupS sQS qS.
-have piQq: q \in \pi(Q) by rewrite -p_rank_gt0 -(rank_pgroup qQ) rank_gt0.
-have{piQq} [nQR piSq] := (commg_normr R S : R \subset 'N(Q), piSg sQS piQq).
-have [H maxNH] := mmax_exists (mFT_norm_proper ntP (mFT_pgroup_proper pP)).
-have [maxH sNH] := setIdP maxNH; have sCPH := subset_trans (cent_sub _) sNH.
-have [sPH sRH] := (subset_trans cPP sCPH, subset_trans cPR sCPH).
-have [sSM sSH] := (subset_trans sSMs sMsM, subset_trans cPS sCPH).
-have [sQM sQH] := (subset_trans sQS sSM, subset_trans sQS sSH).
-have ntMsH_R: [~: Ms :&: H, R] != 1.
- by rewrite (subG1_contra _ ntQ) ?commSg // subsetI sSMs.
-have sR_EH: R \subset E :&: H by apply/subsetIP.
-have ntMsH_MH: [~: Ms :&: H, M :&: H] != 1.
- by rewrite (subG1_contra _ ntMsH_R) ?commgS // (subset_trans sR_EH) ?setSI.
-have t13Mp: p \in [predU \tau1(M) & \tau3(M)] by apply/orP; left.
-have [_ cMsH_t1H' [//|sHp bHp]] := cent_norm_tau13_mmax t13Mp sPM pP maxNH.
-have{cMsH_t1H'} t1Hr: r \in \tau1(H).
- apply: contraR ntMsH_R => t1H'r; rewrite (sameP eqP commG1P) centsC.
- by rewrite cMsH_t1H' // (pi_pgroup rR).
-have ntCHaRQ: 'C_(H`_\alpha)(R <*> Q) != 1.
- rewrite centY (subG1_contra _ ntP) ?subsetI //= centsC cPR centsC.
- rewrite (subset_trans sQS cPS) (subset_trans _ (Mbeta_sub_Malpha H)) //.
- by rewrite (sub_Hall_pcore (Mbeta_Hall maxH)) // (pi_pgroup pP) ?bHp.
-have not_MGH: gval H \notin M :^: G.
- by apply: contraL sHp => /imsetP[x _ ->]; rewrite sigmaJ; case/andP: t1Mp.
-have neqHM: H :!=: M := contra_orbit _ _ not_MGH.
-have cSS: abelian S.
- apply: contraR neqHM => /(nonabelian_Uniqueness qS)uniqS.
- by rewrite (eq_uniq_mmax (def_uniq_mmax uniqS maxM sSM) maxH sSH).
-have tiQcR: 'C_Q(R) = 1 by rewrite coprime_abel_cent_TI // (coprimeSg sSC).
-have sMq: q \in \sigma(M) := pnatPpi (pcore_pgroup _ M) (piSg sSMs piSq).
-have aH'q: q \notin \alpha(H).
- have [|_ tiHaMs _] := sigma_disjoint maxH maxM; first by rewrite orbit_sym.
- by apply: contraFN (tiHaMs q) => aHq; apply/andP.
-have piRr: r \in \pi(R) by rewrite -p_rank_gt0 p_rank_abelem ?dimR.
-have ErH_R: R \in 'E_r^1(H) by rewrite !inE sRH abelR dimR.
-have{piRr} sM'r: r \in \sigma(M)^' := pnatPpi (pgroupS sRE sM'E) piRr.
-have r'q: q \in r^' by apply: contraTneq sMq => ->.
-have ntHa: H`_\alpha != 1 by rewrite (subG1_contra _ ntCHaRQ) ?subsetIl.
-have uniqNQ: 'M('N(Q)) = [set H].
- apply: contraNeq ntCHaRQ; rewrite joingC.
- by case/(cent_Malpha_reg_tau1 _ _ r'q ErH_R) => //; case=> //= _ -> _.
-have maxNQ_H: H \in 'M('N(Q)) :\ M by rewrite uniqNQ !inE neqHM /=.
-have{maxNQ_H} [_ _] := sigma_subgroup_embedding maxM sMq sQM qQ ntQ maxNQ_H.
-have [sHq [_ st1HM [_ ntMa]] | _ [_ _ sM'MH]] := ifP; last first.
- have piPp: p \in \pi(P) by rewrite -p_rank_gt0 p_rank_abelem ?dimP.
- have sPMH: P \subset M :&: H by apply/subsetIP.
- by have/negP[] := pnatPpi (pgroupS sPMH (pHall_pgroup sM'MH)) piPp.
-have{st1HM} t1Mr: r \in \tau1(M).
- by case/orP: (st1HM r t1Hr); rewrite //= (contraNF ((alpha_sub_sigma _) r)).
-have aM'q: q \notin \alpha(M).
- have [_ tiMaHs _] := sigma_disjoint maxM maxH not_MGH.
- by apply: contraFN (tiMaHs q) => aMq; apply/andP.
-have ErM_R: R \in 'E_r^1(M) by rewrite !inE sRM abelR dimR.
-have: 'M('N(Q)) != [set M] by rewrite uniqNQ (inj_eq (@set1_inj _)).
-case/(cent_Malpha_reg_tau1 _ _ r'q ErM_R) => //.
-case=> //= ntCMaP tiCMaPQ _; case/negP: ntCMaP.
-rewrite -subG1 -{}tiCMaPQ centY setICA subsetIidr /= -/Ma -/Q centsC.
-apply/commG1P/three_subgroup; apply/commG1P.
- by rewrite commGC (commG1P _) ?sub1G ?subsetIr.
-apply: subset_trans (subsetIr Ma _); rewrite /= -symPR //.
- rewrite commg_subl normsI //; last by rewrite norms_cent // cents_norm.
- by rewrite (subset_trans sSM) ?gFnorm.
-apply: contraR aM'q => not_cRCaP; apply: pnatPpi (pgroupS sSMz _) piSq.
-by rewrite (negPf not_cRCaP) pcore_pgroup.
-Qed.
-
-(* This is B & G, Theorem 13.5. *)
-Theorem tau1_primact_Msigma E1 : \tau1(M).-Hall(E) E1 -> semiprime M`_\sigma E1.
-Proof.
-move=> hallE1 x /setD1P[]; rewrite -cycle_eq1 -cycle_subG => ntX sXE1.
-rewrite -cent_cycle; have [sE1E t1E1 _] := and3P hallE1.
-have [_ [E3 hallE3]] := ex_tau13_compl hallE.
-have{hallE3} [E2 _ complEi] := ex_tau2_compl hallE hallE1 hallE3.
-have [_ _ [cycE1 _] _ _ {E2 E3 complEi}] := sigma_compl_context maxM complEi.
-apply/eqP; rewrite eqEsubset andbC setIS ?centS //= subsetI subsetIl /=.
-have [p _ rX] := rank_witness <[x]>; rewrite -rank_gt0 {}rX in ntX.
-have t1p: p \in \tau1(M) by rewrite (pnatPpi t1E1) // (piSg sXE1) -?p_rank_gt0.
-have{ntX} [P EpP] := p_rank_geP ntX; have{EpP} [sPX abelP dimP] := pnElemP EpP.
-have{sXE1} sPE1 := subset_trans sPX sXE1.
-have{dimP} EpP: P \in 'E_p^1(E) by rewrite !inE abelP dimP (subset_trans sPE1).
-apply: {x sPX abelP} subset_trans (setIS _ (centS sPX)) _; rewrite centsC.
-rewrite -(Sylow_gen E1) gen_subG; apply/bigcupsP=> S; case/SylowP=> r _ sylS.
-have [[sSE1 rS _] [-> | ntS]] := (and3P sylS, eqsVneq S 1); first exact: sub1G.
-have [cycS sSE] := (cyclicS sSE1 cycE1, subset_trans sSE1 sE1E).
-have /p_rank_geP[R ErR]: 0 < 'r_r(S) by rewrite -rank_pgroup ?rank_gt0.
-have{ErR} [sRS abelR dimR] := pnElemP ErR; have sRE1 := subset_trans sRS sSE1.
-have{abelR dimR} ErR: R \in 'E_r^1('C_E(P)).
- rewrite !inE abelR dimR (subset_trans sRE1) // subsetI sE1E.
- by rewrite sub_abelian_cent ?cyclic_abelian.
-rewrite centsC (subset_trans (cent_tau1Elem_Msigma t1p EpP ErR)) //.
-have [y defR]: exists y, R :=: <[y]> by apply/cyclicP; apply: cyclicS cycS.
-have sylS_E: r.-Sylow(E) S.
- apply: subHall_Sylow hallE1 (pnatPpi t1E1 _) (sylS).
- by rewrite -p_rank_gt0 -(rank_Sylow sylS) rank_gt0.
-rewrite defR cent_cycle (cyclic_primact_Msigma sylS_E cycS) ?subsetIr //.
-by rewrite !inE -cycle_subG -cycle_eq1 -defR (nt_pnElem ErR).
-Qed.
-
-(* This is B & G, Lemma 13.6. *)
-(* The wording at the top of the proof is misleading: it should say: by *)
-(* Corollary 12.14, it suffices to show that we can't have both q \in beta(M) *)
-(* and X \notsubset M_sigma^(1). Also, the reference to 12.13 should be 12.19 *)
-(* or 10.9 (we've used 12.19 here). *)
-Lemma cent_cent_Msigma_tau1_uniq E1 P q X (Ms := M`_\sigma) :
- \tau1(M).-Hall(E) E1 -> P \subset E1 -> P :!=: 1 ->
- X \in 'E_q^1('C_Ms(P)) ->
- 'M('C(X)) = [set M] /\ (forall S, q.-Sylow(Ms) S -> 'M(S) = [set M]).
-Proof.
-move=> hallE1 sPE1 ntP EqX; have [sE1E t1E1 _] := and3P hallE1.
-rewrite (cent_semiprime (tau1_primact_Msigma hallE1)) //= -/Ms in EqX.
-have{P ntP sPE1} ntE1 := subG1_contra sPE1 ntP.
-have /andP[sMsM nMsM]: Ms <| M := pcore_normal _ M.
-have coMsE: coprime #|Ms| #|E| := coprime_sigma_compl hallE.
-have [solMs nMsE] := (solvableS sMsM (mmax_sol maxM), subset_trans sEM nMsM).
-apply: cent_der_sigma_uniq => //.
- by move: EqX; rewrite -(setIidPr sMsM) -setIA pnElemI => /setIP[].
-have{EqX} [[sXcMsE1 abelX _] ntX] := (pnElemP EqX, nt_pnElem EqX isT).
-apply: contraR ntX => /norP[b'q not_sXMs']; rewrite -subG1.
-have [S sylS nSE] := coprime_Hall_exists q nMsE coMsE solMs.
-have{abelX} [[sSMs qS _] [qX _]] := (and3P sylS, andP abelX).
-have sScMsE': S \subset 'C_Ms(E^`(1)).
- have [H hallH cHE'] := der_compl_cent_beta' maxM hallE.
- have [Q sylQ] := Sylow_exists q H; have [sQH qQ _] := and3P sylQ.
- have{cHE' sQH} cQE' := centsS sQH cHE'; have sE'E := der_sub 1 E.
- have [nMsE' coMsE'] := (coprimegS sE'E coMsE, subset_trans sE'E nMsE).
- have{H hallH sylQ} sylQ := subHall_Sylow hallH b'q sylQ.
- have nSE' := subset_trans sE'E nSE; have nQE' := cents_norm cQE'.
- have [x cE'x ->] := coprime_Hall_trans coMsE' nMsE' solMs sylS nSE' sylQ nQE'.
- by rewrite conj_subG // subsetI (pHall_sub sylQ) centsC.
-without loss{qX} sXS: X sXcMsE1 not_sXMs' / X \subset S.
- have [nMsE1 coMsE1 IH] := (subset_trans sE1E nMsE, coprimegS sE1E coMsE).
- have [nSE1 [sXMs cE1X]] := (subset_trans sE1E nSE, subsetIP sXcMsE1).
- have [|Q [sylQ nQE1 sXQ]] := coprime_Hall_subset nMsE1 coMsE1 solMs sXMs qX.
- by rewrite cents_norm // centsC.
- have [//|x cE1x defS] := coprime_Hall_trans nMsE1 _ solMs sylS nSE1 sylQ nQE1.
- have Ms_x: x \in Ms by case/setIP: cE1x.
- rewrite -(conjs1g x^-1) -sub_conjg IH //; last by rewrite defS conjSg.
- by rewrite -(conjGid cE1x) conjSg.
- by rewrite -(normsP (der_norm 1 _) x) ?conjSg.
-have [sXMs cE1X] := subsetIP sXcMsE1.
-have [_ [E3 hallE3]] := ex_tau13_compl hallE.
-have{hallE3} [E2 hallE2 complEi] := ex_tau2_compl hallE hallE1 hallE3.
-have{not_sXMs' E3 complEi} ntE2: E2 :!=: 1.
- apply: contraNneq not_sXMs' => E2_1.
- have [[sE3E' _] _ _ [defE _] _] := sigma_compl_context maxM complEi.
- have [sCMsE_Ms' _ _] := sigma_compl_embedding maxM hallE.
- have{defE} [_ defE _ _] := sdprodP defE; rewrite E2_1 sdprod1g in defE.
- rewrite (subset_trans _ sCMsE_Ms') // -defE centM setIA subsetI.
- by rewrite (subset_trans (subset_trans sXS sScMsE')) ?setIS ?centS.
-have{ntE2 E2 hallE2} [p p_pr t2p]: exists2 p, prime p & p \in \tau2(M).
- have [[p p_pr rE2] [_ t2E2 _]] := (rank_witness E2, and3P hallE2).
- by exists p; rewrite ?(pnatPpi t2E2) // -p_rank_gt0 -rE2 rank_gt0.
-have [A Ep2A Ep2A_M] := ex_tau2Elem hallE t2p.
-have [_ _ tiCMsA _ _] := tau2_context maxM t2p Ep2A_M.
-have [[nsAE _] _ _ _] := tau2_compl_context maxM hallE t2p Ep2A.
-have [sAE abelA _] := pnElemP Ep2A; have [pA cAA _] := and3P abelA.
-have cCAE1_X: X \subset 'C('C_A(E1)).
- rewrite centsC; apply/subsetP=> y; case/setIP=> Ay cE1y.
- have [-> | nty] := eqVneq y 1; first exact: group1.
- have oY: #[y] = p := abelem_order_p abelA Ay nty.
- have [r _ rE1] := rank_witness E1.
- have{rE1} rE1: 'r_r(E1) > 0 by rewrite -rE1 rank_gt0.
- have [R ErR] := p_rank_geP rE1; have{ErR} [sRE1 abelR dimR] := pnElemP ErR.
- have t1r: r \in \tau1(M) by rewrite (pnatPpi t1E1) -?p_rank_gt0.
- have ErR: R \in 'E_r^1(E) by rewrite !inE abelR dimR (subset_trans sRE1).
- have EpY: <[y]>%G \in 'E_p^1('C_E(R)).
- rewrite p1ElemE // !inE -oY eqxx subsetI (centsS sRE1) cycle_subG //=.
- by rewrite (subsetP sAE).
- rewrite -sub_cent1 -cent_cycle (subset_trans sXcMsE1) //.
- apply: subset_trans (setIS _ (centS sRE1)) _.
- rewrite -subsetIidl setIAC subsetI subsetIr andbT.
- exact: cent_tau1Elem_Msigma t1r ErR EpY.
-have nAE1 := subset_trans sE1E (normal_norm nsAE).
-have coAE1: coprime #|A| #|E1|.
- by apply: pnat_coprime pA (pi_p'group t1E1 (contraL _ t2p)); apply: tau2'1.
-rewrite -tiCMsA -(coprime_cent_prod nAE1 coAE1) ?abelian_sol // centM setIA.
-rewrite subsetI cCAE1_X (subset_trans (subset_trans sXS sScMsE')) ?setIS //.
-by rewrite centS ?commgSS.
-Qed.
-
-End OneComplement.
-
-(* This is B & G, Lemma 13.7. *)
-(* We've had to plug a gap in this proof: on p. 100, l. 6-7 it is asserted *)
-(* the conclusion (E1 * E3 acts in a prime manner on M_sigma) follows from *)
-(* the fact that E1 and E3 have coprime orders and act in a prime manner with *)
-(* the same set of fixed points. This seems to imply the following argument: *)
-(* For any x \in M_sigma, *)
-(* C_(E1 * E3)[x] = C_E1[x] * C_E3[x] is either E1 * E3 or 1, *)
-(* i.e., E1 * E3 acts in a prime manner on M_sigma. *)
-(* This is improper because the distributivity of centralisers over coprime *)
-(* products only hold under normality conditions that do not hold in this *)
-(* instance. The correct argument, which involves using the prime action *)
-(* assumption a second time, only relies on the fact that E1 and E3 are Hall *)
-(* subgroups of the group E1 * E3. The fact that E3 <| E (Lemma 12.1(a)), *)
-(* implicitly needed to justify that E1 * E3 is a group, can also be used to *)
-(* simplify the argument, and we do so. *)
-Lemma tau13_primact_Msigma M E E1 E2 E3 :
- M \in 'M -> sigma_complement M E E1 E2 E3 -> ~ semiregular E3 E1 ->
- semiprime M`_\sigma (E3 <*> E1).
-Proof.
-move=> maxM complEi not_regE13; set Ms := M`_\sigma.
-have [hallE hallE1 hallE2 hallE3 _] := complEi.
-have [[sE1E t1E1 _] [sE3E t3E3 _]] := (and3P hallE1, and3P hallE3).
-have [[sEM _ _] [_ t2E2 _]] := (and3P hallE, and3P hallE2).
-have [[_ nsE3E] _ [_ cycE3] [defE _] tiE3cE]:= sigma_compl_context maxM complEi.
-have [[_ nE3E] [sMsM nMsM]] := (andP nsE3E, andP (pcore_normal _ M : Ms <| M)).
-have [P]: exists2 P, P \in 'E^1(E1) & 'C_E3(P) != 1.
- apply/exists_inP; rewrite -negb_forall_in; apply/forall_inP=> regE13.
- apply: not_regE13 => x /setD1P[]; rewrite -cycle_subG -cycle_eq1 -rank_gt0.
- case/rank_geP=> P E1xP sXE1; apply/trivgP; move: E1xP.
- rewrite /= -(setIidPr sXE1) nElemI -setIdE => /setIdP[E1_P sPX].
- by rewrite -(eqP (regE13 P E1_P)) -cent_cycle setIS ?centS.
-rewrite -{1}(setIidPr sE1E) nElemI -setIdE => /setIdP[/nElemP[p EpP] sPE1].
-rewrite -{1}(setIidPl sE3E) -setIA setIC -rank_gt0 => /rank_geP[R].
-rewrite nElemI -setIdE => /setIdP[/nElemP[r ErR] sRE3].
-have t1p: p \in \tau1(M).
- rewrite (pnatPpi (pgroupS sPE1 t1E1)) //= (card_p1Elem EpP).
- by rewrite pi_of_prime ?inE ?(pnElem_prime EpP) //.
-have prE1 := tau1_primact_Msigma maxM hallE hallE1.
-have prE3 := tau3_primact_Msigma maxM hallE hallE3.
-have sCsPR: 'C_Ms(P) \subset 'C_Ms(R) by apply: cent_tau1Elem_Msigma EpP ErR.
-have [eqCsPR | ltCsPR] := eqVproper sCsPR.
- move=> x; case/setD1P; rewrite -cycle_eq1 -cycle_subG => ntX sXE31.
- apply/eqP; rewrite -cent_cycle eqEsubset andbC setIS ?centS //=.
- have eqCsE13: 'C_Ms(E1) = 'C_Ms(E3).
- rewrite -(cent_semiprime prE1 sPE1) ?(nt_pnElem EpP) //.
- by rewrite -(cent_semiprime prE3 sRE3) ?(nt_pnElem ErR).
- rewrite centY setICA eqCsE13 -setICA setIid.
- have sE31E: E3 <*> E1 \subset E by apply/joing_subP.
- have nE3E1 := subset_trans sE1E nE3E.
- pose y := x.`_\tau1(M); have sYX: <[y]> \subset <[x]> := cycleX x _.
- have sXE := subset_trans sXE31 sE31E; have sYE := subset_trans sYX sXE.
- have [t1'x | not_t1'x] := boolP (\tau1(M)^'.-elt x).
- rewrite (cent_semiprime prE3 _ ntX) // (sub_normal_Hall hallE3) //.
- apply: pnat_dvd t3E3; rewrite -(Gauss_dvdr _ (p'nat_coprime t1'x t1E1)).
- by rewrite mulnC (dvdn_trans _ (dvdn_cardMg _ _)) -?norm_joinEr ?cardSg.
- have{not_t1'x} ntY: #[y] != 1%N by rewrite order_constt partn_eq1.
- apply: subset_trans (setIS _ (centS sYX)) _.
- have [solE nMsE] := (sigma_compl_sol hallE, subset_trans sEM nMsM).
- have [u Eu sYuE1] := Hall_Jsub solE hallE1 sYE (p_elt_constt _ _).
- rewrite -(conjSg _ _ u) !conjIg -!centJ (normsP nMsE) ?(normsP nE3E) //=.
- by rewrite -eqCsE13 (cent_semiprime prE1 sYuE1) // trivg_card1 cardJg.
-have ntCsR: 'C_Ms(R) != 1.
- by rewrite -proper1G (sub_proper_trans _ ltCsPR) ?sub1G.
-have ntR: R :!=: 1 by rewrite (nt_pnElem ErR).
-have [cEPR abelR dimR] := pnElemP ErR; have [rR _ _] := and3P abelR.
-have{cEPR} [sRE cPR] := subsetIP cEPR; have sRM := subset_trans sRE sEM.
-have E2_1: E2 :=: 1.
- have [x defR] := cyclicP (cyclicS sRE3 cycE3).
- apply: contraNeq ntCsR; rewrite -rank_gt0; have [q _ ->] := rank_witness E2.
- rewrite p_rank_gt0 defR cent_cycle. move/(pnatPpi t2E2) => t2q.
- have [A Eq2A _] := ex_tau2Elem hallE t2q.
- have [-> //] := tau2_regular maxM complEi t2q Eq2A.
- by rewrite !inE -cycle_subG -cycle_eq1 -defR sRE3 (nt_pnElem ErR).
-have nRE: E \subset 'N(R) by rewrite (char_norm_trans _ nE3E) ?sub_cyclic_char.
-have [H maxNH] := mmax_exists (mFT_norm_proper ntR (mFT_pgroup_proper rR)).
-have [maxH sNH] := setIdP maxNH; have sEH := subset_trans nRE sNH.
-have ntCsR_P: [~: 'C_Ms(R), P] != 1.
- rewrite (sameP eqP commG1P); apply: contra (proper_subn ltCsPR).
- by rewrite subsetI subsetIl.
-have sCsR_MsH: 'C_Ms(R) \subset Ms :&: H.
- exact: setIS Ms (subset_trans (cent_sub R) sNH).
-have ntMsH_P: [~: Ms :&: H, P] != 1 by rewrite (subG1_contra _ ntCsR_P) ?commSg.
-have tiE1cMsH: 'C_E1(Ms :&: H) = 1.
- apply: contraNeq (proper_subn ltCsPR) => ntCE1MsH.
- rewrite (cent_semiprime prE1 sPE1) ?(nt_pnElem EpP) //.
- rewrite -(cent_semiprime prE1 (subsetIl _ _) ntCE1MsH) /=.
- by rewrite subsetI subsetIl centsC subIset // orbC centS.
-have t3r: r \in \tau3(M).
- by rewrite (pnatPpi t3E3) ?(piSg sRE3) // -p_rank_gt0 p_rank_abelem ?dimR.
-have t13r: (r \in \tau1(M)) || (r \in \tau3(M)) by rewrite t3r orbT.
-have [sE1H sRH] := (subset_trans sE1E sEH, subset_trans sRE sEH).
-have [_ ct1H'R [|sHr _]] := cent_norm_tau13_mmax maxM hallE t13r sRM rR maxNH.
- rewrite (subG1_contra _ ntMsH_P) // commgS // (subset_trans sPE1) //.
- by rewrite subsetI (subset_trans sE1E).
-have t1H_E1: \tau1(H).-group E1.
- apply/pgroupP=> q q_pr /Cauchy[] // x E1x ox.
- apply: contraLR (prime_gt1 q_pr) => t1H'q; rewrite -ox cardG_gt1 negbK.
- rewrite -subG1 -tiE1cMsH subsetI cycle_subG E1x /= ct1H'R //.
- by rewrite (setIidPl sEH) cycle_subG (subsetP sE1E).
- by rewrite /pgroup -orderE ox pnatE.
-have sH'_E1: \sigma(H)^'.-group E1 by apply: sub_pgroup t1H_E1 => q /andP[].
-have [F hallF sE1F] := Hall_superset (mmax_sol maxH) sE1H sH'_E1.
-have [F1 hallF1 sE1F1] := Hall_superset (sigma_compl_sol hallF) sE1F t1H_E1.
-have{sHr} sRHs: R \subset H`_\sigma.
- by rewrite (sub_Hall_pcore (Msigma_Hall maxH)) ?(pi_pgroup rR).
-have cRE1: E1 \subset 'C(R).
- rewrite centsC (centsS sE1F1) // -subsetIidl subsetI subxx -sRHs -subsetI.
- have prF1 := tau1_primact_Msigma maxH hallF hallF1.
- rewrite -(cent_semiprime prF1 (subset_trans sPE1 sE1F1)); last first.
- exact: nt_pnElem EpP _.
- by rewrite subsetI sRHs.
-case/negP: ntR; rewrite -subG1 -tiE3cE subsetI sRE3 centsC -(sdprodW defE).
-by rewrite E2_1 sdprod1g mul_subG // sub_abelian_cent ?cyclic_abelian.
-Qed.
-
-(* This is B & G, Lemma 13.8. *)
-(* We had to plug a significant hole in the proof text: in the sixth *)
-(* paragraph of the proof, it is asserted that because M = N_M(Q)M_alpha and *)
-(* r is in pi(C_M(P)), P centralises some non-trivial r-subgroup of N_M(Q). *)
-(* This does not seem to follow directly, even taking into account that r is *)
-(* not in alpha(M): while it is true that N_M(Q) contains a Sylow r-subgroup *)
-(* of M, this subgroup does not need to contain an r-group centralized by P. *)
-(* We can only establish the required result by making use of the fact that M *)
-(* has a normal p-complement K (because p is in tau_1(M)), as then N_K(Q) *)
-(* will contain a p-invariant Sylow r-subgroup S of K and M (coprime action) *)
-(* and then any r-subgroup of M centralised by P will be in K, and hence *)
-(* conjugate in C_K(P) to a subgroup of S (coprime action again). *)
-Lemma tau1_mmaxI_asymmetry M Mstar p P q Q q_star Qstar :
- (*1*) [/\ M \in 'M, Mstar \in 'M & gval Mstar \notin M :^: G] ->
- (*2*) [/\ p \in \tau1(M), p \in \tau1(Mstar) & P \in 'E_p^1(M :&: Mstar)] ->
- (*3*) [/\ q.-Sylow(M :&: Mstar) Q, q_star.-Sylow(M :&: Mstar) Qstar,
- P \subset 'N(Q) & P \subset 'N(Qstar)] ->
- (*4*) 'C_Q(P) = 1 /\ 'C_Qstar(P) = 1 ->
- (*5*) 'N(Q) \subset Mstar /\ 'N(Qstar) \subset M ->
- False.
-Proof.
-move: Mstar q_star Qstar => L u U. (* Abbreviate Mstar by L, Qstar by U. *)
-move=> [maxM maxL notMGL] [t1Mp t1Lp EpP] [sylQ sylU nQP nUP].
-move=> [regPQ regPU] [sNQL sNUM]; rewrite setIC in sylU. (* for symmetry *)
-have notLGM: gval M \notin L :^: G by rewrite orbit_sym. (* for symmetry *)
-have{EpP} [ntP [sPML abelP dimP]] := (nt_pnElem EpP isT, pnElemP EpP).
-have{sPML} [[sPM sPL] [pP _ _]] := (subsetIP sPML, and3P abelP).
-have solCP: solvable 'C(P) by rewrite mFT_sol ?mFT_cent_proper.
-pose Qprops M q Q := [&& q.-Sylow(M) Q, q != p, q \notin \beta(M),
- 'C_(M`_\beta)(P) != 1 & 'C_(M`_\beta)(P <*> Q) == 1].
-have{sylQ sylU} [hypQ hypU]: Qprops M q Q /\ Qprops L u U.
- apply/andP; apply/nandP=> not_hypQ.
- without loss{not_hypQ}: L u U M q Q maxM maxL notMGL notLGM t1Mp t1Lp sPM sPL
- sylQ sylU nQP nUP regPQ regPU sNQL sNUM / ~~ Qprops M q Q.
- - by move=> IH; case: not_hypQ; [apply: (IH L u U) | apply: (IH M q Q)].
- case/and5P; have [_ qQ _] := and3P sylQ.
- have{sylQ} sylQ: q.-Sylow(M) Q.
- by rewrite -Sylow_subnorm -(setIidPr sNQL) setIA Sylow_subnorm.
- have ntQ: Q :!=: 1.
- by apply: contraTneq sNQL => ->; rewrite norm1 proper_subn ?mmax_proper.
- have p'q: q != p.
- apply: contraNneq ntQ => def_q; rewrite (trivg_center_pgroup qQ) //.
- apply/trivgP; rewrite -regPQ setIS // centS //.
- by rewrite (norm_sub_max_pgroup (Hall_max sylQ)) ?def_q.
- have EpP: P \in 'E_p^1(M) by apply/pnElemP.
- have [|_ [// | abM]] := cent_Malpha_reg_tau1 maxM t1Mp p'q EpP ntQ nQP regPQ.
- apply: contraNneq notMGL => uniqNQ.
- by rewrite (eq_uniq_mmax uniqNQ) ?orbit_refl.
- by rewrite joingC /alpha_core abM !(eq_pcore _ abM) => _ -> -> ->.
-have bML_CMbP: forall M L, [predU \beta(M) & \beta(L)].-group 'C_(M`_\beta)(P).
- move=> ? ?; apply: pgroupS (subsetIl _ _) (sub_pgroup _ (pcore_pgroup _ _)).
- by move=> ?; rewrite !inE => ->.
-have [H hallH sCMbP_H] := Hall_superset solCP (subsetIr _ _) (bML_CMbP M L).
-have [[s _ rFH] [cPH bH _]] := (rank_witness 'F(H), and3P hallH).
-have{sCMbP_H rFH cPH} piFHs: s \in \pi('F(H)).
- rewrite -p_rank_gt0 -rFH rank_gt0 (trivg_Fitting (solvableS cPH solCP)).
- by rewrite (subG1_contra sCMbP_H) //; case/and5P: hypQ.
-without loss{bH} bMs: L u U M q Q maxM maxL notMGL notLGM t1Mp t1Lp sPM sPL
- nQP nUP regPQ regPU sNQL sNUM hypQ hypU hallH / s \in \beta(M).
-- move=> IH; have:= pnatPpi bH (piSg (Fitting_sub H) piFHs).
- case/orP; [apply: IH hypQ hypU hallH | apply: IH hypU hypQ _] => //.
- by apply: etrans (eq_pHall _ _ _) hallH => ?; apply: orbC.
-without loss{bML_CMbP} sCMbP_H: H hallH piFHs / 'C_(M`_\beta)(P) \subset H.
- have [x cPx sCMbP_Hx] := Hall_subJ solCP hallH (subsetIr _ _) (bML_CMbP M L).
- by move=> IH; apply: IH sCMbP_Hx; rewrite ?pHallJ //= FittingJ cardJg.
-pose X := 'O_s(H); have sylX := nilpotent_pcore_Hall s (Fitting_nil H).
-have{piFHs sylX} ntX: X != 1.
- by rewrite -rank_gt0 /= -p_core_Fitting (rank_Sylow sylX) p_rank_gt0.
-have [[cPH bH _] [sXH nXH]] := (and3P hallH, andP (pcore_normal s H : X <| H)).
-have [cPX sX] := (subset_trans sXH cPH, pcore_pgroup s H : s.-group X).
-have{hypQ} [sylQ p'q bM'q ntCMbP] := and5P hypQ; apply: negP.
-apply: subG1_contra (ntX); rewrite /= centY !subsetI (subset_trans _ cPH) //=.
-have nsMbM : M`_\beta <| M := pcore_normal _ M; have [sMbM nMbM] := andP nsMbM.
-have hallMb := Mbeta_Hall maxM; have [_ bMb _] := and3P hallMb.
-have{ntX} sHM: H \subset M.
- have [g sXMg]: exists g, X \subset M :^ g.
- have [S sylS] := Sylow_exists s M`_\beta; have [sSMb _ _] := and3P sylS.
- have sylS_G := subHall_Sylow (Mbeta_Hall_G maxM) bMs sylS.
- have [g _ sXSg] := Sylow_subJ sylS_G (subsetT X) sX.
- by exists g; rewrite (subset_trans sXSg) // conjSg (subset_trans sSMb).
- have [t _ rFC] := rank_witness 'F('C_(M`_\beta)(P)).
- pose Y := 'O_t('C_(M`_\beta)(P)).
- have [sYC tY] := (pcore_sub t _ : Y \subset _, pcore_pgroup t _ : t.-group Y).
- have sYMb := subset_trans sYC (subsetIl _ _); have bMY := pgroupS sYMb bMb.
- have{rFC} ntY: Y != 1.
- rewrite -rank_gt0 /= -p_core_Fitting.
- rewrite (rank_Sylow (nilpotent_pcore_Hall t (Fitting_nil _))) -rFC.
- by rewrite rank_gt0 (trivg_Fitting (solvableS (subsetIr _ _) solCP)).
- have bMt: t \in \beta(M).
- by rewrite (pnatPpi bMY) // -p_rank_gt0 -rank_pgroup ?rank_gt0.
- have sHMg: H \subset M :^ g.
- rewrite (subset_trans nXH) // beta_norm_sub_mmax ?mmaxJ // /psubgroup sXMg.
- by rewrite (pi_pgroup sX) 1?betaJ.
- have sYMg: Y \subset M :^ g := subset_trans (subset_trans sYC sCMbP_H) sHMg.
- have sNY_M: 'N(Y) \subset M.
- by rewrite beta_norm_sub_mmax // /psubgroup (subset_trans sYMb).
- have [_ trCY _] := sigma_group_trans maxM (beta_sub_sigma maxM bMt) tY.
- have [|| h cYh /= defMg] := (atransP2 trCY) M (M :^ g).
- - by rewrite inE orbit_refl (subset_trans (normG _) sNY_M).
- - by rewrite inE mem_orbit ?in_setT.
- by rewrite defMg conjGid // (subsetP sNY_M) ?(subsetP (cent_sub _)) in sHMg.
-have sXMb: X \subset M`_\beta.
- by rewrite (sub_Hall_pcore hallMb) ?(subset_trans sXH sHM) ?(pi_pgroup sX).
-rewrite sXMb (sameP commG1P eqP) /= -/X -subG1.
-have [sQL [sQM qQ _]] := (subset_trans (normG Q) sNQL, and3P sylQ).
-have nsLbL : L`_\beta <| L := pcore_normal _ L; have [sLbL nLbL] := andP nsLbL.
-have nLbQ := subset_trans sQL nLbL.
-have [<- ti_aLsM _] := sigma_disjoint maxL maxM notLGM.
-rewrite subsetI (subset_trans _ (Mbeta_sub_Msigma maxM)) ?andbT; last first.
- by rewrite (subset_trans (commgSS sXMb sQM)) // commg_subl nMbM.
-have defQ: [~: Q, P] = Q.
- rewrite -{2}(coprime_cent_prod nQP) ?(pgroup_sol qQ) ?regPQ ?mulg1 //.
- by rewrite (p'nat_coprime (pi_pnat qQ _) pP).
-suffices sXL: X \subset L.
- apply: subset_trans (Mbeta_sub_Malpha L).
- rewrite -quotient_sub1 ?comm_subG ?quotientR ?(subset_trans _ nLbL) //.
- have <-: (M`_\beta :&: L) / L`_\beta :&: 'O_q(L^`(1) / L`_\beta) = 1.
- rewrite coprime_TIg // coprime_morphl // (coprimeSg (subsetIl _ _)) //.
- exact: pnat_coprime (pcore_pgroup _ _) (pi_pnat (pcore_pgroup _ _) _).
- rewrite commg_subI // subsetI.
- rewrite quotientS /=; last by rewrite subsetI sXMb.
- by rewrite quotient_der ?gFnorm_trans ?normsG ?quotientS.
- rewrite (sub_Hall_pcore (nilpotent_pcore_Hall _ (Mbeta_quo_nil _))) //.
- rewrite quotient_pgroup ?quotient_norms //.
- by rewrite normsI ?(subset_trans sQM nMbM) ?normsG.
- by rewrite quotientS // -defQ commgSS // (subset_trans nQP).
-have{hypU} [r bLr piHr]: exists2 r, r \in \beta(L) & r \in \pi(H).
- have [_ _ _] := and5P hypU; rewrite -rank_gt0.
- have [r _ ->] := rank_witness 'C_(L`_\beta)(P); rewrite p_rank_gt0 => piCr _.
- have [piLb_r piCPr] := (piSg (subsetIl _ _) piCr, piSg (subsetIr _ _) piCr).
- have bLr: r \in \beta(L) := pnatPpi (pcore_pgroup _ L) piLb_r.
- exists r; rewrite //= (card_Hall hallH) pi_of_part // inE /= piCPr.
- by rewrite inE /= bLr orbT.
-have sM'r: r \notin \sigma(M).
- by apply: contraFN (ti_aLsM r) => sMr; rewrite inE /= beta_sub_alpha.
-have defM: M`_\beta * 'N_M(Q) = M.
- have nMbQ := subset_trans sQM nMbM.
- have nsMbQ_M: M`_\beta <*> Q <| M.
- rewrite -{2}(quotientGK nsMbM) -quotientYK ?cosetpre_normal //.
- suffices ->: Q / M`_\beta = 'O_q(M^`(1) / M`_\beta).
- by rewrite quotient_der ?nMbM ?gFnormal_trans.
- apply: nilpotent_Hall_pcore; first exact: Mbeta_quo_nil.
- rewrite quotient_pHall // (pHall_subl _ _ sylQ) ?gFsub //.
- by rewrite -defQ commgSS // (subset_trans nUP).
- have sylQ_MbQ := pHall_subl (joing_subr _ Q) (normal_sub nsMbQ_M) sylQ.
- rewrite -{3}(Frattini_arg nsMbQ_M sylQ_MbQ) /= norm_joinEr // -mulgA.
- by congr (_ * _); rewrite mulSGid // subsetI sQM normG.
-have [[sM'p _ not_pM'] [sL'p _]] := (and3P t1Mp, andP t1Lp).
-have{not_pM'} [R ErR nQR]: exists2 R, R \in 'E_r^1('C_M(P)) & R \subset 'N(Q).
- have p'r: r \in p^' by apply: contraNneq sL'p => <-; apply: beta_sub_sigma.
- have p'M': p^'.-group M^`(1).
- by rewrite p'groupEpi mem_primes (negPf not_pM') !andbF.
- pose K := 'O_p^'(M); have [sKM nKM] := andP (pcore_normal _ M : K <| M).
- have hallK: p^'.-Hall(M) K.
- rewrite -(pquotient_pHall _ (der_normal 1 M)) ?quotient_pgroup //.
- rewrite -pquotient_pcore ?der_normal // nilpotent_pcore_Hall //.
- by rewrite abelian_nil ?der_abelian.
- by rewrite (normalS _ sKM) ?pcore_max ?der_normal.
- have sMbK: M`_\beta \subset K.
- by rewrite (subset_trans (Mbeta_der1 maxM)) // pcore_max ?der_normal.
- have coKP: coprime #|K| #|P| := p'nat_coprime (pcore_pgroup _ M) pP.
- have [solK sNK] := (solvableS sKM (mmax_sol maxM), subsetIl K 'N(Q)).
- have [nKP coNP] := (subset_trans sPM nKM, coprimeSg sNK coKP).
- have nNP: P \subset 'N('N_K(Q)) by rewrite normsI // norms_norm.
- have [S sylS nSP] := coprime_Hall_exists r nNP coNP (solvableS sNK solK).
- have /subsetIP[sSK nQS]: S \subset 'N_K(Q) := pHall_sub sylS.
- have sylS_K: r.-Sylow(K) S.
- rewrite pHallE sSK /= -/K -(setIidPr sKM) -defM -group_modl // setIAC.
- rewrite (setIidPr sKM) -LagrangeMr partnM // -(card_Hall sylS).
- rewrite part_p'nat ?mul1n 1?(pnat_dvd (dvdn_indexg _ _)) //.
- by apply: (pi_p'nat bMb); apply: contra sM'r; apply: beta_sub_sigma.
- have rC: 'r_r('C_M(P)) > 0 by rewrite p_rank_gt0 (piSg _ piHr) // subsetI sHM.
- have{rC} [R ErR] := p_rank_geP rC; have [sRcMP abelR _] := pnElemP ErR.
- have{sRcMP abelR} [[sRM cPR] [rR _]] := (subsetIP sRcMP, andP abelR).
- have nRP: P \subset 'N(R) by rewrite cents_norm 1?centsC.
- have sRK: R \subset K by rewrite sub_Hall_pcore ?(pi_pgroup rR).
- have [T [sylT nTP sRT]] := coprime_Hall_subset nKP coKP solK sRK rR nRP.
- have [x cKPx defS] := coprime_Hall_trans nKP coKP solK sylS_K nSP sylT nTP.
- rewrite -(conjGid (subsetP (setSI _ sKM) x cKPx)).
- by exists (R :^ x)%G; rewrite ?pnElemJ ?(subset_trans _ nQS) // defS conjSg.
-have [sRcMP abelR _] := pnElemP ErR; have ntR := nt_pnElem ErR isT.
-have{sRcMP abelR} [[sRM cPR] [rR _]] := (subsetIP sRcMP, andP abelR).
-have sNR_L: 'N(R) \subset L.
- by rewrite beta_norm_sub_mmax /psubgroup ?(subset_trans nQR) ?(pi_pgroup rR).
-have sPR_M: P <*> R \subset M by rewrite join_subG (subset_trans nUP).
-have sM'_PR: \sigma(M)^'.-group (P <*> R).
- by rewrite cent_joinEr // pgroupM (pi_pgroup rR) // (pi_pgroup pP).
-have [E hallE sPRE] := Hall_superset (mmax_sol maxM) sPR_M sM'_PR.
-have{sPRE} [sPE sRE] := joing_subP sPRE.
-have EpP: P \in 'E_p^1(E) by apply/pnElemP.
-have{ErR} ErR: R \in 'E_r^1('C_E(P)).
- by rewrite -(setIidPr (pHall_sub hallE)) setIAC pnElemI inE ErR inE.
-apply: subset_trans (cents_norm (subset_trans _ (subsetIr M`_\sigma _))) sNR_L.
-apply: subset_trans (cent_tau1Elem_Msigma maxM hallE t1Mp EpP ErR).
-by rewrite subsetI cPX (subset_trans sXMb) ?Mbeta_sub_Msigma.
-Qed.
-
-(* This is B & G, Theorem 13.9. *)
-Theorem sigma_partition M Mstar :
- M \in 'M -> Mstar \in 'M -> gval Mstar \notin M :^: G ->
- [predI \sigma(M) & \sigma(Mstar)] =i pred0.
-Proof.
-move: Mstar => L maxM maxL notMGL q; apply/andP=> [[/= sMq sLq]].
-have [E hallE] := ex_sigma_compl maxM; have [sEM sM'E _] := and3P hallE.
-have [_ _ nMsE _] := sdprodP (sdprod_sigma maxM hallE).
-have coMsE: coprime #|M`_\sigma| #|E| := pnat_coprime (pcore_pgroup _ _) sM'E.
-have [|S sylS nSE] := coprime_Hall_exists q nMsE coMsE.
- exact: solvableS (pcore_sub _ _) (mmax_sol maxM).
-have [sSMs qS _] := and3P sylS.
-have sylS_M := subHall_Sylow (Msigma_Hall maxM) sMq sylS.
-have ntS: S :!=: 1.
- by rewrite -rank_gt0 (rank_Sylow sylS_M) p_rank_gt0 sigma_sub_pi.
-without loss sylS_L: L maxL sLq notMGL / q.-Sylow(L) S.
- have sylS_G := sigma_Sylow_G maxM sMq sylS_M.
- have [T sylT] := Sylow_exists q L; have sylT_G := sigma_Sylow_G maxL sLq sylT.
- have [x Gx ->] := Sylow_trans sylT_G (sigma_Sylow_G maxM sMq sylS_M).
- case/(_ (L :^ x)%G); rewrite ?mmaxJ ?sigmaJ ?pHallJ2 //.
- by rewrite (orbit_transl _ (mem_orbit 'Js L Gx)).
-have [[sSL _] [[E1 hallE1] [E3 hallE3]]] := (andP sylS_L, ex_tau13_compl hallE).
-have [E2 hallE2 complEi] := ex_tau2_compl hallE hallE1 hallE3.
-have E2_1: E2 :==: 1.
- apply: contraR ntS; rewrite -rank_gt0; have [p _ ->] := rank_witness E2.
- rewrite p_rank_gt0 => /(pnatPpi (pHall_pgroup hallE2))t2p.
- have [A Ep2A _] := ex_tau2Elem hallE t2p.
- have [_ _ _ ti_sM] := tau2_compl_context maxM hallE t2p Ep2A.
- rewrite -subG1; have [<- _] := ti_sM L maxL notMGL; rewrite subsetI sSMs /=.
- by rewrite (sub_Hall_pcore (Msigma_Hall maxL) sSL) (pi_pgroup qS).
-have: E1 :!=: 1 by have [_ -> //] := sigma_compl_context maxM complEi.
-rewrite -rank_gt0; have [p _ ->] := rank_witness E1; case/p_rank_geP=> P EpP.
-have [[sPE1 abelP dimP] [sE1E t1E1 _]] := (pnElemP EpP, and3P hallE1).
-have ntP: P :!=: 1 by rewrite (nt_pnElem EpP).
-have piPp: p \in \pi(P) by rewrite -p_rank_gt0 ?p_rank_abelem ?dimP.
-have t1Mp: p \in \tau1(M) by rewrite (pnatPpi _ (piSg sPE1 _)).
-have sPE := subset_trans sPE1 sE1E; have sPM := subset_trans sPE sEM.
-have [sNM sNL] := (norm_sigma_Sylow sMq sylS_M, norm_sigma_Sylow sLq sylS_L).
-have nSP := subset_trans sPE nSE; have sPL := subset_trans nSP sNL.
-have regPS: 'C_S(P) = 1.
- apply: contraNeq (contra_orbit _ _ notMGL); rewrite -rank_gt0.
- rewrite (rank_pgroup (pgroupS _ qS)) ?subsetIl //; case/p_rank_geP=> Q /=.
- rewrite -(setIidPr sSMs) setIAC pnElemI; case/setIdP=> EqQ _.
- have [_ uniqSq] := cent_cent_Msigma_tau1_uniq maxM hallE hallE1 sPE1 ntP EqQ.
- by rewrite (eq_uniq_mmax (uniqSq S sylS) maxL sSL).
-have t1Lp: p \in \tau1(L).
- have not_cMsL_P: ~~ (P \subset 'C(M`_\sigma :&: L)).
- apply: contra ntS => cMsL_P; rewrite -subG1 -regPS subsetIidl centsC.
- by rewrite (subset_trans cMsL_P) ?centS // subsetI sSMs.
- apply: contraR (not_cMsL_P) => t1L'p.
- have [piEp piLp] := (piSg sPE piPp, piSg sPL piPp).
- have [] := Msigma_setI_mmax_central maxM hallE maxL piEp piLp t1L'p _ notMGL.
- apply: contraNneq not_cMsL_P; move/commG1P; rewrite centsC.
- by apply: subset_trans; rewrite subsetI sPM.
- by move->; rewrite ?(abelem_pgroup abelP) // subsetI sPM.
-case: (@tau1_mmaxI_asymmetry M L p P q S q S) => //.
- by rewrite !inE subsetI sPM sPL abelP dimP.
-by rewrite (pHall_subl _ (subsetIl M L) sylS_M) // subsetI (pHall_sub sylS_M).
-Qed.
-
-(* This is B & G, Theorem 13.10. *)
-Theorem tau13_regular M E E1 E2 E3 p P :
- M \in 'M -> sigma_complement M E E1 E2 E3 ->
- P \in 'E_p^1(E1) -> ~~ (P \subset 'C(E3)) ->
- [/\ (*a*) semiregular E3 E1,
- (*b*) semiregular M`_\sigma E3
- & (*c*) 'C_(M`_\sigma)(P) != 1].
-Proof.
-move=> maxM complEi EpP not_cE3P.
-have nsMsM: M`_\sigma <| M := pcore_normal _ M; have [sMsM nMsM] := andP nsMsM.
-have [hallMs sMaMs] := (Msigma_Hall maxM, Malpha_sub_Msigma maxM).
-have [[sE3E' nsE3E] _ [_ cycE3] _ _] := sigma_compl_context maxM complEi.
-have [hallE hallE1 _ hallE3] := complEi.
-have [[_ sM_Ms _] [sEM sM'E _]] := (and3P hallMs, and3P hallE).
-have [[sE1E t1E1 _] [sE3E t3E3 _] _] := (and3P hallE1, and3P hallE3).
-have [sPE1 abelP dimP] := pnElemP EpP; have [pP _ _] := and3P abelP.
-have [ntP t1MP] := (nt_pnElem EpP isT, pgroupS sPE1 t1E1).
-have sPE := subset_trans sPE1 sE1E; have sPM := subset_trans sPE sEM.
-have piPp: p \in \pi(P) by rewrite -p_rank_gt0 p_rank_abelem ?dimP.
-have t1Mp: p \in \tau1(M) := pnatPpi t1MP piPp.
-have [Q sylQ not_cPQ]: exists2 Q, Sylow E3 (gval Q) & ~~ (P \subset 'C(Q)).
- apply/exists_inP; rewrite -negb_forall_in; apply: contra not_cE3P.
- move/forall_inP=> cPE3; rewrite centsC -(Sylow_gen E3) gen_subG.
- by apply/bigcupsP=> Q sylQ; rewrite centsC cPE3.
-have{sylQ} [q q_pr sylQ] := SylowP _ _ sylQ; have [sQE3 qQ _] := and3P sylQ.
-have ntQ: Q :!=: 1 by apply: contraNneq not_cPQ => ->; apply: cents1.
-have t3Mq: q \in \tau3(M).
- by rewrite (pnatPpi t3E3) // -p_rank_gt0 -(rank_Sylow sylQ) rank_gt0.
-have nQP: P \subset 'N(Q).
- rewrite (subset_trans sPE) ?normal_norm //.
- by rewrite (char_normal_trans _ nsE3E) ?sub_cyclic_char.
-have regPQ: 'C_Q(P) = 1.
- apply: contraNeq not_cPQ; rewrite setIC => /meet_Ohm1.
- rewrite setIC => /prime_meetG/=/implyP.
- rewrite (Ohm1_cyclic_pgroup_prime (cyclicS sQE3 cycE3) qQ) // q_pr centsC.
- apply: (coprime_odd_faithful_Ohm1 qQ) nQP _ (mFT_odd _).
- exact: sub_pnat_coprime tau3'1 (pgroupS sQE3 t3E3) t1MP.
-have sQE' := subset_trans sQE3 sE3E'.
-have sQM := subset_trans (subset_trans sQE3 sE3E) sEM.
-have [L maxNL] := mmax_exists (mFT_norm_proper ntQ (mFT_pgroup_proper qQ)).
-have [maxL sNQL] := setIdP maxNL; have sQL := subset_trans (normG Q) sNQL.
-have notMGL: gval L \notin M :^: G.
- by apply: mmax_norm_notJ maxM maxL qQ sQM sNQL _; rewrite t3Mq !orbT.
-have [ntCMaP tiCMaQP]: 'C_(M`_\alpha)(P) != 1 /\ 'C_(M`_\alpha)(Q <*> P) = 1.
- have EpMP: P \in 'E_p^1(M) by apply/pnElemP.
- have p'q: q != p by apply: contraNneq (tau3'1 t1Mp) => <-.
- have [|_ [] //] := cent_Malpha_reg_tau1 maxM t1Mp p'q EpMP ntQ nQP regPQ.
- by apply: contraTneq maxNL => ->; rewrite inE (contra_orbit _ _ notMGL).
- have sM'q: q \in \sigma(M)^' by case/andP: t3Mq.
- exact: subHall_Sylow hallE sM'q (subHall_Sylow hallE3 t3Mq sylQ).
-split=> [x E1x | x E3x |]; last exact: subG1_contra (setSI _ sMaMs) ntCMaP.
- apply: contraNeq ntCMaP => ntCE3X.
- have prE31: semiprime M`_\sigma (E3 <*> E1).
- apply: tau13_primact_Msigma maxM complEi _ => regE13.
- by rewrite regE13 ?eqxx in ntCE3X.
- rewrite -subG1 -tiCMaQP /= -(setIidPl sMaMs) -!setIA setIS //.
- rewrite (cent_semiprime prE31 _ ntP) ?setIS ?centS //=.
- by rewrite -!genM_join genS ?mulgSS.
- by rewrite sub_gen // subsetU // sPE1 orbT.
-have prE3 := tau3_primact_Msigma maxM hallE hallE3.
-apply/eqP; apply/idPn; rewrite prE3 {x E3x}// -rank_gt0.
-have [u _ -> ruC] := rank_witness 'C_(M`_\sigma)(E3).
-have sCMs := subsetIl M`_\sigma 'C(E3).
-have sMu: u \in \sigma(M) by rewrite (pnatPpi (pgroupS sCMs _)) -?p_rank_gt0.
-have nCE: E \subset 'N('C_(M`_\sigma)(E3)).
- by rewrite normsI ?norms_cent ?(normal_norm nsE3E) // (subset_trans sEM).
-have coCE := coprimeSg sCMs (pnat_coprime (pcore_pgroup _ _) sM'E).
-have solC := solvableS (subset_trans sCMs sMsM) (mmax_sol maxM).
-have{nCE coCE solC} [U sylU nUE] := coprime_Hall_exists u nCE coCE solC.
-have ntU: U :!=: 1 by rewrite -rank_gt0 (rank_Sylow sylU).
-have cMsL_Q: Q \subset 'C(M`_\sigma :&: L).
- have t13q: (q \in \tau1(M)) || (q \in \tau3(M)) by rewrite t3Mq orbT.
- have [-> //] := cent_norm_tau13_mmax maxM hallE t13q sQM qQ maxNL.
- by rewrite subsetI sQM.
-rewrite /= -(cent_semiprime prE3 sQE3 ntQ) in sylU.
-have [sUMs cQU] := subsetIP (pHall_sub sylU).
-have{cMsL_Q} sylU_MsL: u.-Sylow(M`_\sigma :&: L) U.
- apply: pHall_subl sylU; last by rewrite subsetI subsetIl centsC.
- by rewrite subsetI sUMs (subset_trans (cents_norm _) sNQL).
-have sylU_ML: u.-Sylow(M :&: L) U.
- apply: subHall_Sylow sMu sylU_MsL.
- by rewrite /= -(setIidPl sMsM) -setIA (setI_normal_Hall nsMsM) ?subsetIl.
-have [sUML uU _] := and3P sylU_ML; have{sUML} [sUM sUL] := subsetIP sUML.
-have [sNUM regPU]: 'N(U) \subset M /\ 'C_U(P) = 1.
- have [bMu | bM'u] := boolP (u \in \beta(M)).
- have [bM_U sMbMa] := (pi_pgroup uU bMu, Mbeta_sub_Malpha M).
- split; first by rewrite beta_norm_sub_mmax /psubgroup ?sUM.
- apply/trivgP; rewrite -tiCMaQP centY setIA setSI // subsetI cQU.
- by rewrite (subset_trans _ sMbMa) // (sub_Hall_pcore (Mbeta_Hall maxM)).
- have sylU_Ms: u.-Sylow(M`_\sigma) U.
- have [H hallH cHE'] := der_compl_cent_beta' maxM hallE.
- rewrite pHallE sUMs (card_Hall sylU) eqn_dvd.
- rewrite partn_dvd ?cardG_gt0 ?cardSg ?subsetIl //=.
- rewrite -(@partn_part u \beta(M)^') => [|v /eqnP-> //].
- rewrite -(card_Hall hallH) partn_dvd ?cardG_gt0 ?cardSg //.
- by rewrite subsetI (pHall_sub hallH) centsC (subset_trans sQE').
- split; first exact: norm_sigma_Sylow (subHall_Sylow hallMs sMu sylU_Ms).
- apply: contraNeq (contra_orbit _ _ notMGL); rewrite -rank_gt0.
- rewrite (rank_pgroup (pgroupS _ uU)) ?subsetIl // => /p_rank_geP[X] /=.
- rewrite -(setIidPr sUMs) setIAC pnElemI -setIdE => /setIdP[EuX sXU].
- have [_ uniqU] := cent_cent_Msigma_tau1_uniq maxM hallE hallE1 sPE1 ntP EuX.
- by rewrite (eq_uniq_mmax (uniqU U sylU_Ms) maxL).
-have sPL := subset_trans nQP sNQL.
-have sPML: P \subset M :&: L by apply/subsetIP.
-have t1Lp: p \in \tau1(L).
- have not_cMsL_P: ~~ (P \subset 'C(M`_\sigma :&: L)).
- apply: contra ntU => cMsL_P; rewrite -subG1 -regPU subsetIidl.
- by rewrite centsC (centsS (pHall_sub sylU_MsL)).
- apply: contraR (not_cMsL_P) => t1L'p.
- have [piEp piLp] := (piSg sPE piPp, piSg sPL piPp).
- case: (Msigma_setI_mmax_central maxM hallE maxL piEp piLp) => // [|->] //.
- apply: contraNneq not_cMsL_P => /commG1P.
- by rewrite centsC; apply: subset_trans sPML.
-have EpMLP: P \in 'E_p^1(M :&: L) by apply/pnElemP.
-case: (@tau1_mmaxI_asymmetry M L p P q Q u U) => //.
-have [sylQ_E [sM'q _]] := (subHall_Sylow hallE3 t3Mq sylQ, andP t3Mq).
-have sylQ_M := subHall_Sylow hallE sM'q sylQ_E.
-have sQML: Q \subset M :&: L by apply/subsetIP.
-by rewrite (subset_trans sPE nUE) (pHall_subl sQML _ sylQ_M) ?subsetIl.
-Qed.
-
-(* This is B & G, Corollary 13.11. *)
-Corollary tau13_nonregular M E E1 E2 E3 :
- M \in 'M -> sigma_complement M E E1 E2 E3 -> ~ semiregular M`_\sigma E3 ->
- [/\ (*a*) E1 :!=: 1,
- (*b*) E3 ><| E1 = E,
- (*c*) semiprime M`_\sigma E
- & (*d*) forall X, X \in 'E^1(E) -> X <| E].
-Proof.
-move=> maxM complEi not_regE3Ms.
-have [hallE hallE1 hallE2 hallE3 _] := complEi.
-have [[sE1E t1E1 _] [sE3E t3E3 _]] := (and3P hallE1, and3P hallE3).
-have{hallE2} E2_1: E2 :==: 1.
- apply/idPn; rewrite -rank_gt0; have [p _ ->] := rank_witness E2.
- rewrite p_rank_gt0 => /(pnatPpi (pHall_pgroup hallE2))t2p.
- have [A Ep2A _] := ex_tau2Elem hallE t2p.
- by apply: not_regE3Ms; case: (tau2_regular maxM complEi t2p Ep2A).
-have [_ ntE1 [cycE1 cycE3] [defE _] _] := sigma_compl_context maxM complEi.
-rewrite (eqP E2_1) sdprod1g in defE; have{ntE1} ntE1 := ntE1 E2_1.
-have [nsE3E _ mulE31 nE31 _] := sdprod_context defE.
-have cE3E1 P: P \in 'E^1(E1) -> P \subset 'C(E3).
- by case/nElemP=> p EpP; apply/idPn => /(tau13_regular maxM complEi EpP)[].
-split=> // [|X EpX].
- rewrite -mulE31 -norm_joinEr //.
- have [-> | ntE3] := eqsVneq E3 1.
- by rewrite joing1G; apply: (tau1_primact_Msigma maxM hallE hallE1).
- apply: tau13_primact_Msigma maxM complEi _ => regE13.
- have:= ntE1; rewrite -rank_gt0; case/rank_geP=> P EpP.
- have cPE3: E3 \subset 'C(P) by rewrite centsC cE3E1.
- have [p Ep1P] := nElemP EpP; have [sPE1 _ _] := pnElemP Ep1P.
- have ntP: P :!=: 1 by apply: (nt_pnElem Ep1P).
- by case/negP: ntE3; rewrite -(setIidPl cPE3) (cent_semiregular regE13 _ ntP).
-have [p Ep1X] := nElemP EpX; have [sXE abelX oX] := pnElemPcard Ep1X.
-have [p_pr ntX] := (pnElem_prime Ep1X, nt_pnElem Ep1X isT).
-have tau31p: p \in [predU \tau3(M) & \tau1(M)].
- rewrite (pgroupP (pgroupS sXE _)) ?oX // -mulE31 pgroupM.
- rewrite (sub_pgroup _ t3E3) => [|q t3q]; last by rewrite inE /= t3q.
- by rewrite (sub_pgroup _ t1E1) // => q t1q; rewrite inE /= t1q orbT.
-have [/= t3p | t1p] := orP tau31p.
- rewrite (char_normal_trans _ nsE3E) ?sub_cyclic_char //.
- by rewrite (sub_normal_Hall hallE3) // (pi_pgroup (abelem_pgroup abelX)).
-have t1X := pi_pgroup (abelem_pgroup abelX) t1p.
-have [e Ee sXeE1] := Hall_Jsub (sigma_compl_sol hallE) hallE1 sXE t1X.
-rewrite /normal sXE -(conjSg _ _ e) conjGid //= -normJ -mulE31 mulG_subG.
-rewrite andbC sub_abelian_norm ?cyclic_abelian ?cents_norm // centsC cE3E1 //.
-rewrite -(setIidPr sE1E) nElemI !inE sXeE1 andbT.
-by rewrite -(pnElemJ e) conjGid // def_pnElem in Ep1X; case/setIP: Ep1X.
-Qed.
-
-(* This is B & G, Lemma 13.12. *)
-Lemma tau12_regular M E p q P A :
- M \in 'M -> \sigma(M)^'.-Hall(M) E ->
- p \in \tau1(M) -> P \in 'E_p^1(E) -> q \in \tau2(M) -> A \in 'E_q^2(E) ->
- 'C_A(P) != 1 ->
- 'C_(M`_\sigma)(P) = 1.
-Proof.
-move=> maxM hallE t1p EpP t2q Eq2A ntCAP; apply: contraNeq (ntCAP) => ntCMsP.
-have [[nsAE _] _ uniq_cMs _] := tau2_compl_context maxM hallE t2q Eq2A.
-have [sPE abelP dimP] := pnElemP EpP; have [pP _] := andP abelP.
-have ntP: P :!=: 1 by apply: nt_pnElem EpP _.
-have [solE t1P] := (sigma_compl_sol hallE, pi_pgroup pP t1p).
-have [E1 hallE1 sPE1] := Hall_superset solE sPE t1P.
-have [_ [E3 hallE3]] := ex_tau13_compl hallE.
-have [E2 _ complEi] := ex_tau2_compl hallE hallE1 hallE3.
-have not_cAP: ~~ (P \subset 'C(A)).
- have [_ regCE1A _] := tau2_regular maxM complEi t2q Eq2A.
- apply: contra ntCMsP => cAP; rewrite (cent_semiregular regCE1A _ ntP) //.
- exact/subsetIP.
-have [sAE abelA dimA] := pnElemP Eq2A; have [qA _] := andP abelA.
-pose Y := 'C_A(P)%G; have{abelA dimA} EqY: Y \in 'E_q^1('C_E(P)).
- have sYA: Y \subset A := subsetIl A _; have abelY := abelemS sYA abelA.
- rewrite !inE setSI // abelY eqn_leq -{2}rank_abelem // rank_gt0 -ltnS -dimA.
- by rewrite properG_ltn_log //= /proper subsetIl subsetIidl centsC.
-have ntCMsY: 'C_(M`_\sigma)(Y) != 1.
- by apply: subG1_contra ntCMsP; apply: cent_tau1Elem_Msigma t1p EpP EqY.
-have EqEY: Y \in 'E_q^1(E) by rewrite pnElemI in EqY; case/setIP: EqY.
-have uniqCY := uniq_cMs _ EqEY ntCMsY.
-have [ntA nAE] := (nt_pnElem Eq2A isT, normal_norm nsAE).
-have [L maxNL] := mmax_exists (mFT_norm_proper ntA (mFT_pgroup_proper qA)).
-have [sLq t12Lp]: q \in \sigma(L) /\ (p \in \tau1(L)) || (p \in \tau2(L)).
- have [sLt2 t12cA' _] := primes_norm_tau2Elem maxM hallE t2q Eq2A maxNL.
- split; first by have /andP[] := sLt2 q t2q.
- apply: pnatPpi (pgroupS (quotientS _ sPE) t12cA') _.
- rewrite -p_rank_gt0 -rank_pgroup ?quotient_pgroup // rank_gt0.
- rewrite -subG1 quotient_sub1 ?subsetI ?sPE // (subset_trans sPE) //.
- by rewrite normsI ?normG ?norms_cent.
-have [maxL sNL] := setIdP maxNL; have sEL := subset_trans nAE sNL.
-have sL'p: p \in \sigma(L)^' by move: t12Lp; rewrite -andb_orr => /andP[].
-have [sPL sL'P] := (subset_trans sPE sEL, pi_pgroup pP sL'p).
-have{sL'P} [F hallF sPF] := Hall_superset (mmax_sol maxL) sPL sL'P.
-have solF := sigma_compl_sol hallF.
-have [sAL sL_A] := (subset_trans (normG A) sNL, pi_pgroup qA sLq).
-have sALs: A \subset L`_\sigma by rewrite (sub_Hall_pcore (Msigma_Hall maxL)).
-have neqLM: L != M by apply: contraTneq sLq => ->; case/andP: t2q.
-have{t12Lp} [t1Lp | t2Lp] := orP t12Lp.
- have [F1 hallF1 sPF1] := Hall_superset solF sPF (pi_pgroup pP t1Lp).
- have EqLsY: Y \in 'E_q^1('C_(L`_\sigma)(P)).
- by rewrite !inE setSI //; case/pnElemP: EqY => _ -> ->.
- have [defL _] := cent_cent_Msigma_tau1_uniq maxL hallF hallF1 sPF1 ntP EqLsY.
- by rewrite -in_set1 -uniqCY defL set11 in neqLM.
-have sCPL: 'C(P) \subset L.
- have [B Ep2B _] := ex_tau2Elem hallF t2Lp.
- have EpFP: P \in 'E_p^1(F) by apply/pnElemP.
- have [_ _ uniq_cLs _] := tau2_compl_context maxL hallF t2Lp Ep2B.
- by case/mem_uniq_mmax: (uniq_cLs _ EpFP (subG1_contra (setSI _ sALs) ntCAP)).
-have Eq2MA: A \in 'E_q^2(M).
- by move: Eq2A; rewrite -(setIidPr (pHall_sub hallE)) pnElemI => /setIP[].
-have [_ _ _ tiMsL _] := tau2_context maxM t2q Eq2MA.
-by case/negP: ntCMsP; rewrite -subG1 -(tiMsL L) ?setIS // 3!inE neqLM maxL.
-Qed.
-
-(* This is B & G, Lemma 13.13. *)
-Lemma tau13_nonregular_sigma M E p P :
- M \in 'M -> \sigma(M)^'.-Hall(M) E ->
- P \in 'E_p^1(E) -> (p \in \tau1(M)) || (p \in \tau3(M)) ->
- 'C_(M`_\sigma)(P) != 1 ->
- {in 'M('N(P)), forall Mstar, p \in \sigma(Mstar)}.
-Proof.
-move=> maxM hallE EpP t13Mp ntCMsP L maxNL /=.
-have [maxL sNL] := setIdP maxNL.
-have [sPE abelP dimP] := pnElemP EpP; have [pP _] := andP abelP.
-have [solE ntP] := (sigma_compl_sol hallE, nt_pnElem EpP isT).
-have /orP[// | t2Lp] := prime_class_mmax_norm maxL pP sNL.
-have:= ntCMsP; rewrite -rank_gt0 => /rank_geP[Q /nElemP[q EqQ]].
-have [sQcMsP abelQ dimQ] := pnElemP EqQ; have [sQMs cPQ] := subsetIP sQcMsP.
-have piQq: q \in \pi(Q) by rewrite -p_rank_gt0 p_rank_abelem ?dimQ.
-have sMq: q \in \sigma(M) := pnatPpi (pgroupS sQMs (pcore_pgroup _ M)) piQq.
-have rpM: 'r_p(M) = 1%N by move: t13Mp; rewrite -2!andb_orr andbCA; case: eqP.
-have sL'q: q \notin \sigma(L).
- have notMGL: gval L \notin M :^: G.
- by apply: contraL t2Lp => /imsetP[x _ ->]; rewrite tau2J 2!inE rpM andbF.
- by apply: contraFN (sigma_partition maxM maxL notMGL q) => sLq; apply/andP.
-have [[sL'p _] [qQ _]] := (andP t2Lp, andP abelQ).
-have sL'PQ: \sigma(L)^'.-group (P <*> Q).
- by rewrite cent_joinEr // pgroupM (pi_pgroup pP) // (pi_pgroup qQ).
-have sPQ_L: P <*> Q \subset L.
- by rewrite (subset_trans _ sNL) // join_subG normG cents_norm.
-have{sPQ_L sL'PQ} [F hallF sPQF] := Hall_superset (mmax_sol maxL) sPQ_L sL'PQ.
-have{sPQF} [sPF sQF] := joing_subP sPQF.
-have [A Ep2A _] := ex_tau2Elem hallF t2Lp.
-have [[nsAF defA1] _ _ _] := tau2_compl_context maxL hallF t2Lp Ep2A.
-have EpAP: P \in 'E_p^1(A) by rewrite -defA1; apply/pnElemP.
-have{EpAP} sPA: P \subset A by case/pnElemP: EpAP.
-have sCQM: 'C(Q) \subset M.
- suffices: 'M('C(Q)) = [set M] by case/mem_uniq_mmax.
- have [t1Mp | t3Mp] := orP t13Mp.
- have [E1 hallE1 sPE1] := Hall_superset solE sPE (pi_pgroup pP t1Mp).
- by have [] := cent_cent_Msigma_tau1_uniq maxM hallE hallE1 sPE1 ntP EqQ.
- have [E3 hallE3 sPE3] := Hall_superset solE sPE (pi_pgroup pP t3Mp).
- have [[E1 hallE1] _] := ex_tau13_compl hallE; have [sE1E _] := andP hallE1.
- have [E2 _ complEi] := ex_tau2_compl hallE hallE1 hallE3.
- have [regE3 | ntE1 _ prE _] := tau13_nonregular maxM complEi.
- by rewrite (cent_semiregular regE3 sPE3 ntP) eqxx in ntCMsP.
- rewrite /= (cent_semiprime prE) // -(cent_semiprime prE sE1E ntE1) in EqQ.
- by have [] := cent_cent_Msigma_tau1_uniq maxM hallE hallE1 _ ntE1 EqQ.
-have not_cQA: ~~ (A \subset 'C(Q)).
- have [_ abelA dimA] := pnElemP Ep2A; apply: contraFN (ltnn 1) => cQA.
- by rewrite -dimA -p_rank_abelem // -rpM p_rankS ?(subset_trans cQA sCQM).
-have t1Lq: q \in \tau1(L).
- have [_ nsCF t1Fb] := tau1_cent_tau2Elem_factor maxL hallF t2Lp Ep2A.
- rewrite (pnatPpi (pgroupS (quotientS _ sQF) t1Fb)) //.
- rewrite -p_rank_gt0 -rank_pgroup ?quotient_pgroup // rank_gt0.
- rewrite -subG1 quotient_sub1 ?(subset_trans _ (normal_norm nsCF)) //.
- by rewrite subsetI sQF centsC.
-have defP: 'C_A(Q) = P.
- apply/eqP; rewrite eq_sym eqEcard subsetI sPA centsC cPQ /=.
- have [_ abelA dimA] := pnElemP Ep2A; have [pA _] := andP abelA.
- rewrite (card_pgroup (pgroupS _ pA)) ?subsetIl // (card_pgroup pP) dimP.
- rewrite leq_exp2l ?prime_gt1 ?(pnElem_prime EpP) //.
- by rewrite -ltnS -dimA properG_ltn_log // /proper subsetIl subsetIidl.
-have EqFQ: Q \in 'E_q^1(F) by apply/pnElemP.
-have regQLs: 'C_(L`_\sigma)(Q) = 1.
- by rewrite (tau12_regular maxL hallF t1Lq EqFQ t2Lp Ep2A) // defP.
-have ntAQ: [~: A, Q] != 1 by rewrite (sameP eqP commG1P).
-have [_ _ [_]] := tau1_act_tau2 maxL hallF t2Lp Ep2A t1Lq EqFQ regQLs ntAQ.
-by case/negP; rewrite /= defP (subset_trans (cent_sub P)).
-Qed.
-
-End Section13.
-