@@ -10,101 +10,11 @@ Unset Printing Implicit Defensive.
1010(******************* *)
1111
1212(************ *)
13- (* gproduct? *)
13+ (* gproduct *)
1414(************ *)
1515
16- Section ExternalNDirProd.
17-
18- Variables (n : nat) (gT : 'I_n -> finGroupType).
19- Notation gTn := {dffun forall i, gT i}.
20-
21- Definition extnprod_mulg (x y : gTn) : gTn := [ffun i => (x i * y i)%g].
22- Definition extnprod_invg (x : gTn) : gTn := [ffun i => (x i)^-1%g].
23-
24- Lemma extnprod_mul1g : left_id [ffun=> 1%g] extnprod_mulg.
25- Proof . by move=> x; apply/ffunP => i; rewrite !ffunE mul1g. Qed .
26-
27- Lemma extnprod_mulVg : left_inverse [ffun=> 1%g] extnprod_invg extnprod_mulg.
28- Proof . by move=> x; apply/ffunP => i; rewrite !ffunE mulVg. Qed .
29-
30- Lemma extnprod_mulgA : associative extnprod_mulg.
31- Proof . by move=> x y z; apply/ffunP => i; rewrite !ffunE mulgA. Qed .
32-
33- Definition extnprod_groupMixin :=
34- Eval hnf in FinGroup.Mixin extnprod_mulgA extnprod_mul1g extnprod_mulVg.
35- Canonical extnprod_baseFinGroupType :=
36- Eval hnf in BaseFinGroupType gTn extnprod_groupMixin.
37- Canonical prod_group := FinGroupType extnprod_mulVg.
38-
39- End ExternalNDirProd.
40-
41- Definition setXn n (fT : 'I_n -> finType) (A : forall i, {set fT i}) :
42- {set {dffun forall i, fT i}} :=
43- [set x : {dffun forall i, fT i} | [forall i : 'I_n, x i \in A i]].
44-
45- Lemma setXn_group_set n (gT : 'I_n -> finGroupType) (G : forall i, {group gT i}) :
46- group_set (setXn G).
47- Proof .
48- apply/andP => /=; split.
49- by rewrite inE; apply/forallP => i; rewrite ffunE group1.
50- apply/subsetP => x /mulsgP[u v]; rewrite !inE => /forallP uG /forallP vG {x}->.
51- by apply/forallP => x; rewrite ffunE groupM ?uG ?vG.
52- Qed .
53-
54- Canonical setXn_group n (gT : 'I_n -> finGroupType) (G : forall i, {group gT i}) :=
55- Group (setXn_group_set G).
56-
57- Lemma setX0 (gT : 'I_0 -> finGroupType) (G : forall i, {group gT i}) :
58- setXn G = 1%g.
59- Proof .
60- apply/setP => x; rewrite !inE; apply/forallP/idP => [_|? []//].
61- by apply/eqP/ffunP => -[].
62- Qed .
63-
64- (******* *)
65- (* perm *)
66- (******* *)
67-
68- Lemma tpermJt (X : finType) (x y z : X) : x != z -> y != z ->
69- (tperm x z ^ tperm x y)%g = tperm y z.
70- Proof .
71- by move=> neq_xz neq_yz; rewrite tpermJ tpermL [tperm _ _ z]tpermD.
72- Qed .
73-
74- Lemma gen_tperm (X : finType) x :
75- <<[set tperm x y | y in X]>>%g = [set: {perm X}].
76- Proof .
77- apply/eqP; rewrite eqEsubset subsetT/=; apply/subsetP => s _.
78- have [ts -> _] := prod_tpermP s; rewrite group_prod// => -[/= y z] _.
79- have [<-|Nyz] := eqVneq y z; first by rewrite tperm1 group1.
80- have [<-|Nxz] := eqVneq x z; first by rewrite tpermC mem_gen ?imset_f.
81- by rewrite -(tpermJt Nxz Nyz) groupJ ?mem_gen ?imset_f.
82- Qed .
83-
84- Lemma prime_orbit (X : finType) x c :
85- prime #|X| -> #[c]%g = #|X| -> orbit 'P <[c]> x = [set: X].
86- Proof .
87- move=> X_prime ord_c; have dvd_orbit y : (#|orbit 'P <[c]> y| %| #|X|)%N.
88- by rewrite (dvdn_trans (dvdn_orbit _ _ _))// [#|<[_]>%g|]ord_c.
89- have [] := boolP [forall y, #|orbit 'P <[c]> y| == 1%N].
90- move=> /'forall_eqP-/(_ _)/card_orbit1 orbit1; suff c_eq_1 : c = 1%g.
91- by rewrite c_eq_1 ?order1 in ord_c; rewrite -ord_c in X_prime.
92- apply/permP => y; rewrite perm1.
93- suff: c y \in orbit 'P <[c]> y by rewrite orbit1 inE => /eqP->.
94- by apply/orbitP; exists c => //; rewrite mem_gen ?inE.
95- move=> /forallPn[y orbit_y_neq0]; have orbit_y : orbit 'P <[c]> y = [set: X].
96- apply/eqP; rewrite eqEcard subsetT cardsT.
97- by have /(prime_nt_dvdP X_prime orbit_y_neq0)<-/= := dvd_orbit y.
98- by have /orbit_in_eqP-> : x \in orbit 'P <[c]> y; rewrite ?subsetT ?orbit_y.
99- Qed .
100-
101- Lemma prime_astab (X : finType) (x : X) (c : {perm X}) :
102- prime #|X| -> #[c]%g = #|X| -> 'C_<[c]>[x | 'P]%g = 1%g.
103- Proof .
104- move=> X_prime ord_c; have /= := card_orbit_stab 'P [group of <[c]>%g] x.
105- rewrite prime_orbit// cardsT [#|<[_]>%g|]ord_c -[RHS]muln1 => /eqP.
106- by rewrite eqn_mul2l gtn_eqF ?prime_gt0//= -trivg_card1 => /eqP.
107- Qed .
16+ Definition setX0 := groupX0.
17+ #[deprecated(since="mathcomp 2.3",note="Use groupX0 instead.")]
10818
10919(****************** *)
11020(* package algebra *)
0 commit comments