1 (* ========================================================================= *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
4 (* Authour : VU KHAC KY *)
5 (* Book lemma: URRPHBZ2 *)
6 (* Chaper : Packing (Marchal Cells) *)
7 (* Date : December 2011 *)
8 (* With special thanks to John Harrison for the lemma OPEN_RCONE_GT *)
9 (* ========================================================================= *)
10 (* FILES NEED TO BE LOADED *)
12 (* flyspeck_needs "packing/marchal_cells_2.hl";; *)
13 (* flyspeck_needs "packing/LEPJBDJ.hl" *)
15 (* ========================================================================= *)
17 module Urrphbz2 = struct
20 open Vukhacky_tactics;;
27 open Marchal_cells_2_new;;
30 let EVENTUALLY_RADIAL_RCONE_GE_ABC_A = prove_by_refinement (
31 `!a u0 u1:real^3. eventually_radial u0 (rcone_ge u0 u1 a)`,
32 [(STRIP_TAC THEN REWRITE_TAC[eventually_radial; radial]);
34 (REWRITE_TAC[SET_RULE `a INTER b SUBSET b`]);
35 (EXISTS_TAC `&1` THEN REWRITE_TAC[REAL_ARITH `&1 > &0`]);
37 (UNDISCH_TAC `u0 + u IN rcone_ge u0 u1 a INTER ball (u0:real^3,&1)`);
38 (REWRITE_TAC[rcone_ge; rconesgn; IN_INTER; ball; IN; IN_ELIM_THM; dist;
39 VECTOR_ARITH `(u + v) - u:real^3 = v /\ (u - (u + t % v)) = (--t % v)`;
40 NORM_MUL; REAL_ABS_NEG]);
41 (REWRITE_WITH `abs t = t`);
42 (ASM_SIMP_TAC[REAL_ARITH `t > &0 ==> &0 <= t`; REAL_ABS_REFL]);
43 (ASM_REWRITE_TAC[DOT_LMUL]);
45 (REWRITE_TAC[REAL_ARITH `t * a >= (t * b) * c <=> &0 <= (a - b * c) * t`]);
46 (MATCH_MP_TAC REAL_LE_MUL);
47 (ASM_REAL_ARITH_TAC)]);;
50 (* ========================================================================== *)
51 (* This lemma is in multivariate/flyspeck.hl *)
52 (* ========================================================================== *)
54 let OPEN_RCONE_GT = prove
55 (`!v0 v1:real^N a. open(rcone_gt v0 v1 a)`,
56 REWRITE_TAC[rcone_gt; rconesgn] THEN
57 GEOM_ORIGIN_TAC `v0:real^N` THEN REPEAT GEN_TAC THEN
58 REWRITE_TAC[VECTOR_SUB_RZERO; DIST_0] THEN
59 MP_TAC(ISPECL [`\x:real^N. lift(x dot v1 - norm x * norm v1 * a)`;
60 `{x:real^1 | x$1 > &0}`]
61 CONTINUOUS_OPEN_PREIMAGE_UNIV) THEN
62 REWRITE_TAC[OPEN_HALFSPACE_COMPONENT_GT] THEN REWRITE_TAC[GSYM drop] THEN
63 REWRITE_TAC[IN_ELIM_THM; real_gt; REAL_SUB_LT; LIFT_DROP] THEN
64 DISCH_THEN MATCH_MP_TAC THEN GEN_TAC THEN REWRITE_TAC[LIFT_SUB] THEN
65 ONCE_REWRITE_TAC[REAL_MUL_SYM] THEN REWRITE_TAC[LIFT_CMUL] THEN
66 MATCH_MP_TAC CONTINUOUS_SUB THEN ONCE_REWRITE_TAC[DOT_SYM] THEN
67 REWRITE_TAC[REWRITE_RULE[o_DEF] CONTINUOUS_AT_LIFT_DOT] THEN
68 MATCH_MP_TAC CONTINUOUS_CMUL THEN
69 REWRITE_TAC[REWRITE_RULE[o_DEF] CONTINUOUS_AT_LIFT_NORM]);;
71 let EVENTUALLY_RADIAL_RCONE_GE_ABC_B = prove_by_refinement (
72 `!a u0 u1:real^3. ~(u0 = u1) /\ (&0 < a) /\ (a < &1) ==>
73 eventually_radial u1 (rcone_ge u0 u1 a)`,
74 [(STRIP_TAC THEN REWRITE_TAC[eventually_radial; radial]);
76 (REWRITE_TAC[SET_RULE `a INTER b SUBSET b`]);
78 (NEW_GOAL `u1:real^3 IN rcone_gt u0 u1 a`);
79 (REWRITE_TAC[rcone_gt;rconesgn; IN; IN_ELIM_THM; GSYM NORM_POW_2; GSYM dist; REAL_POW_2; REAL_ARITH `x * x > x * x * a <=> &0 < (&1 - a) * x * x`]);
80 (MATCH_MP_TAC REAL_LT_MUL);
81 (ASM_SIMP_TAC[REAL_ARITH `&0 < a - b <=> b < a`]);
82 (MATCH_MP_TAC REAL_LT_MUL);
83 (ASM_SIMP_TAC[DIST_POS_LT]);
85 (NEW_GOAL `open (rcone_gt (u0:real^3) u1 a)`);
86 (ASM_SIMP_TAC[OPEN_RCONE_GT]);
87 (UP_ASM_TAC THEN REWRITE_TAC[open_def] THEN DISCH_TAC);
88 (NEW_GOAL `?e. &0 < e /\
89 (!x'. dist (x',u1:real^3) < e ==> x' IN rcone_gt u0 u1 a)`);
91 (FIRST_ASSUM MATCH_MP_TAC);
93 (UP_ASM_TAC THEN STRIP_TAC THEN EXISTS_TAC `e:real`);
96 (REWRITE_TAC[IN_INTER] THEN STRIP_TAC);
97 (MATCH_MP_TAC (SET_RULE `(?b. a IN b /\ b SUBSET c) ==> a IN c`));
98 (EXISTS_TAC `rcone_gt (u0:real^3) u1 a`);
101 (FIRST_ASSUM MATCH_MP_TAC);
102 (REWRITE_TAC[dist; VECTOR_ARITH `(a +b:real^3) - a = b`; NORM_MUL]);
103 (REWRITE_WITH `abs t = t`);
104 (ASM_SIMP_TAC[REAL_ABS_REFL; REAL_ARITH `t > &0 ==> &0 <= t`]);
106 (REWRITE_TAC[RCONE_GT_SUBSET_RCONE_GE]);
107 (REWRITE_TAC[ball; IN; IN_ELIM_THM; dist; VECTOR_ARITH `a - (a + t % b) = (-- t) % b`; NORM_MUL; REAL_ABS_NEG]);
108 (REWRITE_WITH `abs t = t`);
109 (ASM_SIMP_TAC[REAL_ABS_REFL; REAL_ARITH `t > &0 ==> &0 <= t`]);
110 (ASM_REWRITE_TAC[])]);;
112 (* ======================================================================= *)
114 let EVENTUALLY_RADIAL_AFF_GE = prove_by_refinement(
115 `!a b c d:real^3. DISJOINT {a,b} {c, d}
116 ==> eventually_radial a (aff_ge {a,b}{c,d})`,
117 [(STRIP_TAC THEN REWRITE_TAC[eventually_radial; radial]);
119 (REWRITE_TAC[SET_RULE `a INTER b SUBSET b`]);
120 (EXISTS_TAC `&1` THEN REWRITE_TAC[REAL_ARITH `&1 > &0`]);
121 (ASM_SIMP_TAC[AFF_GE_2_2]);
122 (REWRITE_TAC[IN_INTER; IN; IN_ELIM_THM] THEN REPEAT STRIP_TAC);
123 (EXISTS_TAC `&1 - t * t2 - t * t3 - t * t4`);
124 (EXISTS_TAC `t * t2` THEN EXISTS_TAC `t * t3` THEN EXISTS_TAC `t * t4`);
125 (ASM_SIMP_TAC[REAL_LE_MUL; REAL_ARITH `t > &0 ==> &0 <= t`]);
128 (REWRITE_WITH `u = t1 % a + t2 % b + t3 % c + t4 % d - a:real^3`);
129 (UNDISCH_TAC `a + u:real^3 = t1 % a + t2 % b + t3 % c + t4 % d` THEN VECTOR_ARITH_TAC);
131 `a + t % (t1 % a + t2 % b + t3 % c + t4 % d - a) =
132 (&1 - t * t2 - t * t3 - t * t4) % a +
133 (t * t2) % (b:real^3) + (t * t3) % c + (t * t4) % d
134 <=> (t * t1 + t * t2 + t * t3 + t * t4 - t) % a = vec 0`);
136 (ASM_REWRITE_TAC[REAL_ARITH `t * t1 + t * t2 + t * t3 + t * t4 - t = t * ((t1
137 + t2 + t3 + t4) - &1)`; REAL_SUB_REFL; REAL_MUL_RZERO; VECTOR_MUL_LZERO]);
138 (REWRITE_TAC[ball; IN_ELIM_THM; dist; VECTOR_ARITH `a - (a + t % s) =
139 (-- t) % s`; NORM_MUL; REAL_ABS_NEG]);
140 (REWRITE_WITH `abs t = t`);
141 (ASM_SIMP_TAC[REAL_ABS_REFL; REAL_ARITH `t > &0 ==> &0 <= t`]);
142 (ASM_REWRITE_TAC[])]);;
144 (* ======================================================================= *)
146 let FUN_AFFINE_KLEMMA = prove_by_refinement (
148 aff_dim {a,b,c} = &2 /\ ~(d IN affine hull {a,b,c})
149 ==> ~(a IN convex hull {b,c,d})`,
150 [(REWRITE_TAC[CONVEX_HULL_3;AFFINE_HULL_3; IN; IN_ELIM_THM]);
152 (ASM_CASES_TAC `~(w = &0)`);
153 (NEW_GOAL `?u v w. u + v + w = &1 /\ d = u % a + v % b + w % c:real^3`);
154 (EXISTS_TAC `&1 / w` THEN EXISTS_TAC `-- u / w` THEN EXISTS_TAC `-- v/ w`);
156 (REWRITE_TAC[REAL_ARITH `&1 / w + --u / w + --v / w = (&1 - u - v) / w`;
157 GSYM (ASSUME `u + v + w = &1`); REAL_ARITH `(u + v + w) - u - v = w`]);
158 (ASM_REWRITE_TAC[] THEN ASM_SIMP_TAC[REAL_DIV_REFL]);
159 (REWRITE_TAC[VECTOR_ARITH `&1 / w % a + --u / w % b + --v / w % c =
160 (&1 / w) % (a - u % b - v % c)`]);
161 (ASM_REWRITE_TAC[VECTOR_ARITH `(a + b + c) - a - b = c:real^3`; VECTOR_MUL_ASSOC]);
162 (REWRITE_WITH `&1 / w * w = &1`);
163 (ASM_REWRITE_TAC[GSYM Trigonometry2.NOT_0_INVERTABLE]);
166 (UP_ASM_TAC THEN REWRITE_TAC[]);
168 (SWITCH_TAC THEN UP_ASM_TAC THEN ASM_REWRITE_TAC[VECTOR_MUL_LZERO; VECTOR_ADD_RID]);
170 (UNDISCH_TAC `aff_dim {a, b, c:real^3} = &2`);
172 (ONCE_REWRITE_TAC[GSYM AFF_DIM_AFFINE_HULL]);
173 (REWRITE_WITH `affine hull {a,b,c} = affine hull {b,c:real^3}`);
174 (MATCH_MP_TAC AFFINE_HULLS_EQ);
176 (REWRITE_TAC[SUBSET;AFFINE_HULL_2;
177 SET_RULE `x IN {a,b,c} <=> (x = a \/x = b \/ x = c)`; IN; IN_ELIM_THM]);
179 (EXISTS_TAC `u:real` THEN EXISTS_TAC `v:real` THEN ASM_REWRITE_TAC[]);
180 (ASM_REAL_ARITH_TAC);
181 (EXISTS_TAC `&1` THEN EXISTS_TAC `&0` THEN ASM_REWRITE_TAC[]);
183 (ASM_REAL_ARITH_TAC);
185 (EXISTS_TAC `&0` THEN EXISTS_TAC `&1` THEN ASM_REWRITE_TAC[]);
187 (ASM_REAL_ARITH_TAC);
190 (REWRITE_TAC[SUBSET;AFFINE_HULL_3;
191 SET_RULE `x IN {b,c} <=> (x = b \/ x = c)`; IN; IN_ELIM_THM]);
193 (EXISTS_TAC `&0` THEN EXISTS_TAC `&1` THEN EXISTS_TAC `&0` THEN ASM_REWRITE_TAC[]);
198 (EXISTS_TAC `&0` THEN EXISTS_TAC `&0` THEN EXISTS_TAC `&1` THEN ASM_REWRITE_TAC[]);
202 (ONCE_REWRITE_TAC[AFF_DIM_AFFINE_HULL]);
203 (REWRITE_TAC[AFF_DIM_2]);
208 (* ========================================================================== *)
209 (* ========================================================================== *)
210 (* The main theorem *)
211 (* ========================================================================== *)
212 (* ========================================================================== *)
215 let URRPHBZ2 = prove_by_refinement (URRPHBZ2_concl,
217 (SUBGOAL_THEN `? u0 u1 u2 u3. (ul:(real^3)list) = [u0:real^3;u1;u2;u3]` CHOOSE_TAC);
218 (MP_TAC (ASSUME `barV V 3 ul`));
219 (REWRITE_TAC[BARV_3_EXPLICIT]);
220 (FIRST_X_ASSUM CHOOSE_TAC);
221 (FIRST_X_ASSUM CHOOSE_TAC);
222 (FIRST_X_ASSUM CHOOSE_TAC);
223 (ASM_CASES_TAC `~ (mcell k V ul) (v:real^3)`);
224 (MATCH_MP_TAC EVENTUALLY_RADIAL_NOT_IN_CLOSED_SET);
226 (ASM_MESON_TAC[CLOSED_MCELL]);
227 (UP_ASM_TAC THEN REWRITE_TAC[MESON[] `~ ~A <=> A`] THEN DISCH_TAC);
229 (* ====Case 1: k = 0 ====== *) (* FINISHED *)
231 (ASM_CASES_TAC `k = 0`);
232 (NEW_GOAL `v = u0:real^3`);
233 (REWRITE_WITH `u0:real^3 = HD ul`);
234 (ASM_REWRITE_TAC[HD]);
235 (MATCH_MP_TAC ROGERS_INTER_V_LEMMA);
236 (EXISTS_TAC `V:real^3->bool`);
238 (SWITCH_TAC THEN UP_ASM_TAC THEN ASM_REWRITE_TAC[MCELL_EXPLICIT;mcell0]);
239 (REWRITE_TAC[DIFF;IN_ELIM_THM]);
242 (MATCH_MP_TAC EVENTUALLY_RADIAL_NOT_IN_CLOSED_SET );
244 (REWRITE_TAC[MCELL_EXPLICIT; mcell0]);
245 (REWRITE_TAC[DIFF;IN_ELIM_THM; MESON[] `!X Y. ~(X /\ ~Y) <=> (~X \/ Y) `]);
247 (REWRITE_TAC[HD;ball;IN;IN_ELIM_THM;DIST_REFL]);
248 (MATCH_MP_TAC SQRT_POS_LT);
250 (MATCH_MP_TAC CLOSED_MCELL);
253 (* ====Case 2: k = 1 ====== *) (* Finished *)
255 (ASM_CASES_TAC `k = 1`);
256 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell1]);
258 (REWRITE_TAC[HD;TL;TRUNCATE_SIMPLEX_EXPLICIT_1;rcone_gt;rconesgn]);
260 ` rogers V [u0; u1; u2; u3:real^3] INTER cball (u0,sqrt (&2)) DIFF
261 {x | (x - u0) dot (u1 - u0) >
262 dist (x,u0) * dist (u1,u0) * hl [u0; u1] / sqrt (&2)} =
263 rogers V [u0; u1; u2; u3] INTER cball (u0,sqrt (&2)) INTER
264 {x | (x - u0) dot (u1 - u0) <=
265 dist (x,u0) * dist (u1,u0) * hl [u0; u1] / sqrt (&2)}`);
266 (REWRITE_TAC[Vol1.SET_EQ; IN_INTER; IN_DIFF; IN; IN_ELIM_THM]);
270 (ASM_REAL_ARITH_TAC);
273 (ASM_REAL_ARITH_TAC);
275 (NEW_GOAL `v = u0:real^3`);
276 (REWRITE_WITH `u0:real^3 = HD ul`);
277 (ASM_REWRITE_TAC[HD]);
278 (MATCH_MP_TAC ROGERS_INTER_V_LEMMA);
279 (EXISTS_TAC `V:real^3->bool`);
280 (ASM_REWRITE_TAC[IN]);
281 (NEW_GOAL `mcell 1 V ul (v:real^3)`);
283 (UP_ASM_TAC THEN REWRITE_TAC[MCELL_EXPLICIT; mcell1]);
286 (DISCH_TAC THEN NEW_GOAL `F`);
287 (UP_ASM_TAC THEN ASM_MESON_TAC[GSYM IN; NOT_IN_EMPTY]);
288 (UP_ASM_TAC THEN MESON_TAC[]);
290 (MATCH_MP_TAC EVENTUALLY_RADIAL_INTER);
292 (* e_radial rogers *)
293 (REWRITE_TAC[ROGERS; LENGTH; ARITH_RULE `SUC (SUC (SUC (SUC 0))) = 4`]);
294 (REWRITE_TAC [SET_OF_0_TO_3]);
295 (REWRITE_WITH `IMAGE (omega_list_n V [u0; u1; u2; u3:real^3]) {0, 1, 2, 3} =
296 {omega_list_n V [u0; u1; u2; u3] 0, omega_list_n V [u0; u1; u2; u3] 1,
297 omega_list_n V [u0; u1; u2; u3] 2, omega_list_n V [u0; u1; u2; u3] 3}`);
298 (REWRITE_TAC[IMAGE]);
300 (ABBREV_TAC `a = omega_list_n V [u0; u1; u2; u3:real^3] 0`);
301 (REWRITE_WITH `a = u0:real^3`);
302 (EXPAND_TAC "a" THEN REWRITE_TAC[OMEGA_LIST_N;HD]);
304 (ONCE_ASM_REWRITE_TAC[]);
305 (MATCH_MP_TAC EVENTUALLY_RADIAL_CONVEX_HULL_4_sub1);
306 (ABBREV_TAC `vl = [u0;u1;u2;u3:real^3]`);
308 (REWRITE_WITH `u0:real^3 = HD vl`);
309 (EXPAND_TAC "vl" THEN ASM_REWRITE_TAC[HD]);
310 (MATCH_MP_TAC U0_NOT_IN_CONVEX_HULL_FROM_ROGERS) ;
315 (MATCH_MP_TAC EVENTUALLY_RADIAL_INTER);
317 (ASM_REWRITE_TAC[eventually_radial]);
319 (REWRITE_TAC[radial; REAL_ARITH `&1 > &0`; INTER_SUBSET]);
321 (REWRITE_WITH `cball (u0:real^3,sqrt (&2)) INTER ball (u0,&1) = ball (u0, &1)`);
322 (MATCH_MP_TAC (SET_RULE `b SUBSET a ==> a INTER b = b`));
323 (REWRITE_TAC[SUBSET; ball; cball; IN; IN_ELIM_THM]);
325 (NEW_GOAL `&1 < sqrt (&2)`);
326 (REWRITE_TAC[ZERO_LT_SQRT_2]);
327 (ASM_REAL_ARITH_TAC);
328 (REWRITE_TAC[ball; IN; IN_ELIM_THM; dist; VECTOR_ARITH `a - (a + b:real^3) = --b`; NORM_NEG; NORM_MUL]);
329 (REWRITE_WITH `abs t = t`);
330 (REWRITE_TAC[REAL_ABS_REFL]);
331 (ASM_REAL_ARITH_TAC);
334 (* e_radial R^3 \ rcone_gt *)
336 (ASM_REWRITE_TAC[eventually_radial]);
338 (REWRITE_TAC[radial; REAL_ARITH `&1 > &0`; INTER_SUBSET; IN_INTER; IN; IN_ELIM_THM]);
341 (REWRITE_WITH `((u0 + t % u) - u0) dot (u1 - u0:real^3) =
342 t * (((u0 + u) - u0) dot (u1 - u0))`);
344 (REWRITE_WITH `dist (u0 + t % u,u0) = abs t * dist (u0 + u,u0:real^3)`);
345 (REWRITE_TAC[dist; VECTOR_ARITH `(a + (b:real^3)) - a = b`; NORM_MUL]);
346 (REWRITE_WITH `abs t = t`);
347 (REWRITE_TAC[REAL_ABS_REFL]);
348 (ASM_REAL_ARITH_TAC);
349 (REWRITE_TAC [REAL_ARITH `t * s <= (t * a) * b <=> &0 <= t * (a * b - s)`]);
350 (MATCH_MP_TAC REAL_LE_MUL);
351 (ASM_REAL_ARITH_TAC);
352 (REWRITE_TAC[ball;IN_ELIM_THM]);
353 (REWRITE_WITH `dist (u0,u0 + t % u) = abs t * norm (u:real^3)`);
354 (REWRITE_TAC[dist; VECTOR_ARITH `(a + (b:real^3)) - a = b /\
355 r:real^3 - (r + t) = -- t`; NORM_MUL; NORM_NEG]);
356 (REWRITE_WITH `abs t = t`);
357 (REWRITE_TAC[REAL_ABS_REFL]);
358 (ASM_REAL_ARITH_TAC);
360 (REWRITE_TAC[EVENTUALLY_RADIAL_EMPTY]);
362 (* ======================================================================= *)
363 (* ====Case 2: k >= 4 ====== *)
365 (ASM_CASES_TAC `k >= 4`);
366 (UNDISCH_TAC `mcell k V ul v`);
367 (REWRITE_WITH `mcell k V ul = mcell4 V ul`);
368 (MP_TAC MCELL_EXPLICIT THEN STRIP_TAC);
369 (NEW_GOAL `mcell 0 V ul = mcell0 V ul /\
370 mcell 1 V ul = mcell1 V ul /\
371 mcell 2 V ul = mcell2 V ul /\
372 mcell 3 V ul = mcell3 V ul /\
373 (k >= 4 ==> mcell k V ul = mcell4 V ul)`);
375 (UP_ASM_TAC THEN STRIP_TAC);
376 (FIRST_ASSUM MATCH_MP_TAC);
378 (REWRITE_TAC[mcell4]);
380 (ASM_REWRITE_TAC[set_of_list]);
382 (ABBREV_TAC `S = {u0, u1,u2, u3:real^3}`);
383 (ABBREV_TAC `s3 = omega_list V (ul:(real^3)list)`);
385 (NEW_GOAL `v IN {u0, u1 ,u2:real^3, u3}`);
386 (ASM_CASES_TAC `(v:real^3) IN S`);
388 (NEW_GOAL `!x:real^3. x IN convex hull S /\ ~(x IN S)
389 ==> (?y. y IN S /\ norm (x - s3) < norm (y - s3))`);
390 (MATCH_MP_TAC SIMPLEX_FURTHEST_LT_2);
392 (REWRITE_TAC[Geomdetail.FINITE6]);
393 (NEW_GOAL `?y:real^3. y IN S /\ norm (v - s3) < norm (y - s3)`);
394 (FIRST_ASSUM MATCH_MP_TAC);
395 (ASM_REWRITE_TAC[IN]);
396 (UP_ASM_TAC THEN EXPAND_TAC "S" THEN STRIP_TAC);
397 (NEW_GOAL `s3 IN (voronoi_closed V (y:real^3))`);
399 (MATCH_MP_TAC (SET_RULE `(?b. a IN b /\ b SUBSET c) ==> a IN c`));
400 (EXISTS_TAC `voronoi_list V (ul:(real^3)list)`);
402 (MATCH_MP_TAC Packing3.OMEGA_LIST_IN_VORONOI_LIST);
403 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
404 (ASM_REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list]);
405 (NEW_GOAL `y:real^3 IN S`);
408 (UP_ASM_TAC THEN REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
409 (ONCE_REWRITE_TAC[DIST_SYM]);
413 (NEW_GOAL `norm (y - s3) <= norm (v - s3:real^3)`);
414 (FIRST_ASSUM MATCH_MP_TAC);
415 (UNDISCH_TAC `v:real^3 IN V` THEN MESON_TAC[IN]);
416 (ASM_REAL_ARITH_TAC);
420 (ASM_CASES_TAC `v = u0:real^3`);
423 (MATCH_MP_TAC EVENTUALLY_RADIAL_CONVEX_HULL_4_sub1);
424 (NEW_GOAL `aff_dim {u0,u1,u2,u3:real^3} = &3`);
425 (REWRITE_WITH `{u0,u1,u2,u3:real^3} = set_of_list ul`);
426 (ASM_REWRITE_TAC[set_of_list]);
427 (MATCH_MP_TAC Rogers.MHFTTZN1);
428 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
430 (NEW_GOAL `aff_dim {u0,u1,u2,u3:real^3} <= &3 - &1`);
431 (REWRITE_WITH `{u0,u1,u2,u3:real^3} = u0 INSERT {u1,u2,u3:real^3}`);
433 (ONCE_REWRITE_TAC[AFF_DIM_INSERT]);
436 (NEW_GOAL `CARD {u1,u2,u3:real^3} <= 3`);
437 (REWRITE_TAC[Geomdetail.CARD3]);
438 (NEW_GOAL `aff_dim {u1, u2, u3} <= &(CARD{u1,u2,u3:real^3}) - &1`);
439 (MATCH_MP_TAC AFF_DIM_LE_CARD);
440 (REWRITE_TAC[Geomdetail.FINITE6]);
443 (NEW_GOAL `u0 IN affine hull {u1,u2,u3:real^3}`);
444 (UNDISCH_TAC `u0 IN convex hull {u1, u2, u3:real^3}`);
445 (MATCH_MP_TAC (SET_RULE `(b SUBSET c) ==> ((a IN b) ==> (a IN c))`));
446 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
452 (ASM_CASES_TAC `v = u1:real^3`);
455 (REWRITE_WITH `{u0, u1, u2, u3} = {u1, u0, u2, u3:real^3}`);
457 (MATCH_MP_TAC EVENTUALLY_RADIAL_CONVEX_HULL_4_sub1);
458 (NEW_GOAL `aff_dim {u1, u0, u2, u3:real^3} = &3`);
459 (REWRITE_WITH `{u1, u0, u2, u3:real^3} = set_of_list ul`);
460 (ASM_REWRITE_TAC[set_of_list]);
461 (EXPAND_TAC "S" THEN SET_TAC[]);
462 (MATCH_MP_TAC Rogers.MHFTTZN1);
463 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
465 (NEW_GOAL `aff_dim {u1, u0, u2, u3:real^3} <= &3 - &1`);
466 (REWRITE_WITH `{u1, u0, u2, u3:real^3} = u1 INSERT {u0,u2,u3:real^3}`);
468 (ONCE_REWRITE_TAC[AFF_DIM_INSERT]);
471 (NEW_GOAL `CARD {u0,u2,u3:real^3} <= 3`);
472 (REWRITE_TAC[Geomdetail.CARD3]);
473 (NEW_GOAL `aff_dim {u0, u2, u3} <= &(CARD{u0,u2,u3:real^3}) - &1`);
474 (MATCH_MP_TAC AFF_DIM_LE_CARD);
475 (REWRITE_TAC[Geomdetail.FINITE6]);
478 (NEW_GOAL `u1 IN affine hull {u0,u2,u3:real^3}`);
479 (UNDISCH_TAC `u1 IN convex hull {u0, u2, u3:real^3}`);
480 (MATCH_MP_TAC (SET_RULE `(b SUBSET c) ==> ((a IN b) ==> (a IN c))`));
481 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
487 (ASM_CASES_TAC `v = u2:real^3`);
490 (REWRITE_WITH `{u0, u1, u2, u3} = {u2, u0, u1, u3:real^3}`);
492 (MATCH_MP_TAC EVENTUALLY_RADIAL_CONVEX_HULL_4_sub1);
493 (NEW_GOAL `aff_dim {u2, u0, u1, u3:real^3} = &3`);
494 (REWRITE_WITH `{u2, u0, u1, u3:real^3} = set_of_list ul`);
495 (ASM_REWRITE_TAC[set_of_list]);
496 (EXPAND_TAC "S" THEN SET_TAC[]);
497 (MATCH_MP_TAC Rogers.MHFTTZN1);
498 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
500 (NEW_GOAL `aff_dim {u2, u0, u1, u3:real^3} <= &3 - &1`);
501 (REWRITE_WITH `{u2, u0, u1, u3:real^3} = u2 INSERT {u0,u1,u3:real^3}`);
503 (ONCE_REWRITE_TAC[AFF_DIM_INSERT]);
505 (NEW_GOAL `CARD {u0,u1,u3:real^3} <= 3`);
506 (REWRITE_TAC[Geomdetail.CARD3]);
507 (NEW_GOAL `aff_dim {u0,u1,u3:real^3} <= &(CARD {u0,u1,u3:real^3}) - &1`);
508 (MATCH_MP_TAC AFF_DIM_LE_CARD);
509 (REWRITE_TAC[Geomdetail.FINITE6]);
512 (NEW_GOAL `u2 IN affine hull {u0,u1,u3:real^3}`);
513 (UNDISCH_TAC `u2 IN convex hull {u0,u1,u3:real^3}`);
514 (MATCH_MP_TAC (SET_RULE `(b SUBSET c) ==> ((a IN b) ==> (a IN c))`));
515 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
521 (ASM_CASES_TAC `v = u3:real^3`);
524 (REWRITE_WITH `{u0, u1, u2, u3} = {u3, u0, u1, u2:real^3}`);
526 (MATCH_MP_TAC EVENTUALLY_RADIAL_CONVEX_HULL_4_sub1);
527 (NEW_GOAL `aff_dim {u3, u0, u1, u2:real^3} = &3`);
528 (REWRITE_WITH `{u3, u0, u1, u2:real^3} = set_of_list ul`);
529 (ASM_REWRITE_TAC[set_of_list]);
530 (EXPAND_TAC "S" THEN SET_TAC[]);
531 (MATCH_MP_TAC Rogers.MHFTTZN1);
532 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
534 (NEW_GOAL `aff_dim {u3, u0, u1, u2:real^3} <= &3 - &1`);
535 (ONCE_REWRITE_TAC[AFF_DIM_INSERT]);
537 (NEW_GOAL `CARD {u0,u1,u2:real^3} <= 3`);
538 (REWRITE_TAC[Geomdetail.CARD3]);
539 (NEW_GOAL `aff_dim {u0,u1,u2:real^3} <= &(CARD {u0,u1,u2:real^3}) - &1`);
540 (MATCH_MP_TAC AFF_DIM_LE_CARD);
541 (REWRITE_TAC[Geomdetail.FINITE6]);
544 (NEW_GOAL `u3 IN affine hull {u0,u1,u2:real^3}`);
545 (UNDISCH_TAC `u3 IN convex hull {u0,u1,u2:real^3}`);
546 (MATCH_MP_TAC (SET_RULE `(b SUBSET c) ==> ((a IN b) ==> (a IN c))`));
547 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
555 (NEW_GOAL `v:real^3 IN {}`);
556 (ASM_REWRITE_TAC[IN]);
558 (UP_ASM_TAC THEN REWRITE_TAC[NOT_IN_EMPTY]);
561 (* ======================================================================= *)
562 (* ====Case 4: k = 3 ====== *)
564 (ASM_CASES_TAC `k = 3`);
565 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell3]);
567 (REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list]);
569 `V INTER mcell k V ul = set_of_list (truncate_simplex (k - 1) ul)`);
570 (MATCH_MP_TAC LEPJBDJ);
571 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 3 /\ 3 <= 4`]);
573 (NEW_GOAL `v IN mcell 3 V ul`);
576 (UP_ASM_TAC THEN ASM_REWRITE_TAC[set_of_list; TRUNCATE_SIMPLEX_EXPLICIT_2; ARITH_RULE `3 - 1 = 2`]);
579 (NEW_GOAL `v IN {u0, u1, u2:real^3}`);
581 (ABBREV_TAC `m = mxi V [u0;u1;u2;u3:real^3]`);
582 (REWRITE_TAC[SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
583 (NEW_GOAL `aff_dim {u0, u1, u2:real^3} = &2`);
584 (REWRITE_WITH `{u0,u1,u2:real^3} = set_of_list (truncate_simplex 2 ul)`);
585 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list]);
586 (MATCH_MP_TAC Rogers.MHFTTZN1);
587 (EXISTS_TAC `V:real^3->bool`);
589 (MATCH_MP_TAC Packing3.TRUNCATE_SIMPLEX_BARV);
590 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[ARITH_RULE `2 <= 3`]);
592 (NEW_GOAL `~(m IN affine hull {u0,u1,u2:real^3})`);
593 (ABBREV_TAC `s2 = omega_list_n V [u0; u1; u2; u3] 2`);
594 (ABBREV_TAC `s3 = omega_list_n V [u0; u1; u2; u3] 3`);
596 (NEW_GOAL `s2 IN voronoi_list V [u0;u1;u2:real^3]`);
598 (REWRITE_TAC[OMEGA_LIST_N; ARITH_RULE `2 = SUC 1`]);
599 (ASM_REWRITE_TAC[ARITH_RULE `SUC 1 = 2`; TRUNCATE_SIMPLEX_EXPLICIT_2]);
600 (MATCH_MP_TAC CLOSEST_POINT_IN_SET);
601 (REWRITE_TAC[Packing3.CLOSED_VORONOI_LIST]);
602 (UNDISCH_TAC `barV V 3 ul` THEN REWRITE_TAC[BARV]);
604 (NEW_GOAL `voronoi_nondg V ([u0;u1;u2:real^3])`);
605 (FIRST_ASSUM MATCH_MP_TAC);
606 (REWRITE_TAC[Sphere.INITIAL_SUBLIST; LENGTH; ARITH_RULE `0 < SUC (SUC (SUC 0))`]);
607 (EXISTS_TAC `[u3:real^3]` THEN ASM_REWRITE_TAC[APPEND]);
608 (UP_ASM_TAC THEN ASM_REWRITE_TAC[VORONOI_NONDG; LENGTH;
609 ARITH_RULE `SUC (SUC (SUC 0)) = 3`; AFF_DIM_EMPTY]);
610 (REWRITE_TAC[ARITH_RULE `-- &1 + &3:int = &3 - &1`]);
611 (REWRITE_TAC[MESON[INT_OF_NUM_SUB; ARITH_RULE `1 <= 3`] `&3:int - &1 = &(3 - 1)`]);
612 (REWRITE_TAC[ARITH_RULE `3 - 1= 2 /\ ~(&2:int = &4)`]);
615 (NEW_GOAL `s3 IN voronoi_list V [u0;u1;u2:real^3]`);
617 (REWRITE_TAC[OMEGA_LIST_N; ARITH_RULE `3 = SUC 2`]);
618 (ASM_REWRITE_TAC[ARITH_RULE `SUC 2 = 3`; TRUNCATE_SIMPLEX_EXPLICIT_3]);
619 (MATCH_MP_TAC (SET_RULE `(?b. a IN b /\ b SUBSET c) ==> a IN c`));
620 (EXISTS_TAC `voronoi_list V [u0; u1; u2; u3:real^3]`);
622 (MATCH_MP_TAC CLOSEST_POINT_IN_SET);
623 (REWRITE_TAC[Packing3.CLOSED_VORONOI_LIST]);
624 (UNDISCH_TAC `barV V 3 ul` THEN REWRITE_TAC[BARV]);
626 (NEW_GOAL `voronoi_nondg V ([u0;u1;u2;u3:real^3])`);
627 (FIRST_ASSUM MATCH_MP_TAC);
628 (REWRITE_TAC[Sphere.INITIAL_SUBLIST; LENGTH; ARITH_RULE `0 < SUC (SUC (SUC (SUC 0)))`]);
629 (EXISTS_TAC `[]:(real^3)list` THEN ASM_REWRITE_TAC[APPEND]);
630 (UP_ASM_TAC THEN ASM_REWRITE_TAC[VORONOI_NONDG; LENGTH;
631 ARITH_RULE `SUC(SUC (SUC (SUC 0))) = 4`; AFF_DIM_EMPTY]);
632 (REWRITE_TAC[ARITH_RULE `-- &1 + &4:int = &4 - &1`]);
633 (REWRITE_TAC[MESON[INT_OF_NUM_SUB; ARITH_RULE `1 <= 4`] `&4:int - &1 = &(4 - 1)`]);
634 (REWRITE_TAC[ARITH_RULE `4 - 1= 3 /\ ~(&3:int = &4)`]);
635 (REWRITE_TAC[VORONOI_LIST; set_of_list; VORONOI_SET]);
638 (NEW_GOAL `?s. between s (omega_list_n V ul 2,omega_list_n V ul 3) /\
639 dist (u0,s) = sqrt (&2) /\
641 (MATCH_MP_TAC MXI_EXPLICIT);
642 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3`);
643 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2]);
644 (REWRITE_WITH `[u0; u1; u2:real^3] = truncate_simplex 2 [u0; u1; u2; u3]`);
645 (REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2]);
648 (UP_ASM_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC);
649 (NEW_GOAL `convex hull {s2,s3:real^3} SUBSET voronoi_list V [u0; u1; u2]`);
650 (REWRITE_WITH `convex hull {s2, s3} SUBSET voronoi_list V [u0; u1; u2:real^3] <=> convex hull {s2, s3} SUBSET convex hull (voronoi_list V [u0; u1; u2])`);
651 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
652 (REWRITE_WITH `convex hull (voronoi_list V [u0; u1; u2]) = voronoi_list V [u0; u1; u2:real^3]`);
653 (REWRITE_TAC[CONVEX_HULL_EQ; Packing3.CONVEX_VORONOI_LIST]);
654 (MATCH_MP_TAC Marchal_cells.CONVEX_HULL_SUBSET);
657 (NEW_GOAL `s IN voronoi_list V [u0;u1;u2:real^3]`);
658 (UNDISCH_TAC `between s (s2, s3:real^3)`);
659 (REWRITE_TAC[BETWEEN_IN_CONVEX_HULL]);
662 (NEW_GOAL `s2 = circumcenter (set_of_list [u0;u1;u2:real^3])`);
663 (REWRITE_TAC[set_of_list]);
665 (MATCH_MP_TAC OMEGA_LIST_2_EXPLICIT_NEW);
666 (EXISTS_TAC `u3:(real^3)` THEN ASM_REWRITE_TAC[]);
667 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`); IN]);
669 (REWRITE_WITH `[u0; u1; u2:real^3] = truncate_simplex 2 [u0; u1; u2; u3]`);
670 (REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2]);
674 (NEW_GOAL `(m - s2:real^3) dot (m - s2) = &0`);
675 (REWRITE_TAC[ASSUME `s2 = circumcenter (set_of_list [u0; u1; u2:real^3])`]);
676 (MATCH_MP_TAC Rogers.MHFTTZN4);
677 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `2`);
678 (REWRITE_TAC[set_of_list]);
680 (ASM_SIMP_TAC[IN_AFFINE_KY_LEMMA1]);
681 (REWRITE_WITH `[u0; u1; u2:real^3] = truncate_simplex 2 ul`);
682 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2]);
683 (MATCH_MP_TAC Packing3.TRUNCATE_SIMPLEX_BARV);
684 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[ARITH_RULE `2 <= 3`]);
685 (UP_ASM_TAC THEN REWRITE_TAC[DOT_EQ_0; VECTOR_ARITH `a - b = vec 0 <=> a = b`]);
687 (NEW_GOAL `hl (truncate_simplex 2 [u0;u1;u2;u3]) = dist (s, u0:real^3)`);
688 (REWRITE_WITH `s = s2:real^3`);
690 (REWRITE_TAC[ASSUME `s2 = circumcenter (set_of_list [u0; u1; u2:real^3])`]);
691 (REWRITE_WITH `dist (circumcenter (set_of_list [u0; u1; u2]),u0) = dist
692 (circumcenter (set_of_list [u0; u1; u2]),HD [u0; u1; u2:real^3])`);
694 (REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2]);
695 (MATCH_MP_TAC Rogers.HL_EQ_DIST0);
696 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `2`);
698 (REWRITE_WITH `[u0; u1; u2:real^3] = truncate_simplex 2 ul`);
699 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2]);
700 (MATCH_MP_TAC Packing3.TRUNCATE_SIMPLEX_BARV);
701 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[ARITH_RULE `2 <= 3`]);
702 (UP_ASM_TAC THEN REWRITE_TAC[] THEN ONCE_REWRITE_TAC[DIST_SYM]);
703 (ASM_REAL_ARITH_TAC);
706 (ASM_CASES_TAC `v = u0:real^3`);
708 (MATCH_MP_TAC EVENTUALLY_RADIAL_CONVEX_HULL_4_sub1);
709 (MATCH_MP_TAC FUN_AFFINE_KLEMMA);
712 (ASM_CASES_TAC `v = u1:real^3`);
714 (REWRITE_WITH `{u0, u1, u2, m:real^3} = {u1, u0, u2, m}`);
716 (MATCH_MP_TAC EVENTUALLY_RADIAL_CONVEX_HULL_4_sub1);
717 (MATCH_MP_TAC FUN_AFFINE_KLEMMA);
718 (REWRITE_WITH `{u1, u0, u2} = {u0, u1, u2:real^3}`);
722 (ASM_CASES_TAC `v = u2:real^3`);
724 (REWRITE_WITH `{u0, u1, u2, m:real^3} = {u2, u0, u1, m}`);
726 (MATCH_MP_TAC EVENTUALLY_RADIAL_CONVEX_HULL_4_sub1);
727 (MATCH_MP_TAC FUN_AFFINE_KLEMMA);
728 (REWRITE_WITH `{u2, u0, u1} = {u0, u1, u2:real^3}`);
735 (REWRITE_TAC[EVENTUALLY_RADIAL_EMPTY]);
737 (* ======================================================================= *)
738 (* ====Case 5: k = 2 ====== *)
740 (ASM_CASES_TAC `k = 2`);
741 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell2]);
744 (REWRITE_TAC[HD;TL]);
745 (ABBREV_TAC `s3 = omega_list_n V [u0; u1; u2; u3] 3`);
746 (ABBREV_TAC `m = mxi V [u0; u1; u2; u3]`);
749 `V INTER mcell k V ul = set_of_list (truncate_simplex (k - 1) ul)`);
750 (MATCH_MP_TAC LEPJBDJ);
751 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 2 /\ 2 <= 4`]);
753 (NEW_GOAL `v IN mcell 3 V ul`);
756 (UP_ASM_TAC THEN ASM_REWRITE_TAC[set_of_list; TRUNCATE_SIMPLEX_EXPLICIT_1; ARITH_RULE `2 - 1 = 1`]);
759 (NEW_GOAL `v IN {u0, u1:real^3}`);
761 (NEW_GOAL `~(u0 = u1:real^3)`);
763 (NEW_GOAL `CARD {u0,u1,u2,u3:real^3} = 4`);
764 (REWRITE_WITH `{u0,u1,u2,u3:real^3} = set_of_list ul`);
765 (ASM_REWRITE_TAC[set_of_list]);
766 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\ CARD (set_of_list ul) = 3 + 1`);
767 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
768 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
770 (UP_ASM_TAC THEN ASM_REWRITE_TAC[SET_RULE `{a,a,b,c} = {a,b,c}`]);
771 (NEW_GOAL `CARD {u1,u2,u3:real^3} <= 3`);
772 (REWRITE_TAC[Geomdetail.CARD3]);
777 (NEW_GOAL `hl [u0;u1:real^3] = inv(&2) * dist (u1,u0)`);
778 (REWRITE_WITH `hl [u0;u1:real^3] =
779 dist (circumcenter (set_of_list [u0;u1]),HD [u0;u1])`);
780 (MATCH_MP_TAC Rogers.HL_EQ_DIST0);
781 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `1`);
783 (REWRITE_WITH `[u0;u1:real^3] = truncate_simplex 1 ul`);
784 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_1]);
785 (MATCH_MP_TAC Packing3.TRUNCATE_SIMPLEX_BARV);
786 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[ARITH_RULE `1 <= 3`]);
787 (REWRITE_TAC[set_of_list; Rogers.CIRCUMCENTER_2; midpoint; HD; dist]);
790 (NEW_GOAL `&0 < a /\ a < &1`);
794 (MATCH_MP_TAC REAL_LT_DIV);
795 (SIMP_TAC[SQRT_POS_LT; ARITH_RULE `&0 < &2`]);
796 (REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_1]);
798 (MATCH_MP_TAC REAL_LT_MUL);
799 (ASM_SIMP_TAC[REAL_LT_INV; ARITH_RULE `&0 < &2`]);
800 (MATCH_MP_TAC DIST_POS_LT THEN ASM_MESON_TAC[]);
801 (REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_1]);
802 (REWRITE_WITH `hl [u0; u1:real^3] / sqrt (&2) < &1 <=>
803 hl [u0; u1] < &1 * sqrt (&2)`);
804 (MATCH_MP_TAC REAL_LT_LDIV_EQ);
805 (SIMP_TAC[SQRT_POS_LT; ARITH_RULE `&0 < &2`]);
806 (REWRITE_TAC[REAL_MUL_LID]);
807 (REWRITE_WITH `[u0;u1:real^3] = truncate_simplex 1 [u0; u1; u2; u3]`);
808 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_1]);
811 (MATCH_MP_TAC EVENTUALLY_RADIAL_INTER);
813 (ASM_CASES_TAC `v = u0:real^3`);
814 (ASM_REWRITE_TAC[EVENTUALLY_RADIAL_RCONE_GE_ABC_A]);
815 (ASM_CASES_TAC `v = u1:real^3`);
817 (MATCH_MP_TAC EVENTUALLY_RADIAL_RCONE_GE_ABC_B);
823 (MATCH_MP_TAC EVENTUALLY_RADIAL_INTER);
825 (ASM_CASES_TAC `v = u1:real^3`);
826 (ASM_REWRITE_TAC[EVENTUALLY_RADIAL_RCONE_GE_ABC_A]);
827 (ASM_CASES_TAC `v = u0:real^3`);
829 (MATCH_MP_TAC EVENTUALLY_RADIAL_RCONE_GE_ABC_B);
835 (* ========================================================================== *)
836 (NEW_GOAL `DISJOINT {u0, u1:real^3} {m, s3}`);
837 (* ========================================================================== *)
839 (ABBREV_TAC `s2 = omega_list_n V ul 2`);
840 (NEW_GOAL `s2 IN voronoi_list V [u0;u1]`);
841 (REWRITE_WITH `[u0;u1:real^3] = truncate_simplex 1 ul`);
842 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_1]);
844 (MATCH_MP_TAC Rogers.OMEGA_LIST_N_IN_VORONOI_LIST_GEN);
846 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 2 /\ 2 <= 3`]);
848 (NEW_GOAL `s3 IN voronoi_list V [u0;u1]`);
849 (REWRITE_WITH `[u0;u1:real^3] = truncate_simplex 1 ul`);
850 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_1]);
852 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
853 (MATCH_MP_TAC Rogers.OMEGA_LIST_N_IN_VORONOI_LIST_GEN);
855 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 3 /\ 3 <= 3`]);
856 (NEW_GOAL `m IN voronoi_list V [u0; u1]`);
857 (ASM_CASES_TAC `hl (truncate_simplex 2 (ul:(real^3)list)) < sqrt (&2)`);
858 (NEW_GOAL `?s. between s (omega_list_n V ul 2,omega_list_n V ul 3) /\
859 dist (u0,s) = sqrt (&2) /\
862 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
863 (MATCH_MP_TAC MXI_EXPLICIT);
864 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN
865 EXISTS_TAC `u3:real^3`);
867 (UP_ASM_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC);
870 (NEW_GOAL `convex hull {s2,s3:real^3} SUBSET voronoi_list V [u0; u1]`);
871 (REWRITE_WITH `convex hull {s2, s3} SUBSET voronoi_list V [u0; u1:real^3] <=> convex hull {s2, s3} SUBSET convex hull (voronoi_list V [u0; u1])`);
872 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
873 (REWRITE_WITH `convex hull (voronoi_list V [u0; u1]) = voronoi_list V [u0; u1:real^3]`);
874 (REWRITE_TAC[CONVEX_HULL_EQ; Packing3.CONVEX_VORONOI_LIST]);
875 (MATCH_MP_TAC Marchal_cells.CONVEX_HULL_SUBSET);
879 (UNDISCH_TAC `between s (s2, s3:real^3)`);
880 (REWRITE_TAC[BETWEEN_IN_CONVEX_HULL]);
883 (EXPAND_TAC "m" THEN REWRITE_TAC[mxi]);
887 (UP_ASM_TAC THEN UP_ASM_TAC THEN ASM_REWRITE_TAC[] THEN REAL_ARITH_TAC);
890 (NEW_GOAL `~(m IN {u0,u1:real^3})`);
891 (REWRITE_TAC[SET_RULE `a IN {b,c} <=> a = b \/ a = c`] THEN STRIP_TAC);
892 (NEW_GOAL `m:real^3 IN voronoi_closed V u1`);
893 (UNDISCH_TAC `m IN voronoi_list V [u0; u1]` THEN REWRITE_TAC[VORONOI_LIST;
894 VORONOI_SET; set_of_list]);
896 (UP_ASM_TAC THEN ASM_REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
898 (NEW_GOAL `dist (u0, u1:real^3) <= dist (u0, u0)`);
899 (FIRST_ASSUM MATCH_MP_TAC);
901 (UP_ASM_TAC THEN REWRITE_TAC[DIST_REFL; REAL_ARITH `~(a <= b) <=> b < a`]);
902 (ASM_SIMP_TAC[DIST_POS_LT]);
904 (NEW_GOAL `m:real^3 IN voronoi_closed V u0`);
905 (UNDISCH_TAC `m IN voronoi_list V [u0; u1]` THEN REWRITE_TAC[VORONOI_LIST;
906 VORONOI_SET; set_of_list]);
908 (UP_ASM_TAC THEN ASM_REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
910 (NEW_GOAL `dist (u1, u0:real^3) <= dist (u1, u1)`);
911 (FIRST_ASSUM MATCH_MP_TAC);
913 (UP_ASM_TAC THEN REWRITE_TAC[DIST_REFL; REAL_ARITH `~(a <= b) <=> b < a`]);
914 (ASM_SIMP_TAC[DIST_POS_LT]);
916 (NEW_GOAL `~(s3 IN {u0, u1:real^3})`);
917 (REWRITE_TAC[SET_RULE `a IN {b,c} <=> a = b \/ a = c`] THEN STRIP_TAC);
918 (NEW_GOAL `s3:real^3 IN voronoi_closed V u1`);
919 (UNDISCH_TAC `s3 IN voronoi_list V [u0; u1]` THEN REWRITE_TAC[VORONOI_LIST;
920 VORONOI_SET; set_of_list]);
922 (UP_ASM_TAC THEN ASM_REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
924 (NEW_GOAL `dist (u0, u1:real^3) <= dist (u0, u0)`);
925 (FIRST_ASSUM MATCH_MP_TAC);
927 (UP_ASM_TAC THEN REWRITE_TAC[DIST_REFL; REAL_ARITH `~(a <= b) <=> b < a`]);
928 (ASM_SIMP_TAC[DIST_POS_LT]);
930 (NEW_GOAL `s3:real^3 IN voronoi_closed V u0`);
931 (UNDISCH_TAC `s3 IN voronoi_list V [u0; u1]` THEN REWRITE_TAC[VORONOI_LIST;
932 VORONOI_SET; set_of_list]);
934 (UP_ASM_TAC THEN ASM_REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
936 (NEW_GOAL `dist (u1, u0:real^3) <= dist (u1, u1)`);
937 (FIRST_ASSUM MATCH_MP_TAC);
939 (UP_ASM_TAC THEN REWRITE_TAC[DIST_REFL; REAL_ARITH `~(a <= b) <=> b < a`]);
940 (ASM_SIMP_TAC[DIST_POS_LT]);
942 (REWRITE_TAC[DISJOINT]);
945 (* ========================================================================== *)
946 (* ========================================================================== *)
948 (ASM_CASES_TAC `v = u0:real^3`);
950 (MATCH_MP_TAC EVENTUALLY_RADIAL_AFF_GE);
953 (ASM_CASES_TAC `v = u1:real^3`);
955 (REWRITE_WITH `{u0,u1:real^3} = {u1,u0}`);
957 (MATCH_MP_TAC EVENTUALLY_RADIAL_AFF_GE);
958 (REWRITE_WITH `{u1,u0:real^3} = {u0,u1}`);
965 (REWRITE_TAC[EVENTUALLY_RADIAL_EMPTY]);
969 (ASM_MESON_TAC[])]);;