1 (* ========================================================================= *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
4 (* Authour : VU KHAC KY *)
5 (* Book lemma: GRUTOTI *)
7 (* Date : March 14, 2012 *)
9 (* ========================================================================= *)
11 (* flyspeck_needs "packing/marchal_cells_3.hl";; *)
13 (* ========================================================================= *)
15 module Grutoti = struct
18 open Euler_main_theorem;;
25 open Vukhacky_tactics;;
28 (* open Marchal_cells_2;; *)
29 open Marchal_cells_2_new;;
44 open Upfzbzm_support_lemmas;;
46 open Marchal_cells_3;;
55 hl [u0;u1] < sqrt (&2) /\
57 ==> sum {X | mcell_set V X /\ e IN edgeX V X } (\t. dihX V t (u0,u1)) =
60 let GRUTOTI = prove_by_refinement (GRUTOTI1_concl,
62 (NEW_GOAL `barV V 1 [u0;u1:real^3]`);
63 (MATCH_MP_TAC HL_LE_SQRT2_IMP_BARV_1);
67 voronoi_list V [u0;u1:real^3] =
70 ({omega_list_n V vl i | i IN 1..k - 1} UNION
71 voronoi_list V vl) | vl | barV V k vl /\
72 truncate_simplex 1 vl = [u0;u1]}} =
74 (MATCH_MP_TAC Rogers.GLTVHUM_lemma1);
75 (ASM_REWRITE_TAC[] THEN ARITH_TAC);
77 `3 IN {k | k IN 1..3 /\
78 voronoi_list V [u0; u1] =
81 ({omega_list_n V vl i | i IN 1..k - 1} UNION voronoi_list V vl) | vl |
83 truncate_simplex 1 vl = [u0; u1]}}`);
84 (ASM_REWRITE_TAC[IN_NUMSEG] THEN ARITH_TAC);
85 (UP_ASM_TAC THEN ONCE_REWRITE_TAC[IN] THEN REWRITE_TAC[IN_ELIM_THM]);
88 {convex hull ({omega_list_n V vl i | i IN 1..3 - 1} UNION voronoi_list V vl) | vl | barV V 3 vl /\
89 truncate_simplex 1 vl = [u0; u1]} =
90 UNIONS {convex hull {omega_list_n V vl 1, omega_list_n V vl 2,
91 omega_list_n V vl 3} | vl | barV V 3 vl /\
92 truncate_simplex 1 vl = [u0; u1]}`);
93 (ONCE_REWRITE_TAC[SET_EQ_LEMMA]);
94 (REWRITE_TAC[IN_UNIONS] THEN ONCE_REWRITE_TAC[IN] THEN
95 REWRITE_TAC[IN_ELIM_THM]);
97 (EXISTS_TAC `t:real^3->bool` THEN ASM_REWRITE_TAC[]);
98 (EXISTS_TAC `vl:(real^3)list`);
100 (NEW_GOAL `?a. voronoi_list V vl = {a} /\
101 a = circumcenter (set_of_list vl) /\
102 hl vl = dist (HD vl,a)`);
103 (MATCH_MP_TAC Marchal_cells_2_new.VORONOI_LIST_3_SINGLETON_EXPLICIT);
105 (UP_ASM_TAC THEN STRIP_TAC);
107 (NEW_GOAL `omega_list_n V vl 3 IN voronoi_list V vl`);
108 (REWRITE_WITH `omega_list_n V vl 3 = omega_list V vl`);
109 (REWRITE_TAC[OMEGA_LIST]);
110 (REWRITE_WITH `LENGTH (vl:(real^3)list) = 3 + 1 /\
111 CARD (set_of_list vl) = 3 + 1`);
112 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
113 (EXISTS_TAC `V:real^3->bool`);
115 (REWRITE_TAC[ARITH_RULE `(3 + 1) - 1 = 3`]);
116 (MATCH_MP_TAC Packing3.OMEGA_LIST_IN_VORONOI_LIST);
117 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
118 (NEW_GOAL `omega_list_n V vl 3 = a`);
121 (REWRITE_TAC[ARITH_RULE `3 - 1 = 2`; IN_NUMSEG;
122 ARITH_RULE `1 <= i /\ i <= 2 <=> i = 1 \/ i = 2`]);
123 (REWRITE_WITH `{omega_list_n V vl i | i = 1 \/ i = 2} =
124 {omega_list_n V vl 1,omega_list_n V vl 2}`);
126 (REWRITE_WITH `{omega_list_n V vl 1, omega_list_n V vl 2} UNION
127 {circumcenter (set_of_list vl)} = {omega_list_n V vl 1, omega_list_n V vl 2, circumcenter (set_of_list vl)}`);
130 (EXISTS_TAC `t:real^3->bool` THEN ASM_REWRITE_TAC[]);
131 (EXISTS_TAC `vl:(real^3)list`);
133 (NEW_GOAL `?a. voronoi_list V vl = {a} /\
134 a = circumcenter (set_of_list vl) /\
135 hl vl = dist (HD vl,a)`);
136 (MATCH_MP_TAC Marchal_cells_2_new.VORONOI_LIST_3_SINGLETON_EXPLICIT);
138 (UP_ASM_TAC THEN STRIP_TAC);
140 (NEW_GOAL `omega_list_n V vl 3 IN voronoi_list V vl`);
141 (REWRITE_WITH `omega_list_n V vl 3 = omega_list V vl`);
142 (REWRITE_TAC[OMEGA_LIST]);
143 (REWRITE_WITH `LENGTH (vl:(real^3)list) = 3 + 1 /\
144 CARD (set_of_list vl) = 3 + 1`);
145 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
146 (EXISTS_TAC `V:real^3->bool`);
148 (REWRITE_TAC[ARITH_RULE `(3 + 1) - 1 = 3`]);
149 (MATCH_MP_TAC Packing3.OMEGA_LIST_IN_VORONOI_LIST);
150 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
151 (NEW_GOAL `omega_list_n V vl 3 = a`);
154 (REWRITE_TAC[ARITH_RULE `3 - 1 = 2`; IN_NUMSEG;
155 ARITH_RULE `1 <= i /\ i <= 2 <=> i = 1 \/ i = 2`]);
156 (REWRITE_WITH `{omega_list_n V vl i | i = 1 \/ i = 2} =
157 {omega_list_n V vl 1,omega_list_n V vl 2}`);
159 (REWRITE_WITH `{omega_list_n V vl 1, omega_list_n V vl 2} UNION
160 {circumcenter (set_of_list vl)} = {omega_list_n V vl 1, omega_list_n V vl 2,
161 circumcenter (set_of_list vl)}`);
165 (* ======================================================================= *)
167 (ABBREV_TAC `p = circumcenter {u0, u1:real^3}`);
168 (NEW_GOAL `aff_dim (u0 INSERT voronoi_list V [u0;u1]) = &3`);
169 (REWRITE_TAC[AFF_DIM_INSERT]);
173 (NEW_GOAL `affine hull voronoi_list V [u0; u1] SUBSET
174 affine hull {x | &2 % (u0 - u1) dot x = norm u0 pow 2 - norm u1 pow 2}`);
175 (MATCH_MP_TAC Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA);
176 (REWRITE_TAC[VORONOI_LIST; set_of_list; Packing3.VORONOI_SET_2]);
177 (ONCE_REWRITE_TAC[SET_RULE `a INTER b = b INTER a`]);
178 (ASM_SIMP_TAC[Pack2.INTER_VORONOI_SUBSET_BISECTOR]);
180 `affine hull {x | &2 % (u0 - u1) dot x = norm u0 pow 2 - norm u1 pow 2} =
181 {x:real^3 | &2 % (u0 - u1) dot x = norm u0 pow 2 - norm u1 pow 2}`);
182 (REWRITE_TAC[AFFINE_HULL_EQ]);
183 (REWRITE_TAC[AFFINE_HYPERPLANE]);
185 `~(u0 IN {x:real^3 | &2 % (u0 - u1) dot x = norm u0 pow 2 - norm u1 pow 2})`);
186 (REWRITE_TAC[IN; IN_ELIM_THM; NORM_POW_2]);
187 (ONCE_REWRITE_TAC [REAL_ARITH `a = b <=> a - b = &0`]);
188 (REWRITE_TAC[VECTOR_ARITH `&2 % (u0 - u1) dot u0 - (u0 dot u0 - u1 dot u1) =
189 (u0 - u1) dot (u0 - u1)`]);
190 (REWRITE_TAC[DOT_EQ_0] THEN ASM_NORM_ARITH_TAC);
193 (REWRITE_TAC[ARITH_RULE `a + &1 = b:int <=> a = b - &1`]);
194 (MATCH_MP_TAC Packing3.AFF_DIM_VORONOI_LIST);
197 (NEW_GOAL `aff_dim (u0 INSERT voronoi_list V [u0; u1]) = &(dimindex (:3))`);
198 (ASM_REWRITE_TAC[DIMINDEX_3]);
199 (UP_ASM_TAC THEN REWRITE_TAC[AFF_DIM_EQ_FULL]);
202 (ABBREV_TAC `S = voronoi_list V [u0;u1]`);
203 (NEW_GOAL `!x. x IN S ==> (x - u0) dot (u1 - u0) =
204 dist (p, u0) * dist (u1, u0:real^3)`);
206 (NEW_GOAL `p = inv (&2) % (u0 + (u1:real^3))`);
207 (EXPAND_TAC "p" THEN REWRITE_TAC[Rogers.CIRCUMCENTER_2; midpoint]);
209 (REWRITE_WITH `u1 - u0 = &2 % (p - u0:real^3)`);
212 (REWRITE_TAC[NORM_MUL; REAL_ARITH `abs (&2) = &2`;
213 REAL_ARITH `a * b * a = b * a pow 2`; NORM_POW_2; DOT_RMUL]);
214 (REWRITE_WITH `(x - u0) dot (p - u0:real^3) =
215 (p - u0) dot (p - u0) - (x - p) dot (u0 - p)`);
217 (REWRITE_WITH `(x - p) dot (u0 - p:real^3) = &0`);
219 (REWRITE_WITH `{u0, u1} = set_of_list [u0; u1:real^3]`);
220 (REWRITE_TAC[set_of_list]);
221 (MATCH_MP_TAC Rogers.MHFTTZN4);
222 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `1`);
226 (NEW_GOAL `S SUBSET affine hull voronoi_list V [u0; u1]`);
228 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
230 (REWRITE_TAC[set_of_list]);
231 (NEW_GOAL `{u0,u1} SUBSET affine hull {u0,u1:real^3}`);
232 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
236 (* ========================================================================= *)
238 (ABBREV_TAC `S1 = {x:real^3 | &2 % (u0 - u1) dot x =
239 norm u0 pow 2 - norm u1 pow 2}`);
240 (ABBREV_TAC `S2:real^3->bool = (S1 DIFF (relative_interior S))`);
241 (NEW_GOAL `closed_in (subtopology euclidean (S1:real^3->bool)) S2`);
243 (MATCH_MP_TAC CLOSED_IN_DIFF);
245 (NEW_GOAL `closed (S1:real^3->bool)`);
246 (EXPAND_TAC "S1" THEN REWRITE_TAC[CLOSED_HYPERPLANE]);
247 (MATCH_MP_TAC CLOSED_SUBSET);
248 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
250 (REWRITE_WITH `S1 = affine hull (S:real^3->bool)`);
252 (NEW_GOAL `affine hull S1 = S1:real^3->bool`);
253 (REWRITE_TAC[AFFINE_HULL_EQ]);
254 (EXPAND_TAC "S1" THEN REWRITE_TAC[AFFINE_HYPERPLANE]);
255 (ONCE_REWRITE_TAC[GSYM (ASSUME `affine hull S1 = S1:real^3->bool`)]);
256 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
257 (MATCH_MP_TAC AFF_DIM_EQ_AFFINE_HULL);
259 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
260 SET_RULE `INTERS {f x | x IN {a, b}} = f a INTER f b`]);
261 (DEL_TAC THEN EXPAND_TAC "S1");
262 (MATCH_MP_TAC Pack2.INTER_VORONOI_SUBSET_BISECTOR);
264 (REWRITE_WITH `aff_dim (S1:(real^3->bool)) = &(dimindex (:3)) - &1`);
265 (DEL_TAC THEN EXPAND_TAC "S1");
266 (MATCH_MP_TAC AFF_DIM_HYPERPLANE);
267 (REWRITE_TAC[VECTOR_ARITH `&2 % (s - t) = vec 0 <=> s = t`]);
269 (REWRITE_TAC[DIMINDEX_3]);
270 (REWRITE_WITH `aff_dim (voronoi_list V [u0;u1:real^3]) = &3 - &1`);
271 (MATCH_MP_TAC Packing3.AFF_DIM_VORONOI_LIST);
275 (REWRITE_TAC[OPEN_IN_RELATIVE_INTERIOR]);
277 (NEW_GOAL `closed (S2:real^3->bool)`);
278 (MATCH_MP_TAC CLOSED_IN_CLOSED_TRANS);
279 (EXISTS_TAC `S1:real^3->bool`);
282 (REWRITE_TAC[CLOSED_HYPERPLANE]);
285 (NEW_GOAL `~(S2:real^3->bool = {})`);
287 (REWRITE_TAC [SET_RULE `A DIFF B = {} <=> A SUBSET B`]);
289 (NEW_GOAL `S1 SUBSET S:real^3->bool`);
290 (NEW_GOAL `relative_interior S SUBSET S:real^3->bool`);
291 (REWRITE_TAC[RELATIVE_INTERIOR_SUBSET]);
292 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
294 (NEW_GOAL `S1 = S:real^3->bool`);
295 (NEW_GOAL `S SUBSET S1:real^3->bool`);
297 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
298 SET_RULE `INTERS {f x | x IN {a, b}} = f a INTER f b`]);
300 (MATCH_MP_TAC Pack2.INTER_VORONOI_SUBSET_BISECTOR);
302 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
304 (NEW_GOAL `bounded (S1:real^3->bool)`);
305 (REWRITE_TAC[ASSUME `S1 = S:real^3->bool`]);
306 (DEL_TAC THEN EXPAND_TAC "S");
307 (MATCH_MP_TAC Packing3.BOUNDED_VORONOI_LIST);
311 (NEW_GOAL `~bounded (S1:real^3->bool)`);
313 (MATCH_MP_TAC UNBOUNDED_HYPERPLANE);
314 (REWRITE_TAC[VECTOR_ARITH `&2 % (u0 - u1) = vec 0 <=> u0 = u1`]);
318 (NEW_GOAL `?z:real^3. z IN S2 /\
319 (!w. w IN S2 ==> dist (u0,z) <= dist (u0,w))`);
320 (MATCH_MP_TAC DISTANCE_ATTAINS_INF);
322 (UP_ASM_TAC THEN STRIP_TAC);
324 (* ======================================================================== *)
326 (ABBREV_TAC `a = dist (p, u0:real^3) / dist (z, u0)`);
327 (NEW_GOAL `&0 < a /\ a < &1`);
329 (NEW_GOAL `~(u0:real^3 IN S1)`);
330 (EXPAND_TAC "S1" THEN REWRITE_TAC[IN; IN_ELIM_THM; NORM_POW_2]);
331 (REWRITE_TAC[REAL_ARITH `a = b - c <=> a + c - b = &0`]);
332 (REWRITE_TAC[VECTOR_ARITH `&2 % (u0 - u1) dot u0 + u1 dot u1 - u0 dot u0 =
333 (u0 - u1) dot (u0 - u1)`]);
334 (REWRITE_TAC[DOT_EQ_0; VECTOR_ARITH `a - b = vec 0 <=> a = b`]);
336 (NEW_GOAL `&0 < dist (p,u0:real^3)`);
337 (MATCH_MP_TAC DIST_POS_LT);
338 (EXPAND_TAC "p" THEN REWRITE_TAC[Rogers.CIRCUMCENTER_2; midpoint]);
339 (REWRITE_TAC[VECTOR_ARITH `inv (&2) % (u0 + u1) = u0 <=> u0 = u1`]);
341 (NEW_GOAL `&0 < dist (z,u0:real^3)`);
342 (MATCH_MP_TAC DIST_POS_LT);
344 (NEW_GOAL `z:real^3 IN S1`);
348 (MATCH_MP_TAC REAL_LT_DIV);
351 `dist (p,u0) / dist (z,u0:real^3) < &1 <=> dist (p,u0) < &1 * dist (z,u0)`);
352 (ASM_SIMP_TAC[REAL_LT_LDIV_EQ]);
353 (REWRITE_TAC[REAL_MUL_LID]);
354 (MATCH_MP_TAC Tactics_jordan.REAL_POW_2_LT);
356 (ASM_REAL_ARITH_TAC);
357 (ASM_REAL_ARITH_TAC);
359 (REWRITE_WITH `norm (z - u0:real^3) pow 2 =
360 norm (p - u0) pow 2 + norm (z - p) pow 2`);
361 (MATCH_MP_TAC PYTHAGORAS);
362 (REWRITE_TAC[orthogonal]);
363 (REWRITE_WITH `p = circumcenter (set_of_list [u0;u1:real^3])`);
364 (ASM_REWRITE_TAC[set_of_list]);
365 (ONCE_REWRITE_TAC[DOT_SYM]);
366 (MATCH_MP_TAC Rogers.MHFTTZN4);
367 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `1`);
372 (REWRITE_TAC[ASSUME `voronoi_list V [u0; u1] = S`]);
373 (REWRITE_WITH `affine hull (S:real^3->bool) = S1`);
374 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
376 (NEW_GOAL `affine hull S1 = S1:real^3->bool`);
377 (REWRITE_TAC[AFFINE_HULL_EQ]);
378 (EXPAND_TAC "S1" THEN REWRITE_TAC[AFFINE_HYPERPLANE]);
379 (ONCE_REWRITE_TAC[GSYM (ASSUME `affine hull S1 = S1:real^3->bool`)]);
380 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
381 (MATCH_MP_TAC AFF_DIM_EQ_AFFINE_HULL);
383 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
384 SET_RULE `INTERS {f x | x IN {a, b}} = f a INTER f b`]);
385 (DEL_TAC THEN EXPAND_TAC "S1");
386 (MATCH_MP_TAC Pack2.INTER_VORONOI_SUBSET_BISECTOR);
388 (REWRITE_WITH `aff_dim (S1:(real^3->bool)) = &(dimindex (:3)) - &1`);
389 (DEL_TAC THEN EXPAND_TAC "S1");
390 (MATCH_MP_TAC AFF_DIM_HYPERPLANE);
391 (REWRITE_TAC[VECTOR_ARITH `&2 % (s - t) = vec 0 <=> s = t`]);
393 (REWRITE_TAC[DIMINDEX_3]);
394 (REWRITE_WITH `aff_dim (voronoi_list V [u0;u1:real^3]) = &3 - &1`);
395 (MATCH_MP_TAC Packing3.AFF_DIM_VORONOI_LIST);
399 (REWRITE_TAC[set_of_list]);
400 (NEW_GOAL `{u0, u1:real^3} SUBSET affine hull {u0, u1}`);
401 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
403 (REWRITE_TAC[REAL_ARITH `a < a + b <=> &0 < b`; NORM_POW_2; DOT_POS_LT]);
404 (REWRITE_TAC[VECTOR_ARITH `a - b = vec 0 <=> a = b`]);
406 (NEW_GOAL `~(z:real^3 IN S2)`);
407 (REWRITE_TAC[ASSUME `z = p:real^3`]);
409 (NEW_GOAL `p:real^3 IN relative_interior S`);
413 (ABBREV_TAC `B = V INTER ball (p:real^3, &8)`);
414 (ABBREV_TAC `A = B DIFF {u0, u1:real^3}`);
415 (NEW_GOAL `FINITE (A:real^3->bool)`);
417 (MATCH_MP_TAC FINITE_DIFF);
419 (MATCH_MP_TAC Packing3.KIUMVTC THEN ASM_REWRITE_TAC[]);
420 (NEW_GOAL `?y. dist (p,y:real^3) = &4`);
421 (MATCH_MP_TAC VECTOR_CHOOSE_DIST);
423 (UP_ASM_TAC THEN STRIP_TAC);
424 (UNDISCH_TAC `saturated (V:real^3->bool)`);
425 (REWRITE_TAC[saturated] THEN STRIP_TAC);
426 (NEW_GOAL `?z. z IN V /\ dist (y:real^3, z) < &2`);
428 (UP_ASM_TAC THEN STRIP_TAC);
430 (NEW_GOAL `z':real^3 IN A`);
431 (EXPAND_TAC "A" THEN EXPAND_TAC "B");
432 (REWRITE_TAC[IN_DIFF; IN_INTER; IN_BALL]);
436 (NEW_GOAL `dist (p,z') <= dist (p, y) + dist (y, z':real^3)`);
437 (REWRITE_TAC[DIST_TRIANGLE]);
438 (ASM_REAL_ARITH_TAC);
439 (NEW_GOAL `dist (p, y) <= dist (p, z') + dist (z', y:real^3)`);
440 (REWRITE_TAC[DIST_TRIANGLE]);
441 (UP_ASM_TAC THEN ASM_REWRITE_TAC[] THEN ONCE_REWRITE_TAC[DIST_SYM]);
443 (NEW_GOAL `&2 < dist (z', p:real^3)`);
444 (ASM_REAL_ARITH_TAC);
445 (UP_ASM_TAC THEN REWRITE_TAC[] THEN ONCE_REWRITE_TAC[DIST_SYM]);
446 (REWRITE_WITH `p = circumcenter (set_of_list [u0;u1:real^3])`);
447 (ASM_MESON_TAC[set_of_list]);
448 (NEW_GOAL `(!w. w IN set_of_list [u0;u1:real^3]
449 ==> dist (circumcenter (set_of_list [u0;u1]),w) = hl [u0;u1])`);
450 (MATCH_MP_TAC Rogers.HL_PROPERTIES);
451 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `1`);
454 (REWRITE_WITH `dist (circumcenter (set_of_list [u0; u1:real^3]),z') =
456 (FIRST_ASSUM MATCH_MP_TAC);
457 (ASM_REWRITE_TAC[set_of_list]);
458 (NEW_GOAL `sqrt (&2) <= &2`);
459 (MATCH_MP_TAC Tactics_jordan.REAL_POW_2_LE);
460 (SIMP_TAC[REAL_ARITH `&0 <= &2`; SQRT_POS_LE; SQRT_POW_2]);
462 (ASM_REAL_ARITH_TAC);
464 (NEW_GOAL `?a:real^3. a IN A /\ (!x. x IN A ==> dist (p,a) <= dist (p,x))`);
465 (MATCH_MP_TAC Packing3.REAL_FINITE_ARGMIN);
467 (UP_ASM_TAC THEN SET_TAC[]);
468 (UP_ASM_TAC THEN STRIP_TAC);
471 (ABBREV_TAC `d = inv (&4) * (dist (p, a') - dist (p, u0:real^3))`);
474 (MATCH_MP_TAC REAL_LT_MUL);
477 (REWRITE_TAC[REAL_ARITH `&0 < a - b <=> a > b`]);
478 (ONCE_REWRITE_TAC[DIST_SYM]);
479 (NEW_GOAL `!u v. u IN {u0,u1} /\ v IN V DIFF {u0,u1} ==>
480 dist (v,p) > dist (u,p:real^3)`);
481 (MATCH_MP_TAC Rogers.XYOFCGX);
485 (UP_ASM_TAC THEN REWRITE_TAC[AFFINE_INDEPENDENT_2]);
486 (ASM_MESON_TAC[set_of_list]);
487 (REWRITE_WITH `radV {u0, u1:real^3} = hl [u0;u1]`);
488 (REWRITE_TAC[HL;set_of_list]);
490 (FIRST_ASSUM MATCH_MP_TAC);
493 (REWRITE_TAC[relative_interior; IN; IN_ELIM_THM]);
494 (ABBREV_TAC `St = S INTER ball (p:real^3, d)`);
495 (EXISTS_TAC `St:real^3->bool`);
498 (REWRITE_TAC[open_in]);
500 (NEW_GOAL `S SUBSET affine hull (S:real^3->bool)`);
501 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
502 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
503 (EXISTS_TAC `d - dist (p:real^3, x)`);
505 (REWRITE_TAC[REAL_ARITH `&0 < a - b <=> b < a`]);
506 (REWRITE_TAC[GSYM IN_BALL]);
509 (REWRITE_TAC[IN_INTER]);
513 (NEW_GOAL `dist (x',x:real^3) < d`);
514 (NEW_GOAL `&0 <= dist (p,x:real^3)`);
515 (REWRITE_TAC[DIST_POS_LE]);
516 (ASM_REAL_ARITH_TAC);
518 (NEW_GOAL `x' IN voronoi_closed V (u0:real^3)`);
519 (REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
522 (ASM_CASES_TAC `w IN {u0, u1:real^3}`);
523 (ASM_CASES_TAC `w = u0:real^3`);
524 (REWRITE_TAC[ASSUME `w = u0:real^3`]);
526 (NEW_GOAL `w = u1:real^3`);
528 (REWRITE_TAC[ASSUME `w = u1:real^3`]);
529 (MATCH_MP_TAC (REAL_ARITH `a = b ==> a <= b`));
531 (NEW_GOAL `x':real^3 IN S1`);
532 (NEW_GOAL `affine hull S SUBSET affine hull (S1:real^3->bool)`);
533 (MATCH_MP_TAC Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA);
534 (EXPAND_TAC "S1" THEN REWRITE_TAC[GSYM
535 (ASSUME `voronoi_list V [u0; u1] = S`); VORONOI_LIST; VORONOI_SET;
536 set_of_list; SET_RULE `INTERS {f v | v IN {a, b}} = f a INTER f b`]);
537 (MATCH_MP_TAC Pack2.INTER_VORONOI_SUBSET_BISECTOR);
539 (REWRITE_WITH `x' IN S1 <=> x':real^3 IN affine hull S1`);
540 (REWRITE_WITH `affine hull S1 = S1:real^3->bool`);
541 (REWRITE_TAC[AFFINE_HULL_EQ]);
542 (EXPAND_TAC "S1" THEN REWRITE_TAC[AFFINE_HYPERPLANE]);
545 (UP_ASM_TAC THEN EXPAND_TAC "S1" THEN REWRITE_TAC[IN_ELIM_THM; NORM_POW_2]);
546 (ONCE_REWRITE_TAC[REAL_ARITH `a = b <=> a - b = &0`]);
548 VECTOR_ARITH `&2 % (u0 - u1) dot x - (u0 dot u0 - u1 dot u1) =
549 (u1 - x) dot (u1 - x) - (u0 - x) dot (u0 - x)`]);
550 (REWRITE_TAC[REAL_ARITH `a - b = &0 <=> a = b`; GSYM NORM_POW_2; GSYM dist]);
552 (REWRITE_TAC[DIST_EQ]);
553 (ONCE_REWRITE_TAC[DIST_SYM]);
556 (NEW_GOAL `dist (x', u0:real^3) <= dist (x', x) + dist (x, u0)`);
557 (REWRITE_TAC[DIST_TRIANGLE]);
558 (NEW_GOAL `dist (x, u0:real^3) <= dist (x, p:real^3) + dist (p, u0)`);
559 (REWRITE_TAC[DIST_TRIANGLE]);
560 (NEW_GOAL `dist (x,p:real^3) < d`);
561 (NEW_GOAL `x IN ball (p:real^3, d)`);
563 (UP_ASM_TAC THEN REWRITE_TAC[IN_BALL]);
564 (REWRITE_TAC[DIST_SYM]);
565 (NEW_GOAL `dist (x',u0) < &2 * d + dist (p:real^3,u0)`);
566 (ASM_REAL_ARITH_TAC);
568 (NEW_GOAL `dist (p, w:real^3)- &2 * d <= dist (x',w)`);
569 (NEW_GOAL `dist (x, w:real^3) <= dist (x, x') + dist (x', w)`);
570 (REWRITE_TAC[DIST_TRIANGLE]);
571 (NEW_GOAL `dist (p, w:real^3) <= dist (p, x) + dist (x, w)`);
572 (REWRITE_TAC[DIST_TRIANGLE]);
573 (NEW_GOAL `dist (x, x':real^3) < d /\ dist (p, x:real^3) < d`);
574 (ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REWRITE_TAC[]);
575 (ASM_REAL_ARITH_TAC);
576 (NEW_GOAL `dist (p, u0) + &4 * d <= dist (p, w:real^3)`);
578 (REWRITE_TAC[REAL_ARITH `&4 * inv (&4) * a = a`]);
579 (REWRITE_TAC[REAL_ARITH `a + b - a = b`]);
581 (ASM_CASES_TAC `w:real^3 IN B`);
582 (FIRST_ASSUM MATCH_MP_TAC);
584 (NEW_GOAL `~(dist (p,w:real^3) < &8)`);
585 (REWRITE_TAC[GSYM IN_BALL]);
587 (NEW_GOAL `dist (p,a':real^3) < &8`);
588 (REWRITE_TAC[GSYM IN_BALL]);
590 (ASM_REAL_ARITH_TAC);
591 (ASM_REAL_ARITH_TAC);
594 (NEW_GOAL `x' IN voronoi_closed V (u1:real^3)`);
595 (NEW_GOAL `x':real^3 IN S1`);
596 (NEW_GOAL `affine hull S SUBSET affine hull (S1:real^3->bool)`);
597 (MATCH_MP_TAC Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA);
598 (EXPAND_TAC "S1" THEN REWRITE_TAC[GSYM
599 (ASSUME `voronoi_list V [u0; u1] = S`); VORONOI_LIST; VORONOI_SET;
600 set_of_list; SET_RULE `INTERS {f v | v IN {a, b}} = f a INTER f b`]);
601 (MATCH_MP_TAC Pack2.INTER_VORONOI_SUBSET_BISECTOR);
603 (REWRITE_WITH `x' IN S1 <=> x':real^3 IN affine hull S1`);
604 (REWRITE_WITH `affine hull S1 = S1:real^3->bool`);
605 (REWRITE_TAC[AFFINE_HULL_EQ]);
606 (EXPAND_TAC "S1" THEN REWRITE_TAC[AFFINE_HYPERPLANE]);
609 (UP_ASM_TAC THEN EXPAND_TAC "S1" THEN REWRITE_TAC[IN_ELIM_THM; NORM_POW_2]);
610 (ONCE_REWRITE_TAC[REAL_ARITH `a = b <=> a - b = &0`]);
612 VECTOR_ARITH `&2 % (u0 - u1) dot x - (u0 dot u0 - u1 dot u1) =
613 (u1 - x) dot (u1 - x) - (u0 - x) dot (u0 - x)`]);
614 (REWRITE_TAC[REAL_ARITH `a - b = &0 <=> a = b`; GSYM NORM_POW_2; GSYM dist]);
616 (UNDISCH_TAC `x' IN voronoi_closed V (u0:real^3)`);
617 (REWRITE_TAC[voronoi_closed; IN_ELIM_THM; IN]);
619 (REWRITE_WITH `dist (x', u1)= dist (x', u0:real^3)`);
620 (ONCE_REWRITE_TAC[DIST_SYM]);
621 (ASM_REWRITE_TAC[DIST_EQ]);
625 (ASSUME `voronoi_list V [u0; u1] = S`); VORONOI_LIST; VORONOI_SET;
626 set_of_list; SET_RULE `INTERS {f v | v IN {a, b}} = f a INTER f b`]);
627 (ASM_REWRITE_TAC[IN_INTER]);
629 (REWRITE_TAC[IN_BALL]);
630 (NEW_GOAL `dist (p,x':real^3) <= dist (p,x) + dist (x, x':real^3)`);
631 (REWRITE_TAC[DIST_TRIANGLE]);
632 (NEW_GOAL `dist (x,x':real^3) = dist (x',x)`);
633 (REWRITE_TAC[DIST_SYM]);
634 (ASM_REAL_ARITH_TAC);
635 (REWRITE_WITH `St p <=> p:real^3 IN St`);
637 (EXPAND_TAC "St" THEN REWRITE_TAC[IN_INTER; IN_BALL; DIST_REFL]);
639 (REWRITE_WITH `p = omega_list V [u0; u1]`);
640 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
641 (REWRITE_WITH `p = circumcenter (set_of_list [u0;u1:real^3])`);
642 (ASM_MESON_TAC[set_of_list]);
643 (MATCH_MP_TAC Rogers.XNHPWAB1);
645 (ASM_REWRITE_TAC[IN]);
646 (REWRITE_TAC[GSYM (ASSUME `voronoi_list V [u0;u1] = S`)]);
647 (MATCH_MP_TAC Packing3.OMEGA_LIST_IN_VORONOI_LIST);
648 (EXISTS_TAC `1` THEN ASM_REWRITE_TAC[]);
650 (UP_ASM_TAC THEN SET_TAC[]);
651 (UP_ASM_TAC THEN SET_TAC[]);
654 (* ======================================================================== *)
656 (NEW_GOAL `?b. &0 < b /\ b < &1 /\
657 rcone_gt u0 u1 b SUBSET aff_ge_alt {u0:real^3} S`);
659 (EXISTS_TAC `a:real`);
663 (REWRITE_TAC[SET_RULE `A SUBSET B <=> (!x. ~(x IN B) ==> ~(x IN A))`]);
665 (NEW_GOAL `x:real^3 IN affine hull (u0 INSERT S)`);
667 (UP_ASM_TAC THEN REWRITE_TAC[AFFINE_HULL_EXPLICIT_ALT; IN; IN_ELIM_THM]);
670 (ABBREV_TAC `h = sum (s DELETE u0:real^3) u`);
671 (NEW_GOAL `(x - u0) dot (u1 - u0:real^3) =
672 h * dist (p, u0) * dist (u1, u0:real^3)`);
674 (NEW_GOAL `u0 = vsum s (\v:real^3. (u:real^3->real) v % (u0:real^3))`);
675 (ASM_SIMP_TAC[VSUM_RMUL]);
677 (REWRITE_WITH `vsum (s:real^3->bool) (\v. u v % v) - u0:real^3 =
678 vsum s (\v. u v % v) - vsum s (\v:real^3. u v % u0)`);
680 (UP_ASM_TAC THEN MESON_TAC[]);
681 (REWRITE_WITH `vsum s (\v. u v % v) - vsum s (\v:real^3. u v % u0:real^3) =
682 vsum s (\x. (\v. u v % v) x - (\v. u v % u0) x)`);
683 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
684 (MATCH_MP_TAC VSUM_SUB);
686 (REWRITE_TAC[VECTOR_ARITH `a % x - a % y = a % (x - y)`]);
687 (REWRITE_WITH `vsum s (\x:real^3. u x % (x - u0)) dot (u1 - u0) =
688 sum s (\x. (\x. u x % (x - u0)) x dot (u1 - u0:real^3))`);
689 (ASM_SIMP_TAC[DOT_LSUM]);
690 (REWRITE_TAC[DOT_LMUL]);
691 (REWRITE_WITH `sum s (\x:real^3. u x * ((x - u0) dot (u1 - u0:real^3))) =
692 sum (s DELETE u0) (\x. u x * (dist (p,u0) * dist (u1,u0)))`);
693 (ASM_CASES_TAC `u0:real^3 IN s`);
694 (NEW_GOAL `s = u0 INSERT (s DELETE u0:real^3)`);
696 (NEW_GOAL `FINITE (s DELETE u0:real^3)`);
697 (MATCH_MP_TAC FINITE_SUBSET);
698 (EXISTS_TAC `s:real^3->bool` THEN ASM_REWRITE_TAC[] THEN SET_TAC[]);
700 (REWRITE_WITH `sum s (\x:real^3. u x * ((x - u0) dot (u1 - u0:real^3))) =
701 sum (u0 INSERT (s DELETE u0)) (\x. u x * ((x - u0) dot (u1 - u0)))`);
703 (ABBREV_TAC `f = (\x:real^3. u x * ((x - u0) dot (u1 - u0:real^3)))`);
704 (REWRITE_WITH `sum (u0:real^3 INSERT (s DELETE u0)) f =
705 (if u0 IN (s DELETE u0) then sum (s DELETE u0) f
706 else f u0 + sum (s DELETE u0) f)`);
707 (MATCH_MP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
713 (REWRITE_WITH `f (u0:real^3) = &0`);
715 (REWRITE_TAC[VECTOR_ARITH `(u0 - u0) dot (u1 - u0) = &0`]);
717 (REWRITE_TAC[REAL_ARITH `&0 + a = a`]);
718 (MATCH_MP_TAC SUM_EQ);
721 (REWRITE_TAC[REAL_ARITH `a * x = a * y * z <=> a * (x - y * z) = &0`]);
722 (NEW_GOAL `(x' - u0) dot (u1 - u0) - dist (p,u0) * dist (u1,u0:real^3) = &0`);
723 (REWRITE_TAC[REAL_ARITH `a - b = &0 <=> a = b`]);
724 (FIRST_ASSUM MATCH_MP_TAC);
728 (REWRITE_WITH `s DELETE u0:real^3 = s`);
730 (MATCH_MP_TAC SUM_EQ);
733 (REWRITE_TAC[REAL_ARITH `a * x = a * y * z <=> a * (x - y * z) = &0`]);
734 (NEW_GOAL `(x' - u0) dot (u1 - u0) - dist (p,u0) * dist (u1,u0:real^3) = &0`);
735 (REWRITE_TAC[REAL_ARITH `a - b = &0 <=> a = b`]);
736 (FIRST_ASSUM MATCH_MP_TAC);
740 (NEW_GOAL `FINITE (s DELETE u0:real^3)`);
741 (MATCH_MP_TAC FINITE_SUBSET);
742 (EXISTS_TAC `s:real^3->bool` THEN ASM_REWRITE_TAC[] THEN SET_TAC[]);
743 (ASM_SIMP_TAC[SUM_RMUL]);
745 (ASM_CASES_TAC `h <= &0`);
746 (NEW_GOAL `~(x IN rcone_gt u0 (u1:real^3) a)`);
747 (REWRITE_TAC[rcone_gt; rconesgn; IN; IN_ELIM_THM]);
749 (MATCH_MP_TAC (REAL_ARITH `&0 <= x /\ y <= &0 ==> ~(y > x)`));
751 (MATCH_MP_TAC REAL_LE_MUL);
752 (REWRITE_TAC[DIST_POS_LE]);
753 (MATCH_MP_TAC REAL_LE_MUL);
754 (REWRITE_TAC[DIST_POS_LE]);
755 (ASM_REAL_ARITH_TAC);
757 (REWRITE_TAC[REAL_ARITH `a * b * c <= &0 <=> &0 <= b * c * (--a)`]);
758 (MATCH_MP_TAC REAL_LE_MUL);
759 (REWRITE_TAC[DIST_POS_LE]);
760 (MATCH_MP_TAC REAL_LE_MUL);
761 (REWRITE_TAC[DIST_POS_LE]);
762 (ASM_REAL_ARITH_TAC);
767 (ABBREV_TAC `y = inv (h) % vsum (s DELETE u0) (\v:real^3. u v % v)`);
768 (NEW_GOAL `?t. t + h = &1 /\ x = t % u0 + h % (y:real^3)`);
769 (EXISTS_TAC `&1 - h`);
772 (ASM_CASES_TAC `u0:real^3 IN s`);
773 (REWRITE_TAC[GSYM (ASSUME `sum s (u:real^3->real) = &1`)]);
776 (REWRITE_WITH `sum s u = sum (u0 INSERT (s DELETE u0)) (u:real^3->real)`);
777 (REWRITE_WITH `(u0 INSERT (s DELETE u0:real^3)) = s`);
779 (NEW_GOAL `FINITE (s DELETE u0:real^3)`);
780 (MATCH_MP_TAC FINITE_SUBSET);
781 (EXISTS_TAC `s:real^3->bool` THEN ASM_REWRITE_TAC[] THEN SET_TAC[]);
783 (SIMP_TAC[Marchal_cells_2_new.SUM_CLAUSES_alt;
784 ASSUME `FINITE (s DELETE u0:real^3)`]);
787 (UP_ASM_TAC THEN SET_TAC[]);
789 (REWRITE_TAC[REAL_ARITH `(a + b:real) - b = a`]);
792 (REWRITE_TAC[VECTOR_MUL_ASSOC]);
793 (REWRITE_WITH `h * inv h = &1`);
794 (NEW_GOAL `~(h = &0)`);
795 (ASM_REAL_ARITH_TAC);
796 (ASM_SIMP_TAC[Trigonometry2.REAL_MUL_LRINV]);
797 (REWRITE_TAC[VECTOR_MUL_LID]);
800 (REWRITE_WITH `vsum s (\v. u v % v) =
801 vsum (u0 INSERT (s DELETE u0)) (\v:real^3. u v % v)`);
802 (REWRITE_WITH `(u0 INSERT (s DELETE u0:real^3)) = s`);
804 (SIMP_TAC[Marchal_cells_2_new.VSUM_CLAUSES_alt;
805 ASSUME `FINITE (s DELETE u0:real^3)`]);
808 (UP_ASM_TAC THEN SET_TAC[]);
813 (EXPAND_TAC "h" THEN REWRITE_WITH `s DELETE u0:real^3 = s`);
816 (EXPAND_TAC "y" THEN REWRITE_TAC[ASSUME `h = &1`]);
817 (REWRITE_WITH `s DELETE u0:real^3 = s`);
819 (ASM_REWRITE_TAC[REAL_ARITH `inv (&1) = &1 /\ &1 - &1 = &0`]);
821 (UP_ASM_TAC THEN STRIP_TAC);
823 (NEW_GOAL `~(y:real^3 IN S)`);
825 (NEW_GOAL `x IN aff_ge_alt {u0:real^3} S`);
826 (REWRITE_TAC[IN; aff_ge_alt; lin_combo]);
828 (ABBREV_TAC `f = (\v:real^3. if v = u0 then t
829 else if v = y then h else &0)`);
830 (EXISTS_TAC `f:real^3->real`);
831 (EXISTS_TAC `{y:real^3}`);
834 (REWRITE_TAC[FINITE_SING]);
837 (REWRITE_TAC[SET_RULE `{a} UNION {b} = {a, b}`]);
838 (REWRITE_WITH `vsum {u0:real^3, y} (\v. f v % v) =
839 (\v. f v % v) u0 + (\v. f v % v) y`);
840 (MATCH_MP_TAC Geomdetail.VSUM_DIS2);
842 (NEW_GOAL `~(u0:real^3 IN S)`);
844 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
845 SET_RULE `v IN {a,b} <=> v = a \/ v = b`]);
847 (NEW_GOAL `u0 IN voronoi_closed V (u1:real^3)`);
849 (UP_ASM_TAC THEN REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
851 (NEW_GOAL `dist (u0,u1) <= dist (u0,u0:real^3)`);
852 (FIRST_ASSUM MATCH_MP_TAC);
854 (UP_ASM_TAC THEN REWRITE_TAC[DIST_REFL; REAL_ARITH `~(a <= b) <=> b < a`]);
855 (MATCH_MP_TAC DIST_POS_LT);
859 (REWRITE_WITH `(f:real^3->real) u0 = t`);
867 (REWRITE_WITH `(f:real^3->real) y = h`);
871 (NEW_GOAL `~(u0:real^3 IN S)`);
873 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
874 SET_RULE `v IN {a,b} <=> v = a \/ v = b`]);
876 (NEW_GOAL `u0 IN voronoi_closed V (u1:real^3)`);
878 (UP_ASM_TAC THEN REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
880 (NEW_GOAL `dist (u0,u1) <= dist (u0,u0:real^3)`);
881 (FIRST_ASSUM MATCH_MP_TAC);
883 (UP_ASM_TAC THEN REWRITE_TAC[DIST_REFL; REAL_ARITH `~(a <= b) <=> b < a`]);
884 (MATCH_MP_TAC DIST_POS_LT);
898 (NEW_GOAL `~({y:real^3} u0)`);
899 (REWRITE_WITH `~({y} u0) <=> ~(u0:real^3 IN {y})`);
901 (REWRITE_TAC[IN_SING]);
904 (NEW_GOAL `~(u0:real^3 IN S)`);
906 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
907 SET_RULE `v IN {a,b} <=> v = a \/ v = b`]);
910 (NEW_GOAL `u0 IN voronoi_closed V (u1:real^3)`);
912 (UP_ASM_TAC THEN REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
914 (NEW_GOAL `dist (u0,u1) <= dist (u0,u0:real^3)`);
915 (FIRST_ASSUM MATCH_MP_TAC);
917 (UP_ASM_TAC THEN REWRITE_TAC[DIST_REFL; REAL_ARITH `~(a <= b) <=> b < a`]);
918 (MATCH_MP_TAC DIST_POS_LT);
925 (ASM_REAL_ARITH_TAC);
928 (REWRITE_TAC[SET_RULE `{a} UNION {b} = {a,b}`]);
929 (REWRITE_WITH `sum {u0:real^3, y} f = f u0 + f y`);
930 (MATCH_MP_TAC Geomdetail.SUM_DIS2);
932 (NEW_GOAL `~(u0:real^3 IN S)`);
934 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
935 SET_RULE `v IN {a,b} <=> v = a \/ v = b`]);
937 (NEW_GOAL `u0 IN voronoi_closed V (u1:real^3)`);
939 (UP_ASM_TAC THEN REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
941 (NEW_GOAL `dist (u0,u1) <= dist (u0,u0:real^3)`);
942 (FIRST_ASSUM MATCH_MP_TAC);
944 (UP_ASM_TAC THEN REWRITE_TAC[DIST_REFL; REAL_ARITH `~(a <= b) <=> b < a`]);
945 (MATCH_MP_TAC DIST_POS_LT);
949 (REWRITE_WITH `(f:real^3->real) u0 = t`);
957 (REWRITE_WITH `(f:real^3->real) y = h`);
961 (NEW_GOAL `~(u0:real^3 IN S)`);
963 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
964 SET_RULE `v IN {a,b} <=> v = a \/ v = b`]);
966 (NEW_GOAL `u0 IN voronoi_closed V (u1:real^3)`);
968 (UP_ASM_TAC THEN REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
970 (NEW_GOAL `dist (u0,u1) <= dist (u0,u0:real^3)`);
971 (FIRST_ASSUM MATCH_MP_TAC);
973 (UP_ASM_TAC THEN REWRITE_TAC[DIST_REFL; REAL_ARITH `~(a <= b) <=> b < a`]);
974 (MATCH_MP_TAC DIST_POS_LT);
987 (NEW_GOAL `y:real^3 IN S2`);
989 (NEW_GOAL `y:real^3 IN S1`);
990 (NEW_GOAL `y:real^3 IN affine hull S`);
991 (REWRITE_TAC[AFFINE_HULL_EXPLICIT_ALT]);
992 (REWRITE_TAC[IN; IN_ELIM_THM]);
993 (EXISTS_TAC `s DELETE u0:real^3`);
994 (EXISTS_TAC `(\v:real^3. inv h * u v)`);
996 (ASM_REWRITE_TAC[FINITE_DELETE]);
998 (REWRITE_TAC[SUM_LMUL]);
1000 (ASM_SIMP_TAC[Trigonometry2.REAL_MUL_LRINV;
1001 REAL_ARITH `~(h <= &0) ==> ~(h = &0)`]);
1002 (REWRITE_TAC[GSYM VECTOR_MUL_ASSOC]);
1003 (ASM_SIMP_TAC[VSUM_LMUL; FINITE_DELETE]);
1004 (NEW_GOAL `affine hull S1 = S1:real^3->bool`);
1005 (REWRITE_TAC[AFFINE_HULL_EQ]);
1006 (EXPAND_TAC "S1" THEN REWRITE_TAC[AFFINE_HYPERPLANE]);
1008 (NEW_GOAL `affine hull S SUBSET affine hull (S1:real^3->bool)`);
1009 (MATCH_MP_TAC Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA);
1011 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
1012 SET_RULE `INTERS {f x | x IN {a, b}} = f a INTER f b`]);
1013 (DEL_TAC THEN EXPAND_TAC "S1");
1014 (MATCH_MP_TAC Pack2.INTER_VORONOI_SUBSET_BISECTOR);
1015 (ASM_REWRITE_TAC[]);
1018 (NEW_GOAL `relative_interior S SUBSET S:real^3->bool`);
1019 (REWRITE_TAC[RELATIVE_INTERIOR_SUBSET]);
1023 (* ========================================================================= *)
1025 (NEW_GOAL `dist (z,u0) <= dist (y,u0:real^3)`);
1026 (ONCE_REWRITE_TAC[DIST_SYM]);
1028 (UNDISCH_TAC `x:real^3 IN rcone_gt u0 u1 a`);
1029 (REWRITE_TAC[rcone_gt; rconesgn; IN; IN_ELIM_THM]);
1030 (ASM_REWRITE_TAC[]);
1031 (REWRITE_WITH `dist (t % u0 + h % y,u0) = h * dist (y, u0:real^3)`);
1032 (REWRITE_TAC[dist]);
1033 (REWRITE_WITH `(t % u0 + h % y:real^3) - u0 = (t % u0 + h % y) - (t + h) % u0`);
1034 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
1035 (REWRITE_TAC[VECTOR_ARITH `(t % u0 + h % y) - (t + h) % u0 = h % (y - u0)`]);
1036 (REWRITE_TAC[NORM_MUL]);
1037 (REWRITE_WITH `abs h = h`);
1038 (REWRITE_TAC[REAL_ABS_REFL]);
1039 (ASM_REAL_ARITH_TAC);
1041 (REWRITE_TAC[REAL_ARITH `~(a > b) <=> a <= b`]);
1042 (REWRITE_WITH `h * dist (p,u0:real^3) * dist (u1,u0) =
1043 (h * dist (z,u0)) * dist (u1,u0) * a`);
1045 (REWRITE_TAC[REAL_ARITH `(a * b) * c * d / b = (a * d * c) * (b / b)`]);
1046 (REWRITE_WITH `dist (z,u0) / dist (z,u0:real^3) = &1`);
1047 (MATCH_MP_TAC REAL_DIV_REFL);
1048 (REWRITE_TAC[DIST_EQ_0]);
1051 (NEW_GOAL `~(u0:real^3 IN S1)`);
1052 (EXPAND_TAC "S1" THEN REWRITE_TAC[IN; IN_ELIM_THM; NORM_POW_2]);
1053 (REWRITE_TAC[REAL_ARITH `a = b - c <=> a + c - b = &0`]);
1054 (REWRITE_TAC[VECTOR_ARITH `&2 % (u0 - u1) dot u0 + u1 dot u1 - u0 dot u0 =
1055 (u0 - u1) dot (u0 - u1)`]);
1056 (REWRITE_TAC[DOT_EQ_0; VECTOR_ARITH `a - b = vec 0 <=> a = b`]);
1057 (ASM_REWRITE_TAC[]);
1058 (NEW_GOAL `z:real^3 IN S1`);
1063 (REWRITE_TAC[REAL_ARITH
1064 `(a * x) * b * c <= (a * y) * b * c <=> &0 <= a * b * c *(y - x)`]);
1065 (MATCH_MP_TAC REAL_LE_MUL);
1067 (ASM_REAL_ARITH_TAC);
1068 (MATCH_MP_TAC REAL_LE_MUL);
1069 (REWRITE_TAC[DIST_POS_LE]);
1070 (MATCH_MP_TAC REAL_LE_MUL);
1072 (ASM_REAL_ARITH_TAC);
1073 (ASM_REAL_ARITH_TAC);
1075 (UP_ASM_TAC THEN STRIP_TAC);
1077 (ABBREV_TAC `W = aff_ge_alt {u0:real^3} S`);
1078 (ABBREV_TAC `c = max b (hl[u0;u1:real^3] / sqrt (&2))`);
1079 (NEW_GOAL `&0 < c /\ c < &1`);
1080 (EXPAND_TAC "c" THEN REWRITE_TAC[REAL_LT_MAX]);
1081 (ASM_REWRITE_TAC[]);
1082 (EXPAND_TAC "c" THEN REWRITE_TAC[REAL_MAX_LT]);
1084 (ASM_REWRITE_TAC[]);
1085 (REWRITE_WITH `hl [u0; u1:real^3] / sqrt (&2) < &1 <=>
1086 hl [u0; u1] < &1 * sqrt (&2)`);
1087 (MATCH_MP_TAC REAL_LT_LDIV_EQ);
1088 (ASM_SIMP_TAC[SQRT_POS_LT; REAL_ARITH `&0 < &2`]);
1089 (ASM_REAL_ARITH_TAC);
1091 (NEW_GOAL `rcone_gt u0 u1 c SUBSET
1092 W INTER (rcone_gt u0 u1 (hl [u0; u1:real^3] / sqrt (&2)))`);
1093 (REWRITE_TAC[SUBSET_INTER]);
1095 (NEW_GOAL `rcone_gt (u0:real^3) u1 c SUBSET rcone_gt u0 u1 b`);
1096 (MATCH_MP_TAC RCONE_GT_SUBSET);
1097 (EXPAND_TAC "c" THEN REAL_ARITH_TAC);
1099 (MATCH_MP_TAC RCONE_GT_SUBSET);
1100 (EXPAND_TAC "c" THEN REAL_ARITH_TAC);
1102 (ABBREV_TAC `C = ball (u0:real^3,&1) INTER rcone_gt u0 u1 c`);
1105 {rogers V vl | vl | barV V 3 vl /\ truncate_simplex 1 vl = [u0; u1]}`);
1106 (REWRITE_TAC[SUBSET]);
1108 (NEW_GOAL `x IN ball (u0:real^3,&1) /\ x IN aff_ge_alt {u0} S`);
1110 (UP_ASM_TAC THEN STRIP_TAC);
1113 (* ===========================================================================*)
1115 (NEW_GOAL `(x:real^3) IN convex hull (u0 INSERT S)`);
1116 (REWRITE_TAC[CONVEX_HULL_EXPLICIT; IN; IN_ELIM_THM]);
1118 (UP_ASM_TAC THEN REWRITE_TAC[IN; aff_ge_alt; lin_combo]);
1120 (EXISTS_TAC `{u0:real^3} UNION q`);
1121 (EXISTS_TAC `f:real^3->real`);
1123 (REWRITE_TAC[SET_RULE `{a} UNION b = a INSERT b`; FINITE_INSERT]);
1124 (ASM_REWRITE_TAC[]);
1126 (ASM_CASES_TAC `x':real^3 IN q`);
1127 (FIRST_ASSUM MATCH_MP_TAC);
1128 (UP_ASM_TAC THEN MESON_TAC[IN]);
1129 (REWRITE_WITH `x' = u0:real^3`);
1130 (NEW_GOAL `x' IN ({u0:real^3} UNION q)`);
1131 (ASM_REWRITE_TAC[IN]);
1132 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
1133 (REWRITE_TAC[REAL_ARITH `&0 <= x <=> ~(x < &0)`]);
1135 (UNDISCH_TAC `x IN ball (u0:real^3,&1)`);
1136 (ASM_REWRITE_TAC[IN_BALL; SET_RULE `{u} UNION q = u INSERT (q DELETE u)`]);
1137 (REWRITE_WITH `vsum (u0 INSERT (q DELETE u0:real^3)) (\v. f v % v) =
1138 (if u0 IN (q DELETE u0) then vsum (q DELETE u0) (\v. f v % v)
1139 else (\v. f v % v) u0 + vsum (q DELETE u0) (\v. f v % v))`);
1140 (MATCH_MP_TAC Marchal_cells_2_new.VSUM_CLAUSES_alt);
1141 (ASM_REWRITE_TAC[FINITE_DELETE]);
1144 (UP_ASM_TAC THEN SET_TAC[]);
1146 (ONCE_REWRITE_TAC[DIST_SYM]);
1147 (REWRITE_TAC[dist]);
1148 (REWRITE_WITH `!a. a - u0 = a - (sum ({u0:real^3} UNION q) f) % u0`);
1149 (ASM_REWRITE_TAC[]);
1153 (NEW_GOAL `sum ({u0} UNION q) f = f u0 + sum (q DELETE u0:real^3) f`);
1154 (REWRITE_TAC[SET_RULE `{u} UNION q = u INSERT (q DELETE u)`]);
1155 (REWRITE_WITH `sum (u0 INSERT (q DELETE u0:real^3)) f =
1156 (if u0 IN (q DELETE u0) then sum (q DELETE u0) f
1157 else f u0 + sum (q DELETE u0) f)`);
1158 (MATCH_MP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
1159 (ASM_REWRITE_TAC[FINITE_DELETE]);
1162 (UP_ASM_TAC THEN SET_TAC[]);
1164 (ASM_REWRITE_TAC[]);
1165 (REWRITE_TAC[VECTOR_ADD_RDISTRIB;
1166 VECTOR_ARITH `(a + b) - (a + c:real^3) = b - c`;
1167 ASSUME `sum ({u0} UNION q) f = f u0 + sum (q DELETE u0:real^3) f`; ]);
1168 (ABBREV_TAC `h = sum (q DELETE u0:real^3) f`);
1169 (ABBREV_TAC `y = inv (h) % vsum (q DELETE u0) (\v:real^3. f v % v)`);
1170 (NEW_GOAL `h > &1`);
1171 (ASM_REAL_ARITH_TAC);
1172 (REWRITE_WITH `vsum (q DELETE u0) (\v. f v % v) = h % y:real^3`);
1174 (REWRITE_TAC[VECTOR_MUL_ASSOC]);
1175 (REWRITE_WITH `h * inv h = &1`);
1176 (ASM_SIMP_TAC [Trigonometry2.REAL_MUL_LRINV; REAL_ARITH `h > &1 ==> ~(h = &0)`]);
1178 (REWRITE_TAC[VECTOR_ARITH `h % a - h % b = h % (a - b)`; NORM_MUL]);
1179 (REWRITE_TAC[REAL_ARITH `~(a < b) <=> b <= a`]);
1181 (NEW_GOAL `norm (p - u0) <= norm (y - u0:real^3)`);
1182 (MATCH_MP_TAC Tactics_jordan.REAL_POW_2_LE);
1183 (REWRITE_TAC[NORM_POS_LE]);
1185 `norm (y - u0) pow 2 = norm (p - u0) pow 2 + norm (y - p:real^3) pow 2`);
1186 (MATCH_MP_TAC PYTHAGORAS);
1187 (REWRITE_TAC[orthogonal]);
1188 (REWRITE_WITH `p = circumcenter (set_of_list [u0;u1:real^3])`);
1189 (ASM_REWRITE_TAC[set_of_list]);
1190 (ONCE_REWRITE_TAC[DOT_SYM]);
1191 (MATCH_MP_TAC Rogers.MHFTTZN4);
1192 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `1`);
1194 (ASM_REWRITE_TAC[]);
1195 (ASM_REWRITE_TAC[]);
1197 (REWRITE_TAC[ASSUME `voronoi_list V [u0; u1] = S`]);
1198 (REWRITE_TAC[AFFINE_HULL_EXPLICIT_ALT; IN; IN_ELIM_THM]);
1199 (EXISTS_TAC `q DELETE u0:real^3`);
1200 (EXISTS_TAC `(\v:real^3. inv h * f v)`);
1202 (ASM_REWRITE_TAC[FINITE_DELETE]);
1204 (ASM_REWRITE_TAC[SUM_LMUL]);
1205 (ASM_SIMP_TAC [Trigonometry2.REAL_MUL_LRINV; REAL_ARITH `h > &1 ==> ~(h = &0)`]);
1206 (REWRITE_TAC[GSYM VECTOR_MUL_ASSOC]);
1207 (ASM_REWRITE_TAC[VSUM_LMUL]);
1209 (REWRITE_TAC[set_of_list]);
1210 (NEW_GOAL `{u0, u1:real^3} SUBSET affine hull {u0, u1}`);
1211 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
1213 (REWRITE_TAC[REAL_ARITH `a <= a + b <=> &0 <= b`; NORM_POW_2; DOT_POS_LE]);
1215 (NEW_GOAL `&1 <= norm (p - u0:real^3)`);
1217 (REWRITE_TAC[CIRCUMCENTER_2; midpoint;
1218 VECTOR_ARITH `inv (&2) % (u0 + u1) - u0 = inv (&2) % (u1 - u0)`;
1219 NORM_MUL; REAL_ARITH `abs (inv(&2)) = inv (&2)`]);
1220 (REWRITE_TAC[GSYM dist]);
1221 (REWRITE_WITH `&1 = inv (&2) * &2`);
1223 (REWRITE_TAC[REAL_ARITH `inv (&2) * &2 <= inv (&2) * a <=> &2 <= a`]);
1224 (MP_TAC (ASSUME `packing (V:real^3->bool)`));
1225 (REWRITE_TAC[packing] THEN STRIP_TAC);
1226 (FIRST_ASSUM MATCH_MP_TAC);
1227 (ASM_REWRITE_TAC[] THEN ASM_SET_TAC[]);
1228 (REWRITE_WITH `abs h = h`);
1229 (ASM_REAL_ARITH_TAC);
1231 (NEW_GOAL `h <= h * norm (y - u0:real^3)`);
1232 (REWRITE_TAC[REAL_ARITH `h <= h * a <=> &0 <= h * (a - &1)`]);
1233 (MATCH_MP_TAC REAL_LE_MUL);
1234 (ASM_REAL_ARITH_TAC);
1235 (ASM_REAL_ARITH_TAC);
1237 (ASM_REWRITE_TAC[]);
1238 (ASM_REWRITE_TAC[]);
1240 (* ========================================================================== *)
1241 (NEW_GOAL `~(S:real^3->bool = {})`);
1243 (NEW_GOAL `~(aff_dim (u0:real^3 INSERT S) = &3)`);
1244 (REWRITE_TAC[ASSUME `S:real^3->bool = {}`; AFF_DIM_SING]);
1248 (UP_ASM_TAC THEN SIMP_TAC[CONVEX_HULL_INSERT;
1249 ASSUME `~(S:real^3->bool = {})`]);
1250 (REWRITE_WITH `convex hull S = S:real^3->bool`);
1251 (REWRITE_TAC[CONVEX_HULL_EQ]);
1252 (EXPAND_TAC "S" THEN REWRITE_TAC[Packing3.CONVEX_VORONOI_LIST]);
1253 (ASM_REWRITE_TAC[]);
1254 (REWRITE_TAC[IN_UNIONS; IN; IN_ELIM_THM]);
1257 (EXISTS_TAC `rogers V vl`);
1259 (EXISTS_TAC `vl:(real^3)list`);
1260 (ASM_REWRITE_TAC[]);
1262 (ASM_SIMP_TAC[Marchal_cells_2_new.ROGERS_EXPLICIT]);
1263 (REWRITE_TAC[CONVEX_HULL_4; IN_ELIM_THM]);
1265 (UNDISCH_TAC `(t:real^3->bool) b'`);
1266 (ASM_REWRITE_TAC[CONVEX_HULL_3; IN_ELIM_THM]);
1269 (EXISTS_TAC `u:real`);
1270 (EXISTS_TAC `v * u'`);
1271 (EXISTS_TAC `v * v'`);
1272 (EXISTS_TAC `v * w`);
1273 (ASM_SIMP_TAC[REAL_LE_MUL]);
1276 (REWRITE_TAC[REAL_ARITH `u + v * u' + v * v' + v * w = u + v * (u' + v' +w)`]);
1277 (ASM_REWRITE_TAC[]);
1278 (ASM_REAL_ARITH_TAC);
1280 (REWRITE_WITH `(HD vl):real^3 = HD (truncate_simplex 1 vl)`);
1281 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
1282 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
1283 (REWRITE_WITH `LENGTH (vl:(real^3)list) = 3 + 1 /\ CARD (set_of_list vl) = 3 + 1`);
1284 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
1285 (EXISTS_TAC `V:real^3->bool`);
1286 (ASM_REWRITE_TAC[]);
1289 (ASM_REWRITE_TAC[HD]);
1292 (* ========================================================================= *)
1293 (* ========================================================================== *)
1296 `!X. mcell_set V X /\ ~NULLSET (X INTER C)
1301 truncate_simplex 1 vl = [u0; u1])`);
1303 (REWRITE_TAC[mcell_set_2; IN_ELIM_THM]);
1306 (NEW_GOAL `~NULLSET (X INTER UNIONS
1307 {rogers V vl | vl | barV V 3 vl /\ truncate_simplex 1 vl = [u0; u1]})`);
1309 (UNDISCH_TAC `~NULLSET (X INTER C)`);
1311 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1312 (EXISTS_TAC `X INTER
1314 {rogers V vl | vl | barV V 3 vl /\ truncate_simplex 1 vl = [u0; u1]}`);
1316 (ASM_REWRITE_TAC[]);
1318 (UP_ASM_TAC THEN REWRITE_TAC[INTER_UNIONS]);
1322 `!s. ~NULLSET (UNIONS s) /\ FINITE s ==> (?t. t IN s /\ ~NULLSET t)`);
1323 (MESON_TAC[NEGLIGIBLE_UNIONS]);
1324 (ABBREV_TAC `St = {X INTER x | x IN
1325 {rogers V vl | vl | barV V 3 vl /\
1326 truncate_simplex 1 vl = [u0; u1]}}`);
1327 (NEW_GOAL `?t. t IN St /\ ~NULLSET t`);
1328 (FIRST_ASSUM MATCH_MP_TAC);
1329 (ASM_REWRITE_TAC[]);
1331 (ABBREV_TAC `Sr = {rogers V vl | vl | barV V 3 vl /\
1332 truncate_simplex 1 vl = [u0; u1]}`);
1333 (ABBREV_TAC `f = (\x:real^3->bool. X INTER x)`);
1334 (MATCH_MP_TAC FINITE_SUBSET);
1335 (EXISTS_TAC `{y:real^3->bool | ?x:real^3->bool. x IN Sr /\ y = f x }`);
1340 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
1341 (ABBREV_TAC `Ss = {vl | barV V 3 vl /\ truncate_simplex 1 vl = [u0; u1]}`);
1342 (MATCH_MP_TAC FINITE_SUBSET);
1343 (EXISTS_TAC `{y | ?vl. vl IN Ss /\ y = rogers V vl}`);
1345 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
1346 (ABBREV_TAC `Sx = V INTER ball (u0:real^3, &4)`);
1347 (MATCH_MP_TAC FINITE_SUBSET);
1348 (EXISTS_TAC `{y | ?u0 u1 u2 u3:real^3.
1353 y = [u0; u1; u2; u3]}`);
1355 (MATCH_MP_TAC Ajripqn.FINITE_SET_LIST_LEMMA);
1357 (MATCH_MP_TAC Pack2.KIUMVTC);
1358 (ASM_REWRITE_TAC[]);
1360 (REWRITE_TAC[SUBSET; IN; IN_ELIM_THM]);
1363 (NEW_GOAL `?v0 v1 v2 v3. x = [v0;v1;v2;v3:real^3]`);
1364 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
1365 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1366 (UP_ASM_TAC THEN STRIP_TAC);
1367 (EXISTS_TAC `v0:real^3`);
1368 (EXISTS_TAC `v1:real^3`);
1369 (EXISTS_TAC `v2:real^3`);
1370 (EXISTS_TAC `v3:real^3`);
1371 (ASM_REWRITE_TAC[]);
1373 (NEW_GOAL `{v0, v1, v2, v3:real^3} SUBSET Sx`);
1375 (REWRITE_TAC[SUBSET_INTER]);
1376 (REWRITE_WITH `{v0, v1, v2, v3:real^3} = set_of_list x`);
1377 (ASM_REWRITE_TAC[set_of_list]);
1379 (MATCH_MP_TAC Packing3.BARV_SUBSET);
1380 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
1381 (MATCH_MP_TAC Qzyzmjc.BARV_3_IMP_FINITE_lemma2);
1382 (EXISTS_TAC `V:real^3->bool`);
1383 (ASM_REWRITE_TAC[]);
1384 (NEW_GOAL `HD (truncate_simplex 1 x) = u0:real^3`);
1385 (ASM_REWRITE_TAC[HD]);
1386 (NEW_GOAL `HD (truncate_simplex 1 x) = v0:real^3`);
1387 (REWRITE_TAC[ASSUME `x = [v0; v1; v2; v3:real^3]`;
1388 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
1389 (REWRITE_WITH `u0 = v0:real^3`);
1391 (REWRITE_TAC[set_of_list] THEN SET_TAC[]);
1392 (UP_ASM_TAC THEN SET_TAC[]);
1394 (EXPAND_TAC "Sr" THEN EXPAND_TAC "Ss");
1396 (REWRITE_WITH `{X INTER x:real^3->bool | x IN Sr} = {f x | x IN Sr}`);
1400 (UP_ASM_TAC THEN EXPAND_TAC "St" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
1403 (NEW_GOAL `x SUBSET UNIONS {mcell i V vl | i <= 4}`);
1404 (ASM_REWRITE_TAC[SUBSET; IN_UNIONS; IN; IN_ELIM_THM]);
1406 (NEW_GOAL `?i. i <= 4 /\ x' IN mcell i V vl`);
1407 (MATCH_MP_TAC Sltstlo.SLTSTLO1);
1408 (ASM_REWRITE_TAC[IN]);
1409 (UP_ASM_TAC THEN STRIP_TAC);
1410 (EXISTS_TAC `mcell i' V vl`);
1412 (EXISTS_TAC `i':num` THEN ASM_REWRITE_TAC[]);
1413 (UP_ASM_TAC THEN REWRITE_TAC[IN]);
1415 (NEW_GOAL `~NULLSET (X INTER UNIONS {mcell i V vl | i <= 4})`);
1417 (UNDISCH_TAC `~NULLSET (t)`);
1418 (REWRITE_TAC[ASSUME `t:real^3->bool = X INTER x`]);
1419 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1420 (EXISTS_TAC `X INTER UNIONS {mcell i V vl | i <= 4}`);
1422 (ASM_REWRITE_TAC[]);
1424 (UP_ASM_TAC THEN REWRITE_TAC[INTER_UNIONS]);
1428 `!s. ~NULLSET (UNIONS s) /\ FINITE s ==> (?t. t IN s /\ ~NULLSET t)`);
1429 (MESON_TAC[NEGLIGIBLE_UNIONS]);
1430 (ABBREV_TAC `Sx = {X INTER x | x IN {mcell i V vl | i <= 4}}`);
1431 (NEW_GOAL `?t. t IN Sx /\ ~NULLSET t`);
1432 (FIRST_ASSUM MATCH_MP_TAC);
1433 (ASM_REWRITE_TAC[]);
1435 (ABBREV_TAC `Sy = {mcell i V vl | i <= 4}`);
1436 (ABBREV_TAC `f = (\x:real^3->bool. X INTER x)`);
1437 (MATCH_MP_TAC FINITE_SUBSET);
1438 (EXISTS_TAC `{y:real^3->bool | ?x:real^3->bool. x IN Sy /\ y = f x }`);
1440 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
1442 (REWRITE_TAC[GSYM IN_NUMSEG_0]);
1443 (ABBREV_TAC `g = (\i:num. mcell i V vl)`);
1444 (REWRITE_WITH `{mcell i V vl | i IN 0..4} = {g i | i IN 0..4}`);
1445 (EXPAND_TAC "g" THEN REWRITE_TAC[]);
1446 (MATCH_MP_TAC FINITE_SUBSET);
1447 (EXISTS_TAC `{y:real^3->bool | ?i. i IN 0..4 /\ y = g i}`);
1449 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
1450 (REWRITE_TAC[FINITE_NUMSEG]);
1452 (REWRITE_WITH `{X INTER x:real^3->bool | x IN Sy} = {f x | x IN Sy}`);
1453 (EXPAND_TAC "f" THEN REWRITE_TAC[]);
1455 (UP_ASM_TAC THEN EXPAND_TAC "Sx" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
1458 (* ========================================================================= *)
1460 (NEW_GOAL `i = i' /\ mcell i V ul = mcell i' V vl`);
1461 (MATCH_MP_TAC Ajripqn.AJRIPQN);
1462 (ASM_REWRITE_TAC[GSYM Ajripqn.UP_TO_4_KY_LEMMA]);
1464 (UNDISCH_TAC `ul IN barV V 3` THEN REWRITE_TAC[IN]);
1465 (UNDISCH_TAC `~NULLSET t'`);
1466 (ASM_REWRITE_TAC[]);
1467 (EXISTS_TAC `i:num` THEN EXISTS_TAC `vl:(real^3)list`);
1468 (ASM_REWRITE_TAC[]);
1470 (* ========================================================================= *)
1472 (ASM_CASES_TAC `i' = 0`);
1474 (UNDISCH_TAC `~NULLSET (X INTER C)`);
1476 (REWRITE_WITH `X INTER C = {}:real^3->bool`);
1477 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell0]);
1478 (REWRITE_WITH `(HD vl):real^3 = HD (truncate_simplex 1 vl)`);
1479 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
1480 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
1481 (REWRITE_WITH `LENGTH (vl:(real^3)list) = 3 + 1 /\ CARD (set_of_list vl) = 3 + 1`);
1482 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
1483 (EXISTS_TAC `V:real^3->bool`);
1484 (ASM_REWRITE_TAC[]);
1486 (ASM_REWRITE_TAC[HD]);
1487 (NEW_GOAL `C SUBSET ball (u0:real^3, sqrt (&2))`);
1488 (NEW_GOAL `ball (u0:real^3, &1) SUBSET ball (u0, sqrt (&2))`);
1489 (MATCH_MP_TAC SUBSET_BALL);
1490 (MATCH_MP_TAC (REAL_ARITH `a < b ==> a <= b`));
1491 (REWRITE_TAC[Marchal_cells_2_new.ZERO_LT_SQRT_2]);
1493 (UP_ASM_TAC THEN SET_TAC[]);
1494 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
1497 (ASM_CASES_TAC `i' = 1`);
1499 (UNDISCH_TAC `~NULLSET (X INTER C)`);
1501 (REWRITE_WITH `X INTER C = {}:real^3->bool`);
1502 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell1]);
1504 (NEW_GOAL `?v0 v1 v2 v3. vl = [v0;v1;v2;v3:real^3]`);
1505 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
1506 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1507 (UP_ASM_TAC THEN STRIP_TAC);
1508 (ASM_REWRITE_TAC[HD; TL]);
1510 (REWRITE_WITH `v0 = u0:real^3`);
1511 (NEW_GOAL `HD (truncate_simplex 1 vl) = u0:real^3`);
1512 (ASM_REWRITE_TAC[HD]);
1513 (NEW_GOAL `HD (truncate_simplex 1 vl) = v0:real^3`);
1514 (REWRITE_TAC[ASSUME `vl = [v0; v1; v2; v3:real^3]`;
1515 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
1518 (REWRITE_WITH `v1 = u1:real^3`);
1519 (NEW_GOAL `HD (TL(truncate_simplex 1 vl)) = u1:real^3`);
1520 (ASM_REWRITE_TAC[HD; TL]);
1521 (NEW_GOAL `HD (TL(truncate_simplex 1 vl)) = v1:real^3`);
1522 (REWRITE_TAC[ASSUME `vl = [v0; v1; v2; v3:real^3]`;
1523 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
1526 (NEW_GOAL `C SUBSET (rcone_gt u0 u1 (hl [u0:real^3; u1] / sqrt (&2)))`);
1528 (SET_TAC[ASSUME `rcone_gt u0 u1 c SUBSET
1529 W INTER rcone_gt u0 u1 (hl [u0:real^3; u1] / sqrt (&2))`]);
1530 (UP_ASM_TAC THEN SET_TAC[]);
1532 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
1533 (UP_ASM_TAC THEN MESON_TAC[]);
1536 (* ========================================================================= *)
1539 (\ul. dist (u0:real^3,
1540 closest_point (affine hull {u1, EL 2 ul, mxi V ul}) u0))`);
1542 (ABBREV_TAC `P1 = { (f1:(real^3)list->real) ul |ul | barV V 3 ul /\
1543 ~NULLSET (mcell 3 V ul INTER C) /\
1544 truncate_simplex 1 ul = [u0; u1]}`);
1546 (NEW_GOAL `~(P1 = {}) ==> (?b:real. b IN P1 /\ (!x. x IN P1 ==> b <= x))`);
1548 (MATCH_MP_TAC INF_FINITE_LEMMA);
1549 (ASM_REWRITE_TAC[]);
1551 (ONCE_REWRITE_TAC [SET_RULE `{f x| x | P x} = {f x | x IN {y | P y}}`]);
1552 (ONCE_REWRITE_TAC [SET_RULE `{f x| x IN s} = {y | ?x. x IN s /\ y = f x}`]);
1553 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
1554 (MATCH_MP_TAC FINITE_SUBSET);
1555 (EXISTS_TAC `{y | ?v0:real^3 v1 u2 u3.
1556 v0 IN (V INTER ball (u0:real^3, &4)) /\
1557 v1 IN (V INTER ball (u0, &4)) /\
1558 u2 IN (V INTER ball (u0, &4)) /\
1559 u3 IN (V INTER ball (u0, &4)) /\
1560 y = [v0; v1; u2; u3]}`);
1562 (MATCH_MP_TAC FINITE_SET_LIST_LEMMA);
1563 (ASM_SIMP_TAC[FINITE_PACK_LEMMA]);
1564 (REWRITE_TAC[SUBSET] THEN ONCE_REWRITE_TAC[IN] THEN REWRITE_TAC[IN_ELIM_THM]);
1566 (NEW_GOAL `?v0 v1 u2 u3. x = [v0; v1; u2; u3:real^3]`);
1567 (MATCH_MP_TAC BARV_3_EXPLICIT);
1568 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1569 (UP_ASM_TAC THEN STRIP_TAC);
1570 (EXISTS_TAC `v0:real^3` THEN EXISTS_TAC `v1:real^3` THEN
1571 EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3`);
1572 (ASM_REWRITE_TAC[]);
1573 (NEW_GOAL `v0 = u0:real^3`);
1574 (REWRITE_WITH `v0 = HD (x:(real^3)list)`);
1575 (ASM_REWRITE_TAC[HD]);
1576 (REWRITE_WITH `u0 = HD (truncate_simplex 1 (x:(real^3)list))`);
1577 (ASM_REWRITE_TAC[HD]);
1578 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
1579 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
1580 (NEW_GOAL `set_of_list x SUBSET ball (u0:real^3,&4)`);
1581 (MATCH_MP_TAC Qzyzmjc.BARV_3_IMP_FINITE_lemma2);
1582 (EXISTS_TAC `V:real^3->bool`);
1583 (ASM_REWRITE_TAC[set_of_list]);
1585 (NEW_GOAL `set_of_list x SUBSET V:real^3->bool`);
1586 (MATCH_MP_TAC Packing3.BARV_SUBSET);
1587 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
1588 (UP_ASM_TAC THEN UP_ASM_TAC THEN ASM_REWRITE_TAC[set_of_list]);
1591 (ABBREV_TAC `r1 = (if (P1 = {}:real->bool) then &1
1592 else (@b. b IN P1 /\ (!x. x IN P1 ==> b <= x)))`);
1593 (NEW_GOAL `&0 < r1`);
1597 (NEW_GOAL `?b:real. b IN P1 /\ (!x. x IN P1 ==> b <= x)`);
1599 (UP_ASM_TAC THEN STRIP_TAC);
1600 (ABBREV_TAC `P = (\b:real. b IN P1 /\ (!x. x IN P1 ==> b <= x))`);
1601 (ABBREV_TAC `zz = (@) (P:real->bool)`);
1602 (NEW_GOAL `(P:real->bool) zz`);
1604 (MATCH_MP_TAC SELECT_AX);
1605 (EXISTS_TAC `b':real`);
1606 (EXPAND_TAC "P" THEN ASM_REWRITE_TAC[]);
1607 (UP_ASM_TAC THEN EXPAND_TAC "P" THEN REWRITE_TAC[]);
1608 (EXPAND_TAC "P1" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
1610 (ASM_REWRITE_TAC[]);
1612 (MATCH_MP_TAC DIST_POS_LT);
1613 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
1614 (REWRITE_WITH `closest_point (affine hull {u1, EL 2 ul, mxi V ul}) u0 = u0
1615 <=> u0 IN (affine hull {u1:real^3, EL 2 ul, mxi V ul})`);
1616 (MATCH_MP_TAC CLOSEST_POINT_REFL);
1617 (REWRITE_TAC[CLOSED_AFFINE_HULL]);
1618 (REWRITE_TAC[AFFINE_HULL_EQ_EMPTY] THEN SET_TAC[]);
1620 (UNDISCH_TAC `~NULLSET (mcell 3 V ul INTER C)`);
1621 (REWRITE_TAC[] THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1622 (EXISTS_TAC `mcell 3 V ul`);
1623 (REWRITE_TAC[SET_RULE `A INTER B SUBSET A`]);
1624 (REWRITE_TAC[MCELL_EXPLICIT; mcell3]);
1627 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0;v1;v2;v3:real^3]`);
1628 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
1629 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1630 (UP_ASM_TAC THEN STRIP_TAC);
1631 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list]);
1633 (REWRITE_WITH `v0 = u0:real^3`);
1634 (NEW_GOAL `HD (truncate_simplex 1 ul) = u0:real^3`);
1635 (ASM_REWRITE_TAC[HD]);
1636 (NEW_GOAL `HD (truncate_simplex 1 ul) = v0:real^3`);
1637 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
1638 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
1641 (REWRITE_WITH `v1 = u1:real^3`);
1642 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = u1:real^3`);
1643 (ASM_REWRITE_TAC[HD; TL]);
1644 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = v1:real^3`);
1645 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
1646 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
1647 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
1648 (REWRITE_TAC[SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
1650 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1651 (EXISTS_TAC `affine hull {u0, u1, v2, mxi V [u0; u1; v2; v3]}`);
1652 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
1653 (REWRITE_WITH `affine hull {u0, u1, v2, mxi V [u0; u1; v2; v3]} =
1654 affine hull {u1, v2, mxi V [u0; u1; v2; v3]}`);
1655 (MATCH_MP_TAC AFFINE_HULL_3_INSERT);
1656 (REWRITE_WITH `affine hull {u1, v2, mxi V [u0; u1; v2; v3]} =
1657 affine hull {u1, EL 2 ul, mxi V ul}`);
1658 (ASM_REWRITE_TAC[EL; ARITH_RULE `2 = SUC 1 /\ 1 = SUC 0`; HD; TL]);
1660 (REWRITE_WITH `v0 = u0:real^3`);
1661 (NEW_GOAL `HD (truncate_simplex 1 ul) = u0:real^3`);
1662 (ASM_REWRITE_TAC[HD]);
1663 (NEW_GOAL `HD (truncate_simplex 1 ul) = v0:real^3`);
1664 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
1665 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
1668 (REWRITE_WITH `v1 = u1:real^3`);
1669 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = u1:real^3`);
1670 (ASM_REWRITE_TAC[HD; TL]);
1671 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = v1:real^3`);
1672 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
1673 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
1674 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
1675 (ASM_REWRITE_TAC[]);
1676 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
1677 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
1679 (* ========================================================================= *)
1682 (\ul. dist (u0:real^3,
1683 closest_point (affine hull {u1, EL 2 ul, EL 3 ul}) u0))`);
1685 (ABBREV_TAC `P2 = { (f2:(real^3)list->real) ul |ul | barV V 3 ul /\
1686 ~NULLSET (mcell 4 V ul INTER C) /\
1687 truncate_simplex 1 ul = [u0; u1]}`);
1689 (NEW_GOAL `~(P2 = {}) ==> (?b:real. b IN P2 /\ (!x. x IN P2 ==> b <= x))`);
1691 (MATCH_MP_TAC INF_FINITE_LEMMA);
1692 (ASM_REWRITE_TAC[]);
1694 (ONCE_REWRITE_TAC [SET_RULE `{f x| x | P x} = {f x | x IN {y | P y}}`]);
1695 (ONCE_REWRITE_TAC [SET_RULE `{f x| x IN s} = {y | ?x. x IN s /\ y = f x}`]);
1696 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
1697 (MATCH_MP_TAC FINITE_SUBSET);
1698 (EXISTS_TAC `{y | ?v0:real^3 v1 u2 u3.
1699 v0 IN (V INTER ball (u0:real^3, &4)) /\
1700 v1 IN (V INTER ball (u0, &4)) /\
1701 u2 IN (V INTER ball (u0, &4)) /\
1702 u3 IN (V INTER ball (u0, &4)) /\
1703 y = [v0; v1; u2; u3]}`);
1705 (MATCH_MP_TAC FINITE_SET_LIST_LEMMA);
1706 (ASM_SIMP_TAC[FINITE_PACK_LEMMA]);
1707 (REWRITE_TAC[SUBSET] THEN ONCE_REWRITE_TAC[IN] THEN REWRITE_TAC[IN_ELIM_THM]);
1709 (NEW_GOAL `?v0 v1 u2 u3. x = [v0; v1; u2; u3:real^3]`);
1710 (MATCH_MP_TAC BARV_3_EXPLICIT);
1711 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1712 (UP_ASM_TAC THEN STRIP_TAC);
1713 (EXISTS_TAC `v0:real^3` THEN EXISTS_TAC `v1:real^3` THEN
1714 EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3`);
1715 (ASM_REWRITE_TAC[]);
1716 (NEW_GOAL `v0 = u0:real^3`);
1717 (REWRITE_WITH `v0 = HD (x:(real^3)list)`);
1718 (ASM_REWRITE_TAC[HD]);
1719 (REWRITE_WITH `u0 = HD (truncate_simplex 1 (x:(real^3)list))`);
1720 (ASM_REWRITE_TAC[HD]);
1721 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
1722 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
1723 (NEW_GOAL `set_of_list x SUBSET ball (u0:real^3,&4)`);
1724 (MATCH_MP_TAC Qzyzmjc.BARV_3_IMP_FINITE_lemma2);
1725 (EXISTS_TAC `V:real^3->bool`);
1726 (ASM_REWRITE_TAC[set_of_list]);
1728 (NEW_GOAL `set_of_list x SUBSET V:real^3->bool`);
1729 (MATCH_MP_TAC Packing3.BARV_SUBSET);
1730 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
1731 (UP_ASM_TAC THEN UP_ASM_TAC THEN ASM_REWRITE_TAC[set_of_list]);
1734 (ABBREV_TAC `r2 = (if (P2 = {}:real->bool) then &1
1735 else (@b. b IN P2 /\ (!x. x IN P2 ==> b <= x)))`);
1737 (NEW_GOAL `&0 < r2`);
1741 (NEW_GOAL `?b:real. b IN P2 /\ (!x. x IN P2 ==> b <= x)`);
1743 (UP_ASM_TAC THEN STRIP_TAC);
1744 (ABBREV_TAC `P = (\b:real. b IN P2 /\ (!x. x IN P2 ==> b <= x))`);
1745 (ABBREV_TAC `zz = (@) (P:real->bool)`);
1746 (NEW_GOAL `(P:real->bool) zz`);
1748 (MATCH_MP_TAC SELECT_AX);
1749 (EXISTS_TAC `b':real`);
1750 (EXPAND_TAC "P" THEN ASM_REWRITE_TAC[]);
1751 (UP_ASM_TAC THEN EXPAND_TAC "P" THEN REWRITE_TAC[]);
1752 (EXPAND_TAC "P2" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
1754 (ASM_REWRITE_TAC[]);
1756 (MATCH_MP_TAC DIST_POS_LT);
1757 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
1758 (REWRITE_WITH `closest_point (affine hull {u1, EL 2 ul, EL 3 ul}) u0 = u0
1759 <=> u0 IN (affine hull {u1:real^3, EL 2 ul, EL 3 ul})`);
1760 (MATCH_MP_TAC CLOSEST_POINT_REFL);
1761 (REWRITE_TAC[CLOSED_AFFINE_HULL]);
1762 (REWRITE_TAC[AFFINE_HULL_EQ_EMPTY] THEN SET_TAC[]);
1764 (UNDISCH_TAC `~NULLSET (mcell 4 V ul INTER C)`);
1765 (REWRITE_TAC[] THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1766 (EXISTS_TAC `mcell 4 V ul`);
1767 (REWRITE_TAC[SET_RULE `A INTER B SUBSET A`]);
1768 (SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4]);
1771 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0;v1;v2;v3:real^3]`);
1772 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
1773 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1774 (UP_ASM_TAC THEN STRIP_TAC);
1775 (ASM_REWRITE_TAC[set_of_list]);
1777 (REWRITE_WITH `v0 = u0:real^3`);
1778 (NEW_GOAL `HD (truncate_simplex 1 ul) = u0:real^3`);
1779 (ASM_REWRITE_TAC[HD]);
1780 (NEW_GOAL `HD (truncate_simplex 1 ul) = v0:real^3`);
1781 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
1782 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
1783 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
1785 (REWRITE_WITH `v1 = u1:real^3`);
1786 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = u1:real^3`);
1787 (ASM_REWRITE_TAC[HD; TL]);
1788 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = v1:real^3`);
1789 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
1790 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
1791 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
1793 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1794 (EXISTS_TAC `affine hull {u0, u1, v2, v3:real^3}`);
1795 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
1796 (REWRITE_WITH `affine hull {u0, u1, v2, v3:real^3} =
1797 affine hull {u1, v2, v3}`);
1798 (MATCH_MP_TAC AFFINE_HULL_3_INSERT);
1799 (REWRITE_WITH `affine hull {u1, v2, v3:real^3} =
1800 affine hull {u1, EL 2 ul, EL 3 ul}`);
1801 (ASM_REWRITE_TAC[EL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`; HD; TL]);
1802 (ASM_REWRITE_TAC[]);
1804 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
1805 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
1807 (* ========================================================================= *)
1809 (ABBREV_TAC `r = min (&1) (min r1 r2)`);
1810 (NEW_GOAL `&0 < r`);
1812 (UNDISCH_TAC `&0 < r1` THEN UNDISCH_TAC `&0 < r2` THEN REAL_ARITH_TAC);
1814 (* ========================================================================= *)
1817 (\ul. (((smallest_angle_line (EL 2 ul) (mxi V ul) u0 u1) - u0)
1819 (norm ((smallest_angle_line (EL 2 ul) (mxi V ul) u0 u1) - u0)
1820 * norm (u1 - u0)))`);
1822 (ABBREV_TAC `P3 = {(f3:(real^3)list->real) ul |ul | barV V 3 ul /\
1823 ~NULLSET (mcell 3 V ul INTER C) /\
1824 truncate_simplex 1 ul = [u0; u1]}`);
1826 (NEW_GOAL `~(P3 = {}) ==> (?b:real. b IN P3 /\ (!x. x IN P3 ==> x <= b))`);
1828 (MATCH_MP_TAC SUP_FINITE_LEMMA);
1829 (ASM_REWRITE_TAC[]);
1831 (ONCE_REWRITE_TAC [SET_RULE `{f x| x | P x} = {f x | x IN {y | P y}}`]);
1832 (ONCE_REWRITE_TAC [SET_RULE `{f x| x IN s} = {y | ?x. x IN s /\ y = f x}`]);
1833 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
1834 (MATCH_MP_TAC FINITE_SUBSET);
1835 (EXISTS_TAC `{y | ?v0:real^3 v1 u2 u3.
1836 v0 IN (V INTER ball (u0:real^3, &4)) /\
1837 v1 IN (V INTER ball (u0, &4)) /\
1838 u2 IN (V INTER ball (u0, &4)) /\
1839 u3 IN (V INTER ball (u0, &4)) /\
1840 y = [v0; v1; u2; u3]}`);
1842 (MATCH_MP_TAC FINITE_SET_LIST_LEMMA);
1843 (ASM_SIMP_TAC[FINITE_PACK_LEMMA]);
1844 (REWRITE_TAC[SUBSET] THEN ONCE_REWRITE_TAC[IN] THEN REWRITE_TAC[IN_ELIM_THM]);
1846 (NEW_GOAL `?v0 v1 u2 u3. x = [v0; v1; u2; u3:real^3]`);
1847 (MATCH_MP_TAC BARV_3_EXPLICIT);
1848 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1849 (UP_ASM_TAC THEN STRIP_TAC);
1850 (EXISTS_TAC `v0:real^3` THEN EXISTS_TAC `v1:real^3` THEN
1851 EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3`);
1852 (ASM_REWRITE_TAC[]);
1853 (NEW_GOAL `v0 = u0:real^3`);
1854 (REWRITE_WITH `v0 = HD (x:(real^3)list)`);
1855 (ASM_REWRITE_TAC[HD]);
1856 (REWRITE_WITH `u0 = HD (truncate_simplex 1 (x:(real^3)list))`);
1857 (ASM_REWRITE_TAC[HD]);
1858 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
1859 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
1860 (NEW_GOAL `set_of_list x SUBSET ball (u0:real^3,&4)`);
1861 (MATCH_MP_TAC Qzyzmjc.BARV_3_IMP_FINITE_lemma2);
1862 (EXISTS_TAC `V:real^3->bool`);
1863 (ASM_REWRITE_TAC[set_of_list]);
1865 (NEW_GOAL `set_of_list x SUBSET V:real^3->bool`);
1866 (MATCH_MP_TAC Packing3.BARV_SUBSET);
1867 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
1868 (UP_ASM_TAC THEN UP_ASM_TAC THEN ASM_REWRITE_TAC[set_of_list]);
1871 (ABBREV_TAC `d1 = (if (P3 = {}:real->bool) then c
1872 else (@b. b IN P3 /\ (!x. x IN P3 ==> x <= b)))`);
1874 (NEW_GOAL `d1 < &1`);
1877 (ASM_REWRITE_TAC[]);
1878 (NEW_GOAL `?b:real. b IN P3 /\ (!x. x IN P3 ==> x <= b)`);
1880 (UP_ASM_TAC THEN STRIP_TAC);
1881 (ABBREV_TAC `P = (\b:real. b IN P3 /\ (!x. x IN P3 ==> x <= b))`);
1882 (ABBREV_TAC `zz = (@) (P:real->bool)`);
1883 (NEW_GOAL `(P:real->bool) zz`);
1885 (MATCH_MP_TAC SELECT_AX);
1886 (EXISTS_TAC `b':real`);
1887 (EXPAND_TAC "P" THEN ASM_REWRITE_TAC[]);
1888 (UP_ASM_TAC THEN EXPAND_TAC "P" THEN REWRITE_TAC[]);
1889 (EXPAND_TAC "P3" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
1891 (ASM_REWRITE_TAC[]);
1894 (ABBREV_TAC `xx = smallest_angle_line (EL 2 ul) (mxi V ul) u0 u1`);
1895 (MATCH_MP_TAC REAL_DIV_LT_1_TACTICS);
1897 (MATCH_MP_TAC (REAL_ARITH `&0 <= a /\ ~(a = &0) ==> &0 < a`));
1899 (SIMP_TAC[REAL_LE_MUL; NORM_POS_LE]);
1900 (REWRITE_TAC[REAL_ENTIRE; NORM_EQ_0; VECTOR_ARITH `a - b = vec 0 <=> a = b`]);
1901 (ASM_REWRITE_TAC[]);
1903 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN
1904 REWRITE_TAC[smallest_angle_line; smallest_angle_set]);
1906 (ABBREV_TAC `Q = (\x:real^3. x IN convex hull {EL 2 ul, mxi V ul} /\
1907 (!y. y IN convex hull {EL 2 ul, mxi V ul}
1908 ==> ((y - u0) dot (u1 - u0)) /
1909 (norm (y - u0) * norm (u1 - u0)) <=
1910 ((x - u0) dot (u1 - u0)) /
1911 (norm (x - u0) * norm (u1 - u0))))`);
1912 (NEW_GOAL `(Q:real^3->bool) u0`);
1913 (REWRITE_TAC[ASSUME `u0 = (@) (Q:real^3->bool)`]);
1914 (MATCH_MP_TAC SELECT_AX);
1916 (MATCH_MP_TAC SMALLEST_ANGLE_LINE_EXISTS);
1918 (ASM_REWRITE_TAC[]);
1920 (NEW_GOAL `?v1 v2 v3. ul = [u0; v1; v2; v3:real^3]`);
1921 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
1922 (MATCH_MP_TAC BARV_3_EXPLICIT);
1923 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1924 (UP_ASM_TAC THEN STRIP_TAC);
1925 (EXISTS_TAC `v1:real^3` THEN
1926 EXISTS_TAC `v2:real^3` THEN EXISTS_TAC `v3:real^3`);
1927 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
1929 (NEW_GOAL `v0 = u0:real^3`);
1930 (REWRITE_WITH `v0 = HD (ul:(real^3)list)`);
1931 (ASM_REWRITE_TAC[HD]);
1932 (REWRITE_WITH `u0 = HD (truncate_simplex 1 (ul:(real^3)list))`);
1933 (ASM_REWRITE_TAC[HD]);
1934 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
1935 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
1936 (REWRITE_TAC[ASSUME `v0 = u0:real^3`]);
1937 (UP_ASM_TAC THEN STRIP_TAC);
1938 (REWRITE_WITH `EL 2 ul = v2:real^3`);
1939 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `2 = SUC 1 /\ 1 = SUC 0`]);
1942 (UNDISCH_TAC `~NULLSET (mcell 3 V ul INTER C)`);
1944 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1945 (EXISTS_TAC `mcell 3 V ul` THEN STRIP_TAC);
1946 (REWRITE_TAC[MCELL_EXPLICIT; mcell3; set_of_list;
1947 TRUNCATE_SIMPLEX_EXPLICIT_2; ASSUME `ul = [u0; v1; v2; v3:real^3]`;
1948 SET_RULE `{a,b,c} UNION {d} = {a,b, c,d}`]);
1950 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1951 (EXISTS_TAC `affine hull {u0, v1, v2, mxi V ul}`);
1953 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
1954 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
1955 (REWRITE_TAC[coplanar]);
1956 (UNDISCH_TAC `u0 IN convex hull {v2, mxi V ul}`);
1957 (REWRITE_TAC[CONVEX_HULL_2; IN; IN_ELIM_THM] THEN STRIP_TAC);
1958 (EXISTS_TAC `v1:real^3` THEN EXISTS_TAC `v2:real^3` THEN
1959 EXISTS_TAC `mxi V ul`);
1960 (MATCH_MP_TAC (SET_RULE `a IN s /\ b SUBSET s ==> (a INSERT b) SUBSET s`));
1961 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
1962 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
1963 (EXISTS_TAC `&0` THEN EXISTS_TAC `u:real` THEN EXISTS_TAC `v:real`);
1965 (UNDISCH_TAC `u + v = &1` THEN REAL_ARITH_TAC);
1966 (UP_ASM_TAC THEN VECTOR_ARITH_TAC);
1967 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
1968 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
1971 (UP_ASM_TAC THEN EXPAND_TAC "Q");
1973 (UNDISCH_TAC `~NULLSET (mcell 3 V ul INTER C)` THEN REWRITE_TAC[]);
1974 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1975 (EXISTS_TAC `mcell 3 V ul`);
1976 (REWRITE_TAC[SET_RULE `A INTER B SUBSET A`]);
1977 (REWRITE_TAC[MCELL_EXPLICIT; mcell3]);
1979 (NEW_GOAL `?v2 v3. ul = [u0;u1;v2;v3:real^3]`);
1980 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0;v1;v2;v3:real^3]`);
1981 (MATCH_MP_TAC BARV_3_EXPLICIT);
1982 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1983 (UP_ASM_TAC THEN STRIP_TAC);
1984 (EXISTS_TAC `v2:real^3` THEN EXISTS_TAC `v3:real^3`);
1985 (REWRITE_TAC[ASSUME `ul = [v0;v1;v2;v3:real^3]`]);
1987 (REWRITE_WITH `v0 = u0:real^3`);
1988 (NEW_GOAL `HD (truncate_simplex 1 ul) = u0:real^3`);
1989 (ASM_REWRITE_TAC[HD]);
1990 (NEW_GOAL `HD (truncate_simplex 1 ul) = v0:real^3`);
1991 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
1992 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
1993 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
1995 (REWRITE_WITH `v1 = u1:real^3`);
1996 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = u1:real^3`);
1997 (ASM_REWRITE_TAC[HD; TL]);
1998 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = v1:real^3`);
1999 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
2000 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
2001 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
2002 (UP_ASM_TAC THEN STRIP_TAC);
2003 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
2004 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
2005 (REWRITE_TAC[GSYM (ASSUME `u0 = (@) (Q:real^3->bool)`)]);
2007 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2008 (EXISTS_TAC `affine hull {u0, u1, v2, mxi V ul}`);
2009 (REWRITE_TAC[ASSUME `ul = [u0; u1; v2; v3:real^3]`;
2010 CONVEX_HULL_SUBSET_AFFINE_HULL]);
2011 (REWRITE_WITH `affine hull {u0, u1, v2, mxi V [u0; u1; v2; v3]} =
2012 affine hull {u1, v2, mxi V [u0; u1; v2; v3]}`);
2013 (MATCH_MP_TAC AFFINE_HULL_3_INSERT);
2015 (NEW_GOAL `convex hull {EL 2 ul, mxi V ul} SUBSET
2016 affine hull {EL 2 ul, mxi V ul}`);
2017 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
2018 (NEW_GOAL `affine hull {EL 2 ul, mxi V ul} SUBSET
2019 affine hull {u1, v2, mxi V [u0; u1; v2; v3]}`);
2020 (MATCH_MP_TAC AFFINE_SUBSET_KY_LEMMA);
2021 (ASM_REWRITE_TAC[EL; HD; TL; ARITH_RULE `2 = SUC 1 /\ 1 = SUC 0`]);
2023 (UP_ASM_TAC THEN UP_ASM_TAC THEN
2024 UNDISCH_TAC `u0 IN convex hull {EL 2 ul, mxi V ul}` THEN SET_TAC[]);
2025 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
2026 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
2028 (MATCH_MP_TAC (REAL_ARITH `(a <= b) /\ ~(a = b) ==> a < b`));
2029 (REWRITE_TAC[NORM_CAUCHY_SCHWARZ; NORM_CAUCHY_SCHWARZ_EQ]);
2030 (NEW_GOAL `xx IN convex hull {(EL 2 ul) ,(mxi V ul)}`);
2031 (MATCH_MP_TAC SMALLEST_ANGLE_IN_CONVEX_HULL);
2032 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3`);
2033 (ASM_REWRITE_TAC[]);
2035 (NEW_GOAL `?v1 v2 v3. ul = [u0; v1; v2; v3:real^3]`);
2036 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
2037 (MATCH_MP_TAC BARV_3_EXPLICIT);
2038 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2039 (UP_ASM_TAC THEN STRIP_TAC);
2040 (EXISTS_TAC `v1:real^3` THEN
2041 EXISTS_TAC `v2:real^3` THEN EXISTS_TAC `v3:real^3`);
2042 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
2044 (NEW_GOAL `v0 = u0:real^3`);
2045 (REWRITE_WITH `v0 = HD (ul:(real^3)list)`);
2046 (ASM_REWRITE_TAC[HD]);
2047 (REWRITE_WITH `u0 = HD (truncate_simplex 1 (ul:(real^3)list))`);
2048 (ASM_REWRITE_TAC[HD]);
2049 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
2050 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
2051 (REWRITE_TAC[ASSUME `v0 = u0:real^3`]);
2052 (UP_ASM_TAC THEN STRIP_TAC);
2053 (REWRITE_WITH `EL 2 ul = v2:real^3`);
2054 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `2 = SUC 1 /\ 1 = SUC 0`]);
2057 (UNDISCH_TAC `~NULLSET (mcell 3 V ul INTER C)`);
2059 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2060 (EXISTS_TAC `mcell 3 V ul` THEN STRIP_TAC);
2061 (REWRITE_TAC[MCELL_EXPLICIT; mcell3; set_of_list;
2062 TRUNCATE_SIMPLEX_EXPLICIT_2; ASSUME `ul = [u0; v1; v2; v3:real^3]`;
2063 SET_RULE `{a,b,c} UNION {d} = {a,b, c,d}`]);
2065 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2066 (EXISTS_TAC `affine hull {u0, v1, v2, mxi V ul}`);
2068 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
2069 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
2070 (REWRITE_TAC[coplanar]);
2071 (UNDISCH_TAC `u0 IN convex hull {v2, mxi V ul}`);
2072 (REWRITE_TAC[CONVEX_HULL_2; IN; IN_ELIM_THM] THEN STRIP_TAC);
2073 (EXISTS_TAC `v1:real^3` THEN EXISTS_TAC `v2:real^3` THEN
2074 EXISTS_TAC `mxi V ul`);
2075 (MATCH_MP_TAC (SET_RULE `a IN s /\ b SUBSET s ==> (a INSERT b) SUBSET s`));
2076 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
2077 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
2078 (EXISTS_TAC `&0` THEN EXISTS_TAC `u:real` THEN EXISTS_TAC `v:real`);
2080 (UNDISCH_TAC `u + v = &1` THEN REAL_ARITH_TAC);
2081 (UP_ASM_TAC THEN VECTOR_ARITH_TAC);
2082 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
2083 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
2088 (UNDISCH_TAC `~NULLSET (mcell 3 V ul INTER C)` THEN REWRITE_TAC[]);
2089 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2090 (EXISTS_TAC `mcell 3 V ul`);
2091 (REWRITE_TAC[SET_RULE `A INTER B SUBSET A`]);
2092 (REWRITE_TAC[MCELL_EXPLICIT; mcell3]);
2094 (NEW_GOAL `?v2 v3. ul = [u0;u1;v2;v3:real^3]`);
2095 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0;v1;v2;v3:real^3]`);
2096 (MATCH_MP_TAC BARV_3_EXPLICIT);
2097 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2098 (UP_ASM_TAC THEN STRIP_TAC);
2099 (EXISTS_TAC `v2:real^3` THEN EXISTS_TAC `v3:real^3`);
2100 (ASM_REWRITE_TAC[]);
2102 (REWRITE_WITH `v0 = u0:real^3`);
2103 (NEW_GOAL `HD (truncate_simplex 1 ul) = u0:real^3`);
2104 (ASM_REWRITE_TAC[HD]);
2105 (NEW_GOAL `HD (truncate_simplex 1 ul) = v0:real^3`);
2106 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
2107 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
2108 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
2110 (REWRITE_WITH `v1 = u1:real^3`);
2111 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = u1:real^3`);
2112 (ASM_REWRITE_TAC[HD; TL]);
2113 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = v1:real^3`);
2114 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
2115 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
2116 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
2117 (UP_ASM_TAC THEN STRIP_TAC);
2118 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
2119 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
2121 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2122 (EXISTS_TAC `affine hull {u0, u1, v2, mxi V ul}`);
2123 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
2124 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
2125 (ABBREV_TAC `m = mxi V ul`);
2126 (NEW_GOAL `mxi V [u0; u1;v2;v3] = m`);
2127 (EXPAND_TAC "m" THEN AP_TERM_TAC THEN ASM_REWRITE_TAC[]);
2128 (ASM_REWRITE_TAC[]);
2129 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
2130 (ABBREV_TAC `k1 = norm (xx - u0:real^3)`);
2131 (ABBREV_TAC `k2 = norm (u1 - u0:real^3)`);
2132 (UNDISCH_TAC `xx IN convex hull {EL 2 ul, m:real^3}`);
2133 (ASM_REWRITE_TAC[EL; HD; TL; ARITH_RULE `2 = SUC 1/\ 1 = SUC 0`;
2134 CONVEX_HULL_2; IN; IN_ELIM_THM] THEN STRIP_TAC);
2135 (UNDISCH_TAC `k1 % (u1 - u0) = k2 % (xx - u0:real^3)`);
2136 (ASM_REWRITE_TAC[]);
2140 (REWRITE_TAC[coplanar]);
2141 (NEW_GOAL `~(k2 = &0)`);
2143 (REWRITE_TAC[NORM_EQ_0; VECTOR_ARITH `a - b = vec 0 <=> b = a`]);
2144 (ASM_REWRITE_TAC[]);
2146 (ASM_CASES_TAC `~(v = &0)`);
2147 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3` THEN
2148 EXISTS_TAC `v2:real^3`);
2149 (MATCH_MP_TAC (SET_RULE `{a,b,c} SUBSET X /\ d IN X ==> {a,b,c,d} SUBSET X`));
2151 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
2152 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
2153 (EXISTS_TAC `(k2 - k1:real) / (k2 * v)`);
2154 (EXISTS_TAC `k1 / (k2 * v)`);
2155 (EXISTS_TAC `(--k2 * u) / (k2 * v)`);
2157 (REWRITE_TAC[REAL_ARITH `a / x + b / x + c / x = (a+b+c)/ x`]);
2158 (REWRITE_WITH `k2 - k1 + k1 + --k2 * u = k2 * (u + v) - k1 + k1 + --k2 * u`);
2159 (ASM_REWRITE_TAC[ARITH_RULE `SUC 0 = 1`] THEN REAL_ARITH_TAC);
2160 (REWRITE_TAC[REAL_ARITH `k2 * (u + v) - k1 + k1 + --k2 * u = k2 * v`]);
2161 (MATCH_MP_TAC REAL_DIV_REFL);
2162 (REWRITE_TAC[REAL_ENTIRE] THEN ASM_REWRITE_TAC[]);
2164 (REWRITE_TAC[VECTOR_ARITH `a / x % u0 + b / x % u1 + d / x % u2 =
2165 (&1 / x) % (a % u0 + b % u1 + d % u2)`]);
2166 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2168 `&1 / (k2 * v) % ((k2 - k1) % u0 + k1 % u1 + (--k2 * u) % v2) = m:real^3 <=>
2169 ((k2 - k1) % u0 + k1 % u1 + (--k2 * u) % v2) = (k2 * v) % m`);
2170 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2171 (MATCH_MP_TAC Collect_geom.CHANGE_SIDE);
2172 (REWRITE_TAC[REAL_ENTIRE] THEN ASM_REWRITE_TAC[]);
2173 (ASM_REWRITE_TAC[VECTOR_ARITH
2174 `(k2 - k1) % u0 + k1 % u1 + (--k2 * u) % v2 = (k2 * v) % m <=>
2175 k1 % (u1 - u0) = k2 % ((u % v2 + v % m) - u0)`]);
2177 (NEW_GOAL `~(u = &0)`);
2178 (UP_ASM_TAC THEN UNDISCH_TAC `u + v = &(SUC 0):real` THEN
2179 REWRITE_TAC[ARITH_RULE `SUC 0 = 1`]);
2182 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3` THEN
2183 EXISTS_TAC `m:real^3`);
2184 (MATCH_MP_TAC (SET_RULE `{a,b,c} SUBSET X /\ d IN X ==> {a,b,d,c} SUBSET X`));
2186 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
2187 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
2189 (EXISTS_TAC `(k2 - k1:real) / (k2 * u)`);
2190 (EXISTS_TAC `k1 / (k2 * u)`);
2191 (EXISTS_TAC `(--k2 * v) / (k2 * u)`);
2193 (REWRITE_TAC[REAL_ARITH `a / x + b / x + c / x = (a+b+c)/ x`]);
2194 (REWRITE_WITH `k2 - k1 + k1 + --k2 * v = k2 * (u + v) - k1 + k1 + --k2 * v`);
2195 (ASM_REWRITE_TAC[ARITH_RULE `SUC 0 = 1`] THEN REAL_ARITH_TAC);
2196 (REWRITE_TAC[REAL_ARITH `k2 * (u + v) - k1 + k1 + --k2 * v = k2 * u`]);
2197 (MATCH_MP_TAC REAL_DIV_REFL);
2198 (REWRITE_TAC[REAL_ENTIRE] THEN ASM_REWRITE_TAC[]);
2200 (REWRITE_TAC[VECTOR_ARITH `a / x % u0 + b / x % u1 + d / x % u2 =
2201 (&1 / x) % (a % u0 + b % u1 + d % u2)`]);
2202 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2204 `&1 / (k2 * u) % ((k2 - k1) % u0 + k1 % u1 + (--k2 * v) % m) = v2:real^3 <=>
2205 ((k2 - k1) % u0 + k1 % u1 + (--k2 * v) % m) = (k2 * u) % v2`);
2206 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2207 (MATCH_MP_TAC Collect_geom.CHANGE_SIDE);
2208 (REWRITE_TAC[REAL_ENTIRE] THEN ASM_REWRITE_TAC[]);
2209 (ASM_REWRITE_TAC[VECTOR_ARITH
2210 `(k2 - k1) % u0 + k1 % u1 + (--k2 * v) % m = (k2 * u) % v2 <=>
2211 k1 % (u1 - u0) = k2 % ((u % v2 + v % m) - u0)`]);
2213 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
2215 (* ========================================================================== *)
2218 (\ul. (((smallest_angle_line (EL 2 ul) (EL 3 ul) u0 u1) - u0)
2220 (norm ((smallest_angle_line (EL 2 ul) (EL 3 ul) u0 u1) - u0)
2221 * norm (u1 - u0)))`);
2223 (ABBREV_TAC `P4 = {(f4:(real^3)list->real) ul |ul | barV V 3 ul /\
2224 ~NULLSET (mcell 4 V ul INTER C) /\
2225 truncate_simplex 1 ul = [u0; u1]}`);
2227 (NEW_GOAL `~(P4 = {}) ==> (?b:real. b IN P4 /\ (!x. x IN P4 ==> x <= b))`);
2229 (MATCH_MP_TAC SUP_FINITE_LEMMA);
2230 (ASM_REWRITE_TAC[]);
2232 (ONCE_REWRITE_TAC [SET_RULE `{f x| x | P x} = {f x | x IN {y | P y}}`]);
2233 (ONCE_REWRITE_TAC [SET_RULE `{f x| x IN s} = {y | ?x. x IN s /\ y = f x}`]);
2234 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
2235 (MATCH_MP_TAC FINITE_SUBSET);
2236 (EXISTS_TAC `{y | ?v0:real^3 v1 u2 u3.
2237 v0 IN (V INTER ball (u0:real^3, &4)) /\
2238 v1 IN (V INTER ball (u0, &4)) /\
2239 u2 IN (V INTER ball (u0, &4)) /\
2240 u3 IN (V INTER ball (u0, &4)) /\
2241 y = [v0; v1; u2; u3]}`);
2243 (MATCH_MP_TAC FINITE_SET_LIST_LEMMA);
2244 (ASM_SIMP_TAC[FINITE_PACK_LEMMA]);
2245 (REWRITE_TAC[SUBSET] THEN ONCE_REWRITE_TAC[IN] THEN REWRITE_TAC[IN_ELIM_THM]);
2247 (NEW_GOAL `?v0 v1 u2 u3. x = [v0; v1; u2; u3:real^3]`);
2248 (MATCH_MP_TAC BARV_3_EXPLICIT);
2249 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2250 (UP_ASM_TAC THEN STRIP_TAC);
2251 (EXISTS_TAC `v0:real^3` THEN EXISTS_TAC `v1:real^3` THEN
2252 EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3`);
2253 (ASM_REWRITE_TAC[]);
2254 (NEW_GOAL `v0 = u0:real^3`);
2255 (REWRITE_WITH `v0 = HD (x:(real^3)list)`);
2256 (ASM_REWRITE_TAC[HD]);
2257 (REWRITE_WITH `u0 = HD (truncate_simplex 1 (x:(real^3)list))`);
2258 (ASM_REWRITE_TAC[HD]);
2259 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
2260 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
2261 (NEW_GOAL `set_of_list x SUBSET ball (u0:real^3,&4)`);
2262 (MATCH_MP_TAC Qzyzmjc.BARV_3_IMP_FINITE_lemma2);
2263 (EXISTS_TAC `V:real^3->bool`);
2264 (ASM_REWRITE_TAC[set_of_list]);
2266 (NEW_GOAL `set_of_list x SUBSET V:real^3->bool`);
2267 (MATCH_MP_TAC Packing3.BARV_SUBSET);
2268 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
2269 (UP_ASM_TAC THEN UP_ASM_TAC THEN ASM_REWRITE_TAC[set_of_list]);
2272 (ABBREV_TAC `d2 = (if (P4 = {}:real->bool) then c
2273 else (@b. b IN P4 /\ (!x. x IN P4 ==> x <= b)))`);
2274 (NEW_GOAL `d2 < &1`);
2277 (ASM_REWRITE_TAC[]);
2278 (NEW_GOAL `?b:real. b IN P4 /\ (!x. x IN P4 ==> x <= b)`);
2280 (UP_ASM_TAC THEN STRIP_TAC);
2281 (ABBREV_TAC `P = (\b:real. b IN P4 /\ (!x. x IN P4 ==> x <= b))`);
2282 (ABBREV_TAC `zz = (@) (P:real->bool)`);
2283 (NEW_GOAL `(P:real->bool) zz`);
2285 (MATCH_MP_TAC SELECT_AX);
2286 (EXISTS_TAC `b':real`);
2287 (EXPAND_TAC "P" THEN ASM_REWRITE_TAC[]);
2288 (UP_ASM_TAC THEN EXPAND_TAC "P" THEN REWRITE_TAC[]);
2289 (EXPAND_TAC "P4" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
2291 (ASM_REWRITE_TAC[]);
2294 (ABBREV_TAC `xx = smallest_angle_line (EL 2 ul) (EL 3 ul) u0 u1`);
2295 (MATCH_MP_TAC REAL_DIV_LT_1_TACTICS);
2297 (MATCH_MP_TAC (REAL_ARITH `&0 <= a /\ ~(a = &0) ==> &0 < a`));
2299 (SIMP_TAC[REAL_LE_MUL; NORM_POS_LE]);
2300 (REWRITE_TAC[REAL_ENTIRE; NORM_EQ_0; VECTOR_ARITH `a - b = vec 0 <=> a = b`]);
2301 (ASM_REWRITE_TAC[]);
2303 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN
2304 REWRITE_TAC[smallest_angle_line; smallest_angle_set]);
2306 (ABBREV_TAC `Q = (\x:real^3. x IN convex hull {EL 2 ul, EL 3 ul} /\
2307 (!y. y IN convex hull {EL 2 ul, EL 3 ul}
2308 ==> ((y - u0) dot (u1 - u0)) /
2309 (norm (y - u0) * norm (u1 - u0)) <=
2310 ((x - u0) dot (u1 - u0)) /
2311 (norm (x - u0) * norm (u1 - u0))))`);
2312 (NEW_GOAL `(Q:real^3->bool) u0`);
2313 (ONCE_ASM_REWRITE_TAC[]);
2314 (MATCH_MP_TAC SELECT_AX);
2317 (MATCH_MP_TAC SMALLEST_ANGLE_LINE_EXISTS);
2319 (ASM_REWRITE_TAC[]);
2321 (NEW_GOAL `?v1 v2 v3. ul = [u0; v1; v2; v3:real^3]`);
2322 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
2323 (MATCH_MP_TAC BARV_3_EXPLICIT);
2324 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2325 (UP_ASM_TAC THEN STRIP_TAC);
2326 (EXISTS_TAC `v1:real^3` THEN
2327 EXISTS_TAC `v2:real^3` THEN EXISTS_TAC `v3:real^3`);
2328 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
2330 (NEW_GOAL `v0 = u0:real^3`);
2331 (REWRITE_WITH `v0 = HD (ul:(real^3)list)`);
2332 (ASM_REWRITE_TAC[HD]);
2333 (REWRITE_WITH `u0 = HD (truncate_simplex 1 (ul:(real^3)list))`);
2334 (ASM_REWRITE_TAC[HD]);
2335 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
2336 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
2337 (REWRITE_TAC[ASSUME `v0 = u0:real^3`]);
2338 (UP_ASM_TAC THEN STRIP_TAC);
2339 (REWRITE_WITH `EL 2 ul = v2:real^3 /\ EL 3 ul = v3`);
2340 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `3 = SUC 2 /\2 = SUC 1 /\ 1 = SUC 0`]);
2343 (UNDISCH_TAC `~NULLSET (mcell 4 V ul INTER C)`);
2345 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2346 (EXISTS_TAC `mcell 4 V ul` THEN STRIP_TAC);
2347 (SIMP_TAC[MCELL_EXPLICIT; mcell4; set_of_list;ARITH_RULE `4 >= 4`;
2348 ASSUME `ul = [u0; v1; v2; v3:real^3]`]);
2351 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2352 (EXISTS_TAC `affine hull {u0, v1, v2, v3:real^3}`);
2354 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
2355 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
2356 (REWRITE_TAC[coplanar]);
2357 (UNDISCH_TAC `u0 IN convex hull {v2, v3:real^3}`);
2358 (REWRITE_TAC[CONVEX_HULL_2; IN; IN_ELIM_THM] THEN STRIP_TAC);
2359 (EXISTS_TAC `v1:real^3` THEN EXISTS_TAC `v2:real^3` THEN
2360 EXISTS_TAC `v3:real^3`);
2361 (MATCH_MP_TAC (SET_RULE `a IN s /\ b SUBSET s ==> (a INSERT b) SUBSET s`));
2362 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
2363 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
2364 (EXISTS_TAC `&0` THEN EXISTS_TAC `u:real` THEN EXISTS_TAC `v:real`);
2366 (UNDISCH_TAC `u + v = &1` THEN REAL_ARITH_TAC);
2367 (UP_ASM_TAC THEN VECTOR_ARITH_TAC);
2368 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
2369 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
2372 (UP_ASM_TAC THEN EXPAND_TAC "Q");
2374 (UNDISCH_TAC `~NULLSET (mcell 4 V ul INTER C)` THEN REWRITE_TAC[]);
2375 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2376 (EXISTS_TAC `mcell 4 V ul`);
2377 (REWRITE_TAC[SET_RULE `A INTER B SUBSET A`]);
2378 (SIMP_TAC[MCELL_EXPLICIT; mcell4; ARITH_RULE `4 >= 4`]);
2380 (NEW_GOAL `?v2 v3. ul = [u0;u1;v2;v3:real^3]`);
2381 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0;v1;v2;v3:real^3]`);
2382 (MATCH_MP_TAC BARV_3_EXPLICIT);
2383 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2384 (UP_ASM_TAC THEN STRIP_TAC);
2385 (EXISTS_TAC `v2:real^3` THEN EXISTS_TAC `v3:real^3`);
2386 (ASM_REWRITE_TAC[]);
2388 (REWRITE_WITH `v0 = u0:real^3`);
2389 (NEW_GOAL `HD (truncate_simplex 1 ul) = u0:real^3`);
2390 (ASM_REWRITE_TAC[HD]);
2391 (NEW_GOAL `HD (truncate_simplex 1 ul) = v0:real^3`);
2392 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
2393 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
2394 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
2396 (REWRITE_WITH `v1 = u1:real^3`);
2397 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = u1:real^3`);
2398 (ASM_REWRITE_TAC[HD; TL]);
2399 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = v1:real^3`);
2400 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
2401 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
2402 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
2403 (ASM_REWRITE_TAC[]);
2404 (UP_ASM_TAC THEN STRIP_TAC);
2406 (ASM_REWRITE_TAC[set_of_list]);
2407 (REWRITE_TAC[GSYM (ASSUME `u0 = (@) (Q:real^3->bool)`)]);
2408 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2409 (EXISTS_TAC `affine hull {u0, u1, v2, v3:real^3}`);
2410 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
2411 (REWRITE_WITH `affine hull {u0, u1, v2, v3} =
2412 affine hull {u1, v2, v3:real^3}`);
2413 (MATCH_MP_TAC AFFINE_HULL_3_INSERT);
2415 (NEW_GOAL `convex hull {EL 2 ul, (EL 3 ul):real^3} SUBSET
2416 affine hull {EL 2 ul, EL 3 ul}`);
2417 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
2418 (NEW_GOAL `affine hull {EL 2 ul, (EL 3 ul):real^3} SUBSET
2419 affine hull {u1, v2, v3}`);
2420 (MATCH_MP_TAC AFFINE_SUBSET_KY_LEMMA);
2421 (ASM_REWRITE_TAC[EL; HD; TL;
2422 ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
2424 (UP_ASM_TAC THEN UP_ASM_TAC THEN
2425 UNDISCH_TAC `u0 IN convex hull {EL 2 ul, (EL 3 ul):real^3}` THEN SET_TAC[]);
2426 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
2427 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
2429 (MATCH_MP_TAC (REAL_ARITH `(a <= b) /\ ~(a = b) ==> a < b`));
2430 (REWRITE_TAC[NORM_CAUCHY_SCHWARZ; NORM_CAUCHY_SCHWARZ_EQ]);
2431 (NEW_GOAL `xx IN convex hull {(EL 2 ul) ,(EL 3 ul):real^3}`);
2432 (MATCH_MP_TAC SMALLEST_ANGLE_IN_CONVEX_HULL);
2433 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3`);
2434 (ASM_REWRITE_TAC[]);
2436 (NEW_GOAL `?v1 v2 v3. ul = [u0; v1; v2; v3:real^3]`);
2437 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
2438 (MATCH_MP_TAC BARV_3_EXPLICIT);
2439 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2440 (UP_ASM_TAC THEN STRIP_TAC);
2441 (EXISTS_TAC `v1:real^3` THEN
2442 EXISTS_TAC `v2:real^3` THEN EXISTS_TAC `v3:real^3`);
2443 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
2445 (NEW_GOAL `v0 = u0:real^3`);
2446 (REWRITE_WITH `v0 = HD (ul:(real^3)list)`);
2447 (ASM_REWRITE_TAC[HD]);
2448 (REWRITE_WITH `u0 = HD (truncate_simplex 1 (ul:(real^3)list))`);
2449 (ASM_REWRITE_TAC[HD]);
2450 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
2451 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
2452 (REWRITE_TAC[ASSUME `v0 = u0:real^3`]);
2453 (UP_ASM_TAC THEN STRIP_TAC);
2454 (REWRITE_WITH `EL 2 ul = v2:real^3 /\ EL 3 ul = v3`);
2455 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `3 = SUC 2 /\2 = SUC 1 /\ 1 = SUC 0`]);
2458 (UNDISCH_TAC `~NULLSET (mcell 4 V ul INTER C)`);
2460 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2461 (EXISTS_TAC `mcell 4 V ul` THEN STRIP_TAC);
2462 (SIMP_TAC[MCELL_EXPLICIT; mcell4; set_of_list;ARITH_RULE `4 >= 4`;
2463 ASSUME `ul = [u0; v1; v2; v3:real^3]`]);
2466 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2467 (EXISTS_TAC `affine hull {u0, v1, v2, v3:real^3}`);
2469 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
2470 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
2471 (REWRITE_TAC[coplanar]);
2472 (UNDISCH_TAC `u0 IN convex hull {v2, v3:real^3}`);
2473 (REWRITE_TAC[CONVEX_HULL_2; IN; IN_ELIM_THM] THEN STRIP_TAC);
2474 (EXISTS_TAC `v1:real^3` THEN EXISTS_TAC `v2:real^3` THEN
2475 EXISTS_TAC `v3:real^3`);
2476 (MATCH_MP_TAC (SET_RULE `a IN s /\ b SUBSET s ==> (a INSERT b) SUBSET s`));
2477 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
2478 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
2479 (EXISTS_TAC `&0` THEN EXISTS_TAC `u:real` THEN EXISTS_TAC `v:real`);
2481 (UNDISCH_TAC `u + v = &1` THEN REAL_ARITH_TAC);
2482 (UP_ASM_TAC THEN VECTOR_ARITH_TAC);
2483 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
2484 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
2489 (UNDISCH_TAC `~NULLSET (mcell 4 V ul INTER C)` THEN REWRITE_TAC[]);
2490 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2491 (EXISTS_TAC `mcell 4 V ul`);
2492 (REWRITE_TAC[SET_RULE `A INTER B SUBSET A`]);
2493 (SIMP_TAC[MCELL_EXPLICIT; mcell4; ARITH_RULE `4 >= 4`]);
2495 (NEW_GOAL `?v2 v3. ul = [u0;u1;v2;v3:real^3]`);
2496 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0;v1;v2;v3:real^3]`);
2497 (MATCH_MP_TAC BARV_3_EXPLICIT);
2498 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2499 (UP_ASM_TAC THEN STRIP_TAC);
2500 (EXISTS_TAC `v2:real^3` THEN EXISTS_TAC `v3:real^3`);
2501 (ASM_REWRITE_TAC[]);
2503 (REWRITE_WITH `v0 = u0:real^3`);
2504 (NEW_GOAL `HD (truncate_simplex 1 ul) = u0:real^3`);
2505 (ASM_REWRITE_TAC[HD]);
2506 (NEW_GOAL `HD (truncate_simplex 1 ul) = v0:real^3`);
2507 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
2508 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
2509 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
2511 (REWRITE_WITH `v1 = u1:real^3`);
2512 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = u1:real^3`);
2513 (ASM_REWRITE_TAC[HD; TL]);
2514 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = v1:real^3`);
2515 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
2516 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
2517 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
2518 (UP_ASM_TAC THEN STRIP_TAC);
2519 (ASM_REWRITE_TAC[set_of_list]);
2521 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2522 (EXISTS_TAC `affine hull {u0, u1, v2, v3:real^3}`);
2523 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
2524 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
2525 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
2526 (ABBREV_TAC `k1 = norm (xx - u0:real^3)`);
2527 (ABBREV_TAC `k2 = norm (u1 - u0:real^3)`);
2528 (UNDISCH_TAC `xx IN convex hull {EL 2 ul,(EL 3 ul):real^3}`);
2529 (ASM_REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1/\ 1 = SUC 0`;
2530 CONVEX_HULL_2; IN; IN_ELIM_THM] THEN STRIP_TAC);
2531 (UNDISCH_TAC `k1 % (u1 - u0) = k2 % (xx - u0:real^3)`);
2532 (ASM_REWRITE_TAC[]);
2536 (REWRITE_TAC[coplanar]);
2537 (NEW_GOAL `~(k2 = &0)`);
2539 (REWRITE_TAC[NORM_EQ_0; VECTOR_ARITH `a - b = vec 0 <=> b = a`]);
2540 (ASM_REWRITE_TAC[]);
2542 (ASM_CASES_TAC `~(v = &0)`);
2543 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3` THEN
2544 EXISTS_TAC `v2:real^3`);
2545 (MATCH_MP_TAC (SET_RULE `{a,b,c} SUBSET X /\ d IN X ==> {a,b,c,d} SUBSET X`));
2547 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
2548 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
2549 (EXISTS_TAC `(k2 - k1:real) / (k2 * v)`);
2550 (EXISTS_TAC `k1 / (k2 * v)`);
2551 (EXISTS_TAC `(--k2 * u) / (k2 * v)`);
2553 (REWRITE_TAC[REAL_ARITH `a / x + b / x + c / x = (a+b+c)/ x`]);
2554 (REWRITE_WITH `k2 - k1 + k1 + --k2 * u = k2 * (u + v) - k1 + k1 + --k2 * u`);
2555 (ASM_REWRITE_TAC[ARITH_RULE `SUC 0 = 1`] THEN REAL_ARITH_TAC);
2556 (REWRITE_TAC[REAL_ARITH `k2 * (u + v) - k1 + k1 + --k2 * u = k2 * v`]);
2557 (MATCH_MP_TAC REAL_DIV_REFL);
2558 (REWRITE_TAC[REAL_ENTIRE] THEN ASM_REWRITE_TAC[]);
2560 (REWRITE_TAC[VECTOR_ARITH `a / x % u0 + b / x % u1 + d / x % u2 =
2561 (&1 / x) % (a % u0 + b % u1 + d % u2)`]);
2562 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2564 `&1 / (k2 * v) % ((k2 - k1) % u0 + k1 % u1 + (--k2 * u) % v2) = v3:real^3 <=>
2565 ((k2 - k1) % u0 + k1 % u1 + (--k2 * u) % v2) = (k2 * v) % v3`);
2566 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2567 (MATCH_MP_TAC Collect_geom.CHANGE_SIDE);
2568 (REWRITE_TAC[REAL_ENTIRE] THEN ASM_REWRITE_TAC[]);
2569 (ASM_REWRITE_TAC[VECTOR_ARITH
2570 `(k2 - k1) % u0 + k1 % u1 + (--k2 * u) % v2 = (k2 * v) % v3 <=>
2571 k1 % (u1 - u0) = k2 % ((u % v2 + v % v3) - u0)`]);
2573 (NEW_GOAL `~(u = &0)`);
2574 (UP_ASM_TAC THEN UNDISCH_TAC `u + v = &(SUC 0):real` THEN
2575 REWRITE_TAC[ARITH_RULE `SUC 0 = 1`]);
2578 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3` THEN
2579 EXISTS_TAC `v3:real^3`);
2580 (MATCH_MP_TAC (SET_RULE `{a,b,c} SUBSET X /\ d IN X ==> {a,b,d,c} SUBSET X`));
2582 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
2583 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
2585 (EXISTS_TAC `(k2 - k1:real) / (k2 * u)`);
2586 (EXISTS_TAC `k1 / (k2 * u)`);
2587 (EXISTS_TAC `(--k2 * v) / (k2 * u)`);
2589 (REWRITE_TAC[REAL_ARITH `a / x + b / x + c / x = (a+b+c)/ x`]);
2590 (REWRITE_WITH `k2 - k1 + k1 + --k2 * v = k2 * (u + v) - k1 + k1 + --k2 * v`);
2591 (ASM_REWRITE_TAC[ARITH_RULE `SUC 0 = 1`] THEN REAL_ARITH_TAC);
2592 (REWRITE_TAC[REAL_ARITH `k2 * (u + v) - k1 + k1 + --k2 * v = k2 * u`]);
2593 (MATCH_MP_TAC REAL_DIV_REFL);
2594 (REWRITE_TAC[REAL_ENTIRE] THEN ASM_REWRITE_TAC[]);
2596 (REWRITE_TAC[VECTOR_ARITH `a / x % u0 + b / x % u1 + d / x % u2 =
2597 (&1 / x) % (a % u0 + b % u1 + d % u2)`]);
2598 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2600 `&1 / (k2 * u) % ((k2 - k1) % u0 + k1 % u1 + (--k2 * v) % v3) = v2:real^3 <=>
2601 ((k2 - k1) % u0 + k1 % u1 + (--k2 * v) % v3) = (k2 * u) % v2`);
2602 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2603 (MATCH_MP_TAC Collect_geom.CHANGE_SIDE);
2604 (REWRITE_TAC[REAL_ENTIRE] THEN ASM_REWRITE_TAC[]);
2605 (ASM_REWRITE_TAC[VECTOR_ARITH
2606 `(k2 - k1) % u0 + k1 % u1 + (--k2 * v) % m = (k2 * u) % v2 <=>
2607 k1 % (u1 - u0) = k2 % ((u % v2 + v % m) - u0)`]);
2608 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
2610 (* ========================================================================== *)
2612 (ABBREV_TAC `d = max c (max d1 d2)`);
2613 (NEW_GOAL `d < &1`);
2614 (UNDISCH_TAC `d2 < &1` THEN UNDISCH_TAC `d1 < &1` THEN
2615 UNDISCH_TAC `&0 < c /\ c < &1`);
2616 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
2618 (* ========================================================================== *)
2620 (ABBREV_TAC `D = ball (u0:real^3,r) INTER rcone_gt u0 u1 d`);
2621 (NEW_GOAL `D SUBSET C:real^3->bool`);
2622 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
2623 (MATCH_MP_TAC (SET_RULE
2624 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
2626 (MATCH_MP_TAC SUBSET_BALL);
2627 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
2628 (MATCH_MP_TAC RCONE_GT_SUBSET);
2629 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
2631 (NEW_GOAL `!X. mcell_set V X /\ ~NULLSET (X INTER D)
2636 truncate_simplex 1 vl = [u0; u1])`);
2638 (FIRST_ASSUM MATCH_MP_TAC);
2639 (ASM_REWRITE_TAC[]);
2641 (UNDISCH_TAC `~NULLSET (X INTER D)`);
2642 (REWRITE_TAC[] THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2643 (EXISTS_TAC `X INTER C:real^3->bool`);
2644 (ASM_REWRITE_TAC[] THEN UNDISCH_TAC `D SUBSET C:real^3->bool`);
2647 (* ========================================================================= *)
2649 (NEW_GOAL `D = conic_cap (u0:real^3) u1 r d`);
2650 (EXPAND_TAC "D" THEN REWRITE_TAC[conic_cap; NORMBALL_BALL]);
2652 (NEW_GOAL `!X. mcell_set V X /\ ~NULLSET (X INTER D) ==>
2653 vol (X INTER D) = vol (D) * (dihX V X (u0,u1)) / (&2 * pi)`);
2659 truncate_simplex 1 vl = [u0; u1]`);
2660 (FIRST_ASSUM MATCH_MP_TAC);
2661 (ASM_REWRITE_TAC[]);
2662 (UP_ASM_TAC THEN REPEAT STRIP_TAC);
2664 (* ========================================================================= *)
2666 (* ========================================================================= *)
2668 (ASM_CASES_TAC `k = 2`);
2669 (ABBREV_TAC `m = mxi V vl`);
2670 (ABBREV_TAC `s3 = omega_list_n V vl 3`);
2671 (ABBREV_TAC `L = aff_ge{u0, u1} {m, s3:real^3}`);
2673 (REWRITE_WITH `vol (X INTER D) = vol (L INTER D)`);
2675 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell2]);
2678 (NEW_GOAL `?v0 v1 v2 v3. vl = [v0;v1;v2;v3:real^3]`);
2679 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
2680 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2681 (UP_ASM_TAC THEN STRIP_TAC);
2683 (REWRITE_WITH `HD vl = u0 /\ HD (TL vl) = u1:real^3`);
2684 (REWRITE_WITH `(HD vl):real^3 = HD (truncate_simplex 1 vl)`);
2685 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2686 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
2687 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
2688 (ASM_REWRITE_TAC[HD; TL]);
2689 (NEW_GOAL `HD (TL(truncate_simplex 1 vl)) = u1:real^3`);
2690 (ASM_REWRITE_TAC[HD; TL]);
2691 (NEW_GOAL `HD (TL(truncate_simplex 1 vl)) = v1:real^3`);
2692 (REWRITE_TAC[ASSUME `vl = [v0; v1; v2; v3:real^3]`;
2693 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
2694 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
2697 (REWRITE_TAC [SET_RULE `(A INTER B INTER C) INTER D = C INTER D
2698 <=> (!x. x IN C INTER D ==> x IN A /\ x IN B)`]);
2700 (REPEAT GEN_TAC THEN STRIP_TAC);
2701 (NEW_GOAL `x:real^3 IN D`);
2702 (UP_ASM_TAC THEN UNDISCH_TAC `D = conic_cap (u0:real^3) u1 r d`);
2704 (UP_ASM_TAC THEN EXPAND_TAC "D" THEN STRIP_TAC);
2705 (NEW_GOAL `x:real^3 IN rcone_gt u0 u1 a'`);
2706 (NEW_GOAL `rcone_gt (u0:real^3) u1 d SUBSET rcone_gt u0 u1 c`);
2707 (MATCH_MP_TAC RCONE_GT_SUBSET);
2708 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
2709 (UP_ASM_TAC THEN UP_ASM_TAC THEN UNDISCH_TAC
2710 `rcone_gt (u0:real^3) u1 c SUBSET W INTER rcone_gt u0 u1 a'`);
2713 (UP_ASM_TAC THEN SET_TAC[RCONE_GT_SUBSET_RCONE_GE]);
2715 (* ========================================================================== *)
2716 (UP_ASM_TAC THEN REWRITE_TAC[rcone_ge; rconesgn; rcone_gt; IN; IN_ELIM_THM]);
2719 (ABBREV_TAC `y = u0 + proj_point (u1 - u0:real^3) (x - u0)`);
2720 (NEW_GOAL `orthogonal (x - y) (u1 - u0:real^3)`);
2721 (REWRITE_WITH `x - y = (x - u0) - proj_point (u1 - u0) (x - u0:real^3)`);
2722 (EXPAND_TAC "y" THEN VECTOR_ARITH_TAC);
2723 (REWRITE_TAC[GSYM Marchal_cells_2_new.projection_proj_point]);
2724 (REWRITE_TAC[orthogonal; Packing3.PROJECTION_ORTHOGONAL]);
2726 (NEW_GOAL `norm (x - u0) pow 2 = norm (y - u0) pow 2 + norm (x - y:real^3) pow 2`);
2727 (MATCH_MP_TAC PYTHAGORAS);
2728 (REWRITE_TAC[orthogonal]);
2729 (ONCE_REWRITE_TAC[VECTOR_ARITH `(a - b) dot c = --(c dot (b - a))`]);
2730 (REWRITE_WITH `y - u0 = proj_point (u1 - u0) (x - u0:real^3)`);
2731 (EXPAND_TAC "y" THEN REWRITE_TAC[VECTOR_ARITH `(a + b) - a:real^3 = b`]);
2732 (REWRITE_TAC[PRO_EXP; DOT_RMUL]);
2733 (UP_ASM_TAC THEN REWRITE_TAC[orthogonal] THEN STRIP_TAC);
2734 (ASM_REWRITE_TAC[]);
2737 (NEW_GOAL `norm (x - u1) pow 2 = norm (y - u1) pow 2 + norm (x - y:real^3) pow 2`);
2738 (MATCH_MP_TAC PYTHAGORAS);
2739 (REWRITE_TAC[orthogonal]);
2740 (ONCE_REWRITE_TAC[VECTOR_ARITH `(a - b) dot c = c dot (a - b)`]);
2741 (REWRITE_WITH `u1 - y = (u1 - u0) - proj_point (u1 - u0) (x - u0:real^3)`);
2742 (EXPAND_TAC "y" THEN VECTOR_ARITH_TAC);
2743 (REWRITE_TAC[PRO_EXP; VECTOR_ARITH `x - a % x = (&1 - a) % x`]);
2744 (REWRITE_TAC[DOT_RMUL] THEN DEL_TAC);
2745 (UP_ASM_TAC THEN REWRITE_TAC[orthogonal] THEN STRIP_TAC);
2746 (ASM_REWRITE_TAC[]);
2749 (MP_TAC (ASSUME `(x - u0:real^3) dot (u1 - u0) >
2750 dist (x,u0) * dist (u1,u0) * a'`));
2751 (REWRITE_WITH `(x - u0) dot (u1 - u0) =
2752 (x - y) dot (u1 - u0) + (y - u0) dot (u1 - u0:real^3)`);
2754 (REWRITE_WITH `(x - u1) dot (u0 - u1) =
2755 (x - y) dot (u0 - u1) + (y - u1) dot (u0 - u1:real^3)`);
2757 (REWRITE_WITH `(x - y) dot (u1 - u0:real^3) = &0`);
2758 (ASM_REWRITE_TAC[GSYM orthogonal]);
2759 (REWRITE_WITH `(x - y) dot (u0 - u1:real^3) = &0`);
2760 (ONCE_REWRITE_TAC[VECTOR_ARITH `a dot (u0 - u1) = --(a dot (u1 - u0))`]);
2761 (REWRITE_TAC[REAL_ARITH `--a = &0 <=> a = &0`]);
2762 (ASM_REWRITE_TAC[GSYM orthogonal]);
2763 (REWRITE_TAC[REAL_ARITH `&0 + a = a`]);
2766 (NEW_GOAL `(y - u0) dot (u1 - u0) = norm (y - u0) * norm (u1 - u0:real^3)`);
2767 (REWRITE_TAC[NORM_CAUCHY_SCHWARZ_EQ]);
2768 (REWRITE_WITH `y - u0 = proj_point (u1 - u0) (x - u0:real^3)`);
2769 (EXPAND_TAC "y" THEN REWRITE_TAC[VECTOR_ARITH `(a + b) - a:real^3 = b`]);
2770 (REWRITE_TAC[PRO_EXP; NORM_MUL; VECTOR_MUL_ASSOC]);
2771 (MATCH_MP_TAC (MESON[] `a = b ==> a % x = b % x`));
2772 (REWRITE_TAC[REAL_ARITH `a * norm b = norm b * a`]);
2773 (MATCH_MP_TAC (MESON[] `a = b ==> x * a = x * b`));
2774 (REWRITE_TAC[REAL_ABS_REFL]);
2775 (MATCH_MP_TAC REAL_LE_DIV);
2776 (REWRITE_TAC[DOT_POS_LE]);
2778 (REWRITE_WITH `(x - u0) dot (u1 - u0) =
2779 (x - y) dot (u1 - u0) + (y - u0) dot (u1 - u0:real^3)`);
2781 (REWRITE_WITH `(x - y) dot (u1 - u0:real^3) = &0`);
2782 (ASM_REWRITE_TAC[GSYM orthogonal]);
2783 (REWRITE_TAC[REAL_ARITH `&0 + a = a`]);
2785 (NEW_GOAL `y IN convex hull {u0, u1:real^3}`);
2786 (NEW_GOAL `y IN affine hull {u0, u1:real^3}`);
2787 (REWRITE_TAC[AFFINE_HULL_2; IN; IN_ELIM_THM]);
2788 (EXPAND_TAC "y" THEN REWRITE_TAC[PRO_EXP]);
2789 (ABBREV_TAC `rtemp = ((x - u0) dot (u1 - u0)) / ((u1 - u0) dot (u1 -
2791 (EXISTS_TAC `&1 - rtemp` THEN EXISTS_TAC `rtemp:real`);
2795 (UP_ASM_TAC THEN REWRITE_TAC[IN; AFFINE_HULL_2; CONVEX_HULL_2; IN_ELIM_THM]);
2797 (EXISTS_TAC `u:real` THEN EXISTS_TAC `v:real`);
2798 (ASM_REWRITE_TAC[]);
2800 (NEW_GOAL `y - u0 = v % (u1 - u0:real^3)`);
2801 (NEW_GOAL `y - u0 = y - (u + v) % u0:real^3`);
2802 (REWRITE_TAC[ASSUME `u + v = &1`; VECTOR_MUL_LID]);
2803 (UP_ASM_TAC THEN REWRITE_WITH `y - (u + v) % u0 = v % (u1 - u0:real^3)`);
2804 (REWRITE_TAC[ASSUME `y = u % u0 + v % u1:real^3`] THEN VECTOR_ARITH_TAC);
2806 (ASM_CASES_TAC `u < &0`);
2808 (NEW_GOAL `norm (y - u0) <= norm (x - u0:real^3)`);
2809 (MATCH_MP_TAC Tactics_jordan.REAL_POW_2_LE);
2810 (REWRITE_TAC[NORM_POS_LE; ASSUME
2811 `norm (x - u0:real^3) pow 2 = norm (y - u0) pow 2 + norm (x - y) pow 2`;
2812 REAL_ARITH `a <= a + b <=> &0 <= b`; REAL_LE_POW_2]);
2813 (NEW_GOAL `norm (x - u0:real^3) < &1`);
2814 (REWRITE_TAC[GSYM dist] THEN ONCE_REWRITE_TAC[DIST_SYM] THEN
2815 REWRITE_TAC[GSYM IN_BALL]);
2816 (NEW_GOAL `ball (u0:real^3, r) SUBSET ball (u0, &1)`);
2817 (MATCH_MP_TAC SUBSET_BALL);
2818 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
2819 (UP_ASM_TAC THEN UNDISCH_TAC
2820 `x IN ball (u0:real^3,r) INTER rcone_gt u0 u1 d` THEN SET_TAC[]);
2822 (NEW_GOAL `norm (y - u0) = v * norm (u1:real^3 - u0)`);
2823 (ASM_REWRITE_TAC[NORM_MUL]);
2825 (REWRITE_WITH `abs v = v`);
2826 (REWRITE_TAC[REAL_ABS_REFL]);
2827 (UNDISCH_TAC `u + v = &1` THEN UNDISCH_TAC `u < &0` THEN REAL_ARITH_TAC);
2828 (NEW_GOAL `&2 <= norm (u1 - u0:real^3)`);
2829 (REWRITE_TAC[GSYM dist]);
2830 (UNDISCH_TAC `packing (V:real^3->bool)` THEN REWRITE_TAC[packing]);
2832 (FIRST_ASSUM MATCH_MP_TAC);
2833 (ASM_REWRITE_TAC[]);
2834 (ONCE_REWRITE_TAC[MESON[IN] `V x <=> x IN (V:real^3->bool)`]);
2835 (ASM_REWRITE_TAC[]);
2837 (NEW_GOAL `v * &2 <= v * norm (u1 - u0:real^3)`);
2838 (REWRITE_TAC[REAL_ARITH `a * b <= a * c <=> &0 <= a * (c - b)`]);
2839 (MATCH_MP_TAC REAL_LE_MUL);
2840 (UNDISCH_TAC `u + v = &1` THEN UNDISCH_TAC `u < &0` THEN UP_ASM_TAC);
2843 (NEW_GOAL `&1 < v`);
2844 (UNDISCH_TAC `u + v = &1` THEN UNDISCH_TAC `u < &0` THEN REAL_ARITH_TAC);
2845 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN
2846 UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
2847 (UP_ASM_TAC THEN MESON_TAC[]);
2849 (ASM_CASES_TAC `v < &0`);
2851 (NEW_GOAL `(y - u0) dot (u1 - u0:real^3) <= &0`);
2852 (ASM_REWRITE_TAC[DOT_LMUL; REAL_ARITH `a * b <= &0 <=> &0 <= (--a) * b`]);
2853 (MATCH_MP_TAC REAL_LE_MUL);
2854 (REWRITE_TAC[DOT_POS_LE]);
2855 (UP_ASM_TAC THEN REAL_ARITH_TAC);
2857 (NEW_GOAL `&0 <= dist (x,u0) * dist (u1,u0:real^3) * a'`);
2858 (MATCH_MP_TAC REAL_LE_MUL);
2859 (REWRITE_TAC[DIST_POS_LE]);
2860 (MATCH_MP_TAC REAL_LE_MUL);
2861 (REWRITE_TAC[DIST_POS_LE]);
2862 (EXPAND_TAC "a'" THEN MATCH_MP_TAC REAL_LE_DIV);
2864 (REWRITE_TAC[HL_2]);
2865 (MATCH_MP_TAC REAL_LE_MUL);
2866 (REWRITE_TAC[DIST_POS_LE] THEN REAL_ARITH_TAC);
2867 (MATCH_MP_TAC SQRT_POS_LE THEN REAL_ARITH_TAC);
2868 (UP_ASM_TAC THEN UP_ASM_TAC THEN UNDISCH_TAC
2869 `(y - u0:real^3) dot (u1 - u0) > dist (x,u0) * dist (u1,u0) * a'`);
2871 (UP_ASM_TAC THEN MESON_TAC[]);
2872 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
2874 (NEW_GOAL `&0 <= dist (x,u0) * dist (u1,u0:real^3) * a'`);
2875 (MATCH_MP_TAC REAL_LE_MUL);
2876 (REWRITE_TAC[DIST_POS_LE]);
2877 (MATCH_MP_TAC REAL_LE_MUL);
2878 (REWRITE_TAC[DIST_POS_LE]);
2879 (EXPAND_TAC "a'" THEN MATCH_MP_TAC REAL_LE_DIV);
2881 (REWRITE_TAC[HL_2]);
2882 (MATCH_MP_TAC REAL_LE_MUL);
2883 (REWRITE_TAC[DIST_POS_LE] THEN REAL_ARITH_TAC);
2884 (MATCH_MP_TAC SQRT_POS_LE THEN REAL_ARITH_TAC);
2885 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
2887 (NEW_GOAL `(y - u1) dot (u0 - u1) = norm (y - u1) * norm (u0 - u1:real^3)`);
2888 (REWRITE_TAC[NORM_CAUCHY_SCHWARZ_EQ]);
2889 (REWRITE_WITH `y - u1 = proj_point (u1 - u0) (x - u0:real^3) - (u1 - u0)`);
2890 (EXPAND_TAC "y" THEN VECTOR_ARITH_TAC);
2891 (REWRITE_TAC[PRO_EXP; VECTOR_ARITH `x % a - a = (x - &1) % a`; NORM_MUL;
2895 (((x - u0) dot (u1 - u0)) / ((u1 - u0) dot (u1 - u0)) - &1)) % (u1 - u0) =
2896 (norm (u0 - u1:real^3) *
2897 (&1 - ((x - u0) dot (u1 - u0)) / ((u1 - u0) dot (u1 - u0)))) % (u0 - u1)`);
2899 (MATCH_MP_TAC (MESON[] `a = b ==> a % x = b % x`));
2900 (REWRITE_TAC[REAL_ARITH `a * norm b = norm b * a`]);
2901 (REWRITE_TAC[NORM_ARITH `norm (a - b) = norm (b - a)`]);
2902 (MATCH_MP_TAC (MESON[] `a = b ==> x * a = x * b`));
2903 (REWRITE_TAC[REAL_ARITH `abs (x - &1) = abs (&1 - x)`]);
2904 (REWRITE_TAC[REAL_ABS_REFL; REAL_ARITH `&0 <= a - b <=> b <= a`]);
2905 (REWRITE_WITH `((x - u0) dot (u1 - u0)) / ((u1 - u0) dot (u1 - u0)) <= &1
2906 <=> ((x - u0) dot (u1 - u0)) <= &1 * ((u1 - u0) dot (u1 - u0:real^3))`);
2907 (MATCH_MP_TAC REAL_LE_LDIV_EQ);
2908 (REWRITE_TAC[DOT_POS_LT; VECTOR_ARITH `a - b = vec 0 <=> b = a`]);
2909 (ASM_REWRITE_TAC[]);
2910 (NEW_GOAL `(x - u0) dot (u1 - u0) <= norm (x - u0) * norm (u1 - u0:real^3)`);
2911 (REWRITE_TAC[NORM_CAUCHY_SCHWARZ]);
2913 (NEW_GOAL `norm (x - u0) * norm (u1 - u0) <= &1 * norm (u1 - u0:real^3)`);
2914 (REWRITE_TAC[REAL_ARITH `a * x <= b * x <=> &0 <= (b - a) * x`]);
2915 (MATCH_MP_TAC REAL_LE_MUL);
2916 (REWRITE_TAC[NORM_POS_LE; REAL_ARITH `&0 <= a - b <=> b <= a`; GSYM dist]);
2917 (MATCH_MP_TAC (REAL_ARITH `a < x ==> a <= x`));
2918 (ONCE_REWRITE_TAC[DIST_SYM] THEN REWRITE_TAC[GSYM IN_BALL]);
2919 (NEW_GOAL `ball (u0:real^3, r) SUBSET ball (u0, &1)`);
2920 (MATCH_MP_TAC SUBSET_BALL);
2921 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
2922 (UP_ASM_TAC THEN UNDISCH_TAC
2923 `x IN ball (u0:real^3,r) INTER rcone_gt u0 u1 d` THEN SET_TAC[]);
2924 (REWRITE_TAC[GSYM NORM_POW_2; REAL_ARITH `&1 * a pow 2 = a * a`]);
2925 (NEW_GOAL `&1 * norm (u1 - u0) <= norm (u1 - u0) * norm (u1 - u0:real^3)`);
2926 (REWRITE_TAC[REAL_ARITH `a * x <= b * x <=> &0 <= (b - a) * x`]);
2927 (MATCH_MP_TAC REAL_LE_MUL);
2928 (REWRITE_TAC[NORM_POS_LE; REAL_ARITH `&0 <= a - b <=> b <= a`; GSYM dist]);
2929 (MATCH_MP_TAC (REAL_ARITH `&2 <= x ==> &1 <= x`));
2930 (UNDISCH_TAC `packing (V:real^3->bool)` THEN REWRITE_TAC[packing]);
2932 (FIRST_ASSUM MATCH_MP_TAC);
2933 (ASM_REWRITE_TAC[]);
2934 (ONCE_REWRITE_TAC[MESON[IN] `V x <=> x IN (V:real^3->bool)`]);
2935 (ASM_REWRITE_TAC[]);
2936 (UNDISCH_TAC `(x - u0:real^3) dot (u1 - u0) <=
2937 norm (x - u0) * norm (u1 - u0)` THEN
2938 UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
2939 (ASM_REWRITE_TAC[dist]);
2940 (REWRITE_TAC[REAL_ARITH `a * b >= x * b * c <=> &0 <= b * (a - x * c)`]);
2941 (MATCH_MP_TAC REAL_LE_MUL);
2942 (REWRITE_TAC[NORM_POS_LE; REAL_ARITH `&0 <= a - b <=> b <= a`]);
2943 (MATCH_MP_TAC Tactics_jordan.REAL_POW_2_LE);
2946 (MATCH_MP_TAC REAL_LE_MUL);
2947 (REWRITE_TAC[NORM_POS_LE]);
2948 (EXPAND_TAC "a'" THEN MATCH_MP_TAC REAL_LE_DIV);
2950 (REWRITE_TAC[HL_2]);
2951 (MATCH_MP_TAC REAL_LE_MUL);
2952 (REWRITE_TAC[DIST_POS_LE] THEN REAL_ARITH_TAC);
2953 (MATCH_MP_TAC SQRT_POS_LE THEN REAL_ARITH_TAC);
2954 (REWRITE_TAC[NORM_POS_LE; REAL_ARITH `(a * b) pow 2 = a pow 2 * b pow 2`]);
2955 (ASM_REWRITE_TAC[]);
2956 (REWRITE_TAC[REAL_ARITH `(a + b) * x <= a <=> b * x <= (&1 - x) * a`]);
2958 (UNDISCH_TAC `(y - u0) dot (u1 - u0) > dist (x,u0) * dist (u1,u0:real^3) * a'`);
2959 (ASM_REWRITE_TAC[dist]);
2960 (REWRITE_TAC[REAL_ARITH `a * b > x * b * c <=> &0 < b * (a - x * c)`]);
2961 (REWRITE_TAC[REAL_MUL_POS_LT]);
2962 (REWRITE_WITH `~(norm (u1 - u0:real^3) < &0 /\
2963 norm (y - u0) - norm (x - u0) * a' < &0)`);
2964 (NEW_GOAL `&0 <= norm (u1 - u0:real^3)`);
2965 (REWRITE_TAC[NORM_POS_LE]);
2966 (UP_ASM_TAC THEN REAL_ARITH_TAC);
2967 (REWRITE_TAC[REAL_ARITH `&0 < a - b <=> b < a`]);
2968 (REWRITE_WITH `norm (x - u0) * a' < norm (y - u0:real^3) <=>
2969 (norm (x - u0) * a') pow 2 < norm (y - u0) pow 2`);
2970 (MATCH_MP_TAC Pack1.bp_bdt);
2972 (MATCH_MP_TAC REAL_LE_MUL);
2973 (REWRITE_TAC[NORM_POS_LE]);
2974 (EXPAND_TAC "a'" THEN MATCH_MP_TAC REAL_LE_DIV);
2976 (REWRITE_TAC[HL_2]);
2977 (MATCH_MP_TAC REAL_LE_MUL);
2978 (REWRITE_TAC[DIST_POS_LE] THEN REAL_ARITH_TAC);
2979 (MATCH_MP_TAC SQRT_POS_LE THEN REAL_ARITH_TAC);
2980 (REWRITE_TAC[NORM_POS_LE]);
2982 (ASM_REWRITE_TAC[REAL_ARITH `(a * b) pow 2 = a pow 2 * b pow 2`]);
2983 (REWRITE_TAC[REAL_ARITH `(a + b) * x < a <=> b * x < (&1 - x) * a`]);
2986 (NEW_GOAL `(&1 - a' pow 2) * norm (y - u0) pow 2 <=
2987 (&1 - a' pow 2) * norm (y - u1:real^3) pow 2`);
2988 (REWRITE_TAC[REAL_ARITH `a * x <= a * y <=> &0 <= a * (y - x)`]);
2989 (MATCH_MP_TAC REAL_LE_MUL);
2991 (REWRITE_TAC[REAL_ARITH `&0 <= &1 - b <=> b <= &1 pow 2`]);
2992 (REWRITE_WITH `a' pow 2 <= &1 pow 2 <=> a' <= &1`);
2993 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2994 (MATCH_MP_TAC Collect_geom.POW2_COND);
2995 (REWRITE_TAC[REAL_ARITH `&0 <= &1`]);
2996 (EXPAND_TAC "a'" THEN MATCH_MP_TAC REAL_LE_DIV);
2998 (REWRITE_TAC[HL_2]);
2999 (MATCH_MP_TAC REAL_LE_MUL);
3000 (REWRITE_TAC[DIST_POS_LE] THEN REAL_ARITH_TAC);
3001 (MATCH_MP_TAC SQRT_POS_LE THEN REAL_ARITH_TAC);
3004 (MATCH_MP_TAC REAL_DIV_LE_1_TACTICS);
3005 (ASM_SIMP_TAC[SQRT_POS_LT; REAL_ARITH `&0 < &2`]);
3006 (UNDISCH_TAC `hl [u0; u1:real^3] < sqrt (&2)` THEN REAL_ARITH_TAC);
3007 (NEW_GOAL `norm (x - u0) pow 2 <= norm (x - u1:real^3) pow 2`);
3008 (REWRITE_WITH `norm (x - u0) pow 2 <= norm (x - u1:real^3) pow 2 <=>
3009 norm (x - u0) <= norm (x - u1:real^3)`);
3010 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3011 (MATCH_MP_TAC Collect_geom.POW2_COND);
3012 (REWRITE_TAC[NORM_POS_LE]);
3013 (MATCH_MP_TAC (REAL_ARITH `&2 * x <= x + y ==> x <= y`));
3014 (REWRITE_TAC[GSYM dist]);
3016 (NEW_GOAL `dist (x, u0:real^3) < &1`);
3017 (ONCE_REWRITE_TAC[DIST_SYM] THEN REWRITE_TAC[GSYM IN_BALL]);
3018 (NEW_GOAL `ball (u0:real^3, r) SUBSET ball (u0, &1)`);
3019 (MATCH_MP_TAC SUBSET_BALL);
3020 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
3021 (UP_ASM_TAC THEN UNDISCH_TAC
3022 `x IN ball (u0:real^3,r) INTER rcone_gt u0 u1 d` THEN SET_TAC[]);
3023 (NEW_GOAL `&2 * dist (x, u0:real^3) < &2`);
3024 (UP_ASM_TAC THEN REAL_ARITH_TAC);
3025 (NEW_GOAL `&2 <= dist (x, u0) + dist (x, u1:real^3)`);
3026 (NEW_GOAL `&2 <= dist (u0, u1:real^3)`);
3027 (UNDISCH_TAC `packing (V:real^3->bool)` THEN REWRITE_TAC[packing]);
3029 (FIRST_ASSUM MATCH_MP_TAC);
3030 (ASM_REWRITE_TAC[]);
3031 (ONCE_REWRITE_TAC[MESON[IN] `V a <=> a:real^3 IN V`]);
3032 (ASM_REWRITE_TAC[]);
3034 (NEW_GOAL `dist (u0, u1:real^3) <= dist (u0, x) + dist (x, u1)`);
3035 (REWRITE_TAC[DIST_TRIANGLE]);
3036 (UP_ASM_TAC THEN REWRITE_TAC[DIST_SYM]);
3037 (UP_ASM_TAC THEN REAL_ARITH_TAC);
3038 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3039 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3041 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3044 (UNDISCH_TAC `~NULLSET (X INTER D)`);
3046 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3047 (EXISTS_TAC `X INTER C:real^3->bool`);
3048 (ASM_SIMP_TAC [SET_RULE `A SUBSET B ==> X INTER A SUBSET X INTER B`]);
3049 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell2; SET_RULE `{} INTER s = {}`]);
3050 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
3051 (UP_ASM_TAC THEN MESON_TAC[]);
3053 (NEW_GOAL `~coplanar {u0, u1:real^3, m, s3}`);
3054 (ONCE_REWRITE_TAC[GSYM COPLANAR_AFFINE_HULL_COPLANAR]);
3056 (NEW_GOAL `NULLSET X`);
3057 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3058 (EXISTS_TAC `affine hull {u0, u1, m, s3:real^3}`);
3060 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
3061 (UP_ASM_TAC THEN MESON_TAC[]);
3062 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell2]);
3065 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> M INTER N INTER A SUBSET B`));
3067 (NEW_GOAL `?v0 v1 v2 v3. vl = [v0;v1;v2;v3:real^3]`);
3068 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
3069 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3070 (UP_ASM_TAC THEN STRIP_TAC);
3071 (REWRITE_WITH `HD vl = u0 /\ HD (TL vl) = u1:real^3`);
3072 (REWRITE_WITH `(HD vl):real^3 = HD (truncate_simplex 1 vl)`);
3073 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3074 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
3075 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
3076 (ASM_REWRITE_TAC[HD; TL]);
3077 (NEW_GOAL `HD (TL(truncate_simplex 1 vl)) = u1:real^3`);
3078 (ASM_REWRITE_TAC[HD; TL]);
3079 (NEW_GOAL `HD (TL(truncate_simplex 1 vl)) = v1:real^3`);
3080 (REWRITE_TAC[ASSUME `vl = [v0; v1; v2; v3:real^3]`;
3081 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
3082 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
3083 (REWRITE_WITH `{u0, u1, m, s3} = {u0, u1} UNION {m:real^3, s3}`);
3085 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
3087 (UNDISCH_TAC `~NULLSET (X INTER D)`);
3088 (REWRITE_TAC[] THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3089 (EXISTS_TAC `X:real^3->bool`);
3090 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3092 (* ========================================================================= *)
3093 (ASM_CASES_TAC `azim u0 u1 m (s3:real^3) < pi`);
3094 (REWRITE_WITH `vol (L INTER D) = vol (D INTER wedge u0 u1 m s3)`);
3095 (ASM_SIMP_TAC[WEDGE_LUNE]);
3096 (REWRITE_WITH `L INTER conic_cap (u0:real^3) u1 r d =
3097 conic_cap u0 u1 r d INTER L`);
3099 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_SYMDIFF);
3100 (REWRITE_WITH `conic_cap (u0:real^3) u1 r d INTER
3101 aff_gt {u0, u1} {m, s3} DIFF conic_cap u0 u1 r d INTER L = {}`);
3103 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> C INTER A DIFF C INTER B = {}`));
3104 (REWRITE_TAC[AFF_GT_SUBSET_AFF_GE]);
3105 (REWRITE_TAC[SET_RULE `A UNION {} = A`]);
3108 (REWRITE_WITH `aff_ge {u0, u1:real^3} {m, s3} =
3109 aff_gt {u0, u1} {m, s3} UNION
3110 UNIONS {aff_ge {u0, u1} ({m, s3} DELETE a) | a | a IN {m, s3}}`);
3111 (MATCH_MP_TAC AFF_GE_AFF_GT_DECOMP);
3112 (REWRITE_TAC[Geomdetail.FINITE6]);
3113 (REWRITE_TAC[DISJOINT]);
3115 (ASM_CASES_TAC `m IN {u0, u1:real^3}`);
3117 (UNDISCH_TAC `~coplanar {u0, u1, m, s3:real^3}`);
3118 (REWRITE_WITH `{u0, u1, m, s3} = {u0, u1, s3:real^3}`);
3119 (UP_ASM_TAC THEN SET_TAC[]);
3120 (REWRITE_TAC[COPLANAR_3]);
3121 (UP_ASM_TAC THEN MESON_TAC[]);
3123 (ASM_CASES_TAC `s3 IN {u0, u1:real^3}`);
3125 (UNDISCH_TAC `~coplanar {u0, u1, m, s3:real^3}`);
3126 (REWRITE_WITH `{u0, u1, m, s3} = {u0, u1, m:real^3}`);
3127 (UP_ASM_TAC THEN SET_TAC[]);
3128 (REWRITE_TAC[COPLANAR_3]);
3129 (UP_ASM_TAC THEN MESON_TAC[]);
3130 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
3132 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3134 `UNIONS {aff_ge {u0, u1:real^3} ({m, s3} DELETE a) | a | a IN {m, s3}}`);
3136 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3138 `aff_ge {u0, u1:real^3} {m} UNION aff_ge {u0, u1:real^3} {s3}`);
3140 (MATCH_MP_TAC NEGLIGIBLE_UNION);
3143 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3144 (EXISTS_TAC `affine hull {u0, u1:real^3, m}`);
3146 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
3147 (REWRITE_WITH `{u0,u1,m:real^3} = {u0,u1} UNION {m}`);
3149 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
3150 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3151 (EXISTS_TAC `affine hull {u0, u1:real^3, s3}`);
3153 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
3154 (REWRITE_WITH `{u0,u1,s3:real^3} = {u0,u1} UNION {s3}`);
3156 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
3157 (REWRITE_TAC[SET_RULE
3158 `UNIONS {aff_ge {u0, u1} ({m, s3} DELETE a) | a | a IN {m, s3}} =
3159 aff_ge {u0, u1} ({m, s3} DELETE s3)
3160 UNION aff_ge {u0, u1} ({m, s3} DELETE m)`]);
3161 (MATCH_MP_TAC (SET_RULE
3162 `A SUBSET B /\ C SUBSET D ==> A UNION C SUBSET B UNION D`));
3164 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
3168 (REWRITE_TAC[DISJOINT]);
3169 (ASM_CASES_TAC `m IN {u0, u1:real^3}`);
3171 (UNDISCH_TAC `~coplanar {u0, u1, m, s3:real^3}`);
3172 (REWRITE_WITH `{u0, u1, m, s3} = {u0, u1, s3:real^3}`);
3173 (UP_ASM_TAC THEN SET_TAC[]);
3174 (REWRITE_TAC[COPLANAR_3]);
3175 (UP_ASM_TAC THEN MESON_TAC[]);
3176 (UP_ASM_TAC THEN SET_TAC[]);
3178 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
3181 (REWRITE_TAC[DISJOINT]);
3182 (ASM_CASES_TAC `s3 IN {u0, u1:real^3}`);
3184 (UNDISCH_TAC `~coplanar {u0, u1, m, s3:real^3}`);
3185 (REWRITE_WITH `{u0, u1, m, s3} = {u0, u1, m:real^3}`);
3186 (UP_ASM_TAC THEN SET_TAC[]);
3187 (REWRITE_TAC[COPLANAR_3]);
3188 (UP_ASM_TAC THEN MESON_TAC[]);
3189 (UP_ASM_TAC THEN SET_TAC[]);
3193 (REWRITE_TAC[ASSUME `D = conic_cap (u0:real^3) u1 r d`]);
3194 (REWRITE_WITH `vol (conic_cap u0 u1 r d INTER wedge u0 u1 m s3) =
3195 (if &1 < d \/ r < &0
3197 else azim u0 u1 m s3 / &3 * (&1 - max d (-- &1)) * r pow 3)`);
3198 (NEW_GOAL `~collinear {u0:real^3, u1, m} /\ ~collinear {u0, u1, s3}`);
3200 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3201 (EXISTS_TAC `s3:real^3`);
3202 (ASM_REWRITE_TAC[]);
3203 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3204 (EXISTS_TAC `m:real^3`);
3205 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
3206 (ASM_REWRITE_TAC[]);
3208 (ASM_SIMP_TAC[VOLUME_CONIC_CAP_WEDGE]);
3211 (UNDISCH_TAC `&0 < r` THEN UNDISCH_TAC `d < &1` THEN
3212 UP_ASM_TAC THEN REAL_ARITH_TAC);
3213 (UP_ASM_TAC THEN MESON_TAC[]);
3215 (REWRITE_WITH `azim (u0:real^3) u1 m s3 = dihV u0 u1 m s3`);
3216 (MATCH_MP_TAC AZIM_DIHV_SAME);
3217 (ASM_REWRITE_TAC[]);
3219 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3220 (EXISTS_TAC `s3:real^3`);
3221 (ASM_REWRITE_TAC[]);
3222 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3223 (EXISTS_TAC `m:real^3`);
3224 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
3225 (ASM_REWRITE_TAC[]);
3227 (REWRITE_TAC[dihX]);
3230 (UNDISCH_TAC `~NULLSET (X INTER D)`);
3232 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3233 (EXISTS_TAC `X:real^3->bool`);
3234 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3235 (UP_ASM_TAC THEN MESON_TAC[]);
3239 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
3240 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
3243 initial_sublist [u0; u1] ul)`);
3245 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
3246 (MATCH_MP_TAC SELECT_AX);
3247 (EXISTS_TAC `(2, vl:(real^3)list)`);
3249 (REWRITE_TAC[BETA_THM]);
3250 (REWRITE_TAC[IN; ARITH_RULE `2 <= 4`] THEN ASM_REWRITE_TAC[]);
3251 (REWRITE_WITH `initial_sublist [u0;u1:real^3] vl /\ LENGTH [u0;u1] = 1 + 1`);
3252 (REWRITE_TAC[GSYM Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
3253 (ASM_REWRITE_TAC[]);
3255 (NEW_GOAL `?v0 v1 v2 v3. vl = [v0;v1;v2;v3:real^3]`);
3256 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
3257 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3258 (UP_ASM_TAC THEN STRIP_TAC);
3259 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
3260 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3261 (EXPAND_TAC "P" THEN REWRITE_TAC[IN] THEN REPEAT STRIP_TAC);
3263 (NEW_GOAL `k' = 2 /\ mcell k' V ul = mcell 2 V vl`);
3264 (MATCH_MP_TAC Ajripqn.AJRIPQN);
3265 (ASM_REWRITE_TAC[]);
3266 (REWRITE_WITH `mcell k' V ul INTER mcell 2 V vl = X`);
3267 (SET_TAC[ASSUME `X = mcell k' V ul`;
3268 ASSUME `X = mcell k V vl`; ASSUME `k = 2`]);
3270 (UNDISCH_TAC `k' <= 4` THEN REWRITE_TAC[ARITH_RULE
3271 `a <= 4 <=> a = 0 \/a = 1 \/ a = 2 \/ a = 3 \/ a = 4`] THEN SET_TAC[]);
3273 (UP_ASM_TAC THEN UNDISCH_TAC `~NULLSET X` THEN MESON_TAC[]);
3276 (REWRITE_TAC[dihu2]);
3278 (REWRITE_WITH `omega_list_n V ul 3 = s3`);
3281 (!k. 2 - 1 <= k /\ k <= 3
3282 ==> omega_list_n V ul k = omega_list_n V vl k)`);
3283 (MATCH_MP_TAC MCELL_ID_OMEGA_LIST_N);
3284 (ASM_REWRITE_TAC[SET_RULE `2 IN {2,3,4}`]);
3285 (REWRITE_TAC[GSYM (ASSUME `X = mcell k' V ul`); GSYM (ASSUME `k' = 2`)]);
3286 (ASM_REWRITE_TAC[]);
3287 (UP_ASM_TAC THEN STRIP_TAC);
3289 (FIRST_ASSUM MATCH_MP_TAC);
3292 (REWRITE_WITH `mxi V ul = m`);
3294 (MATCH_MP_TAC MCELL_ID_MXI);
3295 (EXISTS_TAC `2` THEN EXISTS_TAC `2`);
3296 (ASM_REWRITE_TAC[SET_RULE `2 IN {2,3}`]);
3299 (REWRITE_WITH `(HD vl):real^3 = HD (truncate_simplex 1 vl)`);
3300 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3301 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
3302 (REWRITE_WITH `LENGTH (vl:(real^3)list) = 3 + 1 /\
3303 CARD (set_of_list vl) = 3 + 1`);
3304 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
3305 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3307 (ASM_REWRITE_TAC[HD]);
3309 (REWRITE_WITH `(HD ul):real^3 = HD (truncate_simplex 1 ul)`);
3310 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3311 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
3312 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
3313 CARD (set_of_list ul) = 3 + 1`);
3314 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
3315 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3318 (REWRITE_WITH `truncate_simplex 1 ul = [u0;u1:real^3] /\ 1 + 1 <= LENGTH ul`);
3319 (REWRITE_TAC[Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
3320 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
3322 (REWRITE_TAC[GSYM (ASSUME `X = mcell k' V ul`); GSYM (ASSUME `k' = 2`)]);
3323 (ASM_REWRITE_TAC[]);
3325 (NEW_GOAL `initial_sublist [u0; u1:real^3] ul /\ LENGTH [u0; u1] = 1 + 1`);
3326 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
3327 (NEW_GOAL `truncate_simplex 1 ul = [u0;u1:real^3] /\ 1 + 1 <= LENGTH ul`);
3328 (REWRITE_TAC[Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
3329 (ASM_REWRITE_TAC[]);
3331 (REWRITE_WITH `EL 0 (ul:(real^3)list) = EL 0 (truncate_simplex 1 ul)`);
3332 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3333 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
3334 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
3335 CARD (set_of_list ul) = 3 + 1`);
3336 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
3337 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3340 (REWRITE_WITH `EL 1 (ul:(real^3)list) = EL 1 (truncate_simplex 1 ul)`);
3341 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3342 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
3343 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
3344 CARD (set_of_list ul) = 3 + 1`);
3345 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
3346 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3348 (ASM_REWRITE_TAC[EL; HD; ARITH_RULE `1 = SUC 0`; TL]);
3349 (REWRITE_TAC[REAL_ARITH `a / b * c * d pow 3 = (c/ b * d pow 3) * a`]);
3350 (REWRITE_TAC[REAL_ARITH `a * b / (&2 * c) = (a / (&2 * c)) * b`]);
3351 (AP_THM_TAC THEN AP_TERM_TAC);
3354 `measurable (conic_cap u0 u1 r d) /\
3355 vol (conic_cap u0 u1 r d) =
3356 (if u1 = u0 \/ &1 <= d \/ r < &0
3358 else &2 / &3 * pi * (&1 - d) * r pow 3)`);
3359 (MATCH_MP_TAC VOLUME_CONIC_CAP);
3361 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
3364 (UP_ASM_TAC THEN STRIP_TAC);
3365 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1:real^3)` THEN MESON_TAC[]);
3366 (UNDISCH_TAC `d < &1` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3367 (UNDISCH_TAC `&0 < r` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3368 (UP_ASM_TAC THEN MESON_TAC[]);
3369 (REWRITE_TAC[ARITH_RULE `SUC 0 = 1`]);
3372 (REWRITE_WITH `max d (--(&1)) = d`);
3373 (MATCH_MP_TAC (REAL_ARITH `&0 < d /\ --(&1) < &0 ==> max d (--(&1)) = d`));
3374 (REWRITE_TAC[REAL_NEG_LT0]);
3377 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
3381 (&2 / &3 * pi * (&1 - d) * r pow 3) / (&2 * pi) = (&1 - d) / &3 * r pow 3 *
3382 ((&2 * pi) / (&2 * pi))`);
3384 (REWRITE_WITH `(&2 * pi) / (&2 * pi) = &1`);
3385 (MATCH_MP_TAC REAL_DIV_REFL);
3386 (REWRITE_TAC[REAL_ENTIRE; PI_NZ; REAL_ARITH `~(&2 = &0)`]);
3389 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
3390 (UP_ASM_TAC THEN MESON_TAC[]);
3392 (* ========================================================================= *)
3395 (ASM_CASES_TAC `azim u0 u1 s3 (m:real^3) < pi`);
3396 (UNDISCH_TAC `~coplanar {u0, u1, m, s3:real^3}`);
3397 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
3399 (REWRITE_WITH `vol (L INTER D) = vol (D INTER wedge u0 u1 s3 m)`);
3400 (ASM_SIMP_TAC[WEDGE_LUNE]);
3401 (REWRITE_WITH `L INTER conic_cap (u0:real^3) u1 r d =
3402 conic_cap u0 u1 r d INTER L`);
3404 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_SYMDIFF);
3406 (REWRITE_WITH `conic_cap (u0:real^3) u1 r d INTER
3407 aff_gt {u0, u1} {s3, m} DIFF conic_cap u0 u1 r d INTER L = {}`);
3409 (REWRITE_TAC[SET_RULE `{a,b} = {b, a}`]);
3410 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> C INTER A DIFF C INTER B = {}`));
3411 (REWRITE_TAC[AFF_GT_SUBSET_AFF_GE]);
3412 (REWRITE_TAC[SET_RULE `A UNION {} = A`]);
3414 (REWRITE_TAC[SET_RULE `{a,b} = {b, a}`]);
3416 (REWRITE_WITH `aff_ge {u0, u1:real^3} {m, s3} =
3417 aff_gt {u0, u1} {m, s3} UNION
3418 UNIONS {aff_ge {u0, u1} ({m, s3} DELETE a) | a | a IN {m, s3}}`);
3419 (MATCH_MP_TAC AFF_GE_AFF_GT_DECOMP);
3420 (REWRITE_TAC[Geomdetail.FINITE6]);
3421 (REWRITE_TAC[DISJOINT]);
3423 (ASM_CASES_TAC `m IN {u0, u1:real^3}`);
3425 (UNDISCH_TAC `~coplanar {u0, u1, s3, m:real^3}`);
3426 (REWRITE_WITH `{u0, u1, s3, m} = {u0, u1, s3:real^3}`);
3427 (UP_ASM_TAC THEN SET_TAC[]);
3428 (REWRITE_TAC[COPLANAR_3]);
3429 (UP_ASM_TAC THEN MESON_TAC[]);
3431 (ASM_CASES_TAC `s3 IN {u0, u1:real^3}`);
3433 (UNDISCH_TAC `~coplanar {u0, u1, s3, m:real^3}`);
3434 (REWRITE_WITH `{u0, u1, s3, m} = {u0, u1, m:real^3}`);
3435 (UP_ASM_TAC THEN SET_TAC[]);
3436 (REWRITE_TAC[COPLANAR_3]);
3437 (UP_ASM_TAC THEN MESON_TAC[]);
3438 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
3440 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3442 `UNIONS {aff_ge {u0, u1:real^3} ({m, s3} DELETE a) | a | a IN {m, s3}}`);
3444 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3446 `aff_ge {u0, u1:real^3} {m} UNION aff_ge {u0, u1:real^3} {s3}`);
3448 (MATCH_MP_TAC NEGLIGIBLE_UNION);
3451 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3452 (EXISTS_TAC `affine hull {u0, u1:real^3, m}`);
3454 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
3455 (REWRITE_WITH `{u0,u1,m:real^3} = {u0,u1} UNION {m}`);
3457 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
3458 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3459 (EXISTS_TAC `affine hull {u0, u1:real^3, s3}`);
3461 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
3462 (REWRITE_WITH `{u0,u1,s3:real^3} = {u0,u1} UNION {s3}`);
3464 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
3465 (REWRITE_TAC[SET_RULE
3466 `UNIONS {aff_ge {u0, u1} ({m, s3} DELETE a) | a | a IN {m, s3}} =
3467 aff_ge {u0, u1} ({m, s3} DELETE s3)
3468 UNION aff_ge {u0, u1} ({m, s3} DELETE m)`]);
3469 (MATCH_MP_TAC (SET_RULE
3470 `A SUBSET B /\ C SUBSET D ==> A UNION C SUBSET B UNION D`));
3472 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
3476 (REWRITE_TAC[DISJOINT]);
3477 (ASM_CASES_TAC `m IN {u0, u1:real^3}`);
3479 (UNDISCH_TAC `~coplanar {u0, u1, s3, m:real^3}`);
3480 (REWRITE_WITH `{u0, u1, s3, m} = {u0, u1, s3:real^3}`);
3481 (UP_ASM_TAC THEN SET_TAC[]);
3482 (REWRITE_TAC[COPLANAR_3]);
3483 (UP_ASM_TAC THEN MESON_TAC[]);
3484 (UP_ASM_TAC THEN SET_TAC[]);
3486 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
3489 (REWRITE_TAC[DISJOINT]);
3490 (ASM_CASES_TAC `s3 IN {u0, u1:real^3}`);
3492 (UNDISCH_TAC `~coplanar {u0, u1, s3, m:real^3}`);
3493 (REWRITE_WITH `{u0, u1, s3, m} = {u0, u1, m:real^3}`);
3494 (UP_ASM_TAC THEN SET_TAC[]);
3495 (REWRITE_TAC[COPLANAR_3]);
3496 (UP_ASM_TAC THEN MESON_TAC[]);
3497 (UP_ASM_TAC THEN SET_TAC[]);
3501 (REWRITE_TAC[ASSUME `D = conic_cap (u0:real^3) u1 r d`]);
3502 (REWRITE_WITH `vol (conic_cap u0 u1 r d INTER wedge u0 u1 s3 m) =
3503 (if &1 < d \/ r < &0
3505 else azim u0 u1 s3 m / &3 * (&1 - max d (-- &1)) * r pow 3)`);
3506 (NEW_GOAL `~collinear {u0:real^3, u1, m} /\ ~collinear {u0, u1, s3}`);
3508 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3509 (EXISTS_TAC `s3:real^3`);
3510 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
3511 (ASM_REWRITE_TAC[]);
3512 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3513 (EXISTS_TAC `m:real^3`);
3514 (ASM_REWRITE_TAC[]);
3516 (ASM_SIMP_TAC[VOLUME_CONIC_CAP_WEDGE]);
3520 (UNDISCH_TAC `&0 < r` THEN UNDISCH_TAC `d < &1` THEN
3521 UP_ASM_TAC THEN REAL_ARITH_TAC);
3522 (UP_ASM_TAC THEN MESON_TAC[]);
3524 (REWRITE_WITH `azim (u0:real^3) u1 s3 m = dihV u0 u1 s3 m`);
3525 (MATCH_MP_TAC AZIM_DIHV_SAME);
3526 (ASM_REWRITE_TAC[]);
3529 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3530 (EXISTS_TAC `m:real^3`);
3531 (ASM_REWRITE_TAC[]);
3532 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3533 (EXISTS_TAC `s3:real^3`);
3534 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
3535 (ASM_REWRITE_TAC[]);
3537 (REWRITE_TAC[dihX]);
3540 (UNDISCH_TAC `~NULLSET (X INTER D)`);
3542 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3543 (EXISTS_TAC `X:real^3->bool`);
3544 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3545 (UP_ASM_TAC THEN MESON_TAC[]);
3549 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
3550 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
3553 initial_sublist [u0; u1] ul)`);
3555 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
3556 (MATCH_MP_TAC SELECT_AX);
3557 (EXISTS_TAC `(2, vl:(real^3)list)`);
3559 (REWRITE_TAC[BETA_THM]);
3560 (REWRITE_TAC[IN; ARITH_RULE `2 <= 4`] THEN ASM_REWRITE_TAC[]);
3561 (REWRITE_WITH `initial_sublist [u0;u1:real^3] vl /\ LENGTH [u0;u1] = 1 + 1`);
3562 (REWRITE_TAC[GSYM Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
3563 (ASM_REWRITE_TAC[]);
3565 (NEW_GOAL `?v0 v1 v2 v3. vl = [v0;v1;v2;v3:real^3]`);
3566 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
3567 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3568 (UP_ASM_TAC THEN STRIP_TAC);
3569 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
3570 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3571 (EXPAND_TAC "P" THEN REWRITE_TAC[IN] THEN REPEAT STRIP_TAC);
3573 (NEW_GOAL `k' = 2 /\ mcell k' V ul = mcell 2 V vl`);
3574 (MATCH_MP_TAC Ajripqn.AJRIPQN);
3575 (ASM_REWRITE_TAC[]);
3576 (REWRITE_WITH `mcell k' V ul INTER mcell 2 V vl = X`);
3577 (REWRITE_TAC[ASSUME `X = mcell k V vl`; GSYM (ASSUME `X = mcell k' V ul`);
3581 (UNDISCH_TAC `k' <= 4` THEN REWRITE_TAC[ARITH_RULE
3582 `a <= 4 <=> a = 0 \/a = 1 \/ a = 2 \/ a = 3 \/ a = 4`] THEN SET_TAC[]);
3584 (UNDISCH_TAC `~NULLSET X` THEN UP_ASM_TAC THEN MESON_TAC[]);
3587 (REWRITE_TAC[dihu2]);
3588 (REWRITE_WITH `omega_list_n V ul 3 = s3`);
3591 (!k. 2 - 1 <= k /\ k <= 3
3592 ==> omega_list_n V ul k = omega_list_n V vl k)`);
3593 (MATCH_MP_TAC MCELL_ID_OMEGA_LIST_N);
3594 (ASM_REWRITE_TAC[SET_RULE `2 IN {2,3,4}`]);
3596 (MESON_TAC[ASSUME `X = mcell k V vl`; ASSUME `X = mcell k' V ul`;
3597 ASSUME `k = 2`; ASSUME `k' = 2`]);
3598 (REWRITE_WITH `mcell 2 V ul = X`);
3599 (MESON_TAC[ASSUME `X = mcell k' V ul`; ASSUME `k' = 2`]);
3600 (ASM_REWRITE_TAC[]);
3601 (UP_ASM_TAC THEN STRIP_TAC);
3602 (FIRST_ASSUM MATCH_MP_TAC);
3605 (REWRITE_WITH `mxi V ul = m`);
3607 (MATCH_MP_TAC MCELL_ID_MXI);
3608 (EXISTS_TAC `2` THEN EXISTS_TAC `2`);
3609 (ASM_REWRITE_TAC[SET_RULE `2 IN {2,3}`]);
3612 (REWRITE_WITH `(HD vl):real^3 = HD (truncate_simplex 1 vl)`);
3613 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3614 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
3615 (REWRITE_WITH `LENGTH (vl:(real^3)list) = 3 + 1 /\
3616 CARD (set_of_list vl) = 3 + 1`);
3617 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
3618 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3620 (ASM_REWRITE_TAC[HD]);
3622 (REWRITE_WITH `(HD ul):real^3 = HD (truncate_simplex 1 ul)`);
3623 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3624 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
3625 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
3626 CARD (set_of_list ul) = 3 + 1`);
3627 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
3628 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3631 (REWRITE_WITH `truncate_simplex 1 ul = [u0;u1:real^3] /\ 1 + 1 <= LENGTH ul`);
3632 (REWRITE_TAC[Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
3633 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
3637 (MESON_TAC[ASSUME `X = mcell k V vl`; ASSUME `X = mcell k' V ul`;
3638 ASSUME `k = 2`; ASSUME `k' = 2`]);
3639 (REWRITE_WITH `mcell 2 V ul = X`);
3640 (MESON_TAC[ASSUME `X = mcell k' V ul`; ASSUME `k' = 2`]);
3641 (ASM_REWRITE_TAC[]);
3643 (NEW_GOAL `initial_sublist [u0; u1:real^3] ul /\ LENGTH [u0; u1] = 1 + 1`);
3644 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
3645 (NEW_GOAL `truncate_simplex 1 ul = [u0;u1:real^3] /\ 1 + 1 <= LENGTH ul`);
3646 (REWRITE_TAC[Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
3647 (ASM_REWRITE_TAC[]);
3649 (REWRITE_WITH `EL 0 (ul:(real^3)list) = EL 0 (truncate_simplex 1 ul)`);
3650 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3651 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
3652 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
3653 CARD (set_of_list ul) = 3 + 1`);
3654 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
3655 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3658 (REWRITE_WITH `EL 1 (ul:(real^3)list) = EL 1 (truncate_simplex 1 ul)`);
3659 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3660 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
3661 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
3662 CARD (set_of_list ul) = 3 + 1`);
3663 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
3664 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3666 (ASM_REWRITE_TAC[EL; HD; ARITH_RULE `1 = SUC 0`; TL]);
3667 (REWRITE_TAC[DIHV_SYM_2]);
3668 (REWRITE_TAC[ARITH_RULE `SUC 0 = 1`]);
3670 (REWRITE_TAC[REAL_ARITH `a / b * c * d pow 3 = (c/ b * d pow 3) * a`]);
3671 (REWRITE_TAC[REAL_ARITH `a * b / (&2 * c) = (a / (&2 * c)) * b`]);
3672 (AP_THM_TAC THEN AP_TERM_TAC);
3674 `measurable (conic_cap u0 u1 r d) /\
3675 vol (conic_cap u0 u1 r d) =
3676 (if u1 = u0 \/ &1 <= d \/ r < &0
3678 else &2 / &3 * pi * (&1 - d) * r pow 3)`);
3679 (MATCH_MP_TAC VOLUME_CONIC_CAP);
3681 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
3684 (UP_ASM_TAC THEN STRIP_TAC);
3685 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3687 (UP_ASM_TAC THEN UNDISCH_TAC `d < &1` THEN REAL_ARITH_TAC);
3688 (UP_ASM_TAC THEN UNDISCH_TAC `&0 < r` THEN REAL_ARITH_TAC);
3689 (UP_ASM_TAC THEN MESON_TAC[]);
3691 (REWRITE_WITH `max d (--(&1)) = d`);
3692 (MATCH_MP_TAC (REAL_ARITH `&0 < d ==> max d (--(&1)) = d`));
3694 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
3696 (&2 / &3 * pi * (&1 - d) * r pow 3) / (&2 * pi) = (&1 - d) / &3 * r pow 3 *
3697 ((&2 * pi) / (&2 * pi))`);
3699 (REWRITE_WITH `(&2 * pi) / (&2 * pi) = &1`);
3700 (MATCH_MP_TAC REAL_DIV_REFL);
3701 (REWRITE_TAC[REAL_ENTIRE; PI_NZ; REAL_ARITH `~(&2 = &0)`]);
3704 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
3705 (UP_ASM_TAC THEN MESON_TAC[]);
3707 (* ========================================================================== *)
3710 (NEW_GOAL `azim (u0:real^3) u1 s3 m =
3711 (if azim u0 u1 m s3 = &0 then &0 else &2 * pi - azim u0 u1 m s3)`);
3712 (MATCH_MP_TAC AZIM_COMPL);
3715 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3716 (EXISTS_TAC `s3:real^3`);
3717 (ASM_REWRITE_TAC[]);
3718 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3719 (EXISTS_TAC `m:real^3`);
3720 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b, d, c}`]);
3721 (ASM_REWRITE_TAC[]);
3722 (UP_ASM_TAC THEN COND_CASES_TAC);
3724 (NEW_GOAL `(&0 < pi)`);
3725 (REWRITE_TAC[PI_POS]);
3726 (UNDISCH_TAC `~(azim (u0:real^3) u1 m s3 < pi)`);
3727 (ASM_REWRITE_TAC[]);
3728 (UP_ASM_TAC THEN MESON_TAC[]);
3731 (NEW_GOAL `azim (u0:real^3) u1 m s3 = pi`);
3732 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3733 (UNDISCH_TAC `~coplanar {u0, u1, m, s3:real^3}`);
3734 (REWRITE_TAC[] THEN MATCH_MP_TAC AZIM_EQ_0_PI_IMP_COPLANAR);
3735 (ASM_REWRITE_TAC[]);
3736 (UP_ASM_TAC THEN MESON_TAC[]);
3739 (* ========================================================================= *)
3741 (* ========================================================================= *)
3743 (ASM_CASES_TAC `k >= 4`);
3744 (NEW_GOAL `?u2 u3. vl = [u0; u1;u2;u3:real^3]`);
3745 (NEW_GOAL `?v0 v1 u2 u3. vl = [v0; v1;u2;u3:real^3]`);
3746 (MATCH_MP_TAC BARV_3_EXPLICIT);
3747 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3748 (UP_ASM_TAC THEN STRIP_TAC);
3749 (EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3`);
3751 (REWRITE_WITH `u0 = v0:real^3`);
3752 (REWRITE_WITH `v0:real^3 = HD (truncate_simplex 1 vl)`);
3753 (REWRITE_TAC[ASSUME `vl = [v0;v1;u2;u3:real^3]`;
3754 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
3755 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
3757 (REWRITE_WITH `u1 = v1:real^3`);
3758 (REWRITE_WITH `v1:real^3 = HD (TL (truncate_simplex 1 vl))`);
3759 (REWRITE_TAC[ASSUME `vl = [v0;v1;u2;u3:real^3]`;
3760 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
3761 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
3762 (ASM_REWRITE_TAC[]);
3763 (UP_ASM_TAC THEN STRIP_TAC);
3765 (ABBREV_TAC `L = aff_ge{u0, u1} {u2, u3:real^3}`);
3767 (REWRITE_WITH `vol (X INTER D) = vol (L INTER D)`);
3769 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell4; ARITH_RULE `4 >= 4`;set_of_list]);
3773 (REWRITE_TAC[SET_RULE `A = B <=> A SUBSET B /\ B SUBSET A`]);
3775 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> A INTER X SUBSET B INTER X`));
3776 (REWRITE_TAC[Marchal_cells_2_new.CONVEX_HULL_4_SUBSET_AFF_GE_2_2]);
3777 (MATCH_MP_TAC (SET_RULE `(!x. x IN A /\ x IN B ==> x IN C) ==>
3778 A INTER B SUBSET C INTER B`));
3779 (NEW_GOAL `DISJOINT {u0,u1:real^3} {u2, u3}`);
3780 (REWRITE_TAC[DISJOINT]);
3781 (MATCH_MP_TAC (MESON[] `(~A:bool ==> F) ==> A`));
3783 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
3784 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3785 (EXISTS_TAC `X:real^3->bool` THEN REWRITE_TAC[SET_RULE `A INTER X SUBSET A`]);
3786 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell4; set_of_list]);
3787 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3788 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
3789 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
3790 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
3791 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
3792 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
3793 (REWRITE_WITH `{u0, u1, u2, u3} = {u0, u1, u3:real^3}`);
3794 (UP_ASM_TAC THEN SET_TAC[]);
3795 (REWRITE_TAC[COPLANAR_3]);
3796 (NEW_GOAL `u3 IN {u0, u1:real^3}`);
3797 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
3798 (REWRITE_WITH `{u0, u1, u2, u3} = {u0, u1, u2:real^3}`);
3799 (UP_ASM_TAC THEN SET_TAC[]);
3800 (REWRITE_TAC[COPLANAR_3]);
3802 (SIMP_TAC[ASSUME `DISJOINT {u0, u1} {u2, u3:real^3}`; AFF_GE_2_2]);
3803 (REWRITE_TAC[CONVEX_HULL_4; IN; IN_ELIM_THM]);
3805 (EXISTS_TAC `t1:real` THEN EXISTS_TAC `t2:real` THEN
3806 EXISTS_TAC `t3:real` THEN EXISTS_TAC `t4:real`);
3807 (ASM_REWRITE_TAC[]);
3810 (REWRITE_TAC[REAL_ARITH `&0 <= a <=> (a < &0 ==> F)`]);
3812 (UNDISCH_TAC `conic_cap (u0:real^3) u1 r d x`);
3813 (REWRITE_TAC[MESON[IN] `conic_cap u0 u1 r d x <=> x IN conic_cap u0 u1 r d`;
3814 GSYM (ASSUME `D = conic_cap (u0:real^3) u1 r d`)]);
3816 (REWRITE_TAC[IN_INTER; MESON[] `~(x:bool /\ y) <=> (~x \/ ~y)`]);
3818 (REWRITE_TAC[IN_BALL] THEN STRIP_TAC);
3820 (NEW_GOAL `(?b1:real. b1 IN P2 /\ (!x. x IN P2 ==> b1 <= x))`);
3821 (FIRST_ASSUM MATCH_MP_TAC);
3822 (REWRITE_TAC[SET_RULE `~(X = {}) <=> (?x. x IN X)`]);
3823 (EXISTS_TAC `(f2:(real^3)list -> real) vl`);
3824 (EXPAND_TAC "P2" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
3825 (EXISTS_TAC `vl:(real^3)list`);
3826 (ASM_REWRITE_TAC[]);
3827 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
3828 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
3830 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
3831 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3832 (EXISTS_TAC `X INTER (C:real^3->bool)`);
3834 (ASM_REWRITE_TAC[]);
3835 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
3836 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
3837 (MATCH_MP_TAC (SET_RULE
3838 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
3840 (MATCH_MP_TAC SUBSET_BALL);
3841 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
3842 (MATCH_MP_TAC RCONE_GT_SUBSET);
3843 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
3844 (FIRST_X_ASSUM CHOOSE_TAC);
3846 (NEW_GOAL `r2 = (@b. b IN P2 /\ (!x. x IN P2 ==> b <= x:real))`);
3850 (UP_ASM_TAC THEN REWRITE_TAC[]);
3851 (REWRITE_TAC[SET_RULE `~(X = {}) <=> (?x. x IN X)`]);
3852 (EXISTS_TAC `(f2:(real^3)list -> real) vl`);
3853 (EXPAND_TAC "P2" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
3854 (EXISTS_TAC `vl:(real^3)list`);
3855 (ASM_REWRITE_TAC[]);
3856 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
3857 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
3859 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
3860 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3861 (EXISTS_TAC `X INTER (C:real^3->bool)`);
3863 (ASM_REWRITE_TAC[]);
3864 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
3865 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
3866 (MATCH_MP_TAC (SET_RULE
3867 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
3869 (MATCH_MP_TAC SUBSET_BALL);
3870 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
3871 (MATCH_MP_TAC RCONE_GT_SUBSET);
3872 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
3873 (UP_ASM_TAC THEN MESON_TAC[]);
3876 (ABBREV_TAC `Q1 = (\b:real. b IN P2 /\ (!x. x IN P2 ==> b <= x))`);
3877 (NEW_GOAL `(Q1:real->bool) r2`);
3878 (ASM_REWRITE_TAC[]);
3879 (MATCH_MP_TAC SELECT_AX);
3880 (EXISTS_TAC `b1:real` THEN EXPAND_TAC "Q1");
3881 (ASM_REWRITE_TAC[]);
3882 (UP_ASM_TAC THEN EXPAND_TAC "Q1" THEN REPEAT STRIP_TAC);
3883 (NEW_GOAL `r2 <= f2 (vl:(real^3)list)`);
3884 (FIRST_ASSUM MATCH_MP_TAC);
3885 (EXPAND_TAC "P2" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
3886 (EXISTS_TAC `vl:(real^3)list`);
3887 (ASM_REWRITE_TAC[]);
3888 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
3889 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
3891 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
3892 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3893 (EXISTS_TAC `X INTER (C:real^3->bool)`);
3895 (ASM_REWRITE_TAC[]);
3896 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
3897 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
3898 (MATCH_MP_TAC (SET_RULE
3899 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
3901 (MATCH_MP_TAC SUBSET_BALL);
3902 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
3903 (MATCH_MP_TAC RCONE_GT_SUBSET);
3904 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
3906 (UP_ASM_TAC THEN EXPAND_TAC "f2" THEN REWRITE_TAC[EL; HD; TL;
3907 ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`;
3908 ASSUME `vl= [u0; u1; u2; u3:real^3]`] THEN STRIP_TAC);
3909 (NEW_GOAL `!v. v IN affine hull {u1, u2, u3:real^3} ==> r2 <= dist (u0, v)`);
3911 (NEW_GOAL `dist (u0,closest_point (affine hull {u1, u2, u3}) u0) <=
3912 dist (u0, v:real^3)`);
3913 (MATCH_MP_TAC CLOSEST_POINT_LE);
3914 (ASM_REWRITE_TAC[CLOSED_AFFINE_HULL]);
3915 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3917 (NEW_GOAL `r <= dist (u0:real^3, x)`);
3918 (REWRITE_TAC[dist]);
3919 (REWRITE_WITH `u0:real^3 - x = (t1 + t2 + t3 + t4) % u0 - x`);
3920 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
3921 (REWRITE_TAC[VECTOR_ADD_RDISTRIB]);
3922 (ASM_REWRITE_TAC[VECTOR_ARITH `(t1 % u0 + t2 % u0 + t3 % u0 + t4 % u0) -
3923 (t1 % u0 + t2 % u1 + t3 % u2 + t4 % u3) =
3924 (t2 + t3 + t4) % u0 - (t2 % u1 + t3 % u2 + t4 % u3)`]);
3925 (ABBREV_TAC `y:real^3 = t2 /(t2 + t3 + t4) % u1 +
3926 t3 /(t2 + t3 + t4) % u2 +
3927 t4 /(t2 + t3 + t4) % u3`);
3928 (REWRITE_WITH `(t2 % u1 + t3 % u2 + t4 % u3) = (t2 + t3 + t4) % (y:real^3)`);
3930 (REWRITE_TAC[VECTOR_ARITH `x % (t2 / x % u1 + t3 / x % u2 + t4 / x % u3) =
3931 (x / x) % (t2 % u1 + t3 % u2 + t4 % u3)`]);
3932 (REWRITE_WITH `(t2 + t3 + t4) / (t2 + t3 + t4) = &1`);
3933 (MATCH_MP_TAC REAL_DIV_REFL);
3934 (UNDISCH_TAC `t1 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1`);
3937 (REWRITE_TAC[VECTOR_ARITH `a % x - a % y = a % (x - y)`; NORM_MUL]);
3939 (NEW_GOAL `&1 < t2 + t3 + t4`);
3940 (UNDISCH_TAC `t1 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1`);
3942 (REWRITE_WITH `abs (t2 + t3 + t4) = t2 + t3 + t4`);
3943 (REWRITE_TAC[REAL_ABS_REFL] THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3944 (REWRITE_TAC[GSYM dist]);
3945 (NEW_GOAL `r2 <= dist (u0, y:real^3)`);
3946 (FIRST_ASSUM MATCH_MP_TAC);
3947 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
3948 (EXISTS_TAC `t2 / (t2 + t3 + t4)` THEN EXISTS_TAC `t3 / (t2 + t3 + t4)` THEN
3949 EXISTS_TAC `t4 / (t2 + t3 + t4)`);
3951 (REWRITE_TAC[REAL_ARITH `a / x + b / x + c / x = (a+b+c)/ x`]);
3952 (MATCH_MP_TAC REAL_DIV_REFL);
3953 (UP_ASM_TAC THEN REAL_ARITH_TAC);
3954 (ASM_REWRITE_TAC[]);
3956 (NEW_GOAL `r2 <= (t2 + t3 + t4) * dist (u0,y:real^3)`);
3957 (NEW_GOAL `dist (u0,y) <= (t2 + t3 + t4) * dist (u0,y:real^3)`);
3958 (REWRITE_TAC[REAL_ARITH `a <= b * a <=> &0 <= (b - &1) * a`]);
3959 (MATCH_MP_TAC REAL_LE_MUL);
3960 (REWRITE_TAC[DIST_POS_LE]);
3961 (DEL_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3962 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3963 (EXPAND_TAC "r" THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3964 (UNDISCH_TAC `dist (u0, x:real^3) < r` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3966 (* ========================================================================== *)
3969 (REWRITE_TAC[REAL_ARITH `&0 <= a <=> (a < &0 ==> F)`]);
3971 (UNDISCH_TAC `conic_cap (u0:real^3) u1 r d x`);
3972 (REWRITE_TAC[MESON[IN] `conic_cap u0 u1 r d x <=> x IN conic_cap u0 u1 r d`;
3973 GSYM (ASSUME `D = conic_cap (u0:real^3) u1 r d`)]);
3975 (REWRITE_TAC[IN_INTER; MESON[] `~(x:bool /\ y) <=> (~x \/ ~y)`]);
3977 (REWRITE_TAC[IN; IN_ELIM_THM; rcone_gt; rconesgn] THEN STRIP_TAC);
3979 (NEW_GOAL `(?b1:real. b1 IN P4 /\ (!x. x IN P4 ==> x <= b1))`);
3980 (FIRST_ASSUM MATCH_MP_TAC);
3981 (REWRITE_TAC[SET_RULE `~(X = {}) <=> (?x. x IN X)`]);
3982 (EXISTS_TAC `(f4:(real^3)list -> real) vl`);
3983 (EXPAND_TAC "P4" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
3984 (EXISTS_TAC `vl:(real^3)list`);
3985 (ASM_REWRITE_TAC[]);
3986 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
3987 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
3989 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
3990 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3991 (EXISTS_TAC `X INTER (C:real^3->bool)`);
3993 (ASM_REWRITE_TAC[]);
3994 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
3995 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
3996 (MATCH_MP_TAC (SET_RULE
3997 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
3999 (MATCH_MP_TAC SUBSET_BALL);
4000 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
4001 (MATCH_MP_TAC RCONE_GT_SUBSET);
4002 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
4003 (FIRST_X_ASSUM CHOOSE_TAC);
4005 (NEW_GOAL `d2 = (@b. b IN P4 /\ (!x. x IN P4 ==> x <= b:real))`);
4009 (UP_ASM_TAC THEN REWRITE_TAC[]);
4010 (REWRITE_TAC[SET_RULE `~(X = {}) <=> (?x. x IN X)`]);
4011 (EXISTS_TAC `(f4:(real^3)list -> real) vl`);
4012 (EXPAND_TAC "P4" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
4013 (EXISTS_TAC `vl:(real^3)list`);
4014 (ASM_REWRITE_TAC[]);
4015 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
4016 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
4018 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
4019 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4020 (EXISTS_TAC `X INTER (C:real^3->bool)`);
4022 (ASM_REWRITE_TAC[]);
4023 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
4024 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
4025 (MATCH_MP_TAC (SET_RULE
4026 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
4028 (MATCH_MP_TAC SUBSET_BALL);
4029 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
4030 (MATCH_MP_TAC RCONE_GT_SUBSET);
4031 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
4032 (UP_ASM_TAC THEN MESON_TAC[]);
4035 (ABBREV_TAC `Q1 = (\b:real. b IN P4 /\ (!x. x IN P4 ==> x <= b))`);
4036 (NEW_GOAL `(Q1:real->bool) d2`);
4037 (ASM_REWRITE_TAC[]);
4038 (MATCH_MP_TAC SELECT_AX);
4039 (EXISTS_TAC `b1:real` THEN EXPAND_TAC "Q1");
4040 (ASM_REWRITE_TAC[]);
4041 (UP_ASM_TAC THEN EXPAND_TAC "Q1" THEN REPEAT STRIP_TAC);
4043 (NEW_GOAL `f4 (vl:(real^3)list) <= d2`);
4044 (FIRST_ASSUM MATCH_MP_TAC);
4045 (EXPAND_TAC "P4" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
4046 (EXISTS_TAC `vl:(real^3)list`);
4047 (ASM_REWRITE_TAC[]);
4048 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
4049 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
4051 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
4052 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4053 (EXISTS_TAC `X INTER (C:real^3->bool)`);
4055 (ASM_REWRITE_TAC[]);
4056 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
4057 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
4058 (MATCH_MP_TAC (SET_RULE
4059 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
4061 (MATCH_MP_TAC SUBSET_BALL);
4062 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
4063 (MATCH_MP_TAC RCONE_GT_SUBSET);
4064 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
4066 (UP_ASM_TAC THEN EXPAND_TAC "f4");
4067 (REWRITE_TAC[EL; HD; TL;
4068 ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`;
4069 ASSUME `vl= [u0; u1; u2; u3:real^3]`] THEN STRIP_TAC);
4070 (ABBREV_TAC `xx = smallest_angle_line u2 u3 u0 u1`);
4072 (MP_TAC (ASSUME `smallest_angle_line u2 u3 u0 u1 = xx`));
4073 (REWRITE_TAC[smallest_angle_line; smallest_angle_set]);
4075 (\x:real^3. x IN convex hull {u2, u3} /\
4076 (!y. y IN convex hull {u2, u3}
4077 ==> ((y - u0) dot (u1 - u0)) /
4078 (norm (y - u0) * norm (u1 - u0)) <=
4079 ((x - u0) dot (u1 - u0)) /
4080 (norm (x - u0) * norm (u1 - u0))))`);
4081 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN STRIP_TAC);
4082 (NEW_GOAL `(Q2:real^3->bool) xx`);
4083 (ONCE_ASM_REWRITE_TAC[]);
4084 (MATCH_MP_TAC SELECT_AX);
4087 (MATCH_MP_TAC SMALLEST_ANGLE_LINE_EXISTS);
4089 (ASM_REWRITE_TAC[]);
4092 (UNDISCH_TAC `~NULLSET (X INTER D)`);
4094 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4095 (EXISTS_TAC `X:real^3->bool` THEN STRIP_TAC);
4096 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell4; set_of_list;ARITH_RULE `4 >= 4`]);
4097 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4099 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
4101 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4102 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4103 (REWRITE_TAC[coplanar]);
4104 (UNDISCH_TAC `u0 IN convex hull {u2, u3:real^3}`);
4105 (REWRITE_TAC[CONVEX_HULL_2; IN; IN_ELIM_THM] THEN STRIP_TAC);
4106 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN
4107 EXISTS_TAC `u3:real^3`);
4108 (MATCH_MP_TAC (SET_RULE `a IN s /\ b SUBSET s ==> (a INSERT b) SUBSET s`));
4109 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
4110 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
4111 (EXISTS_TAC `&0` THEN EXISTS_TAC `u:real` THEN EXISTS_TAC `v:real`);
4113 (UNDISCH_TAC `u + v = &1` THEN REAL_ARITH_TAC);
4114 (UP_ASM_TAC THEN VECTOR_ARITH_TAC);
4115 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4116 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
4119 (UP_ASM_TAC THEN EXPAND_TAC "Q2");
4121 (ABBREV_TAC `g = (\y:real^3. ((y - u0) dot (u1 - u0)) /
4122 (norm (y - u0) * norm (u1 - u0)))`);
4124 (NEW_GOAL `d < (g:real^3->real) x`);
4127 `d < ((x - u0) dot (u1 - u0)) / (norm (x - u0) * norm (u1 - u0:real^3)) <=>
4128 d * (norm (x - u0) * norm (u1 - u0)) < (x - u0) dot (u1 - u0)`);
4129 (MATCH_MP_TAC REAL_LT_RDIV_EQ);
4130 (MATCH_MP_TAC (REAL_ARITH `&0 <= a /\ ~(a = &0) ==> &0 < a`));
4132 (MATCH_MP_TAC REAL_LE_MUL);
4133 (ASM_REWRITE_TAC[NORM_POS_LE]);
4134 (REWRITE_TAC[REAL_ENTIRE; NORM_EQ_0; VECTOR_ARITH `x - y = vec 0 <=> x = y`]);
4135 (ASM_REWRITE_TAC[]);
4136 (REWRITE_WITH `t1 % u0 + t2 % u1 + t3 % u2 + t4 % u3 = u0:real^3 <=>
4137 t1 % u0 + t2 % u1 + t3 % u2 + t4 % u3 = (t1 + t2 + t3 + t4) % u0`);
4138 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
4139 (REWRITE_TAC[VECTOR_ARITH `t1 % u0 + u = (t1 + t2) % u0 <=> u = t2 % u0`]);
4142 (MP_TAC (ASSUME `~NULLSET (X INTER D)`) THEN REWRITE_TAC[]);
4143 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4144 (EXISTS_TAC `X:real^3->bool` THEN STRIP_TAC);
4145 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell4;set_of_list]);
4146 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4147 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
4148 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4149 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4150 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4151 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
4152 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
4153 (REWRITE_TAC[affine_dependent]);
4154 (EXISTS_TAC `u1:real^3`);
4158 (NEW_GOAL `~(u1 IN {u0, u2, u3:real^3})`);
4160 (MP_TAC (ASSUME `~NULLSET (X INTER D)`) THEN REWRITE_TAC[]);
4161 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4162 (EXISTS_TAC `X:real^3->bool` THEN STRIP_TAC);
4163 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell4;set_of_list]);
4164 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4165 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
4166 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4167 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4168 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4169 (REWRITE_WITH `{u0, u1, u2, u3} = {u0:real^3,u2, u3}`);
4170 (UP_ASM_TAC THEN SET_TAC[]);
4171 (REWRITE_TAC[COPLANAR_3]);
4173 (REWRITE_WITH `{u0, u1, u2, u3} DELETE u1 = {u0, u2, u3:real^3}`);
4174 (UP_ASM_TAC THEN SET_TAC[]);
4175 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
4176 (EXISTS_TAC `(t2 + t3 + t4) / t2`);
4177 (EXISTS_TAC `(-- t3) / t2`);
4178 (EXISTS_TAC `(-- t4) / t2`);
4181 (REWRITE_WITH `(t2 + t3 + t4) / t2 + --t3 / t2 + --t4 / t2 = t2 / t2`);
4183 (MATCH_MP_TAC REAL_DIV_REFL);
4184 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
4186 `u1 = (t2 + t3 + t4) / t2 % u0 + --t3 / t2 % u2 + --t4 / t2 % u3:real^3 <=>
4187 u1 = (&1 / t2) % ((t2 + t3 + t4) % u0 - t3 % u2 - t4 % u3)`);
4189 (REWRITE_TAC[GSYM (ASSUME `t2 % u1 + t3 % u2 + t4 % u3 =
4190 (t2 + t3 + t4) % u0:real^3`)]);
4191 (REWRITE_TAC[VECTOR_ARITH
4192 `(t2 % u1 + t3 % u2 + t4 % u3) - t3 % u2 - t4 % u3 = t2 % u1`]);
4193 (REWRITE_TAC[VECTOR_MUL_ASSOC]);
4194 (REWRITE_WITH `&1 / t2 * t2 = &1`);
4195 (REWRITE_TAC[REAL_ARITH `&1 / t2 * t2 = t2 / t2`]);
4196 (MATCH_MP_TAC REAL_DIV_REFL);
4197 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
4200 (REWRITE_TAC[REAL_ARITH `a * b * c < d <=> d > b * c * a`; GSYM dist]);
4201 (ASM_REWRITE_TAC[]);
4203 (NEW_GOAL `g x <= (g:real^3->real) xx`);
4204 (NEW_GOAL `!y. y IN convex hull {u2 , u3:real^3} ==> g y <= g xx`);
4205 (EXPAND_TAC "g" THEN ASM_REWRITE_TAC[]);
4206 (NEW_GOAL `&0 < (t3 + t4)`);
4207 (MATCH_MP_TAC (REAL_ARITH `(&0 <= x) /\ ~(x = &0) ==> &0 < x`));
4209 (MATCH_MP_TAC REAL_LE_ADD);
4210 (ASM_REWRITE_TAC[]);
4212 (NEW_GOAL `t3 = &0 /\ t4 = &0`);
4213 (UNDISCH_TAC `&0 <= t3` THEN UNDISCH_TAC `&0 <= t4` THEN
4214 UP_ASM_TAC THEN REAL_ARITH_TAC);
4215 (UP_ASM_TAC THEN STRIP_TAC);
4218 (UNDISCH_TAC `(x - u0) dot (u1 - u0:real^3) > dist (x,u0) * dist (u1,u0) * d`);
4219 (REWRITE_WITH `x = t1 % u0 + t2 % u1:real^3`);
4220 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
4221 (MATCH_MP_TAC (REAL_ARITH `a <= &0 /\ &0 <= b ==> ~(a > b)`));
4223 (REWRITE_WITH `(t1 % u0 + t2 % u1) - u0 = (t1 % u0 + t2 % u1) -
4224 (t1 + t2 + t3 + t4) % u0:real^3`);
4225 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
4226 (REWRITE_TAC[ASSUME `t3 = &0`; ASSUME `t4 = &0`; VECTOR_ARITH
4227 `(t1 % u0 + t2 % u1) - (t1 + t2 + &0 + &0) % u0 = t2 % (u1 - u0)`;
4228 DOT_LMUL; REAL_ARITH `a * b <= &0 <=> &0 <= (--a) * b`]);
4229 (MATCH_MP_TAC REAL_LE_MUL);
4230 (REWRITE_TAC[DOT_POS_LE]);
4231 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
4232 (MATCH_MP_TAC REAL_LE_MUL);
4233 (REWRITE_TAC[DIST_POS_LE]);
4234 (MATCH_MP_TAC REAL_LE_MUL);
4235 (REWRITE_TAC[DIST_POS_LE]);
4236 (EXPAND_TAC "d" THEN UNDISCH_TAC `&0 < c/\ c < &1`);
4238 (UP_ASM_TAC THEN MESON_TAC[]);
4240 (ABBREV_TAC `y = t3 / (t3 + t4) % u2 + t4 / (t3 + t4) % u3:real^3`);
4241 (NEW_GOAL `(g:real^3->real) y <= g xx`);
4242 (FIRST_ASSUM MATCH_MP_TAC);
4243 (REWRITE_TAC[CONVEX_HULL_2; IN; IN_ELIM_THM]);
4244 (EXISTS_TAC `t3 / (t3 + t4)` THEN EXISTS_TAC `t4 / (t3 + t4)`);
4246 (MATCH_MP_TAC REAL_LE_DIV);
4247 (ASM_SIMP_TAC[REAL_LE_ADD]);
4248 (ASM_SIMP_TAC[REAL_LE_ADD; REAL_LE_DIV]);
4249 (REWRITE_TAC[REAL_ARITH `a / x + b / x = (a + b) / x`]);
4250 (MATCH_MP_TAC REAL_DIV_REFL);
4251 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
4252 (ASM_REWRITE_TAC[]);
4254 (ABBREV_TAC `w = t1 / (t1 + t3 + t4) % u0 + t3 / (t1 + t3 + t4) % u2 +
4255 t4 / (t1 + t3 + t4) % u3:real^3`);
4256 (NEW_GOAL `(g:real^3->real) y = g w`);
4259 (REWRITE_WITH `y:real^3 - u0 =
4260 &1 / (t3 + t4) % (t3 % u2 + t4 % u3 - (t3 + t4) % u0)`);
4262 (REWRITE_TAC[VECTOR_ARITH
4263 `(t3 / (t3 + t4) % u2 + t4 / (t3 + t4) % u3) - u0 =
4264 &1 / (t3 + t4) % (t3 % u2 + t4 % u3 - (t3 + t4) % u0) <=>
4265 (t3 + t4) / (t3 + t4) % u0 = u0`]);
4266 (REWRITE_WITH `(t3 + t4) / (t3 + t4) = &1`);
4267 (MATCH_MP_TAC REAL_DIV_REFL);
4268 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
4270 (REWRITE_TAC[NORM_MUL; DOT_LMUL]);
4272 (REWRITE_WITH `w:real^3 - u0 =
4273 &1 / (t1 + t3 + t4) % (t3 % u2 + t4 % u3 - (t3 + t4) % u0)`);
4275 (REWRITE_TAC[VECTOR_ARITH
4276 `(t1 / (t1 + t3 + t4) % u0 +
4277 t3 / (t1 + t3 + t4) % u2 + t4 / (t1 + t3 + t4) % u3) - u0 =
4278 &1 / (t1 + t3 + t4) % (t3 % u2 + t4 % u3 - (t3 + t4) % u0) <=>
4279 (t1 + t3 + t4) / (t1 + t3 + t4) % u0 = u0`]);
4280 (REWRITE_WITH `(t1 + t3 + t4) / (t1 + t3 + t4) = &1`);
4281 (MATCH_MP_TAC REAL_DIV_REFL);
4282 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1`
4283 THEN REAL_ARITH_TAC);
4285 (REWRITE_TAC[NORM_MUL; DOT_LMUL]);
4286 (REWRITE_WITH `abs (&1 / (t3 + t4)) = &1 / (t3 + t4)`);
4287 (REWRITE_TAC[REAL_ABS_REFL]);
4288 (ASM_SIMP_TAC[REAL_LE_DIV;REAL_LE_ADD; REAL_ARITH `&0 <= &1`]);
4289 (REWRITE_WITH `abs (&1 / (t1 + t3 + t4)) = &1 / (t1 + t3 + t4)`);
4290 (REWRITE_TAC[REAL_ABS_REFL]);
4291 (MATCH_MP_TAC REAL_LE_DIV THEN REWRITE_TAC[REAL_ARITH `&0 <= &1`]);
4292 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1`
4293 THEN REAL_ARITH_TAC);
4294 (REWRITE_TAC[REAL_ARITH `(a * x) / ((a * y) * z) =
4295 (a * x) / (a * (y * z))`]);
4297 `a1 = norm (t3 % u2 + t4 % u3 - (t3 + t4) % u0) * norm (u1 - u0:real^3)`);
4298 (NEW_GOAL `~(a1 = &0)`);
4299 (EXPAND_TAC "a1" THEN ASM_REWRITE_TAC[REAL_ENTIRE; NORM_EQ_0;
4300 VECTOR_ARITH `(a - b = vec 0 <=> a = b)/\(a + b-c = vec 0 <=> a + b = c)`]);
4303 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
4304 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4305 (EXISTS_TAC `(X:real^3->bool)`);
4307 (ASM_SIMP_TAC[mcell4; MCELL_EXPLICIT; set_of_list]);
4308 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4309 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
4310 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4311 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4312 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4313 (REWRITE_TAC[coplanar]);
4314 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN
4315 EXISTS_TAC `u3:real^3`);
4316 (MATCH_MP_TAC (SET_RULE `u0 IN S /\ b SUBSET S ==> (u0 INSERT b) SUBSET S`));
4317 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
4318 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
4319 (EXISTS_TAC `&0` THEN EXISTS_TAC `t3 / (t3 + t4)`
4320 THEN EXISTS_TAC `t4 / (t3 + t4)`);
4322 (REWRITE_TAC[REAL_ARITH `&0 + t3 / (t3 + t4) + t4 / (t3 + t4) =
4323 (t3 + t4) / (t3 + t4)`]);
4324 (MATCH_MP_TAC REAL_DIV_REFL);
4325 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
4326 (ASM_REWRITE_TAC[VECTOR_ARITH
4327 `&0 % u1 + t3 / (t3 + t4) % u2 + t4 / (t3 + t4) % u3 =
4328 (&1 / (t3 + t4)) % (t3 % u2 + t4 % u3)`]);
4329 (REWRITE_TAC[VECTOR_MUL_ASSOC; REAL_ARITH `&1 / a * a = a / a`]);
4330 (REWRITE_WITH `(t3 + t4) / (t3 + t4) = &1`);
4331 (MATCH_MP_TAC REAL_DIV_REFL);
4332 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
4336 (NEW_GOAL `~(&1 / (t3 + t4) = &0)`);
4337 (NEW_GOAL `&0 < &1 / (t3 + t4)`);
4338 (MATCH_MP_TAC REAL_LT_DIV);
4339 (ASM_REWRITE_TAC[REAL_ARITH `&0 < &1`]);
4340 (UP_ASM_TAC THEN REAL_ARITH_TAC);
4343 `(&1 / (t3 + t4) * ((t3 % u2 + t4 % u3 - (t3 + t4) % u0) dot (u1 - u0))) /
4344 (&1 / (t3 + t4) * a1) =
4345 ((t3 % u2 + t4 % u3 - (t3 + t4) % u0) dot (u1 - u0:real^3)) / a1`);
4346 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[Trigonometry1.REAL_DIV_MUL2]);
4348 (NEW_GOAL `~(&1 / (t1 + t3 + t4) = &0)`);
4349 (NEW_GOAL `&0 < &1 / (t1 + t3 + t4)`);
4350 (MATCH_MP_TAC REAL_LT_DIV);
4351 (ASM_REWRITE_TAC[REAL_ARITH `&0 < &1`]);
4352 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN
4354 (UP_ASM_TAC THEN REAL_ARITH_TAC);
4357 `(&1 / (t1 + t3 + t4) * ((t3 % u2 + t4 % u3 - (t3 + t4) % u0) dot (u1 - u0))) /
4358 (&1 / (t1 + t3 + t4) * a1) =
4359 ((t3 % u2 + t4 % u3 - (t3 + t4) % u0) dot (u1 - u0:real^3)) / a1`);
4360 (UP_ASM_TAC THEN UNDISCH_TAC `~(a1 = &0)` THEN
4361 MESON_TAC[Trigonometry1.REAL_DIV_MUL2]);
4363 (NEW_GOAL `(g:real^3->real) x <= g w`);
4367 `((x - u0) dot (u1 - u0:real^3)) / (norm (x - u0) * norm (u1 - u0)) <=
4368 ((w - u0) dot (u1 - u0)) / (norm (w - u0) * norm (u1 - u0)) <=>
4369 ((x - u0) dot (u1 - u0)) * (norm (w - u0) * norm (u1 - u0)) <=
4370 ((w - u0) dot (u1 - u0)) * (norm (x - u0) * norm (u1 - u0))`);
4371 (MATCH_MP_TAC RAT_LEMMA4);
4373 (MATCH_MP_TAC REAL_LT_MUL);
4374 (ASM_REWRITE_TAC[NORM_POS_LT; VECTOR_ARITH `x - b = vec 0 <=> x = b`]);
4376 (UNDISCH_TAC `~NULLSET (X INTER D)`);
4379 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4380 (EXISTS_TAC `(X:real^3->bool)`);
4382 (ASM_SIMP_TAC[mcell4; MCELL_EXPLICIT; set_of_list]);
4383 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4384 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
4385 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4386 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4387 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4388 (REWRITE_TAC[coplanar]);
4389 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u2:real^3` THEN
4390 EXISTS_TAC `u3:real^3`);
4391 (ONCE_REWRITE_TAC[SET_RULE `{u0, u1, u2, u3} = {u1, u0, u2, u3}`]);
4392 (MATCH_MP_TAC (SET_RULE `u0 IN S /\ b SUBSET S ==> (u0 INSERT b) SUBSET S`));
4393 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
4394 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
4395 (EXISTS_TAC `(t2 + t3 + t4) / t2` THEN EXISTS_TAC `(--t3) / t2`
4396 THEN EXISTS_TAC `(--t4) / t2`);
4398 (REWRITE_TAC[REAL_ARITH
4399 `(t2 + t3 + t4) / t2 + --t3 / t2 + --t4 / t2 = t2 / t2`]);
4400 (MATCH_MP_TAC REAL_DIV_REFL);
4401 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
4402 (REWRITE_WITH `(t2 + t3 + t4) = &1 - t1`);
4403 (UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN REAL_ARITH_TAC);
4404 (NEW_GOAL `u0 - t1 % u0 - t3 % u2 - t4 % u3:real^3 = t2 % u1`);
4405 (UP_ASM_TAC THEN VECTOR_ARITH_TAC);
4406 (ASM_REWRITE_TAC[VECTOR_ARITH
4407 `(&1 - t1) / t2 % u0 + --t3 / t2 % u2 + --t4 / t2 % u3 =
4408 (&1 / t2) % (u0 - t1 % u0 - t3 % u2 - t4 % u3)`]);
4409 (REWRITE_TAC[VECTOR_MUL_ASSOC; REAL_ARITH `&1 / a * a = a / a`]);
4410 (REWRITE_WITH `t2 / t2 = &1`);
4411 (MATCH_MP_TAC REAL_DIV_REFL);
4412 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
4416 (MATCH_MP_TAC REAL_LT_MUL);
4417 (ASM_REWRITE_TAC[NORM_POS_LT; VECTOR_ARITH `x - b = vec 0 <=> x = b`]);
4418 (EXPAND_TAC "w" THEN STRIP_TAC);
4419 (UNDISCH_TAC `~NULLSET (X INTER D)`);
4422 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4423 (EXISTS_TAC `(X:real^3->bool)`);
4425 (ASM_SIMP_TAC[mcell4; MCELL_EXPLICIT; set_of_list]);
4426 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4427 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
4428 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4429 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4430 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4431 (REWRITE_TAC[coplanar]);
4432 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN
4433 EXISTS_TAC `u3:real^3`);
4434 (MATCH_MP_TAC (SET_RULE `u0 IN S /\ b SUBSET S ==> (u0 INSERT b) SUBSET S`));
4435 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
4436 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
4438 (EXISTS_TAC `&0` THEN EXISTS_TAC `t3 / (t3 + t4)`
4439 THEN EXISTS_TAC `t4 / (t3 + t4)`);
4441 (REWRITE_TAC[REAL_ARITH `&0 + t3 / (t3 + t4) + t4 / (t3 + t4) =
4442 (t3 + t4) / (t3 + t4)`]);
4443 (MATCH_MP_TAC REAL_DIV_REFL);
4444 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
4445 (ASM_REWRITE_TAC[VECTOR_ARITH
4446 `&0 % u1 + t3 / (t3 + t4) % u2 + t4 / (t3 + t4) % u3 =
4447 (&1 / (t3 + t4)) % (t3 % u2 + t4 % u3)`]);
4448 (UP_ASM_TAC THEN REWRITE_TAC[VECTOR_ARITH
4449 `t1 / x % u0 + t3 / x % u2 + t4 / x % u3 =
4450 (&1 / x) % (t1 % u0 + t3 % u2 + t4 % u3)`]);
4451 (REWRITE_WITH `&1 / (t1 + t3 + t4) % (t1 % u0 + t3 % u2 + t4 % u3) = u0 <=>
4452 t1 % u0 + t3 % u2 + t4 % u3 = (t1 + t3 + t4) % u0:real^3`);
4453 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4454 (MATCH_MP_TAC Collect_geom.CHANGE_SIDE);
4455 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 +t3 + t4 = &1` THEN
4458 (REWRITE_TAC[VECTOR_ARITH `t1 % u0 + t3 % u2 + t4 % u3 = (t1 + t3 + t4) % u0
4459 <=> t3 % u2 + t4 % u3 = (t3 + t4) % u0`]);
4460 (STRIP_TAC THEN ASM_REWRITE_TAC[]);
4461 (REWRITE_TAC[VECTOR_MUL_ASSOC; REAL_ARITH `&1 / a * a = a / a`]);
4462 (REWRITE_WITH `(t3 + t4) / (t3 + t4) = &1`);
4463 (MATCH_MP_TAC REAL_DIV_REFL);
4464 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
4468 (REWRITE_WITH `x = t2 % u1 + (t1 + t3 + t4) % w:real^3`);
4469 (ASM_REWRITE_TAC[] THEN EXPAND_TAC "w");
4470 (REWRITE_TAC[VECTOR_ARITH
4471 `x % (t1 /x % u0 + t3 / x % u2 + t4 /x % u3) =
4472 (x / x) % (t1 % u0 + t3 % u2 + t4 % u3)`]);
4473 (REWRITE_WITH `(t1 + t3 + t4) / (t1 + t3 + t4) = &1`);
4474 (MATCH_MP_TAC REAL_DIV_REFL);
4475 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN
4478 (ABBREV_TAC `t = t1 + t3 + t4`);
4479 (REWRITE_WITH `(t2 % u1 + t % w) - u0:real^3 =
4480 (t2 % u1 + t % w) - (t1 + t2 + t3 + t4) % u0`);
4481 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
4482 (REWRITE_WITH `t1 + t2 + t3 + t4 = t2 + t:real`);
4483 (EXPAND_TAC "t" THEN REAL_ARITH_TAC);
4484 (REWRITE_TAC[VECTOR_ARITH
4485 `(t2 % u1 + t % w) - (t2 + t) % u0 = t2 % (u1 - u0) + t % (w - u0)`]);
4486 (ABBREV_TAC `x1 = u1 - u0:real^3`);
4487 (ABBREV_TAC `x2 = w - u0:real^3`);
4489 (REWRITE_WITH `(t2 % x1 + t % x2) dot x1 =
4490 t2 * norm x1 pow 2 + t * x2 dot (x1:real^3)`);
4491 (REWRITE_TAC[NORM_POW_2]);
4494 (NEW_GOAL `t2 * norm x1 pow 2 * norm x2 * norm x1 <=
4495 t2 * (x2 dot x1) * norm x1 * norm (x1:real^3)`);
4496 (REWRITE_TAC[REAL_POW_2; REAL_ARITH `t2 * (x1 * x1) * x2 * x1 <=
4497 t2 * x3 * x1 * x1 <=> &0 <= (x1 pow 2) * (--t2) * (x2 * x1 - x3)`]);
4498 (MATCH_MP_TAC REAL_LE_MUL);
4499 (ASM_SIMP_TAC[REAL_LE_MUL; NORM_POS_LE]);
4500 (MATCH_MP_TAC REAL_LE_MUL);
4501 (REWRITE_TAC[REAL_ARITH `&0 <= a - b <=> b <= a`]);
4503 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
4504 (REWRITE_TAC[NORM_CAUCHY_SCHWARZ]);
4507 `t2 * (x2 dot x1) * norm x1 * norm x1 + t * (x2 dot x1) * norm x2 * norm x1 <=
4508 (x2 dot x1) * norm (t2 % x1 + t % x2) * norm (x1:real^3)`);
4510 (REWRITE_TAC[REAL_ARITH `t2 * x3 * x1 * x1 + t * x3 * x2 * x1 <=
4511 x3 * x4 * x1 <=> &0 <= (x1 * x3) * (x4 - t2 * x1 - t * x2)`]);
4512 (MATCH_MP_TAC REAL_LE_MUL);
4514 (MATCH_MP_TAC REAL_LE_MUL);
4515 (REWRITE_TAC[NORM_POS_LE]);
4516 (ASM_CASES_TAC `x2 dot (x1:real^3) < &0`);
4518 (NEW_GOAL `(g:real^3->real) x <= &0`);
4520 (REWRITE_TAC[REAL_ARITH `a / b <= &0 <=> &0 <= (--a) / b`]);
4521 (MATCH_MP_TAC REAL_LE_DIV);
4522 (SIMP_TAC[NORM_POS_LE; REAL_LE_MUL]);
4524 (REWRITE_WITH `x = t2 % u1 + (t1 + t3 + t4) % w:real^3`);
4525 (ASM_REWRITE_TAC[] THEN EXPAND_TAC "w");
4526 (REWRITE_TAC[VECTOR_ARITH
4527 `x % (t1 /x % u0 + t3 / x % u2 + t4 /x % u3) =
4528 (x / x) % (t1 % u0 + t3 % u2 + t4 % u3)`]);
4530 (REWRITE_WITH `(t1 + t3 + t4) / (t1 + t3 + t4) = &1`);
4531 (MATCH_MP_TAC REAL_DIV_REFL);
4532 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN
4536 (REWRITE_TAC[REAL_ARITH `&0 <= --a <=> a <= &0`]);
4537 (REWRITE_WITH `(t2 % u1 + (t1 + t3 + t4) % w) - u0:real^3 =
4538 (t2 % u1 + (t1 + t3 + t4) % w) - (t1 + t2 + t3 + t4) % u0`);
4539 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
4540 (REWRITE_WITH `(t2 % u1 + (t1 + t3 + t4) % w) - (t1 + t2 + t3 + t4) % u0 =
4541 t2 % x1 + t % x2:real^3`);
4542 (EXPAND_TAC "x1" THEN EXPAND_TAC "x2" THEN EXPAND_TAC "t"
4543 THEN VECTOR_ARITH_TAC);
4544 (NEW_GOAL `t % x2 dot (x1:real^3) <= &0`);
4545 (REWRITE_TAC[DOT_LMUL; REAL_ARITH `a * b <= &0 <=> &0 <= a * (--b)`]);
4546 (MATCH_MP_TAC REAL_LE_MUL);
4548 (EXPAND_TAC "t" THEN UNDISCH_TAC `t2 < &0` THEN
4549 UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN REAL_ARITH_TAC);
4550 (UP_ASM_TAC THEN REAL_ARITH_TAC);
4551 (NEW_GOAL `t2 % x1 dot (x1:real^3) <= &0`);
4552 (REWRITE_TAC[DOT_LMUL; REAL_ARITH `a * b <= &0 <=> &0 <= (--a) * b`]);
4553 (MATCH_MP_TAC REAL_LE_MUL);
4555 (EXPAND_TAC "t" THEN UNDISCH_TAC `t2 < &0` THEN
4556 UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN REAL_ARITH_TAC);
4557 (REWRITE_TAC[DOT_POS_LE]);
4558 (REWRITE_TAC[DOT_LADD]);
4559 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
4560 (UP_ASM_TAC THEN UNDISCH_TAC `d < (g:real^3->real) x`);
4561 (EXPAND_TAC "d" THEN UNDISCH_TAC `&0 < c /\ c < &1`);
4563 (UP_ASM_TAC THEN MESON_TAC[]);
4564 (UP_ASM_TAC THEN REAL_ARITH_TAC);
4566 (REWRITE_TAC [REAL_ARITH `&0 <= a - b * d - c <=> c <= a + (--b) * d`]);
4567 (REWRITE_WITH `t * norm (x2:real^3) = abs t * norm x2`);
4568 (AP_THM_TAC THEN AP_TERM_TAC);
4569 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4570 (REWRITE_TAC[REAL_ABS_REFL]);
4571 (EXPAND_TAC "t" THEN UNDISCH_TAC `t2 < &0` THEN
4572 UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN REAL_ARITH_TAC);
4573 (REWRITE_WITH `(--t2) * norm (x1:real^3) = abs (--t2) * norm x1`);
4574 (AP_THM_TAC THEN AP_TERM_TAC);
4575 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4576 (REWRITE_TAC[REAL_ABS_REFL]);
4577 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
4578 (REWRITE_TAC[GSYM NORM_MUL]);
4580 `norm (t % x2:real^3) = norm ((t2 % x1 + t % x2) + (--t2 % x1))`);
4581 (AP_TERM_TAC THEN VECTOR_ARITH_TAC);
4582 (REWRITE_TAC[NORM_TRIANGLE]);
4583 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
4584 (UNDISCH_TAC `(g:real^3->real) y <= g xx`);
4585 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
4587 (NEW_GOAL `(g:real^3->real) xx <= d2`);
4588 (FIRST_ASSUM MATCH_MP_TAC);
4590 (EXPAND_TAC "g" THEN EXPAND_TAC "f4");
4591 (REWRITE_TAC[IN_ELIM_THM; IN]);
4592 (EXISTS_TAC `vl:(real^3)list`);
4593 (REWRITE_TAC[ASSUME `barV V 3 vl`; ASSUME `vl = [u0;u1;u2;u3:real^3]`;
4594 TRUNCATE_SIMPLEX_EXPLICIT_1]);
4595 (SIMP_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
4597 (SIMP_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
4598 (REWRITE_WITH `mcell 4 V vl = mcell k V vl`);
4599 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
4600 (REWRITE_TAC[GSYM (ASSUME `X = mcell k V vl`)]);
4603 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
4604 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4605 (EXISTS_TAC `X INTER (C:real^3->bool)`);
4607 (ASM_REWRITE_TAC[]);
4608 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
4609 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
4610 (MATCH_MP_TAC (SET_RULE
4611 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
4613 (MATCH_MP_TAC SUBSET_BALL);
4614 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
4615 (MATCH_MP_TAC RCONE_GT_SUBSET);
4616 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
4618 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN EXPAND_TAC "d");
4622 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
4623 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4624 (EXISTS_TAC `(X:real^3->bool)`);
4626 (ASM_SIMP_TAC[mcell4; MCELL_EXPLICIT; set_of_list]);
4627 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
4629 (UP_ASM_TAC THEN MESON_TAC[]);
4632 (* ========================================================================= *)
4634 (NEW_GOAL `~coplanar {u0, u1, u2, u3:real^3}`);
4636 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
4637 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4638 (EXISTS_TAC `X:real^3->bool`);
4640 (ASM_SIMP_TAC[mcell4; MCELL_EXPLICIT; set_of_list]);
4642 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4643 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
4644 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4645 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4646 (ASM_REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4647 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
4650 (ASM_CASES_TAC `azim u0 u1 u2 (u3:real^3) < pi`);
4651 (REWRITE_WITH `vol (L INTER D) = vol (D INTER wedge u0 u1 u2 u3)`);
4652 (ASM_SIMP_TAC[WEDGE_LUNE]);
4653 (REWRITE_WITH `L INTER conic_cap (u0:real^3) u1 r d =
4654 conic_cap u0 u1 r d INTER L`);
4656 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_SYMDIFF);
4657 (REWRITE_WITH `conic_cap (u0:real^3) u1 r d INTER
4658 aff_gt {u0, u1} {u2, u3} DIFF conic_cap u0 u1 r d INTER L = {}`);
4660 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> C INTER A DIFF C INTER B = {}`));
4661 (REWRITE_TAC[AFF_GT_SUBSET_AFF_GE]);
4662 (REWRITE_TAC[SET_RULE `A UNION {} = A`]);
4665 (REWRITE_WITH `aff_ge {u0, u1:real^3} {u2, u3} =
4666 aff_gt {u0, u1} {u2, u3} UNION
4667 UNIONS {aff_ge {u0, u1} ({u2, u3} DELETE a) | a | a IN {u2, u3}}`);
4668 (MATCH_MP_TAC AFF_GE_AFF_GT_DECOMP);
4669 (REWRITE_TAC[Geomdetail.FINITE6]);
4670 (REWRITE_TAC[DISJOINT]);
4672 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
4674 (UNDISCH_TAC `~coplanar {u0, u1, u2, u3:real^3}`);
4675 (REWRITE_WITH `{u0, u1, u2, u3} = {u0, u1, u3:real^3}`);
4676 (UP_ASM_TAC THEN SET_TAC[]);
4677 (REWRITE_TAC[COPLANAR_3]);
4678 (UP_ASM_TAC THEN MESON_TAC[]);
4680 (ASM_CASES_TAC `u3 IN {u0, u1:real^3}`);
4682 (UNDISCH_TAC `~coplanar {u0, u1, u2, u3:real^3}`);
4683 (REWRITE_WITH `{u0, u1, u2, u3} = {u0, u1, u2:real^3}`);
4684 (UP_ASM_TAC THEN SET_TAC[]);
4685 (REWRITE_TAC[COPLANAR_3]);
4686 (UP_ASM_TAC THEN MESON_TAC[]);
4687 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
4689 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4691 `UNIONS {aff_ge {u0, u1:real^3} ({u2, u3} DELETE a) | a | a IN {u2, u3}}`);
4693 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4695 `aff_ge {u0, u1:real^3} {u2} UNION aff_ge {u0, u1:real^3} {u3}`);
4697 (MATCH_MP_TAC NEGLIGIBLE_UNION);
4700 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4701 (EXISTS_TAC `affine hull {u0, u1:real^3, u2}`);
4703 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
4704 (REWRITE_WITH `{u0,u1,u2:real^3} = {u0,u1} UNION {u2}`);
4706 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
4707 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4708 (EXISTS_TAC `affine hull {u0, u1:real^3, u3}`);
4710 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
4711 (REWRITE_WITH `{u0,u1,u3:real^3} = {u0,u1} UNION {u3}`);
4713 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
4714 (REWRITE_TAC[SET_RULE
4715 `UNIONS {aff_ge {u0, u1} ({m, s3} DELETE a) | a | a IN {m, s3}} =
4716 aff_ge {u0, u1} ({m, s3} DELETE s3)
4717 UNION aff_ge {u0, u1} ({m, s3} DELETE m)`]);
4718 (MATCH_MP_TAC (SET_RULE
4719 `A SUBSET B /\ C SUBSET D ==> A UNION C SUBSET B UNION D`));
4721 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
4725 (REWRITE_TAC[DISJOINT]);
4726 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
4728 (UNDISCH_TAC `~coplanar {u0, u1, u2, u3:real^3}`);
4729 (REWRITE_WITH `{u0, u1, u2, u3} = {u0, u1, u3:real^3}`);
4730 (UP_ASM_TAC THEN SET_TAC[]);
4731 (REWRITE_TAC[COPLANAR_3]);
4732 (UP_ASM_TAC THEN MESON_TAC[]);
4733 (UP_ASM_TAC THEN SET_TAC[]);
4735 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
4738 (REWRITE_TAC[DISJOINT]);
4739 (ASM_CASES_TAC `u3 IN {u0, u1:real^3}`);
4741 (UNDISCH_TAC `~coplanar {u0, u1, u2, u3:real^3}`);
4742 (REWRITE_WITH `{u0, u1, u2, u3} = {u0, u1, u2:real^3}`);
4743 (UP_ASM_TAC THEN SET_TAC[]);
4744 (REWRITE_TAC[COPLANAR_3]);
4745 (UP_ASM_TAC THEN MESON_TAC[]);
4746 (UP_ASM_TAC THEN SET_TAC[]);
4750 (* begin the computation *)
4752 (REWRITE_TAC[ASSUME `D = conic_cap (u0:real^3) u1 r d`]);
4753 (REWRITE_WITH `vol (conic_cap u0 u1 r d INTER wedge u0 u1 u2 u3) =
4754 (if &1 < d \/ r < &0
4756 else azim u0 u1 u2 u3 / &3 * (&1 - max d (-- &1)) * r pow 3)`);
4757 (NEW_GOAL `~collinear {u0:real^3, u1, u2} /\ ~collinear {u0, u1, u3}`);
4759 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4760 (EXISTS_TAC `u3:real^3`);
4761 (ASM_REWRITE_TAC[]);
4762 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4763 (EXISTS_TAC `u2:real^3`);
4764 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
4765 (ASM_REWRITE_TAC[]);
4767 (ASM_SIMP_TAC[VOLUME_CONIC_CAP_WEDGE]);
4770 (UNDISCH_TAC `&0 < r` THEN UNDISCH_TAC `d < &1` THEN
4771 UP_ASM_TAC THEN REAL_ARITH_TAC);
4772 (UP_ASM_TAC THEN MESON_TAC[]);
4774 (REWRITE_WITH `azim (u0:real^3) u1 u2 u3 = dihV u0 u1 u2 u3`);
4775 (MATCH_MP_TAC AZIM_DIHV_SAME);
4776 (ASM_REWRITE_TAC[]);
4778 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4779 (EXISTS_TAC `u3:real^3`);
4780 (ASM_REWRITE_TAC[]);
4781 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4782 (EXISTS_TAC `u2:real^3`);
4783 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
4784 (ASM_REWRITE_TAC[]);
4786 (REWRITE_TAC[dihX]);
4789 (UNDISCH_TAC `~NULLSET (X INTER D)`);
4791 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4792 (EXISTS_TAC `X:real^3->bool`);
4793 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
4794 (UP_ASM_TAC THEN MESON_TAC[]);
4798 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
4799 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
4802 initial_sublist [u0; u1] ul)`);
4804 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
4805 (MATCH_MP_TAC SELECT_AX);
4806 (EXISTS_TAC `(4, vl:(real^3)list)`);
4808 (REWRITE_TAC[BETA_THM]);
4809 (REWRITE_TAC[IN; ARITH_RULE `4 <= 4`] THEN ASM_REWRITE_TAC[]);
4811 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
4813 (REWRITE_WITH `initial_sublist [u0;u1:real^3] [u0; u1; u2; u3] /\
4814 LENGTH [u0;u1] = 1 + 1`);
4815 (REWRITE_TAC[GSYM Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
4816 (REWRITE_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
4817 (ASM_REWRITE_TAC[]);
4818 (REWRITE_TAC[LENGTH] THEN ARITH_TAC);
4819 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
4820 (EXPAND_TAC "P" THEN REWRITE_TAC[IN] THEN REPEAT STRIP_TAC);
4822 (NEW_GOAL `k' = 4 /\ mcell k' V ul = mcell 4 V vl`);
4823 (MATCH_MP_TAC Ajripqn.AJRIPQN);
4824 (ASM_REWRITE_TAC[]);
4825 (REWRITE_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
4826 (REWRITE_WITH `mcell k' V ul INTER mcell 4 V vl = X`);
4827 (REWRITE_WITH `mcell 4 V vl = X`);
4828 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
4829 (SET_TAC[ASSUME `X = mcell k' V ul`]);
4832 (UNDISCH_TAC `k' <= 4` THEN REWRITE_TAC[ARITH_RULE
4833 `a <= 4 <=> a = 0 \/a = 1 \/ a = 2 \/ a = 3 \/ a = 4`] THEN SET_TAC[]);
4835 (UP_ASM_TAC THEN UNDISCH_TAC `~NULLSET X` THEN MESON_TAC[]);
4839 (UP_ASM_TAC THEN UP_ASM_TAC THEN ARITH_TAC);
4840 (UP_ASM_TAC THEN MESON_TAC[]);
4843 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN ARITH_TAC);
4844 (UP_ASM_TAC THEN MESON_TAC[]);
4847 (REWRITE_TAC[dihu4]);
4849 (REWRITE_WITH `dihV (EL 0 (ul:(real^3)list)) (EL 1 ul) (EL 2 ul) (EL 3 ul) =
4850 dihV u0 u1 u2 (u3:real^3)`);
4852 (NEW_GOAL `truncate_simplex 1 ul = [u0;u1:real^3] /\ 1 + 1 <= LENGTH ul`);
4853 (REWRITE_TAC[Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
4854 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
4856 (NEW_GOAL `EL 0 (ul:(real^3)list) = EL 0 (truncate_simplex 1 ul)`);
4857 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4858 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
4859 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
4860 CARD (set_of_list ul) = 3 + 1`);
4861 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
4862 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
4865 (NEW_GOAL `EL 1 (ul:(real^3)list) = EL 1 (truncate_simplex 1 ul)`);
4866 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4867 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
4868 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
4869 CARD (set_of_list ul) = 3 + 1`);
4870 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
4871 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
4874 (NEW_GOAL `{EL 0 ul, EL 1 ul, EL 2 ul, EL 3 ul} = {u0, u1,u2,u3:real^3}`);
4876 {EL 0 ul, EL 1 ul, EL 2 ul, EL 3 ul} = {u0, u1,u2,u3:real^3} <=>
4877 convex hull {EL 0 ul, EL 1 ul, EL 2 ul, EL 3 ul} =
4878 convex hull {u0, u1,u2,u3:real^3}`);
4879 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4880 (MATCH_MP_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ);
4883 (UNDISCH_TAC `~NULLSET X`);
4885 (SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4;
4886 ASSUME `X = mcell k' V ul`; ASSUME `k' = 4`]);
4888 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
4889 (MATCH_MP_TAC BARV_3_EXPLICIT);
4890 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
4891 (UP_ASM_TAC THEN STRIP_TAC);
4892 (ASM_REWRITE_TAC[set_of_list]);
4893 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4894 (EXISTS_TAC `affine hull {v0, v1, v2, v3:real^3}`);
4895 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4896 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4897 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4898 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
4899 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
4901 `affine_dependent {EL 0 ul, EL 1 ul, EL 2 ul, (EL 3 ul):real^3}`);
4902 (REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`;
4903 ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
4905 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
4907 (UNDISCH_TAC `~NULLSET X`);
4909 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4; set_of_list]);
4911 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4912 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
4913 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4914 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4915 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4916 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
4917 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
4918 (ASM_REWRITE_TAC[]);
4919 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
4921 (REWRITE_WITH `convex hull {u0, u1, u2, u3:real^3} = X`);
4922 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4; set_of_list]);
4926 (UNDISCH_TAC `~NULLSET X`);
4928 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4; set_of_list]);
4929 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
4930 (UP_ASM_TAC THEN MESON_TAC[]);
4932 (SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4;
4933 ASSUME `X = mcell k' V ul`; ASSUME `k' = 4`]);
4935 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
4936 (MATCH_MP_TAC BARV_3_EXPLICIT);
4937 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
4938 (UP_ASM_TAC THEN STRIP_TAC);
4939 (REWRITE_TAC[set_of_list; ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
4940 (REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
4942 (UNDISCH_TAC `~NULLSET X`);
4944 (SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4;
4945 ASSUME `X = mcell k' V ul`; ASSUME `k' = 4`]);
4948 (UP_ASM_TAC THEN UP_ASM_TAC THEN REWRITE_TAC[]);
4949 (UP_ASM_TAC THEN MESON_TAC[]);
4950 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
4951 (UP_ASM_TAC THEN MESON_TAC[]);
4953 (UP_ASM_TAC THEN ASM_REWRITE_TAC[EL; HD; TL; ARITH_RULE `1 = SUC 0`]);
4956 (ASM_CASES_TAC `EL 2 ul = u2:real^3`);
4957 (NEW_GOAL `EL 3 ul = u3:real^3`);
4958 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
4960 (NEW_GOAL `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2:real^3}`);
4961 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
4962 (UNDISCH_TAC `~coplanar {u0,u1,u2,u3:real^3}` THEN REWRITE_TAC[
4963 GSYM (ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2, u3:real^3}`);
4964 ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2:real^3}`; COPLANAR_3]);
4965 (ASM_REWRITE_TAC[]);
4967 (NEW_GOAL `EL 2 ul = u3:real^3`);
4968 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
4970 (NEW_GOAL `{u0:real^3, u1, EL 2 ul, EL 3 ul} = {u0, u1, EL 3 ul}`);
4971 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
4972 (UNDISCH_TAC `~coplanar {u0,u1,u2,u3:real^3}` THEN REWRITE_TAC[
4973 GSYM (ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2, u3:real^3}`);
4974 ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0,u1:real^3, EL 3 ul}`; COPLANAR_3]);
4976 (NEW_GOAL `EL 3 ul = u2:real^3`);
4977 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
4979 (NEW_GOAL `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u3:real^3}`);
4980 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
4981 (UNDISCH_TAC `~coplanar {u0,u1,u2,u3:real^3}` THEN REWRITE_TAC[
4982 GSYM (ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2, u3:real^3}`);
4983 ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u3:real^3}`; COPLANAR_3]);
4984 (ASM_REWRITE_TAC[]);
4985 (REWRITE_TAC[DIHV_SYM_2]);
4987 (REWRITE_TAC[REAL_ARITH `a / b * c * d pow 3 = (c/ b * d pow 3) * a`]);
4988 (REWRITE_TAC[REAL_ARITH `a * b / (&2 * c) = (a / (&2 * c)) * b`]);
4989 (AP_THM_TAC THEN AP_TERM_TAC);
4992 `measurable (conic_cap u0 u1 r d) /\
4993 vol (conic_cap u0 u1 r d) =
4994 (if u1 = u0 \/ &1 <= d \/ r < &0
4996 else &2 / &3 * pi * (&1 - d) * r pow 3)`);
4997 (MATCH_MP_TAC VOLUME_CONIC_CAP);
4999 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
5002 (UP_ASM_TAC THEN STRIP_TAC);
5003 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1:real^3)` THEN MESON_TAC[]);
5004 (UNDISCH_TAC `d < &1` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5005 (UNDISCH_TAC `&0 < r` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5006 (UP_ASM_TAC THEN MESON_TAC[]);
5007 (REWRITE_TAC[ARITH_RULE `SUC 0 = 1`]);
5009 (REWRITE_WITH `max d (--(&1)) = d`);
5010 (MATCH_MP_TAC (REAL_ARITH `&0 < d /\ --(&1) < &0 ==> max d (--(&1)) = d`));
5011 (REWRITE_TAC[REAL_NEG_LT0]);
5014 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
5018 (&2 / &3 * pi * (&1 - d) * r pow 3) / (&2 * pi) = (&1 - d) / &3 * r pow 3 *
5019 ((&2 * pi) / (&2 * pi))`);
5021 (REWRITE_WITH `(&2 * pi) / (&2 * pi) = &1`);
5022 (MATCH_MP_TAC REAL_DIV_REFL);
5023 (REWRITE_TAC[REAL_ENTIRE; PI_NZ; REAL_ARITH `~(&2 = &0)`]);
5026 (UP_ASM_TAC THEN UNDISCH_TAC `k' = 4 /\ mcell k' V ul = mcell 4 V vl`
5028 (UP_ASM_TAC THEN MESON_TAC[]);
5030 (* ========================================================================= *)
5033 (ASM_CASES_TAC `azim u0 u1 u3 (u2:real^3) < pi`);
5034 (UNDISCH_TAC `~coplanar {u0, u1, u2, u3:real^3}`);
5035 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
5037 (REWRITE_WITH `vol (L INTER D) = vol (D INTER wedge u0 u1 u3 u2)`);
5038 (ASM_SIMP_TAC[WEDGE_LUNE]);
5039 (REWRITE_WITH `L INTER conic_cap (u0:real^3) u1 r d =
5040 conic_cap u0 u1 r d INTER L`);
5042 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_SYMDIFF);
5044 (REWRITE_WITH `conic_cap (u0:real^3) u1 r d INTER
5045 aff_gt {u0, u1} {u3, u2} DIFF conic_cap u0 u1 r d INTER L = {}`);
5047 (REWRITE_TAC[SET_RULE `{a,b} = {b, a}`]);
5048 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> C INTER A DIFF C INTER B = {}`));
5049 (REWRITE_TAC[AFF_GT_SUBSET_AFF_GE]);
5050 (REWRITE_TAC[SET_RULE `A UNION {} = A`]);
5052 (REWRITE_TAC[SET_RULE `{a,b} = {b, a}`]);
5054 (REWRITE_WITH `aff_ge {u0, u1:real^3} {u2, u3} =
5055 aff_gt {u0, u1} {u2, u3} UNION
5056 UNIONS {aff_ge {u0, u1} ({u2, u3} DELETE a) | a | a IN {u2, u3}}`);
5057 (MATCH_MP_TAC AFF_GE_AFF_GT_DECOMP);
5058 (REWRITE_TAC[Geomdetail.FINITE6]);
5059 (REWRITE_TAC[DISJOINT]);
5061 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
5063 (UNDISCH_TAC `~coplanar {u0, u1, u3, u2:real^3}`);
5064 (REWRITE_WITH `{u0, u1, u3, u2} = {u0, u1, u3:real^3}`);
5065 (UP_ASM_TAC THEN SET_TAC[]);
5066 (REWRITE_TAC[COPLANAR_3]);
5067 (UP_ASM_TAC THEN MESON_TAC[]);
5069 (ASM_CASES_TAC `u3 IN {u0, u1:real^3}`);
5071 (UNDISCH_TAC `~coplanar {u0, u1, u3, u2:real^3}`);
5072 (REWRITE_WITH `{u0, u1, u3, u2} = {u0, u1, u2:real^3}`);
5073 (UP_ASM_TAC THEN SET_TAC[]);
5074 (REWRITE_TAC[COPLANAR_3]);
5075 (UP_ASM_TAC THEN MESON_TAC[]);
5076 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
5078 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5080 `UNIONS {aff_ge {u0, u1:real^3} ({u2, u3} DELETE a) | a | a IN {u2, u3}}`);
5082 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5084 `aff_ge {u0, u1:real^3} {u2} UNION aff_ge {u0, u1:real^3} {u3}`);
5086 (MATCH_MP_TAC NEGLIGIBLE_UNION);
5089 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5090 (EXISTS_TAC `affine hull {u0, u1:real^3, u2}`);
5092 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
5093 (REWRITE_WITH `{u0,u1,u2:real^3} = {u0,u1} UNION {u2}`);
5095 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
5096 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5097 (EXISTS_TAC `affine hull {u0, u1:real^3, u3}`);
5099 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
5100 (REWRITE_WITH `{u0,u1,u3:real^3} = {u0,u1} UNION {u3}`);
5102 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
5103 (REWRITE_TAC[SET_RULE
5104 `UNIONS {aff_ge {u0, u1} ({m, s3} DELETE a) | a | a IN {m, s3}} =
5105 aff_ge {u0, u1} ({m, s3} DELETE s3)
5106 UNION aff_ge {u0, u1} ({m, s3} DELETE m)`]);
5107 (MATCH_MP_TAC (SET_RULE
5108 `A SUBSET B /\ C SUBSET D ==> A UNION C SUBSET B UNION D`));
5110 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
5114 (REWRITE_TAC[DISJOINT]);
5115 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
5117 (UNDISCH_TAC `~coplanar {u0, u1, u3, u2:real^3}`);
5118 (REWRITE_WITH `{u0, u1, u3, u2} = {u0, u1, u3:real^3}`);
5119 (UP_ASM_TAC THEN SET_TAC[]);
5120 (REWRITE_TAC[COPLANAR_3]);
5121 (UP_ASM_TAC THEN MESON_TAC[]);
5122 (UP_ASM_TAC THEN SET_TAC[]);
5124 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
5127 (REWRITE_TAC[DISJOINT]);
5128 (ASM_CASES_TAC `u3 IN {u0, u1:real^3}`);
5130 (UNDISCH_TAC `~coplanar {u0, u1, u3, u2:real^3}`);
5131 (REWRITE_WITH `{u0, u1, u3, u2} = {u0, u1, u2:real^3}`);
5132 (UP_ASM_TAC THEN SET_TAC[]);
5133 (REWRITE_TAC[COPLANAR_3]);
5134 (UP_ASM_TAC THEN MESON_TAC[]);
5135 (UP_ASM_TAC THEN SET_TAC[]);
5139 (REWRITE_TAC[ASSUME `D = conic_cap (u0:real^3) u1 r d`]);
5140 (REWRITE_WITH `vol (conic_cap u0 u1 r d INTER wedge u0 u1 u3 u2) =
5141 (if &1 < d \/ r < &0
5143 else azim u0 u1 u3 u2 / &3 * (&1 - max d (-- &1)) * r pow 3)`);
5144 (NEW_GOAL `~collinear {u0:real^3, u1, u2} /\ ~collinear {u0, u1, u3}`);
5146 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
5147 (EXISTS_TAC `u3:real^3`);
5148 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
5149 (ASM_REWRITE_TAC[]);
5150 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
5151 (EXISTS_TAC `u2:real^3`);
5152 (ASM_REWRITE_TAC[]);
5154 (ASM_SIMP_TAC[VOLUME_CONIC_CAP_WEDGE]);
5158 (UNDISCH_TAC `&0 < r` THEN UNDISCH_TAC `d < &1` THEN
5159 UP_ASM_TAC THEN REAL_ARITH_TAC);
5160 (UP_ASM_TAC THEN MESON_TAC[]);
5162 (REWRITE_WITH `azim (u0:real^3) u1 u3 u2 = dihV u0 u1 u3 u2`);
5163 (MATCH_MP_TAC AZIM_DIHV_SAME);
5164 (ASM_REWRITE_TAC[]);
5167 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
5168 (EXISTS_TAC `u2:real^3`);
5169 (ASM_REWRITE_TAC[]);
5170 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
5171 (EXISTS_TAC `u3:real^3`);
5172 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
5173 (ASM_REWRITE_TAC[]);
5175 (REWRITE_TAC[dihX]);
5178 (UNDISCH_TAC `~NULLSET (X INTER D)`);
5180 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5181 (EXISTS_TAC `X:real^3->bool`);
5182 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
5183 (UP_ASM_TAC THEN MESON_TAC[]);
5187 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
5188 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
5191 initial_sublist [u0; u1] ul)`);
5193 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
5194 (MATCH_MP_TAC SELECT_AX);
5195 (EXISTS_TAC `(4, vl:(real^3)list)`);
5197 (REWRITE_TAC[BETA_THM]);
5198 (REWRITE_TAC[IN; ARITH_RULE `4 <= 4`] THEN ASM_REWRITE_TAC[]);
5200 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
5202 (REWRITE_WITH `initial_sublist [u0;u1:real^3] [u0; u1; u2; u3] /\
5203 LENGTH [u0;u1] = 1 + 1`);
5204 (REWRITE_TAC[GSYM Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
5205 (REWRITE_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
5206 (ASM_REWRITE_TAC[]);
5207 (REWRITE_TAC[LENGTH] THEN ARITH_TAC);
5208 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
5209 (EXPAND_TAC "P" THEN REWRITE_TAC[IN] THEN REPEAT STRIP_TAC);
5211 (NEW_GOAL `k' = 4 /\ mcell k' V ul = mcell 4 V vl`);
5212 (MATCH_MP_TAC Ajripqn.AJRIPQN);
5213 (ASM_REWRITE_TAC[]);
5214 (REWRITE_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
5215 (REWRITE_WITH `mcell k' V ul INTER mcell 4 V vl = X`);
5216 (REWRITE_WITH `mcell 4 V vl = X`);
5217 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
5218 (SET_TAC[ASSUME `X = mcell k' V ul`]);
5221 (UNDISCH_TAC `k' <= 4` THEN REWRITE_TAC[ARITH_RULE
5222 `a <= 4 <=> a = 0 \/a = 1 \/ a = 2 \/ a = 3 \/ a = 4`] THEN SET_TAC[]);
5224 (UP_ASM_TAC THEN UNDISCH_TAC `~NULLSET X` THEN MESON_TAC[]);
5228 (UP_ASM_TAC THEN UP_ASM_TAC THEN ARITH_TAC);
5229 (UP_ASM_TAC THEN MESON_TAC[]);
5232 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN ARITH_TAC);
5233 (UP_ASM_TAC THEN MESON_TAC[]);
5236 (REWRITE_TAC[dihu4]);
5238 (REWRITE_WITH `dihV (EL 0 (ul:(real^3)list)) (EL 1 ul) (EL 2 ul) (EL 3 ul) =
5239 dihV u0 u1 u2 (u3:real^3)`);
5241 (NEW_GOAL `truncate_simplex 1 ul = [u0;u1:real^3] /\ 1 + 1 <= LENGTH ul`);
5242 (REWRITE_TAC[Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
5243 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
5245 (NEW_GOAL `EL 0 (ul:(real^3)list) = EL 0 (truncate_simplex 1 ul)`);
5246 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
5247 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
5248 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
5249 CARD (set_of_list ul) = 3 + 1`);
5250 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
5251 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
5254 (NEW_GOAL `EL 1 (ul:(real^3)list) = EL 1 (truncate_simplex 1 ul)`);
5255 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
5256 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
5257 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
5258 CARD (set_of_list ul) = 3 + 1`);
5259 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
5260 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
5263 (NEW_GOAL `{EL 0 ul, EL 1 ul, EL 2 ul, EL 3 ul} = {u0, u1,u2,u3:real^3}`);
5265 {EL 0 ul, EL 1 ul, EL 2 ul, EL 3 ul} = {u0, u1,u2,u3:real^3} <=>
5266 convex hull {EL 0 ul, EL 1 ul, EL 2 ul, EL 3 ul} =
5267 convex hull {u0, u1,u2,u3:real^3}`);
5268 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
5269 (MATCH_MP_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ);
5272 (UNDISCH_TAC `~NULLSET X`);
5274 (SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4;
5275 ASSUME `X = mcell k' V ul`; ASSUME `k' = 4`]);
5277 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
5278 (MATCH_MP_TAC BARV_3_EXPLICIT);
5279 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
5280 (UP_ASM_TAC THEN STRIP_TAC);
5281 (ASM_REWRITE_TAC[set_of_list]);
5282 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5283 (EXISTS_TAC `affine hull {v0, v1, v2, v3:real^3}`);
5284 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
5285 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
5286 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
5287 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
5288 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
5290 `affine_dependent {EL 0 ul, EL 1 ul, EL 2 ul, (EL 3 ul):real^3}`);
5291 (REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`;
5292 ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
5294 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
5296 (UNDISCH_TAC `~NULLSET X`);
5298 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4; set_of_list]);
5300 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5301 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
5302 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
5303 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
5304 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
5305 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
5306 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
5307 (ASM_REWRITE_TAC[]);
5308 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
5310 (REWRITE_WITH `convex hull {u0, u1, u2, u3:real^3} = X`);
5311 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4; set_of_list]);
5315 (UNDISCH_TAC `~NULLSET X`);
5317 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4; set_of_list]);
5318 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
5319 (UP_ASM_TAC THEN MESON_TAC[]);
5321 (SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4;
5322 ASSUME `X = mcell k' V ul`; ASSUME `k' = 4`]);
5324 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
5325 (MATCH_MP_TAC BARV_3_EXPLICIT);
5326 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
5327 (UP_ASM_TAC THEN STRIP_TAC);
5328 (REWRITE_TAC[set_of_list; ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
5329 (REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
5331 (UNDISCH_TAC `~NULLSET X`);
5333 (SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4;
5334 ASSUME `X = mcell k' V ul`; ASSUME `k' = 4`]);
5337 (UP_ASM_TAC THEN UP_ASM_TAC THEN REWRITE_TAC[]);
5338 (UP_ASM_TAC THEN MESON_TAC[]);
5339 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
5340 (UP_ASM_TAC THEN MESON_TAC[]);
5342 (UP_ASM_TAC THEN ASM_REWRITE_TAC[EL; HD; TL; ARITH_RULE `1 = SUC 0`]);
5345 (ASM_CASES_TAC `EL 2 ul = u2:real^3`);
5346 (NEW_GOAL `EL 3 ul = u3:real^3`);
5347 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
5349 (NEW_GOAL `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2:real^3}`);
5350 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
5351 (UNDISCH_TAC `~coplanar {u0,u1,u3,u2:real^3}`);
5353 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
5355 GSYM (ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2, u3:real^3}`);
5356 ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2:real^3}`; COPLANAR_3]);
5357 (ASM_REWRITE_TAC[]);
5359 (NEW_GOAL `EL 2 ul = u3:real^3`);
5360 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
5362 (NEW_GOAL `{u0:real^3, u1, EL 2 ul, EL 3 ul} = {u0, u1, EL 3 ul}`);
5363 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
5364 (UNDISCH_TAC `~coplanar {u0,u1,u3,u2:real^3}`);
5366 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
5370 GSYM (ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2, u3:real^3}`);
5371 ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0,u1:real^3, EL 3 ul}`; COPLANAR_3]);
5372 (NEW_GOAL `EL 3 ul = u2:real^3`);
5373 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
5375 (NEW_GOAL `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u3:real^3}`);
5376 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
5377 (UNDISCH_TAC `~coplanar {u0,u1,u3,u2:real^3}`);
5379 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
5382 GSYM (ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2, u3:real^3}`);
5383 ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u3:real^3}`; COPLANAR_3]);
5384 (ASM_REWRITE_TAC[]);
5385 (REWRITE_TAC[DIHV_SYM_2]);
5387 (REWRITE_TAC[DIHV_SYM_2]);
5388 (REWRITE_TAC[REAL_ARITH `a / b * c * d pow 3 = (c/ b * d pow 3) * a`]);
5389 (REWRITE_TAC[REAL_ARITH `a * b / (&2 * c) = (a / (&2 * c)) * b`]);
5390 (AP_THM_TAC THEN AP_TERM_TAC);
5393 `measurable (conic_cap u0 u1 r d) /\
5394 vol (conic_cap u0 u1 r d) =
5395 (if u1 = u0 \/ &1 <= d \/ r < &0
5397 else &2 / &3 * pi * (&1 - d) * r pow 3)`);
5398 (MATCH_MP_TAC VOLUME_CONIC_CAP);
5400 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
5403 (UP_ASM_TAC THEN STRIP_TAC);
5404 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1:real^3)` THEN MESON_TAC[]);
5405 (UNDISCH_TAC `d < &1` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5406 (UNDISCH_TAC `&0 < r` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5407 (UP_ASM_TAC THEN MESON_TAC[]);
5409 (REWRITE_WITH `max d (--(&1)) = d`);
5410 (MATCH_MP_TAC (REAL_ARITH `&0 < d /\ --(&1) < &0 ==> max d (--(&1)) = d`));
5411 (REWRITE_TAC[REAL_NEG_LT0]);
5414 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
5418 (&2 / &3 * pi * (&1 - d) * r pow 3) / (&2 * pi) = (&1 - d) / &3 * r pow 3 *
5419 ((&2 * pi) / (&2 * pi))`);
5421 (REWRITE_WITH `(&2 * pi) / (&2 * pi) = &1`);
5422 (MATCH_MP_TAC REAL_DIV_REFL);
5423 (REWRITE_TAC[REAL_ENTIRE; PI_NZ; REAL_ARITH `~(&2 = &0)`]);
5426 (UP_ASM_TAC THEN UNDISCH_TAC `k' = 4 /\ mcell k' V ul = mcell 4 V vl`
5428 (UP_ASM_TAC THEN MESON_TAC[]);
5430 (* ========================================================================== *)
5433 (NEW_GOAL `azim (u0:real^3) u1 u3 u2 =
5434 (if azim u0 u1 u2 u3 = &0 then &0 else &2 * pi - azim u0 u1 u2 u3)`);
5435 (MATCH_MP_TAC AZIM_COMPL);
5438 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
5439 (EXISTS_TAC `u3:real^3`);
5440 (ASM_REWRITE_TAC[]);
5441 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
5442 (EXISTS_TAC `u2:real^3`);
5443 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b, d, c}`]);
5444 (ASM_REWRITE_TAC[]);
5445 (UP_ASM_TAC THEN COND_CASES_TAC);
5447 (NEW_GOAL `(&0 < pi)`);
5448 (REWRITE_TAC[PI_POS]);
5449 (UNDISCH_TAC `~(azim (u0:real^3) u1 u2 u3 < pi)`);
5450 (ASM_REWRITE_TAC[]);
5451 (UP_ASM_TAC THEN MESON_TAC[]);
5454 (NEW_GOAL `azim (u0:real^3) u1 u2 u3 = pi`);
5455 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5456 (UNDISCH_TAC `~coplanar {u0, u1, u2, u3:real^3}`);
5457 (REWRITE_TAC[] THEN MATCH_MP_TAC AZIM_EQ_0_PI_IMP_COPLANAR);
5458 (ASM_REWRITE_TAC[]);
5459 (UP_ASM_TAC THEN MESON_TAC[]);
5461 (* ========================================================================= *)
5463 (* ========================================================================= *)
5466 (UP_ASM_TAC THEN UP_ASM_TAC THEN UNDISCH_TAC `2 <= k` THEN ARITH_TAC);
5467 (NEW_GOAL `?u2 u3. vl = [u0; u1;u2;u3:real^3]`);
5468 (NEW_GOAL `?v0 v1 u2 u3. vl = [v0; v1;u2;u3:real^3]`);
5469 (MATCH_MP_TAC BARV_3_EXPLICIT);
5470 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
5471 (UP_ASM_TAC THEN STRIP_TAC);
5472 (EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3`);
5474 (REWRITE_WITH `u0 = v0:real^3`);
5475 (REWRITE_WITH `v0:real^3 = HD (truncate_simplex 1 vl)`);
5476 (REWRITE_TAC[ASSUME `vl = [v0;v1;u2;u3:real^3]`;
5477 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
5478 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
5480 (REWRITE_WITH `u1 = v1:real^3`);
5481 (REWRITE_WITH `v1:real^3 = HD (TL (truncate_simplex 1 vl))`);
5482 (REWRITE_TAC[ASSUME `vl = [v0;v1;u2;u3:real^3]`;
5483 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
5484 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
5485 (ASM_REWRITE_TAC[]);
5486 (UP_ASM_TAC THEN STRIP_TAC);
5488 (ABBREV_TAC `L = aff_ge{u0, u1} {u2, mxi V vl}`);
5490 (REWRITE_WITH `vol (X INTER D) = vol (L INTER D)`);
5492 (ASM_SIMP_TAC[MCELL_EXPLICIT; TRUNCATE_SIMPLEX_EXPLICIT_2;
5493 mcell3; set_of_list; SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
5495 (ABBREV_TAC `m = mxi V vl`);
5496 (REWRITE_WITH `mxi V [u0; u1; u2; u3] = m`);
5497 (EXPAND_TAC "m" THEN DEL_TAC THEN ASM_REWRITE_TAC[]);
5500 (REWRITE_TAC[SET_RULE `A = B <=> A SUBSET B /\ B SUBSET A`]);
5502 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> A INTER X SUBSET B INTER X`));
5503 (REWRITE_TAC[Marchal_cells_2_new.CONVEX_HULL_4_SUBSET_AFF_GE_2_2]);
5504 (MATCH_MP_TAC (SET_RULE `(!x. x IN A /\ x IN B ==> x IN C) ==>
5505 A INTER B SUBSET C INTER B`));
5506 (NEW_GOAL `DISJOINT {u0,u1:real^3} {u2, m}`);
5507 (REWRITE_TAC[DISJOINT]);
5508 (MATCH_MP_TAC (MESON[] `(~A:bool ==> F) ==> A`));
5510 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
5511 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5512 (EXISTS_TAC `X:real^3->bool` THEN REWRITE_TAC[SET_RULE `A INTER X SUBSET A`]);
5515 (ASM_SIMP_TAC[MCELL_EXPLICIT; TRUNCATE_SIMPLEX_EXPLICIT_2;
5516 mcell3; set_of_list; SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
5517 (REWRITE_WITH `mxi V [u0; u1; u2; u3] = m`);
5518 (EXPAND_TAC "m" THEN REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
5519 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5520 (EXISTS_TAC `affine hull {u0, u1, u2, m:real^3}`);
5521 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
5522 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
5523 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
5525 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
5526 (REWRITE_WITH `{u0, u1, u2, m} = {u0, u1, m:real^3}`);
5527 (UP_ASM_TAC THEN SET_TAC[]);
5528 (REWRITE_TAC[COPLANAR_3]);
5529 (NEW_GOAL `m IN {u0, u1:real^3}`);
5530 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
5531 (REWRITE_WITH `{u0, u1, u2, m} = {u0, u1, u2:real^3}`);
5532 (UP_ASM_TAC THEN SET_TAC[]);
5533 (REWRITE_TAC[COPLANAR_3]);
5535 (SIMP_TAC[ASSUME `DISJOINT {u0, u1} {u2, m:real^3}`; AFF_GE_2_2]);
5536 (REWRITE_TAC[CONVEX_HULL_4; IN; IN_ELIM_THM]);
5538 (EXISTS_TAC `t1:real` THEN EXISTS_TAC `t2:real` THEN
5539 EXISTS_TAC `t3:real` THEN EXISTS_TAC `t4:real`);
5540 (ASM_REWRITE_TAC[]);
5543 (REWRITE_TAC[REAL_ARITH `&0 <= a <=> (a < &0 ==> F)`]);
5545 (UNDISCH_TAC `conic_cap (u0:real^3) u1 r d x`);
5546 (REWRITE_TAC[MESON[IN] `conic_cap u0 u1 r d x <=> x IN conic_cap u0 u1 r d`;
5547 GSYM (ASSUME `D = conic_cap (u0:real^3) u1 r d`)]);
5549 (REWRITE_TAC[IN_INTER; MESON[] `~(x:bool /\ y) <=> (~x \/ ~y)`]);
5551 (REWRITE_TAC[IN_BALL] THEN STRIP_TAC);
5553 (NEW_GOAL `(?b1:real. b1 IN P1 /\ (!x. x IN P1 ==> b1 <= x))`);
5554 (FIRST_ASSUM MATCH_MP_TAC);
5555 (REWRITE_TAC[SET_RULE `~(X = {}) <=> (?x. x IN X)`]);
5556 (EXISTS_TAC `(f1:(real^3)list -> real) vl`);
5557 (EXPAND_TAC "P1" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
5558 (EXISTS_TAC `vl:(real^3)list`);
5559 (ASM_REWRITE_TAC[]);
5560 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
5561 (ASM_REWRITE_TAC[]);
5563 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
5564 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5565 (EXISTS_TAC `X INTER (C:real^3->bool)`);
5567 (ASM_REWRITE_TAC[]);
5568 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
5569 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
5570 (MATCH_MP_TAC (SET_RULE
5571 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
5573 (MATCH_MP_TAC SUBSET_BALL);
5574 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
5575 (MATCH_MP_TAC RCONE_GT_SUBSET);
5576 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
5577 (FIRST_X_ASSUM CHOOSE_TAC);
5579 (NEW_GOAL `r1 = (@b. b IN P1 /\ (!x. x IN P1 ==> b <= x:real))`);
5583 (UP_ASM_TAC THEN REWRITE_TAC[]);
5584 (REWRITE_TAC[SET_RULE `~(X = {}) <=> (?x. x IN X)`]);
5585 (EXISTS_TAC `(f1:(real^3)list -> real) vl`);
5586 (EXPAND_TAC "P1" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
5587 (EXISTS_TAC `vl:(real^3)list`);
5588 (ASM_REWRITE_TAC[]);
5589 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
5592 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
5593 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5594 (EXISTS_TAC `X INTER (C:real^3->bool)`);
5596 (ASM_REWRITE_TAC[]);
5597 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
5598 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
5599 (MATCH_MP_TAC (SET_RULE
5600 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
5602 (MATCH_MP_TAC SUBSET_BALL);
5603 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
5604 (MATCH_MP_TAC RCONE_GT_SUBSET);
5605 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
5606 (UP_ASM_TAC THEN MESON_TAC[]);
5609 (ABBREV_TAC `Q1 = (\b:real. b IN P1 /\ (!x. x IN P1 ==> b <= x))`);
5610 (NEW_GOAL `(Q1:real->bool) r1`);
5611 (ASM_REWRITE_TAC[]);
5612 (MATCH_MP_TAC SELECT_AX);
5613 (EXISTS_TAC `b1:real` THEN EXPAND_TAC "Q1");
5614 (ASM_REWRITE_TAC[]);
5615 (UP_ASM_TAC THEN EXPAND_TAC "Q1" THEN REPEAT STRIP_TAC);
5616 (NEW_GOAL `r1 <= f1 (vl:(real^3)list)`);
5617 (FIRST_ASSUM MATCH_MP_TAC);
5618 (EXPAND_TAC "P1" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
5619 (EXISTS_TAC `vl:(real^3)list`);
5620 (ASM_REWRITE_TAC[]);
5621 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
5622 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
5624 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
5625 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5626 (EXISTS_TAC `X INTER (C:real^3->bool)`);
5628 (ASM_REWRITE_TAC[]);
5629 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
5630 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
5631 (MATCH_MP_TAC (SET_RULE
5632 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
5634 (MATCH_MP_TAC SUBSET_BALL);
5635 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
5636 (MATCH_MP_TAC RCONE_GT_SUBSET);
5637 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
5639 (UP_ASM_TAC THEN EXPAND_TAC "f1" THEN REWRITE_TAC[EL; HD; TL;
5640 ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`;
5641 ASSUME `vl= [u0; u1; u2; u3:real^3]`]);
5642 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
5644 (REWRITE_TAC[ASSUME `vl = [u0;u1;u2;u3:real^3]`]);
5647 (NEW_GOAL `!v. v IN affine hull {u1, u2, m:real^3} ==> r1 <= dist (u0, v)`);
5649 (NEW_GOAL `dist (u0,closest_point (affine hull {u1, u2, m}) u0) <=
5650 dist (u0, v:real^3)`);
5651 (MATCH_MP_TAC CLOSEST_POINT_LE);
5652 (ASM_REWRITE_TAC[CLOSED_AFFINE_HULL]);
5653 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5655 (NEW_GOAL `r <= dist (u0:real^3, x)`);
5656 (REWRITE_TAC[dist]);
5657 (REWRITE_WITH `u0:real^3 - x = (t1 + t2 + t3 + t4) % u0 - x`);
5658 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
5659 (REWRITE_TAC[VECTOR_ADD_RDISTRIB]);
5660 (ASM_REWRITE_TAC[VECTOR_ARITH `(t1 % u0 + t2 % u0 + t3 % u0 + t4 % u0) -
5661 (t1 % u0 + t2 % u1 + t3 % u2 + t4 % u3) =
5662 (t2 + t3 + t4) % u0 - (t2 % u1 + t3 % u2 + t4 % u3)`]);
5663 (ABBREV_TAC `y:real^3 = t2 /(t2 + t3 + t4) % u1 +
5664 t3 /(t2 + t3 + t4) % u2 +
5665 t4 /(t2 + t3 + t4) % m`);
5666 (REWRITE_WITH `(t2 % u1 + t3 % u2 + t4 % m) = (t2 + t3 + t4) % (y:real^3)`);
5668 (REWRITE_TAC[VECTOR_ARITH `x % (t2 / x % u1 + t3 / x % u2 + t4 / x % u3) =
5669 (x / x) % (t2 % u1 + t3 % u2 + t4 % u3)`]);
5670 (REWRITE_WITH `(t2 + t3 + t4) / (t2 + t3 + t4) = &1`);
5671 (MATCH_MP_TAC REAL_DIV_REFL);
5672 (UNDISCH_TAC `t1 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1`);
5675 (REWRITE_TAC[VECTOR_ARITH `a % x - a % y = a % (x - y)`; NORM_MUL]);
5677 (NEW_GOAL `&1 < t2 + t3 + t4`);
5678 (UNDISCH_TAC `t1 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1`);
5680 (REWRITE_WITH `abs (t2 + t3 + t4) = t2 + t3 + t4`);
5681 (REWRITE_TAC[REAL_ABS_REFL] THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5682 (REWRITE_TAC[GSYM dist]);
5683 (NEW_GOAL `r1 <= dist (u0, y:real^3)`);
5684 (FIRST_ASSUM MATCH_MP_TAC);
5685 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
5686 (EXISTS_TAC `t2 / (t2 + t3 + t4)` THEN EXISTS_TAC `t3 / (t2 + t3 + t4)` THEN
5687 EXISTS_TAC `t4 / (t2 + t3 + t4)`);
5689 (REWRITE_TAC[REAL_ARITH `a / x + b / x + c / x = (a+b+c)/ x`]);
5690 (MATCH_MP_TAC REAL_DIV_REFL);
5691 (UP_ASM_TAC THEN REAL_ARITH_TAC);
5692 (ASM_REWRITE_TAC[]);
5694 (NEW_GOAL `r1 <= (t2 + t3 + t4) * dist (u0,y:real^3)`);
5695 (NEW_GOAL `dist (u0,y) <= (t2 + t3 + t4) * dist (u0,y:real^3)`);
5696 (REWRITE_TAC[REAL_ARITH `a <= b * a <=> &0 <= (b - &1) * a`]);
5697 (MATCH_MP_TAC REAL_LE_MUL);
5698 (REWRITE_TAC[DIST_POS_LE]);
5699 (DEL_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5700 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5701 (EXPAND_TAC "r" THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5702 (UNDISCH_TAC `dist (u0, x:real^3) < r` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5704 (* ========================================================================== *)
5706 (REWRITE_TAC[REAL_ARITH `&0 <= a <=> (a < &0 ==> F)`]);
5708 (UNDISCH_TAC `conic_cap (u0:real^3) u1 r d x`);
5709 (REWRITE_TAC[MESON[IN] `conic_cap u0 u1 r d x <=> x IN conic_cap u0 u1 r d`;
5710 GSYM (ASSUME `D = conic_cap (u0:real^3) u1 r d`)]);
5712 (REWRITE_TAC[IN_INTER; MESON[] `~(x:bool /\ y) <=> (~x \/ ~y)`]);
5714 (REWRITE_TAC[IN; IN_ELIM_THM; rcone_gt; rconesgn] THEN STRIP_TAC);
5716 (NEW_GOAL `(?b1:real. b1 IN P3 /\ (!x. x IN P3 ==> x <= b1))`);
5717 (FIRST_ASSUM MATCH_MP_TAC);
5718 (REWRITE_TAC[SET_RULE `~(X = {}) <=> (?x. x IN X)`]);
5719 (EXISTS_TAC `(f3:(real^3)list -> real) vl`);
5720 (EXPAND_TAC "P3" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
5721 (EXISTS_TAC `vl:(real^3)list`);
5722 (ASM_REWRITE_TAC[]);
5723 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
5724 (ASM_SIMP_TAC[MCELL_EXPLICIT]);
5726 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
5727 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5728 (EXISTS_TAC `X INTER (C:real^3->bool)`);
5730 (ASM_REWRITE_TAC[]);
5731 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
5732 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
5733 (MATCH_MP_TAC (SET_RULE
5734 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
5736 (MATCH_MP_TAC SUBSET_BALL);
5737 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
5738 (MATCH_MP_TAC RCONE_GT_SUBSET);
5739 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
5740 (FIRST_X_ASSUM CHOOSE_TAC);
5742 (NEW_GOAL `d1 = (@b. b IN P3 /\ (!x. x IN P3 ==> x <= b:real))`);
5746 (UP_ASM_TAC THEN REWRITE_TAC[]);
5747 (REWRITE_TAC[SET_RULE `~(X = {}) <=> (?x. x IN X)`]);
5748 (EXISTS_TAC `(f3:(real^3)list -> real) vl`);
5749 (EXPAND_TAC "P3" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
5750 (EXISTS_TAC `vl:(real^3)list`);
5751 (ASM_REWRITE_TAC[]);
5752 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
5753 (ASM_SIMP_TAC[MCELL_EXPLICIT]);
5755 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
5756 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5757 (EXISTS_TAC `X INTER (C:real^3->bool)`);
5759 (ASM_REWRITE_TAC[]);
5760 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
5761 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
5762 (MATCH_MP_TAC (SET_RULE
5763 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
5765 (MATCH_MP_TAC SUBSET_BALL);
5766 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
5767 (MATCH_MP_TAC RCONE_GT_SUBSET);
5768 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
5769 (UP_ASM_TAC THEN MESON_TAC[]);
5772 (ABBREV_TAC `Q1 = (\b:real. b IN P3 /\ (!x. x IN P3 ==> x <= b))`);
5773 (NEW_GOAL `(Q1:real->bool) d1`);
5774 (ASM_REWRITE_TAC[]);
5775 (MATCH_MP_TAC SELECT_AX);
5776 (EXISTS_TAC `b1:real` THEN EXPAND_TAC "Q1");
5777 (ASM_REWRITE_TAC[]);
5778 (UP_ASM_TAC THEN EXPAND_TAC "Q1" THEN REPEAT STRIP_TAC);
5780 (NEW_GOAL `f3 (vl:(real^3)list) <= d1`);
5781 (FIRST_ASSUM MATCH_MP_TAC);
5782 (EXPAND_TAC "P3" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
5783 (EXISTS_TAC `vl:(real^3)list`);
5784 (ASM_REWRITE_TAC[]);
5785 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
5786 (ASM_SIMP_TAC[MCELL_EXPLICIT]);
5788 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
5789 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5790 (EXISTS_TAC `X INTER (C:real^3->bool)`);
5792 (ASM_REWRITE_TAC[]);
5793 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
5794 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
5795 (MATCH_MP_TAC (SET_RULE
5796 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
5798 (MATCH_MP_TAC SUBSET_BALL);
5799 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
5800 (MATCH_MP_TAC RCONE_GT_SUBSET);
5801 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
5803 (UP_ASM_TAC THEN EXPAND_TAC "f3");
5804 (REWRITE_TAC[EL; HD; TL;
5805 ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`; ASSUME `mxi V vl = m`;
5806 ASSUME `vl= [u0; u1; u2; u3:real^3]`] THEN STRIP_TAC);
5808 (ABBREV_TAC `xx = smallest_angle_line u2 m u0 u1`);
5810 (MP_TAC (ASSUME `smallest_angle_line u2 m u0 u1 = xx`));
5811 (REWRITE_TAC[smallest_angle_line; smallest_angle_set]);
5813 (\x:real^3. x IN convex hull {u2, m} /\
5814 (!y. y IN convex hull {u2, m}
5815 ==> ((y - u0) dot (u1 - u0)) /
5816 (norm (y - u0) * norm (u1 - u0)) <=
5817 ((x - u0) dot (u1 - u0)) /
5818 (norm (x - u0) * norm (u1 - u0))))`);
5819 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN STRIP_TAC);
5820 (NEW_GOAL `(Q2:real^3->bool) xx`);
5821 (ONCE_ASM_REWRITE_TAC[]);
5822 (MATCH_MP_TAC SELECT_AX);
5825 (MATCH_MP_TAC SMALLEST_ANGLE_LINE_EXISTS);
5827 (ASM_REWRITE_TAC[]);
5830 (UNDISCH_TAC `~NULLSET (X INTER D)`);
5832 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5833 (EXISTS_TAC `X:real^3->bool` THEN STRIP_TAC);
5834 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell3; set_of_list;TRUNCATE_SIMPLEX_EXPLICIT_2;
5835 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
5836 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
5838 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
5840 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5842 (EXISTS_TAC `affine hull {u0, u1, u2, m:real^3}`);
5844 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
5845 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
5846 (REWRITE_TAC[coplanar]);
5847 (UNDISCH_TAC `u0 IN convex hull {u2, m:real^3}`);
5848 (REWRITE_TAC[CONVEX_HULL_2; IN; IN_ELIM_THM] THEN STRIP_TAC);
5849 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN
5850 EXISTS_TAC `m:real^3`);
5851 (MATCH_MP_TAC (SET_RULE `a IN s /\ b SUBSET s ==> (a INSERT b) SUBSET s`));
5852 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
5853 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
5854 (EXISTS_TAC `&0` THEN EXISTS_TAC `u:real` THEN EXISTS_TAC `v:real`);
5856 (UNDISCH_TAC `u + v = &1` THEN REAL_ARITH_TAC);
5857 (UP_ASM_TAC THEN VECTOR_ARITH_TAC);
5858 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
5859 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
5862 (UP_ASM_TAC THEN EXPAND_TAC "Q2");
5864 (ABBREV_TAC `g = (\y:real^3. ((y - u0) dot (u1 - u0)) /
5865 (norm (y - u0) * norm (u1 - u0)))`);
5867 (NEW_GOAL `d < (g:real^3->real) x`);
5870 `d < ((x - u0) dot (u1 - u0)) / (norm (x - u0) * norm (u1 - u0:real^3)) <=>
5871 d * (norm (x - u0) * norm (u1 - u0)) < (x - u0) dot (u1 - u0)`);
5872 (MATCH_MP_TAC REAL_LT_RDIV_EQ);
5873 (MATCH_MP_TAC (REAL_ARITH `&0 <= a /\ ~(a = &0) ==> &0 < a`));
5875 (MATCH_MP_TAC REAL_LE_MUL);
5876 (ASM_REWRITE_TAC[NORM_POS_LE]);
5877 (REWRITE_TAC[REAL_ENTIRE; NORM_EQ_0; VECTOR_ARITH `x - y = vec 0 <=> x = y`]);
5878 (ASM_REWRITE_TAC[]);
5879 (REWRITE_WITH `t1 % u0 + t2 % u1 + t3 % u2 + t4 % m = u0:real^3 <=>
5880 t1 % u0 + t2 % u1 + t3 % u2 + t4 % m = (t1 + t2 + t3 + t4) % u0`);
5881 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
5882 (REWRITE_TAC[VECTOR_ARITH `t1 % u0 + u = (t1 + t2) % u0 <=> u = t2 % u0`]);
5885 (MP_TAC (ASSUME `~NULLSET (X INTER D)`) THEN REWRITE_TAC[]);
5886 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5887 (EXISTS_TAC `X:real^3->bool` THEN STRIP_TAC);
5888 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell3;set_of_list;
5889 TRUNCATE_SIMPLEX_EXPLICIT_2; SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
5890 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
5892 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
5893 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5895 (EXISTS_TAC `affine hull {u0, u1, u2, m:real^3}`);
5896 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
5897 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
5898 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
5899 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
5900 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
5901 (REWRITE_TAC[affine_dependent]);
5902 (EXISTS_TAC `u1:real^3`);
5906 (NEW_GOAL `~(u1 IN {u0, u2, m:real^3})`);
5908 (MP_TAC (ASSUME `~NULLSET (X INTER D)`) THEN REWRITE_TAC[]);
5909 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5910 (EXISTS_TAC `X:real^3->bool` THEN STRIP_TAC);
5911 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell3;set_of_list;
5912 TRUNCATE_SIMPLEX_EXPLICIT_2; SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
5913 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
5915 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
5916 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5917 (EXISTS_TAC `affine hull {u0, u1, u2, m:real^3}`);
5918 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
5919 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
5920 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
5921 (REWRITE_WITH `{u0, u1, u2, m} = {u0:real^3,u2, m}`);
5922 (UP_ASM_TAC THEN SET_TAC[]);
5923 (REWRITE_TAC[COPLANAR_3]);
5925 (REWRITE_WITH `{u0, u1, u2, m} DELETE u1 = {u0, u2, m:real^3}`);
5926 (UP_ASM_TAC THEN SET_TAC[]);
5927 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
5928 (EXISTS_TAC `(t2 + t3 + t4) / t2`);
5929 (EXISTS_TAC `(-- t3) / t2`);
5930 (EXISTS_TAC `(-- t4) / t2`);
5933 (REWRITE_WITH `(t2 + t3 + t4) / t2 + --t3 / t2 + --t4 / t2 = t2 / t2`);
5935 (MATCH_MP_TAC REAL_DIV_REFL);
5936 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
5938 `u1 = (t2 + t3 + t4) / t2 % u0 + --t3 / t2 % u2 + --t4 / t2 % m:real^3 <=>
5939 u1 = (&1 / t2) % ((t2 + t3 + t4) % u0 - t3 % u2 - t4 % m)`);
5941 (REWRITE_TAC[GSYM (ASSUME `t2 % u1 + t3 % u2 + t4 % m =
5942 (t2 + t3 + t4) % u0:real^3`)]);
5943 (REWRITE_TAC[VECTOR_ARITH
5944 `(t2 % u1 + t3 % u2 + t4 % u3) - t3 % u2 - t4 % u3 = t2 % u1`]);
5945 (REWRITE_TAC[VECTOR_MUL_ASSOC]);
5946 (REWRITE_WITH `&1 / t2 * t2 = &1`);
5947 (REWRITE_TAC[REAL_ARITH `&1 / t2 * t2 = t2 / t2`]);
5948 (MATCH_MP_TAC REAL_DIV_REFL);
5949 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
5952 (REWRITE_TAC[REAL_ARITH `a * b * c < d <=> d > b * c * a`; GSYM dist]);
5953 (ASM_REWRITE_TAC[]);
5955 (NEW_GOAL `g x <= (g:real^3->real) xx`);
5956 (NEW_GOAL `!y. y IN convex hull {u2 , m:real^3} ==> g y <= g xx`);
5957 (EXPAND_TAC "g" THEN ASM_REWRITE_TAC[]);
5958 (NEW_GOAL `&0 < (t3 + t4)`);
5959 (MATCH_MP_TAC (REAL_ARITH `(&0 <= x) /\ ~(x = &0) ==> &0 < x`));
5961 (MATCH_MP_TAC REAL_LE_ADD);
5962 (ASM_REWRITE_TAC[]);
5964 (NEW_GOAL `t3 = &0 /\ t4 = &0`);
5965 (UNDISCH_TAC `&0 <= t3` THEN UNDISCH_TAC `&0 <= t4` THEN
5966 UP_ASM_TAC THEN REAL_ARITH_TAC);
5967 (UP_ASM_TAC THEN STRIP_TAC);
5970 (UNDISCH_TAC `(x - u0) dot (u1 - u0:real^3) > dist (x,u0) * dist (u1,u0) * d`);
5971 (REWRITE_WITH `x = t1 % u0 + t2 % u1:real^3`);
5972 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
5973 (MATCH_MP_TAC (REAL_ARITH `a <= &0 /\ &0 <= b ==> ~(a > b)`));
5975 (REWRITE_WITH `(t1 % u0 + t2 % u1) - u0 = (t1 % u0 + t2 % u1) -
5976 (t1 + t2 + t3 + t4) % u0:real^3`);
5977 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
5978 (REWRITE_TAC[ASSUME `t3 = &0`; ASSUME `t4 = &0`; VECTOR_ARITH
5979 `(t1 % u0 + t2 % u1) - (t1 + t2 + &0 + &0) % u0 = t2 % (u1 - u0)`;
5980 DOT_LMUL; REAL_ARITH `a * b <= &0 <=> &0 <= (--a) * b`]);
5981 (MATCH_MP_TAC REAL_LE_MUL);
5982 (REWRITE_TAC[DOT_POS_LE]);
5983 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
5984 (MATCH_MP_TAC REAL_LE_MUL);
5985 (REWRITE_TAC[DIST_POS_LE]);
5986 (MATCH_MP_TAC REAL_LE_MUL);
5987 (REWRITE_TAC[DIST_POS_LE]);
5988 (EXPAND_TAC "d" THEN UNDISCH_TAC `&0 < c/\ c < &1`);
5990 (UP_ASM_TAC THEN MESON_TAC[]);
5992 (ABBREV_TAC `y = t3 / (t3 + t4) % u2 + t4 / (t3 + t4) % m:real^3`);
5993 (NEW_GOAL `(g:real^3->real) y <= g xx`);
5994 (FIRST_ASSUM MATCH_MP_TAC);
5995 (REWRITE_TAC[CONVEX_HULL_2; IN; IN_ELIM_THM]);
5996 (EXISTS_TAC `t3 / (t3 + t4)` THEN EXISTS_TAC `t4 / (t3 + t4)`);
5998 (MATCH_MP_TAC REAL_LE_DIV);
5999 (ASM_SIMP_TAC[REAL_LE_ADD]);
6000 (ASM_SIMP_TAC[REAL_LE_ADD; REAL_LE_DIV]);
6001 (REWRITE_TAC[REAL_ARITH `a / x + b / x = (a + b) / x`]);
6002 (MATCH_MP_TAC REAL_DIV_REFL);
6003 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
6004 (ASM_REWRITE_TAC[]);
6006 (ABBREV_TAC `w = t1 / (t1 + t3 + t4) % u0 + t3 / (t1 + t3 + t4) % u2 +
6007 t4 / (t1 + t3 + t4) % m:real^3`);
6008 (NEW_GOAL `(g:real^3->real) y = g w`);
6011 (REWRITE_WITH `y:real^3 - u0 =
6012 &1 / (t3 + t4) % (t3 % u2 + t4 % m - (t3 + t4) % u0)`);
6014 (REWRITE_TAC[VECTOR_ARITH
6015 `(t3 / (t3 + t4) % u2 + t4 / (t3 + t4) % u3) - u0 =
6016 &1 / (t3 + t4) % (t3 % u2 + t4 % u3 - (t3 + t4) % u0) <=>
6017 (t3 + t4) / (t3 + t4) % u0 = u0`]);
6018 (REWRITE_WITH `(t3 + t4) / (t3 + t4) = &1`);
6019 (MATCH_MP_TAC REAL_DIV_REFL);
6020 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
6022 (REWRITE_TAC[NORM_MUL; DOT_LMUL]);
6024 (REWRITE_WITH `w:real^3 - u0 =
6025 &1 / (t1 + t3 + t4) % (t3 % u2 + t4 % m - (t3 + t4) % u0)`);
6027 (REWRITE_TAC[VECTOR_ARITH
6028 `(t1 / (t1 + t3 + t4) % u0 +
6029 t3 / (t1 + t3 + t4) % u2 + t4 / (t1 + t3 + t4) % u3) - u0 =
6030 &1 / (t1 + t3 + t4) % (t3 % u2 + t4 % u3 - (t3 + t4) % u0) <=>
6031 (t1 + t3 + t4) / (t1 + t3 + t4) % u0 = u0`]);
6032 (REWRITE_WITH `(t1 + t3 + t4) / (t1 + t3 + t4) = &1`);
6033 (MATCH_MP_TAC REAL_DIV_REFL);
6034 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1`
6035 THEN REAL_ARITH_TAC);
6037 (REWRITE_TAC[NORM_MUL; DOT_LMUL]);
6038 (REWRITE_WITH `abs (&1 / (t3 + t4)) = &1 / (t3 + t4)`);
6039 (REWRITE_TAC[REAL_ABS_REFL]);
6040 (ASM_SIMP_TAC[REAL_LE_DIV;REAL_LE_ADD; REAL_ARITH `&0 <= &1`]);
6041 (REWRITE_WITH `abs (&1 / (t1 + t3 + t4)) = &1 / (t1 + t3 + t4)`);
6042 (REWRITE_TAC[REAL_ABS_REFL]);
6043 (MATCH_MP_TAC REAL_LE_DIV THEN REWRITE_TAC[REAL_ARITH `&0 <= &1`]);
6044 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1`
6045 THEN REAL_ARITH_TAC);
6046 (REWRITE_TAC[REAL_ARITH `(a * x) / ((a * y) * z) =
6047 (a * x) / (a * (y * z))`]);
6049 `a1 = norm (t3 % u2 + t4 % m - (t3 + t4) % u0) * norm (u1 - u0:real^3)`);
6050 (NEW_GOAL `~(a1 = &0)`);
6051 (EXPAND_TAC "a1" THEN ASM_REWRITE_TAC[REAL_ENTIRE; NORM_EQ_0;
6052 VECTOR_ARITH `(a - b = vec 0 <=> a = b)/\(a + b-c = vec 0 <=> a + b = c)`]);
6055 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
6056 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6057 (EXISTS_TAC `(X:real^3->bool)`);
6060 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; TRUNCATE_SIMPLEX_EXPLICIT_2;
6061 set_of_list; SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6062 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
6064 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
6066 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6067 (EXISTS_TAC `affine hull {u0, u1, u2, m:real^3}`);
6068 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
6069 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
6070 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
6071 (REWRITE_TAC[coplanar]);
6072 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN
6073 EXISTS_TAC `m:real^3`);
6074 (MATCH_MP_TAC (SET_RULE `u0 IN S /\ b SUBSET S ==> (u0 INSERT b) SUBSET S`));
6075 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
6076 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
6077 (EXISTS_TAC `&0` THEN EXISTS_TAC `t3 / (t3 + t4)`
6078 THEN EXISTS_TAC `t4 / (t3 + t4)`);
6080 (REWRITE_TAC[REAL_ARITH `&0 + t3 / (t3 + t4) + t4 / (t3 + t4) =
6081 (t3 + t4) / (t3 + t4)`]);
6082 (MATCH_MP_TAC REAL_DIV_REFL);
6083 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
6084 (ASM_REWRITE_TAC[VECTOR_ARITH
6085 `&0 % u1 + t3 / (t3 + t4) % u2 + t4 / (t3 + t4) % u3 =
6086 (&1 / (t3 + t4)) % (t3 % u2 + t4 % u3)`]);
6087 (REWRITE_TAC[VECTOR_MUL_ASSOC; REAL_ARITH `&1 / a * a = a / a`]);
6088 (REWRITE_WITH `(t3 + t4) / (t3 + t4) = &1`);
6089 (MATCH_MP_TAC REAL_DIV_REFL);
6090 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
6094 (NEW_GOAL `~(&1 / (t3 + t4) = &0)`);
6095 (NEW_GOAL `&0 < &1 / (t3 + t4)`);
6096 (MATCH_MP_TAC REAL_LT_DIV);
6097 (ASM_REWRITE_TAC[REAL_ARITH `&0 < &1`]);
6098 (UP_ASM_TAC THEN REAL_ARITH_TAC);
6101 `(&1 / (t3 + t4) * ((t3 % u2 + t4 % m - (t3 + t4) % u0) dot (u1 - u0))) /
6102 (&1 / (t3 + t4) * a1) =
6103 ((t3 % u2 + t4 % m - (t3 + t4) % u0) dot (u1 - u0:real^3)) / a1`);
6104 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[Trigonometry1.REAL_DIV_MUL2]);
6106 (NEW_GOAL `~(&1 / (t1 + t3 + t4) = &0)`);
6107 (NEW_GOAL `&0 < &1 / (t1 + t3 + t4)`);
6108 (MATCH_MP_TAC REAL_LT_DIV);
6109 (ASM_REWRITE_TAC[REAL_ARITH `&0 < &1`]);
6110 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN
6112 (UP_ASM_TAC THEN REAL_ARITH_TAC);
6115 `(&1 / (t1 + t3 + t4) * ((t3 % u2 + t4 % m - (t3 + t4) % u0) dot (u1 - u0))) /
6116 (&1 / (t1 + t3 + t4) * a1) =
6117 ((t3 % u2 + t4 % m - (t3 + t4) % u0) dot (u1 - u0:real^3)) / a1`);
6118 (UP_ASM_TAC THEN UNDISCH_TAC `~(a1 = &0)` THEN
6119 MESON_TAC[Trigonometry1.REAL_DIV_MUL2]);
6121 (NEW_GOAL `(g:real^3->real) x <= g w`);
6125 `((x - u0) dot (u1 - u0:real^3)) / (norm (x - u0) * norm (u1 - u0)) <=
6126 ((w - u0) dot (u1 - u0)) / (norm (w - u0) * norm (u1 - u0)) <=>
6127 ((x - u0) dot (u1 - u0)) * (norm (w - u0) * norm (u1 - u0)) <=
6128 ((w - u0) dot (u1 - u0)) * (norm (x - u0) * norm (u1 - u0))`);
6129 (MATCH_MP_TAC RAT_LEMMA4);
6131 (MATCH_MP_TAC REAL_LT_MUL);
6132 (ASM_REWRITE_TAC[NORM_POS_LT; VECTOR_ARITH `x - b = vec 0 <=> x = b`]);
6134 (UNDISCH_TAC `~NULLSET (X INTER D)`);
6137 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6138 (EXISTS_TAC `(X:real^3->bool)`);
6140 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
6141 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6142 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
6144 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
6145 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6146 (EXISTS_TAC `affine hull {u0, u1, u2, m:real^3}`);
6147 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
6148 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
6149 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
6150 (REWRITE_TAC[coplanar]);
6151 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u2:real^3` THEN
6152 EXISTS_TAC `m:real^3`);
6153 (ONCE_REWRITE_TAC[SET_RULE `{u0, u1, u2, u3} = {u1, u0, u2, u3}`]);
6154 (MATCH_MP_TAC (SET_RULE `u0 IN S /\ b SUBSET S ==> (u0 INSERT b) SUBSET S`));
6155 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
6156 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
6157 (EXISTS_TAC `(t2 + t3 + t4) / t2` THEN EXISTS_TAC `(--t3) / t2`
6158 THEN EXISTS_TAC `(--t4) / t2`);
6160 (REWRITE_TAC[REAL_ARITH
6161 `(t2 + t3 + t4) / t2 + --t3 / t2 + --t4 / t2 = t2 / t2`]);
6162 (MATCH_MP_TAC REAL_DIV_REFL);
6163 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
6164 (REWRITE_WITH `(t2 + t3 + t4) = &1 - t1`);
6165 (UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN REAL_ARITH_TAC);
6166 (NEW_GOAL `u0 - t1 % u0 - t3 % u2 - t4 % m:real^3 = t2 % u1`);
6167 (UP_ASM_TAC THEN VECTOR_ARITH_TAC);
6168 (ASM_REWRITE_TAC[VECTOR_ARITH
6169 `(&1 - t1) / t2 % u0 + --t3 / t2 % u2 + --t4 / t2 % u3 =
6170 (&1 / t2) % (u0 - t1 % u0 - t3 % u2 - t4 % u3)`]);
6171 (REWRITE_TAC[VECTOR_MUL_ASSOC; REAL_ARITH `&1 / a * a = a / a`]);
6172 (REWRITE_WITH `t2 / t2 = &1`);
6173 (MATCH_MP_TAC REAL_DIV_REFL);
6174 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
6178 (MATCH_MP_TAC REAL_LT_MUL);
6179 (ASM_REWRITE_TAC[NORM_POS_LT; VECTOR_ARITH `x - b = vec 0 <=> x = b`]);
6180 (EXPAND_TAC "w" THEN STRIP_TAC);
6181 (UNDISCH_TAC `~NULLSET (X INTER D)`);
6184 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6185 (EXISTS_TAC `(X:real^3->bool)`);
6187 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
6188 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6189 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
6191 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
6192 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6193 (EXISTS_TAC `affine hull {u0, u1, u2, m:real^3}`);
6194 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
6195 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
6196 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
6197 (REWRITE_TAC[coplanar]);
6198 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN
6199 EXISTS_TAC `m:real^3`);
6200 (MATCH_MP_TAC (SET_RULE `u0 IN S /\ b SUBSET S ==> (u0 INSERT b) SUBSET S`));
6201 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
6202 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
6204 (EXISTS_TAC `&0` THEN EXISTS_TAC `t3 / (t3 + t4)`
6205 THEN EXISTS_TAC `t4 / (t3 + t4)`);
6207 (REWRITE_TAC[REAL_ARITH `&0 + t3 / (t3 + t4) + t4 / (t3 + t4) =
6208 (t3 + t4) / (t3 + t4)`]);
6209 (MATCH_MP_TAC REAL_DIV_REFL);
6210 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
6211 (ASM_REWRITE_TAC[VECTOR_ARITH
6212 `&0 % u1 + t3 / (t3 + t4) % u2 + t4 / (t3 + t4) % u3 =
6213 (&1 / (t3 + t4)) % (t3 % u2 + t4 % u3)`]);
6214 (UP_ASM_TAC THEN REWRITE_TAC[VECTOR_ARITH
6215 `t1 / x % u0 + t3 / x % u2 + t4 / x % u3 =
6216 (&1 / x) % (t1 % u0 + t3 % u2 + t4 % u3)`]);
6217 (REWRITE_WITH `&1 / (t1 + t3 + t4) % (t1 % u0 + t3 % u2 + t4 % m) = u0 <=>
6218 t1 % u0 + t3 % u2 + t4 % m = (t1 + t3 + t4) % u0:real^3`);
6219 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
6220 (MATCH_MP_TAC Collect_geom.CHANGE_SIDE);
6221 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 +t3 + t4 = &1` THEN
6224 (REWRITE_TAC[VECTOR_ARITH `t1 % u0 + t3 % u2 + t4 % u3 = (t1 + t3 + t4) % u0
6225 <=> t3 % u2 + t4 % u3 = (t3 + t4) % u0`]);
6226 (STRIP_TAC THEN ASM_REWRITE_TAC[]);
6227 (REWRITE_TAC[VECTOR_MUL_ASSOC; REAL_ARITH `&1 / a * a = a / a`]);
6228 (REWRITE_WITH `(t3 + t4) / (t3 + t4) = &1`);
6229 (MATCH_MP_TAC REAL_DIV_REFL);
6230 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
6234 (REWRITE_WITH `x = t2 % u1 + (t1 + t3 + t4) % w:real^3`);
6235 (ASM_REWRITE_TAC[] THEN EXPAND_TAC "w");
6236 (REWRITE_TAC[VECTOR_ARITH
6237 `x % (t1 /x % u0 + t3 / x % u2 + t4 /x % u3) =
6238 (x / x) % (t1 % u0 + t3 % u2 + t4 % u3)`]);
6239 (REWRITE_WITH `(t1 + t3 + t4) / (t1 + t3 + t4) = &1`);
6240 (MATCH_MP_TAC REAL_DIV_REFL);
6241 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN
6244 (ABBREV_TAC `t = t1 + t3 + t4`);
6245 (REWRITE_WITH `(t2 % u1 + t % w) - u0:real^3 =
6246 (t2 % u1 + t % w) - (t1 + t2 + t3 + t4) % u0`);
6247 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
6248 (REWRITE_WITH `t1 + t2 + t3 + t4 = t2 + t:real`);
6249 (EXPAND_TAC "t" THEN REAL_ARITH_TAC);
6250 (REWRITE_TAC[VECTOR_ARITH
6251 `(t2 % u1 + t % w) - (t2 + t) % u0 = t2 % (u1 - u0) + t % (w - u0)`]);
6252 (ABBREV_TAC `x1 = u1 - u0:real^3`);
6253 (ABBREV_TAC `x2 = w - u0:real^3`);
6255 (REWRITE_WITH `(t2 % x1 + t % x2) dot x1 =
6256 t2 * norm x1 pow 2 + t * x2 dot (x1:real^3)`);
6257 (REWRITE_TAC[NORM_POW_2]);
6260 (NEW_GOAL `t2 * norm x1 pow 2 * norm x2 * norm x1 <=
6261 t2 * (x2 dot x1) * norm x1 * norm (x1:real^3)`);
6262 (REWRITE_TAC[REAL_POW_2; REAL_ARITH `t2 * (x1 * x1) * x2 * x1 <=
6263 t2 * x3 * x1 * x1 <=> &0 <= (x1 pow 2) * (--t2) * (x2 * x1 - x3)`]);
6264 (MATCH_MP_TAC REAL_LE_MUL);
6265 (ASM_SIMP_TAC[REAL_LE_MUL; NORM_POS_LE]);
6266 (MATCH_MP_TAC REAL_LE_MUL);
6267 (REWRITE_TAC[REAL_ARITH `&0 <= a - b <=> b <= a`]);
6269 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
6270 (REWRITE_TAC[NORM_CAUCHY_SCHWARZ]);
6273 `t2 * (x2 dot x1) * norm x1 * norm x1 + t * (x2 dot x1) * norm x2 * norm x1 <= (x2 dot x1) * norm (t2 % x1 + t % x2) * norm (x1:real^3)`);
6275 (REWRITE_TAC[REAL_ARITH `t2 * x3 * x1 * x1 + t * x3 * x2 * x1 <=
6276 x3 * x4 * x1 <=> &0 <= (x1 * x3) * (x4 - t2 * x1 - t * x2)`]);
6277 (MATCH_MP_TAC REAL_LE_MUL);
6279 (MATCH_MP_TAC REAL_LE_MUL);
6280 (REWRITE_TAC[NORM_POS_LE]);
6281 (ASM_CASES_TAC `x2 dot (x1:real^3) < &0`);
6283 (NEW_GOAL `(g:real^3->real) x <= &0`);
6285 (REWRITE_TAC[REAL_ARITH `a / b <= &0 <=> &0 <= (--a) / b`]);
6286 (MATCH_MP_TAC REAL_LE_DIV);
6287 (SIMP_TAC[NORM_POS_LE; REAL_LE_MUL]);
6289 (REWRITE_WITH `x = t2 % u1 + (t1 + t3 + t4) % w:real^3`);
6290 (ASM_REWRITE_TAC[] THEN EXPAND_TAC "w");
6291 (REWRITE_TAC[VECTOR_ARITH
6292 `x % (t1 /x % u0 + t3 / x % u2 + t4 /x % u3) =
6293 (x / x) % (t1 % u0 + t3 % u2 + t4 % u3)`]);
6295 (REWRITE_WITH `(t1 + t3 + t4) / (t1 + t3 + t4) = &1`);
6296 (MATCH_MP_TAC REAL_DIV_REFL);
6297 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN
6301 (REWRITE_TAC[REAL_ARITH `&0 <= --a <=> a <= &0`]);
6302 (REWRITE_WITH `(t2 % u1 + (t1 + t3 + t4) % w) - u0:real^3 =
6303 (t2 % u1 + (t1 + t3 + t4) % w) - (t1 + t2 + t3 + t4) % u0`);
6304 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
6305 (REWRITE_WITH `(t2 % u1 + (t1 + t3 + t4) % w) - (t1 + t2 + t3 + t4) % u0 =
6306 t2 % x1 + t % x2:real^3`);
6307 (EXPAND_TAC "x1" THEN EXPAND_TAC "x2" THEN EXPAND_TAC "t"
6308 THEN VECTOR_ARITH_TAC);
6309 (NEW_GOAL `t % x2 dot (x1:real^3) <= &0`);
6310 (REWRITE_TAC[DOT_LMUL; REAL_ARITH `a * b <= &0 <=> &0 <= a * (--b)`]);
6311 (MATCH_MP_TAC REAL_LE_MUL);
6313 (EXPAND_TAC "t" THEN UNDISCH_TAC `t2 < &0` THEN
6314 UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN REAL_ARITH_TAC);
6315 (UP_ASM_TAC THEN REAL_ARITH_TAC);
6316 (NEW_GOAL `t2 % x1 dot (x1:real^3) <= &0`);
6317 (REWRITE_TAC[DOT_LMUL; REAL_ARITH `a * b <= &0 <=> &0 <= (--a) * b`]);
6318 (MATCH_MP_TAC REAL_LE_MUL);
6320 (EXPAND_TAC "t" THEN UNDISCH_TAC `t2 < &0` THEN
6321 UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN REAL_ARITH_TAC);
6322 (REWRITE_TAC[DOT_POS_LE]);
6323 (REWRITE_TAC[DOT_LADD]);
6324 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
6325 (UP_ASM_TAC THEN UNDISCH_TAC `d < (g:real^3->real) x`);
6326 (EXPAND_TAC "d" THEN UNDISCH_TAC `&0 < c /\ c < &1`);
6328 (UP_ASM_TAC THEN MESON_TAC[]);
6329 (UP_ASM_TAC THEN REAL_ARITH_TAC);
6331 (REWRITE_TAC [REAL_ARITH `&0 <= a - b * d - c <=> c <= a + (--b) * d`]);
6332 (REWRITE_WITH `t * norm (x2:real^3) = abs t * norm x2`);
6333 (AP_THM_TAC THEN AP_TERM_TAC);
6334 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
6335 (REWRITE_TAC[REAL_ABS_REFL]);
6336 (EXPAND_TAC "t" THEN UNDISCH_TAC `t2 < &0` THEN
6337 UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN REAL_ARITH_TAC);
6338 (REWRITE_WITH `(--t2) * norm (x1:real^3) = abs (--t2) * norm x1`);
6339 (AP_THM_TAC THEN AP_TERM_TAC);
6340 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
6341 (REWRITE_TAC[REAL_ABS_REFL]);
6342 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
6343 (REWRITE_TAC[GSYM NORM_MUL]);
6345 `norm (t % x2:real^3) = norm ((t2 % x1 + t % x2) + (--t2 % x1))`);
6346 (AP_TERM_TAC THEN VECTOR_ARITH_TAC);
6347 (REWRITE_TAC[NORM_TRIANGLE]);
6348 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
6349 (UNDISCH_TAC `(g:real^3->real) y <= g xx`);
6350 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
6352 (NEW_GOAL `(g:real^3->real) xx <= d1`);
6353 (FIRST_ASSUM MATCH_MP_TAC);
6355 (EXPAND_TAC "g" THEN EXPAND_TAC "f3");
6356 (REWRITE_TAC[IN_ELIM_THM; IN]);
6357 (EXISTS_TAC `vl:(real^3)list`);
6358 (REWRITE_TAC[ASSUME `barV V 3 vl`; ASSUME `vl = [u0;u1;u2;u3:real^3]`;
6359 TRUNCATE_SIMPLEX_EXPLICIT_1]);
6361 (SIMP_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
6362 (REWRITE_WITH `mcell 3 V vl = mcell k V vl`);
6364 (REWRITE_TAC[GSYM (ASSUME `X = mcell k V vl`)]);
6367 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
6368 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6369 (EXISTS_TAC `X INTER (C:real^3->bool)`);
6371 (ASM_REWRITE_TAC[]);
6372 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
6373 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
6374 (MATCH_MP_TAC (SET_RULE
6375 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
6377 (MATCH_MP_TAC SUBSET_BALL);
6378 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
6379 (MATCH_MP_TAC RCONE_GT_SUBSET);
6380 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
6384 (SIMP_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
6385 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
6387 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
6389 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN EXPAND_TAC "d");
6393 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
6394 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6395 (EXISTS_TAC `(X:real^3->bool)`);
6397 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; TRUNCATE_SIMPLEX_EXPLICIT_2;
6398 set_of_list; SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6399 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
6401 (UP_ASM_TAC THEN MESON_TAC[]);
6403 (* ========================================================================= *)
6405 (ABBREV_TAC `m = mxi V vl`);
6406 (NEW_GOAL `~coplanar {u0, u1, u2, m:real^3}`);
6408 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
6409 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6410 (EXISTS_TAC `X:real^3->bool`);
6412 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; set_of_list]);
6414 (REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
6415 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6416 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
6418 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
6420 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6421 (EXISTS_TAC `affine hull {u0, u1, u2, m:real^3}`);
6422 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
6423 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
6424 (ASM_REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
6425 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
6428 (ASM_CASES_TAC `azim u0 u1 u2 (m:real^3) < pi`);
6429 (REWRITE_WITH `vol (L INTER D) = vol (D INTER wedge u0 u1 u2 m)`);
6430 (ASM_SIMP_TAC[WEDGE_LUNE]);
6431 (REWRITE_WITH `L INTER conic_cap (u0:real^3) u1 r d =
6432 conic_cap u0 u1 r d INTER L`);
6434 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_SYMDIFF);
6435 (REWRITE_WITH `conic_cap (u0:real^3) u1 r d INTER
6436 aff_gt {u0, u1} {u2, m} DIFF conic_cap u0 u1 r d INTER L = {}`);
6438 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> C INTER A DIFF C INTER B = {}`));
6439 (REWRITE_TAC[AFF_GT_SUBSET_AFF_GE]);
6440 (REWRITE_TAC[SET_RULE `A UNION {} = A`]);
6443 (REWRITE_WITH `aff_ge {u0, u1:real^3} {u2, m} =
6444 aff_gt {u0, u1} {u2, m} UNION
6445 UNIONS {aff_ge {u0, u1} ({u2, m} DELETE a) | a | a IN {u2, m}}`);
6446 (MATCH_MP_TAC AFF_GE_AFF_GT_DECOMP);
6447 (REWRITE_TAC[Geomdetail.FINITE6]);
6448 (REWRITE_TAC[DISJOINT]);
6450 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
6452 (UNDISCH_TAC `~coplanar {u0, u1, u2, m:real^3}`);
6453 (REWRITE_WITH `{u0, u1, u2, m} = {u0, u1, m:real^3}`);
6454 (UP_ASM_TAC THEN SET_TAC[]);
6455 (REWRITE_TAC[COPLANAR_3]);
6456 (UP_ASM_TAC THEN MESON_TAC[]);
6458 (ASM_CASES_TAC `m IN {u0, u1:real^3}`);
6460 (UNDISCH_TAC `~coplanar {u0, u1, u2, m:real^3}`);
6461 (REWRITE_WITH `{u0, u1, u2, m} = {u0, u1, u2:real^3}`);
6462 (UP_ASM_TAC THEN SET_TAC[]);
6463 (REWRITE_TAC[COPLANAR_3]);
6464 (UP_ASM_TAC THEN MESON_TAC[]);
6465 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
6467 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6469 `UNIONS {aff_ge {u0, u1:real^3} ({u2, m} DELETE a) | a | a IN {u2, m}}`);
6471 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6473 `aff_ge {u0, u1:real^3} {u2} UNION aff_ge {u0, u1:real^3} {m}`);
6475 (MATCH_MP_TAC NEGLIGIBLE_UNION);
6478 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6479 (EXISTS_TAC `affine hull {u0, u1:real^3, u2}`);
6481 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
6482 (REWRITE_WITH `{u0,u1,u2:real^3} = {u0,u1} UNION {u2}`);
6484 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
6485 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6486 (EXISTS_TAC `affine hull {u0, u1:real^3, m}`);
6488 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
6489 (REWRITE_WITH `{u0,u1,m:real^3} = {u0,u1} UNION {m}`);
6491 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
6492 (REWRITE_TAC[SET_RULE
6493 `UNIONS {aff_ge {u0, u1} ({m, s3} DELETE a) | a | a IN {m, s3}} =
6494 aff_ge {u0, u1} ({m, s3} DELETE s3)
6495 UNION aff_ge {u0, u1} ({m, s3} DELETE m)`]);
6496 (MATCH_MP_TAC (SET_RULE
6497 `A SUBSET B /\ C SUBSET D ==> A UNION C SUBSET B UNION D`));
6499 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
6503 (REWRITE_TAC[DISJOINT]);
6504 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
6506 (UNDISCH_TAC `~coplanar {u0, u1, u2, m:real^3}`);
6507 (REWRITE_WITH `{u0, u1, u2, m} = {u0, u1, m:real^3}`);
6508 (UP_ASM_TAC THEN SET_TAC[]);
6509 (REWRITE_TAC[COPLANAR_3]);
6510 (UP_ASM_TAC THEN MESON_TAC[]);
6511 (UP_ASM_TAC THEN SET_TAC[]);
6513 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
6516 (REWRITE_TAC[DISJOINT]);
6517 (ASM_CASES_TAC `m IN {u0, u1:real^3}`);
6519 (UNDISCH_TAC `~coplanar {u0, u1, u2, m:real^3}`);
6520 (REWRITE_WITH `{u0, u1, u2, m} = {u0, u1, u2:real^3}`);
6521 (UP_ASM_TAC THEN SET_TAC[]);
6522 (REWRITE_TAC[COPLANAR_3]);
6523 (UP_ASM_TAC THEN MESON_TAC[]);
6524 (UP_ASM_TAC THEN SET_TAC[]);
6528 (* begin the computation *)
6530 (REWRITE_TAC[ASSUME `D = conic_cap (u0:real^3) u1 r d`]);
6531 (REWRITE_WITH `vol (conic_cap u0 u1 r d INTER wedge u0 u1 u2 m) =
6532 (if &1 < d \/ r < &0
6534 else azim u0 u1 u2 m / &3 * (&1 - max d (-- &1)) * r pow 3)`);
6535 (NEW_GOAL `~collinear {u0:real^3, u1, u2} /\ ~collinear {u0, u1, m}`);
6537 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
6538 (EXISTS_TAC `m:real^3`);
6539 (ASM_REWRITE_TAC[]);
6540 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
6541 (EXISTS_TAC `u2:real^3`);
6542 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
6543 (ASM_REWRITE_TAC[]);
6544 (ASM_SIMP_TAC[VOLUME_CONIC_CAP_WEDGE]);
6548 (UNDISCH_TAC `&0 < r` THEN UNDISCH_TAC `d < &1` THEN
6549 UP_ASM_TAC THEN REAL_ARITH_TAC);
6550 (UP_ASM_TAC THEN MESON_TAC[]);
6552 (REWRITE_WITH `azim (u0:real^3) u1 u2 m = dihV u0 u1 u2 m`);
6553 (MATCH_MP_TAC AZIM_DIHV_SAME);
6554 (ASM_REWRITE_TAC[]);
6556 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
6557 (EXISTS_TAC `m:real^3`);
6558 (ASM_REWRITE_TAC[]);
6559 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
6560 (EXISTS_TAC `u2:real^3`);
6561 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
6562 (ASM_REWRITE_TAC[]);
6564 (REWRITE_TAC[dihX]);
6567 (UNDISCH_TAC `~NULLSET (X INTER D)`);
6569 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6570 (EXISTS_TAC `X:real^3->bool`);
6571 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
6572 (UP_ASM_TAC THEN MESON_TAC[]);
6576 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
6577 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
6580 initial_sublist [u0; u1] ul)`);
6582 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
6583 (MATCH_MP_TAC SELECT_AX);
6584 (EXISTS_TAC `(3, vl:(real^3)list)`);
6586 (REWRITE_TAC[BETA_THM]);
6587 (REWRITE_TAC[IN; ARITH_RULE `3 <= 4`] THEN ASM_REWRITE_TAC[]);
6588 (REWRITE_WITH `initial_sublist [u0;u1:real^3] [u0; u1; u2; u3] /\
6589 LENGTH [u0;u1] = 1 + 1`);
6590 (REWRITE_TAC[GSYM Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
6591 (REWRITE_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
6592 (ASM_REWRITE_TAC[]);
6593 (REWRITE_TAC[LENGTH] THEN ARITH_TAC);
6594 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
6595 (EXPAND_TAC "P" THEN REWRITE_TAC[IN] THEN REPEAT STRIP_TAC);
6597 (NEW_GOAL `k' = 3 /\ mcell k' V ul = mcell 3 V vl`);
6598 (MATCH_MP_TAC Ajripqn.AJRIPQN);
6599 (ASM_REWRITE_TAC[]);
6600 (REWRITE_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
6601 (REWRITE_WITH `mcell k' V ul INTER mcell 3 V vl = X`);
6602 (REWRITE_WITH `mcell 3 V vl = X`);
6604 (SET_TAC[ASSUME `X = mcell k' V ul`]);
6607 (UNDISCH_TAC `k' <= 4` THEN REWRITE_TAC[ARITH_RULE
6608 `a <= 4 <=> a = 0 \/a = 1 \/ a = 2 \/ a = 3 \/ a = 4`] THEN SET_TAC[]);
6610 (UP_ASM_TAC THEN UNDISCH_TAC `~NULLSET X` THEN MESON_TAC[]);
6614 (UP_ASM_TAC THEN UP_ASM_TAC THEN ARITH_TAC);
6615 (UP_ASM_TAC THEN MESON_TAC[]);
6618 (REWRITE_TAC[dihu3]);
6620 (REWRITE_WITH `dihV (EL 0 ul) (EL 1 ul) (EL 2 ul) (mxi V ul) =
6621 dihV u0 u1 u2 (m:real^3)`);
6623 (NEW_GOAL `truncate_simplex 1 ul = [u0;u1:real^3] /\ 1 + 1 <= LENGTH ul`);
6624 (REWRITE_TAC[Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
6625 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
6627 (NEW_GOAL `EL 0 (ul:(real^3)list) = EL 0 (truncate_simplex 1 ul)`);
6628 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
6629 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
6630 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
6631 CARD (set_of_list ul) = 3 + 1`);
6632 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
6633 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
6636 (NEW_GOAL `EL 1 (ul:(real^3)list) = EL 1 (truncate_simplex 1 ul)`);
6637 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
6638 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
6639 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
6640 CARD (set_of_list ul) = 3 + 1`);
6641 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
6642 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
6645 (NEW_GOAL `{EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul} = {u0, u1,u2,m:real^3}`);
6647 {EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul} = {u0, u1,u2,m:real^3} <=>
6648 convex hull {EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul} =
6649 convex hull {u0, u1,u2,m:real^3}`);
6650 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
6651 (MATCH_MP_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ);
6654 (UNDISCH_TAC `~NULLSET X`);
6656 (SIMP_TAC[MCELL_EXPLICIT; mcell3; ASSUME `X = mcell k' V ul`; ASSUME `k' = 3`]);
6658 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
6659 (MATCH_MP_TAC BARV_3_EXPLICIT);
6660 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
6661 (UP_ASM_TAC THEN STRIP_TAC);
6662 (ASM_REWRITE_TAC[set_of_list; TRUNCATE_SIMPLEX_EXPLICIT_2;
6663 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6664 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6665 (EXISTS_TAC `affine hull {v0, v1, v2, mxi V [v0; v1; v2; v3]}`);
6666 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
6667 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
6668 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
6669 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
6670 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
6671 (UNDISCH_TAC `affine_dependent {EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul}`);
6672 (REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`;
6673 ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
6675 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
6677 (UNDISCH_TAC `~NULLSET X`);
6679 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell3; set_of_list;
6680 TRUNCATE_SIMPLEX_EXPLICIT_2; SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6682 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6683 (EXISTS_TAC `affine hull {u0, u1, u2, mxi V [u0; u1; u2; u3]}`);
6684 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
6685 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
6686 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
6687 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
6688 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
6689 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
6691 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
6692 (ASM_REWRITE_TAC[]);
6694 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
6696 (REWRITE_WITH `convex hull {u0, u1, u2, m:real^3} = X`);
6697 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; set_of_list]);
6699 (REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
6700 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6701 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
6703 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
6706 (UNDISCH_TAC `~NULLSET X`);
6708 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; set_of_list]);
6709 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
6710 (UP_ASM_TAC THEN MESON_TAC[]);
6712 (SIMP_TAC[MCELL_EXPLICIT; mcell3; ASSUME `X = mcell k' V ul`; ASSUME `k' = 3`]);
6714 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
6715 (MATCH_MP_TAC BARV_3_EXPLICIT);
6716 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
6717 (UP_ASM_TAC THEN STRIP_TAC);
6718 (REWRITE_TAC[set_of_list; ASSUME `ul = [v0; v1; v2; v3:real^3]`;
6719 TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
6720 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6721 (REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
6723 (UNDISCH_TAC `~NULLSET X`);
6725 (SIMP_TAC[MCELL_EXPLICIT; mcell3; ASSUME `X = mcell k' V ul`; ASSUME `k' = 3`]);
6726 (ASM_REWRITE_TAC[]);
6727 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
6728 (UP_ASM_TAC THEN MESON_TAC[]);
6730 (UP_ASM_TAC THEN ASM_REWRITE_TAC[EL; HD; TL; ARITH_RULE `1 = SUC 0`]);
6732 (NEW_GOAL `mxi V ul = m`);
6734 (MATCH_MP_TAC MCELL_ID_MXI);
6735 (EXISTS_TAC `k':num` THEN EXISTS_TAC `k:num`);
6736 (ASM_REWRITE_TAC[SET_RULE `3 IN {2, 3}`]);
6737 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
6738 (ASM_REWRITE_TAC[]);
6739 (ASM_REWRITE_TAC[HD]);
6740 (REWRITE_WITH `HD (ul) = (HD (truncate_simplex 1 ul)):real^3`);
6741 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
6742 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
6743 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
6744 CARD (set_of_list ul) = 3 + 1`);
6745 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
6746 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
6748 (ASM_REWRITE_TAC[HD]);
6749 (ASM_REWRITE_TAC[]);
6752 (NEW_GOAL `EL 2 ul = u2:real^3`);
6753 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
6755 (NEW_GOAL `{u0, u1, EL 2 ul, m} = {u0, u1, m:real^3}`);
6756 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
6757 (UNDISCH_TAC `~coplanar {u0,u1,u2,m:real^3}` THEN REWRITE_TAC[
6758 GSYM (ASSUME `{u0, u1, EL 2 ul, m} = {u0, u1, u2, m:real^3}`);
6759 ASSUME `{u0, u1, EL 2 ul, m} = {u0, u1, m:real^3}`; COPLANAR_3]);
6760 (ASM_REWRITE_TAC[]);
6762 (REWRITE_TAC[REAL_ARITH `a / b * c * d pow 3 = (c/ b * d pow 3) * a`]);
6763 (REWRITE_TAC[REAL_ARITH `a * b / (&2 * c) = (a / (&2 * c)) * b`]);
6764 (AP_THM_TAC THEN AP_TERM_TAC);
6767 `measurable (conic_cap u0 u1 r d) /\
6768 vol (conic_cap u0 u1 r d) =
6769 (if u1 = u0 \/ &1 <= d \/ r < &0
6771 else &2 / &3 * pi * (&1 - d) * r pow 3)`);
6772 (MATCH_MP_TAC VOLUME_CONIC_CAP);
6774 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
6777 (UP_ASM_TAC THEN STRIP_TAC);
6778 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1:real^3)` THEN MESON_TAC[]);
6779 (UNDISCH_TAC `d < &1` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
6780 (UNDISCH_TAC `&0 < r` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
6781 (UP_ASM_TAC THEN MESON_TAC[]);
6782 (REWRITE_TAC[ARITH_RULE `SUC 0 = 1`]);
6784 (REWRITE_WITH `max d (--(&1)) = d`);
6785 (MATCH_MP_TAC (REAL_ARITH `&0 < d /\ --(&1) < &0 ==> max d (--(&1)) = d`));
6786 (REWRITE_TAC[REAL_NEG_LT0]);
6789 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
6793 (&2 / &3 * pi * (&1 - d) * r pow 3) / (&2 * pi) = (&1 - d) / &3 * r pow 3 *
6794 ((&2 * pi) / (&2 * pi))`);
6796 (REWRITE_WITH `(&2 * pi) / (&2 * pi) = &1`);
6797 (MATCH_MP_TAC REAL_DIV_REFL);
6798 (REWRITE_TAC[REAL_ENTIRE; PI_NZ; REAL_ARITH `~(&2 = &0)`]);
6801 (UP_ASM_TAC THEN UNDISCH_TAC `k' = 3 /\ mcell k' V ul = mcell 3 V vl`
6803 (UP_ASM_TAC THEN MESON_TAC[]);
6805 (* ========================================================================= *)
6807 (ASM_CASES_TAC `azim u0 u1 m (u2:real^3) < pi`);
6808 (UNDISCH_TAC `~coplanar {u0, u1, u2, m:real^3}`);
6809 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
6811 (REWRITE_WITH `vol (L INTER D) = vol (D INTER wedge u0 u1 m u2)`);
6812 (ASM_SIMP_TAC[WEDGE_LUNE]);
6813 (REWRITE_WITH `L INTER conic_cap (u0:real^3) u1 r d =
6814 conic_cap u0 u1 r d INTER L`);
6816 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_SYMDIFF);
6818 (REWRITE_WITH `conic_cap (u0:real^3) u1 r d INTER
6819 aff_gt {u0, u1} {m, u2} DIFF conic_cap u0 u1 r d INTER L = {}`);
6821 (REWRITE_TAC[SET_RULE `{a,b} = {b, a}`]);
6822 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> C INTER A DIFF C INTER B = {}`));
6823 (REWRITE_TAC[AFF_GT_SUBSET_AFF_GE]);
6824 (REWRITE_TAC[SET_RULE `A UNION {} = A`]);
6826 (REWRITE_TAC[SET_RULE `{a,b} = {b, a}`]);
6828 (REWRITE_WITH `aff_ge {u0, u1:real^3} {m, u2} =
6829 aff_gt {u0, u1} {m, u2} UNION
6830 UNIONS {aff_ge {u0, u1} ({m, u2} DELETE a) | a | a IN {m, u2}}`);
6831 (MATCH_MP_TAC AFF_GE_AFF_GT_DECOMP);
6832 (REWRITE_TAC[Geomdetail.FINITE6]);
6833 (REWRITE_TAC[DISJOINT]);
6835 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
6837 (UNDISCH_TAC `~coplanar {u0, u1, m, u2:real^3}`);
6838 (REWRITE_WITH `{u0, u1, m, u2} = {u0, u1, m:real^3}`);
6839 (UP_ASM_TAC THEN SET_TAC[]);
6840 (REWRITE_TAC[COPLANAR_3]);
6841 (UP_ASM_TAC THEN MESON_TAC[]);
6843 (ASM_CASES_TAC `m IN {u0, u1:real^3}`);
6845 (UNDISCH_TAC `~coplanar {u0, u1, m, u2:real^3}`);
6846 (REWRITE_WITH `{u0, u1, m, u2} = {u0, u1, u2:real^3}`);
6847 (UP_ASM_TAC THEN SET_TAC[]);
6848 (REWRITE_TAC[COPLANAR_3]);
6849 (UP_ASM_TAC THEN MESON_TAC[]);
6850 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
6852 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6854 `UNIONS {aff_ge {u0, u1:real^3} ({m, u2} DELETE a) | a | a IN {m, u2}}`);
6856 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6858 `aff_ge {u0, u1:real^3} {u2} UNION aff_ge {u0, u1:real^3} {m}`);
6860 (MATCH_MP_TAC NEGLIGIBLE_UNION);
6863 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6864 (EXISTS_TAC `affine hull {u0, u1:real^3, u2}`);
6866 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
6867 (REWRITE_WITH `{u0,u1,u2:real^3} = {u0,u1} UNION {u2}`);
6869 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
6870 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6871 (EXISTS_TAC `affine hull {u0, u1:real^3, m}`);
6873 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
6874 (REWRITE_WITH `{u0,u1,m:real^3} = {u0,u1} UNION {m}`);
6876 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
6877 (REWRITE_TAC[SET_RULE
6878 `UNIONS {aff_ge {u0, u1} ({m, s3} DELETE a) | a | a IN {m, s3}} =
6879 aff_ge {u0, u1} ({m, s3} DELETE s3)
6880 UNION aff_ge {u0, u1} ({m, s3} DELETE m)`]);
6881 (MATCH_MP_TAC (SET_RULE
6882 `A SUBSET D /\ C SUBSET B ==> A UNION C SUBSET B UNION D`));
6884 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
6888 (REWRITE_TAC[DISJOINT]);
6889 (ASM_CASES_TAC `m IN {u0, u1:real^3}`);
6891 (UNDISCH_TAC `~coplanar {u0, u1, m, u2:real^3}`);
6892 (REWRITE_WITH `{u0, u1, m, u2} = {u0, u1, u2:real^3}`);
6893 (UP_ASM_TAC THEN SET_TAC[]);
6894 (REWRITE_TAC[COPLANAR_3]);
6895 (UP_ASM_TAC THEN MESON_TAC[]);
6896 (UP_ASM_TAC THEN SET_TAC[]);
6898 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
6901 (REWRITE_TAC[DISJOINT]);
6902 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
6904 (UNDISCH_TAC `~coplanar {u0, u1, m, u2:real^3}`);
6905 (REWRITE_WITH `{u0, u1, m, u2} = {u0, u1, m:real^3}`);
6906 (UP_ASM_TAC THEN SET_TAC[]);
6907 (REWRITE_TAC[COPLANAR_3]);
6908 (UP_ASM_TAC THEN MESON_TAC[]);
6909 (UP_ASM_TAC THEN SET_TAC[]);
6913 (REWRITE_TAC[ASSUME `D = conic_cap (u0:real^3) u1 r d`]);
6914 (REWRITE_WITH `vol (conic_cap u0 u1 r d INTER wedge u0 u1 m u2) =
6915 (if &1 < d \/ r < &0
6917 else azim u0 u1 m u2 / &3 * (&1 - max d (-- &1)) * r pow 3)`);
6918 (NEW_GOAL `~collinear {u0:real^3, u1, u2} /\ ~collinear {u0, u1, m}`);
6920 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
6921 (EXISTS_TAC `m:real^3`);
6922 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
6923 (ASM_REWRITE_TAC[]);
6924 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
6925 (EXISTS_TAC `u2:real^3`);
6926 (ASM_REWRITE_TAC[]);
6928 (ASM_SIMP_TAC[VOLUME_CONIC_CAP_WEDGE]);
6932 (UNDISCH_TAC `&0 < r` THEN UNDISCH_TAC `d < &1` THEN
6933 UP_ASM_TAC THEN REAL_ARITH_TAC);
6934 (UP_ASM_TAC THEN MESON_TAC[]);
6936 (REWRITE_WITH `azim (u0:real^3) u1 m u2 = dihV u0 u1 m u2`);
6937 (MATCH_MP_TAC AZIM_DIHV_SAME);
6938 (ASM_REWRITE_TAC[]);
6941 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
6942 (EXISTS_TAC `u2:real^3`);
6943 (ASM_REWRITE_TAC[]);
6944 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
6945 (EXISTS_TAC `m:real^3`);
6946 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
6947 (ASM_REWRITE_TAC[]);
6949 (REWRITE_TAC[dihX]);
6952 (UNDISCH_TAC `~NULLSET (X INTER D)`);
6954 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6955 (EXISTS_TAC `X:real^3->bool`);
6956 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
6957 (UP_ASM_TAC THEN MESON_TAC[]);
6961 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
6962 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
6965 initial_sublist [u0; u1] ul)`);
6967 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
6968 (MATCH_MP_TAC SELECT_AX);
6969 (EXISTS_TAC `(3, vl:(real^3)list)`);
6971 (REWRITE_TAC[BETA_THM]);
6972 (REWRITE_TAC[IN; ARITH_RULE `3 <= 4`] THEN ASM_REWRITE_TAC[]);
6974 (REWRITE_WITH `initial_sublist [u0;u1:real^3] [u0; u1; u2; u3] /\
6975 LENGTH [u0;u1] = 1 + 1`);
6976 (REWRITE_TAC[GSYM Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
6977 (REWRITE_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
6978 (ASM_REWRITE_TAC[]);
6979 (REWRITE_TAC[LENGTH] THEN ARITH_TAC);
6980 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
6981 (EXPAND_TAC "P" THEN REWRITE_TAC[IN] THEN REPEAT STRIP_TAC);
6983 (NEW_GOAL `k' = 3 /\ mcell k' V ul = mcell 3 V vl`);
6984 (MATCH_MP_TAC Ajripqn.AJRIPQN);
6985 (ASM_REWRITE_TAC[]);
6986 (REWRITE_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
6987 (REWRITE_WITH `mcell k' V ul INTER mcell 3 V vl = X`);
6988 (REWRITE_WITH `mcell 3 V vl = X`);
6990 (SET_TAC[ASSUME `X = mcell k' V ul`]);
6993 (UNDISCH_TAC `k' <= 4` THEN REWRITE_TAC[ARITH_RULE
6994 `a <= 4 <=> a = 0 \/a = 1 \/ a = 2 \/ a = 3 \/ a = 4`] THEN SET_TAC[]);
6996 (UP_ASM_TAC THEN UNDISCH_TAC `~NULLSET X` THEN MESON_TAC[]);
7000 (UP_ASM_TAC THEN UP_ASM_TAC THEN ARITH_TAC);
7001 (UP_ASM_TAC THEN MESON_TAC[]);
7004 (REWRITE_TAC[dihu3]);
7006 (REWRITE_WITH `dihV (EL 0 ul) (EL 1 ul) (EL 2 ul) (mxi V ul) =
7007 dihV u0 u1 u2 (m:real^3)`);
7009 (NEW_GOAL `truncate_simplex 1 ul = [u0;u1:real^3] /\ 1 + 1 <= LENGTH ul`);
7010 (REWRITE_TAC[Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
7011 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
7013 (NEW_GOAL `EL 0 (ul:(real^3)list) = EL 0 (truncate_simplex 1 ul)`);
7014 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
7015 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
7016 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
7017 CARD (set_of_list ul) = 3 + 1`);
7018 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
7019 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7022 (NEW_GOAL `EL 1 (ul:(real^3)list) = EL 1 (truncate_simplex 1 ul)`);
7023 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
7024 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
7025 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
7026 CARD (set_of_list ul) = 3 + 1`);
7027 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
7028 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7031 (NEW_GOAL `{EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul} = {u0, u1,u2,m:real^3}`);
7033 {EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul} = {u0, u1,u2,m:real^3} <=>
7034 convex hull {EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul} =
7035 convex hull {u0, u1,u2,m:real^3}`);
7036 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
7037 (MATCH_MP_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ);
7040 (UNDISCH_TAC `~NULLSET X`);
7042 (SIMP_TAC[MCELL_EXPLICIT; mcell3; ASSUME `X = mcell k' V ul`; ASSUME `k' = 3`]);
7044 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
7045 (MATCH_MP_TAC BARV_3_EXPLICIT);
7046 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7047 (UP_ASM_TAC THEN STRIP_TAC);
7048 (ASM_REWRITE_TAC[set_of_list; TRUNCATE_SIMPLEX_EXPLICIT_2;
7049 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
7050 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
7051 (EXISTS_TAC `affine hull {v0, v1, v2, mxi V [v0; v1; v2; v3]}`);
7052 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
7053 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
7054 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
7055 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
7056 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
7057 (UNDISCH_TAC `affine_dependent {EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul}`);
7058 (REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`;
7059 ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
7061 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
7063 (UNDISCH_TAC `~NULLSET X`);
7065 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell3; set_of_list;
7066 TRUNCATE_SIMPLEX_EXPLICIT_2; SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
7068 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
7069 (EXISTS_TAC `affine hull {u0, u1, u2, mxi V [u0; u1; u2; u3]}`);
7070 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
7071 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
7072 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
7073 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
7074 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
7075 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
7077 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
7078 (ASM_REWRITE_TAC[]);
7080 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
7082 (REWRITE_WITH `convex hull {u0, u1, u2, m:real^3} = X`);
7083 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; set_of_list]);
7085 (REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
7086 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
7087 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
7089 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
7092 (UNDISCH_TAC `~NULLSET X`);
7094 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; set_of_list]);
7095 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
7096 (UP_ASM_TAC THEN MESON_TAC[]);
7098 (SIMP_TAC[MCELL_EXPLICIT; mcell3; ASSUME `X = mcell k' V ul`; ASSUME `k' = 3`]);
7100 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
7101 (MATCH_MP_TAC BARV_3_EXPLICIT);
7102 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7103 (UP_ASM_TAC THEN STRIP_TAC);
7104 (REWRITE_TAC[set_of_list; ASSUME `ul = [v0; v1; v2; v3:real^3]`;
7105 TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
7106 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
7107 (REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
7109 (UNDISCH_TAC `~NULLSET X`);
7111 (SIMP_TAC[MCELL_EXPLICIT; mcell3; ASSUME `X = mcell k' V ul`; ASSUME `k' = 3`]);
7112 (ASM_REWRITE_TAC[]);
7113 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
7114 (UP_ASM_TAC THEN MESON_TAC[]);
7116 (UP_ASM_TAC THEN ASM_REWRITE_TAC[EL; HD; TL; ARITH_RULE `1 = SUC 0`]);
7118 (NEW_GOAL `mxi V ul = m`);
7120 (MATCH_MP_TAC MCELL_ID_MXI);
7121 (EXISTS_TAC `k':num` THEN EXISTS_TAC `k:num`);
7122 (ASM_REWRITE_TAC[SET_RULE `3 IN {2, 3}`]);
7123 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
7124 (ASM_REWRITE_TAC[]);
7125 (ASM_REWRITE_TAC[HD]);
7126 (REWRITE_WITH `HD (ul) = (HD (truncate_simplex 1 ul)):real^3`);
7127 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
7128 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
7129 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
7130 CARD (set_of_list ul) = 3 + 1`);
7131 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
7132 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7134 (ASM_REWRITE_TAC[HD]);
7135 (ASM_REWRITE_TAC[]);
7138 (NEW_GOAL `EL 2 ul = u2:real^3`);
7139 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
7141 (NEW_GOAL `{u0, u1, EL 2 ul, m} = {u0, u1, m:real^3}`);
7142 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7143 (UNDISCH_TAC `~coplanar {u0,u1,m,u2:real^3}`);
7145 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
7146 (REWRITE_TAC[GSYM (ASSUME `{u0, u1, EL 2 ul, m} = {u0, u1, u2, m:real^3}`);
7147 ASSUME `{u0, u1, EL 2 ul, m} = {u0, u1, m:real^3}`; COPLANAR_3]);
7148 (ASM_REWRITE_TAC[]);
7149 (REWRITE_TAC[DIHV_SYM_2]);
7151 (REWRITE_TAC[REAL_ARITH `a / b * c * d pow 3 = (c/ b * d pow 3) * a`]);
7152 (REWRITE_TAC[REAL_ARITH `a * b / (&2 * c) = (a / (&2 * c)) * b`]);
7153 (AP_THM_TAC THEN AP_TERM_TAC);
7156 `measurable (conic_cap u0 u1 r d) /\
7157 vol (conic_cap u0 u1 r d) =
7158 (if u1 = u0 \/ &1 <= d \/ r < &0
7160 else &2 / &3 * pi * (&1 - d) * r pow 3)`);
7161 (MATCH_MP_TAC VOLUME_CONIC_CAP);
7163 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
7166 (UP_ASM_TAC THEN STRIP_TAC);
7167 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1:real^3)` THEN MESON_TAC[]);
7168 (UNDISCH_TAC `d < &1` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7169 (UNDISCH_TAC `&0 < r` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7170 (UP_ASM_TAC THEN MESON_TAC[]);
7171 (REWRITE_TAC[ARITH_RULE `SUC 0 = 1`]);
7173 (REWRITE_WITH `max d (--(&1)) = d`);
7174 (MATCH_MP_TAC (REAL_ARITH `&0 < d /\ --(&1) < &0 ==> max d (--(&1)) = d`));
7175 (REWRITE_TAC[REAL_NEG_LT0]);
7178 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
7182 (&2 / &3 * pi * (&1 - d) * r pow 3) / (&2 * pi) = (&1 - d) / &3 * r pow 3 *
7183 ((&2 * pi) / (&2 * pi))`);
7185 (REWRITE_WITH `(&2 * pi) / (&2 * pi) = &1`);
7186 (MATCH_MP_TAC REAL_DIV_REFL);
7187 (REWRITE_TAC[REAL_ENTIRE; PI_NZ; REAL_ARITH `~(&2 = &0)`]);
7190 (UP_ASM_TAC THEN UNDISCH_TAC `k' = 3 /\ mcell k' V ul = mcell 3 V vl`
7192 (UP_ASM_TAC THEN MESON_TAC[]);
7194 (* ========================================================================= *)
7197 (NEW_GOAL `azim (u0:real^3) u1 m u2 =
7198 (if azim u0 u1 u2 m = &0 then &0 else &2 * pi - azim u0 u1 u2 m)`);
7199 (MATCH_MP_TAC AZIM_COMPL);
7202 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
7203 (EXISTS_TAC `m:real^3`);
7204 (ASM_REWRITE_TAC[]);
7205 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
7206 (EXISTS_TAC `u2:real^3`);
7207 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b, d, c}`]);
7208 (ASM_REWRITE_TAC[]);
7209 (UP_ASM_TAC THEN COND_CASES_TAC);
7211 (NEW_GOAL `(&0 < pi)`);
7212 (REWRITE_TAC[PI_POS]);
7213 (UNDISCH_TAC `~(azim (u0:real^3) u1 u2 m < pi)`);
7214 (ASM_REWRITE_TAC[]);
7215 (UP_ASM_TAC THEN MESON_TAC[]);
7218 (NEW_GOAL `azim (u0:real^3) u1 u2 m = pi`);
7219 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7220 (UNDISCH_TAC `~coplanar {u0, u1, u2, m:real^3}`);
7221 (REWRITE_TAC[] THEN MATCH_MP_TAC AZIM_EQ_0_PI_IMP_COPLANAR);
7222 (ASM_REWRITE_TAC[]);
7223 (UP_ASM_TAC THEN MESON_TAC[]);
7225 (* ========================================================================= *)
7226 (* ========================================================================= *)
7227 (ABBREV_TAC `s = {X | mcell_set V X /\ edgeX V X e}`);
7228 (NEW_GOAL `sum s (\t. vol (t INTER D)) = vol (D)`);
7229 (ABBREV_TAC `f = (\t:real^3->bool. t INTER D)`);
7230 (REWRITE_WITH `(\t. vol (t INTER D)) = (\x:real^3->bool. vol (f x))`);
7233 (REWRITE_WITH `sum s (\x:real^3->bool. vol (f x)) = vol (UNIONS (IMAGE f s))`);
7234 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
7235 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_UNIONS_IMAGE);
7239 (MATCH_MP_TAC FINITE_EDGE_X2);
7240 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3`);
7241 (ASM_REWRITE_TAC[]);
7244 (MATCH_MP_TAC MEASURABLE_INTER);
7246 (UP_ASM_TAC THEN EXPAND_TAC "s");
7247 (REWRITE_TAC[mcell_set; IN; IN_ELIM_THM]);
7249 (ASM_SIMP_TAC[MEASURABLE_MCELL]);
7250 (ASM_REWRITE_TAC[MEASURABLE_CONIC_CAP]);
7253 (UNDISCH_TAC `(x:real^3->bool) IN s` THEN
7254 UNDISCH_TAC `(y:real^3->bool) IN s` THEN EXPAND_TAC "s");
7255 (REWRITE_TAC[mcell_set_2; IN; IN_ELIM_THM]);
7257 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
7258 (EXISTS_TAC `x INTER (y:real^3->bool)`);
7259 (ASM_REWRITE_TAC[SET_RULE `(x INTER D) INTER y INTER D SUBSET x INTER y`]);
7260 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
7263 (NEW_GOAL `i' = i /\ mcell i' V ul' = mcell i V ul`);
7264 (MATCH_MP_TAC Ajripqn.AJRIPQN);
7265 (ASM_REWRITE_TAC[SET_RULE `i IN {0, 1, 2, 3, 4} <=>
7266 i = 0 \/ i = 1 \/ i = 2 \/ i = 3 \/ i = 4`]);
7267 (UNDISCH_TAC `i <= 4` THEN UNDISCH_TAC `i' <= 4` THEN ARITH_TAC);
7268 (UNDISCH_TAC `~(x = y:real^3->bool)` THEN ASM_REWRITE_TAC[]);
7272 (EXPAND_TAC "f" THEN REWRITE_TAC[IMAGE]);
7278 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_SYMDIFF);
7280 `UNIONS {y | ?x. x IN {X | mcell_set V X /\ edgeX V X e} /\ y = x INTER D}
7282 (REWRITE_TAC[SET_RULE `A DIFF B = {} <=> A SUBSET B`]);
7283 (REWRITE_TAC[UNIONS_SUBSET; IN; IN_ELIM_THM]);
7285 (REWRITE_TAC[SET_RULE `{} UNION A = A`]);
7287 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
7288 (EXISTS_TAC `UNIONS {y | ?x. x IN {X | mcell_set V X /\ NULLSET (X INTER D) /\
7289 ~(X INTER D = {})} /\ y = x INTER D}`);
7291 (MATCH_MP_TAC NEGLIGIBLE_UNIONS);
7294 `{y | ?x. x IN {X | mcell_set V X /\ NULLSET (X INTER D) /\
7295 ~(X INTER D = {})} /\
7297 {y | ?x. x IN {X | mcell_set V X /\ NULLSET (X INTER D) /\
7298 ~(X INTER D = {})} /\
7300 (EXPAND_TAC "f" THEN REWRITE_TAC[]);
7301 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
7303 (* ========================================================================= *)
7304 (* ========================================================================= *)
7305 (* ========================================================================= *)
7307 (MATCH_MP_TAC FINITE_SUBSET);
7308 (EXISTS_TAC `{X | X SUBSET ball (u0, &10) /\ mcell_set V X}`);
7310 (ASM_SIMP_TAC[FINITE_MCELL_SET_LEMMA_2]);
7311 (REWRITE_TAC[SUBSET; IN_BALL; IN; IN_ELIM_THM; mcell_set] THEN
7314 (NEW_GOAL `?v1:real^3. v1 IN x /\ v1 IN D`);
7315 (REWRITE_TAC[GSYM IN_INTER]);
7316 (UNDISCH_TAC `~(x:real^3->bool INTER D = {})` THEN SET_TAC[]);
7317 (UP_ASM_TAC THEN STRIP_TAC);
7318 (NEW_GOAL `dist (u0, x') <= dist (u0, v1:real^3) + dist (v1, x')`);
7320 (NEW_GOAL `dist (u0, v1:real^3) < &1`);
7321 (REWRITE_TAC[GSYM IN_BALL]);
7322 (NEW_GOAL `D SUBSET ball (u0:real^3, &1)`);
7324 (NEW_GOAL `ball (u0, r) SUBSET ball (u0:real^3, &1)`);
7325 (MATCH_MP_TAC SUBSET_BALL);
7326 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
7327 (UP_ASM_TAC THEN SET_TAC[]);
7328 (UP_ASM_TAC THEN UNDISCH_TAC `v1:real^3 IN D` THEN SET_TAC[]);
7329 (NEW_GOAL `dist (v1,x':real^3) < &8`);
7330 (REWRITE_TAC[GSYM IN_BALL]);
7332 (NEW_GOAL `x SUBSET ball (v1:real^3, &8)`);
7333 (ASM_REWRITE_TAC[]);
7334 (MATCH_MP_TAC MCELL_SUBSET_BALL8);
7335 (REWRITE_TAC[GSYM (ASSUME `x = mcell i V ul`)] THEN ASM_REWRITE_TAC[]);
7336 (UNDISCH_TAC `(x:real^3->bool) x'` THEN UP_ASM_TAC THEN SET_TAC[]);
7337 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7338 (EXISTS_TAC `i:num` THEN EXISTS_TAC `ul:(real^3)list`);
7339 (ASM_REWRITE_TAC[]);
7341 (* ========================================================================= *)
7343 (REWRITE_TAC[IN; IN_ELIM_THM]);
7345 (REWRITE_TAC[ASSUME `t:real^3->bool = x INTER D`]);
7346 (ASM_REWRITE_TAC[]);
7348 (REWRITE_TAC[SUBSET; IN_UNIONS]);
7351 (NEW_GOAL `?v:real^3. v IN V /\ x IN voronoi_closed V v`);
7352 (ASM_SIMP_TAC[TIWWFYQ]);
7353 (UP_ASM_TAC THEN STRIP_TAC);
7354 (UP_ASM_TAC THEN REWRITE_WITH
7355 `x IN voronoi_closed V v <=> (?vl. vl IN barV V 3 /\ x IN rogers V vl /\
7356 truncate_simplex 0 vl = [v])`);
7357 (ASM_SIMP_TAC[GLTVHUM]);
7358 (REWRITE_TAC[IN] THEN STRIP_TAC);
7359 (NEW_GOAL `?i. i <= 4 /\ x IN mcell i V vl`);
7360 (ASM_SIMP_TAC[IN;SLTSTLO1]);
7361 (UP_ASM_TAC THEN STRIP_TAC);
7363 (ABBREV_TAC `X = mcell i V vl`);
7364 (NEW_GOAL `~NULLSET (X INTER D) ==> F`);
7371 truncate_simplex 1 ul = [u0; u1]`);
7372 (FIRST_ASSUM MATCH_MP_TAC);
7374 (REWRITE_TAC[mcell_set; IN_ELIM_THM; IN]);
7375 (EXISTS_TAC `i:num` THEN EXISTS_TAC `vl:(real^3)list`);
7376 (ASM_REWRITE_TAC[]);
7377 (ASM_REWRITE_TAC[]);
7378 (UP_ASM_TAC THEN STRIP_TAC);
7380 (MP_TAC (ASSUME `x IN
7383 {y | ?x. x IN {X | mcell_set V X /\ edgeX V X e} /\ y = x INTER D}`));
7384 (REWRITE_TAC[IN_DIFF; MESON[] `~(A /\ ~B) <=> ~A \/ B`]);
7386 (REWRITE_TAC[IN_UNIONS; IN; IN_ELIM_THM]);
7387 (EXISTS_TAC `X INTER (D:real^3->bool)`);
7390 (EXISTS_TAC `(X:real^3->bool)`);
7391 (REWRITE_TAC[mcell_set; IN; IN_ELIM_THM] THEN STRIP_TAC);
7392 (EXISTS_TAC `i:num` THEN EXISTS_TAC `vl:(real^3)list`);
7393 (ASM_REWRITE_TAC[]);
7395 (REWRITE_TAC[edgeX; IN_ELIM_THM]);
7396 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3`);
7399 (NEW_GOAL `VX V X = V INTER X`);
7400 (MATCH_MP_TAC Hdtfnfz.HDTFNFZ);
7401 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `(if k < 4 then k else 4)`);
7402 (ASM_REWRITE_TAC[]);
7406 (NEW_GOAL `k >= 4`);
7407 (UP_ASM_TAC THEN ARITH_TAC);
7408 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; ]);
7409 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN ASM_REWRITE_TAC[]);
7410 (MESON_TAC[NEGLIGIBLE_SUBSET; SET_RULE `A INTER B SUBSET A`]);
7412 (NEW_GOAL `(V:real^3->bool) INTER X =
7413 set_of_list (truncate_simplex ((if k < 4 then k else 4) - 1) ul)`);
7414 (REWRITE_WITH `X = mcell (if k < 4 then k else 4) V ul`);
7415 (ASM_REWRITE_TAC[]);
7418 (NEW_GOAL `k >= 4`);
7419 (UP_ASM_TAC THEN ARITH_TAC);
7420 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; ]);
7422 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
7423 (ASM_REWRITE_TAC[]);
7425 (UNDISCH_TAC `2 <= k` THEN ARITH_TAC);
7427 (UNDISCH_TAC `2 <= k` THEN ARITH_TAC);
7428 (REWRITE_WITH `mcell (if k < 4 then k else 4) V ul = X`);
7429 (ASM_REWRITE_TAC[]);
7432 (NEW_GOAL `k >= 4`);
7433 (UP_ASM_TAC THEN ARITH_TAC);
7434 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; ]);
7436 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN
7437 REWRITE_TAC[ASSUME `X = {}:real^3->bool`; SET_RULE `{} INTER x = {}`;
7439 (ASM_REWRITE_TAC[]);
7440 (NEW_GOAL `set_of_list (truncate_simplex 1 (ul:(real^3)list)) SUBSET
7441 set_of_list (truncate_simplex ((if k < 4 then k else 4) - 1) ul)`);
7442 (MATCH_MP_TAC Rogers.TRUNCATE_SIMPLEX_SUBSET);
7443 (REWRITE_WITH `LENGTH ul = 3 + 1 /\
7444 CARD (set_of_list (ul:(real^3)list)) = 3 + 1`);
7445 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
7446 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7447 (UNDISCH_TAC `2 <= k` THEN ARITH_TAC);
7448 (REWRITE_TAC[MESON[IN] `(s:real^3->bool) u <=> u IN s`]);
7450 (UP_ASM_TAC THEN REWRITE_TAC[ASSUME `truncate_simplex 1 ul = [u0; u1:real^3]`;
7453 (ASM_REWRITE_TAC[]);
7454 (REWRITE_TAC[MESON[IN] `(s:real^3->bool) u <=> u IN s`; IN_INTER]);
7456 (ASM_REWRITE_TAC[]);
7460 {y | ?x. x IN {X | mcell_set V X /\ edgeX V X e} /\ y = x INTER D}`);
7462 (UP_ASM_TAC THEN REWRITE_TAC[] THEN STRIP_TAC);
7463 (EXISTS_TAC `X INTER (D:real^3 ->bool)`);
7465 (REWRITE_TAC[IN_ELIM_THM]);
7466 (EXISTS_TAC `(X:real^3 ->bool)`);
7470 (REWRITE_TAC[mcell_set; IN; IN_ELIM_THM]);
7471 (EXISTS_TAC `i:num` THEN EXISTS_TAC `vl:(real^3)list`);
7472 (ASM_REWRITE_TAC[]);
7474 (ASM_REWRITE_TAC[]);
7476 (REWRITE_TAC[SET_RULE `~(a = {}) <=> (?x. x IN a)`]);
7477 (EXISTS_TAC `x:real^3`);
7479 (REWRITE_TAC[IN_INTER]);
7481 (ASM_REWRITE_TAC[]);
7485 {y | ?x. x IN {X | mcell_set V X /\ edgeX V X e} /\ y = x INTER D}`);
7489 (REWRITE_TAC[MESON[IN] `(s:real^3->bool) u <=> u IN s`; IN_INTER]);
7491 (ASM_REWRITE_TAC[]);
7495 {y | ?x. x IN {X | mcell_set V X /\ edgeX V X e} /\ y = x INTER D}`);
7498 (* ========================================================================= *)
7499 (* ========================================================================= *)
7500 (* ========================================================================= *)
7503 (ABBREV_TAC `t ={X | mcell_set V X /\ edgeX V X e /\ ~NULLSET (X INTER D)}`);
7505 (REWRITE_WITH `sum s (\t. vol (t INTER D)) =
7506 sum t (\t. vol (t INTER D))`);
7507 (MATCH_MP_TAC SUM_SUPERSET);
7508 (EXPAND_TAC "s" THEN EXPAND_TAC "t" THEN REPEAT STRIP_TAC);
7510 (MATCH_MP_TAC MEASURE_EQ_0);
7511 (UP_ASM_TAC THEN UP_ASM_TAC THEN REWRITE_TAC[IN; IN_ELIM_THM] );
7515 (REWRITE_WITH `sum s (\t. dihX V t (u0,u1)) =
7516 sum t (\t. dihX V t (u0,u1))`);
7517 (MATCH_MP_TAC SUM_SUPERSET);
7518 (EXPAND_TAC "s" THEN EXPAND_TAC "t" THEN REPEAT STRIP_TAC);
7521 (NEW_GOAL `NULLSET (x INTER D)`);
7522 (UP_ASM_TAC THEN UP_ASM_TAC THEN REWRITE_TAC[IN; IN_ELIM_THM] );
7525 (NEW_GOAL `mcell_set V x /\ edgeX V x e`);
7526 (UNDISCH_TAC `x IN {X | mcell_set V X /\ edgeX V X e}`);
7527 (REWRITE_TAC[IN; IN_ELIM_THM]);
7528 (UP_ASM_TAC THEN REWRITE_TAC[mcell_set_2; IN_ELIM_THM;IN] THEN STRIP_TAC);
7530 (NEW_GOAL `~NULLSET x`);
7531 (UP_ASM_TAC THEN REWRITE_TAC[edgeX; VX; IN_ELIM_THM]);
7532 (COND_CASES_TAC THEN REPEAT STRIP_TAC);
7533 (UNDISCH_TAC `{} (u:real^3)` THEN REWRITE_TAC[MESON[IN] `{} x <=> x IN {}`]);
7536 (NEW_GOAL `VX V x = V INTER (x:real^3->bool)`);
7537 (MATCH_MP_TAC Hdtfnfz.HDTFNFZ);
7538 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
7539 (ASM_REWRITE_TAC[]);
7541 (NEW_GOAL `V INTER (x:real^3->bool) =
7542 set_of_list (truncate_simplex (i - 1) ul)`);
7543 (ASM_REWRITE_TAC[]);
7544 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
7545 (ASM_REWRITE_TAC[]);
7547 (ASM_CASES_TAC `i = 0`);
7548 (NEW_GOAL `V INTER (x:real^3->bool) = {}`);
7549 (ASM_REWRITE_TAC[]);
7550 (MATCH_MP_TAC Lepjbdj.LEPJBDJ_0);
7551 (ASM_REWRITE_TAC[]);
7553 (UNDISCH_TAC `edgeX V x e` THEN REWRITE_TAC[edgeX; IN_ELIM_THM]);
7555 (UNDISCH_TAC `VX V x u` THEN ASM_REWRITE_TAC[MESON[IN] `{} x <=> x IN {}`]);
7557 (UP_ASM_TAC THEN MESON_TAC[]);
7558 (UP_ASM_TAC THEN ARITH_TAC);
7559 (REWRITE_TAC[GSYM (ASSUME `x = mcell i V ul`)] THEN STRIP_TAC);
7560 (UNDISCH_TAC `~NULLSET x` THEN REWRITE_TAC[ASSUME `x:real^3->bool = {}`;
7563 (NEW_GOAL `(u0:real^3) IN VX V x /\ u1 IN VX V x`);
7564 (UNDISCH_TAC `edgeX V x e` THEN REWRITE_TAC[edgeX; IN_ELIM_THM;
7565 ASSUME `e = {u0, u1:real^3}`]);
7567 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7569 (* ========================================================================== *)
7572 (ASM_CASES_TAC `i <= 1`);
7573 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2 ;v3:real^3]`);
7574 (MATCH_MP_TAC BARV_3_EXPLICIT);
7575 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7576 (UP_ASM_TAC THEN STRIP_TAC);
7577 (NEW_GOAL `i - 1 = 0`);
7578 (UNDISCH_TAC `i <= 1` THEN ARITH_TAC);
7579 (UNDISCH_TAC `u0 IN VX V x /\ u1 IN VX V x`);
7580 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_0; set_of_list]);
7581 (UNDISCH_TAC `~(u0 = u1:real^3)` THEN SET_TAC[]);
7583 (ASM_CASES_TAC `i = 3`);
7584 (NEW_GOAL `vol (x INTER D) > &0`);
7585 (ONCE_REWRITE_TAC[SET_RULE `a INTER b = b INTER a`]);
7586 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2 ;v3:real^3]`);
7587 (MATCH_MP_TAC BARV_3_EXPLICIT);
7588 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7589 (UP_ASM_TAC THEN STRIP_TAC);
7590 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell3; TRUNCATE_SIMPLEX_EXPLICIT_2;
7591 set_of_list; SET_RULE `{a,c,d} UNION {x} = {a,c,d,x}`]);
7593 (NEW_GOAL `i - 1 = 2`);
7594 (UNDISCH_TAC `i = 3` THEN ARITH_TAC);
7595 (UNDISCH_TAC `u0 IN VX V x /\ u1 IN VX V x`);
7596 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list]);
7598 (NEW_GOAL `?v:real^3. {u0, u1, v} = {v0, v1, v2}`);
7599 (NEW_GOAL `?v:real^3. v IN {v0, v1, v2} DIFF {u0, u1}`);
7600 (REWRITE_TAC[SET_RULE `(?x. x IN s) <=> ~(s = {})`]);
7601 (REWRITE_WITH `{v0, v1, v2} DIFF {u0, u1:real^3} = {} <=>
7602 CARD ({v0, v1, v2} DIFF {u0, u1}) = 0`);
7603 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
7604 (MATCH_MP_TAC CARD_EQ_0);
7605 (MATCH_MP_TAC FINITE_SUBSET);
7606 (EXISTS_TAC `{v0, v1, v2:real^3}`);
7607 (REWRITE_TAC[Geomdetail.FINITE6] THEN SET_TAC[]);
7608 (REWRITE_TAC[ARITH_RULE `~(a = 0) <=> 1 <= a`]);
7610 (NEW_GOAL `CARD {v0, v1, v2} = CARD ({v0, v1, v2} DIFF {u0, u1:real^3}) +
7612 (MATCH_MP_TAC Hypermap.CARD_MINUS_DIFF_TWO_SET);
7613 (ASM_REWRITE_TAC[Geomdetail.FINITE6]);
7614 (UP_ASM_TAC THEN REWRITE_WITH `CARD ({v0, v1, v2:real^3}) = 3`);
7615 (REWRITE_WITH `{v0, v1, v2:real^3} = set_of_list (truncate_simplex 2 ul)`);
7616 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list]);
7617 (ABBREV_TAC `xl = truncate_simplex 2 (ul:(real^3)list)`);
7618 (REWRITE_WITH `LENGTH (xl:(real^3)list) = 2 + 1 /\
7619 CARD (set_of_list xl) = 2 + 1`);
7620 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
7621 (EXISTS_TAC `V:real^3->bool` THEN STRIP_TAC);
7622 (ASM_REWRITE_TAC[]);
7623 (EXPAND_TAC "xl" THEN MATCH_MP_TAC Packing3.TRUNCATE_SIMPLEX_BARV);
7624 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[ARITH_RULE `2 <= 3`]);
7627 (NEW_GOAL `CARD {u0, u1:real^3} <= 2`);
7628 (REWRITE_TAC[Geomdetail.CARD2]);
7629 (UP_ASM_TAC THEN ARITH_TAC);
7630 (UP_ASM_TAC THEN STRIP_TAC);
7631 (EXISTS_TAC `v:real^3`);
7632 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN
7633 UNDISCH_TAC `~(u0 = u1:real^3)` THEN SET_TAC[]);
7634 (UP_ASM_TAC THEN STRIP_TAC);
7635 (NEW_GOAL `{v0, v1, v2, mxi V [v0; v1; v2; v3]} =
7636 {u0, u1, v, mxi V [v0; v1; v2; v3]}`);
7637 (UP_ASM_TAC THEN SET_TAC[]);
7638 (ASM_REWRITE_TAC[]);
7639 (MATCH_MP_TAC CONIC_CAP_INTER_CONVEX_HULL_4_GT_0);
7640 (ASM_REWRITE_TAC[]);
7642 (EXPAND_TAC "d" THEN UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
7643 (REWRITE_TAC[GSYM (ASSUME `{v0, v1, v2, mxi V [v0; v1; v2; v3]} =
7644 {u0, u1, v, mxi V [v0; v1; v2; v3]}`)] THEN STRIP_TAC);
7645 (UNDISCH_TAC `~NULLSET x`);
7646 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell3; set_of_list;
7647 TRUNCATE_SIMPLEX_EXPLICIT_2]);
7648 (REWRITE_TAC[SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
7649 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
7650 (EXISTS_TAC `affine hull {v0, v1, v2, mxi V [v0; v1; v2; v3]}`);
7651 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
7652 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
7653 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
7654 (ASM_REWRITE_TAC[]);
7657 (UNDISCH_TAC `~NULLSET x`);
7658 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell3; set_of_list;
7659 TRUNCATE_SIMPLEX_EXPLICIT_2]);
7660 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
7661 (UP_ASM_TAC THEN MESON_TAC[]);
7663 (NEW_GOAL `vol (x INTER D) = &0`);
7664 (MATCH_MP_TAC MEASURE_EQ_0);
7665 (ASM_REWRITE_TAC[]);
7666 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7669 (* ========================================== *)
7671 (ASM_CASES_TAC `i = 4`);
7672 (NEW_GOAL `vol (x INTER D) > &0`);
7673 (ONCE_REWRITE_TAC[SET_RULE `a INTER b = b INTER a`]);
7674 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2 ;v3:real^3]`);
7675 (MATCH_MP_TAC BARV_3_EXPLICIT);
7676 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7677 (UP_ASM_TAC THEN STRIP_TAC);
7678 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell4; ARITH_RULE `4 >= 4`;
7681 (NEW_GOAL `i - 1 = 3`);
7682 (UNDISCH_TAC `i = 4` THEN ARITH_TAC);
7683 (UNDISCH_TAC `u0 IN VX V x /\ u1 IN VX V x`);
7684 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_3; set_of_list]);
7687 (NEW_GOAL `?v w:real^3. {u0, u1, v, w} = {v0, v1, v2, v3}`);
7689 (NEW_GOAL `?v:real^3. v IN {v0, v1, v2, v3} DIFF {u0, u1}`);
7690 (REWRITE_TAC[SET_RULE `(?x. x IN s) <=> ~(s = {})`]);
7691 (REWRITE_WITH `{v0, v1, v2, v3} DIFF {u0, u1:real^3} = {} <=>
7692 CARD ({v0, v1, v2, v3} DIFF {u0, u1}) = 0`);
7693 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
7694 (MATCH_MP_TAC CARD_EQ_0);
7695 (MATCH_MP_TAC FINITE_SUBSET);
7696 (EXISTS_TAC `{v0, v1, v2, v3:real^3}`);
7697 (REWRITE_TAC[Geomdetail.FINITE6] THEN SET_TAC[]);
7698 (REWRITE_TAC[ARITH_RULE `~(a = 0) <=> 1 <= a`]);
7700 (NEW_GOAL `CARD {v0, v1, v2, v3} =
7701 CARD ({v0, v1, v2, v3} DIFF {u0, u1:real^3}) + CARD {u0, u1}`);
7702 (MATCH_MP_TAC Hypermap.CARD_MINUS_DIFF_TWO_SET);
7703 (ASM_REWRITE_TAC[Geomdetail.FINITE6]);
7705 (UP_ASM_TAC THEN REWRITE_WITH `CARD ({v0, v1, v2, v3:real^3}) = 3 + 1`);
7706 (REWRITE_WITH `{v0, v1, v2, v3:real^3} = set_of_list ul`);
7707 (ASM_REWRITE_TAC[set_of_list]);
7708 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
7709 CARD (set_of_list ul) = 3 + 1`);
7710 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
7711 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7712 (NEW_GOAL `CARD {u0, u1:real^3} <= 2`);
7713 (REWRITE_TAC[Geomdetail.CARD2]);
7714 (UP_ASM_TAC THEN ARITH_TAC);
7715 (UP_ASM_TAC THEN STRIP_TAC);
7717 (NEW_GOAL `?w:real^3. w IN {v0, v1, v2, v3} DIFF {u0, u1, v}`);
7718 (REWRITE_TAC[SET_RULE `(?x. x IN s) <=> ~(s = {})`]);
7719 (REWRITE_WITH `{v0, v1, v2, v3} DIFF {u0, u1, v:real^3} = {} <=>
7720 CARD ({v0, v1, v2, v3} DIFF {u0, u1, v}) = 0`);
7721 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
7722 (MATCH_MP_TAC CARD_EQ_0);
7723 (MATCH_MP_TAC FINITE_SUBSET);
7724 (EXISTS_TAC `{v0, v1, v2, v3:real^3}`);
7725 (REWRITE_TAC[Geomdetail.FINITE6] THEN SET_TAC[]);
7726 (REWRITE_TAC[ARITH_RULE `~(a = 0) <=> 1 <= a`]);
7728 (NEW_GOAL `CARD ({v0, v1, v2, v3} DIFF {u0, u1,v:real^3}) =
7729 CARD {v0, v1, v2, v3} - CARD {u0,u1,v}`);
7730 (MATCH_MP_TAC CARD_DIFF);
7731 (ASM_REWRITE_TAC[Geomdetail.FINITE6]);
7732 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7733 (UP_ASM_TAC THEN REWRITE_WITH `CARD ({v0, v1, v2, v3:real^3}) = 3 + 1`);
7734 (REWRITE_WITH `{v0, v1, v2, v3:real^3} = set_of_list ul`);
7735 (ASM_REWRITE_TAC[set_of_list]);
7736 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
7737 CARD (set_of_list ul) = 3 + 1`);
7738 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
7739 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7740 (NEW_GOAL `CARD {u0, u1, v:real^3} <= 3`);
7741 (REWRITE_TAC[Geomdetail.CARD3]);
7742 (UP_ASM_TAC THEN ARITH_TAC);
7743 (UP_ASM_TAC THEN STRIP_TAC);
7745 (EXISTS_TAC `v:real^3` THEN EXISTS_TAC `w:real^3`);
7746 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN
7747 UNDISCH_TAC `~(u0 = u1:real^3)` THEN SET_TAC[]);
7748 (UP_ASM_TAC THEN STRIP_TAC);
7749 (REWRITE_TAC[GSYM (ASSUME `{u0:real^3, u1, v, w} = {v0, v1, v2, v3}`)]);
7750 (MATCH_MP_TAC CONIC_CAP_INTER_CONVEX_HULL_4_GT_0);
7751 (ASM_REWRITE_TAC[]);
7753 (EXPAND_TAC "d" THEN UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
7755 (UNDISCH_TAC `~NULLSET x`);
7756 (SIMP_TAC[MCELL_EXPLICIT; mcell4; set_of_list; ARITH_RULE `4 >= 4`;
7757 ASSUME `x = mcell i V ul`; ASSUME `i = 4`;
7758 ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
7760 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
7761 (EXISTS_TAC `affine hull {v0, v1, v2, v3:real^3}`);
7762 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
7763 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
7764 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
7765 (ASM_REWRITE_TAC[]);
7766 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
7769 (UNDISCH_TAC `~NULLSET x`);
7770 (SIMP_TAC[MCELL_EXPLICIT; mcell4; set_of_list; ARITH_RULE `4 >= 4`;
7771 ASSUME `x = mcell i V ul`; ASSUME `i = 4`;
7772 ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
7775 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7776 (UP_ASM_TAC THEN MESON_TAC[]);
7777 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
7778 (UP_ASM_TAC THEN MESON_TAC[]);
7780 (NEW_GOAL `vol (x INTER D) = &0`);
7781 (MATCH_MP_TAC MEASURE_EQ_0);
7782 (ASM_REWRITE_TAC[]);
7783 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7785 (* ========================================== *)
7788 (UNDISCH_TAC `i <= 4` THEN UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC
7792 (NEW_GOAL `vol (x INTER D) > &0`);
7793 (ONCE_REWRITE_TAC[SET_RULE `a INTER b = b INTER a`]);
7794 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2 ;v3:real^3]`);
7795 (MATCH_MP_TAC BARV_3_EXPLICIT);
7796 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7797 (UP_ASM_TAC THEN STRIP_TAC);
7798 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell2; TRUNCATE_SIMPLEX_EXPLICIT_1;
7799 set_of_list; HD; TL]);
7803 (NEW_GOAL `i - 1 = 1`);
7804 (UNDISCH_TAC `i = 2` THEN ARITH_TAC);
7805 (UNDISCH_TAC `u0 IN VX V x /\ u1 IN VX V x`);
7806 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_1; set_of_list]);
7808 (NEW_GOAL `{u0, u1} = {v0, v1:real^3}`);
7809 (UP_ASM_TAC THEN UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1:real^3)` THEN
7811 (REWRITE_TAC[SET_RULE `A INTER B INTER C INTER D =
7812 (A INTER (B INTER C)) INTER D`]);
7813 (REWRITE_WITH `rcone_ge v0 v1 a' INTER rcone_ge v1 v0 a' =
7814 rcone_ge u0 u1 a' INTER rcone_ge u1 (u0:real^3) a'`);
7815 (ASM_CASES_TAC `u0:real^3 = v0`);
7816 (NEW_GOAL `u1 = v1:real^3`);
7817 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7818 (ASM_REWRITE_TAC[]);
7819 (NEW_GOAL `u0 = v1:real^3`);
7820 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7821 (NEW_GOAL `u1 = v0:real^3`);
7822 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7823 (ASM_REWRITE_TAC[]);
7827 `conic_cap u0 u1 r d INTER rcone_ge u0 u1 a' INTER rcone_ge u1 u0 a' =
7828 conic_cap (u0:real^3) u1 r d`);
7829 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> A INTER B = A`));
7831 (NEW_GOAL `conic_cap (u0:real^3) u1 r d SUBSET rcone_ge u0 u1 a'`);
7832 (REWRITE_TAC[conic_cap]);
7833 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> C INTER A SUBSET B`));
7834 (NEW_GOAL `rcone_gt u0 u1 d SUBSET rcone_gt (u0:real^3) u1 a'`);
7835 (MATCH_MP_TAC RCONE_GT_SUBSET);
7836 (EXPAND_TAC "d" THEN EXPAND_TAC "c");
7837 (MATCH_MP_TAC (REAL_ARITH `a = x ==> a <= max (max y x) (max z t)`));
7838 (EXPAND_TAC "a'" THEN REWRITE_TAC[HL; set_of_list] THEN ASM_REWRITE_TAC[]);
7839 (NEW_GOAL `rcone_gt u0 u1 a' SUBSET rcone_ge (u0:real^3) u1 a'`);
7840 (REWRITE_TAC[RCONE_GT_SUBSET_RCONE_GE]);
7841 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7842 (REWRITE_TAC[SUBSET_INTER] THEN STRIP_TAC);
7843 (ASM_REWRITE_TAC[]);
7845 (REWRITE_TAC[SUBSET]);
7847 (MATCH_MP_TAC Marchal_cells_2_new.RCONEGE_INTER_VORONOI_CLOSED_IMP_RCONEGE);
7848 (EXISTS_TAC `V:real^3->bool`);
7849 (ASM_REWRITE_TAC[]);
7852 (REWRITE_WITH `a' = hl [u0; u1:real^3] / sqrt (&2)`);
7854 (REWRITE_TAC[HL; set_of_list] THEN ASM_REWRITE_TAC[]);
7855 (MATCH_MP_TAC REAL_LT_DIV);
7856 (REWRITE_TAC[HL_2]);
7858 (MATCH_MP_TAC REAL_LT_MUL);
7859 (REWRITE_TAC[REAL_ARITH `&0 < inv (&2)`]);
7860 (MATCH_MP_TAC DIST_POS_LT);
7861 (ASM_REWRITE_TAC[]);
7862 (MATCH_MP_TAC SQRT_POS_LT);
7865 (MATCH_MP_TAC REAL_DIV_LE_1_TACTICS);
7867 (MATCH_MP_TAC SQRT_POS_LT);
7869 (MATCH_MP_TAC (REAL_ARITH `a < b ==> a <= b`));
7870 (ASM_REWRITE_TAC[]);
7872 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7873 (NEW_GOAL `x':real^3 IN ball (u0, (&1))`);
7874 (UP_ASM_TAC THEN REWRITE_TAC[conic_cap;NORMBALL_BALL] THEN STRIP_TAC);
7875 (NEW_GOAL `ball (u0, r) SUBSET ball (u0:real^3, &1)`);
7876 (MATCH_MP_TAC SUBSET_BALL);
7879 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7880 (UP_ASM_TAC THEN REWRITE_TAC[IN_BALL] THEN ONCE_REWRITE_TAC[DIST_SYM]
7882 (REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
7884 (ASM_CASES_TAC `u0 = w:real^3`);
7885 (ASM_REWRITE_TAC[] THEN REAL_ARITH_TAC);
7886 (NEW_GOAL `&2 <= dist (u0, w:real^3)`);
7887 (UNDISCH_TAC `packing (V:real^3->bool)` THEN REWRITE_TAC[packing]);
7889 (FIRST_ASSUM MATCH_MP_TAC);
7890 (ASM_REWRITE_TAC[]);
7891 (UNDISCH_TAC `u0:real^3 IN V` THEN REWRITE_TAC[IN]);
7892 (NEW_GOAL `dist (x', u0) >= dist (u0, w) - dist (x', w:real^3)`);
7894 (UP_ASM_TAC THEN UP_ASM_TAC THEN DEL_TAC THEN DEL_TAC THEN UP_ASM_TAC
7895 THEN REAL_ARITH_TAC);
7896 (ABBREV_TAC `M = mxi V [v0; v1; v2; v3]`);
7897 (ABBREV_TAC `R = omega_list_n V [v0; v1; v2; v3] 3`);
7899 (NEW_GOAL `vol (conic_cap u0 u1 r d INTER convex hull {v0:real^3,v1,M,R})
7900 <= vol (conic_cap u0 u1 r d INTER aff_ge {v0, v1} {M, R})`);
7901 (MATCH_MP_TAC MEASURE_SUBSET);
7903 (MATCH_MP_TAC MEASURABLE_INTER);
7904 (REWRITE_TAC[MEASURABLE_CONIC_CAP]);
7905 (MATCH_MP_TAC MEASURABLE_CONVEX_HULL);
7906 (MATCH_MP_TAC FINITE_IMP_BOUNDED);
7907 (REWRITE_TAC[Geomdetail.FINITE6]);
7909 (REWRITE_TAC[conic_cap; NORMBALL_BALL]);
7910 (ONCE_REWRITE_TAC[SET_RULE `(a INTER b) INTER c =
7911 (a INTER b) INTER (a INTER c)`]);
7912 (MATCH_MP_TAC MEASURABLE_INTER);
7913 (REWRITE_TAC[MEASURABLE_BALL_AFF_GE]);
7914 (REWRITE_TAC[GSYM conic_cap; GSYM NORMBALL_BALL; MEASURABLE_CONIC_CAP]);
7916 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> C INTER A SUBSET C INTER B`));
7917 (REWRITE_TAC[Marchal_cells_2_new.CONVEX_HULL_4_SUBSET_AFF_GE_2_2]);
7921 (NEW_GOAL `vol (conic_cap u0 u1 r d INTER convex hull {v0, v1, M, R}) > &0`);
7922 (REWRITE_WITH `{v0, v1, M, R} = {u0, u1, M, R:real^3}`);
7923 (UNDISCH_TAC `{u0, u1} = {v0, v1:real^3}` THEN SET_TAC[]);
7924 (MATCH_MP_TAC CONIC_CAP_INTER_CONVEX_HULL_4_GT_0);
7925 (ASM_REWRITE_TAC[]);
7927 (EXPAND_TAC "d" THEN UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
7929 (UNDISCH_TAC `~NULLSET x`);
7930 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell2; set_of_list;
7931 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
7933 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
7934 (EXISTS_TAC `aff_ge {v0, v1} {M, R:real^3}`);
7935 (REWRITE_TAC[SET_RULE `a INTER B INTER c SUBSET c`]);
7936 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
7937 (EXISTS_TAC `affine hull ({v0, v1} UNION {M, R:real^3})`);
7938 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL; SET_RULE
7939 `{a, b} UNION {c, d} = {a,b,c,d}`]);
7940 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
7941 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
7942 (REWRITE_WITH `{v0, v1, M, R} = {u0, u1, M, R:real^3}`);
7943 (UNDISCH_TAC `{u0, u1} = {v0, v1:real^3}` THEN SET_TAC[]);
7944 (ASM_REWRITE_TAC[]);
7945 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7948 (UNDISCH_TAC `~NULLSET x`);
7949 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell2; set_of_list;
7950 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
7951 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
7952 (UP_ASM_TAC THEN MESON_TAC[]);
7954 (NEW_GOAL `vol (x INTER D) = &0`);
7955 (MATCH_MP_TAC MEASURE_EQ_0);
7956 (ASM_REWRITE_TAC[]);
7957 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7958 (UP_ASM_TAC THEN MESON_TAC[]);
7960 (* ========================================== *)
7962 (REWRITE_WITH `sum t (\t. vol (t INTER D)) =
7963 sum t (\t. vol D * dihX V t (u0,u1) / (&2 * pi))`);
7964 (MATCH_MP_TAC SUM_EQ);
7965 (EXPAND_TAC "t" THEN REWRITE_TAC[IN_ELIM_THM; IN] THEN REPEAT STRIP_TAC);
7967 (REWRITE_TAC[REAL_ARITH `a * b / c = (a / c) * b`]);
7968 (REWRITE_TAC[SUM_LMUL]);
7969 (ABBREV_TAC `R = sum t (\t. dihX V t (u0,u1))`);
7970 (REWRITE_TAC[REAL_ARITH `a / b * c = (a * c) / b`]);
7971 (REWRITE_WITH `(vol D * R) / (&2 * pi) = vol D <=>
7972 (vol D * R) = vol D * (&2 * pi)`);
7973 (MATCH_MP_TAC REAL_EQ_LDIV_EQ);
7974 (MATCH_MP_TAC REAL_LT_MUL);
7975 (REWRITE_TAC[PI_POS]);
7977 (REWRITE_TAC[REAL_ARITH `a * b = a * c <=> a * (b - c) = &0`]);
7978 (REWRITE_TAC[REAL_ENTIRE]);
7981 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
7983 (NEW_GOAL `&0 < d`);
7984 (EXPAND_TAC "d" THEN UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
7985 (ASM_SIMP_TAC[VOLUME_CONIC_CAP]);
7988 (UNDISCH_TAC `d < &1` THEN UNDISCH_TAC `&0 < r` THEN UP_ASM_TAC
7989 THEN REAL_ARITH_TAC);
7990 (REWRITE_TAC[REAL_ARITH `&2 / &3 * a = &0 <=> a = &0`]);
7991 (REWRITE_TAC[REAL_ENTIRE]);
7992 (NEW_GOAL `~(pi = &0)`);
7993 (MP_TAC PI_POS THEN REAL_ARITH_TAC);
7994 (NEW_GOAL `~(&1 - d = &0)`);
7995 (UNDISCH_TAC `d < &1` THEN REAL_ARITH_TAC);
7996 (NEW_GOAL `~(r pow 3 = &0)`);
7997 (MATCH_MP_TAC REAL_POW_NZ);
7998 (UNDISCH_TAC `&0 < r` THEN REAL_ARITH_TAC);
7999 (ASM_REWRITE_TAC[]);
8000 (UP_ASM_TAC THEN MESON_TAC[]);
8001 (UP_ASM_TAC THEN REAL_ARITH_TAC)]);;