1 needs "Library/prime.ml";;
3 parse_as_infix("**",(20,"right"));;
5 let group = new_definition
6 `group(g,(**),i,(e:A)) <=>
7 (e IN g) /\ (!x. x IN g ==> i(x) IN g) /\
8 (!x y. x IN g /\ y IN g ==> x**y IN g) /\
9 (!x y z. x IN g /\ y IN g /\ z IN g ==> x**(y**z) = (x**y)**z) /\
10 (!x. x IN g ==> x**e = x /\ e**x = x) /\
11 (!x. x IN g ==> x**i(x) = e /\ i(x)**x = e)`;;
13 let subgroup = new_definition
14 `subgroup h (g,(**),i,(e:A)) <=> h SUBSET g /\ group(h,(**),i,e)`;;
16 (* ======== translation of John's proof ==================================== *)
20 let GROUP_LAGRANGE_COSETS = thm `;
22 group(g,(**),i,e:A) /\ subgroup h (g,(**),i,e) /\ FINITE g
23 ==> ?q. CARD g = CARD q * CARD h /\
24 !b. b IN g ==> ?a x. a IN q /\ x IN h /\ b = a**x
25 proof exec REWRITE_TAC[group; subgroup; SUBSET];
31 assume !x. x IN g ==> i(x) IN g [1];
32 assume !x y. x IN g /\ y IN g ==> x**y IN g [2];
33 assume !x y z. x IN g /\ y IN g /\ z IN g
34 ==> x**(y**z) = (x**y)**z [3];
35 assume !x. x IN g ==> x**e = x /\ e**x = x [4];
36 assume !x. x IN g ==> x**i(x) = e /\ i(x)**x = e [5];
37 assume !x. x IN h ==> x IN g [6];
39 assume !x. x IN h ==> i(x) IN h [8];
40 assume !x y. x IN h /\ y IN h ==> x**y IN h [9];
41 assume !x y z. x IN h /\ y IN h /\ z IN h
42 ==> x**(y**z) = (x**y)**z;
43 assume !x. x IN h ==> x**e = x /\ e**x = x [10];
44 assume !x. x IN h ==> x**i(x) = e /\ i(x)**x = e [11];
46 set coset = \a. {b | b IN g /\ ?x. x IN h /\ b = a**x} [coset];
47 !a. coset a = {b' | b' IN g /\ ?x. x IN h /\ b' = a**x} [13];
48 !a. a IN g ==> a IN coset a [14]
51 ?x. x IN h /\ a = a**x by 4,7;
52 qed by SIMP_TAC,13,15,IN_ELIM_THM;
53 FINITE h [16] by 6,12,FINITE_SUBSET,SUBSET;
56 ?t. FINITE t /\ coset a SUBSET t
58 qed by SIMP_TAC,12,13,IN_ELIM_THM,SUBSET;
59 qed by MATCH_MP_TAC,FINITE_SUBSET;
60 !a x y. a IN g /\ x IN g /\ y IN g /\ a**x = a**y ==> x = y [17]
62 assume a IN g /\ x IN g /\ y IN g /\ a**x = a**y [18];
63 (i(a)**a)**x = (i(a)**a)**y by 1,3;
66 !a. a IN g ==> CARD (coset a) = CARD h
69 coset a = IMAGE (\x. a**x) h [20]
71 !x. x IN g /\ (?x'. x' IN h /\ x = a**x') <=>
72 ?x'. x = a**x' /\ x' IN h by 2,6;
73 qed by REWRITE_TAC,13,EXTENSION,IN_IMAGE,IN_ELIM_THM;
74 (!x y. x IN h /\ y IN h /\ a**x = a**y ==> x = y) /\ FINITE h
76 CARD (IMAGE (\x. a**x) h) = CARD h by MATCH_MP_TAC,CARD_IMAGE_INJ;
78 !x y. x IN g /\ y IN g ==> i(x**y) = i(y)**i(x) [21]
80 assume x IN g /\ y IN g [22];
81 ?a. a IN g /\ i(x**y) IN g /\ i(y)**i(x) IN g /\
82 a**i(x**y) = a**i(y)**i(x)
84 e = x**(y**i(y))**i(x) by 1,4,5,22;
85 .= ((x**y)**i(y))**i(x) by 1,2,3,22;
86 qed by SIMP_TAC,1,2,3,5,22;
88 !x. x IN g ==> i(i(x)) = x [23]
91 ?a. a IN g /\ i(i(x)) IN g /\ x IN g /\ a**i(i(x)) = a**x
94 qed by MATCH_MP_TAC,17;
95 !a b. a IN g /\ b IN g
96 ==> coset a = coset b \/ coset a INTER coset b = {}
98 assume a IN g /\ b IN g [24];
100 suppose i(b)**a IN h [25];
102 !x. x IN h ==> b**(i(b)**a)**x = a**x /\ a**i(i(b)**a)**x = b**x
103 by SIMP_TAC,1,3,4,5,6,21,23,24;
104 thus x IN g /\ (?x'. x' IN h /\ x = a**x') <=>
105 x IN g /\ (?x'. x' IN h /\ x = b**x') by 8,9,25;
107 coset a = coset b by REWRITE_TAC,13,EXTENSION,IN_ELIM_THM;
109 suppose ~(i(b)**a IN h) [26];
111 assume x IN g /\ (?y. y IN h /\ x = a**y) /\ (?z. z IN h /\ x = b**z);
112 consider y z such that y IN h /\ x = a**y /\ z IN h /\ x = b**z [27];
113 (i(b)**a)**y = i(b)**a**y by 1,3,6,24,27;
115 .= e**z by 1,3,5,6,24,27;
117 z**i(y) = ((i(b)**a)**y)**i(y);
118 .= (i(b)**a)**y**i(y) by 1,2,3,5,6,24,27;
119 .= (i(b)**a)**e by 11,27;
120 .= i(b)**a by 1,2,4,24;
123 !x. ~((x IN g /\ ?y. y IN h /\ x = a**y) /\
124 (x IN g /\ ?z. z IN h /\ x = b**z));
125 coset a INTER coset b = {}
126 by REWRITE_TAC,13,EXTENSION,NOT_IN_EMPTY,IN_INTER,IN_ELIM_THM;
129 set q = {c | ?a. a IN g /\ c = (@)(coset a)} [q] [28]; take q;
130 !b. b IN g ==> ?a x. a IN q /\ x IN h /\ b = a**x [29]
133 set C = (@)(coset b) [C] [31]; take C;
134 (@)(coset b) IN {c | ?a. a IN g /\ c = (@)(coset a)} by 30;
136 C IN coset b by 14,30,C,IN,SELECT_AX;
137 C IN {b' | b' IN g /\ ?x. x IN h /\ b' = b**x} by 13;
139 C IN g /\ c IN h /\ C = b**c [32];
141 (b**c)**i(c) = b**c**i(c) by 1,3,6,30;
142 .= b by 1,4,5,6,30,32;
144 !a b. a IN g /\ b IN g /\ a IN coset b ==> b IN coset a [33]
146 a IN g /\ b IN g /\ a IN g /\ (?x. x IN h /\ a = b**x)
147 ==> b IN g /\ (?x. x IN h /\ b = a**x)
149 assume a IN g /\ b IN g /\ a IN g /\ ?x. x IN h /\ a = b**x [34];
151 consider c such that c IN h /\ a = b**c by 34;
153 qed by 3,4,6,8,11,34;
154 qed by REWRITE_TAC,13,IN_ELIM_THM;
155 !a b c. a IN coset b /\ b IN coset c /\ c IN g ==> a IN coset c [35]
156 proof let a b c be A;
157 now assume (a IN g /\ ?x. x IN h /\ a = b**x) /\
158 (b IN g /\ ?x. x IN h /\ b = c**x) /\ c IN g [36];
159 consider x x' such that x IN h /\ a = b**x /\ x' IN h /\ b = c**x';
160 thus a IN g /\ ?x. x IN h /\ a = c**x by 3,6,9,36;
162 qed by REWRITE_TAC,13,IN_ELIM_THM;
163 !a b. a IN coset b ==> a IN g [37]
165 a IN g /\ (?x. x IN h /\ a = b**x) ==> a IN g;
166 qed by REWRITE_TAC,13,IN_ELIM_THM;
167 !a b. a IN coset b /\ b IN g ==> coset a = coset b [38]
168 by 33,35,37,EXTENSION;
169 !a. a IN g ==> (@)(coset a) IN coset a [39] by 14,IN,SELECT_AX;
170 !a. a IN q ==> a IN g [40]
171 proof let a be A; assume a IN q;
172 a IN {c | ?a. a IN g /\ c = (@)(coset a)} by q;
173 consider a' such that a' IN g /\ a = (@)(coset a');
175 !a x a' x'. a IN q /\ a' IN q /\ x IN h /\ x' IN h /\ a'**x' = a**x
176 ==> a' = a /\ x' = x [41]
177 proof let a x a' x' be A;
178 assume a IN q /\ a' IN q /\ x IN h /\ x' IN h /\ a'**x' = a**x [42];
179 a IN {c | ?a. a IN g /\ c = (@)(coset a)} /\
180 a' IN {c | ?a. a IN g /\ c = (@)(coset a)} by q;
181 consider a1 a2 such that
182 a1 IN g /\ a = (@)(coset a1) /\ a2 IN g /\ a' = (@)(coset a2) [43];
183 a IN g /\ a' IN g [44] by 37,39;
184 coset a = coset a1 /\ coset a' = coset a2 by 38,39,43;
185 a = (@)(coset a) /\ a' = (@)(coset a') [45] by 43;
186 ?x. x IN h /\ a' = a**x
188 thus x**i(x') IN h by 8,9,42;
189 a' = a'**x'**i(x') by 4,5,6,42,44;
190 .= (a**x)**i(x') by 1,2,3,6,42,44;
191 qed by 1,2,3,6,42,44;
192 a' IN coset a by REWRITE_TAC,13,44,IN_ELIM_THM;
193 coset a = coset a' by 38,44;
194 qed by 6,17,42,44,45;
195 g = IMAGE (\(a,x). a**x) {(a,x) | a IN q /\ x IN h}
197 !x. x IN g <=> ?p1 p2. (x = p1**p2 /\ p1 IN q) /\ p2 IN h by 2,6,29,40;
198 qed by REWRITE_TAC,EXTENSION,IN_IMAGE,IN_ELIM_THM,EXISTS_PAIR_THM,PAIR_EQ,
199 CONJ_ASSOC,ONCE_REWRITE_RULE[CONJ_SYM] UNWIND_THM1;
200 CARD g = CARD (IMAGE (\(a,x). a**x) {(a,x) | a IN q /\ x IN h}) [46];
201 .= CARD {(a,x) | a IN q /\ x IN h}
203 !x y. x IN {(a,x) | a IN q /\ x IN h} /\
204 y IN {(a,x) | a IN q /\ x IN h} /\
205 (\(a,x). a**x) x = (\(a,x). a**x) y
208 !p1 p2 p1' p2'. (?a x. (a IN q /\ x IN h) /\ p1 = a /\ p2 = x) /\
209 (?a x. (a IN q /\ x IN h) /\ p1' = a /\ p2' = x) /\
211 ==> p1 = p1' /\ p2 = p2' by 41;
212 qed by REWRITE_TAC,FORALL_PAIR_THM,IN_ELIM_THM,PAIR_EQ;
213 FINITE q /\ FINITE h by 6,12,40,FINITE_SUBSET,SUBSET;
214 FINITE {(a,x) | a IN q /\ x IN h} by FINITE_PRODUCT;
215 qed by MATCH_MP_TAC CARD_IMAGE_INJ,47;
216 .= CARD q * CARD h by 6,12,40,46,CARD_PRODUCT,FINITE_SUBSET,SUBSET;
219 let GROUP_LAGRANGE = thm `;
221 group (g,( ** ),i,e:A) /\ subgroup h (g,(**),i,e) /\ FINITE g
222 ==> CARD h divides CARD g
223 by GROUP_LAGRANGE_COSETS,DIVIDES_LMUL,DIVIDES_REFL`;;
225 (* ======== and formal proof sketch derived from this translation ========== *)
229 let GROUP_LAGRANGE_COSETS_SKETCH = ref None;;
231 GROUP_LAGRANGE_COSETS_SKETCH := Some `;
233 group(g,(**),i,e:A) /\ subgroup h (g,(**),i,e) /\ FINITE g
234 ==> ?q. CARD g = CARD q * CARD h /\
235 !b. b IN g ==> ?a x. a IN q /\ x IN h /\ b = a**x
236 proof exec REWRITE_TAC[group; subgroup; SUBSET];
242 assume !x. x IN g ==> i(x) IN g;
243 assume !x y. x IN g /\ y IN g ==> x**y IN g;
244 assume !x y z. x IN g /\ y IN g /\ z IN g
245 ==> x**(y**z) = (x**y)**z;
246 assume !x. x IN g ==> x**e = x /\ e**x = x;
247 assume !x. x IN g ==> x**i(x) = e /\ i(x)**x = e;
248 assume !x. x IN h ==> x IN g;
250 assume !x. x IN h ==> i(x) IN h;
251 assume !x y. x IN h /\ y IN h ==> x**y IN h;
252 assume !x y z. x IN h /\ y IN h /\ z IN h
253 ==> x**(y**z) = (x**y)**z;
254 assume !x. x IN h ==> x**e = x /\ e**x = x;
255 assume !x. x IN h ==> x**i(x) = e /\ i(x)**x = e;
257 set coset = \a. {b | b IN g /\ ?x. x IN h /\ b = a**x};
258 !a. coset a = {b' | b' IN g /\ ?x. x IN h /\ b' = a**x};
259 !a. a IN g ==> a IN coset a
262 ?x. x IN h /\ a = a**x;
266 :: 1: inference error
269 ?t. FINITE t /\ coset a SUBSET t
273 :: 2: inference time-out
276 !a x y. a IN g /\ x IN g /\ y IN g /\ a**x = a**y ==> x = y
277 proof let a x y be A;
278 assume a IN g /\ x IN g /\ y IN g /\ a**x = a**y;
279 (i(a)**a)**x = (i(a)**a)**y;
283 !a. a IN g ==> CARD (coset a) = CARD h
286 coset a = IMAGE (\x. a**x) h
288 !x. x IN g /\ (?x'. x' IN h /\ x = a**x') <=>
289 ?x'. x = a**x' /\ x' IN h;
292 (!x y. x IN h /\ y IN h /\ a**x = a**y ==> x = y) /\ FINITE h;
293 CARD (IMAGE (\x. a**x) h) = CARD h;
296 !x y. x IN g /\ y IN g ==> i(x**y) = i(y)**i(x)
298 assume x IN g /\ y IN g;
299 ?a. a IN g /\ i(x**y) IN g /\ i(y)**i(x) IN g /\
300 a**i(x**y) = a**i(y)**i(x)
302 e = x**(y**i(y))**i(x);
304 .= ((x**y)**i(y))**i(x);
308 !x. x IN g ==> i(i(x)) = x
311 ?a. a IN g /\ i(i(x)) IN g /\ x IN g /\ a**i(i(x)) = a**x
315 !a b. a IN g /\ b IN g
316 ==> coset a = coset b \/ coset a INTER coset b = {}
318 assume a IN g /\ b IN g;
320 suppose i(b)**a IN h;
322 !x. x IN h ==> b**(i(b)**a)**x = a**x /\ a**i(i(b)**a)**x = b**x;
324 thus x IN g /\ (?x'. x' IN h /\ x = a**x') <=>
325 x IN g /\ (?x'. x' IN h /\ x = b**x');
331 suppose ~(i(b)**a IN h);
333 assume x IN g /\ (?y. y IN h /\ x = a**y) /\ (?z. z IN h /\ x = b**z);
334 consider y z such that y IN h /\ x = a**y /\ z IN h /\ x = b**z;
335 (i(b)**a)**y = i(b)**a**y;
340 z**i(y) = ((i(b)**a)**y)**i(y);
341 .= (i(b)**a)**y**i(y);
349 !x. ~((x IN g /\ ?y. y IN h /\ x = a**y) /\
350 (x IN g /\ ?z. z IN h /\ x = b**z));
351 coset a INTER coset b = {};
355 set q = {c | ?a. a IN g /\ c = (@)(coset a)};
357 !b. b IN g ==> ?a x. a IN q /\ x IN h /\ b = a**x
360 set C = (@)(coset b);
362 (@)(coset b) IN {c | ?a. a IN g /\ c = (@)(coset a)};
366 C IN {b' | b' IN g /\ ?x. x IN h /\ b' = b**x};
368 C IN g /\ c IN h /\ C = b**c;
370 (b**c)**i(c) = b**c**i(c);
373 !a b. a IN g /\ b IN g /\ a IN coset b ==> b IN coset a
375 a IN g /\ b IN g /\ a IN g /\ (?x. x IN h /\ a = b**x)
376 ==> b IN g /\ (?x. x IN h /\ b = a**x)
378 assume a IN g /\ b IN g /\ a IN g /\ ?x. x IN h /\ a = b**x;
380 consider c such that c IN h /\ a = b**c;
385 !a b c. a IN coset b /\ b IN coset c /\ c IN g ==> a IN coset c
386 proof let a b c be A;
387 now assume (a IN g /\ ?x. x IN h /\ a = b**x) /\
388 (b IN g /\ ?x. x IN h /\ b = c**x) /\ c IN g;
389 consider x x' such that x IN h /\ a = b**x /\ x' IN h /\ b = c**x';
390 thus a IN g /\ ?x. x IN h /\ a = c**x;
395 !a b. a IN coset b ==> a IN g
397 a IN g /\ (?x. x IN h /\ a = b**x) ==> a IN g;
399 !a b. a IN coset b /\ b IN g ==> coset a = coset b;
401 !a. a IN g ==> (@)(coset a) IN coset a;
403 !a. a IN q ==> a IN g
406 a IN {c | ?a. a IN g /\ c = (@)(coset a)};
407 consider a' such that a' IN g /\ a = (@)(coset a');
409 !a x a' x'. a IN q /\ a' IN q /\ x IN h /\ x' IN h /\ a'**x' = a**x
411 proof let a x a' x' be A;
412 assume a IN q /\ a' IN q /\ x IN h /\ x' IN h /\ a'**x' = a**x;
413 a IN {c | ?a. a IN g /\ c = (@)(coset a)} /\
414 a' IN {c | ?a. a IN g /\ c = (@)(coset a)};
415 consider a1 a2 such that
416 a1 IN g /\ a = (@)(coset a1) /\ a2 IN g /\ a' = (@)(coset a2);
419 coset a = coset a1 /\ coset a' = coset a2;
421 a = (@)(coset a) /\ a' = (@)(coset a');
422 ?x. x IN h /\ a' = a**x
437 g = IMAGE (\(a,x). a**x) {(a,x) | a IN q /\ x IN h}
439 !x. x IN g <=> ?p1 p2. (x = p1**p2 /\ p1 IN q) /\ p2 IN h;
443 CARD g = CARD (IMAGE (\(a,x). a**x) {(a,x) | a IN q /\ x IN h});
444 .= CARD {(a,x) | a IN q /\ x IN h}
446 !x y. x IN {(a,x) | a IN q /\ x IN h} /\
447 y IN {(a,x) | a IN q /\ x IN h} /\
448 (\(a,x). a**x) x = (\(a,x). a**x) y
451 !p1 p2 p1' p2'. (?a x. (a IN q /\ x IN h) /\ p1 = a /\ p2 = x) /\
452 (?a x. (a IN q /\ x IN h) /\ p1' = a /\ p2' = x) /\
454 ==> p1 = p1' /\ p2 = p2';
457 FINITE q /\ FINITE h;
459 FINITE {(a,x) | a IN q /\ x IN h};