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