1 (* ========================================================================= *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
4 (* Authour : VU KHAC KY *)
5 (* Book lemma: AJRIPQN *)
8 (* ========================================================================= *)
11 module Ajripqn = struct
14 open Vukhacky_tactics;;
21 open Marchal_cells_2_new;;
30 (* ========================================================================= *)
34 saturated V /\ packing V /\ barV V 3 ul /\ barV V 3 vl /\
35 i IN {0,1,2,3,4} /\ j IN {0,1,2,3,4} /\
36 ~NULLSET (mcell i V ul INTER mcell j V vl) ==>
37 i = j /\ mcell i V ul = mcell j V vl`;;
39 (* ========================================================================= *)
40 (* Supported lemmas *)
42 let VOL_POS_LT_AFF_DIM_3 = prove_by_refinement (
43 `!S:real^3->bool. measurable S /\ &0 < vol S ==> aff_dim S = &3`,
45 (NEW_GOAL `aff_dim (S:real^3->bool) <= &(dimindex (:3))`);
46 (ASM_REWRITE_TAC[AFF_DIM_LE_UNIV]);
47 (UP_ASM_TAC THEN REWRITE_TAC[DIMINDEX_3] THEN STRIP_TAC);
48 (ASM_CASES_TAC `aff_dim (S:real^3->bool) <= &2`);
49 (NEW_GOAL `negligible (S:real^3->bool)`);
50 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
51 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
53 (NEW_GOAL `vol (S:real^3->bool) = &0`);
54 (NEW_GOAL `(!Z:real^3->bool. NULLSET Z ==> vol Z = &0)`);
55 (MESON_TAC[volume_props]);
62 let UP_TO_4_KY_LEMMA = prove (`!i. i <= 4 <=> i IN {0,1,2,3,4}`,
63 REWRITE_TAC[SET_RULE `i IN {0,1,2,3,4} <=>
64 (i = 0 \/ i = 1 \/ i = 2 \/ i = 3 \/i= 4)`] THEN ARITH_TAC);;
66 let FINITE_SET_LIST_LEMMA = prove
75 y = [u0; u1; u2; u3]}`,
77 `{y | ?u0 u1 u2 u3. u0 IN s /\ u1 IN s /\ u2 IN s /\ u3 IN s /\
78 y = [u0; u1; u2; u3]} =
79 {CONS u0 y1 | u0 IN s /\
80 y1 IN {CONS u1 y2 | u1 IN s /\
81 y2 IN {[u2;u3] | u2 IN s /\
83 REPEAT(GEN_TAC THEN DISCH_TAC THEN
84 MATCH_MP_TAC FINITE_PRODUCT_DEPENDENT THEN ASM_REWRITE_TAC[]));;
86 (* ========================================================================= *)
89 let AJRIPQN = prove_by_refinement (AJRIPQN_concl,
91 [(REPEAT GEN_TAC THEN STRIP_TAC);
93 (ABBREV_TAC `S = mcell i V ul INTER mcell j V vl`);
94 (UNDISCH_TAC `~NULLSET (S:real^3->bool)`);
95 (REWRITE_WITH `~NULLSET (S:real^3->bool) <=> &0 < measure S`);
96 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
97 (MATCH_MP_TAC MEASURABLE_MEASURE_POS_LT);
98 (EXPAND_TAC "S" THEN MATCH_MP_TAC MEASURABLE_INTER);
99 (ASM_SIMP_TAC[MEASURABLE_MCELL]);
102 (NEW_GOAL `bounded (S:real^3->bool)`);
103 (EXPAND_TAC "S" THEN MATCH_MP_TAC BOUNDED_INTER);
104 (ASM_SIMP_TAC[BOUNDED_MCELL]);
105 (UP_ASM_TAC THEN REWRITE_TAC[bounded]);
108 (NEW_GOAL `?(v:real^3) S1.
109 v IN V /\ S1 SUBSET S /\ measurable S1 /\ &0 < measure S1 /\
110 S1 SUBSET (voronoi_closed V v)`);
111 (ABBREV_TAC `SP = {v:real^3 | v IN V /\
112 ~(voronoi_closed V v INTER S = {})}`);
113 (NEW_GOAL `FINITE (SP:(real^3->bool))`);
114 (NEW_GOAL `SP SUBSET (V INTER ball ((vec 0):real^3, a + &2))`);
115 (EXPAND_TAC "SP" THEN REWRITE_TAC[SUBSET;IN_INTER;IN;IN_ELIM_THM; ball]);
118 (UP_ASM_TAC THEN REWRITE_TAC[SET_RULE `~(A = {}) <=> (?z. z IN A)`]);
119 (REWRITE_TAC[IN_INTER]);
121 (REWRITE_TAC[dist; NORM_ARITH `norm (vec 0 - a) = norm a`]);
122 (NEW_GOAL `norm x <= norm z + dist (x , z:real^3)`);
123 (REWRITE_TAC[dist] THEN NORM_ARITH_TAC);
124 (NEW_GOAL `norm (z:real^3) <= a`);
125 (FIRST_ASSUM MATCH_MP_TAC);
127 (NEW_GOAL `dist (x, z:real^3) < &2`);
128 (ONCE_REWRITE_TAC[DIST_SYM]);
129 (MATCH_MP_TAC Pack2.voronoi_in_ball);
130 (EXISTS_TAC `V:real^3->bool`);
132 (ASM_REAL_ARITH_TAC);
134 (MATCH_MP_TAC FINITE_SUBSET);
135 (EXISTS_TAC `V INTER ball ((vec 0):real^3,a + &2)`);
137 (MATCH_MP_TAC KIUMVTC);
139 (NEW_GOAL `~((S:real^3->bool) = {})`);
141 (UNDISCH_TAC `&0 < vol (S:real^3->bool)`);
142 (ASM_REWRITE_TAC[MEASURE_EMPTY]);
144 (UP_ASM_TAC THEN REWRITE_TAC[SET_RULE `~(A = {}) <=> (?z. z IN A)`]);
146 (NEW_GOAL `norm (z:real^3) <= a`);
147 (FIRST_ASSUM MATCH_MP_TAC);
149 (NEW_GOAL `&0 <= norm (z:real^3)`);
150 (REWRITE_TAC[NORM_POS_LE]);
151 (ASM_REAL_ARITH_TAC);
153 (ABBREV_TAC `f = (\v:real^3. voronoi_closed V v INTER S)`);
154 (ABBREV_TAC `SPP = IMAGE (f:(real^3->real^3->bool)) (SP:real^3->bool)`);
155 (NEW_GOAL `FINITE (SPP:(real^3->bool)->bool)`);
156 (EXPAND_TAC "SPP" THEN MATCH_MP_TAC FINITE_IMAGE THEN ASM_REWRITE_TAC[]);
157 (NEW_GOAL `(S:real^3->bool) = (UNIONS SPP)`);
158 (EXPAND_TAC "SPP" THEN REWRITE_TAC[SET_EQ_LEMMA; UNIONS_IMAGE;IN;IN_ELIM_THM]
159 THEN REPEAT STRIP_TAC);
161 (NEW_GOAL `?v:real^3. v IN V /\ x IN voronoi_closed V v`);
162 (MATCH_MP_TAC Packing3.TIWWFYQ);
164 (UP_ASM_TAC THEN REPEAT STRIP_TAC);
165 (EXISTS_TAC `v:real^3`);
167 (EXPAND_TAC "SP" THEN REWRITE_TAC[IN_ELIM_THM]);
169 (REWRITE_TAC[SET_RULE `~(A = {}) <=> (?z. z IN A)`]);
170 (EXISTS_TAC `x:real^3`);
171 (REWRITE_TAC[IN_INTER]);
174 (ONCE_REWRITE_TAC[GSYM IN]);
175 (REWRITE_TAC[IN_INTER]);
177 (UP_ASM_TAC THEN EXPAND_TAC "f");
178 (REWRITE_WITH `(voronoi_closed V x' INTER S) (x:real^3)
179 <=> x IN (voronoi_closed V x' INTER S)`);
180 (MESON_TAC[GSYM IN]);
181 (REWRITE_TAC[IN_INTER]);
184 (NEW_GOAL `!s1. s1 IN SPP ==> measurable (s1:(real^3->bool))`);
185 (EXPAND_TAC "SPP" THEN EXPAND_TAC "f" THEN REWRITE_TAC[IMAGE;IN;
188 (ONCE_ASM_REWRITE_TAC[]);
189 (MATCH_MP_TAC MEASURABLE_INTER);
191 (ASM_SIMP_TAC[Packing3.DRUQUFE]);
193 (MATCH_MP_TAC MEASURABLE_INTER);
194 (ASM_SIMP_TAC[MEASURABLE_MCELL]);
197 (NEW_GOAL `?S1:real^3->bool. S1 IN SPP /\ ~(negligible S1)`);
198 (ONCE_REWRITE_TAC[MESON[] `S <=> ~S ==> F`]);
200 (NEW_GOAL `!S1:real^3->bool. S1 IN SPP ==> negligible S1`);
201 (UP_ASM_TAC THEN MESON_TAC[]);
202 (NEW_GOAL `negligible (UNIONS (SPP:(real^3->bool)->bool))`);
203 (MATCH_MP_TAC NEGLIGIBLE_UNIONS);
205 (UP_ASM_TAC THEN REWRITE_TAC[GSYM (ASSUME `S:real^3->bool = UNIONS SPP`)]);
206 (REWRITE_WITH `~NULLSET S <=> &0 < measure (S:real^3->bool)`);
207 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
208 (MATCH_MP_TAC MEASURABLE_MEASURE_POS_LT);
210 (MATCH_MP_TAC MEASURABLE_INTER);
211 (ASM_SIMP_TAC[MEASURABLE_MCELL]);
213 (FIRST_X_ASSUM CHOOSE_TAC);
215 (UP_ASM_TAC THEN EXPAND_TAC "SPP" THEN EXPAND_TAC "f" THEN
216 REWRITE_TAC[IMAGE;IN;IN_ELIM_THM]);
217 (EXPAND_TAC "SP" THEN REWRITE_TAC[IN;IN_ELIM_THM;
218 SET_RULE `~(s = {}) <=> (?x. x IN s)`]);
220 (EXISTS_TAC `x:real^3`);
221 (EXISTS_TAC `S1:real^3->bool`);
225 (ONCE_ASM_REWRITE_TAC[]);
226 (MATCH_MP_TAC MEASURABLE_INTER);
228 (ASM_SIMP_TAC[Packing3.DRUQUFE]);
230 (MATCH_MP_TAC MEASURABLE_INTER);
231 (ASM_SIMP_TAC[MEASURABLE_MCELL]);
233 (REWRITE_WITH `&0 < measure (S1:real^3->bool) <=> ~NULLSET S1`);
234 (MATCH_MP_TAC MEASURABLE_MEASURE_POS_LT);
235 (ONCE_ASM_REWRITE_TAC[]);
236 (MATCH_MP_TAC MEASURABLE_INTER);
238 (ASM_SIMP_TAC[Packing3.DRUQUFE]);
240 (MATCH_MP_TAC MEASURABLE_INTER);
241 (ASM_SIMP_TAC[MEASURABLE_MCELL]);
244 (UP_ASM_TAC THEN STRIP_TAC);
245 (* ======================================================================== *)
248 (NEW_GOAL `?wl:(real^3)list S2.
249 barV V 3 wl /\ S2 SUBSET S1 /\ measurable S2 /\
250 &0 < measure S2 /\ S2 SUBSET (rogers V wl)`);
253 `SP = {wl| wl IN barV V 3 /\ HD wl = v /\ ~(rogers V wl INTER S1 = {})}`);
254 (NEW_GOAL `FINITE (SP:((real^3)list->bool))`);
255 (ABBREV_TAC `H = {u:real^3| u IN V /\ dist (u,v) <= &4}`);
258 u0 IN H /\ u1 IN H /\ u2 IN H /\ u3 IN H /\ wl = [u0;u1;u2;u3:real^3]}`);
259 (EXPAND_TAC "SP" THEN REWRITE_TAC[SUBSET;IN;IN_ELIM_THM]);
261 (NEW_GOAL `?u0 u1 u2 u3. x = [u0:real^3;u1;u2;u3]`);
262 (MP_TAC (ASSUME `barV V 3 x`));
263 (REWRITE_TAC[BARV_3_EXPLICIT]);
264 (FIRST_X_ASSUM CHOOSE_TAC);
265 (FIRST_X_ASSUM CHOOSE_TAC);
266 (FIRST_X_ASSUM CHOOSE_TAC);
267 (FIRST_X_ASSUM CHOOSE_TAC);
268 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3`);
269 (EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3`);
271 (NEW_GOAL `omega_list V x IN voronoi_list V x`);
272 (MATCH_MP_TAC Packing3.OMEGA_LIST_IN_VORONOI_LIST);
275 (ABBREV_TAC `u = omega_list V x`);
276 (UNDISCH_TAC `(u:real^3) IN voronoi_list V x` THEN ASM_REWRITE_TAC[]);
277 (NEW_GOAL `u0 = v:real^3`);
278 (EXPAND_TAC "v" THEN REWRITE_TAC[ASSUME `x = [u0;u1;u2;u3:real^3]`;HD]);
279 (DISCH_TAC THEN EXPAND_TAC "H" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
280 (NEW_GOAL `set_of_list (x:(real^3)list) SUBSET V`);
281 (MATCH_MP_TAC Packing3.BARV_SUBSET);
284 (UP_ASM_TAC THEN ASM_REWRITE_TAC[set_of_list]);
286 (REWRITE_WITH `V v /\ (V:real^3->bool) u1 /\ V u2 /\ V (u3:real^3)`);
287 (UP_ASM_TAC THEN SET_TAC[]);
288 (NEW_GOAL `!z. z IN {v, u1, u2, u3:real^3} ==> dist (z,v) <= &4`);
289 (NEW_GOAL `!z. z IN {v, u1, u2, u3:real^3} ==> dist (z,u) <= &2`);
291 (ASM_CASES_TAC `dist (z,u:real^3) <= &2`);
293 (UNDISCH_TAC `saturated (V:real^3->bool)`);
294 (REWRITE_TAC[saturated]);
296 (NEW_GOAL `?y. y IN V /\ dist (u, y:real^3) < &2`);
298 (UP_ASM_TAC THEN STRIP_TAC);
299 (NEW_GOAL `u IN voronoi_closed V (z:real^3)`);
300 (UNDISCH_TAC `u IN voronoi_list V [u0; u1; u2; u3:real^3]`);
301 (REWRITE_TAC[VORONOI_LIST;VORONOI_SET; set_of_list; IN_INTERS]);
303 (FIRST_ASSUM MATCH_MP_TAC);
305 (ONCE_REWRITE_TAC[DIST_SYM]);
306 (UP_ASM_TAC THEN REWRITE_TAC[voronoi_closed; IN;IN_ELIM_THM]);
308 (NEW_GOAL `dist (u,z:real^3) <= dist (u,y)`);
309 (FIRST_ASSUM MATCH_MP_TAC);
311 (ASM_REAL_ARITH_TAC);
313 (NEW_GOAL `dist (z, v) <= dist (z, u) + dist (v, u:real^3)`);
315 (NEW_GOAL `dist (z,u:real^3) <= &2`);
316 (FIRST_ASSUM MATCH_MP_TAC);
318 (NEW_GOAL `dist (v,u:real^3) <= &2`);
319 (FIRST_ASSUM MATCH_MP_TAC);
321 (ASM_REAL_ARITH_TAC);
322 (ASM_SIMP_TAC[SET_RULE
323 `a IN {a,b,c,d} /\ b IN {a,b,c,d} /\ c IN {a,b,c,d} /\ d IN {a,b,c,d}`]);
324 (MATCH_MP_TAC FINITE_SUBSET);
325 (EXISTS_TAC `{wl | ?a b c d.
326 a IN H /\ b IN H /\ c IN H /\ d IN H /\ wl = [a;b;c;d:real^3]}`);
329 (MATCH_MP_TAC FINITE_SET_LIST_LEMMA);
331 (MATCH_MP_TAC FINITE_SUBSET);
332 (EXISTS_TAC `V INTER ball (v:real^3, &5)`);
333 (ASM_SIMP_TAC[KIUMVTC; REAL_ARITH `&0 <= &5`]);
334 (EXPAND_TAC "H" THEN REWRITE_TAC[SUBSET; ball; IN_INTER; IN;IN_ELIM_THM]);
337 (ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REAL_ARITH_TAC);
338 (ABBREV_TAC `f = (\wl:(real^3)list. rogers V wl INTER S1)`);
339 (ABBREV_TAC `SPP = IMAGE (f:((real^3)list->real^3->bool))
340 (SP:(real^3)list->bool)`);
341 (NEW_GOAL `FINITE (SPP:(real^3->bool)->bool)`);
342 (EXPAND_TAC "SPP" THEN MATCH_MP_TAC FINITE_IMAGE THEN ASM_REWRITE_TAC[]);
344 (NEW_GOAL `(S1:real^3->bool) = (UNIONS SPP)`);
345 (EXPAND_TAC "SPP" THEN REWRITE_TAC[SET_EQ_LEMMA; UNIONS_IMAGE;IN;IN_ELIM_THM]
346 THEN REPEAT STRIP_TAC);
348 (NEW_GOAL `?vl. vl IN barV V 3 /\
350 truncate_simplex 0 vl = [v]`);
351 (REWRITE_WITH `(?vl. vl IN barV V 3 /\ x IN rogers V vl /\
352 truncate_simplex 0 vl = [v]) <=> x IN voronoi_closed V v`);
353 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
354 (MATCH_MP_TAC Rogers.GLTVHUM);
357 (UP_ASM_TAC THEN STRIP_TAC);
358 (EXISTS_TAC `vl':(real^3)list`);
360 (EXPAND_TAC "SP" THEN REWRITE_TAC[IN_ELIM_THM]);
363 (NEW_GOAL `?u0 u1 u2 u3. vl' = [u0:real^3;u1;u2;u3]`);
364 (SUBGOAL_THEN `barV V 3 vl'` MP_TAC);
366 (REWRITE_TAC[BARV_3_EXPLICIT]);
367 (FIRST_X_ASSUM CHOOSE_TAC);
368 (FIRST_X_ASSUM CHOOSE_TAC);
369 (FIRST_X_ASSUM CHOOSE_TAC);
370 (FIRST_X_ASSUM CHOOSE_TAC);
371 (NEW_GOAL `v = u0:real^3`);
372 (UNDISCH_TAC `truncate_simplex 0 vl' = [v:real^3]`);
373 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_0]);
375 (NEW_GOAL `v = HD [v:real^3] /\ u0 = HD [u0:real^3]`);
377 (ONCE_ASM_REWRITE_TAC[]);
378 (AP_TERM_TAC THEN ASM_REWRITE_TAC[]);
380 (ASM_REWRITE_TAC[HD]);
381 (REWRITE_TAC[SET_RULE `~(x = {}) <=> (?y. y IN x)`]);
382 (EXISTS_TAC `x:real^3`);
383 (REWRITE_TAC[IN_INTER]);
384 (ASM_REWRITE_TAC[IN]);
385 (REWRITE_WITH `(rogers V vl' INTER S1) x <=> x IN rogers V vl'/\ x IN S1`);
386 (REWRITE_TAC[IN; GSYM IN_INTER]);
387 (ASM_REWRITE_TAC[IN]);
388 (UNDISCH_TAC `(f:(real^3)list->real^3->bool) x' x`);
390 (REWRITE_WITH `(rogers V x' INTER S1) x <=> x IN rogers V x'/\ x IN S1`);
391 (REWRITE_TAC[IN; GSYM IN_INTER]);
395 (NEW_GOAL `!s1. s1 IN SPP ==> measurable (s1:(real^3->bool))`);
396 (EXPAND_TAC "SPP" THEN EXPAND_TAC "f" THEN REWRITE_TAC[IMAGE;IN;
399 (ONCE_ASM_REWRITE_TAC[]);
400 (MATCH_MP_TAC MEASURABLE_INTER);
402 (MATCH_MP_TAC MEASURABLE_ROGERS);
404 (UNDISCH_TAC `(SP:(real^3)list->bool) x`);
405 (EXPAND_TAC "SP" THEN REWRITE_TAC[IN_ELIM_THM] THEN STRIP_TAC);
409 (NEW_GOAL `?S2:real^3->bool. S2 IN SPP /\ ~(negligible S2)`);
410 (ONCE_REWRITE_TAC[MESON[] `S <=> ~S ==> F`]);
412 (NEW_GOAL `!S2:real^3->bool. S2 IN SPP ==> negligible S2`);
413 (UP_ASM_TAC THEN MESON_TAC[]);
414 (NEW_GOAL `negligible (UNIONS (SPP:(real^3->bool)->bool))`);
415 (MATCH_MP_TAC NEGLIGIBLE_UNIONS);
417 (UP_ASM_TAC THEN REWRITE_TAC[GSYM (ASSUME `S1:real^3->bool = UNIONS SPP`)]);
418 (REWRITE_WITH `~NULLSET S1 <=> &0 < measure (S1:real^3->bool)`);
419 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
420 (MATCH_MP_TAC MEASURABLE_MEASURE_POS_LT);
424 (FIRST_X_ASSUM CHOOSE_TAC);
425 (UP_ASM_TAC THEN EXPAND_TAC "SPP" THEN EXPAND_TAC "f" THEN
426 REWRITE_TAC[IMAGE;IN;IN_ELIM_THM]);
427 (EXPAND_TAC "SP" THEN REWRITE_TAC[IN;IN_ELIM_THM;
428 SET_RULE `~(s = {}) <=> (?x. x IN s)`]);
430 (EXISTS_TAC `x:(real^3)list`);
431 (EXISTS_TAC `S2:real^3->bool`);
435 (ONCE_ASM_REWRITE_TAC[]);
436 (MATCH_MP_TAC MEASURABLE_INTER);
438 (MATCH_MP_TAC MEASURABLE_ROGERS);
441 (REWRITE_WITH `&0 < measure (S2:real^3->bool) <=> ~NULLSET S2`);
442 (MATCH_MP_TAC MEASURABLE_MEASURE_POS_LT);
443 (ONCE_ASM_REWRITE_TAC[]);
444 (MATCH_MP_TAC MEASURABLE_INTER);
446 (MATCH_MP_TAC MEASURABLE_ROGERS);
451 (UP_ASM_TAC THEN STRIP_TAC);
453 (* ======================================================================== *)
454 (* ----------------------------- *)
458 `?S3. S3 SUBSET S2 /\
461 (!kl. barV V 3 kl /\ ~(rogers V kl = rogers V wl) ==> S3 INTER rogers V kl = {})`);
463 `SP = {kl| kl IN barV V 3 /\ ~(rogers V kl INTER S2 = {})}`);
464 (NEW_GOAL `FINITE (SP:((real^3)list->bool))`);
465 (ABBREV_TAC `H = {u:real^3| u IN V /\ dist (u,HD wl) <= &12}`);
468 u0 IN H /\ u1 IN H /\ u2 IN H /\ u3 IN H /\ kl = [u0;u1;u2;u3:real^3]}`);
469 (EXPAND_TAC "SP" THEN REWRITE_TAC[SUBSET;IN;IN_ELIM_THM]);
471 (NEW_GOAL `?u0 u1 u2 u3. x = [u0:real^3;u1;u2;u3]`);
472 (MP_TAC (ASSUME `barV V 3 x`));
473 (REWRITE_TAC[BARV_3_EXPLICIT]);
474 (FIRST_X_ASSUM CHOOSE_TAC);
475 (FIRST_X_ASSUM CHOOSE_TAC);
476 (FIRST_X_ASSUM CHOOSE_TAC);
477 (FIRST_X_ASSUM CHOOSE_TAC);
478 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3`);
479 (EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3`);
481 (NEW_GOAL `set_of_list x SUBSET (V:real^3 ->bool)`);
482 (MATCH_MP_TAC Packing3.BARV_SUBSET);
483 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
484 (UP_ASM_TAC THEN ASM_REWRITE_TAC[set_of_list]);
486 (NEW_GOAL `!u. u IN {u0,u1,u2,u3} ==> dist (u, u0:real^3) <= &4`);
488 (NEW_GOAL `aff_dim (voronoi_list V (x:(real^3)list)) + &(LENGTH x) = &4`);
489 (UNDISCH_TAC `barV V 3 x` THEN REWRITE_TAC[BARV;VORONOI_NONDG]);
491 (MATCH_MP_TAC (MESON[] `
492 LENGTH x < 5 /\ set_of_list x SUBSET (V:real^3->bool) /\ A ==> A`));
493 (FIRST_ASSUM MATCH_MP_TAC);
494 (REWRITE_TAC[Packing3.INITIAL_SUBLIST_REFL]);
497 (NEW_GOAL `LENGTH (x:(real^3)list) = 4`);
498 (MATCH_MP_TAC (MESON[] `A /\ CARD (set_of_list (x:(real^3)list)) = 3 + 1 ==> A`));
499 (REWRITE_TAC[ARITH_RULE `4 = 3 + 1`]);
500 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
501 (EXISTS_TAC `V:real^3->bool`);
503 (SWITCH_TAC THEN UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
504 (REWRITE_TAC[ARITH_RULE `(a:int) + &4 = &4 <=> a = &0`; AFF_DIM_EQ_0]);
507 (NEW_GOAL `!p. p IN {u0, u1, u2, u3:real^3} ==> dist (a', p) <= &2`);
509 (NEW_GOAL `a' IN voronoi_closed V (p:real^3)`);
510 (SWITCH_TAC THEN UP_ASM_TAC THEN REWRITE_TAC[VORONOI_LIST;VORONOI_SET; set_of_list; INTERS]);
511 (MATCH_MP_TAC (SET_RULE `(s IN A ==> B) ==> (A = {s} ==> B)`));
512 (REWRITE_TAC[IN;IN_ELIM_THM]);
514 (FIRST_ASSUM MATCH_MP_TAC);
515 (EXISTS_TAC `p:real^3`);
518 (REWRITE_TAC[ETA_AX]);
519 (UP_ASM_TAC THEN REWRITE_TAC[voronoi_closed;IN;IN_ELIM_THM] THEN DISCH_TAC);
520 (NEW_GOAL `?y. y IN V /\ dist (a',y:real^3) < &2`);
521 (ASM_MESON_TAC[saturated]);
522 (FIRST_X_ASSUM CHOOSE_TAC);
523 (MATCH_MP_TAC (REAL_ARITH `m <= dist (a', y:real^3) /\
524 dist (a', y:real^3) < b ==> m <= b`));
526 (FIRST_ASSUM MATCH_MP_TAC);
528 (NEW_GOAL `dist (u, u0) <= dist (a', u) + dist (a', u0:real^3)`);
530 (NEW_GOAL `dist (a', u) <= &2 /\ dist (a', u0:real^3) <= &2`);
532 (FIRST_ASSUM MATCH_MP_TAC);
534 (ASM_REAL_ARITH_TAC);
535 (NEW_GOAL `u0 IN {u0, u1, u2, u3:real^3} /\ u1 IN {u0, u1, u2, u3} /\
536 u2 IN {u0, u1, u2, u3} /\ u3 IN {u0, u1, u2, u3}`);
539 (REWRITE_TAC[IN_ELIM_THM]);
540 (REWRITE_WITH `(u0:real^3) IN V /\ u1 IN V /\ u2 IN V /\ u3 IN V`);
542 (NEW_GOAL `!u. u IN {u0,u1,u2,u3} ==> dist (u:real^3, HD wl) <= &12`);
543 (UNDISCH_TAC `~(rogers V x INTER S2 = {})`);
544 (REWRITE_TAC[SET_RULE `~(s = {}) <=> (?p. p IN s)`]);
546 (NEW_GOAL `dist (u,HD wl) <= dist (u,u0:real^3) + dist (u0, p) + dist (p, HD wl)`);
548 (NEW_GOAL `dist (u,u0:real^3) <= &4 /\ dist (u0,p) <= &4 /\ dist (p,HD wl) <= &4`);
551 (SUBGOAL_THEN `p IN rogers V x` ASSUME_TAC);
553 (NEW_GOAL `p IN voronoi_closed V (u0:real^3)`);
554 (REWRITE_WITH `p IN voronoi_closed V u0 <=>
555 (?vl. vl IN barV V 3 /\
557 truncate_simplex 0 vl = [u0])`);
558 (MATCH_MP_TAC Rogers.GLTVHUM);
561 (EXISTS_TAC `x:(real^3)list`);
562 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_0]);
564 (UP_ASM_TAC THEN REWRITE_TAC[voronoi_closed; IN;IN_ELIM_THM] THEN DISCH_TAC);
566 (NEW_GOAL `?y. y IN V /\ dist (p,y:real^3) < &2`);
567 (ASM_MESON_TAC[saturated]);
568 (FIRST_X_ASSUM CHOOSE_TAC);
570 (MATCH_MP_TAC (REAL_ARITH `m <= dist (p, y:real^3) /\
571 dist (p, y:real^3) < &2 ==> m <= &4`));
573 (REWRITE_WITH `dist (u0,p) = dist (p,u0:real^3)`);
574 (MESON_TAC[DIST_SYM]);
575 (FIRST_ASSUM MATCH_MP_TAC);
578 (SUBGOAL_THEN `p IN rogers V wl` ASSUME_TAC);
580 (NEW_GOAL `?w0 w1 w2 w3. wl = [w0:real^3;w1;w2;w3]`);
581 (MP_TAC (ASSUME `barV V 3 wl`));
582 (REWRITE_TAC[BARV_3_EXPLICIT]);
583 (FIRST_X_ASSUM CHOOSE_TAC);
584 (FIRST_X_ASSUM CHOOSE_TAC);
585 (FIRST_X_ASSUM CHOOSE_TAC);
586 (FIRST_X_ASSUM CHOOSE_TAC);
587 (ASM_REWRITE_TAC[HD]);
589 (NEW_GOAL `p IN voronoi_closed V (w0:real^3)`);
590 (REWRITE_WITH `p IN voronoi_closed V w0 <=>
591 (?vl. vl IN barV V 3 /\
593 truncate_simplex 0 vl = [w0])`);
594 (MATCH_MP_TAC Rogers.GLTVHUM);
596 (NEW_GOAL `set_of_list wl SUBSET (V:real^3->bool)`);
597 (MATCH_MP_TAC Packing3.BARV_SUBSET);
598 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
599 (UP_ASM_TAC THEN ASM_REWRITE_TAC[set_of_list] THEN SET_TAC[]);
600 (EXISTS_TAC `wl:(real^3)list`);
601 (ASM_MESON_TAC[IN;TRUNCATE_SIMPLEX_EXPLICIT_0]);
602 (UP_ASM_TAC THEN REWRITE_TAC[voronoi_closed; IN;IN_ELIM_THM] THEN DISCH_TAC);
604 (NEW_GOAL `?y. y IN V /\ dist (p,y:real^3) < &2`);
605 (ASM_MESON_TAC[saturated]);
606 (FIRST_X_ASSUM CHOOSE_TAC);
608 (MATCH_MP_TAC (REAL_ARITH `m <= dist (p, y:real^3) /\
609 dist (p, y:real^3) < &2 ==> m <= &4`));
611 (FIRST_ASSUM MATCH_MP_TAC);
613 (ASM_REAL_ARITH_TAC);
617 (MATCH_MP_TAC FINITE_SUBSET);
618 (EXISTS_TAC `{kl | ?u0 u1 u2 u3:real^3.
619 u0 IN H /\ u1 IN H /\ u2 IN H /\ u3 IN H /\
620 kl = [u0; u1; u2; u3]}`);
622 (MATCH_MP_TAC FINITE_SET_LIST_LEMMA);
624 (MATCH_MP_TAC FINITE_SUBSET);
625 (EXISTS_TAC `V INTER ball ((HD wl):real^3, &15)`);
626 (ASM_SIMP_TAC[KIUMVTC; REAL_ARITH `&0 <= &15`]);
627 (EXPAND_TAC "H" THEN REWRITE_TAC[SUBSET; ball; IN_INTER; IN;IN_ELIM_THM]);
630 (ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REAL_ARITH_TAC);
632 (* ======================================================================== *)
635 (ABBREV_TAC `f = (\kl:(real^3)list. rogers V kl INTER rogers V wl)`);
636 (ABBREV_TAC `SPP = IMAGE (f:((real^3)list->real^3->bool))
637 ((SP:(real^3)list->bool) DIFF {zl| rogers V zl = rogers V wl})`);
639 (NEW_GOAL `FINITE (SPP:(real^3->bool)->bool)`);
640 (EXPAND_TAC "SPP" THEN MATCH_MP_TAC FINITE_IMAGE THEN ASM_REWRITE_TAC[]);
641 (MATCH_MP_TAC FINITE_SUBSET);
642 (EXISTS_TAC `SP:(real^3)list->bool`);
646 (EXISTS_TAC `(S2:real^3->bool) DIFF (rogers V wl INTER UNIONS SPP)`);
647 (REWRITE_TAC[SET_RULE `A DIFF B SUBSET A`]);
649 (MATCH_MP_TAC MEASURABLE_DIFF);
650 (ASM_REWRITE_TAC[MEASURABLE_INTER]);
651 (MATCH_MP_TAC MEASURABLE_INTER);
653 (MATCH_MP_TAC MEASURABLE_ROGERS);
655 (MATCH_MP_TAC MEASURABLE_UNIONS);
659 (REWRITE_TAC[BETA_THM; IMAGE;IN;IN_ELIM_THM]);
662 (MATCH_MP_TAC MEASURABLE_INTER);
663 (ASM_SIMP_TAC [MEASURABLE_ROGERS]);
664 (MATCH_MP_TAC MEASURABLE_ROGERS);
666 (UNDISCH_TAC `(SP DIFF {zl | rogers V zl = rogers V wl}) x`);
667 (REWRITE_WITH `(SP DIFF {zl | rogers V zl = rogers V wl}) x <=>
668 x IN (SP DIFF {zl | rogers V zl = rogers V wl})`);
670 (REWRITE_TAC[IN_DIFF]);
671 (EXPAND_TAC "SP" THEN REWRITE_TAC[IN_ELIM_THM]);
673 (REWRITE_WITH `measure (S2 DIFF rogers V wl INTER UNIONS SPP) = measure S2`);
674 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_SYMDIFF);
675 (REWRITE_TAC[SET_RULE `(A DIFF B) DIFF A UNION A DIFF (A DIFF B) = A INTER B`]);
676 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
677 (EXISTS_TAC `rogers V wl INTER UNIONS SPP`);
678 (REWRITE_TAC[SET_RULE `A INTER B SUBSET B`]);
679 (REWRITE_TAC[INTER_UNIONS]);
680 (MATCH_MP_TAC NEGLIGIBLE_UNIONS);
682 (REWRITE_WITH `{rogers V wl INTER x | x IN SPP} = IMAGE (\x. rogers V wl INTER x) SPP`);
683 (REWRITE_TAC[IMAGE; SET_EQ_LEMMA; IN;IN_ELIM_THM]);
684 (MATCH_MP_TAC FINITE_IMAGE);
686 (EXPAND_TAC "SPP" THEN EXPAND_TAC "SP" THEN EXPAND_TAC "f");
687 (REWRITE_TAC[IMAGE;IN;IN_ELIM_THM]);
689 (ASM_REWRITE_TAC[SET_RULE `a INTER b INTER a = a INTER b`]);
690 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
691 (MATCH_MP_TAC DUUNHOR);
692 (UNDISCH_TAC `({kl | barV V 3 kl /\ ~(rogers V kl INTER S2 = {})} DIFF
693 {zl | rogers V zl = rogers V wl}) x'`);
695 `({kl | barV V 3 kl /\ ~(rogers V kl INTER S2 = {})} DIFF
696 {zl | rogers V zl = rogers V wl}) x' <=>
697 x' IN ({kl | barV V 3 kl /\ ~(rogers V kl INTER S2 = {})} DIFF
698 {zl | rogers V zl = rogers V wl})`);
700 (REWRITE_TAC[IN_DIFF]);
701 (REWRITE_TAC[IN; IN_ELIM_THM]);
702 (DISCH_TAC THEN ASM_REWRITE_TAC[]);
705 (EXPAND_TAC "SPP" THEN EXPAND_TAC "SP" THEN EXPAND_TAC "f");
706 (REWRITE_TAC[IMAGE;IN;IN_ELIM_THM]);
707 (REWRITE_TAC[MESON[IN; IN_DIFF] `(S DIFF P) x <=> x IN S /\ ~(x IN P)`]);
708 (REWRITE_TAC[IN;IN_ELIM_THM]);
709 (MATCH_MP_TAC (SET_RULE `(!p. p IN S ==> ~(p IN P)) ==> (S INTER P = {})`));
710 (REWRITE_TAC[IN_DIFF; IN_INTER;IN_UNIONS; MESON[] `~(A /\ B) <=> ~A \/ ~ B`]);
713 (NEW_GOAL `p IN rogers V wl`);
717 {y | ?x. ((barV V 3 x /\ ~(rogers V x INTER S2 = {})) /\
718 ~(rogers V x = rogers V wl)) /\
719 y = rogers V x INTER rogers V wl} /\
721 (EXISTS_TAC `rogers V kl INTER rogers V wl`);
722 (ASM_REWRITE_TAC[IN_INTER]);
724 (REWRITE_TAC[IN;IN_ELIM_THM]);
725 (EXISTS_TAC `kl:(real^3)list`);
727 (REWRITE_TAC[SET_RULE `~(A INTER B = {}) <=> (?z. z IN A /\ z IN B)`]);
728 (EXISTS_TAC `p:real^3`);
732 (UP_ASM_TAC THEN STRIP_TAC);
734 (* ========================================================================= *)
737 (NEW_GOAL `?k:num S4. k <= 4 /\
738 S4 SUBSET S3 /\ measurable S4 /\ &0 < measure S4 /\
739 S4 SUBSET (mcell k V wl)`);
742 `SP = {k:num| ~(mcell k V wl INTER S3 = {}) /\ k <= 4}`);
743 (NEW_GOAL `FINITE (SP:(num ->bool))`);
744 (MATCH_MP_TAC FINITE_SUBSET);
745 (EXISTS_TAC `{k | k <= 4}`);
747 (SET_TAC[FINITE_NUMSEG_LE]);
749 (ABBREV_TAC `f = (\k:num. mcell k V wl INTER S3)`);
750 (ABBREV_TAC `SPP = IMAGE (f:(num->real^3->bool))
752 (NEW_GOAL `FINITE (SPP:(real^3->bool)->bool)`);
753 (EXPAND_TAC "SPP" THEN MATCH_MP_TAC FINITE_IMAGE THEN ASM_REWRITE_TAC[]);
755 (NEW_GOAL `(S3:real^3->bool) = (UNIONS SPP)`);
756 (EXPAND_TAC "SPP" THEN REWRITE_TAC[SET_EQ_LEMMA; UNIONS_IMAGE;IN;IN_ELIM_THM]
757 THEN REPEAT STRIP_TAC);
760 (NEW_GOAL `?j. j <= 4 /\ x IN mcell j V wl`);
761 (MATCH_MP_TAC SLTSTLO1);
763 (MATCH_MP_TAC (SET_RULE `(x:real^3) IN S3 /\ S3 SUBSET B ==> x IN B`));
765 (UP_ASM_TAC THEN SIMP_TAC[IN]);
767 (UP_ASM_TAC THEN STRIP_TAC);
768 (EXISTS_TAC `j':num`);
771 (REWRITE_TAC[IN_ELIM_THM]);
772 (ASM_REWRITE_TAC[INTER]);
774 (ONCE_REWRITE_TAC[GSYM IN]);
776 (UP_ASM_TAC THEN EXPAND_TAC "f");
778 [MESON[IN] `(mcell x' V wl INTER S3) x <=> x IN (mcell x' V wl INTER S3)`]);
779 (REWRITE_TAC[IN_INTER; IN]);
782 (NEW_GOAL `!s1. s1 IN SPP ==> measurable (s1:(real^3->bool))`);
783 (EXPAND_TAC "SPP" THEN EXPAND_TAC "f" THEN REWRITE_TAC[IMAGE;IN;
786 (ONCE_ASM_REWRITE_TAC[]);
787 (MATCH_MP_TAC MEASURABLE_INTER);
789 (MATCH_MP_TAC MEASURABLE_MCELL);
793 (NEW_GOAL `?k. k <= 4 /\ ~negligible (mcell k V wl INTER S3)`);
794 (REWRITE_WITH `(?k. k <= 4 /\ ~negligible (mcell k V wl INTER S3)) <=>
795 ~(!k. (k <= 4) ==> negligible (mcell k V wl INTER S3))`);
798 (NEW_GOAL `negligible (UNIONS (SPP:(real^3->bool)->bool))`);
799 (MATCH_MP_TAC NEGLIGIBLE_UNIONS);
801 (EXPAND_TAC "SPP" THEN EXPAND_TAC "f");
802 (REWRITE_TAC[IMAGE]);
803 (REWRITE_TAC[IN; IN_ELIM_THM]);
805 (ONCE_ASM_REWRITE_TAC[]);
806 (FIRST_ASSUM MATCH_MP_TAC);
807 (UNDISCH_TAC `(SP:num->bool) x`);
808 (EXPAND_TAC "SP" THEN REWRITE_TAC[IN_ELIM_THM]);
811 (UP_ASM_TAC THEN REWRITE_TAC[GSYM
812 (ASSUME `S3 = UNIONS (SPP:(real^3->bool)->bool)`)]);
813 (REWRITE_WITH `~NULLSET S3 <=> &0 < measure (S3:real^3->bool)`);
814 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
815 (MATCH_MP_TAC MEASURABLE_MEASURE_POS_LT);
818 (UP_ASM_TAC THEN STRIP_TAC THEN EXISTS_TAC `k:num`
819 THEN EXISTS_TAC `mcell k V wl INTER S3`);
824 (MATCH_MP_TAC MEASURABLE_INTER);
826 (MATCH_MP_TAC MEASURABLE_MCELL);
828 (REWRITE_WITH `&0 < measure (mcell k V wl INTER S3) <=>
829 ~negligible (mcell k V wl INTER S3)`);
830 (MATCH_MP_TAC MEASURABLE_MEASURE_POS_LT);
831 (MATCH_MP_TAC MEASURABLE_INTER);
833 (MATCH_MP_TAC MEASURABLE_MCELL);
837 (UP_ASM_TAC THEN STRIP_TAC);
839 (* -------------------------------------------------------------------------- *)
842 (NEW_GOAL `?S5. S5 SUBSET S4 /\ measurable S5 /\ &0 < measure S5 /\
843 (!h. ~(h = k) /\ h <= 4 ==> (S5 INTER mcell h V wl = {}))`);
844 (NEW_GOAL `?Z. !p. saturated V /\ packing V /\ barV V 3 wl
846 (p IN rogers V wl DIFF Z
847 ==> (?!i. i <= 4 /\ p IN mcell i V wl))`);
848 (ASM_REWRITE_TAC[SLTSTLO2]);
849 (UP_ASM_TAC THEN STRIP_TAC);
850 (NEW_GOAL `NULLSET Z /\ !p. (p IN rogers V wl DIFF Z
851 ==> (?!i. i <= 4 /\ p IN mcell i V wl))`);
852 (NEW_GOAL `!p. NULLSET Z /\ (p IN rogers V wl DIFF Z
853 ==> (?!i. i <= 4 /\ p IN mcell i V wl))`);
854 (GEN_TAC THEN FIRST_ASSUM MATCH_MP_TAC);
856 (UP_ASM_TAC THEN MESON_TAC[]);
857 (UP_ASM_TAC THEN REWRITE_TAC[EXISTS_UNIQUE] THEN STRIP_TAC);
859 (EXISTS_TAC `S4 DIFF (Z:real^3->bool)`);
862 (MATCH_MP_TAC MEASURABLE_DIFF);
864 (ASM_MESON_TAC[MEASURABLE_RULES]);
865 (REWRITE_WITH `measure (S4 DIFF Z) = measure (S4:real^3->bool)`);
866 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_SYMDIFF);
867 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
868 (EXISTS_TAC `Z:real^3->bool`);
872 (REWRITE_TAC[SET_RULE `A = {} <=> (!x. x IN A ==> F)`]);
873 (GEN_TAC THEN STRIP_TAC);
874 (NEW_GOAL `x IN mcell k V wl`);
875 (MATCH_MP_TAC (SET_RULE `x IN (S4 DIFF Z) INTER mcell h V wl /\
876 (S4 DIFF Z) INTER mcell h V wl SUBSET A ==> x IN A`));
880 (NEW_GOAL `x IN rogers V wl DIFF Z`);
882 (NEW_GOAL `(?i. (i <= 4 /\ x IN mcell i V wl) /\
883 (!y. y <= 4 /\ x IN mcell y V wl ==> y = i))`);
884 (FIRST_ASSUM MATCH_MP_TAC);
886 (UP_ASM_TAC THEN STRIP_TAC);
888 (NEW_GOAL `k = i':num`);
889 (FIRST_ASSUM MATCH_MP_TAC);
891 (NEW_GOAL `h = i':num`);
892 (FIRST_ASSUM MATCH_MP_TAC);
896 (UP_ASM_TAC THEN STRIP_TAC);
898 (* -------------------------------------------------------------------------- *)
900 (NEW_GOAL `mcell i V ul SUBSET
901 UNIONS {rogers V (left_action_list p ul) | p permutes 0..i - 1}`);
902 (MATCH_MP_TAC QZKSYKG2);
905 (NEW_GOAL `~(S5 = {}:real^3->bool)`);
907 (NEW_GOAL `negligible (S5:real^3->bool)`);
908 (ASM_REWRITE_TAC[NEGLIGIBLE_EMPTY]);
909 (NEW_GOAL `vol (S5) = &0`);
910 (ASM_SIMP_TAC[volume_props]);
911 (ASM_REAL_ARITH_TAC);
912 (UP_ASM_TAC THEN REWRITE_TAC[SET_RULE `~(S = {}) <=> (?x. x IN S)`]);
915 (NEW_GOAL `S5 SUBSET mcell i V ul /\ S5 SUBSET mcell j V vl`);
918 UNIONS {rogers V (left_action_list p ul) | p permutes 0..i - 1}`);
919 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
920 (NEW_GOAL `x IN UNIONS {rogers V (left_action_list p ul) | p permutes 0..i - 1}`);
921 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
922 (UP_ASM_TAC THEN REWRITE_TAC[IN_UNIONS; IN; IN_ELIM_THM] THEN STRIP_TAC);
923 (ABBREV_TAC `kl:(real^3)list = left_action_list p ul`);
924 (NEW_GOAL `barV V 3 kl`);
925 (MATCH_MP_TAC QZKSYKG1);
926 (EXISTS_TAC `ul:(real^3)list`);
927 (EXISTS_TAC `i:num` THEN EXISTS_TAC `p:num->num`);
929 (NEW_GOAL `x IN mcell i V ul`);
931 (UP_ASM_TAC THEN SET_TAC[]);
933 (NEW_GOAL `rogers V kl = rogers V wl`);
934 (ASM_CASES_TAC `rogers V kl = rogers V wl`);
937 (NEW_GOAL `S3 INTER rogers V kl = {}`);
939 (UP_ASM_TAC THEN ASM_SET_TAC[]);
942 (NEW_GOAL `mcell i V kl = mcell i V ul`);
944 (MATCH_MP_TAC RVFXZBU);
947 (NEW_GOAL `mcell i V kl = mcell i V wl`);
948 (MATCH_MP_TAC DDZUPHJ);
951 (MATCH_MP_TAC VOL_POS_LT_AFF_DIM_3);
952 (ASM_SIMP_TAC[MEASURABLE_ROGERS]);
953 (NEW_GOAL `vol S5 <= vol (rogers V wl)`);
954 (MATCH_MP_TAC MEASURE_SUBSET);
955 (ASM_SIMP_TAC[MEASURABLE_ROGERS]);
957 (ASM_REAL_ARITH_TAC);
960 (NEW_GOAL `mcell j V vl SUBSET
961 UNIONS {rogers V (left_action_list q vl) | q permutes 0..j - 1}`);
962 (MATCH_MP_TAC QZKSYKG2);
965 (NEW_GOAL `~(S5 = {}:real^3->bool)`);
967 (NEW_GOAL `negligible (S5:real^3->bool)`);
968 (ASM_REWRITE_TAC[NEGLIGIBLE_EMPTY]);
969 (NEW_GOAL `vol (S5) = &0`);
970 (ASM_SIMP_TAC[volume_props]);
971 (ASM_REAL_ARITH_TAC);
972 (UP_ASM_TAC THEN REWRITE_TAC[SET_RULE `~(S = {}) <=> (?x. x IN S)`]);
976 UNIONS {rogers V (left_action_list q vl) | q permutes 0..j - 1}`);
977 (SET_TAC[ASSUME `S5 SUBSET mcell i V ul /\ S5 SUBSET mcell j V vl`; ASSUME
979 UNIONS {rogers V (left_action_list q vl) | q permutes 0..j - 1}`]);
980 (NEW_GOAL `x' IN UNIONS {rogers V (left_action_list q vl) | q permutes 0..j - 1}`);
981 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
983 (UP_ASM_TAC THEN REWRITE_TAC[IN_UNIONS; IN; IN_ELIM_THM] THEN STRIP_TAC);
984 (ABBREV_TAC `sl:(real^3)list = left_action_list q vl`);
985 (NEW_GOAL `barV V 3 sl`);
986 (MATCH_MP_TAC QZKSYKG1);
987 (EXISTS_TAC `vl:(real^3)list`);
988 (EXISTS_TAC `j:num` THEN EXISTS_TAC `q:num->num`);
992 (NEW_GOAL `rogers V sl = rogers V wl`);
993 (ASM_CASES_TAC `rogers V sl = rogers V wl`);
996 (NEW_GOAL `S3 INTER rogers V sl = {}`);
1001 (NEW_GOAL `mcell j V sl = mcell j V vl`);
1003 (MATCH_MP_TAC RVFXZBU);
1004 (ASM_REWRITE_TAC[]);
1006 (NEW_GOAL `mcell j V sl = mcell j V wl`);
1007 (MATCH_MP_TAC DDZUPHJ);
1008 (ASM_REWRITE_TAC[]);
1011 (MATCH_MP_TAC VOL_POS_LT_AFF_DIM_3);
1012 (ASM_SIMP_TAC[MEASURABLE_ROGERS]);
1013 (NEW_GOAL `vol S5 <= vol (rogers V wl)`);
1014 (MATCH_MP_TAC MEASURE_SUBSET);
1015 (ASM_SIMP_TAC[MEASURABLE_ROGERS]);
1017 (ASM_REAL_ARITH_TAC);
1020 (NEW_GOAL `S5 SUBSET (mcell i V ul INTER mcell j V vl)`);
1021 (ASM_REWRITE_TAC[]);
1023 (UP_ASM_TAC THEN REWRITE_WITH
1024 `mcell i V ul = mcell i V wl /\ mcell j V vl = mcell j V wl`);
1028 (NEW_GOAL `i = k:num`);
1029 (ASM_CASES_TAC `i = k:num`);
1030 (ASM_REWRITE_TAC[]);
1031 (NEW_GOAL `S5 INTER mcell i V wl = {}`);
1032 (FIRST_ASSUM MATCH_MP_TAC);
1033 (ASM_REWRITE_TAC[UP_TO_4_KY_LEMMA]);
1035 (UP_ASM_TAC THEN ASM_SET_TAC[]);
1038 (NEW_GOAL `j = k:num`);
1039 (ASM_CASES_TAC `j = k:num`);
1040 (ASM_REWRITE_TAC[]);
1041 (NEW_GOAL `S5 INTER mcell j V wl = {}`);
1042 (FIRST_ASSUM MATCH_MP_TAC);
1043 (ASM_REWRITE_TAC[UP_TO_4_KY_LEMMA]);
1045 (UP_ASM_TAC THEN ASM_SET_TAC[]);
1048 (ASM_REWRITE_TAC[])]);;