1 (* ========================================================================= *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
4 (* Authour : VU KHAC KY *)
5 (* Book lemma: GRUTOTI *)
8 (* ========================================================================= *)
10 (* flyspeck_needs "packing/marchal_cells_3.hl";; *)
12 (* ========================================================================= *)
21 hl [u0;u1] < sqrt (&2) /\
23 ==> sum {X | mcell_set V X /\ e IN edgeX V X } (\t. dihX V t (u0,u1)) =
26 let GRUTOTI = prove_by_refinement (GRUTOTI1_concl,
28 (NEW_GOAL `barV V 1 [u0;u1:real^3]`);
29 (MATCH_MP_TAC HL_LE_SQRT2_IMP_BARV_1);
33 voronoi_list V [u0;u1:real^3] =
36 ({omega_list_n V vl i | i IN 1..k - 1} UNION
37 voronoi_list V vl) | vl | barV V k vl /\
38 truncate_simplex 1 vl = [u0;u1]}} =
40 (MATCH_MP_TAC Rogers.GLTVHUM_lemma1);
41 (ASM_REWRITE_TAC[] THEN ARITH_TAC);
43 `3 IN {k | k IN 1..3 /\
44 voronoi_list V [u0; u1] =
47 ({omega_list_n V vl i | i IN 1..k - 1} UNION voronoi_list V vl) | vl |
49 truncate_simplex 1 vl = [u0; u1]}}`);
50 (ASM_REWRITE_TAC[IN_NUMSEG] THEN ARITH_TAC);
51 (UP_ASM_TAC THEN ONCE_REWRITE_TAC[IN] THEN REWRITE_TAC[IN_ELIM_THM]);
54 {convex hull ({omega_list_n V vl i | i IN 1..3 - 1} UNION voronoi_list V vl) | vl | barV V 3 vl /\
55 truncate_simplex 1 vl = [u0; u1]} =
56 UNIONS {convex hull {omega_list_n V vl 1, omega_list_n V vl 2,
57 omega_list_n V vl 3} | vl | barV V 3 vl /\
58 truncate_simplex 1 vl = [u0; u1]}`);
59 (ONCE_REWRITE_TAC[SET_EQ_LEMMA]);
60 (REWRITE_TAC[IN_UNIONS] THEN ONCE_REWRITE_TAC[IN] THEN
61 REWRITE_TAC[IN_ELIM_THM]);
63 (EXISTS_TAC `t:real^3->bool` THEN ASM_REWRITE_TAC[]);
64 (EXISTS_TAC `vl:(real^3)list`);
66 (NEW_GOAL `?a. voronoi_list V vl = {a} /\
67 a = circumcenter (set_of_list vl) /\
68 hl vl = dist (HD vl,a)`);
69 (MATCH_MP_TAC Marchal_cells_2_new.VORONOI_LIST_3_SINGLETON_EXPLICIT);
71 (UP_ASM_TAC THEN STRIP_TAC);
73 (NEW_GOAL `omega_list_n V vl 3 IN voronoi_list V vl`);
74 (REWRITE_WITH `omega_list_n V vl 3 = omega_list V vl`);
75 (REWRITE_TAC[OMEGA_LIST]);
76 (REWRITE_WITH `LENGTH (vl:(real^3)list) = 3 + 1 /\
77 CARD (set_of_list vl) = 3 + 1`);
78 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
79 (EXISTS_TAC `V:real^3->bool`);
81 (REWRITE_TAC[ARITH_RULE `(3 + 1) - 1 = 3`]);
82 (MATCH_MP_TAC Packing3.OMEGA_LIST_IN_VORONOI_LIST);
83 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
84 (NEW_GOAL `omega_list_n V vl 3 = a`);
87 (REWRITE_TAC[ARITH_RULE `3 - 1 = 2`; IN_NUMSEG;
88 ARITH_RULE `1 <= i /\ i <= 2 <=> i = 1 \/ i = 2`]);
89 (REWRITE_WITH `{omega_list_n V vl i | i = 1 \/ i = 2} =
90 {omega_list_n V vl 1,omega_list_n V vl 2}`);
92 (REWRITE_WITH `{omega_list_n V vl 1, omega_list_n V vl 2} UNION
93 {circumcenter (set_of_list vl)} = {omega_list_n V vl 1, omega_list_n V vl 2, circumcenter (set_of_list vl)}`);
96 (EXISTS_TAC `t:real^3->bool` THEN ASM_REWRITE_TAC[]);
97 (EXISTS_TAC `vl:(real^3)list`);
99 (NEW_GOAL `?a. voronoi_list V vl = {a} /\
100 a = circumcenter (set_of_list vl) /\
101 hl vl = dist (HD vl,a)`);
102 (MATCH_MP_TAC Marchal_cells_2_new.VORONOI_LIST_3_SINGLETON_EXPLICIT);
104 (UP_ASM_TAC THEN STRIP_TAC);
106 (NEW_GOAL `omega_list_n V vl 3 IN voronoi_list V vl`);
107 (REWRITE_WITH `omega_list_n V vl 3 = omega_list V vl`);
108 (REWRITE_TAC[OMEGA_LIST]);
109 (REWRITE_WITH `LENGTH (vl:(real^3)list) = 3 + 1 /\
110 CARD (set_of_list vl) = 3 + 1`);
111 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
112 (EXISTS_TAC `V:real^3->bool`);
114 (REWRITE_TAC[ARITH_RULE `(3 + 1) - 1 = 3`]);
115 (MATCH_MP_TAC Packing3.OMEGA_LIST_IN_VORONOI_LIST);
116 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
117 (NEW_GOAL `omega_list_n V vl 3 = a`);
120 (REWRITE_TAC[ARITH_RULE `3 - 1 = 2`; IN_NUMSEG;
121 ARITH_RULE `1 <= i /\ i <= 2 <=> i = 1 \/ i = 2`]);
122 (REWRITE_WITH `{omega_list_n V vl i | i = 1 \/ i = 2} =
123 {omega_list_n V vl 1,omega_list_n V vl 2}`);
125 (REWRITE_WITH `{omega_list_n V vl 1, omega_list_n V vl 2} UNION
126 {circumcenter (set_of_list vl)} = {omega_list_n V vl 1, omega_list_n V vl 2,
127 circumcenter (set_of_list vl)}`);
131 (* ======================================================================= *)
133 (ABBREV_TAC `p = circumcenter {u0, u1:real^3}`);
134 (NEW_GOAL `aff_dim (u0 INSERT voronoi_list V [u0;u1]) = &3`);
135 (REWRITE_TAC[AFF_DIM_INSERT]);
139 (NEW_GOAL `affine hull voronoi_list V [u0; u1] SUBSET
140 affine hull {x | &2 % (u0 - u1) dot x = norm u0 pow 2 - norm u1 pow 2}`);
141 (MATCH_MP_TAC Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA);
142 (REWRITE_TAC[VORONOI_LIST; set_of_list; Packing3.VORONOI_SET_2]);
143 (ONCE_REWRITE_TAC[SET_RULE `a INTER b = b INTER a`]);
144 (ASM_SIMP_TAC[Pack2.INTER_VORONOI_SUBSET_BISECTOR]);
146 `affine hull {x | &2 % (u0 - u1) dot x = norm u0 pow 2 - norm u1 pow 2} =
147 {x:real^3 | &2 % (u0 - u1) dot x = norm u0 pow 2 - norm u1 pow 2}`);
148 (REWRITE_TAC[AFFINE_HULL_EQ]);
149 (REWRITE_TAC[AFFINE_HYPERPLANE]);
151 `~(u0 IN {x:real^3 | &2 % (u0 - u1) dot x = norm u0 pow 2 - norm u1 pow 2})`);
152 (REWRITE_TAC[IN; IN_ELIM_THM; NORM_POW_2]);
153 (ONCE_REWRITE_TAC [REAL_ARITH `a = b <=> a - b = &0`]);
154 (REWRITE_TAC[VECTOR_ARITH `&2 % (u0 - u1) dot u0 - (u0 dot u0 - u1 dot u1) =
155 (u0 - u1) dot (u0 - u1)`]);
156 (REWRITE_TAC[DOT_EQ_0] THEN ASM_NORM_ARITH_TAC);
159 (REWRITE_TAC[ARITH_RULE `a + &1 = b:int <=> a = b - &1`]);
160 (MATCH_MP_TAC Packing3.AFF_DIM_VORONOI_LIST);
163 (NEW_GOAL `aff_dim (u0 INSERT voronoi_list V [u0; u1]) = &(dimindex (:3))`);
164 (ASM_REWRITE_TAC[DIMINDEX_3]);
165 (UP_ASM_TAC THEN REWRITE_TAC[AFF_DIM_EQ_FULL]);
168 (ABBREV_TAC `S = voronoi_list V [u0;u1]`);
169 (NEW_GOAL `!x. x IN S ==> (x - u0) dot (u1 - u0) =
170 dist (p, u0) * dist (u1, u0:real^3)`);
172 (NEW_GOAL `p = inv (&2) % (u0 + (u1:real^3))`);
173 (EXPAND_TAC "p" THEN REWRITE_TAC[Rogers.CIRCUMCENTER_2; midpoint]);
175 (REWRITE_WITH `u1 - u0 = &2 % (p - u0:real^3)`);
178 (REWRITE_TAC[NORM_MUL; REAL_ARITH `abs (&2) = &2`;
179 REAL_ARITH `a * b * a = b * a pow 2`; NORM_POW_2; DOT_RMUL]);
180 (REWRITE_WITH `(x - u0) dot (p - u0:real^3) =
181 (p - u0) dot (p - u0) - (x - p) dot (u0 - p)`);
183 (REWRITE_WITH `(x - p) dot (u0 - p:real^3) = &0`);
185 (REWRITE_WITH `{u0, u1} = set_of_list [u0; u1:real^3]`);
186 (REWRITE_TAC[set_of_list]);
187 (MATCH_MP_TAC Rogers.MHFTTZN4);
188 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `1`);
192 (NEW_GOAL `S SUBSET affine hull voronoi_list V [u0; u1]`);
194 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
196 (REWRITE_TAC[set_of_list]);
197 (NEW_GOAL `{u0,u1} SUBSET affine hull {u0,u1:real^3}`);
198 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
202 (* ========================================================================= *)
204 (ABBREV_TAC `S1 = {x:real^3 | &2 % (u0 - u1) dot x =
205 norm u0 pow 2 - norm u1 pow 2}`);
206 (ABBREV_TAC `S2:real^3->bool = (S1 DIFF (relative_interior S))`);
207 (NEW_GOAL `closed_in (subtopology euclidean (S1:real^3->bool)) S2`);
209 (MATCH_MP_TAC CLOSED_IN_DIFF);
211 (NEW_GOAL `closed (S1:real^3->bool)`);
212 (EXPAND_TAC "S1" THEN REWRITE_TAC[CLOSED_HYPERPLANE]);
213 (MATCH_MP_TAC CLOSED_SUBSET);
214 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
216 (REWRITE_WITH `S1 = affine hull (S:real^3->bool)`);
218 (NEW_GOAL `affine hull S1 = S1:real^3->bool`);
219 (REWRITE_TAC[AFFINE_HULL_EQ]);
220 (EXPAND_TAC "S1" THEN REWRITE_TAC[AFFINE_HYPERPLANE]);
221 (ONCE_REWRITE_TAC[GSYM (ASSUME `affine hull S1 = S1:real^3->bool`)]);
222 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
223 (MATCH_MP_TAC AFF_DIM_EQ_AFFINE_HULL);
225 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
226 SET_RULE `INTERS {f x | x IN {a, b}} = f a INTER f b`]);
227 (DEL_TAC THEN EXPAND_TAC "S1");
228 (MATCH_MP_TAC Pack2.INTER_VORONOI_SUBSET_BISECTOR);
230 (REWRITE_WITH `aff_dim (S1:(real^3->bool)) = &(dimindex (:3)) - &1`);
231 (DEL_TAC THEN EXPAND_TAC "S1");
232 (MATCH_MP_TAC AFF_DIM_HYPERPLANE);
233 (REWRITE_TAC[VECTOR_ARITH `&2 % (s - t) = vec 0 <=> s = t`]);
235 (REWRITE_TAC[DIMINDEX_3]);
236 (REWRITE_WITH `aff_dim (voronoi_list V [u0;u1:real^3]) = &3 - &1`);
237 (MATCH_MP_TAC Packing3.AFF_DIM_VORONOI_LIST);
241 (REWRITE_TAC[OPEN_IN_RELATIVE_INTERIOR]);
243 (NEW_GOAL `closed (S2:real^3->bool)`);
244 (MATCH_MP_TAC CLOSED_IN_CLOSED_TRANS);
245 (EXISTS_TAC `S1:real^3->bool`);
248 (REWRITE_TAC[CLOSED_HYPERPLANE]);
251 (NEW_GOAL `~(S2:real^3->bool = {})`);
253 (REWRITE_TAC [SET_RULE `A DIFF B = {} <=> A SUBSET B`]);
255 (NEW_GOAL `S1 SUBSET S:real^3->bool`);
256 (NEW_GOAL `relative_interior S SUBSET S:real^3->bool`);
257 (REWRITE_TAC[RELATIVE_INTERIOR_SUBSET]);
258 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
260 (NEW_GOAL `S1 = S:real^3->bool`);
261 (NEW_GOAL `S SUBSET S1:real^3->bool`);
263 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
264 SET_RULE `INTERS {f x | x IN {a, b}} = f a INTER f b`]);
266 (MATCH_MP_TAC Pack2.INTER_VORONOI_SUBSET_BISECTOR);
268 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
270 (NEW_GOAL `bounded (S1:real^3->bool)`);
271 (REWRITE_TAC[ASSUME `S1 = S:real^3->bool`]);
272 (DEL_TAC THEN EXPAND_TAC "S");
273 (MATCH_MP_TAC Packing3.BOUNDED_VORONOI_LIST);
277 (NEW_GOAL `~bounded (S1:real^3->bool)`);
279 (MATCH_MP_TAC UNBOUNDED_HYPERPLANE);
280 (REWRITE_TAC[VECTOR_ARITH `&2 % (u0 - u1) = vec 0 <=> u0 = u1`]);
284 (NEW_GOAL `?z:real^3. z IN S2 /\
285 (!w. w IN S2 ==> dist (u0,z) <= dist (u0,w))`);
286 (MATCH_MP_TAC DISTANCE_ATTAINS_INF);
288 (UP_ASM_TAC THEN STRIP_TAC);
290 (* ======================================================================== *)
292 (ABBREV_TAC `a = dist (p, u0:real^3) / dist (z, u0)`);
293 (NEW_GOAL `&0 < a /\ a < &1`);
295 (NEW_GOAL `~(u0:real^3 IN S1)`);
296 (EXPAND_TAC "S1" THEN REWRITE_TAC[IN; IN_ELIM_THM; NORM_POW_2]);
297 (REWRITE_TAC[REAL_ARITH `a = b - c <=> a + c - b = &0`]);
298 (REWRITE_TAC[VECTOR_ARITH `&2 % (u0 - u1) dot u0 + u1 dot u1 - u0 dot u0 =
299 (u0 - u1) dot (u0 - u1)`]);
300 (REWRITE_TAC[DOT_EQ_0; VECTOR_ARITH `a - b = vec 0 <=> a = b`]);
302 (NEW_GOAL `&0 < dist (p,u0:real^3)`);
303 (MATCH_MP_TAC DIST_POS_LT);
304 (EXPAND_TAC "p" THEN REWRITE_TAC[Rogers.CIRCUMCENTER_2; midpoint]);
305 (REWRITE_TAC[VECTOR_ARITH `inv (&2) % (u0 + u1) = u0 <=> u0 = u1`]);
307 (NEW_GOAL `&0 < dist (z,u0:real^3)`);
308 (MATCH_MP_TAC DIST_POS_LT);
310 (NEW_GOAL `z:real^3 IN S1`);
314 (MATCH_MP_TAC REAL_LT_DIV);
317 `dist (p,u0) / dist (z,u0:real^3) < &1 <=> dist (p,u0) < &1 * dist (z,u0)`);
318 (ASM_SIMP_TAC[REAL_LT_LDIV_EQ]);
319 (REWRITE_TAC[REAL_MUL_LID]);
320 (MATCH_MP_TAC Tactics_jordan.REAL_POW_2_LT);
322 (ASM_REAL_ARITH_TAC);
323 (ASM_REAL_ARITH_TAC);
325 (REWRITE_WITH `norm (z - u0:real^3) pow 2 =
326 norm (p - u0) pow 2 + norm (z - p) pow 2`);
327 (MATCH_MP_TAC PYTHAGORAS);
328 (REWRITE_TAC[orthogonal]);
329 (REWRITE_WITH `p = circumcenter (set_of_list [u0;u1:real^3])`);
330 (ASM_REWRITE_TAC[set_of_list]);
331 (ONCE_REWRITE_TAC[DOT_SYM]);
332 (MATCH_MP_TAC Rogers.MHFTTZN4);
333 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `1`);
338 (REWRITE_TAC[ASSUME `voronoi_list V [u0; u1] = S`]);
339 (REWRITE_WITH `affine hull (S:real^3->bool) = S1`);
340 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
342 (NEW_GOAL `affine hull S1 = S1:real^3->bool`);
343 (REWRITE_TAC[AFFINE_HULL_EQ]);
344 (EXPAND_TAC "S1" THEN REWRITE_TAC[AFFINE_HYPERPLANE]);
345 (ONCE_REWRITE_TAC[GSYM (ASSUME `affine hull S1 = S1:real^3->bool`)]);
346 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
347 (MATCH_MP_TAC AFF_DIM_EQ_AFFINE_HULL);
349 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
350 SET_RULE `INTERS {f x | x IN {a, b}} = f a INTER f b`]);
351 (DEL_TAC THEN EXPAND_TAC "S1");
352 (MATCH_MP_TAC Pack2.INTER_VORONOI_SUBSET_BISECTOR);
354 (REWRITE_WITH `aff_dim (S1:(real^3->bool)) = &(dimindex (:3)) - &1`);
355 (DEL_TAC THEN EXPAND_TAC "S1");
356 (MATCH_MP_TAC AFF_DIM_HYPERPLANE);
357 (REWRITE_TAC[VECTOR_ARITH `&2 % (s - t) = vec 0 <=> s = t`]);
359 (REWRITE_TAC[DIMINDEX_3]);
360 (REWRITE_WITH `aff_dim (voronoi_list V [u0;u1:real^3]) = &3 - &1`);
361 (MATCH_MP_TAC Packing3.AFF_DIM_VORONOI_LIST);
365 (REWRITE_TAC[set_of_list]);
366 (NEW_GOAL `{u0, u1:real^3} SUBSET affine hull {u0, u1}`);
367 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
369 (REWRITE_TAC[REAL_ARITH `a < a + b <=> &0 < b`; NORM_POW_2; DOT_POS_LT]);
370 (REWRITE_TAC[VECTOR_ARITH `a - b = vec 0 <=> a = b`]);
372 (NEW_GOAL `~(z:real^3 IN S2)`);
373 (REWRITE_TAC[ASSUME `z = p:real^3`]);
375 (NEW_GOAL `p:real^3 IN relative_interior S`);
379 (ABBREV_TAC `B = V INTER ball (p:real^3, &8)`);
380 (ABBREV_TAC `A = B DIFF {u0, u1:real^3}`);
381 (NEW_GOAL `FINITE (A:real^3->bool)`);
383 (MATCH_MP_TAC FINITE_DIFF);
385 (MATCH_MP_TAC Packing3.KIUMVTC THEN ASM_REWRITE_TAC[]);
386 (NEW_GOAL `?y. dist (p,y:real^3) = &4`);
387 (MATCH_MP_TAC VECTOR_CHOOSE_DIST);
389 (UP_ASM_TAC THEN STRIP_TAC);
390 (UNDISCH_TAC `saturated (V:real^3->bool)`);
391 (REWRITE_TAC[saturated] THEN STRIP_TAC);
392 (NEW_GOAL `?z. z IN V /\ dist (y:real^3, z) < &2`);
394 (UP_ASM_TAC THEN STRIP_TAC);
396 (NEW_GOAL `z':real^3 IN A`);
397 (EXPAND_TAC "A" THEN EXPAND_TAC "B");
398 (REWRITE_TAC[IN_DIFF; IN_INTER; IN_BALL]);
402 (NEW_GOAL `dist (p,z') <= dist (p, y) + dist (y, z':real^3)`);
403 (REWRITE_TAC[DIST_TRIANGLE]);
404 (ASM_REAL_ARITH_TAC);
405 (NEW_GOAL `dist (p, y) <= dist (p, z') + dist (z', y:real^3)`);
406 (REWRITE_TAC[DIST_TRIANGLE]);
407 (UP_ASM_TAC THEN ASM_REWRITE_TAC[] THEN ONCE_REWRITE_TAC[DIST_SYM]);
409 (NEW_GOAL `&2 < dist (z', p:real^3)`);
410 (ASM_REAL_ARITH_TAC);
411 (UP_ASM_TAC THEN REWRITE_TAC[] THEN ONCE_REWRITE_TAC[DIST_SYM]);
412 (REWRITE_WITH `p = circumcenter (set_of_list [u0;u1:real^3])`);
413 (ASM_MESON_TAC[set_of_list]);
414 (NEW_GOAL `(!w. w IN set_of_list [u0;u1:real^3]
415 ==> dist (circumcenter (set_of_list [u0;u1]),w) = hl [u0;u1])`);
416 (MATCH_MP_TAC Rogers.HL_PROPERTIES);
417 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `1`);
420 (REWRITE_WITH `dist (circumcenter (set_of_list [u0; u1:real^3]),z') =
422 (FIRST_ASSUM MATCH_MP_TAC);
423 (ASM_REWRITE_TAC[set_of_list]);
424 (NEW_GOAL `sqrt (&2) <= &2`);
425 (MATCH_MP_TAC Tactics_jordan.REAL_POW_2_LE);
426 (SIMP_TAC[REAL_ARITH `&0 <= &2`; SQRT_POS_LE; SQRT_POW_2]);
428 (ASM_REAL_ARITH_TAC);
430 (NEW_GOAL `?a:real^3. a IN A /\ (!x. x IN A ==> dist (p,a) <= dist (p,x))`);
431 (MATCH_MP_TAC Packing3.REAL_FINITE_ARGMIN);
433 (UP_ASM_TAC THEN SET_TAC[]);
434 (UP_ASM_TAC THEN STRIP_TAC);
437 (ABBREV_TAC `d = inv (&4) * (dist (p, a') - dist (p, u0:real^3))`);
440 (MATCH_MP_TAC REAL_LT_MUL);
443 (REWRITE_TAC[REAL_ARITH `&0 < a - b <=> a > b`]);
444 (ONCE_REWRITE_TAC[DIST_SYM]);
445 (NEW_GOAL `!u v. u IN {u0,u1} /\ v IN V DIFF {u0,u1} ==>
446 dist (v,p) > dist (u,p:real^3)`);
447 (MATCH_MP_TAC Rogers.XYOFCGX);
451 (UP_ASM_TAC THEN REWRITE_TAC[AFFINE_INDEPENDENT_2]);
452 (ASM_MESON_TAC[set_of_list]);
453 (REWRITE_WITH `radV {u0, u1:real^3} = hl [u0;u1]`);
454 (REWRITE_TAC[HL;set_of_list]);
456 (FIRST_ASSUM MATCH_MP_TAC);
459 (REWRITE_TAC[relative_interior; IN; IN_ELIM_THM]);
460 (ABBREV_TAC `St = S INTER ball (p:real^3, d)`);
461 (EXISTS_TAC `St:real^3->bool`);
464 (REWRITE_TAC[open_in]);
466 (NEW_GOAL `S SUBSET affine hull (S:real^3->bool)`);
467 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
468 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
469 (EXISTS_TAC `d - dist (p:real^3, x)`);
471 (REWRITE_TAC[REAL_ARITH `&0 < a - b <=> b < a`]);
472 (REWRITE_TAC[GSYM IN_BALL]);
475 (REWRITE_TAC[IN_INTER]);
479 (NEW_GOAL `dist (x',x:real^3) < d`);
480 (NEW_GOAL `&0 <= dist (p,x:real^3)`);
481 (REWRITE_TAC[DIST_POS_LE]);
482 (ASM_REAL_ARITH_TAC);
484 (NEW_GOAL `x' IN voronoi_closed V (u0:real^3)`);
485 (REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
488 (ASM_CASES_TAC `w IN {u0, u1:real^3}`);
489 (ASM_CASES_TAC `w = u0:real^3`);
490 (REWRITE_TAC[ASSUME `w = u0:real^3`]);
492 (NEW_GOAL `w = u1:real^3`);
494 (REWRITE_TAC[ASSUME `w = u1:real^3`]);
495 (MATCH_MP_TAC (REAL_ARITH `a = b ==> a <= b`));
497 (NEW_GOAL `x':real^3 IN S1`);
498 (NEW_GOAL `affine hull S SUBSET affine hull (S1:real^3->bool)`);
499 (MATCH_MP_TAC Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA);
500 (EXPAND_TAC "S1" THEN REWRITE_TAC[GSYM
501 (ASSUME `voronoi_list V [u0; u1] = S`); VORONOI_LIST; VORONOI_SET;
502 set_of_list; SET_RULE `INTERS {f v | v IN {a, b}} = f a INTER f b`]);
503 (MATCH_MP_TAC Pack2.INTER_VORONOI_SUBSET_BISECTOR);
505 (REWRITE_WITH `x' IN S1 <=> x':real^3 IN affine hull S1`);
506 (REWRITE_WITH `affine hull S1 = S1:real^3->bool`);
507 (REWRITE_TAC[AFFINE_HULL_EQ]);
508 (EXPAND_TAC "S1" THEN REWRITE_TAC[AFFINE_HYPERPLANE]);
511 (UP_ASM_TAC THEN EXPAND_TAC "S1" THEN REWRITE_TAC[IN_ELIM_THM; NORM_POW_2]);
512 (ONCE_REWRITE_TAC[REAL_ARITH `a = b <=> a - b = &0`]);
514 VECTOR_ARITH `&2 % (u0 - u1) dot x - (u0 dot u0 - u1 dot u1) =
515 (u1 - x) dot (u1 - x) - (u0 - x) dot (u0 - x)`]);
516 (REWRITE_TAC[REAL_ARITH `a - b = &0 <=> a = b`; GSYM NORM_POW_2; GSYM dist]);
518 (REWRITE_TAC[DIST_EQ]);
519 (ONCE_REWRITE_TAC[DIST_SYM]);
522 (NEW_GOAL `dist (x', u0:real^3) <= dist (x', x) + dist (x, u0)`);
523 (REWRITE_TAC[DIST_TRIANGLE]);
524 (NEW_GOAL `dist (x, u0:real^3) <= dist (x, p:real^3) + dist (p, u0)`);
525 (REWRITE_TAC[DIST_TRIANGLE]);
526 (NEW_GOAL `dist (x,p:real^3) < d`);
527 (NEW_GOAL `x IN ball (p:real^3, d)`);
529 (UP_ASM_TAC THEN REWRITE_TAC[IN_BALL]);
530 (REWRITE_TAC[DIST_SYM]);
531 (NEW_GOAL `dist (x',u0) < &2 * d + dist (p:real^3,u0)`);
532 (ASM_REAL_ARITH_TAC);
534 (NEW_GOAL `dist (p, w:real^3)- &2 * d <= dist (x',w)`);
535 (NEW_GOAL `dist (x, w:real^3) <= dist (x, x') + dist (x', w)`);
536 (REWRITE_TAC[DIST_TRIANGLE]);
537 (NEW_GOAL `dist (p, w:real^3) <= dist (p, x) + dist (x, w)`);
538 (REWRITE_TAC[DIST_TRIANGLE]);
539 (NEW_GOAL `dist (x, x':real^3) < d /\ dist (p, x:real^3) < d`);
540 (ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REWRITE_TAC[]);
541 (ASM_REAL_ARITH_TAC);
542 (NEW_GOAL `dist (p, u0) + &4 * d <= dist (p, w:real^3)`);
544 (REWRITE_TAC[REAL_ARITH `&4 * inv (&4) * a = a`]);
545 (REWRITE_TAC[REAL_ARITH `a + b - a = b`]);
547 (ASM_CASES_TAC `w:real^3 IN B`);
548 (FIRST_ASSUM MATCH_MP_TAC);
550 (NEW_GOAL `~(dist (p,w:real^3) < &8)`);
551 (REWRITE_TAC[GSYM IN_BALL]);
553 (NEW_GOAL `dist (p,a':real^3) < &8`);
554 (REWRITE_TAC[GSYM IN_BALL]);
556 (ASM_REAL_ARITH_TAC);
557 (ASM_REAL_ARITH_TAC);
560 (NEW_GOAL `x' IN voronoi_closed V (u1:real^3)`);
561 (NEW_GOAL `x':real^3 IN S1`);
562 (NEW_GOAL `affine hull S SUBSET affine hull (S1:real^3->bool)`);
563 (MATCH_MP_TAC Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA);
564 (EXPAND_TAC "S1" THEN REWRITE_TAC[GSYM
565 (ASSUME `voronoi_list V [u0; u1] = S`); VORONOI_LIST; VORONOI_SET;
566 set_of_list; SET_RULE `INTERS {f v | v IN {a, b}} = f a INTER f b`]);
567 (MATCH_MP_TAC Pack2.INTER_VORONOI_SUBSET_BISECTOR);
569 (REWRITE_WITH `x' IN S1 <=> x':real^3 IN affine hull S1`);
570 (REWRITE_WITH `affine hull S1 = S1:real^3->bool`);
571 (REWRITE_TAC[AFFINE_HULL_EQ]);
572 (EXPAND_TAC "S1" THEN REWRITE_TAC[AFFINE_HYPERPLANE]);
575 (UP_ASM_TAC THEN EXPAND_TAC "S1" THEN REWRITE_TAC[IN_ELIM_THM; NORM_POW_2]);
576 (ONCE_REWRITE_TAC[REAL_ARITH `a = b <=> a - b = &0`]);
578 VECTOR_ARITH `&2 % (u0 - u1) dot x - (u0 dot u0 - u1 dot u1) =
579 (u1 - x) dot (u1 - x) - (u0 - x) dot (u0 - x)`]);
580 (REWRITE_TAC[REAL_ARITH `a - b = &0 <=> a = b`; GSYM NORM_POW_2; GSYM dist]);
582 (UNDISCH_TAC `x' IN voronoi_closed V (u0:real^3)`);
583 (REWRITE_TAC[voronoi_closed; IN_ELIM_THM; IN]);
585 (REWRITE_WITH `dist (x', u1)= dist (x', u0:real^3)`);
586 (ONCE_REWRITE_TAC[DIST_SYM]);
587 (ASM_REWRITE_TAC[DIST_EQ]);
591 (ASSUME `voronoi_list V [u0; u1] = S`); VORONOI_LIST; VORONOI_SET;
592 set_of_list; SET_RULE `INTERS {f v | v IN {a, b}} = f a INTER f b`]);
593 (ASM_REWRITE_TAC[IN_INTER]);
595 (REWRITE_TAC[IN_BALL]);
596 (NEW_GOAL `dist (p,x':real^3) <= dist (p,x) + dist (x, x':real^3)`);
597 (REWRITE_TAC[DIST_TRIANGLE]);
598 (NEW_GOAL `dist (x,x':real^3) = dist (x',x)`);
599 (REWRITE_TAC[DIST_SYM]);
600 (ASM_REAL_ARITH_TAC);
601 (REWRITE_WITH `St p <=> p:real^3 IN St`);
603 (EXPAND_TAC "St" THEN REWRITE_TAC[IN_INTER; IN_BALL; DIST_REFL]);
605 (REWRITE_WITH `p = omega_list V [u0; u1]`);
606 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
607 (REWRITE_WITH `p = circumcenter (set_of_list [u0;u1:real^3])`);
608 (ASM_MESON_TAC[set_of_list]);
609 (MATCH_MP_TAC Rogers.XNHPWAB1);
611 (ASM_REWRITE_TAC[IN]);
612 (REWRITE_TAC[GSYM (ASSUME `voronoi_list V [u0;u1] = S`)]);
613 (MATCH_MP_TAC Packing3.OMEGA_LIST_IN_VORONOI_LIST);
614 (EXISTS_TAC `1` THEN ASM_REWRITE_TAC[]);
616 (UP_ASM_TAC THEN SET_TAC[]);
617 (UP_ASM_TAC THEN SET_TAC[]);
620 (* ======================================================================== *)
622 (NEW_GOAL `?b. &0 < b /\ b < &1 /\
623 rcone_gt u0 u1 b SUBSET aff_ge_alt {u0:real^3} S`);
625 (EXISTS_TAC `a:real`);
629 (REWRITE_TAC[SET_RULE `A SUBSET B <=> (!x. ~(x IN B) ==> ~(x IN A))`]);
631 (NEW_GOAL `x:real^3 IN affine hull (u0 INSERT S)`);
633 (UP_ASM_TAC THEN REWRITE_TAC[AFFINE_HULL_EXPLICIT_ALT; IN; IN_ELIM_THM]);
636 (ABBREV_TAC `h = sum (s DELETE u0:real^3) u`);
637 (NEW_GOAL `(x - u0) dot (u1 - u0:real^3) =
638 h * dist (p, u0) * dist (u1, u0:real^3)`);
640 (NEW_GOAL `u0 = vsum s (\v:real^3. (u:real^3->real) v % (u0:real^3))`);
641 (ASM_SIMP_TAC[VSUM_RMUL]);
643 (REWRITE_WITH `vsum (s:real^3->bool) (\v. u v % v) - u0:real^3 =
644 vsum s (\v. u v % v) - vsum s (\v:real^3. u v % u0)`);
646 (UP_ASM_TAC THEN MESON_TAC[]);
647 (REWRITE_WITH `vsum s (\v. u v % v) - vsum s (\v:real^3. u v % u0:real^3) =
648 vsum s (\x. (\v. u v % v) x - (\v. u v % u0) x)`);
649 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
650 (MATCH_MP_TAC VSUM_SUB);
652 (REWRITE_TAC[VECTOR_ARITH `a % x - a % y = a % (x - y)`]);
653 (REWRITE_WITH `vsum s (\x:real^3. u x % (x - u0)) dot (u1 - u0) =
654 sum s (\x. (\x. u x % (x - u0)) x dot (u1 - u0:real^3))`);
655 (ASM_SIMP_TAC[DOT_LSUM]);
656 (REWRITE_TAC[DOT_LMUL]);
657 (REWRITE_WITH `sum s (\x:real^3. u x * ((x - u0) dot (u1 - u0:real^3))) =
658 sum (s DELETE u0) (\x. u x * (dist (p,u0) * dist (u1,u0)))`);
659 (ASM_CASES_TAC `u0:real^3 IN s`);
660 (NEW_GOAL `s = u0 INSERT (s DELETE u0:real^3)`);
662 (NEW_GOAL `FINITE (s DELETE u0:real^3)`);
663 (MATCH_MP_TAC FINITE_SUBSET);
664 (EXISTS_TAC `s:real^3->bool` THEN ASM_REWRITE_TAC[] THEN SET_TAC[]);
666 (REWRITE_WITH `sum s (\x:real^3. u x * ((x - u0) dot (u1 - u0:real^3))) =
667 sum (u0 INSERT (s DELETE u0)) (\x. u x * ((x - u0) dot (u1 - u0)))`);
669 (ABBREV_TAC `f = (\x:real^3. u x * ((x - u0) dot (u1 - u0:real^3)))`);
670 (REWRITE_WITH `sum (u0:real^3 INSERT (s DELETE u0)) f =
671 (if u0 IN (s DELETE u0) then sum (s DELETE u0) f
672 else f u0 + sum (s DELETE u0) f)`);
673 (MATCH_MP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
679 (REWRITE_WITH `f (u0:real^3) = &0`);
681 (REWRITE_TAC[VECTOR_ARITH `(u0 - u0) dot (u1 - u0) = &0`]);
683 (REWRITE_TAC[REAL_ARITH `&0 + a = a`]);
684 (MATCH_MP_TAC SUM_EQ);
687 (REWRITE_TAC[REAL_ARITH `a * x = a * y * z <=> a * (x - y * z) = &0`]);
688 (NEW_GOAL `(x' - u0) dot (u1 - u0) - dist (p,u0) * dist (u1,u0:real^3) = &0`);
689 (REWRITE_TAC[REAL_ARITH `a - b = &0 <=> a = b`]);
690 (FIRST_ASSUM MATCH_MP_TAC);
694 (REWRITE_WITH `s DELETE u0:real^3 = s`);
696 (MATCH_MP_TAC SUM_EQ);
699 (REWRITE_TAC[REAL_ARITH `a * x = a * y * z <=> a * (x - y * z) = &0`]);
700 (NEW_GOAL `(x' - u0) dot (u1 - u0) - dist (p,u0) * dist (u1,u0:real^3) = &0`);
701 (REWRITE_TAC[REAL_ARITH `a - b = &0 <=> a = b`]);
702 (FIRST_ASSUM MATCH_MP_TAC);
706 (NEW_GOAL `FINITE (s DELETE u0:real^3)`);
707 (MATCH_MP_TAC FINITE_SUBSET);
708 (EXISTS_TAC `s:real^3->bool` THEN ASM_REWRITE_TAC[] THEN SET_TAC[]);
709 (ASM_SIMP_TAC[SUM_RMUL]);
711 (ASM_CASES_TAC `h <= &0`);
712 (NEW_GOAL `~(x IN rcone_gt u0 (u1:real^3) a)`);
713 (REWRITE_TAC[rcone_gt; rconesgn; IN; IN_ELIM_THM]);
715 (MATCH_MP_TAC (REAL_ARITH `&0 <= x /\ y <= &0 ==> ~(y > x)`));
717 (MATCH_MP_TAC REAL_LE_MUL);
718 (REWRITE_TAC[DIST_POS_LE]);
719 (MATCH_MP_TAC REAL_LE_MUL);
720 (REWRITE_TAC[DIST_POS_LE]);
721 (ASM_REAL_ARITH_TAC);
723 (REWRITE_TAC[REAL_ARITH `a * b * c <= &0 <=> &0 <= b * c * (--a)`]);
724 (MATCH_MP_TAC REAL_LE_MUL);
725 (REWRITE_TAC[DIST_POS_LE]);
726 (MATCH_MP_TAC REAL_LE_MUL);
727 (REWRITE_TAC[DIST_POS_LE]);
728 (ASM_REAL_ARITH_TAC);
733 (ABBREV_TAC `y = inv (h) % vsum (s DELETE u0) (\v:real^3. u v % v)`);
734 (NEW_GOAL `?t. t + h = &1 /\ x = t % u0 + h % (y:real^3)`);
735 (EXISTS_TAC `&1 - h`);
738 (ASM_CASES_TAC `u0:real^3 IN s`);
739 (REWRITE_TAC[GSYM (ASSUME `sum s (u:real^3->real) = &1`)]);
742 (REWRITE_WITH `sum s u = sum (u0 INSERT (s DELETE u0)) (u:real^3->real)`);
743 (REWRITE_WITH `(u0 INSERT (s DELETE u0:real^3)) = s`);
745 (NEW_GOAL `FINITE (s DELETE u0:real^3)`);
746 (MATCH_MP_TAC FINITE_SUBSET);
747 (EXISTS_TAC `s:real^3->bool` THEN ASM_REWRITE_TAC[] THEN SET_TAC[]);
749 (SIMP_TAC[Marchal_cells_2_new.SUM_CLAUSES_alt;
750 ASSUME `FINITE (s DELETE u0:real^3)`]);
753 (UP_ASM_TAC THEN SET_TAC[]);
755 (REWRITE_TAC[REAL_ARITH `(a + b:real) - b = a`]);
758 (REWRITE_TAC[VECTOR_MUL_ASSOC]);
759 (REWRITE_WITH `h * inv h = &1`);
760 (NEW_GOAL `~(h = &0)`);
761 (ASM_REAL_ARITH_TAC);
762 (ASM_SIMP_TAC[Trigonometry2.REAL_MUL_LRINV]);
763 (REWRITE_TAC[VECTOR_MUL_LID]);
766 (REWRITE_WITH `vsum s (\v. u v % v) =
767 vsum (u0 INSERT (s DELETE u0)) (\v:real^3. u v % v)`);
768 (REWRITE_WITH `(u0 INSERT (s DELETE u0:real^3)) = s`);
770 (SIMP_TAC[Marchal_cells_2_new.VSUM_CLAUSES_alt;
771 ASSUME `FINITE (s DELETE u0:real^3)`]);
774 (UP_ASM_TAC THEN SET_TAC[]);
779 (EXPAND_TAC "h" THEN REWRITE_WITH `s DELETE u0:real^3 = s`);
782 (EXPAND_TAC "y" THEN REWRITE_TAC[ASSUME `h = &1`]);
783 (REWRITE_WITH `s DELETE u0:real^3 = s`);
785 (ASM_REWRITE_TAC[REAL_ARITH `inv (&1) = &1 /\ &1 - &1 = &0`]);
787 (UP_ASM_TAC THEN STRIP_TAC);
789 (NEW_GOAL `~(y:real^3 IN S)`);
791 (NEW_GOAL `x IN aff_ge_alt {u0:real^3} S`);
792 (REWRITE_TAC[IN; aff_ge_alt; lin_combo]);
794 (ABBREV_TAC `f = (\v:real^3. if v = u0 then t
795 else if v = y then h else &0)`);
796 (EXISTS_TAC `f:real^3->real`);
797 (EXISTS_TAC `{y:real^3}`);
800 (REWRITE_TAC[FINITE_SING]);
803 (REWRITE_TAC[SET_RULE `{a} UNION {b} = {a, b}`]);
804 (REWRITE_WITH `vsum {u0:real^3, y} (\v. f v % v) =
805 (\v. f v % v) u0 + (\v. f v % v) y`);
806 (MATCH_MP_TAC Geomdetail.VSUM_DIS2);
808 (NEW_GOAL `~(u0:real^3 IN S)`);
810 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
811 SET_RULE `v IN {a,b} <=> v = a \/ v = b`]);
813 (NEW_GOAL `u0 IN voronoi_closed V (u1:real^3)`);
815 (UP_ASM_TAC THEN REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
817 (NEW_GOAL `dist (u0,u1) <= dist (u0,u0:real^3)`);
818 (FIRST_ASSUM MATCH_MP_TAC);
820 (UP_ASM_TAC THEN REWRITE_TAC[DIST_REFL; REAL_ARITH `~(a <= b) <=> b < a`]);
821 (MATCH_MP_TAC DIST_POS_LT);
825 (REWRITE_WITH `(f:real^3->real) u0 = t`);
833 (REWRITE_WITH `(f:real^3->real) y = h`);
837 (NEW_GOAL `~(u0:real^3 IN S)`);
839 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
840 SET_RULE `v IN {a,b} <=> v = a \/ v = b`]);
842 (NEW_GOAL `u0 IN voronoi_closed V (u1:real^3)`);
844 (UP_ASM_TAC THEN REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
846 (NEW_GOAL `dist (u0,u1) <= dist (u0,u0:real^3)`);
847 (FIRST_ASSUM MATCH_MP_TAC);
849 (UP_ASM_TAC THEN REWRITE_TAC[DIST_REFL; REAL_ARITH `~(a <= b) <=> b < a`]);
850 (MATCH_MP_TAC DIST_POS_LT);
864 (NEW_GOAL `~({y:real^3} u0)`);
865 (REWRITE_WITH `~({y} u0) <=> ~(u0:real^3 IN {y})`);
867 (REWRITE_TAC[IN_SING]);
870 (NEW_GOAL `~(u0:real^3 IN S)`);
872 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
873 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);
891 (ASM_REAL_ARITH_TAC);
894 (REWRITE_TAC[SET_RULE `{a} UNION {b} = {a,b}`]);
895 (REWRITE_WITH `sum {u0:real^3, y} f = f u0 + f y`);
896 (MATCH_MP_TAC Geomdetail.SUM_DIS2);
898 (NEW_GOAL `~(u0:real^3 IN S)`);
900 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
901 SET_RULE `v IN {a,b} <=> v = a \/ v = b`]);
903 (NEW_GOAL `u0 IN voronoi_closed V (u1:real^3)`);
905 (UP_ASM_TAC THEN REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
907 (NEW_GOAL `dist (u0,u1) <= dist (u0,u0:real^3)`);
908 (FIRST_ASSUM MATCH_MP_TAC);
910 (UP_ASM_TAC THEN REWRITE_TAC[DIST_REFL; REAL_ARITH `~(a <= b) <=> b < a`]);
911 (MATCH_MP_TAC DIST_POS_LT);
915 (REWRITE_WITH `(f:real^3->real) u0 = t`);
923 (REWRITE_WITH `(f:real^3->real) y = h`);
927 (NEW_GOAL `~(u0:real^3 IN S)`);
929 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
930 SET_RULE `v IN {a,b} <=> v = a \/ v = b`]);
932 (NEW_GOAL `u0 IN voronoi_closed V (u1:real^3)`);
934 (UP_ASM_TAC THEN REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
936 (NEW_GOAL `dist (u0,u1) <= dist (u0,u0:real^3)`);
937 (FIRST_ASSUM MATCH_MP_TAC);
939 (UP_ASM_TAC THEN REWRITE_TAC[DIST_REFL; REAL_ARITH `~(a <= b) <=> b < a`]);
940 (MATCH_MP_TAC DIST_POS_LT);
953 (NEW_GOAL `y:real^3 IN S2`);
955 (NEW_GOAL `y:real^3 IN S1`);
956 (NEW_GOAL `y:real^3 IN affine hull S`);
957 (REWRITE_TAC[AFFINE_HULL_EXPLICIT_ALT]);
958 (REWRITE_TAC[IN; IN_ELIM_THM]);
959 (EXISTS_TAC `s DELETE u0:real^3`);
960 (EXISTS_TAC `(\v:real^3. inv h * u v)`);
962 (ASM_REWRITE_TAC[FINITE_DELETE]);
964 (REWRITE_TAC[SUM_LMUL]);
966 (ASM_SIMP_TAC[Trigonometry2.REAL_MUL_LRINV;
967 REAL_ARITH `~(h <= &0) ==> ~(h = &0)`]);
968 (REWRITE_TAC[GSYM VECTOR_MUL_ASSOC]);
969 (ASM_SIMP_TAC[VSUM_LMUL; FINITE_DELETE]);
970 (NEW_GOAL `affine hull S1 = S1:real^3->bool`);
971 (REWRITE_TAC[AFFINE_HULL_EQ]);
972 (EXPAND_TAC "S1" THEN REWRITE_TAC[AFFINE_HYPERPLANE]);
974 (NEW_GOAL `affine hull S SUBSET affine hull (S1:real^3->bool)`);
975 (MATCH_MP_TAC Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA);
977 (REWRITE_TAC[VORONOI_LIST; VORONOI_SET; set_of_list;
978 SET_RULE `INTERS {f x | x IN {a, b}} = f a INTER f b`]);
979 (DEL_TAC THEN EXPAND_TAC "S1");
980 (MATCH_MP_TAC Pack2.INTER_VORONOI_SUBSET_BISECTOR);
984 (NEW_GOAL `relative_interior S SUBSET S:real^3->bool`);
985 (REWRITE_TAC[RELATIVE_INTERIOR_SUBSET]);
989 (* ========================================================================= *)
991 (NEW_GOAL `dist (z,u0) <= dist (y,u0:real^3)`);
992 (ONCE_REWRITE_TAC[DIST_SYM]);
994 (UNDISCH_TAC `x:real^3 IN rcone_gt u0 u1 a`);
995 (REWRITE_TAC[rcone_gt; rconesgn; IN; IN_ELIM_THM]);
997 (REWRITE_WITH `dist (t % u0 + h % y,u0) = h * dist (y, u0:real^3)`);
999 (REWRITE_WITH `(t % u0 + h % y:real^3) - u0 = (t % u0 + h % y) - (t + h) % u0`);
1000 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
1001 (REWRITE_TAC[VECTOR_ARITH `(t % u0 + h % y) - (t + h) % u0 = h % (y - u0)`]);
1002 (REWRITE_TAC[NORM_MUL]);
1003 (REWRITE_WITH `abs h = h`);
1004 (REWRITE_TAC[REAL_ABS_REFL]);
1005 (ASM_REAL_ARITH_TAC);
1007 (REWRITE_TAC[REAL_ARITH `~(a > b) <=> a <= b`]);
1008 (REWRITE_WITH `h * dist (p,u0:real^3) * dist (u1,u0) =
1009 (h * dist (z,u0)) * dist (u1,u0) * a`);
1011 (REWRITE_TAC[REAL_ARITH `(a * b) * c * d / b = (a * d * c) * (b / b)`]);
1012 (REWRITE_WITH `dist (z,u0) / dist (z,u0:real^3) = &1`);
1013 (MATCH_MP_TAC REAL_DIV_REFL);
1014 (REWRITE_TAC[DIST_EQ_0]);
1017 (NEW_GOAL `~(u0:real^3 IN S1)`);
1018 (EXPAND_TAC "S1" THEN REWRITE_TAC[IN; IN_ELIM_THM; NORM_POW_2]);
1019 (REWRITE_TAC[REAL_ARITH `a = b - c <=> a + c - b = &0`]);
1020 (REWRITE_TAC[VECTOR_ARITH `&2 % (u0 - u1) dot u0 + u1 dot u1 - u0 dot u0 =
1021 (u0 - u1) dot (u0 - u1)`]);
1022 (REWRITE_TAC[DOT_EQ_0; VECTOR_ARITH `a - b = vec 0 <=> a = b`]);
1023 (ASM_REWRITE_TAC[]);
1024 (NEW_GOAL `z:real^3 IN S1`);
1029 (REWRITE_TAC[REAL_ARITH
1030 `(a * x) * b * c <= (a * y) * b * c <=> &0 <= a * b * c *(y - x)`]);
1031 (MATCH_MP_TAC REAL_LE_MUL);
1033 (ASM_REAL_ARITH_TAC);
1034 (MATCH_MP_TAC REAL_LE_MUL);
1035 (REWRITE_TAC[DIST_POS_LE]);
1036 (MATCH_MP_TAC REAL_LE_MUL);
1038 (ASM_REAL_ARITH_TAC);
1039 (ASM_REAL_ARITH_TAC);
1041 (UP_ASM_TAC THEN STRIP_TAC);
1043 (ABBREV_TAC `W = aff_ge_alt {u0:real^3} S`);
1044 (ABBREV_TAC `c = max b (hl[u0;u1:real^3] / sqrt (&2))`);
1045 (NEW_GOAL `&0 < c /\ c < &1`);
1046 (EXPAND_TAC "c" THEN REWRITE_TAC[REAL_LT_MAX]);
1047 (ASM_REWRITE_TAC[]);
1048 (EXPAND_TAC "c" THEN REWRITE_TAC[REAL_MAX_LT]);
1050 (ASM_REWRITE_TAC[]);
1051 (REWRITE_WITH `hl [u0; u1:real^3] / sqrt (&2) < &1 <=>
1052 hl [u0; u1] < &1 * sqrt (&2)`);
1053 (MATCH_MP_TAC REAL_LT_LDIV_EQ);
1054 (ASM_SIMP_TAC[SQRT_POS_LT; REAL_ARITH `&0 < &2`]);
1055 (ASM_REAL_ARITH_TAC);
1057 (NEW_GOAL `rcone_gt u0 u1 c SUBSET
1058 W INTER (rcone_gt u0 u1 (hl [u0; u1:real^3] / sqrt (&2)))`);
1059 (REWRITE_TAC[SUBSET_INTER]);
1061 (NEW_GOAL `rcone_gt (u0:real^3) u1 c SUBSET rcone_gt u0 u1 b`);
1062 (MATCH_MP_TAC RCONE_GT_SUBSET);
1063 (EXPAND_TAC "c" THEN REAL_ARITH_TAC);
1065 (MATCH_MP_TAC RCONE_GT_SUBSET);
1066 (EXPAND_TAC "c" THEN REAL_ARITH_TAC);
1068 (ABBREV_TAC `C = ball (u0:real^3,&1) INTER rcone_gt u0 u1 c`);
1071 {rogers V vl | vl | barV V 3 vl /\ truncate_simplex 1 vl = [u0; u1]}`);
1072 (REWRITE_TAC[SUBSET]);
1074 (NEW_GOAL `x IN ball (u0:real^3,&1) /\ x IN aff_ge_alt {u0} S`);
1076 (UP_ASM_TAC THEN STRIP_TAC);
1079 (* ===========================================================================*)
1081 (NEW_GOAL `(x:real^3) IN convex hull (u0 INSERT S)`);
1082 (REWRITE_TAC[CONVEX_HULL_EXPLICIT; IN; IN_ELIM_THM]);
1084 (UP_ASM_TAC THEN REWRITE_TAC[IN; aff_ge_alt; lin_combo]);
1086 (EXISTS_TAC `{u0:real^3} UNION q`);
1087 (EXISTS_TAC `f:real^3->real`);
1089 (REWRITE_TAC[SET_RULE `{a} UNION b = a INSERT b`; FINITE_INSERT]);
1090 (ASM_REWRITE_TAC[]);
1092 (ASM_CASES_TAC `x':real^3 IN q`);
1093 (FIRST_ASSUM MATCH_MP_TAC);
1094 (UP_ASM_TAC THEN MESON_TAC[IN]);
1095 (REWRITE_WITH `x' = u0:real^3`);
1096 (NEW_GOAL `x' IN ({u0:real^3} UNION q)`);
1097 (ASM_REWRITE_TAC[IN]);
1098 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
1099 (REWRITE_TAC[REAL_ARITH `&0 <= x <=> ~(x < &0)`]);
1101 (UNDISCH_TAC `x IN ball (u0:real^3,&1)`);
1102 (ASM_REWRITE_TAC[IN_BALL; SET_RULE `{u} UNION q = u INSERT (q DELETE u)`]);
1103 (REWRITE_WITH `vsum (u0 INSERT (q DELETE u0:real^3)) (\v. f v % v) =
1104 (if u0 IN (q DELETE u0) then vsum (q DELETE u0) (\v. f v % v)
1105 else (\v. f v % v) u0 + vsum (q DELETE u0) (\v. f v % v))`);
1106 (MATCH_MP_TAC Marchal_cells_2_new.VSUM_CLAUSES_alt);
1107 (ASM_REWRITE_TAC[FINITE_DELETE]);
1110 (UP_ASM_TAC THEN SET_TAC[]);
1112 (ONCE_REWRITE_TAC[DIST_SYM]);
1113 (REWRITE_TAC[dist]);
1114 (REWRITE_WITH `!a. a - u0 = a - (sum ({u0:real^3} UNION q) f) % u0`);
1115 (ASM_REWRITE_TAC[]);
1119 (NEW_GOAL `sum ({u0} UNION q) f = f u0 + sum (q DELETE u0:real^3) f`);
1120 (REWRITE_TAC[SET_RULE `{u} UNION q = u INSERT (q DELETE u)`]);
1121 (REWRITE_WITH `sum (u0 INSERT (q DELETE u0:real^3)) f =
1122 (if u0 IN (q DELETE u0) then sum (q DELETE u0) f
1123 else f u0 + sum (q DELETE u0) f)`);
1124 (MATCH_MP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
1125 (ASM_REWRITE_TAC[FINITE_DELETE]);
1128 (UP_ASM_TAC THEN SET_TAC[]);
1130 (ASM_REWRITE_TAC[]);
1131 (REWRITE_TAC[VECTOR_ADD_RDISTRIB;
1132 VECTOR_ARITH `(a + b) - (a + c:real^3) = b - c`;
1133 ASSUME `sum ({u0} UNION q) f = f u0 + sum (q DELETE u0:real^3) f`; ]);
1134 (ABBREV_TAC `h = sum (q DELETE u0:real^3) f`);
1135 (ABBREV_TAC `y = inv (h) % vsum (q DELETE u0) (\v:real^3. f v % v)`);
1136 (NEW_GOAL `h > &1`);
1137 (ASM_REAL_ARITH_TAC);
1138 (REWRITE_WITH `vsum (q DELETE u0) (\v. f v % v) = h % y:real^3`);
1140 (REWRITE_TAC[VECTOR_MUL_ASSOC]);
1141 (REWRITE_WITH `h * inv h = &1`);
1142 (ASM_SIMP_TAC [Trigonometry2.REAL_MUL_LRINV; REAL_ARITH `h > &1 ==> ~(h = &0)`]);
1144 (REWRITE_TAC[VECTOR_ARITH `h % a - h % b = h % (a - b)`; NORM_MUL]);
1145 (REWRITE_TAC[REAL_ARITH `~(a < b) <=> b <= a`]);
1147 (NEW_GOAL `norm (p - u0) <= norm (y - u0:real^3)`);
1148 (MATCH_MP_TAC Tactics_jordan.REAL_POW_2_LE);
1149 (REWRITE_TAC[NORM_POS_LE]);
1151 `norm (y - u0) pow 2 = norm (p - u0) pow 2 + norm (y - p:real^3) pow 2`);
1152 (MATCH_MP_TAC PYTHAGORAS);
1153 (REWRITE_TAC[orthogonal]);
1154 (REWRITE_WITH `p = circumcenter (set_of_list [u0;u1:real^3])`);
1155 (ASM_REWRITE_TAC[set_of_list]);
1156 (ONCE_REWRITE_TAC[DOT_SYM]);
1157 (MATCH_MP_TAC Rogers.MHFTTZN4);
1158 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `1`);
1160 (ASM_REWRITE_TAC[]);
1161 (ASM_REWRITE_TAC[]);
1163 (REWRITE_TAC[ASSUME `voronoi_list V [u0; u1] = S`]);
1164 (REWRITE_TAC[AFFINE_HULL_EXPLICIT_ALT; IN; IN_ELIM_THM]);
1165 (EXISTS_TAC `q DELETE u0:real^3`);
1166 (EXISTS_TAC `(\v:real^3. inv h * f v)`);
1168 (ASM_REWRITE_TAC[FINITE_DELETE]);
1170 (ASM_REWRITE_TAC[SUM_LMUL]);
1171 (ASM_SIMP_TAC [Trigonometry2.REAL_MUL_LRINV; REAL_ARITH `h > &1 ==> ~(h = &0)`]);
1172 (REWRITE_TAC[GSYM VECTOR_MUL_ASSOC]);
1173 (ASM_REWRITE_TAC[VSUM_LMUL]);
1175 (REWRITE_TAC[set_of_list]);
1176 (NEW_GOAL `{u0, u1:real^3} SUBSET affine hull {u0, u1}`);
1177 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
1179 (REWRITE_TAC[REAL_ARITH `a <= a + b <=> &0 <= b`; NORM_POW_2; DOT_POS_LE]);
1181 (NEW_GOAL `&1 <= norm (p - u0:real^3)`);
1183 (REWRITE_TAC[CIRCUMCENTER_2; midpoint;
1184 VECTOR_ARITH `inv (&2) % (u0 + u1) - u0 = inv (&2) % (u1 - u0)`;
1185 NORM_MUL; REAL_ARITH `abs (inv(&2)) = inv (&2)`]);
1186 (REWRITE_TAC[GSYM dist]);
1187 (REWRITE_WITH `&1 = inv (&2) * &2`);
1189 (REWRITE_TAC[REAL_ARITH `inv (&2) * &2 <= inv (&2) * a <=> &2 <= a`]);
1190 (MP_TAC (ASSUME `packing (V:real^3->bool)`));
1191 (REWRITE_TAC[packing] THEN STRIP_TAC);
1192 (FIRST_ASSUM MATCH_MP_TAC);
1193 (ASM_REWRITE_TAC[] THEN ASM_SET_TAC[]);
1194 (REWRITE_WITH `abs h = h`);
1195 (ASM_REAL_ARITH_TAC);
1197 (NEW_GOAL `h <= h * norm (y - u0:real^3)`);
1198 (REWRITE_TAC[REAL_ARITH `h <= h * a <=> &0 <= h * (a - &1)`]);
1199 (MATCH_MP_TAC REAL_LE_MUL);
1200 (ASM_REAL_ARITH_TAC);
1201 (ASM_REAL_ARITH_TAC);
1203 (ASM_REWRITE_TAC[]);
1204 (ASM_REWRITE_TAC[]);
1206 (* ========================================================================== *)
1207 (NEW_GOAL `~(S:real^3->bool = {})`);
1209 (NEW_GOAL `~(aff_dim (u0:real^3 INSERT S) = &3)`);
1210 (REWRITE_TAC[ASSUME `S:real^3->bool = {}`; AFF_DIM_SING]);
1214 (UP_ASM_TAC THEN SIMP_TAC[CONVEX_HULL_INSERT;
1215 ASSUME `~(S:real^3->bool = {})`]);
1216 (REWRITE_WITH `convex hull S = S:real^3->bool`);
1217 (REWRITE_TAC[CONVEX_HULL_EQ]);
1218 (EXPAND_TAC "S" THEN REWRITE_TAC[Packing3.CONVEX_VORONOI_LIST]);
1219 (ASM_REWRITE_TAC[]);
1220 (REWRITE_TAC[IN_UNIONS; IN; IN_ELIM_THM]);
1223 (EXISTS_TAC `rogers V vl`);
1225 (EXISTS_TAC `vl:(real^3)list`);
1226 (ASM_REWRITE_TAC[]);
1228 (ASM_SIMP_TAC[Marchal_cells_2.ROGERS_EXPLICIT]);
1229 (REWRITE_TAC[CONVEX_HULL_4; IN_ELIM_THM]);
1231 (UNDISCH_TAC `(t:real^3->bool) b'`);
1232 (ASM_REWRITE_TAC[CONVEX_HULL_3; IN_ELIM_THM]);
1235 (EXISTS_TAC `u:real`);
1236 (EXISTS_TAC `v * u'`);
1237 (EXISTS_TAC `v * v'`);
1238 (EXISTS_TAC `v * w`);
1239 (ASM_SIMP_TAC[REAL_LE_MUL]);
1242 (REWRITE_TAC[REAL_ARITH `u + v * u' + v * v' + v * w = u + v * (u' + v' +w)`]);
1243 (ASM_REWRITE_TAC[]);
1244 (ASM_REAL_ARITH_TAC);
1246 (REWRITE_WITH `(HD vl):real^3 = HD (truncate_simplex 1 vl)`);
1247 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
1248 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
1249 (REWRITE_WITH `LENGTH (vl:(real^3)list) = 3 + 1 /\ CARD (set_of_list vl) = 3 + 1`);
1250 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
1251 (EXISTS_TAC `V:real^3->bool`);
1252 (ASM_REWRITE_TAC[]);
1255 (ASM_REWRITE_TAC[HD]);
1258 (* ========================================================================= *)
1259 (* ========================================================================== *)
1262 `!X. mcell_set V X /\ ~NULLSET (X INTER C)
1267 truncate_simplex 1 vl = [u0; u1])`);
1269 (REWRITE_TAC[mcell_set_2; IN_ELIM_THM]);
1272 (NEW_GOAL `~NULLSET (X INTER UNIONS
1273 {rogers V vl | vl | barV V 3 vl /\ truncate_simplex 1 vl = [u0; u1]})`);
1275 (UNDISCH_TAC `~NULLSET (X INTER C)`);
1277 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1278 (EXISTS_TAC `X INTER
1280 {rogers V vl | vl | barV V 3 vl /\ truncate_simplex 1 vl = [u0; u1]}`);
1282 (ASM_REWRITE_TAC[]);
1284 (UP_ASM_TAC THEN REWRITE_TAC[INTER_UNIONS]);
1288 `!s. ~NULLSET (UNIONS s) /\ FINITE s ==> (?t. t IN s /\ ~NULLSET t)`);
1289 (MESON_TAC[NEGLIGIBLE_UNIONS]);
1290 (ABBREV_TAC `St = {X INTER x | x IN
1291 {rogers V vl | vl | barV V 3 vl /\
1292 truncate_simplex 1 vl = [u0; u1]}}`);
1293 (NEW_GOAL `?t. t IN St /\ ~NULLSET t`);
1294 (FIRST_ASSUM MATCH_MP_TAC);
1295 (ASM_REWRITE_TAC[]);
1297 (ABBREV_TAC `Sr = {rogers V vl | vl | barV V 3 vl /\
1298 truncate_simplex 1 vl = [u0; u1]}`);
1299 (ABBREV_TAC `f = (\x:real^3->bool. X INTER x)`);
1300 (MATCH_MP_TAC FINITE_SUBSET);
1301 (EXISTS_TAC `{y:real^3->bool | ?x:real^3->bool. x IN Sr /\ y = f x }`);
1306 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
1307 (ABBREV_TAC `Ss = {vl | barV V 3 vl /\ truncate_simplex 1 vl = [u0; u1]}`);
1308 (MATCH_MP_TAC FINITE_SUBSET);
1309 (EXISTS_TAC `{y | ?vl. vl IN Ss /\ y = rogers V vl}`);
1311 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
1312 (ABBREV_TAC `Sx = V INTER ball (u0:real^3, &4)`);
1313 (MATCH_MP_TAC FINITE_SUBSET);
1314 (EXISTS_TAC `{y | ?u0 u1 u2 u3:real^3.
1319 y = [u0; u1; u2; u3]}`);
1321 (MATCH_MP_TAC Ajripqn.FINITE_SET_LIST_LEMMA);
1323 (MATCH_MP_TAC Pack2.KIUMVTC);
1324 (ASM_REWRITE_TAC[]);
1326 (REWRITE_TAC[SUBSET; IN; IN_ELIM_THM]);
1329 (NEW_GOAL `?v0 v1 v2 v3. x = [v0;v1;v2;v3:real^3]`);
1330 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
1331 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1332 (UP_ASM_TAC THEN STRIP_TAC);
1333 (EXISTS_TAC `v0:real^3`);
1334 (EXISTS_TAC `v1:real^3`);
1335 (EXISTS_TAC `v2:real^3`);
1336 (EXISTS_TAC `v3:real^3`);
1337 (ASM_REWRITE_TAC[]);
1339 (NEW_GOAL `{v0, v1, v2, v3:real^3} SUBSET Sx`);
1341 (REWRITE_TAC[SUBSET_INTER]);
1342 (REWRITE_WITH `{v0, v1, v2, v3:real^3} = set_of_list x`);
1343 (ASM_REWRITE_TAC[set_of_list]);
1345 (MATCH_MP_TAC Packing3.BARV_SUBSET);
1346 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
1347 (MATCH_MP_TAC Qzyzmjc.BARV_3_IMP_FINITE_lemma2);
1348 (EXISTS_TAC `V:real^3->bool`);
1349 (ASM_REWRITE_TAC[]);
1350 (NEW_GOAL `HD (truncate_simplex 1 x) = u0:real^3`);
1351 (ASM_REWRITE_TAC[HD]);
1352 (NEW_GOAL `HD (truncate_simplex 1 x) = v0:real^3`);
1353 (REWRITE_TAC[ASSUME `x = [v0; v1; v2; v3:real^3]`;
1354 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
1355 (REWRITE_WITH `u0 = v0:real^3`);
1357 (REWRITE_TAC[set_of_list] THEN SET_TAC[]);
1358 (UP_ASM_TAC THEN SET_TAC[]);
1360 (EXPAND_TAC "Sr" THEN EXPAND_TAC "Ss");
1362 (REWRITE_WITH `{X INTER x:real^3->bool | x IN Sr} = {f x | x IN Sr}`);
1366 (UP_ASM_TAC THEN EXPAND_TAC "St" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
1369 (NEW_GOAL `x SUBSET UNIONS {mcell i V vl | i <= 4}`);
1370 (ASM_REWRITE_TAC[SUBSET; IN_UNIONS; IN; IN_ELIM_THM]);
1372 (NEW_GOAL `?i. i <= 4 /\ x' IN mcell i V vl`);
1373 (MATCH_MP_TAC Sltstlo.SLTSTLO1);
1374 (ASM_REWRITE_TAC[IN]);
1375 (UP_ASM_TAC THEN STRIP_TAC);
1376 (EXISTS_TAC `mcell i' V vl`);
1378 (EXISTS_TAC `i':num` THEN ASM_REWRITE_TAC[]);
1379 (UP_ASM_TAC THEN REWRITE_TAC[IN]);
1381 (NEW_GOAL `~NULLSET (X INTER UNIONS {mcell i V vl | i <= 4})`);
1383 (UNDISCH_TAC `~NULLSET (t)`);
1384 (REWRITE_TAC[ASSUME `t:real^3->bool = X INTER x`]);
1385 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1386 (EXISTS_TAC `X INTER UNIONS {mcell i V vl | i <= 4}`);
1388 (ASM_REWRITE_TAC[]);
1390 (UP_ASM_TAC THEN REWRITE_TAC[INTER_UNIONS]);
1394 `!s. ~NULLSET (UNIONS s) /\ FINITE s ==> (?t. t IN s /\ ~NULLSET t)`);
1395 (MESON_TAC[NEGLIGIBLE_UNIONS]);
1396 (ABBREV_TAC `Sx = {X INTER x | x IN {mcell i V vl | i <= 4}}`);
1397 (NEW_GOAL `?t. t IN Sx /\ ~NULLSET t`);
1398 (FIRST_ASSUM MATCH_MP_TAC);
1399 (ASM_REWRITE_TAC[]);
1401 (ABBREV_TAC `Sy = {mcell i V vl | i <= 4}`);
1402 (ABBREV_TAC `f = (\x:real^3->bool. X INTER x)`);
1403 (MATCH_MP_TAC FINITE_SUBSET);
1404 (EXISTS_TAC `{y:real^3->bool | ?x:real^3->bool. x IN Sy /\ y = f x }`);
1406 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
1408 (REWRITE_TAC[GSYM IN_NUMSEG_0]);
1409 (ABBREV_TAC `g = (\i:num. mcell i V vl)`);
1410 (REWRITE_WITH `{mcell i V vl | i IN 0..4} = {g i | i IN 0..4}`);
1411 (EXPAND_TAC "g" THEN REWRITE_TAC[]);
1412 (MATCH_MP_TAC FINITE_SUBSET);
1413 (EXISTS_TAC `{y:real^3->bool | ?i. i IN 0..4 /\ y = g i}`);
1415 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
1416 (REWRITE_TAC[FINITE_NUMSEG]);
1418 (REWRITE_WITH `{X INTER x:real^3->bool | x IN Sy} = {f x | x IN Sy}`);
1419 (EXPAND_TAC "f" THEN REWRITE_TAC[]);
1421 (UP_ASM_TAC THEN EXPAND_TAC "Sx" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
1424 (* ========================================================================= *)
1426 (NEW_GOAL `i = i' /\ mcell i V ul = mcell i' V vl`);
1427 (MATCH_MP_TAC Ajripqn.AJRIPQN);
1428 (ASM_REWRITE_TAC[GSYM Ajripqn.UP_TO_4_KY_LEMMA]);
1430 (UNDISCH_TAC `ul IN barV V 3` THEN REWRITE_TAC[IN]);
1431 (UNDISCH_TAC `~NULLSET t'`);
1432 (ASM_REWRITE_TAC[]);
1433 (EXISTS_TAC `i:num` THEN EXISTS_TAC `vl:(real^3)list`);
1434 (ASM_REWRITE_TAC[]);
1436 (* ========================================================================= *)
1438 (ASM_CASES_TAC `i' = 0`);
1440 (UNDISCH_TAC `~NULLSET (X INTER C)`);
1442 (REWRITE_WITH `X INTER C = {}:real^3->bool`);
1443 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell0]);
1444 (REWRITE_WITH `(HD vl):real^3 = HD (truncate_simplex 1 vl)`);
1445 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
1446 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
1447 (REWRITE_WITH `LENGTH (vl:(real^3)list) = 3 + 1 /\ CARD (set_of_list vl) = 3 + 1`);
1448 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
1449 (EXISTS_TAC `V:real^3->bool`);
1450 (ASM_REWRITE_TAC[]);
1452 (ASM_REWRITE_TAC[HD]);
1453 (NEW_GOAL `C SUBSET ball (u0:real^3, sqrt (&2))`);
1454 (NEW_GOAL `ball (u0:real^3, &1) SUBSET ball (u0, sqrt (&2))`);
1455 (MATCH_MP_TAC SUBSET_BALL);
1456 (MATCH_MP_TAC (REAL_ARITH `a < b ==> a <= b`));
1457 (REWRITE_TAC[Marchal_cells_2_new.ZERO_LT_SQRT_2]);
1459 (UP_ASM_TAC THEN SET_TAC[]);
1460 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
1463 (ASM_CASES_TAC `i' = 1`);
1465 (UNDISCH_TAC `~NULLSET (X INTER C)`);
1467 (REWRITE_WITH `X INTER C = {}:real^3->bool`);
1468 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell1]);
1470 (NEW_GOAL `?v0 v1 v2 v3. vl = [v0;v1;v2;v3:real^3]`);
1471 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
1472 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1473 (UP_ASM_TAC THEN STRIP_TAC);
1474 (ASM_REWRITE_TAC[HD; TL]);
1476 (REWRITE_WITH `v0 = u0:real^3`);
1477 (NEW_GOAL `HD (truncate_simplex 1 vl) = u0:real^3`);
1478 (ASM_REWRITE_TAC[HD]);
1479 (NEW_GOAL `HD (truncate_simplex 1 vl) = v0:real^3`);
1480 (REWRITE_TAC[ASSUME `vl = [v0; v1; v2; v3:real^3]`;
1481 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
1484 (REWRITE_WITH `v1 = u1:real^3`);
1485 (NEW_GOAL `HD (TL(truncate_simplex 1 vl)) = u1:real^3`);
1486 (ASM_REWRITE_TAC[HD; TL]);
1487 (NEW_GOAL `HD (TL(truncate_simplex 1 vl)) = v1:real^3`);
1488 (REWRITE_TAC[ASSUME `vl = [v0; v1; v2; v3:real^3]`;
1489 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
1492 (NEW_GOAL `C SUBSET (rcone_gt u0 u1 (hl [u0:real^3; u1] / sqrt (&2)))`);
1494 (SET_TAC[ASSUME `rcone_gt u0 u1 c SUBSET
1495 W INTER rcone_gt u0 u1 (hl [u0:real^3; u1] / sqrt (&2))`]);
1496 (UP_ASM_TAC THEN SET_TAC[]);
1498 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
1499 (UP_ASM_TAC THEN MESON_TAC[]);
1502 (* ========================================================================= *)
1505 (\ul. dist (u0:real^3,
1506 closest_point (affine hull {u1, EL 2 ul, mxi V ul}) u0))`);
1508 (ABBREV_TAC `P1 = { (f1:(real^3)list->real) ul |ul | barV V 3 ul /\
1509 ~NULLSET (mcell 3 V ul INTER C) /\
1510 truncate_simplex 1 ul = [u0; u1]}`);
1512 (NEW_GOAL `~(P1 = {}) ==> (?b:real. b IN P1 /\ (!x. x IN P1 ==> b <= x))`);
1514 (MATCH_MP_TAC INF_FINITE_LEMMA);
1515 (ASM_REWRITE_TAC[]);
1517 (ONCE_REWRITE_TAC [SET_RULE `{f x| x | P x} = {f x | x IN {y | P y}}`]);
1518 (ONCE_REWRITE_TAC [SET_RULE `{f x| x IN s} = {y | ?x. x IN s /\ y = f x}`]);
1519 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
1520 (MATCH_MP_TAC FINITE_SUBSET);
1521 (EXISTS_TAC `{y | ?v0:real^3 v1 u2 u3.
1522 v0 IN (V INTER ball (u0:real^3, &4)) /\
1523 v1 IN (V INTER ball (u0, &4)) /\
1524 u2 IN (V INTER ball (u0, &4)) /\
1525 u3 IN (V INTER ball (u0, &4)) /\
1526 y = [v0; v1; u2; u3]}`);
1528 (MATCH_MP_TAC FINITE_SET_LIST_LEMMA);
1529 (ASM_SIMP_TAC[FINITE_PACK_LEMMA]);
1530 (REWRITE_TAC[SUBSET] THEN ONCE_REWRITE_TAC[IN] THEN REWRITE_TAC[IN_ELIM_THM]);
1532 (NEW_GOAL `?v0 v1 u2 u3. x = [v0; v1; u2; u3:real^3]`);
1533 (MATCH_MP_TAC BARV_3_EXPLICIT);
1534 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1535 (UP_ASM_TAC THEN STRIP_TAC);
1536 (EXISTS_TAC `v0:real^3` THEN EXISTS_TAC `v1:real^3` THEN
1537 EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3`);
1538 (ASM_REWRITE_TAC[]);
1539 (NEW_GOAL `v0 = u0:real^3`);
1540 (REWRITE_WITH `v0 = HD (x:(real^3)list)`);
1541 (ASM_REWRITE_TAC[HD]);
1542 (REWRITE_WITH `u0 = HD (truncate_simplex 1 (x:(real^3)list))`);
1543 (ASM_REWRITE_TAC[HD]);
1544 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
1545 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
1546 (NEW_GOAL `set_of_list x SUBSET ball (u0:real^3,&4)`);
1547 (MATCH_MP_TAC Qzyzmjc.BARV_3_IMP_FINITE_lemma2);
1548 (EXISTS_TAC `V:real^3->bool`);
1549 (ASM_REWRITE_TAC[set_of_list]);
1551 (NEW_GOAL `set_of_list x SUBSET V:real^3->bool`);
1552 (MATCH_MP_TAC Packing3.BARV_SUBSET);
1553 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
1554 (UP_ASM_TAC THEN UP_ASM_TAC THEN ASM_REWRITE_TAC[set_of_list]);
1557 (ABBREV_TAC `r1 = (if (P1 = {}:real->bool) then &1
1558 else (@b. b IN P1 /\ (!x. x IN P1 ==> b <= x)))`);
1559 (NEW_GOAL `&0 < r1`);
1563 (NEW_GOAL `?b:real. b IN P1 /\ (!x. x IN P1 ==> b <= x)`);
1565 (UP_ASM_TAC THEN STRIP_TAC);
1566 (ABBREV_TAC `P = (\b:real. b IN P1 /\ (!x. x IN P1 ==> b <= x))`);
1567 (ABBREV_TAC `zz = (@) (P:real->bool)`);
1568 (NEW_GOAL `(P:real->bool) zz`);
1570 (MATCH_MP_TAC SELECT_AX);
1571 (EXISTS_TAC `b':real`);
1572 (EXPAND_TAC "P" THEN ASM_REWRITE_TAC[]);
1573 (UP_ASM_TAC THEN EXPAND_TAC "P" THEN REWRITE_TAC[]);
1574 (EXPAND_TAC "P1" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
1576 (ASM_REWRITE_TAC[]);
1578 (MATCH_MP_TAC DIST_POS_LT);
1579 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
1580 (REWRITE_WITH `closest_point (affine hull {u1, EL 2 ul, mxi V ul}) u0 = u0
1581 <=> u0 IN (affine hull {u1:real^3, EL 2 ul, mxi V ul})`);
1582 (MATCH_MP_TAC CLOSEST_POINT_REFL);
1583 (REWRITE_TAC[CLOSED_AFFINE_HULL]);
1584 (REWRITE_TAC[AFFINE_HULL_EQ_EMPTY] THEN SET_TAC[]);
1586 (UNDISCH_TAC `~NULLSET (mcell 3 V ul INTER C)`);
1587 (REWRITE_TAC[] THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1588 (EXISTS_TAC `mcell 3 V ul`);
1589 (REWRITE_TAC[SET_RULE `A INTER B SUBSET A`]);
1590 (REWRITE_TAC[MCELL_EXPLICIT; mcell3]);
1593 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0;v1;v2;v3:real^3]`);
1594 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
1595 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1596 (UP_ASM_TAC THEN STRIP_TAC);
1597 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list]);
1599 (REWRITE_WITH `v0 = u0:real^3`);
1600 (NEW_GOAL `HD (truncate_simplex 1 ul) = u0:real^3`);
1601 (ASM_REWRITE_TAC[HD]);
1602 (NEW_GOAL `HD (truncate_simplex 1 ul) = v0:real^3`);
1603 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
1604 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
1607 (REWRITE_WITH `v1 = u1:real^3`);
1608 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = u1:real^3`);
1609 (ASM_REWRITE_TAC[HD; TL]);
1610 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = v1:real^3`);
1611 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
1612 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
1613 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
1614 (REWRITE_TAC[SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
1616 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1617 (EXISTS_TAC `affine hull {u0, u1, v2, mxi V [u0; u1; v2; v3]}`);
1618 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
1619 (REWRITE_WITH `affine hull {u0, u1, v2, mxi V [u0; u1; v2; v3]} =
1620 affine hull {u1, v2, mxi V [u0; u1; v2; v3]}`);
1621 (MATCH_MP_TAC AFFINE_HULL_3_INSERT);
1622 (REWRITE_WITH `affine hull {u1, v2, mxi V [u0; u1; v2; v3]} =
1623 affine hull {u1, EL 2 ul, mxi V ul}`);
1624 (ASM_REWRITE_TAC[EL; ARITH_RULE `2 = SUC 1 /\ 1 = SUC 0`; HD; TL]);
1626 (REWRITE_WITH `v0 = u0:real^3`);
1627 (NEW_GOAL `HD (truncate_simplex 1 ul) = u0:real^3`);
1628 (ASM_REWRITE_TAC[HD]);
1629 (NEW_GOAL `HD (truncate_simplex 1 ul) = v0:real^3`);
1630 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
1631 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
1634 (REWRITE_WITH `v1 = u1:real^3`);
1635 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = u1:real^3`);
1636 (ASM_REWRITE_TAC[HD; TL]);
1637 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = v1:real^3`);
1638 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
1639 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
1640 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
1641 (ASM_REWRITE_TAC[]);
1642 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
1643 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
1645 (* ========================================================================= *)
1648 (\ul. dist (u0:real^3,
1649 closest_point (affine hull {u1, EL 2 ul, EL 3 ul}) u0))`);
1651 (ABBREV_TAC `P2 = { (f2:(real^3)list->real) ul |ul | barV V 3 ul /\
1652 ~NULLSET (mcell 4 V ul INTER C) /\
1653 truncate_simplex 1 ul = [u0; u1]}`);
1655 (NEW_GOAL `~(P2 = {}) ==> (?b:real. b IN P2 /\ (!x. x IN P2 ==> b <= x))`);
1657 (MATCH_MP_TAC INF_FINITE_LEMMA);
1658 (ASM_REWRITE_TAC[]);
1660 (ONCE_REWRITE_TAC [SET_RULE `{f x| x | P x} = {f x | x IN {y | P y}}`]);
1661 (ONCE_REWRITE_TAC [SET_RULE `{f x| x IN s} = {y | ?x. x IN s /\ y = f x}`]);
1662 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
1663 (MATCH_MP_TAC FINITE_SUBSET);
1664 (EXISTS_TAC `{y | ?v0:real^3 v1 u2 u3.
1665 v0 IN (V INTER ball (u0:real^3, &4)) /\
1666 v1 IN (V INTER ball (u0, &4)) /\
1667 u2 IN (V INTER ball (u0, &4)) /\
1668 u3 IN (V INTER ball (u0, &4)) /\
1669 y = [v0; v1; u2; u3]}`);
1671 (MATCH_MP_TAC FINITE_SET_LIST_LEMMA);
1672 (ASM_SIMP_TAC[FINITE_PACK_LEMMA]);
1673 (REWRITE_TAC[SUBSET] THEN ONCE_REWRITE_TAC[IN] THEN REWRITE_TAC[IN_ELIM_THM]);
1675 (NEW_GOAL `?v0 v1 u2 u3. x = [v0; v1; u2; u3:real^3]`);
1676 (MATCH_MP_TAC BARV_3_EXPLICIT);
1677 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1678 (UP_ASM_TAC THEN STRIP_TAC);
1679 (EXISTS_TAC `v0:real^3` THEN EXISTS_TAC `v1:real^3` THEN
1680 EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3`);
1681 (ASM_REWRITE_TAC[]);
1682 (NEW_GOAL `v0 = u0:real^3`);
1683 (REWRITE_WITH `v0 = HD (x:(real^3)list)`);
1684 (ASM_REWRITE_TAC[HD]);
1685 (REWRITE_WITH `u0 = HD (truncate_simplex 1 (x:(real^3)list))`);
1686 (ASM_REWRITE_TAC[HD]);
1687 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
1688 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
1689 (NEW_GOAL `set_of_list x SUBSET ball (u0:real^3,&4)`);
1690 (MATCH_MP_TAC Qzyzmjc.BARV_3_IMP_FINITE_lemma2);
1691 (EXISTS_TAC `V:real^3->bool`);
1692 (ASM_REWRITE_TAC[set_of_list]);
1694 (NEW_GOAL `set_of_list x SUBSET V:real^3->bool`);
1695 (MATCH_MP_TAC Packing3.BARV_SUBSET);
1696 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
1697 (UP_ASM_TAC THEN UP_ASM_TAC THEN ASM_REWRITE_TAC[set_of_list]);
1700 (ABBREV_TAC `r2 = (if (P2 = {}:real->bool) then &1
1701 else (@b. b IN P2 /\ (!x. x IN P2 ==> b <= x)))`);
1703 (NEW_GOAL `&0 < r2`);
1707 (NEW_GOAL `?b:real. b IN P2 /\ (!x. x IN P2 ==> b <= x)`);
1709 (UP_ASM_TAC THEN STRIP_TAC);
1710 (ABBREV_TAC `P = (\b:real. b IN P2 /\ (!x. x IN P2 ==> b <= x))`);
1711 (ABBREV_TAC `zz = (@) (P:real->bool)`);
1712 (NEW_GOAL `(P:real->bool) zz`);
1714 (MATCH_MP_TAC SELECT_AX);
1715 (EXISTS_TAC `b':real`);
1716 (EXPAND_TAC "P" THEN ASM_REWRITE_TAC[]);
1717 (UP_ASM_TAC THEN EXPAND_TAC "P" THEN REWRITE_TAC[]);
1718 (EXPAND_TAC "P2" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
1720 (ASM_REWRITE_TAC[]);
1722 (MATCH_MP_TAC DIST_POS_LT);
1723 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
1724 (REWRITE_WITH `closest_point (affine hull {u1, EL 2 ul, EL 3 ul}) u0 = u0
1725 <=> u0 IN (affine hull {u1:real^3, EL 2 ul, EL 3 ul})`);
1726 (MATCH_MP_TAC CLOSEST_POINT_REFL);
1727 (REWRITE_TAC[CLOSED_AFFINE_HULL]);
1728 (REWRITE_TAC[AFFINE_HULL_EQ_EMPTY] THEN SET_TAC[]);
1730 (UNDISCH_TAC `~NULLSET (mcell 4 V ul INTER C)`);
1731 (REWRITE_TAC[] THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1732 (EXISTS_TAC `mcell 4 V ul`);
1733 (REWRITE_TAC[SET_RULE `A INTER B SUBSET A`]);
1734 (SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4]);
1737 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0;v1;v2;v3:real^3]`);
1738 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
1739 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1740 (UP_ASM_TAC THEN STRIP_TAC);
1741 (ASM_REWRITE_TAC[set_of_list]);
1743 (REWRITE_WITH `v0 = u0:real^3`);
1744 (NEW_GOAL `HD (truncate_simplex 1 ul) = u0:real^3`);
1745 (ASM_REWRITE_TAC[HD]);
1746 (NEW_GOAL `HD (truncate_simplex 1 ul) = v0:real^3`);
1747 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
1748 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
1749 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
1751 (REWRITE_WITH `v1 = u1:real^3`);
1752 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = u1:real^3`);
1753 (ASM_REWRITE_TAC[HD; TL]);
1754 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = v1:real^3`);
1755 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
1756 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
1757 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
1759 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1760 (EXISTS_TAC `affine hull {u0, u1, v2, v3:real^3}`);
1761 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
1762 (REWRITE_WITH `affine hull {u0, u1, v2, v3:real^3} =
1763 affine hull {u1, v2, v3}`);
1764 (MATCH_MP_TAC AFFINE_HULL_3_INSERT);
1765 (REWRITE_WITH `affine hull {u1, v2, v3:real^3} =
1766 affine hull {u1, EL 2 ul, EL 3 ul}`);
1767 (ASM_REWRITE_TAC[EL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`; HD; TL]);
1768 (ASM_REWRITE_TAC[]);
1770 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
1771 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
1773 (* ========================================================================= *)
1775 (ABBREV_TAC `r = min (&1) (min r1 r2)`);
1776 (NEW_GOAL `&0 < r`);
1778 (UNDISCH_TAC `&0 < r1` THEN UNDISCH_TAC `&0 < r2` THEN REAL_ARITH_TAC);
1780 (* ========================================================================= *)
1783 (\ul. (((smallest_angle_line (EL 2 ul) (mxi V ul) u0 u1) - u0)
1785 (norm ((smallest_angle_line (EL 2 ul) (mxi V ul) u0 u1) - u0)
1786 * norm (u1 - u0)))`);
1788 (ABBREV_TAC `P3 = {(f3:(real^3)list->real) ul |ul | barV V 3 ul /\
1789 ~NULLSET (mcell 3 V ul INTER C) /\
1790 truncate_simplex 1 ul = [u0; u1]}`);
1792 (NEW_GOAL `~(P3 = {}) ==> (?b:real. b IN P3 /\ (!x. x IN P3 ==> x <= b))`);
1794 (MATCH_MP_TAC SUP_FINITE_LEMMA);
1795 (ASM_REWRITE_TAC[]);
1797 (ONCE_REWRITE_TAC [SET_RULE `{f x| x | P x} = {f x | x IN {y | P y}}`]);
1798 (ONCE_REWRITE_TAC [SET_RULE `{f x| x IN s} = {y | ?x. x IN s /\ y = f x}`]);
1799 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
1800 (MATCH_MP_TAC FINITE_SUBSET);
1801 (EXISTS_TAC `{y | ?v0:real^3 v1 u2 u3.
1802 v0 IN (V INTER ball (u0:real^3, &4)) /\
1803 v1 IN (V INTER ball (u0, &4)) /\
1804 u2 IN (V INTER ball (u0, &4)) /\
1805 u3 IN (V INTER ball (u0, &4)) /\
1806 y = [v0; v1; u2; u3]}`);
1808 (MATCH_MP_TAC FINITE_SET_LIST_LEMMA);
1809 (ASM_SIMP_TAC[FINITE_PACK_LEMMA]);
1810 (REWRITE_TAC[SUBSET] THEN ONCE_REWRITE_TAC[IN] THEN REWRITE_TAC[IN_ELIM_THM]);
1812 (NEW_GOAL `?v0 v1 u2 u3. x = [v0; v1; u2; u3:real^3]`);
1813 (MATCH_MP_TAC BARV_3_EXPLICIT);
1814 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1815 (UP_ASM_TAC THEN STRIP_TAC);
1816 (EXISTS_TAC `v0:real^3` THEN EXISTS_TAC `v1:real^3` THEN
1817 EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3`);
1818 (ASM_REWRITE_TAC[]);
1819 (NEW_GOAL `v0 = u0:real^3`);
1820 (REWRITE_WITH `v0 = HD (x:(real^3)list)`);
1821 (ASM_REWRITE_TAC[HD]);
1822 (REWRITE_WITH `u0 = HD (truncate_simplex 1 (x:(real^3)list))`);
1823 (ASM_REWRITE_TAC[HD]);
1824 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
1825 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
1826 (NEW_GOAL `set_of_list x SUBSET ball (u0:real^3,&4)`);
1827 (MATCH_MP_TAC Qzyzmjc.BARV_3_IMP_FINITE_lemma2);
1828 (EXISTS_TAC `V:real^3->bool`);
1829 (ASM_REWRITE_TAC[set_of_list]);
1831 (NEW_GOAL `set_of_list x SUBSET V:real^3->bool`);
1832 (MATCH_MP_TAC Packing3.BARV_SUBSET);
1833 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
1834 (UP_ASM_TAC THEN UP_ASM_TAC THEN ASM_REWRITE_TAC[set_of_list]);
1837 (ABBREV_TAC `d1 = (if (P3 = {}:real->bool) then c
1838 else (@b. b IN P3 /\ (!x. x IN P3 ==> x <= b)))`);
1840 (NEW_GOAL `d1 < &1`);
1843 (ASM_REWRITE_TAC[]);
1844 (NEW_GOAL `?b:real. b IN P3 /\ (!x. x IN P3 ==> x <= b)`);
1846 (UP_ASM_TAC THEN STRIP_TAC);
1847 (ABBREV_TAC `P = (\b:real. b IN P3 /\ (!x. x IN P3 ==> x <= b))`);
1848 (ABBREV_TAC `zz = (@) (P:real->bool)`);
1849 (NEW_GOAL `(P:real->bool) zz`);
1851 (MATCH_MP_TAC SELECT_AX);
1852 (EXISTS_TAC `b':real`);
1853 (EXPAND_TAC "P" THEN ASM_REWRITE_TAC[]);
1854 (UP_ASM_TAC THEN EXPAND_TAC "P" THEN REWRITE_TAC[]);
1855 (EXPAND_TAC "P3" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
1857 (ASM_REWRITE_TAC[]);
1860 (ABBREV_TAC `xx = smallest_angle_line (EL 2 ul) (mxi V ul) u0 u1`);
1861 (MATCH_MP_TAC REAL_DIV_LT_1_TACTICS);
1863 (MATCH_MP_TAC (REAL_ARITH `&0 <= a /\ ~(a = &0) ==> &0 < a`));
1865 (SIMP_TAC[REAL_LE_MUL; NORM_POS_LE]);
1866 (REWRITE_TAC[REAL_ENTIRE; NORM_EQ_0; VECTOR_ARITH `a - b = vec 0 <=> a = b`]);
1867 (ASM_REWRITE_TAC[]);
1869 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN
1870 REWRITE_TAC[smallest_angle_line; smallest_angle_set]);
1872 (ABBREV_TAC `Q = (\x:real^3. x IN convex hull {EL 2 ul, mxi V ul} /\
1873 (!y. y IN convex hull {EL 2 ul, mxi V ul}
1874 ==> ((y - u0) dot (u1 - u0)) /
1875 (norm (y - u0) * norm (u1 - u0)) <=
1876 ((x - u0) dot (u1 - u0)) /
1877 (norm (x - u0) * norm (u1 - u0))))`);
1878 (NEW_GOAL `(Q:real^3->bool) u0`);
1879 (REWRITE_TAC[ASSUME `u0 = (@) (Q:real^3->bool)`]);
1880 (MATCH_MP_TAC SELECT_AX);
1882 (MATCH_MP_TAC SMALLEST_ANGLE_LINE_EXISTS);
1884 (ASM_REWRITE_TAC[]);
1886 (NEW_GOAL `?v1 v2 v3. ul = [u0; v1; v2; v3:real^3]`);
1887 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
1888 (MATCH_MP_TAC BARV_3_EXPLICIT);
1889 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1890 (UP_ASM_TAC THEN STRIP_TAC);
1891 (EXISTS_TAC `v1:real^3` THEN
1892 EXISTS_TAC `v2:real^3` THEN EXISTS_TAC `v3:real^3`);
1893 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
1895 (NEW_GOAL `v0 = u0:real^3`);
1896 (REWRITE_WITH `v0 = HD (ul:(real^3)list)`);
1897 (ASM_REWRITE_TAC[HD]);
1898 (REWRITE_WITH `u0 = HD (truncate_simplex 1 (ul:(real^3)list))`);
1899 (ASM_REWRITE_TAC[HD]);
1900 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
1901 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
1902 (REWRITE_TAC[ASSUME `v0 = u0:real^3`]);
1903 (UP_ASM_TAC THEN STRIP_TAC);
1904 (REWRITE_WITH `EL 2 ul = v2:real^3`);
1905 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `2 = SUC 1 /\ 1 = SUC 0`]);
1908 (UNDISCH_TAC `~NULLSET (mcell 3 V ul INTER C)`);
1910 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1911 (EXISTS_TAC `mcell 3 V ul` THEN STRIP_TAC);
1912 (REWRITE_TAC[MCELL_EXPLICIT; mcell3; set_of_list;
1913 TRUNCATE_SIMPLEX_EXPLICIT_2; ASSUME `ul = [u0; v1; v2; v3:real^3]`;
1914 SET_RULE `{a,b,c} UNION {d} = {a,b, c,d}`]);
1916 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1917 (EXISTS_TAC `affine hull {u0, v1, v2, mxi V ul}`);
1919 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
1920 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
1921 (REWRITE_TAC[coplanar]);
1922 (UNDISCH_TAC `u0 IN convex hull {v2, mxi V ul}`);
1923 (REWRITE_TAC[CONVEX_HULL_2; IN; IN_ELIM_THM] THEN STRIP_TAC);
1924 (EXISTS_TAC `v1:real^3` THEN EXISTS_TAC `v2:real^3` THEN
1925 EXISTS_TAC `mxi V ul`);
1926 (MATCH_MP_TAC (SET_RULE `a IN s /\ b SUBSET s ==> (a INSERT b) SUBSET s`));
1927 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
1928 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
1929 (EXISTS_TAC `&0` THEN EXISTS_TAC `u:real` THEN EXISTS_TAC `v:real`);
1931 (UNDISCH_TAC `u + v = &1` THEN REAL_ARITH_TAC);
1932 (UP_ASM_TAC THEN VECTOR_ARITH_TAC);
1933 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
1934 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
1937 (UP_ASM_TAC THEN EXPAND_TAC "Q");
1939 (UNDISCH_TAC `~NULLSET (mcell 3 V ul INTER C)` THEN REWRITE_TAC[]);
1940 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1941 (EXISTS_TAC `mcell 3 V ul`);
1942 (REWRITE_TAC[SET_RULE `A INTER B SUBSET A`]);
1943 (REWRITE_TAC[MCELL_EXPLICIT; mcell3]);
1945 (NEW_GOAL `?v2 v3. ul = [u0;u1;v2;v3:real^3]`);
1946 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0;v1;v2;v3:real^3]`);
1947 (MATCH_MP_TAC BARV_3_EXPLICIT);
1948 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1949 (UP_ASM_TAC THEN STRIP_TAC);
1950 (EXISTS_TAC `v2:real^3` THEN EXISTS_TAC `v3:real^3`);
1951 (REWRITE_TAC[ASSUME `ul = [v0;v1;v2;v3:real^3]`]);
1953 (REWRITE_WITH `v0 = u0:real^3`);
1954 (NEW_GOAL `HD (truncate_simplex 1 ul) = u0:real^3`);
1955 (ASM_REWRITE_TAC[HD]);
1956 (NEW_GOAL `HD (truncate_simplex 1 ul) = v0:real^3`);
1957 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
1958 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
1959 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
1961 (REWRITE_WITH `v1 = u1:real^3`);
1962 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = u1:real^3`);
1963 (ASM_REWRITE_TAC[HD; TL]);
1964 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = v1:real^3`);
1965 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
1966 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
1967 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
1968 (UP_ASM_TAC THEN STRIP_TAC);
1969 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
1970 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
1971 (REWRITE_TAC[GSYM (ASSUME `u0 = (@) (Q:real^3->bool)`)]);
1973 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1974 (EXISTS_TAC `affine hull {u0, u1, v2, mxi V ul}`);
1975 (REWRITE_TAC[ASSUME `ul = [u0; u1; v2; v3:real^3]`;
1976 CONVEX_HULL_SUBSET_AFFINE_HULL]);
1977 (REWRITE_WITH `affine hull {u0, u1, v2, mxi V [u0; u1; v2; v3]} =
1978 affine hull {u1, v2, mxi V [u0; u1; v2; v3]}`);
1979 (MATCH_MP_TAC AFFINE_HULL_3_INSERT);
1981 (NEW_GOAL `convex hull {EL 2 ul, mxi V ul} SUBSET
1982 affine hull {EL 2 ul, mxi V ul}`);
1983 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
1984 (NEW_GOAL `affine hull {EL 2 ul, mxi V ul} SUBSET
1985 affine hull {u1, v2, mxi V [u0; u1; v2; v3]}`);
1986 (MATCH_MP_TAC AFFINE_SUBSET_KY_LEMMA);
1987 (ASM_REWRITE_TAC[EL; HD; TL; ARITH_RULE `2 = SUC 1 /\ 1 = SUC 0`]);
1989 (UP_ASM_TAC THEN UP_ASM_TAC THEN
1990 UNDISCH_TAC `u0 IN convex hull {EL 2 ul, mxi V ul}` THEN SET_TAC[]);
1991 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
1992 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
1994 (MATCH_MP_TAC (REAL_ARITH `(a <= b) /\ ~(a = b) ==> a < b`));
1995 (REWRITE_TAC[NORM_CAUCHY_SCHWARZ; NORM_CAUCHY_SCHWARZ_EQ]);
1996 (NEW_GOAL `xx IN convex hull {(EL 2 ul) ,(mxi V ul)}`);
1997 (MATCH_MP_TAC SMALLEST_ANGLE_IN_CONVEX_HULL);
1998 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3`);
1999 (ASM_REWRITE_TAC[]);
2001 (NEW_GOAL `?v1 v2 v3. ul = [u0; v1; v2; v3:real^3]`);
2002 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
2003 (MATCH_MP_TAC BARV_3_EXPLICIT);
2004 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2005 (UP_ASM_TAC THEN STRIP_TAC);
2006 (EXISTS_TAC `v1:real^3` THEN
2007 EXISTS_TAC `v2:real^3` THEN EXISTS_TAC `v3:real^3`);
2008 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
2010 (NEW_GOAL `v0 = u0:real^3`);
2011 (REWRITE_WITH `v0 = HD (ul:(real^3)list)`);
2012 (ASM_REWRITE_TAC[HD]);
2013 (REWRITE_WITH `u0 = HD (truncate_simplex 1 (ul:(real^3)list))`);
2014 (ASM_REWRITE_TAC[HD]);
2015 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
2016 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
2017 (REWRITE_TAC[ASSUME `v0 = u0:real^3`]);
2018 (UP_ASM_TAC THEN STRIP_TAC);
2019 (REWRITE_WITH `EL 2 ul = v2:real^3`);
2020 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `2 = SUC 1 /\ 1 = SUC 0`]);
2023 (UNDISCH_TAC `~NULLSET (mcell 3 V ul INTER C)`);
2025 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2026 (EXISTS_TAC `mcell 3 V ul` THEN STRIP_TAC);
2027 (REWRITE_TAC[MCELL_EXPLICIT; mcell3; set_of_list;
2028 TRUNCATE_SIMPLEX_EXPLICIT_2; ASSUME `ul = [u0; v1; v2; v3:real^3]`;
2029 SET_RULE `{a,b,c} UNION {d} = {a,b, c,d}`]);
2031 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2032 (EXISTS_TAC `affine hull {u0, v1, v2, mxi V ul}`);
2034 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
2035 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
2036 (REWRITE_TAC[coplanar]);
2037 (UNDISCH_TAC `u0 IN convex hull {v2, mxi V ul}`);
2038 (REWRITE_TAC[CONVEX_HULL_2; IN; IN_ELIM_THM] THEN STRIP_TAC);
2039 (EXISTS_TAC `v1:real^3` THEN EXISTS_TAC `v2:real^3` THEN
2040 EXISTS_TAC `mxi V ul`);
2041 (MATCH_MP_TAC (SET_RULE `a IN s /\ b SUBSET s ==> (a INSERT b) SUBSET s`));
2042 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
2043 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
2044 (EXISTS_TAC `&0` THEN EXISTS_TAC `u:real` THEN EXISTS_TAC `v:real`);
2046 (UNDISCH_TAC `u + v = &1` THEN REAL_ARITH_TAC);
2047 (UP_ASM_TAC THEN VECTOR_ARITH_TAC);
2048 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
2049 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
2054 (UNDISCH_TAC `~NULLSET (mcell 3 V ul INTER C)` THEN REWRITE_TAC[]);
2055 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2056 (EXISTS_TAC `mcell 3 V ul`);
2057 (REWRITE_TAC[SET_RULE `A INTER B SUBSET A`]);
2058 (REWRITE_TAC[MCELL_EXPLICIT; mcell3]);
2060 (NEW_GOAL `?v2 v3. ul = [u0;u1;v2;v3:real^3]`);
2061 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0;v1;v2;v3:real^3]`);
2062 (MATCH_MP_TAC BARV_3_EXPLICIT);
2063 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2064 (UP_ASM_TAC THEN STRIP_TAC);
2065 (EXISTS_TAC `v2:real^3` THEN EXISTS_TAC `v3:real^3`);
2066 (ASM_REWRITE_TAC[]);
2068 (REWRITE_WITH `v0 = u0:real^3`);
2069 (NEW_GOAL `HD (truncate_simplex 1 ul) = u0:real^3`);
2070 (ASM_REWRITE_TAC[HD]);
2071 (NEW_GOAL `HD (truncate_simplex 1 ul) = v0:real^3`);
2072 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
2073 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
2074 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
2076 (REWRITE_WITH `v1 = u1:real^3`);
2077 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = u1:real^3`);
2078 (ASM_REWRITE_TAC[HD; TL]);
2079 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = v1:real^3`);
2080 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
2081 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
2082 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
2083 (UP_ASM_TAC THEN STRIP_TAC);
2084 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
2085 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
2087 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2088 (EXISTS_TAC `affine hull {u0, u1, v2, mxi V ul}`);
2089 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
2090 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
2091 (ABBREV_TAC `m = mxi V ul`);
2092 (NEW_GOAL `mxi V [u0; u1;v2;v3] = m`);
2093 (EXPAND_TAC "m" THEN AP_TERM_TAC THEN ASM_REWRITE_TAC[]);
2094 (ASM_REWRITE_TAC[]);
2095 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
2096 (ABBREV_TAC `k1 = norm (xx - u0:real^3)`);
2097 (ABBREV_TAC `k2 = norm (u1 - u0:real^3)`);
2098 (UNDISCH_TAC `xx IN convex hull {EL 2 ul, m:real^3}`);
2099 (ASM_REWRITE_TAC[EL; HD; TL; ARITH_RULE `2 = SUC 1/\ 1 = SUC 0`;
2100 CONVEX_HULL_2; IN; IN_ELIM_THM] THEN STRIP_TAC);
2101 (UNDISCH_TAC `k1 % (u1 - u0) = k2 % (xx - u0:real^3)`);
2102 (ASM_REWRITE_TAC[]);
2106 (REWRITE_TAC[coplanar]);
2107 (NEW_GOAL `~(k2 = &0)`);
2109 (REWRITE_TAC[NORM_EQ_0; VECTOR_ARITH `a - b = vec 0 <=> b = a`]);
2110 (ASM_REWRITE_TAC[]);
2112 (ASM_CASES_TAC `~(v = &0)`);
2113 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3` THEN
2114 EXISTS_TAC `v2:real^3`);
2115 (MATCH_MP_TAC (SET_RULE `{a,b,c} SUBSET X /\ d IN X ==> {a,b,c,d} SUBSET X`));
2117 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
2118 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
2119 (EXISTS_TAC `(k2 - k1:real) / (k2 * v)`);
2120 (EXISTS_TAC `k1 / (k2 * v)`);
2121 (EXISTS_TAC `(--k2 * u) / (k2 * v)`);
2123 (REWRITE_TAC[REAL_ARITH `a / x + b / x + c / x = (a+b+c)/ x`]);
2124 (REWRITE_WITH `k2 - k1 + k1 + --k2 * u = k2 * (u + v) - k1 + k1 + --k2 * u`);
2125 (ASM_REWRITE_TAC[ARITH_RULE `SUC 0 = 1`] THEN REAL_ARITH_TAC);
2126 (REWRITE_TAC[REAL_ARITH `k2 * (u + v) - k1 + k1 + --k2 * u = k2 * v`]);
2127 (MATCH_MP_TAC REAL_DIV_REFL);
2128 (REWRITE_TAC[REAL_ENTIRE] THEN ASM_REWRITE_TAC[]);
2130 (REWRITE_TAC[VECTOR_ARITH `a / x % u0 + b / x % u1 + d / x % u2 =
2131 (&1 / x) % (a % u0 + b % u1 + d % u2)`]);
2132 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2134 `&1 / (k2 * v) % ((k2 - k1) % u0 + k1 % u1 + (--k2 * u) % v2) = m:real^3 <=>
2135 ((k2 - k1) % u0 + k1 % u1 + (--k2 * u) % v2) = (k2 * v) % m`);
2136 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2137 (MATCH_MP_TAC Collect_geom.CHANGE_SIDE);
2138 (REWRITE_TAC[REAL_ENTIRE] THEN ASM_REWRITE_TAC[]);
2139 (ASM_REWRITE_TAC[VECTOR_ARITH
2140 `(k2 - k1) % u0 + k1 % u1 + (--k2 * u) % v2 = (k2 * v) % m <=>
2141 k1 % (u1 - u0) = k2 % ((u % v2 + v % m) - u0)`]);
2143 (NEW_GOAL `~(u = &0)`);
2144 (UP_ASM_TAC THEN UNDISCH_TAC `u + v = &(SUC 0):real` THEN
2145 REWRITE_TAC[ARITH_RULE `SUC 0 = 1`]);
2148 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3` THEN
2149 EXISTS_TAC `m:real^3`);
2150 (MATCH_MP_TAC (SET_RULE `{a,b,c} SUBSET X /\ d IN X ==> {a,b,d,c} SUBSET X`));
2152 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
2153 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
2155 (EXISTS_TAC `(k2 - k1:real) / (k2 * u)`);
2156 (EXISTS_TAC `k1 / (k2 * u)`);
2157 (EXISTS_TAC `(--k2 * v) / (k2 * u)`);
2159 (REWRITE_TAC[REAL_ARITH `a / x + b / x + c / x = (a+b+c)/ x`]);
2160 (REWRITE_WITH `k2 - k1 + k1 + --k2 * v = k2 * (u + v) - k1 + k1 + --k2 * v`);
2161 (ASM_REWRITE_TAC[ARITH_RULE `SUC 0 = 1`] THEN REAL_ARITH_TAC);
2162 (REWRITE_TAC[REAL_ARITH `k2 * (u + v) - k1 + k1 + --k2 * v = k2 * u`]);
2163 (MATCH_MP_TAC REAL_DIV_REFL);
2164 (REWRITE_TAC[REAL_ENTIRE] THEN ASM_REWRITE_TAC[]);
2166 (REWRITE_TAC[VECTOR_ARITH `a / x % u0 + b / x % u1 + d / x % u2 =
2167 (&1 / x) % (a % u0 + b % u1 + d % u2)`]);
2168 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2170 `&1 / (k2 * u) % ((k2 - k1) % u0 + k1 % u1 + (--k2 * v) % m) = v2:real^3 <=>
2171 ((k2 - k1) % u0 + k1 % u1 + (--k2 * v) % m) = (k2 * u) % v2`);
2172 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2173 (MATCH_MP_TAC Collect_geom.CHANGE_SIDE);
2174 (REWRITE_TAC[REAL_ENTIRE] THEN ASM_REWRITE_TAC[]);
2175 (ASM_REWRITE_TAC[VECTOR_ARITH
2176 `(k2 - k1) % u0 + k1 % u1 + (--k2 * v) % m = (k2 * u) % v2 <=>
2177 k1 % (u1 - u0) = k2 % ((u % v2 + v % m) - u0)`]);
2179 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
2181 (* ========================================================================== *)
2184 (\ul. (((smallest_angle_line (EL 2 ul) (EL 3 ul) u0 u1) - u0)
2186 (norm ((smallest_angle_line (EL 2 ul) (EL 3 ul) u0 u1) - u0)
2187 * norm (u1 - u0)))`);
2189 (ABBREV_TAC `P4 = {(f4:(real^3)list->real) ul |ul | barV V 3 ul /\
2190 ~NULLSET (mcell 4 V ul INTER C) /\
2191 truncate_simplex 1 ul = [u0; u1]}`);
2193 (NEW_GOAL `~(P4 = {}) ==> (?b:real. b IN P4 /\ (!x. x IN P4 ==> x <= b))`);
2195 (MATCH_MP_TAC SUP_FINITE_LEMMA);
2196 (ASM_REWRITE_TAC[]);
2198 (ONCE_REWRITE_TAC [SET_RULE `{f x| x | P x} = {f x | x IN {y | P y}}`]);
2199 (ONCE_REWRITE_TAC [SET_RULE `{f x| x IN s} = {y | ?x. x IN s /\ y = f x}`]);
2200 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
2201 (MATCH_MP_TAC FINITE_SUBSET);
2202 (EXISTS_TAC `{y | ?v0:real^3 v1 u2 u3.
2203 v0 IN (V INTER ball (u0:real^3, &4)) /\
2204 v1 IN (V INTER ball (u0, &4)) /\
2205 u2 IN (V INTER ball (u0, &4)) /\
2206 u3 IN (V INTER ball (u0, &4)) /\
2207 y = [v0; v1; u2; u3]}`);
2209 (MATCH_MP_TAC FINITE_SET_LIST_LEMMA);
2210 (ASM_SIMP_TAC[FINITE_PACK_LEMMA]);
2211 (REWRITE_TAC[SUBSET] THEN ONCE_REWRITE_TAC[IN] THEN REWRITE_TAC[IN_ELIM_THM]);
2213 (NEW_GOAL `?v0 v1 u2 u3. x = [v0; v1; u2; u3:real^3]`);
2214 (MATCH_MP_TAC BARV_3_EXPLICIT);
2215 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2216 (UP_ASM_TAC THEN STRIP_TAC);
2217 (EXISTS_TAC `v0:real^3` THEN EXISTS_TAC `v1:real^3` THEN
2218 EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3`);
2219 (ASM_REWRITE_TAC[]);
2220 (NEW_GOAL `v0 = u0:real^3`);
2221 (REWRITE_WITH `v0 = HD (x:(real^3)list)`);
2222 (ASM_REWRITE_TAC[HD]);
2223 (REWRITE_WITH `u0 = HD (truncate_simplex 1 (x:(real^3)list))`);
2224 (ASM_REWRITE_TAC[HD]);
2225 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
2226 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
2227 (NEW_GOAL `set_of_list x SUBSET ball (u0:real^3,&4)`);
2228 (MATCH_MP_TAC Qzyzmjc.BARV_3_IMP_FINITE_lemma2);
2229 (EXISTS_TAC `V:real^3->bool`);
2230 (ASM_REWRITE_TAC[set_of_list]);
2232 (NEW_GOAL `set_of_list x SUBSET V:real^3->bool`);
2233 (MATCH_MP_TAC Packing3.BARV_SUBSET);
2234 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
2235 (UP_ASM_TAC THEN UP_ASM_TAC THEN ASM_REWRITE_TAC[set_of_list]);
2238 (ABBREV_TAC `d2 = (if (P4 = {}:real->bool) then c
2239 else (@b. b IN P4 /\ (!x. x IN P4 ==> x <= b)))`);
2240 (NEW_GOAL `d2 < &1`);
2243 (ASM_REWRITE_TAC[]);
2244 (NEW_GOAL `?b:real. b IN P4 /\ (!x. x IN P4 ==> x <= b)`);
2246 (UP_ASM_TAC THEN STRIP_TAC);
2247 (ABBREV_TAC `P = (\b:real. b IN P4 /\ (!x. x IN P4 ==> x <= b))`);
2248 (ABBREV_TAC `zz = (@) (P:real->bool)`);
2249 (NEW_GOAL `(P:real->bool) zz`);
2251 (MATCH_MP_TAC SELECT_AX);
2252 (EXISTS_TAC `b':real`);
2253 (EXPAND_TAC "P" THEN ASM_REWRITE_TAC[]);
2254 (UP_ASM_TAC THEN EXPAND_TAC "P" THEN REWRITE_TAC[]);
2255 (EXPAND_TAC "P4" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
2257 (ASM_REWRITE_TAC[]);
2260 (ABBREV_TAC `xx = smallest_angle_line (EL 2 ul) (EL 3 ul) u0 u1`);
2261 (MATCH_MP_TAC REAL_DIV_LT_1_TACTICS);
2263 (MATCH_MP_TAC (REAL_ARITH `&0 <= a /\ ~(a = &0) ==> &0 < a`));
2265 (SIMP_TAC[REAL_LE_MUL; NORM_POS_LE]);
2266 (REWRITE_TAC[REAL_ENTIRE; NORM_EQ_0; VECTOR_ARITH `a - b = vec 0 <=> a = b`]);
2267 (ASM_REWRITE_TAC[]);
2269 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN
2270 REWRITE_TAC[smallest_angle_line; smallest_angle_set]);
2272 (ABBREV_TAC `Q = (\x:real^3. x IN convex hull {EL 2 ul, EL 3 ul} /\
2273 (!y. y IN convex hull {EL 2 ul, EL 3 ul}
2274 ==> ((y - u0) dot (u1 - u0)) /
2275 (norm (y - u0) * norm (u1 - u0)) <=
2276 ((x - u0) dot (u1 - u0)) /
2277 (norm (x - u0) * norm (u1 - u0))))`);
2278 (NEW_GOAL `(Q:real^3->bool) u0`);
2279 (ONCE_ASM_REWRITE_TAC[]);
2280 (MATCH_MP_TAC SELECT_AX);
2283 (MATCH_MP_TAC SMALLEST_ANGLE_LINE_EXISTS);
2285 (ASM_REWRITE_TAC[]);
2287 (NEW_GOAL `?v1 v2 v3. ul = [u0; v1; v2; v3:real^3]`);
2288 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
2289 (MATCH_MP_TAC BARV_3_EXPLICIT);
2290 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2291 (UP_ASM_TAC THEN STRIP_TAC);
2292 (EXISTS_TAC `v1:real^3` THEN
2293 EXISTS_TAC `v2:real^3` THEN EXISTS_TAC `v3:real^3`);
2294 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
2296 (NEW_GOAL `v0 = u0:real^3`);
2297 (REWRITE_WITH `v0 = HD (ul:(real^3)list)`);
2298 (ASM_REWRITE_TAC[HD]);
2299 (REWRITE_WITH `u0 = HD (truncate_simplex 1 (ul:(real^3)list))`);
2300 (ASM_REWRITE_TAC[HD]);
2301 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
2302 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
2303 (REWRITE_TAC[ASSUME `v0 = u0:real^3`]);
2304 (UP_ASM_TAC THEN STRIP_TAC);
2305 (REWRITE_WITH `EL 2 ul = v2:real^3 /\ EL 3 ul = v3`);
2306 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `3 = SUC 2 /\2 = SUC 1 /\ 1 = SUC 0`]);
2309 (UNDISCH_TAC `~NULLSET (mcell 4 V ul INTER C)`);
2311 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2312 (EXISTS_TAC `mcell 4 V ul` THEN STRIP_TAC);
2313 (SIMP_TAC[MCELL_EXPLICIT; mcell4; set_of_list;ARITH_RULE `4 >= 4`;
2314 ASSUME `ul = [u0; v1; v2; v3:real^3]`]);
2317 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2318 (EXISTS_TAC `affine hull {u0, v1, v2, v3:real^3}`);
2320 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
2321 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
2322 (REWRITE_TAC[coplanar]);
2323 (UNDISCH_TAC `u0 IN convex hull {v2, v3:real^3}`);
2324 (REWRITE_TAC[CONVEX_HULL_2; IN; IN_ELIM_THM] THEN STRIP_TAC);
2325 (EXISTS_TAC `v1:real^3` THEN EXISTS_TAC `v2:real^3` THEN
2326 EXISTS_TAC `v3:real^3`);
2327 (MATCH_MP_TAC (SET_RULE `a IN s /\ b SUBSET s ==> (a INSERT b) SUBSET s`));
2328 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
2329 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
2330 (EXISTS_TAC `&0` THEN EXISTS_TAC `u:real` THEN EXISTS_TAC `v:real`);
2332 (UNDISCH_TAC `u + v = &1` THEN REAL_ARITH_TAC);
2333 (UP_ASM_TAC THEN VECTOR_ARITH_TAC);
2334 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
2335 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
2338 (UP_ASM_TAC THEN EXPAND_TAC "Q");
2340 (UNDISCH_TAC `~NULLSET (mcell 4 V ul INTER C)` THEN REWRITE_TAC[]);
2341 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2342 (EXISTS_TAC `mcell 4 V ul`);
2343 (REWRITE_TAC[SET_RULE `A INTER B SUBSET A`]);
2344 (SIMP_TAC[MCELL_EXPLICIT; mcell4; ARITH_RULE `4 >= 4`]);
2346 (NEW_GOAL `?v2 v3. ul = [u0;u1;v2;v3:real^3]`);
2347 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0;v1;v2;v3:real^3]`);
2348 (MATCH_MP_TAC BARV_3_EXPLICIT);
2349 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2350 (UP_ASM_TAC THEN STRIP_TAC);
2351 (EXISTS_TAC `v2:real^3` THEN EXISTS_TAC `v3:real^3`);
2352 (ASM_REWRITE_TAC[]);
2354 (REWRITE_WITH `v0 = u0:real^3`);
2355 (NEW_GOAL `HD (truncate_simplex 1 ul) = u0:real^3`);
2356 (ASM_REWRITE_TAC[HD]);
2357 (NEW_GOAL `HD (truncate_simplex 1 ul) = v0:real^3`);
2358 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
2359 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
2360 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
2362 (REWRITE_WITH `v1 = u1:real^3`);
2363 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = u1:real^3`);
2364 (ASM_REWRITE_TAC[HD; TL]);
2365 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = v1:real^3`);
2366 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
2367 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
2368 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
2369 (ASM_REWRITE_TAC[]);
2370 (UP_ASM_TAC THEN STRIP_TAC);
2372 (ASM_REWRITE_TAC[set_of_list]);
2373 (REWRITE_TAC[GSYM (ASSUME `u0 = (@) (Q:real^3->bool)`)]);
2374 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2375 (EXISTS_TAC `affine hull {u0, u1, v2, v3:real^3}`);
2376 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
2377 (REWRITE_WITH `affine hull {u0, u1, v2, v3} =
2378 affine hull {u1, v2, v3:real^3}`);
2379 (MATCH_MP_TAC AFFINE_HULL_3_INSERT);
2381 (NEW_GOAL `convex hull {EL 2 ul, (EL 3 ul):real^3} SUBSET
2382 affine hull {EL 2 ul, EL 3 ul}`);
2383 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
2384 (NEW_GOAL `affine hull {EL 2 ul, (EL 3 ul):real^3} SUBSET
2385 affine hull {u1, v2, v3}`);
2386 (MATCH_MP_TAC AFFINE_SUBSET_KY_LEMMA);
2387 (ASM_REWRITE_TAC[EL; HD; TL;
2388 ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
2390 (UP_ASM_TAC THEN UP_ASM_TAC THEN
2391 UNDISCH_TAC `u0 IN convex hull {EL 2 ul, (EL 3 ul):real^3}` THEN SET_TAC[]);
2392 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
2393 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
2395 (MATCH_MP_TAC (REAL_ARITH `(a <= b) /\ ~(a = b) ==> a < b`));
2396 (REWRITE_TAC[NORM_CAUCHY_SCHWARZ; NORM_CAUCHY_SCHWARZ_EQ]);
2397 (NEW_GOAL `xx IN convex hull {(EL 2 ul) ,(EL 3 ul):real^3}`);
2398 (MATCH_MP_TAC SMALLEST_ANGLE_IN_CONVEX_HULL);
2399 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3`);
2400 (ASM_REWRITE_TAC[]);
2402 (NEW_GOAL `?v1 v2 v3. ul = [u0; v1; v2; v3:real^3]`);
2403 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
2404 (MATCH_MP_TAC BARV_3_EXPLICIT);
2405 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2406 (UP_ASM_TAC THEN STRIP_TAC);
2407 (EXISTS_TAC `v1:real^3` THEN
2408 EXISTS_TAC `v2:real^3` THEN EXISTS_TAC `v3:real^3`);
2409 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
2411 (NEW_GOAL `v0 = u0:real^3`);
2412 (REWRITE_WITH `v0 = HD (ul:(real^3)list)`);
2413 (ASM_REWRITE_TAC[HD]);
2414 (REWRITE_WITH `u0 = HD (truncate_simplex 1 (ul:(real^3)list))`);
2415 (ASM_REWRITE_TAC[HD]);
2416 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
2417 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
2418 (REWRITE_TAC[ASSUME `v0 = u0:real^3`]);
2419 (UP_ASM_TAC THEN STRIP_TAC);
2420 (REWRITE_WITH `EL 2 ul = v2:real^3 /\ EL 3 ul = v3`);
2421 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `3 = SUC 2 /\2 = SUC 1 /\ 1 = SUC 0`]);
2424 (UNDISCH_TAC `~NULLSET (mcell 4 V ul INTER C)`);
2426 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2427 (EXISTS_TAC `mcell 4 V ul` THEN STRIP_TAC);
2428 (SIMP_TAC[MCELL_EXPLICIT; mcell4; set_of_list;ARITH_RULE `4 >= 4`;
2429 ASSUME `ul = [u0; v1; v2; v3:real^3]`]);
2432 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2433 (EXISTS_TAC `affine hull {u0, v1, v2, v3:real^3}`);
2435 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
2436 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
2437 (REWRITE_TAC[coplanar]);
2438 (UNDISCH_TAC `u0 IN convex hull {v2, v3:real^3}`);
2439 (REWRITE_TAC[CONVEX_HULL_2; IN; IN_ELIM_THM] THEN STRIP_TAC);
2440 (EXISTS_TAC `v1:real^3` THEN EXISTS_TAC `v2:real^3` THEN
2441 EXISTS_TAC `v3:real^3`);
2442 (MATCH_MP_TAC (SET_RULE `a IN s /\ b SUBSET s ==> (a INSERT b) SUBSET s`));
2443 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
2444 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
2445 (EXISTS_TAC `&0` THEN EXISTS_TAC `u:real` THEN EXISTS_TAC `v:real`);
2447 (UNDISCH_TAC `u + v = &1` THEN REAL_ARITH_TAC);
2448 (UP_ASM_TAC THEN VECTOR_ARITH_TAC);
2449 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
2450 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
2455 (UNDISCH_TAC `~NULLSET (mcell 4 V ul INTER C)` THEN REWRITE_TAC[]);
2456 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2457 (EXISTS_TAC `mcell 4 V ul`);
2458 (REWRITE_TAC[SET_RULE `A INTER B SUBSET A`]);
2459 (SIMP_TAC[MCELL_EXPLICIT; mcell4; ARITH_RULE `4 >= 4`]);
2461 (NEW_GOAL `?v2 v3. ul = [u0;u1;v2;v3:real^3]`);
2462 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0;v1;v2;v3:real^3]`);
2463 (MATCH_MP_TAC BARV_3_EXPLICIT);
2464 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2465 (UP_ASM_TAC THEN STRIP_TAC);
2466 (EXISTS_TAC `v2:real^3` THEN EXISTS_TAC `v3:real^3`);
2467 (ASM_REWRITE_TAC[]);
2469 (REWRITE_WITH `v0 = u0:real^3`);
2470 (NEW_GOAL `HD (truncate_simplex 1 ul) = u0:real^3`);
2471 (ASM_REWRITE_TAC[HD]);
2472 (NEW_GOAL `HD (truncate_simplex 1 ul) = v0:real^3`);
2473 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
2474 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
2475 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
2477 (REWRITE_WITH `v1 = u1:real^3`);
2478 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = u1:real^3`);
2479 (ASM_REWRITE_TAC[HD; TL]);
2480 (NEW_GOAL `HD (TL(truncate_simplex 1 ul)) = v1:real^3`);
2481 (REWRITE_TAC[ASSUME `ul = [v0; v1; v2; v3:real^3]`;
2482 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
2483 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
2484 (UP_ASM_TAC THEN STRIP_TAC);
2485 (ASM_REWRITE_TAC[set_of_list]);
2487 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2488 (EXISTS_TAC `affine hull {u0, u1, v2, v3:real^3}`);
2489 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
2490 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
2491 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
2492 (ABBREV_TAC `k1 = norm (xx - u0:real^3)`);
2493 (ABBREV_TAC `k2 = norm (u1 - u0:real^3)`);
2494 (UNDISCH_TAC `xx IN convex hull {EL 2 ul,(EL 3 ul):real^3}`);
2495 (ASM_REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1/\ 1 = SUC 0`;
2496 CONVEX_HULL_2; IN; IN_ELIM_THM] THEN STRIP_TAC);
2497 (UNDISCH_TAC `k1 % (u1 - u0) = k2 % (xx - u0:real^3)`);
2498 (ASM_REWRITE_TAC[]);
2502 (REWRITE_TAC[coplanar]);
2503 (NEW_GOAL `~(k2 = &0)`);
2505 (REWRITE_TAC[NORM_EQ_0; VECTOR_ARITH `a - b = vec 0 <=> b = a`]);
2506 (ASM_REWRITE_TAC[]);
2508 (ASM_CASES_TAC `~(v = &0)`);
2509 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3` THEN
2510 EXISTS_TAC `v2:real^3`);
2511 (MATCH_MP_TAC (SET_RULE `{a,b,c} SUBSET X /\ d IN X ==> {a,b,c,d} SUBSET X`));
2513 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
2514 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
2515 (EXISTS_TAC `(k2 - k1:real) / (k2 * v)`);
2516 (EXISTS_TAC `k1 / (k2 * v)`);
2517 (EXISTS_TAC `(--k2 * u) / (k2 * v)`);
2519 (REWRITE_TAC[REAL_ARITH `a / x + b / x + c / x = (a+b+c)/ x`]);
2520 (REWRITE_WITH `k2 - k1 + k1 + --k2 * u = k2 * (u + v) - k1 + k1 + --k2 * u`);
2521 (ASM_REWRITE_TAC[ARITH_RULE `SUC 0 = 1`] THEN REAL_ARITH_TAC);
2522 (REWRITE_TAC[REAL_ARITH `k2 * (u + v) - k1 + k1 + --k2 * u = k2 * v`]);
2523 (MATCH_MP_TAC REAL_DIV_REFL);
2524 (REWRITE_TAC[REAL_ENTIRE] THEN ASM_REWRITE_TAC[]);
2526 (REWRITE_TAC[VECTOR_ARITH `a / x % u0 + b / x % u1 + d / x % u2 =
2527 (&1 / x) % (a % u0 + b % u1 + d % u2)`]);
2528 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2530 `&1 / (k2 * v) % ((k2 - k1) % u0 + k1 % u1 + (--k2 * u) % v2) = v3:real^3 <=>
2531 ((k2 - k1) % u0 + k1 % u1 + (--k2 * u) % v2) = (k2 * v) % v3`);
2532 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2533 (MATCH_MP_TAC Collect_geom.CHANGE_SIDE);
2534 (REWRITE_TAC[REAL_ENTIRE] THEN ASM_REWRITE_TAC[]);
2535 (ASM_REWRITE_TAC[VECTOR_ARITH
2536 `(k2 - k1) % u0 + k1 % u1 + (--k2 * u) % v2 = (k2 * v) % v3 <=>
2537 k1 % (u1 - u0) = k2 % ((u % v2 + v % v3) - u0)`]);
2539 (NEW_GOAL `~(u = &0)`);
2540 (UP_ASM_TAC THEN UNDISCH_TAC `u + v = &(SUC 0):real` THEN
2541 REWRITE_TAC[ARITH_RULE `SUC 0 = 1`]);
2544 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3` THEN
2545 EXISTS_TAC `v3:real^3`);
2546 (MATCH_MP_TAC (SET_RULE `{a,b,c} SUBSET X /\ d IN X ==> {a,b,d,c} SUBSET X`));
2548 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
2549 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
2551 (EXISTS_TAC `(k2 - k1:real) / (k2 * u)`);
2552 (EXISTS_TAC `k1 / (k2 * u)`);
2553 (EXISTS_TAC `(--k2 * v) / (k2 * u)`);
2555 (REWRITE_TAC[REAL_ARITH `a / x + b / x + c / x = (a+b+c)/ x`]);
2556 (REWRITE_WITH `k2 - k1 + k1 + --k2 * v = k2 * (u + v) - k1 + k1 + --k2 * v`);
2557 (ASM_REWRITE_TAC[ARITH_RULE `SUC 0 = 1`] THEN REAL_ARITH_TAC);
2558 (REWRITE_TAC[REAL_ARITH `k2 * (u + v) - k1 + k1 + --k2 * v = k2 * u`]);
2559 (MATCH_MP_TAC REAL_DIV_REFL);
2560 (REWRITE_TAC[REAL_ENTIRE] THEN ASM_REWRITE_TAC[]);
2562 (REWRITE_TAC[VECTOR_ARITH `a / x % u0 + b / x % u1 + d / x % u2 =
2563 (&1 / x) % (a % u0 + b % u1 + d % u2)`]);
2564 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2566 `&1 / (k2 * u) % ((k2 - k1) % u0 + k1 % u1 + (--k2 * v) % v3) = v2:real^3 <=>
2567 ((k2 - k1) % u0 + k1 % u1 + (--k2 * v) % v3) = (k2 * u) % v2`);
2568 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2569 (MATCH_MP_TAC Collect_geom.CHANGE_SIDE);
2570 (REWRITE_TAC[REAL_ENTIRE] THEN ASM_REWRITE_TAC[]);
2571 (ASM_REWRITE_TAC[VECTOR_ARITH
2572 `(k2 - k1) % u0 + k1 % u1 + (--k2 * v) % m = (k2 * u) % v2 <=>
2573 k1 % (u1 - u0) = k2 % ((u % v2 + v % m) - u0)`]);
2574 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
2576 (* ========================================================================== *)
2578 (ABBREV_TAC `d = max c (max d1 d2)`);
2579 (NEW_GOAL `d < &1`);
2580 (UNDISCH_TAC `d2 < &1` THEN UNDISCH_TAC `d1 < &1` THEN
2581 UNDISCH_TAC `&0 < c /\ c < &1`);
2582 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
2584 (* ========================================================================== *)
2586 (ABBREV_TAC `D = ball (u0:real^3,r) INTER rcone_gt u0 u1 d`);
2587 (NEW_GOAL `D SUBSET C:real^3->bool`);
2588 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
2589 (MATCH_MP_TAC (SET_RULE
2590 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
2592 (MATCH_MP_TAC SUBSET_BALL);
2593 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
2594 (MATCH_MP_TAC RCONE_GT_SUBSET);
2595 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
2597 (NEW_GOAL `!X. mcell_set V X /\ ~NULLSET (X INTER D)
2602 truncate_simplex 1 vl = [u0; u1])`);
2604 (FIRST_ASSUM MATCH_MP_TAC);
2605 (ASM_REWRITE_TAC[]);
2607 (UNDISCH_TAC `~NULLSET (X INTER D)`);
2608 (REWRITE_TAC[] THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2609 (EXISTS_TAC `X INTER C:real^3->bool`);
2610 (ASM_REWRITE_TAC[] THEN UNDISCH_TAC `D SUBSET C:real^3->bool`);
2613 (* ========================================================================= *)
2615 (NEW_GOAL `D = conic_cap (u0:real^3) u1 r d`);
2616 (EXPAND_TAC "D" THEN REWRITE_TAC[conic_cap; NORMBALL_BALL]);
2618 (NEW_GOAL `!X. mcell_set V X /\ ~NULLSET (X INTER D) ==>
2619 vol (X INTER D) = vol (D) * (dihX V X (u0,u1)) / (&2 * pi)`);
2625 truncate_simplex 1 vl = [u0; u1]`);
2626 (FIRST_ASSUM MATCH_MP_TAC);
2627 (ASM_REWRITE_TAC[]);
2628 (UP_ASM_TAC THEN REPEAT STRIP_TAC);
2630 (* ========================================================================= *)
2632 (* ========================================================================= *)
2634 (ASM_CASES_TAC `k = 2`);
2635 (ABBREV_TAC `m = mxi V vl`);
2636 (ABBREV_TAC `s3 = omega_list_n V vl 3`);
2637 (ABBREV_TAC `L = aff_ge{u0, u1} {m, s3:real^3}`);
2639 (REWRITE_WITH `vol (X INTER D) = vol (L INTER D)`);
2641 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell2]);
2644 (NEW_GOAL `?v0 v1 v2 v3. vl = [v0;v1;v2;v3:real^3]`);
2645 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
2646 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2647 (UP_ASM_TAC THEN STRIP_TAC);
2649 (REWRITE_WITH `HD vl = u0 /\ HD (TL vl) = u1:real^3`);
2650 (REWRITE_WITH `(HD vl):real^3 = HD (truncate_simplex 1 vl)`);
2651 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2652 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
2653 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
2654 (ASM_REWRITE_TAC[HD; TL]);
2655 (NEW_GOAL `HD (TL(truncate_simplex 1 vl)) = u1:real^3`);
2656 (ASM_REWRITE_TAC[HD; TL]);
2657 (NEW_GOAL `HD (TL(truncate_simplex 1 vl)) = v1:real^3`);
2658 (REWRITE_TAC[ASSUME `vl = [v0; v1; v2; v3:real^3]`;
2659 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
2660 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
2663 (REWRITE_TAC [SET_RULE `(A INTER B INTER C) INTER D = C INTER D
2664 <=> (!x. x IN C INTER D ==> x IN A /\ x IN B)`]);
2666 (REPEAT GEN_TAC THEN STRIP_TAC);
2667 (NEW_GOAL `x:real^3 IN D`);
2668 (UP_ASM_TAC THEN UNDISCH_TAC `D = conic_cap (u0:real^3) u1 r d`);
2670 (UP_ASM_TAC THEN EXPAND_TAC "D" THEN STRIP_TAC);
2671 (NEW_GOAL `x:real^3 IN rcone_gt u0 u1 a'`);
2672 (NEW_GOAL `rcone_gt (u0:real^3) u1 d SUBSET rcone_gt u0 u1 c`);
2673 (MATCH_MP_TAC RCONE_GT_SUBSET);
2674 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
2675 (UP_ASM_TAC THEN UP_ASM_TAC THEN UNDISCH_TAC
2676 `rcone_gt (u0:real^3) u1 c SUBSET W INTER rcone_gt u0 u1 a'`);
2679 (UP_ASM_TAC THEN SET_TAC[RCONE_GT_SUBSET_RCONE_GE]);
2681 (* ========================================================================== *)
2682 (UP_ASM_TAC THEN REWRITE_TAC[rcone_ge; rconesgn; rcone_gt; IN; IN_ELIM_THM]);
2685 (ABBREV_TAC `y = u0 + proj_point (u1 - u0:real^3) (x - u0)`);
2686 (NEW_GOAL `orthogonal (x - y) (u1 - u0:real^3)`);
2687 (REWRITE_WITH `x - y = (x - u0) - proj_point (u1 - u0) (x - u0:real^3)`);
2688 (EXPAND_TAC "y" THEN VECTOR_ARITH_TAC);
2689 (REWRITE_TAC[GSYM Marchal_cells_2_new.projection_proj_point]);
2690 (REWRITE_TAC[orthogonal; Packing3.PROJECTION_ORTHOGONAL]);
2692 (NEW_GOAL `norm (x - u0) pow 2 = norm (y - u0) pow 2 + norm (x - y:real^3) pow 2`);
2693 (MATCH_MP_TAC PYTHAGORAS);
2694 (REWRITE_TAC[orthogonal]);
2695 (ONCE_REWRITE_TAC[VECTOR_ARITH `(a - b) dot c = --(c dot (b - a))`]);
2696 (REWRITE_WITH `y - u0 = proj_point (u1 - u0) (x - u0:real^3)`);
2697 (EXPAND_TAC "y" THEN REWRITE_TAC[VECTOR_ARITH `(a + b) - a:real^3 = b`]);
2698 (REWRITE_TAC[PRO_EXP; DOT_RMUL]);
2699 (UP_ASM_TAC THEN REWRITE_TAC[orthogonal] THEN STRIP_TAC);
2700 (ASM_REWRITE_TAC[]);
2703 (NEW_GOAL `norm (x - u1) pow 2 = norm (y - u1) pow 2 + norm (x - y:real^3) pow 2`);
2704 (MATCH_MP_TAC PYTHAGORAS);
2705 (REWRITE_TAC[orthogonal]);
2706 (ONCE_REWRITE_TAC[VECTOR_ARITH `(a - b) dot c = c dot (a - b)`]);
2707 (REWRITE_WITH `u1 - y = (u1 - u0) - proj_point (u1 - u0) (x - u0:real^3)`);
2708 (EXPAND_TAC "y" THEN VECTOR_ARITH_TAC);
2709 (REWRITE_TAC[PRO_EXP; VECTOR_ARITH `x - a % x = (&1 - a) % x`]);
2710 (REWRITE_TAC[DOT_RMUL] THEN DEL_TAC);
2711 (UP_ASM_TAC THEN REWRITE_TAC[orthogonal] THEN STRIP_TAC);
2712 (ASM_REWRITE_TAC[]);
2715 (MP_TAC (ASSUME `(x - u0:real^3) dot (u1 - u0) >
2716 dist (x,u0) * dist (u1,u0) * a'`));
2717 (REWRITE_WITH `(x - u0) dot (u1 - u0) =
2718 (x - y) dot (u1 - u0) + (y - u0) dot (u1 - u0:real^3)`);
2720 (REWRITE_WITH `(x - u1) dot (u0 - u1) =
2721 (x - y) dot (u0 - u1) + (y - u1) dot (u0 - u1:real^3)`);
2723 (REWRITE_WITH `(x - y) dot (u1 - u0:real^3) = &0`);
2724 (ASM_REWRITE_TAC[GSYM orthogonal]);
2725 (REWRITE_WITH `(x - y) dot (u0 - u1:real^3) = &0`);
2726 (ONCE_REWRITE_TAC[VECTOR_ARITH `a dot (u0 - u1) = --(a dot (u1 - u0))`]);
2727 (REWRITE_TAC[REAL_ARITH `--a = &0 <=> a = &0`]);
2728 (ASM_REWRITE_TAC[GSYM orthogonal]);
2729 (REWRITE_TAC[REAL_ARITH `&0 + a = a`]);
2732 (NEW_GOAL `(y - u0) dot (u1 - u0) = norm (y - u0) * norm (u1 - u0:real^3)`);
2733 (REWRITE_TAC[NORM_CAUCHY_SCHWARZ_EQ]);
2734 (REWRITE_WITH `y - u0 = proj_point (u1 - u0) (x - u0:real^3)`);
2735 (EXPAND_TAC "y" THEN REWRITE_TAC[VECTOR_ARITH `(a + b) - a:real^3 = b`]);
2736 (REWRITE_TAC[PRO_EXP; NORM_MUL; VECTOR_MUL_ASSOC]);
2737 (MATCH_MP_TAC (MESON[] `a = b ==> a % x = b % x`));
2738 (REWRITE_TAC[REAL_ARITH `a * norm b = norm b * a`]);
2739 (MATCH_MP_TAC (MESON[] `a = b ==> x * a = x * b`));
2740 (REWRITE_TAC[REAL_ABS_REFL]);
2741 (MATCH_MP_TAC REAL_LE_DIV);
2742 (REWRITE_TAC[DOT_POS_LE]);
2744 (REWRITE_WITH `(x - u0) dot (u1 - u0) =
2745 (x - y) dot (u1 - u0) + (y - u0) dot (u1 - u0:real^3)`);
2747 (REWRITE_WITH `(x - y) dot (u1 - u0:real^3) = &0`);
2748 (ASM_REWRITE_TAC[GSYM orthogonal]);
2749 (REWRITE_TAC[REAL_ARITH `&0 + a = a`]);
2751 (NEW_GOAL `y IN convex hull {u0, u1:real^3}`);
2752 (NEW_GOAL `y IN affine hull {u0, u1:real^3}`);
2753 (REWRITE_TAC[AFFINE_HULL_2; IN; IN_ELIM_THM]);
2754 (EXPAND_TAC "y" THEN REWRITE_TAC[PRO_EXP]);
2755 (ABBREV_TAC `rtemp = ((x - u0) dot (u1 - u0)) / ((u1 - u0) dot (u1 -
2757 (EXISTS_TAC `&1 - rtemp` THEN EXISTS_TAC `rtemp:real`);
2761 (UP_ASM_TAC THEN REWRITE_TAC[IN; AFFINE_HULL_2; CONVEX_HULL_2; IN_ELIM_THM]);
2763 (EXISTS_TAC `u:real` THEN EXISTS_TAC `v:real`);
2764 (ASM_REWRITE_TAC[]);
2766 (NEW_GOAL `y - u0 = v % (u1 - u0:real^3)`);
2767 (NEW_GOAL `y - u0 = y - (u + v) % u0:real^3`);
2768 (REWRITE_TAC[ASSUME `u + v = &1`; VECTOR_MUL_LID]);
2769 (UP_ASM_TAC THEN REWRITE_WITH `y - (u + v) % u0 = v % (u1 - u0:real^3)`);
2770 (REWRITE_TAC[ASSUME `y = u % u0 + v % u1:real^3`] THEN VECTOR_ARITH_TAC);
2772 (ASM_CASES_TAC `u < &0`);
2774 (NEW_GOAL `norm (y - u0) <= norm (x - u0:real^3)`);
2775 (MATCH_MP_TAC Tactics_jordan.REAL_POW_2_LE);
2776 (REWRITE_TAC[NORM_POS_LE; ASSUME
2777 `norm (x - u0:real^3) pow 2 = norm (y - u0) pow 2 + norm (x - y) pow 2`;
2778 REAL_ARITH `a <= a + b <=> &0 <= b`; REAL_LE_POW_2]);
2779 (NEW_GOAL `norm (x - u0:real^3) < &1`);
2780 (REWRITE_TAC[GSYM dist] THEN ONCE_REWRITE_TAC[DIST_SYM] THEN
2781 REWRITE_TAC[GSYM IN_BALL]);
2782 (NEW_GOAL `ball (u0:real^3, r) SUBSET ball (u0, &1)`);
2783 (MATCH_MP_TAC SUBSET_BALL);
2784 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
2785 (UP_ASM_TAC THEN UNDISCH_TAC
2786 `x IN ball (u0:real^3,r) INTER rcone_gt u0 u1 d` THEN SET_TAC[]);
2788 (NEW_GOAL `norm (y - u0) = v * norm (u1:real^3 - u0)`);
2789 (ASM_REWRITE_TAC[NORM_MUL]);
2791 (REWRITE_WITH `abs v = v`);
2792 (REWRITE_TAC[REAL_ABS_REFL]);
2793 (UNDISCH_TAC `u + v = &1` THEN UNDISCH_TAC `u < &0` THEN REAL_ARITH_TAC);
2794 (NEW_GOAL `&2 <= norm (u1 - u0:real^3)`);
2795 (REWRITE_TAC[GSYM dist]);
2796 (UNDISCH_TAC `packing (V:real^3->bool)` THEN REWRITE_TAC[packing]);
2798 (FIRST_ASSUM MATCH_MP_TAC);
2799 (ASM_REWRITE_TAC[]);
2800 (ONCE_REWRITE_TAC[MESON[IN] `V x <=> x IN (V:real^3->bool)`]);
2801 (ASM_REWRITE_TAC[]);
2803 (NEW_GOAL `v * &2 <= v * norm (u1 - u0:real^3)`);
2804 (REWRITE_TAC[REAL_ARITH `a * b <= a * c <=> &0 <= a * (c - b)`]);
2805 (MATCH_MP_TAC REAL_LE_MUL);
2806 (UNDISCH_TAC `u + v = &1` THEN UNDISCH_TAC `u < &0` THEN UP_ASM_TAC);
2809 (NEW_GOAL `&1 < v`);
2810 (UNDISCH_TAC `u + v = &1` THEN UNDISCH_TAC `u < &0` THEN REAL_ARITH_TAC);
2811 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN
2812 UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
2813 (UP_ASM_TAC THEN MESON_TAC[]);
2815 (ASM_CASES_TAC `v < &0`);
2817 (NEW_GOAL `(y - u0) dot (u1 - u0:real^3) <= &0`);
2818 (ASM_REWRITE_TAC[DOT_LMUL; REAL_ARITH `a * b <= &0 <=> &0 <= (--a) * b`]);
2819 (MATCH_MP_TAC REAL_LE_MUL);
2820 (REWRITE_TAC[DOT_POS_LE]);
2821 (UP_ASM_TAC THEN REAL_ARITH_TAC);
2823 (NEW_GOAL `&0 <= dist (x,u0) * dist (u1,u0:real^3) * a'`);
2824 (MATCH_MP_TAC REAL_LE_MUL);
2825 (REWRITE_TAC[DIST_POS_LE]);
2826 (MATCH_MP_TAC REAL_LE_MUL);
2827 (REWRITE_TAC[DIST_POS_LE]);
2828 (EXPAND_TAC "a'" THEN MATCH_MP_TAC REAL_LE_DIV);
2830 (REWRITE_TAC[HL_2]);
2831 (MATCH_MP_TAC REAL_LE_MUL);
2832 (REWRITE_TAC[DIST_POS_LE] THEN REAL_ARITH_TAC);
2833 (MATCH_MP_TAC SQRT_POS_LE THEN REAL_ARITH_TAC);
2834 (UP_ASM_TAC THEN UP_ASM_TAC THEN UNDISCH_TAC
2835 `(y - u0:real^3) dot (u1 - u0) > dist (x,u0) * dist (u1,u0) * a'`);
2837 (UP_ASM_TAC THEN MESON_TAC[]);
2838 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
2840 (NEW_GOAL `&0 <= dist (x,u0) * dist (u1,u0:real^3) * a'`);
2841 (MATCH_MP_TAC REAL_LE_MUL);
2842 (REWRITE_TAC[DIST_POS_LE]);
2843 (MATCH_MP_TAC REAL_LE_MUL);
2844 (REWRITE_TAC[DIST_POS_LE]);
2845 (EXPAND_TAC "a'" THEN MATCH_MP_TAC REAL_LE_DIV);
2847 (REWRITE_TAC[HL_2]);
2848 (MATCH_MP_TAC REAL_LE_MUL);
2849 (REWRITE_TAC[DIST_POS_LE] THEN REAL_ARITH_TAC);
2850 (MATCH_MP_TAC SQRT_POS_LE THEN REAL_ARITH_TAC);
2851 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
2853 (NEW_GOAL `(y - u1) dot (u0 - u1) = norm (y - u1) * norm (u0 - u1:real^3)`);
2854 (REWRITE_TAC[NORM_CAUCHY_SCHWARZ_EQ]);
2855 (REWRITE_WITH `y - u1 = proj_point (u1 - u0) (x - u0:real^3) - (u1 - u0)`);
2856 (EXPAND_TAC "y" THEN VECTOR_ARITH_TAC);
2857 (REWRITE_TAC[PRO_EXP; VECTOR_ARITH `x % a - a = (x - &1) % a`; NORM_MUL;
2861 (((x - u0) dot (u1 - u0)) / ((u1 - u0) dot (u1 - u0)) - &1)) % (u1 - u0) =
2862 (norm (u0 - u1:real^3) *
2863 (&1 - ((x - u0) dot (u1 - u0)) / ((u1 - u0) dot (u1 - u0)))) % (u0 - u1)`);
2865 (MATCH_MP_TAC (MESON[] `a = b ==> a % x = b % x`));
2866 (REWRITE_TAC[REAL_ARITH `a * norm b = norm b * a`]);
2867 (REWRITE_TAC[NORM_ARITH `norm (a - b) = norm (b - a)`]);
2868 (MATCH_MP_TAC (MESON[] `a = b ==> x * a = x * b`));
2869 (REWRITE_TAC[REAL_ARITH `abs (x - &1) = abs (&1 - x)`]);
2870 (REWRITE_TAC[REAL_ABS_REFL; REAL_ARITH `&0 <= a - b <=> b <= a`]);
2871 (REWRITE_WITH `((x - u0) dot (u1 - u0)) / ((u1 - u0) dot (u1 - u0)) <= &1
2872 <=> ((x - u0) dot (u1 - u0)) <= &1 * ((u1 - u0) dot (u1 - u0:real^3))`);
2873 (MATCH_MP_TAC REAL_LE_LDIV_EQ);
2874 (REWRITE_TAC[DOT_POS_LT; VECTOR_ARITH `a - b = vec 0 <=> b = a`]);
2875 (ASM_REWRITE_TAC[]);
2876 (NEW_GOAL `(x - u0) dot (u1 - u0) <= norm (x - u0) * norm (u1 - u0:real^3)`);
2877 (REWRITE_TAC[NORM_CAUCHY_SCHWARZ]);
2879 (NEW_GOAL `norm (x - u0) * norm (u1 - u0) <= &1 * norm (u1 - u0:real^3)`);
2880 (REWRITE_TAC[REAL_ARITH `a * x <= b * x <=> &0 <= (b - a) * x`]);
2881 (MATCH_MP_TAC REAL_LE_MUL);
2882 (REWRITE_TAC[NORM_POS_LE; REAL_ARITH `&0 <= a - b <=> b <= a`; GSYM dist]);
2883 (MATCH_MP_TAC (REAL_ARITH `a < x ==> a <= x`));
2884 (ONCE_REWRITE_TAC[DIST_SYM] THEN REWRITE_TAC[GSYM IN_BALL]);
2885 (NEW_GOAL `ball (u0:real^3, r) SUBSET ball (u0, &1)`);
2886 (MATCH_MP_TAC SUBSET_BALL);
2887 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
2888 (UP_ASM_TAC THEN UNDISCH_TAC
2889 `x IN ball (u0:real^3,r) INTER rcone_gt u0 u1 d` THEN SET_TAC[]);
2890 (REWRITE_TAC[GSYM NORM_POW_2; REAL_ARITH `&1 * a pow 2 = a * a`]);
2891 (NEW_GOAL `&1 * norm (u1 - u0) <= norm (u1 - u0) * norm (u1 - u0:real^3)`);
2892 (REWRITE_TAC[REAL_ARITH `a * x <= b * x <=> &0 <= (b - a) * x`]);
2893 (MATCH_MP_TAC REAL_LE_MUL);
2894 (REWRITE_TAC[NORM_POS_LE; REAL_ARITH `&0 <= a - b <=> b <= a`; GSYM dist]);
2895 (MATCH_MP_TAC (REAL_ARITH `&2 <= x ==> &1 <= x`));
2896 (UNDISCH_TAC `packing (V:real^3->bool)` THEN REWRITE_TAC[packing]);
2898 (FIRST_ASSUM MATCH_MP_TAC);
2899 (ASM_REWRITE_TAC[]);
2900 (ONCE_REWRITE_TAC[MESON[IN] `V x <=> x IN (V:real^3->bool)`]);
2901 (ASM_REWRITE_TAC[]);
2902 (UNDISCH_TAC `(x - u0:real^3) dot (u1 - u0) <=
2903 norm (x - u0) * norm (u1 - u0)` THEN
2904 UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
2905 (ASM_REWRITE_TAC[dist]);
2906 (REWRITE_TAC[REAL_ARITH `a * b >= x * b * c <=> &0 <= b * (a - x * c)`]);
2907 (MATCH_MP_TAC REAL_LE_MUL);
2908 (REWRITE_TAC[NORM_POS_LE; REAL_ARITH `&0 <= a - b <=> b <= a`]);
2909 (MATCH_MP_TAC Tactics_jordan.REAL_POW_2_LE);
2912 (MATCH_MP_TAC REAL_LE_MUL);
2913 (REWRITE_TAC[NORM_POS_LE]);
2914 (EXPAND_TAC "a'" THEN MATCH_MP_TAC REAL_LE_DIV);
2916 (REWRITE_TAC[HL_2]);
2917 (MATCH_MP_TAC REAL_LE_MUL);
2918 (REWRITE_TAC[DIST_POS_LE] THEN REAL_ARITH_TAC);
2919 (MATCH_MP_TAC SQRT_POS_LE THEN REAL_ARITH_TAC);
2920 (REWRITE_TAC[NORM_POS_LE; REAL_ARITH `(a * b) pow 2 = a pow 2 * b pow 2`]);
2921 (ASM_REWRITE_TAC[]);
2922 (REWRITE_TAC[REAL_ARITH `(a + b) * x <= a <=> b * x <= (&1 - x) * a`]);
2924 (UNDISCH_TAC `(y - u0) dot (u1 - u0) > dist (x,u0) * dist (u1,u0:real^3) * a'`);
2925 (ASM_REWRITE_TAC[dist]);
2926 (REWRITE_TAC[REAL_ARITH `a * b > x * b * c <=> &0 < b * (a - x * c)`]);
2927 (REWRITE_TAC[REAL_MUL_POS_LT]);
2928 (REWRITE_WITH `~(norm (u1 - u0:real^3) < &0 /\
2929 norm (y - u0) - norm (x - u0) * a' < &0)`);
2930 (NEW_GOAL `&0 <= norm (u1 - u0:real^3)`);
2931 (REWRITE_TAC[NORM_POS_LE]);
2932 (UP_ASM_TAC THEN REAL_ARITH_TAC);
2933 (REWRITE_TAC[REAL_ARITH `&0 < a - b <=> b < a`]);
2934 (REWRITE_WITH `norm (x - u0) * a' < norm (y - u0:real^3) <=>
2935 (norm (x - u0) * a') pow 2 < norm (y - u0) pow 2`);
2936 (MATCH_MP_TAC Pack1.bp_bdt);
2938 (MATCH_MP_TAC REAL_LE_MUL);
2939 (REWRITE_TAC[NORM_POS_LE]);
2940 (EXPAND_TAC "a'" THEN MATCH_MP_TAC REAL_LE_DIV);
2942 (REWRITE_TAC[HL_2]);
2943 (MATCH_MP_TAC REAL_LE_MUL);
2944 (REWRITE_TAC[DIST_POS_LE] THEN REAL_ARITH_TAC);
2945 (MATCH_MP_TAC SQRT_POS_LE THEN REAL_ARITH_TAC);
2946 (REWRITE_TAC[NORM_POS_LE]);
2948 (ASM_REWRITE_TAC[REAL_ARITH `(a * b) pow 2 = a pow 2 * b pow 2`]);
2949 (REWRITE_TAC[REAL_ARITH `(a + b) * x < a <=> b * x < (&1 - x) * a`]);
2952 (NEW_GOAL `(&1 - a' pow 2) * norm (y - u0) pow 2 <=
2953 (&1 - a' pow 2) * norm (y - u1:real^3) pow 2`);
2954 (REWRITE_TAC[REAL_ARITH `a * x <= a * y <=> &0 <= a * (y - x)`]);
2955 (MATCH_MP_TAC REAL_LE_MUL);
2957 (REWRITE_TAC[REAL_ARITH `&0 <= &1 - b <=> b <= &1 pow 2`]);
2958 (REWRITE_WITH `a' pow 2 <= &1 pow 2 <=> a' <= &1`);
2959 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2960 (MATCH_MP_TAC Collect_geom.POW2_COND);
2961 (REWRITE_TAC[REAL_ARITH `&0 <= &1`]);
2962 (EXPAND_TAC "a'" THEN MATCH_MP_TAC REAL_LE_DIV);
2964 (REWRITE_TAC[HL_2]);
2965 (MATCH_MP_TAC REAL_LE_MUL);
2966 (REWRITE_TAC[DIST_POS_LE] THEN REAL_ARITH_TAC);
2967 (MATCH_MP_TAC SQRT_POS_LE THEN REAL_ARITH_TAC);
2970 (MATCH_MP_TAC REAL_DIV_LE_1_TACTICS);
2971 (ASM_SIMP_TAC[SQRT_POS_LT; REAL_ARITH `&0 < &2`]);
2972 (UNDISCH_TAC `hl [u0; u1:real^3] < sqrt (&2)` THEN REAL_ARITH_TAC);
2973 (NEW_GOAL `norm (x - u0) pow 2 <= norm (x - u1:real^3) pow 2`);
2974 (REWRITE_WITH `norm (x - u0) pow 2 <= norm (x - u1:real^3) pow 2 <=>
2975 norm (x - u0) <= norm (x - u1:real^3)`);
2976 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2977 (MATCH_MP_TAC Collect_geom.POW2_COND);
2978 (REWRITE_TAC[NORM_POS_LE]);
2979 (MATCH_MP_TAC (REAL_ARITH `&2 * x <= x + y ==> x <= y`));
2980 (REWRITE_TAC[GSYM dist]);
2982 (NEW_GOAL `dist (x, u0:real^3) < &1`);
2983 (ONCE_REWRITE_TAC[DIST_SYM] THEN REWRITE_TAC[GSYM IN_BALL]);
2984 (NEW_GOAL `ball (u0:real^3, r) SUBSET ball (u0, &1)`);
2985 (MATCH_MP_TAC SUBSET_BALL);
2986 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
2987 (UP_ASM_TAC THEN UNDISCH_TAC
2988 `x IN ball (u0:real^3,r) INTER rcone_gt u0 u1 d` THEN SET_TAC[]);
2989 (NEW_GOAL `&2 * dist (x, u0:real^3) < &2`);
2990 (UP_ASM_TAC THEN REAL_ARITH_TAC);
2991 (NEW_GOAL `&2 <= dist (x, u0) + dist (x, u1:real^3)`);
2992 (NEW_GOAL `&2 <= dist (u0, u1:real^3)`);
2993 (UNDISCH_TAC `packing (V:real^3->bool)` THEN REWRITE_TAC[packing]);
2995 (FIRST_ASSUM MATCH_MP_TAC);
2996 (ASM_REWRITE_TAC[]);
2997 (ONCE_REWRITE_TAC[MESON[IN] `V a <=> a:real^3 IN V`]);
2998 (ASM_REWRITE_TAC[]);
3000 (NEW_GOAL `dist (u0, u1:real^3) <= dist (u0, x) + dist (x, u1)`);
3001 (REWRITE_TAC[DIST_TRIANGLE]);
3002 (UP_ASM_TAC THEN REWRITE_TAC[DIST_SYM]);
3003 (UP_ASM_TAC THEN REAL_ARITH_TAC);
3004 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3005 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3007 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3010 (UNDISCH_TAC `~NULLSET (X INTER D)`);
3012 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3013 (EXISTS_TAC `X INTER C:real^3->bool`);
3014 (ASM_SIMP_TAC [SET_RULE `A SUBSET B ==> X INTER A SUBSET X INTER B`]);
3015 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell2; SET_RULE `{} INTER s = {}`]);
3016 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
3017 (UP_ASM_TAC THEN MESON_TAC[]);
3019 (NEW_GOAL `~coplanar {u0, u1:real^3, m, s3}`);
3020 (ONCE_REWRITE_TAC[GSYM COPLANAR_AFFINE_HULL_COPLANAR]);
3022 (NEW_GOAL `NULLSET X`);
3023 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3024 (EXISTS_TAC `affine hull {u0, u1, m, s3:real^3}`);
3026 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
3027 (UP_ASM_TAC THEN MESON_TAC[]);
3028 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell2]);
3031 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> M INTER N INTER A SUBSET B`));
3033 (NEW_GOAL `?v0 v1 v2 v3. vl = [v0;v1;v2;v3:real^3]`);
3034 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
3035 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3036 (UP_ASM_TAC THEN STRIP_TAC);
3037 (REWRITE_WITH `HD vl = u0 /\ HD (TL vl) = u1:real^3`);
3038 (REWRITE_WITH `(HD vl):real^3 = HD (truncate_simplex 1 vl)`);
3039 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3040 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
3041 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
3042 (ASM_REWRITE_TAC[HD; TL]);
3043 (NEW_GOAL `HD (TL(truncate_simplex 1 vl)) = u1:real^3`);
3044 (ASM_REWRITE_TAC[HD; TL]);
3045 (NEW_GOAL `HD (TL(truncate_simplex 1 vl)) = v1:real^3`);
3046 (REWRITE_TAC[ASSUME `vl = [v0; v1; v2; v3:real^3]`;
3047 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
3048 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
3049 (REWRITE_WITH `{u0, u1, m, s3} = {u0, u1} UNION {m:real^3, s3}`);
3051 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
3053 (UNDISCH_TAC `~NULLSET (X INTER D)`);
3054 (REWRITE_TAC[] THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3055 (EXISTS_TAC `X:real^3->bool`);
3056 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3058 (* ========================================================================= *)
3059 (ASM_CASES_TAC `azim u0 u1 m (s3:real^3) < pi`);
3060 (REWRITE_WITH `vol (L INTER D) = vol (D INTER wedge u0 u1 m s3)`);
3061 (ASM_SIMP_TAC[WEDGE_LUNE]);
3062 (REWRITE_WITH `L INTER conic_cap (u0:real^3) u1 r d =
3063 conic_cap u0 u1 r d INTER L`);
3065 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_SYMDIFF);
3066 (REWRITE_WITH `conic_cap (u0:real^3) u1 r d INTER
3067 aff_gt {u0, u1} {m, s3} DIFF conic_cap u0 u1 r d INTER L = {}`);
3069 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> C INTER A DIFF C INTER B = {}`));
3070 (REWRITE_TAC[AFF_GT_SUBSET_AFF_GE]);
3071 (REWRITE_TAC[SET_RULE `A UNION {} = A`]);
3074 (REWRITE_WITH `aff_ge {u0, u1:real^3} {m, s3} =
3075 aff_gt {u0, u1} {m, s3} UNION
3076 UNIONS {aff_ge {u0, u1} ({m, s3} DELETE a) | a | a IN {m, s3}}`);
3077 (MATCH_MP_TAC AFF_GE_AFF_GT_DECOMP);
3078 (REWRITE_TAC[Geomdetail.FINITE6]);
3079 (REWRITE_TAC[DISJOINT]);
3081 (ASM_CASES_TAC `m IN {u0, u1:real^3}`);
3083 (UNDISCH_TAC `~coplanar {u0, u1, m, s3:real^3}`);
3084 (REWRITE_WITH `{u0, u1, m, s3} = {u0, u1, s3:real^3}`);
3085 (UP_ASM_TAC THEN SET_TAC[]);
3086 (REWRITE_TAC[COPLANAR_3]);
3087 (UP_ASM_TAC THEN MESON_TAC[]);
3089 (ASM_CASES_TAC `s3 IN {u0, u1:real^3}`);
3091 (UNDISCH_TAC `~coplanar {u0, u1, m, s3:real^3}`);
3092 (REWRITE_WITH `{u0, u1, m, s3} = {u0, u1, m:real^3}`);
3093 (UP_ASM_TAC THEN SET_TAC[]);
3094 (REWRITE_TAC[COPLANAR_3]);
3095 (UP_ASM_TAC THEN MESON_TAC[]);
3096 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
3098 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3100 `UNIONS {aff_ge {u0, u1:real^3} ({m, s3} DELETE a) | a | a IN {m, s3}}`);
3102 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3104 `aff_ge {u0, u1:real^3} {m} UNION aff_ge {u0, u1:real^3} {s3}`);
3106 (MATCH_MP_TAC NEGLIGIBLE_UNION);
3109 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3110 (EXISTS_TAC `affine hull {u0, u1:real^3, m}`);
3112 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
3113 (REWRITE_WITH `{u0,u1,m:real^3} = {u0,u1} UNION {m}`);
3115 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
3116 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3117 (EXISTS_TAC `affine hull {u0, u1:real^3, s3}`);
3119 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
3120 (REWRITE_WITH `{u0,u1,s3:real^3} = {u0,u1} UNION {s3}`);
3122 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
3123 (REWRITE_TAC[SET_RULE
3124 `UNIONS {aff_ge {u0, u1} ({m, s3} DELETE a) | a | a IN {m, s3}} =
3125 aff_ge {u0, u1} ({m, s3} DELETE s3)
3126 UNION aff_ge {u0, u1} ({m, s3} DELETE m)`]);
3127 (MATCH_MP_TAC (SET_RULE
3128 `A SUBSET B /\ C SUBSET D ==> A UNION C SUBSET B UNION D`));
3130 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
3134 (REWRITE_TAC[DISJOINT]);
3135 (ASM_CASES_TAC `m IN {u0, u1:real^3}`);
3137 (UNDISCH_TAC `~coplanar {u0, u1, m, s3:real^3}`);
3138 (REWRITE_WITH `{u0, u1, m, s3} = {u0, u1, s3:real^3}`);
3139 (UP_ASM_TAC THEN SET_TAC[]);
3140 (REWRITE_TAC[COPLANAR_3]);
3141 (UP_ASM_TAC THEN MESON_TAC[]);
3142 (UP_ASM_TAC THEN SET_TAC[]);
3144 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
3147 (REWRITE_TAC[DISJOINT]);
3148 (ASM_CASES_TAC `s3 IN {u0, u1:real^3}`);
3150 (UNDISCH_TAC `~coplanar {u0, u1, m, s3:real^3}`);
3151 (REWRITE_WITH `{u0, u1, m, s3} = {u0, u1, m:real^3}`);
3152 (UP_ASM_TAC THEN SET_TAC[]);
3153 (REWRITE_TAC[COPLANAR_3]);
3154 (UP_ASM_TAC THEN MESON_TAC[]);
3155 (UP_ASM_TAC THEN SET_TAC[]);
3159 (REWRITE_TAC[ASSUME `D = conic_cap (u0:real^3) u1 r d`]);
3160 (REWRITE_WITH `vol (conic_cap u0 u1 r d INTER wedge u0 u1 m s3) =
3161 (if &1 < d \/ r < &0
3163 else azim u0 u1 m s3 / &3 * (&1 - max d (-- &1)) * r pow 3)`);
3164 (NEW_GOAL `~collinear {u0:real^3, u1, m} /\ ~collinear {u0, u1, s3}`);
3166 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3167 (EXISTS_TAC `s3:real^3`);
3168 (ASM_REWRITE_TAC[]);
3169 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3170 (EXISTS_TAC `m:real^3`);
3171 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
3172 (ASM_REWRITE_TAC[]);
3174 (ASM_SIMP_TAC[VOLUME_CONIC_CAP_WEDGE]);
3177 (UNDISCH_TAC `&0 < r` THEN UNDISCH_TAC `d < &1` THEN
3178 UP_ASM_TAC THEN REAL_ARITH_TAC);
3179 (UP_ASM_TAC THEN MESON_TAC[]);
3181 (REWRITE_WITH `azim (u0:real^3) u1 m s3 = dihV u0 u1 m s3`);
3182 (MATCH_MP_TAC AZIM_DIHV_SAME);
3183 (ASM_REWRITE_TAC[]);
3185 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3186 (EXISTS_TAC `s3:real^3`);
3187 (ASM_REWRITE_TAC[]);
3188 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3189 (EXISTS_TAC `m:real^3`);
3190 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
3191 (ASM_REWRITE_TAC[]);
3193 (REWRITE_TAC[dihX]);
3196 (UNDISCH_TAC `~NULLSET (X INTER D)`);
3198 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3199 (EXISTS_TAC `X:real^3->bool`);
3200 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3201 (UP_ASM_TAC THEN MESON_TAC[]);
3205 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
3206 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
3209 initial_sublist [u0; u1] ul)`);
3211 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
3212 (MATCH_MP_TAC SELECT_AX);
3213 (EXISTS_TAC `(2, vl:(real^3)list)`);
3215 (REWRITE_TAC[BETA_THM]);
3216 (REWRITE_TAC[IN; ARITH_RULE `2 <= 4`] THEN ASM_REWRITE_TAC[]);
3217 (REWRITE_WITH `initial_sublist [u0;u1:real^3] vl /\ LENGTH [u0;u1] = 1 + 1`);
3218 (REWRITE_TAC[GSYM Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
3219 (ASM_REWRITE_TAC[]);
3221 (NEW_GOAL `?v0 v1 v2 v3. vl = [v0;v1;v2;v3:real^3]`);
3222 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
3223 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3224 (UP_ASM_TAC THEN STRIP_TAC);
3225 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
3226 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3227 (EXPAND_TAC "P" THEN REWRITE_TAC[IN] THEN REPEAT STRIP_TAC);
3229 (NEW_GOAL `k' = 2 /\ mcell k' V ul = mcell 2 V vl`);
3230 (MATCH_MP_TAC Ajripqn.AJRIPQN);
3231 (ASM_REWRITE_TAC[]);
3232 (REWRITE_WITH `mcell k' V ul INTER mcell 2 V vl = X`);
3233 (SET_TAC[ASSUME `X = mcell k' V ul`;
3234 ASSUME `X = mcell k V vl`; ASSUME `k = 2`]);
3236 (UNDISCH_TAC `k' <= 4` THEN REWRITE_TAC[ARITH_RULE
3237 `a <= 4 <=> a = 0 \/a = 1 \/ a = 2 \/ a = 3 \/ a = 4`] THEN SET_TAC[]);
3239 (UP_ASM_TAC THEN UNDISCH_TAC `~NULLSET X` THEN MESON_TAC[]);
3242 (REWRITE_TAC[dihu2]);
3244 (REWRITE_WITH `omega_list_n V ul 3 = s3`);
3247 (!k. 2 - 1 <= k /\ k <= 3
3248 ==> omega_list_n V ul k = omega_list_n V vl k)`);
3249 (MATCH_MP_TAC MCELL_ID_OMEGA_LIST_N);
3250 (ASM_REWRITE_TAC[SET_RULE `2 IN {2,3,4}`]);
3251 (REWRITE_TAC[GSYM (ASSUME `X = mcell k' V ul`); GSYM (ASSUME `k' = 2`)]);
3252 (ASM_REWRITE_TAC[]);
3253 (UP_ASM_TAC THEN STRIP_TAC);
3255 (FIRST_ASSUM MATCH_MP_TAC);
3258 (REWRITE_WITH `mxi V ul = m`);
3260 (MATCH_MP_TAC MCELL_ID_MXI);
3261 (EXISTS_TAC `2` THEN EXISTS_TAC `2`);
3262 (ASM_REWRITE_TAC[SET_RULE `2 IN {2,3}`]);
3265 (REWRITE_WITH `(HD vl):real^3 = HD (truncate_simplex 1 vl)`);
3266 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3267 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
3268 (REWRITE_WITH `LENGTH (vl:(real^3)list) = 3 + 1 /\
3269 CARD (set_of_list vl) = 3 + 1`);
3270 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
3271 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3273 (ASM_REWRITE_TAC[HD]);
3275 (REWRITE_WITH `(HD ul):real^3 = HD (truncate_simplex 1 ul)`);
3276 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3277 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
3278 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
3279 CARD (set_of_list ul) = 3 + 1`);
3280 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
3281 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3284 (REWRITE_WITH `truncate_simplex 1 ul = [u0;u1:real^3] /\ 1 + 1 <= LENGTH ul`);
3285 (REWRITE_TAC[Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
3286 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
3288 (REWRITE_TAC[GSYM (ASSUME `X = mcell k' V ul`); GSYM (ASSUME `k' = 2`)]);
3289 (ASM_REWRITE_TAC[]);
3291 (NEW_GOAL `initial_sublist [u0; u1:real^3] ul /\ LENGTH [u0; u1] = 1 + 1`);
3292 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
3293 (NEW_GOAL `truncate_simplex 1 ul = [u0;u1:real^3] /\ 1 + 1 <= LENGTH ul`);
3294 (REWRITE_TAC[Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
3295 (ASM_REWRITE_TAC[]);
3297 (REWRITE_WITH `EL 0 (ul:(real^3)list) = EL 0 (truncate_simplex 1 ul)`);
3298 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3299 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
3300 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
3301 CARD (set_of_list ul) = 3 + 1`);
3302 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
3303 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3306 (REWRITE_WITH `EL 1 (ul:(real^3)list) = EL 1 (truncate_simplex 1 ul)`);
3307 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3308 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
3309 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
3310 CARD (set_of_list ul) = 3 + 1`);
3311 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
3312 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3314 (ASM_REWRITE_TAC[EL; HD; ARITH_RULE `1 = SUC 0`; TL]);
3315 (REWRITE_TAC[REAL_ARITH `a / b * c * d pow 3 = (c/ b * d pow 3) * a`]);
3316 (REWRITE_TAC[REAL_ARITH `a * b / (&2 * c) = (a / (&2 * c)) * b`]);
3317 (AP_THM_TAC THEN AP_TERM_TAC);
3320 `measurable (conic_cap u0 u1 r d) /\
3321 vol (conic_cap u0 u1 r d) =
3322 (if u1 = u0 \/ &1 <= d \/ r < &0
3324 else &2 / &3 * pi * (&1 - d) * r pow 3)`);
3325 (MATCH_MP_TAC VOLUME_CONIC_CAP);
3327 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
3330 (UP_ASM_TAC THEN STRIP_TAC);
3331 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1:real^3)` THEN MESON_TAC[]);
3332 (UNDISCH_TAC `d < &1` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3333 (UNDISCH_TAC `&0 < r` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3334 (UP_ASM_TAC THEN MESON_TAC[]);
3335 (REWRITE_TAC[ARITH_RULE `SUC 0 = 1`]);
3338 (REWRITE_WITH `max d (--(&1)) = d`);
3339 (MATCH_MP_TAC (REAL_ARITH `&0 < d /\ --(&1) < &0 ==> max d (--(&1)) = d`));
3340 (REWRITE_TAC[REAL_NEG_LT0]);
3343 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
3347 (&2 / &3 * pi * (&1 - d) * r pow 3) / (&2 * pi) = (&1 - d) / &3 * r pow 3 *
3348 ((&2 * pi) / (&2 * pi))`);
3350 (REWRITE_WITH `(&2 * pi) / (&2 * pi) = &1`);
3351 (MATCH_MP_TAC REAL_DIV_REFL);
3352 (REWRITE_TAC[REAL_ENTIRE; PI_NZ; REAL_ARITH `~(&2 = &0)`]);
3355 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
3356 (UP_ASM_TAC THEN MESON_TAC[]);
3358 (* ========================================================================= *)
3361 (ASM_CASES_TAC `azim u0 u1 s3 (m:real^3) < pi`);
3362 (UNDISCH_TAC `~coplanar {u0, u1, m, s3:real^3}`);
3363 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
3365 (REWRITE_WITH `vol (L INTER D) = vol (D INTER wedge u0 u1 s3 m)`);
3366 (ASM_SIMP_TAC[WEDGE_LUNE]);
3367 (REWRITE_WITH `L INTER conic_cap (u0:real^3) u1 r d =
3368 conic_cap u0 u1 r d INTER L`);
3370 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_SYMDIFF);
3372 (REWRITE_WITH `conic_cap (u0:real^3) u1 r d INTER
3373 aff_gt {u0, u1} {s3, m} DIFF conic_cap u0 u1 r d INTER L = {}`);
3375 (REWRITE_TAC[SET_RULE `{a,b} = {b, a}`]);
3376 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> C INTER A DIFF C INTER B = {}`));
3377 (REWRITE_TAC[AFF_GT_SUBSET_AFF_GE]);
3378 (REWRITE_TAC[SET_RULE `A UNION {} = A`]);
3380 (REWRITE_TAC[SET_RULE `{a,b} = {b, a}`]);
3382 (REWRITE_WITH `aff_ge {u0, u1:real^3} {m, s3} =
3383 aff_gt {u0, u1} {m, s3} UNION
3384 UNIONS {aff_ge {u0, u1} ({m, s3} DELETE a) | a | a IN {m, s3}}`);
3385 (MATCH_MP_TAC AFF_GE_AFF_GT_DECOMP);
3386 (REWRITE_TAC[Geomdetail.FINITE6]);
3387 (REWRITE_TAC[DISJOINT]);
3389 (ASM_CASES_TAC `m IN {u0, u1:real^3}`);
3391 (UNDISCH_TAC `~coplanar {u0, u1, s3, m:real^3}`);
3392 (REWRITE_WITH `{u0, u1, s3, m} = {u0, u1, s3:real^3}`);
3393 (UP_ASM_TAC THEN SET_TAC[]);
3394 (REWRITE_TAC[COPLANAR_3]);
3395 (UP_ASM_TAC THEN MESON_TAC[]);
3397 (ASM_CASES_TAC `s3 IN {u0, u1:real^3}`);
3399 (UNDISCH_TAC `~coplanar {u0, u1, s3, m:real^3}`);
3400 (REWRITE_WITH `{u0, u1, s3, m} = {u0, u1, m:real^3}`);
3401 (UP_ASM_TAC THEN SET_TAC[]);
3402 (REWRITE_TAC[COPLANAR_3]);
3403 (UP_ASM_TAC THEN MESON_TAC[]);
3404 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
3406 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3408 `UNIONS {aff_ge {u0, u1:real^3} ({m, s3} DELETE a) | a | a IN {m, s3}}`);
3410 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3412 `aff_ge {u0, u1:real^3} {m} UNION aff_ge {u0, u1:real^3} {s3}`);
3414 (MATCH_MP_TAC NEGLIGIBLE_UNION);
3417 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3418 (EXISTS_TAC `affine hull {u0, u1:real^3, m}`);
3420 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
3421 (REWRITE_WITH `{u0,u1,m:real^3} = {u0,u1} UNION {m}`);
3423 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
3424 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3425 (EXISTS_TAC `affine hull {u0, u1:real^3, s3}`);
3427 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
3428 (REWRITE_WITH `{u0,u1,s3:real^3} = {u0,u1} UNION {s3}`);
3430 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
3431 (REWRITE_TAC[SET_RULE
3432 `UNIONS {aff_ge {u0, u1} ({m, s3} DELETE a) | a | a IN {m, s3}} =
3433 aff_ge {u0, u1} ({m, s3} DELETE s3)
3434 UNION aff_ge {u0, u1} ({m, s3} DELETE m)`]);
3435 (MATCH_MP_TAC (SET_RULE
3436 `A SUBSET B /\ C SUBSET D ==> A UNION C SUBSET B UNION D`));
3438 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
3442 (REWRITE_TAC[DISJOINT]);
3443 (ASM_CASES_TAC `m IN {u0, u1:real^3}`);
3445 (UNDISCH_TAC `~coplanar {u0, u1, s3, m:real^3}`);
3446 (REWRITE_WITH `{u0, u1, s3, m} = {u0, u1, s3:real^3}`);
3447 (UP_ASM_TAC THEN SET_TAC[]);
3448 (REWRITE_TAC[COPLANAR_3]);
3449 (UP_ASM_TAC THEN MESON_TAC[]);
3450 (UP_ASM_TAC THEN SET_TAC[]);
3452 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
3455 (REWRITE_TAC[DISJOINT]);
3456 (ASM_CASES_TAC `s3 IN {u0, u1:real^3}`);
3458 (UNDISCH_TAC `~coplanar {u0, u1, s3, m:real^3}`);
3459 (REWRITE_WITH `{u0, u1, s3, m} = {u0, u1, m:real^3}`);
3460 (UP_ASM_TAC THEN SET_TAC[]);
3461 (REWRITE_TAC[COPLANAR_3]);
3462 (UP_ASM_TAC THEN MESON_TAC[]);
3463 (UP_ASM_TAC THEN SET_TAC[]);
3467 (REWRITE_TAC[ASSUME `D = conic_cap (u0:real^3) u1 r d`]);
3468 (REWRITE_WITH `vol (conic_cap u0 u1 r d INTER wedge u0 u1 s3 m) =
3469 (if &1 < d \/ r < &0
3471 else azim u0 u1 s3 m / &3 * (&1 - max d (-- &1)) * r pow 3)`);
3472 (NEW_GOAL `~collinear {u0:real^3, u1, m} /\ ~collinear {u0, u1, s3}`);
3474 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3475 (EXISTS_TAC `s3:real^3`);
3476 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
3477 (ASM_REWRITE_TAC[]);
3478 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3479 (EXISTS_TAC `m:real^3`);
3480 (ASM_REWRITE_TAC[]);
3482 (ASM_SIMP_TAC[VOLUME_CONIC_CAP_WEDGE]);
3486 (UNDISCH_TAC `&0 < r` THEN UNDISCH_TAC `d < &1` THEN
3487 UP_ASM_TAC THEN REAL_ARITH_TAC);
3488 (UP_ASM_TAC THEN MESON_TAC[]);
3490 (REWRITE_WITH `azim (u0:real^3) u1 s3 m = dihV u0 u1 s3 m`);
3491 (MATCH_MP_TAC AZIM_DIHV_SAME);
3492 (ASM_REWRITE_TAC[]);
3495 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3496 (EXISTS_TAC `m:real^3`);
3497 (ASM_REWRITE_TAC[]);
3498 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3499 (EXISTS_TAC `s3:real^3`);
3500 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
3501 (ASM_REWRITE_TAC[]);
3503 (REWRITE_TAC[dihX]);
3506 (UNDISCH_TAC `~NULLSET (X INTER D)`);
3508 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3509 (EXISTS_TAC `X:real^3->bool`);
3510 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3511 (UP_ASM_TAC THEN MESON_TAC[]);
3515 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
3516 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
3519 initial_sublist [u0; u1] ul)`);
3521 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
3522 (MATCH_MP_TAC SELECT_AX);
3523 (EXISTS_TAC `(2, vl:(real^3)list)`);
3525 (REWRITE_TAC[BETA_THM]);
3526 (REWRITE_TAC[IN; ARITH_RULE `2 <= 4`] THEN ASM_REWRITE_TAC[]);
3527 (REWRITE_WITH `initial_sublist [u0;u1:real^3] vl /\ LENGTH [u0;u1] = 1 + 1`);
3528 (REWRITE_TAC[GSYM Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
3529 (ASM_REWRITE_TAC[]);
3531 (NEW_GOAL `?v0 v1 v2 v3. vl = [v0;v1;v2;v3:real^3]`);
3532 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
3533 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3534 (UP_ASM_TAC THEN STRIP_TAC);
3535 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
3536 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3537 (EXPAND_TAC "P" THEN REWRITE_TAC[IN] THEN REPEAT STRIP_TAC);
3539 (NEW_GOAL `k' = 2 /\ mcell k' V ul = mcell 2 V vl`);
3540 (MATCH_MP_TAC Ajripqn.AJRIPQN);
3541 (ASM_REWRITE_TAC[]);
3542 (REWRITE_WITH `mcell k' V ul INTER mcell 2 V vl = X`);
3543 (REWRITE_TAC[ASSUME `X = mcell k V vl`; GSYM (ASSUME `X = mcell k' V ul`);
3547 (UNDISCH_TAC `k' <= 4` THEN REWRITE_TAC[ARITH_RULE
3548 `a <= 4 <=> a = 0 \/a = 1 \/ a = 2 \/ a = 3 \/ a = 4`] THEN SET_TAC[]);
3550 (UNDISCH_TAC `~NULLSET X` THEN UP_ASM_TAC THEN MESON_TAC[]);
3553 (REWRITE_TAC[dihu2]);
3554 (REWRITE_WITH `omega_list_n V ul 3 = s3`);
3557 (!k. 2 - 1 <= k /\ k <= 3
3558 ==> omega_list_n V ul k = omega_list_n V vl k)`);
3559 (MATCH_MP_TAC MCELL_ID_OMEGA_LIST_N);
3560 (ASM_REWRITE_TAC[SET_RULE `2 IN {2,3,4}`]);
3562 (MESON_TAC[ASSUME `X = mcell k V vl`; ASSUME `X = mcell k' V ul`;
3563 ASSUME `k = 2`; ASSUME `k' = 2`]);
3564 (REWRITE_WITH `mcell 2 V ul = X`);
3565 (MESON_TAC[ASSUME `X = mcell k' V ul`; ASSUME `k' = 2`]);
3566 (ASM_REWRITE_TAC[]);
3567 (UP_ASM_TAC THEN STRIP_TAC);
3568 (FIRST_ASSUM MATCH_MP_TAC);
3571 (REWRITE_WITH `mxi V ul = m`);
3573 (MATCH_MP_TAC MCELL_ID_MXI);
3574 (EXISTS_TAC `2` THEN EXISTS_TAC `2`);
3575 (ASM_REWRITE_TAC[SET_RULE `2 IN {2,3}`]);
3578 (REWRITE_WITH `(HD vl):real^3 = HD (truncate_simplex 1 vl)`);
3579 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3580 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
3581 (REWRITE_WITH `LENGTH (vl:(real^3)list) = 3 + 1 /\
3582 CARD (set_of_list vl) = 3 + 1`);
3583 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
3584 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3586 (ASM_REWRITE_TAC[HD]);
3588 (REWRITE_WITH `(HD ul):real^3 = HD (truncate_simplex 1 ul)`);
3589 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3590 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
3591 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
3592 CARD (set_of_list ul) = 3 + 1`);
3593 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
3594 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3597 (REWRITE_WITH `truncate_simplex 1 ul = [u0;u1:real^3] /\ 1 + 1 <= LENGTH ul`);
3598 (REWRITE_TAC[Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
3599 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
3603 (MESON_TAC[ASSUME `X = mcell k V vl`; ASSUME `X = mcell k' V ul`;
3604 ASSUME `k = 2`; ASSUME `k' = 2`]);
3605 (REWRITE_WITH `mcell 2 V ul = X`);
3606 (MESON_TAC[ASSUME `X = mcell k' V ul`; ASSUME `k' = 2`]);
3607 (ASM_REWRITE_TAC[]);
3609 (NEW_GOAL `initial_sublist [u0; u1:real^3] ul /\ LENGTH [u0; u1] = 1 + 1`);
3610 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
3611 (NEW_GOAL `truncate_simplex 1 ul = [u0;u1:real^3] /\ 1 + 1 <= LENGTH ul`);
3612 (REWRITE_TAC[Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
3613 (ASM_REWRITE_TAC[]);
3615 (REWRITE_WITH `EL 0 (ul:(real^3)list) = EL 0 (truncate_simplex 1 ul)`);
3616 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3617 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
3618 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
3619 CARD (set_of_list ul) = 3 + 1`);
3620 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
3621 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3624 (REWRITE_WITH `EL 1 (ul:(real^3)list) = EL 1 (truncate_simplex 1 ul)`);
3625 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3626 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
3627 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
3628 CARD (set_of_list ul) = 3 + 1`);
3629 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
3630 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3632 (ASM_REWRITE_TAC[EL; HD; ARITH_RULE `1 = SUC 0`; TL]);
3633 (REWRITE_TAC[DIHV_SYM_2]);
3634 (REWRITE_TAC[ARITH_RULE `SUC 0 = 1`]);
3636 (REWRITE_TAC[REAL_ARITH `a / b * c * d pow 3 = (c/ b * d pow 3) * a`]);
3637 (REWRITE_TAC[REAL_ARITH `a * b / (&2 * c) = (a / (&2 * c)) * b`]);
3638 (AP_THM_TAC THEN AP_TERM_TAC);
3640 `measurable (conic_cap u0 u1 r d) /\
3641 vol (conic_cap u0 u1 r d) =
3642 (if u1 = u0 \/ &1 <= d \/ r < &0
3644 else &2 / &3 * pi * (&1 - d) * r pow 3)`);
3645 (MATCH_MP_TAC VOLUME_CONIC_CAP);
3647 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
3650 (UP_ASM_TAC THEN STRIP_TAC);
3651 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3653 (UP_ASM_TAC THEN UNDISCH_TAC `d < &1` THEN REAL_ARITH_TAC);
3654 (UP_ASM_TAC THEN UNDISCH_TAC `&0 < r` THEN REAL_ARITH_TAC);
3655 (UP_ASM_TAC THEN MESON_TAC[]);
3657 (REWRITE_WITH `max d (--(&1)) = d`);
3658 (MATCH_MP_TAC (REAL_ARITH `&0 < d ==> max d (--(&1)) = d`));
3660 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
3662 (&2 / &3 * pi * (&1 - d) * r pow 3) / (&2 * pi) = (&1 - d) / &3 * r pow 3 *
3663 ((&2 * pi) / (&2 * pi))`);
3665 (REWRITE_WITH `(&2 * pi) / (&2 * pi) = &1`);
3666 (MATCH_MP_TAC REAL_DIV_REFL);
3667 (REWRITE_TAC[REAL_ENTIRE; PI_NZ; REAL_ARITH `~(&2 = &0)`]);
3670 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[]);
3671 (UP_ASM_TAC THEN MESON_TAC[]);
3673 (* ========================================================================== *)
3676 (NEW_GOAL `azim (u0:real^3) u1 s3 m =
3677 (if azim u0 u1 m s3 = &0 then &0 else &2 * pi - azim u0 u1 m s3)`);
3678 (MATCH_MP_TAC AZIM_COMPL);
3681 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3682 (EXISTS_TAC `s3:real^3`);
3683 (ASM_REWRITE_TAC[]);
3684 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3685 (EXISTS_TAC `m:real^3`);
3686 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b, d, c}`]);
3687 (ASM_REWRITE_TAC[]);
3688 (UP_ASM_TAC THEN COND_CASES_TAC);
3690 (NEW_GOAL `(&0 < pi)`);
3691 (REWRITE_TAC[PI_POS]);
3692 (UNDISCH_TAC `~(azim (u0:real^3) u1 m s3 < pi)`);
3693 (ASM_REWRITE_TAC[]);
3694 (UP_ASM_TAC THEN MESON_TAC[]);
3697 (NEW_GOAL `azim (u0:real^3) u1 m s3 = pi`);
3698 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3699 (UNDISCH_TAC `~coplanar {u0, u1, m, s3:real^3}`);
3700 (REWRITE_TAC[] THEN MATCH_MP_TAC AZIM_EQ_0_PI_IMP_COPLANAR);
3701 (ASM_REWRITE_TAC[]);
3702 (UP_ASM_TAC THEN MESON_TAC[]);
3705 (* ========================================================================= *)
3707 (* ========================================================================= *)
3709 (ASM_CASES_TAC `k >= 4`);
3710 (NEW_GOAL `?u2 u3. vl = [u0; u1;u2;u3:real^3]`);
3711 (NEW_GOAL `?v0 v1 u2 u3. vl = [v0; v1;u2;u3:real^3]`);
3712 (MATCH_MP_TAC BARV_3_EXPLICIT);
3713 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3714 (UP_ASM_TAC THEN STRIP_TAC);
3715 (EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3`);
3717 (REWRITE_WITH `u0 = v0:real^3`);
3718 (REWRITE_WITH `v0:real^3 = HD (truncate_simplex 1 vl)`);
3719 (REWRITE_TAC[ASSUME `vl = [v0;v1;u2;u3:real^3]`;
3720 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
3721 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
3723 (REWRITE_WITH `u1 = v1:real^3`);
3724 (REWRITE_WITH `v1:real^3 = HD (TL (truncate_simplex 1 vl))`);
3725 (REWRITE_TAC[ASSUME `vl = [v0;v1;u2;u3:real^3]`;
3726 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
3727 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
3728 (ASM_REWRITE_TAC[]);
3729 (UP_ASM_TAC THEN STRIP_TAC);
3731 (ABBREV_TAC `L = aff_ge{u0, u1} {u2, u3:real^3}`);
3733 (REWRITE_WITH `vol (X INTER D) = vol (L INTER D)`);
3735 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell4; ARITH_RULE `4 >= 4`;set_of_list]);
3739 (REWRITE_TAC[SET_RULE `A = B <=> A SUBSET B /\ B SUBSET A`]);
3741 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> A INTER X SUBSET B INTER X`));
3742 (REWRITE_TAC[Marchal_cells_2.CONVEX_HULL_4_SUBSET_AFF_GE_2_2]);
3743 (MATCH_MP_TAC (SET_RULE `(!x. x IN A /\ x IN B ==> x IN C) ==>
3744 A INTER B SUBSET C INTER B`));
3745 (NEW_GOAL `DISJOINT {u0,u1:real^3} {u2, u3}`);
3746 (REWRITE_TAC[DISJOINT]);
3747 (MATCH_MP_TAC (MESON[] `(~A:bool ==> F) ==> A`));
3749 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
3750 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3751 (EXISTS_TAC `X:real^3->bool` THEN REWRITE_TAC[SET_RULE `A INTER X SUBSET A`]);
3752 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell4; set_of_list]);
3753 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3754 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
3755 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
3756 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
3757 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
3758 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
3759 (REWRITE_WITH `{u0, u1, u2, u3} = {u0, u1, u3:real^3}`);
3760 (UP_ASM_TAC THEN SET_TAC[]);
3761 (REWRITE_TAC[COPLANAR_3]);
3762 (NEW_GOAL `u3 IN {u0, u1:real^3}`);
3763 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
3764 (REWRITE_WITH `{u0, u1, u2, u3} = {u0, u1, u2:real^3}`);
3765 (UP_ASM_TAC THEN SET_TAC[]);
3766 (REWRITE_TAC[COPLANAR_3]);
3768 (SIMP_TAC[ASSUME `DISJOINT {u0, u1} {u2, u3:real^3}`; AFF_GE_2_2]);
3769 (REWRITE_TAC[CONVEX_HULL_4; IN; IN_ELIM_THM]);
3771 (EXISTS_TAC `t1:real` THEN EXISTS_TAC `t2:real` THEN
3772 EXISTS_TAC `t3:real` THEN EXISTS_TAC `t4:real`);
3773 (ASM_REWRITE_TAC[]);
3776 (REWRITE_TAC[REAL_ARITH `&0 <= a <=> (a < &0 ==> F)`]);
3778 (UNDISCH_TAC `conic_cap (u0:real^3) u1 r d x`);
3779 (REWRITE_TAC[MESON[IN] `conic_cap u0 u1 r d x <=> x IN conic_cap u0 u1 r d`;
3780 GSYM (ASSUME `D = conic_cap (u0:real^3) u1 r d`)]);
3782 (REWRITE_TAC[IN_INTER; MESON[] `~(x:bool /\ y) <=> (~x \/ ~y)`]);
3784 (REWRITE_TAC[IN_BALL] THEN STRIP_TAC);
3786 (NEW_GOAL `(?b1:real. b1 IN P2 /\ (!x. x IN P2 ==> b1 <= x))`);
3787 (FIRST_ASSUM MATCH_MP_TAC);
3788 (REWRITE_TAC[SET_RULE `~(X = {}) <=> (?x. x IN X)`]);
3789 (EXISTS_TAC `(f2:(real^3)list -> real) vl`);
3790 (EXPAND_TAC "P2" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
3791 (EXISTS_TAC `vl:(real^3)list`);
3792 (ASM_REWRITE_TAC[]);
3793 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
3794 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
3796 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
3797 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3798 (EXISTS_TAC `X INTER (C:real^3->bool)`);
3800 (ASM_REWRITE_TAC[]);
3801 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
3802 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
3803 (MATCH_MP_TAC (SET_RULE
3804 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
3806 (MATCH_MP_TAC SUBSET_BALL);
3807 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
3808 (MATCH_MP_TAC RCONE_GT_SUBSET);
3809 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
3810 (FIRST_X_ASSUM CHOOSE_TAC);
3812 (NEW_GOAL `r2 = (@b. b IN P2 /\ (!x. x IN P2 ==> b <= x:real))`);
3816 (UP_ASM_TAC THEN REWRITE_TAC[]);
3817 (REWRITE_TAC[SET_RULE `~(X = {}) <=> (?x. x IN X)`]);
3818 (EXISTS_TAC `(f2:(real^3)list -> real) vl`);
3819 (EXPAND_TAC "P2" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
3820 (EXISTS_TAC `vl:(real^3)list`);
3821 (ASM_REWRITE_TAC[]);
3822 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
3823 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
3825 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
3826 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3827 (EXISTS_TAC `X INTER (C:real^3->bool)`);
3829 (ASM_REWRITE_TAC[]);
3830 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
3831 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
3832 (MATCH_MP_TAC (SET_RULE
3833 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
3835 (MATCH_MP_TAC SUBSET_BALL);
3836 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
3837 (MATCH_MP_TAC RCONE_GT_SUBSET);
3838 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
3839 (UP_ASM_TAC THEN MESON_TAC[]);
3842 (ABBREV_TAC `Q1 = (\b:real. b IN P2 /\ (!x. x IN P2 ==> b <= x))`);
3843 (NEW_GOAL `(Q1:real->bool) r2`);
3844 (ASM_REWRITE_TAC[]);
3845 (MATCH_MP_TAC SELECT_AX);
3846 (EXISTS_TAC `b1:real` THEN EXPAND_TAC "Q1");
3847 (ASM_REWRITE_TAC[]);
3848 (UP_ASM_TAC THEN EXPAND_TAC "Q1" THEN REPEAT STRIP_TAC);
3849 (NEW_GOAL `r2 <= f2 (vl:(real^3)list)`);
3850 (FIRST_ASSUM MATCH_MP_TAC);
3851 (EXPAND_TAC "P2" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
3852 (EXISTS_TAC `vl:(real^3)list`);
3853 (ASM_REWRITE_TAC[]);
3854 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
3855 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
3857 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
3858 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3859 (EXISTS_TAC `X INTER (C:real^3->bool)`);
3861 (ASM_REWRITE_TAC[]);
3862 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
3863 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
3864 (MATCH_MP_TAC (SET_RULE
3865 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
3867 (MATCH_MP_TAC SUBSET_BALL);
3868 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
3869 (MATCH_MP_TAC RCONE_GT_SUBSET);
3870 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
3872 (UP_ASM_TAC THEN EXPAND_TAC "f2" THEN REWRITE_TAC[EL; HD; TL;
3873 ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`;
3874 ASSUME `vl= [u0; u1; u2; u3:real^3]`] THEN STRIP_TAC);
3875 (NEW_GOAL `!v. v IN affine hull {u1, u2, u3:real^3} ==> r2 <= dist (u0, v)`);
3877 (NEW_GOAL `dist (u0,closest_point (affine hull {u1, u2, u3}) u0) <=
3878 dist (u0, v:real^3)`);
3879 (MATCH_MP_TAC CLOSEST_POINT_LE);
3880 (ASM_REWRITE_TAC[CLOSED_AFFINE_HULL]);
3881 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3883 (NEW_GOAL `r <= dist (u0:real^3, x)`);
3884 (REWRITE_TAC[dist]);
3885 (REWRITE_WITH `u0:real^3 - x = (t1 + t2 + t3 + t4) % u0 - x`);
3886 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
3887 (REWRITE_TAC[VECTOR_ADD_RDISTRIB]);
3888 (ASM_REWRITE_TAC[VECTOR_ARITH `(t1 % u0 + t2 % u0 + t3 % u0 + t4 % u0) -
3889 (t1 % u0 + t2 % u1 + t3 % u2 + t4 % u3) =
3890 (t2 + t3 + t4) % u0 - (t2 % u1 + t3 % u2 + t4 % u3)`]);
3891 (ABBREV_TAC `y:real^3 = t2 /(t2 + t3 + t4) % u1 +
3892 t3 /(t2 + t3 + t4) % u2 +
3893 t4 /(t2 + t3 + t4) % u3`);
3894 (REWRITE_WITH `(t2 % u1 + t3 % u2 + t4 % u3) = (t2 + t3 + t4) % (y:real^3)`);
3896 (REWRITE_TAC[VECTOR_ARITH `x % (t2 / x % u1 + t3 / x % u2 + t4 / x % u3) =
3897 (x / x) % (t2 % u1 + t3 % u2 + t4 % u3)`]);
3898 (REWRITE_WITH `(t2 + t3 + t4) / (t2 + t3 + t4) = &1`);
3899 (MATCH_MP_TAC REAL_DIV_REFL);
3900 (UNDISCH_TAC `t1 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1`);
3903 (REWRITE_TAC[VECTOR_ARITH `a % x - a % y = a % (x - y)`; NORM_MUL]);
3905 (NEW_GOAL `&1 < t2 + t3 + t4`);
3906 (UNDISCH_TAC `t1 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1`);
3908 (REWRITE_WITH `abs (t2 + t3 + t4) = t2 + t3 + t4`);
3909 (REWRITE_TAC[REAL_ABS_REFL] THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3910 (REWRITE_TAC[GSYM dist]);
3911 (NEW_GOAL `r2 <= dist (u0, y:real^3)`);
3912 (FIRST_ASSUM MATCH_MP_TAC);
3913 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
3914 (EXISTS_TAC `t2 / (t2 + t3 + t4)` THEN EXISTS_TAC `t3 / (t2 + t3 + t4)` THEN
3915 EXISTS_TAC `t4 / (t2 + t3 + t4)`);
3917 (REWRITE_TAC[REAL_ARITH `a / x + b / x + c / x = (a+b+c)/ x`]);
3918 (MATCH_MP_TAC REAL_DIV_REFL);
3919 (UP_ASM_TAC THEN REAL_ARITH_TAC);
3920 (ASM_REWRITE_TAC[]);
3922 (NEW_GOAL `r2 <= (t2 + t3 + t4) * dist (u0,y:real^3)`);
3923 (NEW_GOAL `dist (u0,y) <= (t2 + t3 + t4) * dist (u0,y:real^3)`);
3924 (REWRITE_TAC[REAL_ARITH `a <= b * a <=> &0 <= (b - &1) * a`]);
3925 (MATCH_MP_TAC REAL_LE_MUL);
3926 (REWRITE_TAC[DIST_POS_LE]);
3927 (DEL_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3928 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3929 (EXPAND_TAC "r" THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3930 (UNDISCH_TAC `dist (u0, x:real^3) < r` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
3932 (* ========================================================================== *)
3935 (REWRITE_TAC[REAL_ARITH `&0 <= a <=> (a < &0 ==> F)`]);
3937 (UNDISCH_TAC `conic_cap (u0:real^3) u1 r d x`);
3938 (REWRITE_TAC[MESON[IN] `conic_cap u0 u1 r d x <=> x IN conic_cap u0 u1 r d`;
3939 GSYM (ASSUME `D = conic_cap (u0:real^3) u1 r d`)]);
3941 (REWRITE_TAC[IN_INTER; MESON[] `~(x:bool /\ y) <=> (~x \/ ~y)`]);
3943 (REWRITE_TAC[IN; IN_ELIM_THM; rcone_gt; rconesgn] THEN STRIP_TAC);
3945 (NEW_GOAL `(?b1:real. b1 IN P4 /\ (!x. x IN P4 ==> x <= b1))`);
3946 (FIRST_ASSUM MATCH_MP_TAC);
3947 (REWRITE_TAC[SET_RULE `~(X = {}) <=> (?x. x IN X)`]);
3948 (EXISTS_TAC `(f4:(real^3)list -> real) vl`);
3949 (EXPAND_TAC "P4" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
3950 (EXISTS_TAC `vl:(real^3)list`);
3951 (ASM_REWRITE_TAC[]);
3952 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
3953 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
3955 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
3956 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3957 (EXISTS_TAC `X INTER (C:real^3->bool)`);
3959 (ASM_REWRITE_TAC[]);
3960 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
3961 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
3962 (MATCH_MP_TAC (SET_RULE
3963 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
3965 (MATCH_MP_TAC SUBSET_BALL);
3966 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
3967 (MATCH_MP_TAC RCONE_GT_SUBSET);
3968 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
3969 (FIRST_X_ASSUM CHOOSE_TAC);
3971 (NEW_GOAL `d2 = (@b. b IN P4 /\ (!x. x IN P4 ==> x <= b:real))`);
3975 (UP_ASM_TAC THEN REWRITE_TAC[]);
3976 (REWRITE_TAC[SET_RULE `~(X = {}) <=> (?x. x IN X)`]);
3977 (EXISTS_TAC `(f4:(real^3)list -> real) vl`);
3978 (EXPAND_TAC "P4" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
3979 (EXISTS_TAC `vl:(real^3)list`);
3980 (ASM_REWRITE_TAC[]);
3981 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
3982 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
3984 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
3985 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3986 (EXISTS_TAC `X INTER (C:real^3->bool)`);
3988 (ASM_REWRITE_TAC[]);
3989 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
3990 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
3991 (MATCH_MP_TAC (SET_RULE
3992 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
3994 (MATCH_MP_TAC SUBSET_BALL);
3995 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
3996 (MATCH_MP_TAC RCONE_GT_SUBSET);
3997 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
3998 (UP_ASM_TAC THEN MESON_TAC[]);
4001 (ABBREV_TAC `Q1 = (\b:real. b IN P4 /\ (!x. x IN P4 ==> x <= b))`);
4002 (NEW_GOAL `(Q1:real->bool) d2`);
4003 (ASM_REWRITE_TAC[]);
4004 (MATCH_MP_TAC SELECT_AX);
4005 (EXISTS_TAC `b1:real` THEN EXPAND_TAC "Q1");
4006 (ASM_REWRITE_TAC[]);
4007 (UP_ASM_TAC THEN EXPAND_TAC "Q1" THEN REPEAT STRIP_TAC);
4009 (NEW_GOAL `f4 (vl:(real^3)list) <= d2`);
4010 (FIRST_ASSUM MATCH_MP_TAC);
4011 (EXPAND_TAC "P4" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
4012 (EXISTS_TAC `vl:(real^3)list`);
4013 (ASM_REWRITE_TAC[]);
4014 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
4015 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
4017 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
4018 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4019 (EXISTS_TAC `X INTER (C:real^3->bool)`);
4021 (ASM_REWRITE_TAC[]);
4022 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
4023 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
4024 (MATCH_MP_TAC (SET_RULE
4025 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
4027 (MATCH_MP_TAC SUBSET_BALL);
4028 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
4029 (MATCH_MP_TAC RCONE_GT_SUBSET);
4030 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
4032 (UP_ASM_TAC THEN EXPAND_TAC "f4");
4033 (REWRITE_TAC[EL; HD; TL;
4034 ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`;
4035 ASSUME `vl= [u0; u1; u2; u3:real^3]`] THEN STRIP_TAC);
4036 (ABBREV_TAC `xx = smallest_angle_line u2 u3 u0 u1`);
4038 (MP_TAC (ASSUME `smallest_angle_line u2 u3 u0 u1 = xx`));
4039 (REWRITE_TAC[smallest_angle_line; smallest_angle_set]);
4041 (\x:real^3. x IN convex hull {u2, u3} /\
4042 (!y. y IN convex hull {u2, u3}
4043 ==> ((y - u0) dot (u1 - u0)) /
4044 (norm (y - u0) * norm (u1 - u0)) <=
4045 ((x - u0) dot (u1 - u0)) /
4046 (norm (x - u0) * norm (u1 - u0))))`);
4047 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN STRIP_TAC);
4048 (NEW_GOAL `(Q2:real^3->bool) xx`);
4049 (ONCE_ASM_REWRITE_TAC[]);
4050 (MATCH_MP_TAC SELECT_AX);
4053 (MATCH_MP_TAC SMALLEST_ANGLE_LINE_EXISTS);
4055 (ASM_REWRITE_TAC[]);
4058 (UNDISCH_TAC `~NULLSET (X INTER D)`);
4060 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4061 (EXISTS_TAC `X:real^3->bool` THEN STRIP_TAC);
4062 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell4; set_of_list;ARITH_RULE `4 >= 4`]);
4063 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4065 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
4067 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4068 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4069 (REWRITE_TAC[coplanar]);
4070 (UNDISCH_TAC `u0 IN convex hull {u2, u3:real^3}`);
4071 (REWRITE_TAC[CONVEX_HULL_2; IN; IN_ELIM_THM] THEN STRIP_TAC);
4072 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN
4073 EXISTS_TAC `u3:real^3`);
4074 (MATCH_MP_TAC (SET_RULE `a IN s /\ b SUBSET s ==> (a INSERT b) SUBSET s`));
4075 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
4076 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
4077 (EXISTS_TAC `&0` THEN EXISTS_TAC `u:real` THEN EXISTS_TAC `v:real`);
4079 (UNDISCH_TAC `u + v = &1` THEN REAL_ARITH_TAC);
4080 (UP_ASM_TAC THEN VECTOR_ARITH_TAC);
4081 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4082 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
4085 (UP_ASM_TAC THEN EXPAND_TAC "Q2");
4087 (ABBREV_TAC `g = (\y:real^3. ((y - u0) dot (u1 - u0)) /
4088 (norm (y - u0) * norm (u1 - u0)))`);
4090 (NEW_GOAL `d < (g:real^3->real) x`);
4093 `d < ((x - u0) dot (u1 - u0)) / (norm (x - u0) * norm (u1 - u0:real^3)) <=>
4094 d * (norm (x - u0) * norm (u1 - u0)) < (x - u0) dot (u1 - u0)`);
4095 (MATCH_MP_TAC REAL_LT_RDIV_EQ);
4096 (MATCH_MP_TAC (REAL_ARITH `&0 <= a /\ ~(a = &0) ==> &0 < a`));
4098 (MATCH_MP_TAC REAL_LE_MUL);
4099 (ASM_REWRITE_TAC[NORM_POS_LE]);
4100 (REWRITE_TAC[REAL_ENTIRE; NORM_EQ_0; VECTOR_ARITH `x - y = vec 0 <=> x = y`]);
4101 (ASM_REWRITE_TAC[]);
4102 (REWRITE_WITH `t1 % u0 + t2 % u1 + t3 % u2 + t4 % u3 = u0:real^3 <=>
4103 t1 % u0 + t2 % u1 + t3 % u2 + t4 % u3 = (t1 + t2 + t3 + t4) % u0`);
4104 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
4105 (REWRITE_TAC[VECTOR_ARITH `t1 % u0 + u = (t1 + t2) % u0 <=> u = t2 % u0`]);
4108 (MP_TAC (ASSUME `~NULLSET (X INTER D)`) THEN REWRITE_TAC[]);
4109 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4110 (EXISTS_TAC `X:real^3->bool` THEN STRIP_TAC);
4111 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell4;set_of_list]);
4112 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4113 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
4114 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4115 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4116 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4117 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
4118 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
4119 (REWRITE_TAC[affine_dependent]);
4120 (EXISTS_TAC `u1:real^3`);
4124 (NEW_GOAL `~(u1 IN {u0, u2, u3:real^3})`);
4126 (MP_TAC (ASSUME `~NULLSET (X INTER D)`) THEN REWRITE_TAC[]);
4127 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4128 (EXISTS_TAC `X:real^3->bool` THEN STRIP_TAC);
4129 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell4;set_of_list]);
4130 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4131 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
4132 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4133 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4134 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4135 (REWRITE_WITH `{u0, u1, u2, u3} = {u0:real^3,u2, u3}`);
4136 (UP_ASM_TAC THEN SET_TAC[]);
4137 (REWRITE_TAC[COPLANAR_3]);
4139 (REWRITE_WITH `{u0, u1, u2, u3} DELETE u1 = {u0, u2, u3:real^3}`);
4140 (UP_ASM_TAC THEN SET_TAC[]);
4141 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
4142 (EXISTS_TAC `(t2 + t3 + t4) / t2`);
4143 (EXISTS_TAC `(-- t3) / t2`);
4144 (EXISTS_TAC `(-- t4) / t2`);
4147 (REWRITE_WITH `(t2 + t3 + t4) / t2 + --t3 / t2 + --t4 / t2 = t2 / t2`);
4149 (MATCH_MP_TAC REAL_DIV_REFL);
4150 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
4152 `u1 = (t2 + t3 + t4) / t2 % u0 + --t3 / t2 % u2 + --t4 / t2 % u3:real^3 <=>
4153 u1 = (&1 / t2) % ((t2 + t3 + t4) % u0 - t3 % u2 - t4 % u3)`);
4155 (REWRITE_TAC[GSYM (ASSUME `t2 % u1 + t3 % u2 + t4 % u3 =
4156 (t2 + t3 + t4) % u0:real^3`)]);
4157 (REWRITE_TAC[VECTOR_ARITH
4158 `(t2 % u1 + t3 % u2 + t4 % u3) - t3 % u2 - t4 % u3 = t2 % u1`]);
4159 (REWRITE_TAC[VECTOR_MUL_ASSOC]);
4160 (REWRITE_WITH `&1 / t2 * t2 = &1`);
4161 (REWRITE_TAC[REAL_ARITH `&1 / t2 * t2 = t2 / t2`]);
4162 (MATCH_MP_TAC REAL_DIV_REFL);
4163 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
4166 (REWRITE_TAC[REAL_ARITH `a * b * c < d <=> d > b * c * a`; GSYM dist]);
4167 (ASM_REWRITE_TAC[]);
4169 (NEW_GOAL `g x <= (g:real^3->real) xx`);
4170 (NEW_GOAL `!y. y IN convex hull {u2 , u3:real^3} ==> g y <= g xx`);
4171 (EXPAND_TAC "g" THEN ASM_REWRITE_TAC[]);
4172 (NEW_GOAL `&0 < (t3 + t4)`);
4173 (MATCH_MP_TAC (REAL_ARITH `(&0 <= x) /\ ~(x = &0) ==> &0 < x`));
4175 (MATCH_MP_TAC REAL_LE_ADD);
4176 (ASM_REWRITE_TAC[]);
4178 (NEW_GOAL `t3 = &0 /\ t4 = &0`);
4179 (UNDISCH_TAC `&0 <= t3` THEN UNDISCH_TAC `&0 <= t4` THEN
4180 UP_ASM_TAC THEN REAL_ARITH_TAC);
4181 (UP_ASM_TAC THEN STRIP_TAC);
4184 (UNDISCH_TAC `(x - u0) dot (u1 - u0:real^3) > dist (x,u0) * dist (u1,u0) * d`);
4185 (REWRITE_WITH `x = t1 % u0 + t2 % u1:real^3`);
4186 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
4187 (MATCH_MP_TAC (REAL_ARITH `a <= &0 /\ &0 <= b ==> ~(a > b)`));
4189 (REWRITE_WITH `(t1 % u0 + t2 % u1) - u0 = (t1 % u0 + t2 % u1) -
4190 (t1 + t2 + t3 + t4) % u0:real^3`);
4191 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
4192 (REWRITE_TAC[ASSUME `t3 = &0`; ASSUME `t4 = &0`; VECTOR_ARITH
4193 `(t1 % u0 + t2 % u1) - (t1 + t2 + &0 + &0) % u0 = t2 % (u1 - u0)`;
4194 DOT_LMUL; REAL_ARITH `a * b <= &0 <=> &0 <= (--a) * b`]);
4195 (MATCH_MP_TAC REAL_LE_MUL);
4196 (REWRITE_TAC[DOT_POS_LE]);
4197 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
4198 (MATCH_MP_TAC REAL_LE_MUL);
4199 (REWRITE_TAC[DIST_POS_LE]);
4200 (MATCH_MP_TAC REAL_LE_MUL);
4201 (REWRITE_TAC[DIST_POS_LE]);
4202 (EXPAND_TAC "d" THEN UNDISCH_TAC `&0 < c/\ c < &1`);
4204 (UP_ASM_TAC THEN MESON_TAC[]);
4206 (ABBREV_TAC `y = t3 / (t3 + t4) % u2 + t4 / (t3 + t4) % u3:real^3`);
4207 (NEW_GOAL `(g:real^3->real) y <= g xx`);
4208 (FIRST_ASSUM MATCH_MP_TAC);
4209 (REWRITE_TAC[CONVEX_HULL_2; IN; IN_ELIM_THM]);
4210 (EXISTS_TAC `t3 / (t3 + t4)` THEN EXISTS_TAC `t4 / (t3 + t4)`);
4212 (MATCH_MP_TAC REAL_LE_DIV);
4213 (ASM_SIMP_TAC[REAL_LE_ADD]);
4214 (ASM_SIMP_TAC[REAL_LE_ADD; REAL_LE_DIV]);
4215 (REWRITE_TAC[REAL_ARITH `a / x + b / x = (a + b) / x`]);
4216 (MATCH_MP_TAC REAL_DIV_REFL);
4217 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
4218 (ASM_REWRITE_TAC[]);
4220 (ABBREV_TAC `w = t1 / (t1 + t3 + t4) % u0 + t3 / (t1 + t3 + t4) % u2 +
4221 t4 / (t1 + t3 + t4) % u3:real^3`);
4222 (NEW_GOAL `(g:real^3->real) y = g w`);
4225 (REWRITE_WITH `y:real^3 - u0 =
4226 &1 / (t3 + t4) % (t3 % u2 + t4 % u3 - (t3 + t4) % u0)`);
4228 (REWRITE_TAC[VECTOR_ARITH
4229 `(t3 / (t3 + t4) % u2 + t4 / (t3 + t4) % u3) - u0 =
4230 &1 / (t3 + t4) % (t3 % u2 + t4 % u3 - (t3 + t4) % u0) <=>
4231 (t3 + t4) / (t3 + t4) % u0 = u0`]);
4232 (REWRITE_WITH `(t3 + t4) / (t3 + t4) = &1`);
4233 (MATCH_MP_TAC REAL_DIV_REFL);
4234 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
4236 (REWRITE_TAC[NORM_MUL; DOT_LMUL]);
4238 (REWRITE_WITH `w:real^3 - u0 =
4239 &1 / (t1 + t3 + t4) % (t3 % u2 + t4 % u3 - (t3 + t4) % u0)`);
4241 (REWRITE_TAC[VECTOR_ARITH
4242 `(t1 / (t1 + t3 + t4) % u0 +
4243 t3 / (t1 + t3 + t4) % u2 + t4 / (t1 + t3 + t4) % u3) - u0 =
4244 &1 / (t1 + t3 + t4) % (t3 % u2 + t4 % u3 - (t3 + t4) % u0) <=>
4245 (t1 + t3 + t4) / (t1 + t3 + t4) % u0 = u0`]);
4246 (REWRITE_WITH `(t1 + t3 + t4) / (t1 + t3 + t4) = &1`);
4247 (MATCH_MP_TAC REAL_DIV_REFL);
4248 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1`
4249 THEN REAL_ARITH_TAC);
4251 (REWRITE_TAC[NORM_MUL; DOT_LMUL]);
4252 (REWRITE_WITH `abs (&1 / (t3 + t4)) = &1 / (t3 + t4)`);
4253 (REWRITE_TAC[REAL_ABS_REFL]);
4254 (ASM_SIMP_TAC[REAL_LE_DIV;REAL_LE_ADD; REAL_ARITH `&0 <= &1`]);
4255 (REWRITE_WITH `abs (&1 / (t1 + t3 + t4)) = &1 / (t1 + t3 + t4)`);
4256 (REWRITE_TAC[REAL_ABS_REFL]);
4257 (MATCH_MP_TAC REAL_LE_DIV THEN REWRITE_TAC[REAL_ARITH `&0 <= &1`]);
4258 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1`
4259 THEN REAL_ARITH_TAC);
4260 (REWRITE_TAC[REAL_ARITH `(a * x) / ((a * y) * z) =
4261 (a * x) / (a * (y * z))`]);
4263 `a1 = norm (t3 % u2 + t4 % u3 - (t3 + t4) % u0) * norm (u1 - u0:real^3)`);
4264 (NEW_GOAL `~(a1 = &0)`);
4265 (EXPAND_TAC "a1" THEN ASM_REWRITE_TAC[REAL_ENTIRE; NORM_EQ_0;
4266 VECTOR_ARITH `(a - b = vec 0 <=> a = b)/\(a + b-c = vec 0 <=> a + b = c)`]);
4269 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
4270 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4271 (EXISTS_TAC `(X:real^3->bool)`);
4273 (ASM_SIMP_TAC[mcell4; MCELL_EXPLICIT; set_of_list]);
4274 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4275 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
4276 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4277 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4278 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4279 (REWRITE_TAC[coplanar]);
4280 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN
4281 EXISTS_TAC `u3:real^3`);
4282 (MATCH_MP_TAC (SET_RULE `u0 IN S /\ b SUBSET S ==> (u0 INSERT b) SUBSET S`));
4283 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
4284 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
4285 (EXISTS_TAC `&0` THEN EXISTS_TAC `t3 / (t3 + t4)`
4286 THEN EXISTS_TAC `t4 / (t3 + t4)`);
4288 (REWRITE_TAC[REAL_ARITH `&0 + t3 / (t3 + t4) + t4 / (t3 + t4) =
4289 (t3 + t4) / (t3 + t4)`]);
4290 (MATCH_MP_TAC REAL_DIV_REFL);
4291 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
4292 (ASM_REWRITE_TAC[VECTOR_ARITH
4293 `&0 % u1 + t3 / (t3 + t4) % u2 + t4 / (t3 + t4) % u3 =
4294 (&1 / (t3 + t4)) % (t3 % u2 + t4 % u3)`]);
4295 (REWRITE_TAC[VECTOR_MUL_ASSOC; REAL_ARITH `&1 / a * a = a / a`]);
4296 (REWRITE_WITH `(t3 + t4) / (t3 + t4) = &1`);
4297 (MATCH_MP_TAC REAL_DIV_REFL);
4298 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
4302 (NEW_GOAL `~(&1 / (t3 + t4) = &0)`);
4303 (NEW_GOAL `&0 < &1 / (t3 + t4)`);
4304 (MATCH_MP_TAC REAL_LT_DIV);
4305 (ASM_REWRITE_TAC[REAL_ARITH `&0 < &1`]);
4306 (UP_ASM_TAC THEN REAL_ARITH_TAC);
4309 `(&1 / (t3 + t4) * ((t3 % u2 + t4 % u3 - (t3 + t4) % u0) dot (u1 - u0))) /
4310 (&1 / (t3 + t4) * a1) =
4311 ((t3 % u2 + t4 % u3 - (t3 + t4) % u0) dot (u1 - u0:real^3)) / a1`);
4312 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[Trigonometry1.REAL_DIV_MUL2]);
4314 (NEW_GOAL `~(&1 / (t1 + t3 + t4) = &0)`);
4315 (NEW_GOAL `&0 < &1 / (t1 + t3 + t4)`);
4316 (MATCH_MP_TAC REAL_LT_DIV);
4317 (ASM_REWRITE_TAC[REAL_ARITH `&0 < &1`]);
4318 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN
4320 (UP_ASM_TAC THEN REAL_ARITH_TAC);
4323 `(&1 / (t1 + t3 + t4) * ((t3 % u2 + t4 % u3 - (t3 + t4) % u0) dot (u1 - u0))) /
4324 (&1 / (t1 + t3 + t4) * a1) =
4325 ((t3 % u2 + t4 % u3 - (t3 + t4) % u0) dot (u1 - u0:real^3)) / a1`);
4326 (UP_ASM_TAC THEN UNDISCH_TAC `~(a1 = &0)` THEN
4327 MESON_TAC[Trigonometry1.REAL_DIV_MUL2]);
4329 (NEW_GOAL `(g:real^3->real) x <= g w`);
4333 `((x - u0) dot (u1 - u0:real^3)) / (norm (x - u0) * norm (u1 - u0)) <=
4334 ((w - u0) dot (u1 - u0)) / (norm (w - u0) * norm (u1 - u0)) <=>
4335 ((x - u0) dot (u1 - u0)) * (norm (w - u0) * norm (u1 - u0)) <=
4336 ((w - u0) dot (u1 - u0)) * (norm (x - u0) * norm (u1 - u0))`);
4337 (MATCH_MP_TAC RAT_LEMMA4);
4339 (MATCH_MP_TAC REAL_LT_MUL);
4340 (ASM_REWRITE_TAC[NORM_POS_LT; VECTOR_ARITH `x - b = vec 0 <=> x = b`]);
4342 (UNDISCH_TAC `~NULLSET (X INTER D)`);
4345 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4346 (EXISTS_TAC `(X:real^3->bool)`);
4348 (ASM_SIMP_TAC[mcell4; MCELL_EXPLICIT; set_of_list]);
4349 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4350 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
4351 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4352 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4353 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4354 (REWRITE_TAC[coplanar]);
4355 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u2:real^3` THEN
4356 EXISTS_TAC `u3:real^3`);
4357 (ONCE_REWRITE_TAC[SET_RULE `{u0, u1, u2, u3} = {u1, u0, u2, u3}`]);
4358 (MATCH_MP_TAC (SET_RULE `u0 IN S /\ b SUBSET S ==> (u0 INSERT b) SUBSET S`));
4359 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
4360 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
4361 (EXISTS_TAC `(t2 + t3 + t4) / t2` THEN EXISTS_TAC `(--t3) / t2`
4362 THEN EXISTS_TAC `(--t4) / t2`);
4364 (REWRITE_TAC[REAL_ARITH
4365 `(t2 + t3 + t4) / t2 + --t3 / t2 + --t4 / t2 = t2 / t2`]);
4366 (MATCH_MP_TAC REAL_DIV_REFL);
4367 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
4368 (REWRITE_WITH `(t2 + t3 + t4) = &1 - t1`);
4369 (UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN REAL_ARITH_TAC);
4370 (NEW_GOAL `u0 - t1 % u0 - t3 % u2 - t4 % u3:real^3 = t2 % u1`);
4371 (UP_ASM_TAC THEN VECTOR_ARITH_TAC);
4372 (ASM_REWRITE_TAC[VECTOR_ARITH
4373 `(&1 - t1) / t2 % u0 + --t3 / t2 % u2 + --t4 / t2 % u3 =
4374 (&1 / t2) % (u0 - t1 % u0 - t3 % u2 - t4 % u3)`]);
4375 (REWRITE_TAC[VECTOR_MUL_ASSOC; REAL_ARITH `&1 / a * a = a / a`]);
4376 (REWRITE_WITH `t2 / t2 = &1`);
4377 (MATCH_MP_TAC REAL_DIV_REFL);
4378 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
4382 (MATCH_MP_TAC REAL_LT_MUL);
4383 (ASM_REWRITE_TAC[NORM_POS_LT; VECTOR_ARITH `x - b = vec 0 <=> x = b`]);
4384 (EXPAND_TAC "w" THEN STRIP_TAC);
4385 (UNDISCH_TAC `~NULLSET (X INTER D)`);
4388 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4389 (EXISTS_TAC `(X:real^3->bool)`);
4391 (ASM_SIMP_TAC[mcell4; MCELL_EXPLICIT; set_of_list]);
4392 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4393 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
4394 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4395 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4396 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4397 (REWRITE_TAC[coplanar]);
4398 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN
4399 EXISTS_TAC `u3:real^3`);
4400 (MATCH_MP_TAC (SET_RULE `u0 IN S /\ b SUBSET S ==> (u0 INSERT b) SUBSET S`));
4401 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
4402 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
4404 (EXISTS_TAC `&0` THEN EXISTS_TAC `t3 / (t3 + t4)`
4405 THEN EXISTS_TAC `t4 / (t3 + t4)`);
4407 (REWRITE_TAC[REAL_ARITH `&0 + t3 / (t3 + t4) + t4 / (t3 + t4) =
4408 (t3 + t4) / (t3 + t4)`]);
4409 (MATCH_MP_TAC REAL_DIV_REFL);
4410 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
4411 (ASM_REWRITE_TAC[VECTOR_ARITH
4412 `&0 % u1 + t3 / (t3 + t4) % u2 + t4 / (t3 + t4) % u3 =
4413 (&1 / (t3 + t4)) % (t3 % u2 + t4 % u3)`]);
4414 (UP_ASM_TAC THEN REWRITE_TAC[VECTOR_ARITH
4415 `t1 / x % u0 + t3 / x % u2 + t4 / x % u3 =
4416 (&1 / x) % (t1 % u0 + t3 % u2 + t4 % u3)`]);
4417 (REWRITE_WITH `&1 / (t1 + t3 + t4) % (t1 % u0 + t3 % u2 + t4 % u3) = u0 <=>
4418 t1 % u0 + t3 % u2 + t4 % u3 = (t1 + t3 + t4) % u0:real^3`);
4419 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4420 (MATCH_MP_TAC Collect_geom.CHANGE_SIDE);
4421 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 +t3 + t4 = &1` THEN
4424 (REWRITE_TAC[VECTOR_ARITH `t1 % u0 + t3 % u2 + t4 % u3 = (t1 + t3 + t4) % u0
4425 <=> t3 % u2 + t4 % u3 = (t3 + t4) % u0`]);
4426 (STRIP_TAC THEN ASM_REWRITE_TAC[]);
4427 (REWRITE_TAC[VECTOR_MUL_ASSOC; REAL_ARITH `&1 / a * a = a / a`]);
4428 (REWRITE_WITH `(t3 + t4) / (t3 + t4) = &1`);
4429 (MATCH_MP_TAC REAL_DIV_REFL);
4430 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
4434 (REWRITE_WITH `x = t2 % u1 + (t1 + t3 + t4) % w:real^3`);
4435 (ASM_REWRITE_TAC[] THEN EXPAND_TAC "w");
4436 (REWRITE_TAC[VECTOR_ARITH
4437 `x % (t1 /x % u0 + t3 / x % u2 + t4 /x % u3) =
4438 (x / x) % (t1 % u0 + t3 % u2 + t4 % u3)`]);
4439 (REWRITE_WITH `(t1 + t3 + t4) / (t1 + t3 + t4) = &1`);
4440 (MATCH_MP_TAC REAL_DIV_REFL);
4441 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN
4444 (ABBREV_TAC `t = t1 + t3 + t4`);
4445 (REWRITE_WITH `(t2 % u1 + t % w) - u0:real^3 =
4446 (t2 % u1 + t % w) - (t1 + t2 + t3 + t4) % u0`);
4447 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
4448 (REWRITE_WITH `t1 + t2 + t3 + t4 = t2 + t:real`);
4449 (EXPAND_TAC "t" THEN REAL_ARITH_TAC);
4450 (REWRITE_TAC[VECTOR_ARITH
4451 `(t2 % u1 + t % w) - (t2 + t) % u0 = t2 % (u1 - u0) + t % (w - u0)`]);
4452 (ABBREV_TAC `x1 = u1 - u0:real^3`);
4453 (ABBREV_TAC `x2 = w - u0:real^3`);
4455 (REWRITE_WITH `(t2 % x1 + t % x2) dot x1 =
4456 t2 * norm x1 pow 2 + t * x2 dot (x1:real^3)`);
4457 (REWRITE_TAC[NORM_POW_2]);
4460 (NEW_GOAL `t2 * norm x1 pow 2 * norm x2 * norm x1 <=
4461 t2 * (x2 dot x1) * norm x1 * norm (x1:real^3)`);
4462 (REWRITE_TAC[REAL_POW_2; REAL_ARITH `t2 * (x1 * x1) * x2 * x1 <=
4463 t2 * x3 * x1 * x1 <=> &0 <= (x1 pow 2) * (--t2) * (x2 * x1 - x3)`]);
4464 (MATCH_MP_TAC REAL_LE_MUL);
4465 (ASM_SIMP_TAC[REAL_LE_MUL; NORM_POS_LE]);
4466 (MATCH_MP_TAC REAL_LE_MUL);
4467 (REWRITE_TAC[REAL_ARITH `&0 <= a - b <=> b <= a`]);
4469 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
4470 (REWRITE_TAC[NORM_CAUCHY_SCHWARZ]);
4473 `t2 * (x2 dot x1) * norm x1 * norm x1 + t * (x2 dot x1) * norm x2 * norm x1 <=
4474 (x2 dot x1) * norm (t2 % x1 + t % x2) * norm (x1:real^3)`);
4476 (REWRITE_TAC[REAL_ARITH `t2 * x3 * x1 * x1 + t * x3 * x2 * x1 <=
4477 x3 * x4 * x1 <=> &0 <= (x1 * x3) * (x4 - t2 * x1 - t * x2)`]);
4478 (MATCH_MP_TAC REAL_LE_MUL);
4480 (MATCH_MP_TAC REAL_LE_MUL);
4481 (REWRITE_TAC[NORM_POS_LE]);
4482 (ASM_CASES_TAC `x2 dot (x1:real^3) < &0`);
4484 (NEW_GOAL `(g:real^3->real) x <= &0`);
4486 (REWRITE_TAC[REAL_ARITH `a / b <= &0 <=> &0 <= (--a) / b`]);
4487 (MATCH_MP_TAC REAL_LE_DIV);
4488 (SIMP_TAC[NORM_POS_LE; REAL_LE_MUL]);
4490 (REWRITE_WITH `x = t2 % u1 + (t1 + t3 + t4) % w:real^3`);
4491 (ASM_REWRITE_TAC[] THEN EXPAND_TAC "w");
4492 (REWRITE_TAC[VECTOR_ARITH
4493 `x % (t1 /x % u0 + t3 / x % u2 + t4 /x % u3) =
4494 (x / x) % (t1 % u0 + t3 % u2 + t4 % u3)`]);
4496 (REWRITE_WITH `(t1 + t3 + t4) / (t1 + t3 + t4) = &1`);
4497 (MATCH_MP_TAC REAL_DIV_REFL);
4498 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN
4502 (REWRITE_TAC[REAL_ARITH `&0 <= --a <=> a <= &0`]);
4503 (REWRITE_WITH `(t2 % u1 + (t1 + t3 + t4) % w) - u0:real^3 =
4504 (t2 % u1 + (t1 + t3 + t4) % w) - (t1 + t2 + t3 + t4) % u0`);
4505 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
4506 (REWRITE_WITH `(t2 % u1 + (t1 + t3 + t4) % w) - (t1 + t2 + t3 + t4) % u0 =
4507 t2 % x1 + t % x2:real^3`);
4508 (EXPAND_TAC "x1" THEN EXPAND_TAC "x2" THEN EXPAND_TAC "t"
4509 THEN VECTOR_ARITH_TAC);
4510 (NEW_GOAL `t % x2 dot (x1:real^3) <= &0`);
4511 (REWRITE_TAC[DOT_LMUL; REAL_ARITH `a * b <= &0 <=> &0 <= a * (--b)`]);
4512 (MATCH_MP_TAC REAL_LE_MUL);
4514 (EXPAND_TAC "t" THEN UNDISCH_TAC `t2 < &0` THEN
4515 UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN REAL_ARITH_TAC);
4516 (UP_ASM_TAC THEN REAL_ARITH_TAC);
4517 (NEW_GOAL `t2 % x1 dot (x1:real^3) <= &0`);
4518 (REWRITE_TAC[DOT_LMUL; REAL_ARITH `a * b <= &0 <=> &0 <= (--a) * b`]);
4519 (MATCH_MP_TAC REAL_LE_MUL);
4521 (EXPAND_TAC "t" THEN UNDISCH_TAC `t2 < &0` THEN
4522 UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN REAL_ARITH_TAC);
4523 (REWRITE_TAC[DOT_POS_LE]);
4524 (REWRITE_TAC[DOT_LADD]);
4525 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
4526 (UP_ASM_TAC THEN UNDISCH_TAC `d < (g:real^3->real) x`);
4527 (EXPAND_TAC "d" THEN UNDISCH_TAC `&0 < c /\ c < &1`);
4529 (UP_ASM_TAC THEN MESON_TAC[]);
4530 (UP_ASM_TAC THEN REAL_ARITH_TAC);
4532 (REWRITE_TAC [REAL_ARITH `&0 <= a - b * d - c <=> c <= a + (--b) * d`]);
4533 (REWRITE_WITH `t * norm (x2:real^3) = abs t * norm x2`);
4534 (AP_THM_TAC THEN AP_TERM_TAC);
4535 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4536 (REWRITE_TAC[REAL_ABS_REFL]);
4537 (EXPAND_TAC "t" THEN UNDISCH_TAC `t2 < &0` THEN
4538 UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN REAL_ARITH_TAC);
4539 (REWRITE_WITH `(--t2) * norm (x1:real^3) = abs (--t2) * norm x1`);
4540 (AP_THM_TAC THEN AP_TERM_TAC);
4541 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4542 (REWRITE_TAC[REAL_ABS_REFL]);
4543 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
4544 (REWRITE_TAC[GSYM NORM_MUL]);
4546 `norm (t % x2:real^3) = norm ((t2 % x1 + t % x2) + (--t2 % x1))`);
4547 (AP_TERM_TAC THEN VECTOR_ARITH_TAC);
4548 (REWRITE_TAC[NORM_TRIANGLE]);
4549 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
4550 (UNDISCH_TAC `(g:real^3->real) y <= g xx`);
4551 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
4553 (NEW_GOAL `(g:real^3->real) xx <= d2`);
4554 (FIRST_ASSUM MATCH_MP_TAC);
4556 (EXPAND_TAC "g" THEN EXPAND_TAC "f4");
4557 (REWRITE_TAC[IN_ELIM_THM; IN]);
4558 (EXISTS_TAC `vl:(real^3)list`);
4559 (REWRITE_TAC[ASSUME `barV V 3 vl`; ASSUME `vl = [u0;u1;u2;u3:real^3]`;
4560 TRUNCATE_SIMPLEX_EXPLICIT_1]);
4561 (SIMP_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
4563 (SIMP_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
4564 (REWRITE_WITH `mcell 4 V vl = mcell k V vl`);
4565 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
4566 (REWRITE_TAC[GSYM (ASSUME `X = mcell k V vl`)]);
4569 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
4570 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4571 (EXISTS_TAC `X INTER (C:real^3->bool)`);
4573 (ASM_REWRITE_TAC[]);
4574 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
4575 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
4576 (MATCH_MP_TAC (SET_RULE
4577 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
4579 (MATCH_MP_TAC SUBSET_BALL);
4580 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
4581 (MATCH_MP_TAC RCONE_GT_SUBSET);
4582 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
4584 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN EXPAND_TAC "d");
4588 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
4589 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4590 (EXISTS_TAC `(X:real^3->bool)`);
4592 (ASM_SIMP_TAC[mcell4; MCELL_EXPLICIT; set_of_list]);
4593 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
4595 (UP_ASM_TAC THEN MESON_TAC[]);
4598 (* ========================================================================= *)
4600 (NEW_GOAL `~coplanar {u0, u1, u2, u3:real^3}`);
4602 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
4603 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4604 (EXISTS_TAC `X:real^3->bool`);
4606 (ASM_SIMP_TAC[mcell4; MCELL_EXPLICIT; set_of_list]);
4608 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4609 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
4610 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4611 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4612 (ASM_REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4613 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
4616 (ASM_CASES_TAC `azim u0 u1 u2 (u3:real^3) < pi`);
4617 (REWRITE_WITH `vol (L INTER D) = vol (D INTER wedge u0 u1 u2 u3)`);
4618 (ASM_SIMP_TAC[WEDGE_LUNE]);
4619 (REWRITE_WITH `L INTER conic_cap (u0:real^3) u1 r d =
4620 conic_cap u0 u1 r d INTER L`);
4622 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_SYMDIFF);
4623 (REWRITE_WITH `conic_cap (u0:real^3) u1 r d INTER
4624 aff_gt {u0, u1} {u2, u3} DIFF conic_cap u0 u1 r d INTER L = {}`);
4626 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> C INTER A DIFF C INTER B = {}`));
4627 (REWRITE_TAC[AFF_GT_SUBSET_AFF_GE]);
4628 (REWRITE_TAC[SET_RULE `A UNION {} = A`]);
4631 (REWRITE_WITH `aff_ge {u0, u1:real^3} {u2, u3} =
4632 aff_gt {u0, u1} {u2, u3} UNION
4633 UNIONS {aff_ge {u0, u1} ({u2, u3} DELETE a) | a | a IN {u2, u3}}`);
4634 (MATCH_MP_TAC AFF_GE_AFF_GT_DECOMP);
4635 (REWRITE_TAC[Geomdetail.FINITE6]);
4636 (REWRITE_TAC[DISJOINT]);
4638 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
4640 (UNDISCH_TAC `~coplanar {u0, u1, u2, u3:real^3}`);
4641 (REWRITE_WITH `{u0, u1, u2, u3} = {u0, u1, u3:real^3}`);
4642 (UP_ASM_TAC THEN SET_TAC[]);
4643 (REWRITE_TAC[COPLANAR_3]);
4644 (UP_ASM_TAC THEN MESON_TAC[]);
4646 (ASM_CASES_TAC `u3 IN {u0, u1:real^3}`);
4648 (UNDISCH_TAC `~coplanar {u0, u1, u2, u3:real^3}`);
4649 (REWRITE_WITH `{u0, u1, u2, u3} = {u0, u1, u2:real^3}`);
4650 (UP_ASM_TAC THEN SET_TAC[]);
4651 (REWRITE_TAC[COPLANAR_3]);
4652 (UP_ASM_TAC THEN MESON_TAC[]);
4653 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
4655 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4657 `UNIONS {aff_ge {u0, u1:real^3} ({u2, u3} DELETE a) | a | a IN {u2, u3}}`);
4659 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4661 `aff_ge {u0, u1:real^3} {u2} UNION aff_ge {u0, u1:real^3} {u3}`);
4663 (MATCH_MP_TAC NEGLIGIBLE_UNION);
4666 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4667 (EXISTS_TAC `affine hull {u0, u1:real^3, u2}`);
4669 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
4670 (REWRITE_WITH `{u0,u1,u2:real^3} = {u0,u1} UNION {u2}`);
4672 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
4673 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4674 (EXISTS_TAC `affine hull {u0, u1:real^3, u3}`);
4676 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
4677 (REWRITE_WITH `{u0,u1,u3:real^3} = {u0,u1} UNION {u3}`);
4679 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
4680 (REWRITE_TAC[SET_RULE
4681 `UNIONS {aff_ge {u0, u1} ({m, s3} DELETE a) | a | a IN {m, s3}} =
4682 aff_ge {u0, u1} ({m, s3} DELETE s3)
4683 UNION aff_ge {u0, u1} ({m, s3} DELETE m)`]);
4684 (MATCH_MP_TAC (SET_RULE
4685 `A SUBSET B /\ C SUBSET D ==> A UNION C SUBSET B UNION D`));
4687 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
4691 (REWRITE_TAC[DISJOINT]);
4692 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
4694 (UNDISCH_TAC `~coplanar {u0, u1, u2, u3:real^3}`);
4695 (REWRITE_WITH `{u0, u1, u2, u3} = {u0, u1, u3:real^3}`);
4696 (UP_ASM_TAC THEN SET_TAC[]);
4697 (REWRITE_TAC[COPLANAR_3]);
4698 (UP_ASM_TAC THEN MESON_TAC[]);
4699 (UP_ASM_TAC THEN SET_TAC[]);
4701 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
4704 (REWRITE_TAC[DISJOINT]);
4705 (ASM_CASES_TAC `u3 IN {u0, u1:real^3}`);
4707 (UNDISCH_TAC `~coplanar {u0, u1, u2, u3:real^3}`);
4708 (REWRITE_WITH `{u0, u1, u2, u3} = {u0, u1, u2:real^3}`);
4709 (UP_ASM_TAC THEN SET_TAC[]);
4710 (REWRITE_TAC[COPLANAR_3]);
4711 (UP_ASM_TAC THEN MESON_TAC[]);
4712 (UP_ASM_TAC THEN SET_TAC[]);
4716 (* begin the computation *)
4718 (REWRITE_TAC[ASSUME `D = conic_cap (u0:real^3) u1 r d`]);
4719 (REWRITE_WITH `vol (conic_cap u0 u1 r d INTER wedge u0 u1 u2 u3) =
4720 (if &1 < d \/ r < &0
4722 else azim u0 u1 u2 u3 / &3 * (&1 - max d (-- &1)) * r pow 3)`);
4723 (NEW_GOAL `~collinear {u0:real^3, u1, u2} /\ ~collinear {u0, u1, u3}`);
4725 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4726 (EXISTS_TAC `u3:real^3`);
4727 (ASM_REWRITE_TAC[]);
4728 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4729 (EXISTS_TAC `u2:real^3`);
4730 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
4731 (ASM_REWRITE_TAC[]);
4733 (ASM_SIMP_TAC[VOLUME_CONIC_CAP_WEDGE]);
4736 (UNDISCH_TAC `&0 < r` THEN UNDISCH_TAC `d < &1` THEN
4737 UP_ASM_TAC THEN REAL_ARITH_TAC);
4738 (UP_ASM_TAC THEN MESON_TAC[]);
4740 (REWRITE_WITH `azim (u0:real^3) u1 u2 u3 = dihV u0 u1 u2 u3`);
4741 (MATCH_MP_TAC AZIM_DIHV_SAME);
4742 (ASM_REWRITE_TAC[]);
4744 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4745 (EXISTS_TAC `u3:real^3`);
4746 (ASM_REWRITE_TAC[]);
4747 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4748 (EXISTS_TAC `u2:real^3`);
4749 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
4750 (ASM_REWRITE_TAC[]);
4752 (REWRITE_TAC[dihX]);
4755 (UNDISCH_TAC `~NULLSET (X INTER D)`);
4757 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4758 (EXISTS_TAC `X:real^3->bool`);
4759 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
4760 (UP_ASM_TAC THEN MESON_TAC[]);
4764 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
4765 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
4768 initial_sublist [u0; u1] ul)`);
4770 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
4771 (MATCH_MP_TAC SELECT_AX);
4772 (EXISTS_TAC `(4, vl:(real^3)list)`);
4774 (REWRITE_TAC[BETA_THM]);
4775 (REWRITE_TAC[IN; ARITH_RULE `4 <= 4`] THEN ASM_REWRITE_TAC[]);
4777 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
4779 (REWRITE_WITH `initial_sublist [u0;u1:real^3] [u0; u1; u2; u3] /\
4780 LENGTH [u0;u1] = 1 + 1`);
4781 (REWRITE_TAC[GSYM Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
4782 (REWRITE_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
4783 (ASM_REWRITE_TAC[]);
4784 (REWRITE_TAC[LENGTH] THEN ARITH_TAC);
4785 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
4786 (EXPAND_TAC "P" THEN REWRITE_TAC[IN] THEN REPEAT STRIP_TAC);
4788 (NEW_GOAL `k' = 4 /\ mcell k' V ul = mcell 4 V vl`);
4789 (MATCH_MP_TAC Ajripqn.AJRIPQN);
4790 (ASM_REWRITE_TAC[]);
4791 (REWRITE_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
4792 (REWRITE_WITH `mcell k' V ul INTER mcell 4 V vl = X`);
4793 (REWRITE_WITH `mcell 4 V vl = X`);
4794 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
4795 (SET_TAC[ASSUME `X = mcell k' V ul`]);
4798 (UNDISCH_TAC `k' <= 4` THEN REWRITE_TAC[ARITH_RULE
4799 `a <= 4 <=> a = 0 \/a = 1 \/ a = 2 \/ a = 3 \/ a = 4`] THEN SET_TAC[]);
4801 (UP_ASM_TAC THEN UNDISCH_TAC `~NULLSET X` THEN MESON_TAC[]);
4805 (UP_ASM_TAC THEN UP_ASM_TAC THEN ARITH_TAC);
4806 (UP_ASM_TAC THEN MESON_TAC[]);
4809 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN ARITH_TAC);
4810 (UP_ASM_TAC THEN MESON_TAC[]);
4813 (REWRITE_TAC[dihu4]);
4815 (REWRITE_WITH `dihV (EL 0 (ul:(real^3)list)) (EL 1 ul) (EL 2 ul) (EL 3 ul) =
4816 dihV u0 u1 u2 (u3:real^3)`);
4818 (NEW_GOAL `truncate_simplex 1 ul = [u0;u1:real^3] /\ 1 + 1 <= LENGTH ul`);
4819 (REWRITE_TAC[Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
4820 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
4822 (NEW_GOAL `EL 0 (ul:(real^3)list) = EL 0 (truncate_simplex 1 ul)`);
4823 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4824 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
4825 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
4826 CARD (set_of_list ul) = 3 + 1`);
4827 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
4828 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
4831 (NEW_GOAL `EL 1 (ul:(real^3)list) = EL 1 (truncate_simplex 1 ul)`);
4832 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4833 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
4834 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
4835 CARD (set_of_list ul) = 3 + 1`);
4836 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
4837 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
4840 (NEW_GOAL `{EL 0 ul, EL 1 ul, EL 2 ul, EL 3 ul} = {u0, u1,u2,u3:real^3}`);
4842 {EL 0 ul, EL 1 ul, EL 2 ul, EL 3 ul} = {u0, u1,u2,u3:real^3} <=>
4843 convex hull {EL 0 ul, EL 1 ul, EL 2 ul, EL 3 ul} =
4844 convex hull {u0, u1,u2,u3:real^3}`);
4845 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4846 (MATCH_MP_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ);
4849 (UNDISCH_TAC `~NULLSET X`);
4851 (SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4;
4852 ASSUME `X = mcell k' V ul`; ASSUME `k' = 4`]);
4854 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
4855 (MATCH_MP_TAC BARV_3_EXPLICIT);
4856 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
4857 (UP_ASM_TAC THEN STRIP_TAC);
4858 (ASM_REWRITE_TAC[set_of_list]);
4859 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4860 (EXISTS_TAC `affine hull {v0, v1, v2, v3:real^3}`);
4861 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4862 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4863 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4864 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
4865 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
4867 `affine_dependent {EL 0 ul, EL 1 ul, EL 2 ul, (EL 3 ul):real^3}`);
4868 (REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`;
4869 ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
4871 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
4873 (UNDISCH_TAC `~NULLSET X`);
4875 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4; set_of_list]);
4877 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
4878 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
4879 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4880 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4881 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
4882 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
4883 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
4884 (ASM_REWRITE_TAC[]);
4885 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
4887 (REWRITE_WITH `convex hull {u0, u1, u2, u3:real^3} = X`);
4888 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4; set_of_list]);
4892 (UNDISCH_TAC `~NULLSET X`);
4894 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4; set_of_list]);
4895 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
4896 (UP_ASM_TAC THEN MESON_TAC[]);
4898 (SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4;
4899 ASSUME `X = mcell k' V ul`; ASSUME `k' = 4`]);
4901 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
4902 (MATCH_MP_TAC BARV_3_EXPLICIT);
4903 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
4904 (UP_ASM_TAC THEN STRIP_TAC);
4905 (REWRITE_TAC[set_of_list; ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
4906 (REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
4908 (UNDISCH_TAC `~NULLSET X`);
4910 (SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4;
4911 ASSUME `X = mcell k' V ul`; ASSUME `k' = 4`]);
4914 (UP_ASM_TAC THEN UP_ASM_TAC THEN REWRITE_TAC[]);
4915 (UP_ASM_TAC THEN MESON_TAC[]);
4916 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
4917 (UP_ASM_TAC THEN MESON_TAC[]);
4919 (UP_ASM_TAC THEN ASM_REWRITE_TAC[EL; HD; TL; ARITH_RULE `1 = SUC 0`]);
4922 (ASM_CASES_TAC `EL 2 ul = u2:real^3`);
4923 (NEW_GOAL `EL 3 ul = u3:real^3`);
4924 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
4926 (NEW_GOAL `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2:real^3}`);
4927 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
4928 (UNDISCH_TAC `~coplanar {u0,u1,u2,u3:real^3}` THEN REWRITE_TAC[
4929 GSYM (ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2, u3:real^3}`);
4930 ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2:real^3}`; COPLANAR_3]);
4931 (ASM_REWRITE_TAC[]);
4933 (NEW_GOAL `EL 2 ul = u3:real^3`);
4934 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
4936 (NEW_GOAL `{u0:real^3, u1, EL 2 ul, EL 3 ul} = {u0, u1, EL 3 ul}`);
4937 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
4938 (UNDISCH_TAC `~coplanar {u0,u1,u2,u3:real^3}` THEN REWRITE_TAC[
4939 GSYM (ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2, u3:real^3}`);
4940 ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0,u1:real^3, EL 3 ul}`; COPLANAR_3]);
4942 (NEW_GOAL `EL 3 ul = u2:real^3`);
4943 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
4945 (NEW_GOAL `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u3:real^3}`);
4946 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
4947 (UNDISCH_TAC `~coplanar {u0,u1,u2,u3:real^3}` THEN REWRITE_TAC[
4948 GSYM (ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2, u3:real^3}`);
4949 ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u3:real^3}`; COPLANAR_3]);
4950 (ASM_REWRITE_TAC[]);
4951 (REWRITE_TAC[DIHV_SYM_2]);
4953 (REWRITE_TAC[REAL_ARITH `a / b * c * d pow 3 = (c/ b * d pow 3) * a`]);
4954 (REWRITE_TAC[REAL_ARITH `a * b / (&2 * c) = (a / (&2 * c)) * b`]);
4955 (AP_THM_TAC THEN AP_TERM_TAC);
4958 `measurable (conic_cap u0 u1 r d) /\
4959 vol (conic_cap u0 u1 r d) =
4960 (if u1 = u0 \/ &1 <= d \/ r < &0
4962 else &2 / &3 * pi * (&1 - d) * r pow 3)`);
4963 (MATCH_MP_TAC VOLUME_CONIC_CAP);
4965 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
4968 (UP_ASM_TAC THEN STRIP_TAC);
4969 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1:real^3)` THEN MESON_TAC[]);
4970 (UNDISCH_TAC `d < &1` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
4971 (UNDISCH_TAC `&0 < r` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
4972 (UP_ASM_TAC THEN MESON_TAC[]);
4973 (REWRITE_TAC[ARITH_RULE `SUC 0 = 1`]);
4975 (REWRITE_WITH `max d (--(&1)) = d`);
4976 (MATCH_MP_TAC (REAL_ARITH `&0 < d /\ --(&1) < &0 ==> max d (--(&1)) = d`));
4977 (REWRITE_TAC[REAL_NEG_LT0]);
4980 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
4984 (&2 / &3 * pi * (&1 - d) * r pow 3) / (&2 * pi) = (&1 - d) / &3 * r pow 3 *
4985 ((&2 * pi) / (&2 * pi))`);
4987 (REWRITE_WITH `(&2 * pi) / (&2 * pi) = &1`);
4988 (MATCH_MP_TAC REAL_DIV_REFL);
4989 (REWRITE_TAC[REAL_ENTIRE; PI_NZ; REAL_ARITH `~(&2 = &0)`]);
4992 (UP_ASM_TAC THEN UNDISCH_TAC `k' = 4 /\ mcell k' V ul = mcell 4 V vl`
4994 (UP_ASM_TAC THEN MESON_TAC[]);
4996 (* ========================================================================= *)
4999 (ASM_CASES_TAC `azim u0 u1 u3 (u2:real^3) < pi`);
5000 (UNDISCH_TAC `~coplanar {u0, u1, u2, u3:real^3}`);
5001 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
5003 (REWRITE_WITH `vol (L INTER D) = vol (D INTER wedge u0 u1 u3 u2)`);
5004 (ASM_SIMP_TAC[WEDGE_LUNE]);
5005 (REWRITE_WITH `L INTER conic_cap (u0:real^3) u1 r d =
5006 conic_cap u0 u1 r d INTER L`);
5008 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_SYMDIFF);
5010 (REWRITE_WITH `conic_cap (u0:real^3) u1 r d INTER
5011 aff_gt {u0, u1} {u3, u2} DIFF conic_cap u0 u1 r d INTER L = {}`);
5013 (REWRITE_TAC[SET_RULE `{a,b} = {b, a}`]);
5014 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> C INTER A DIFF C INTER B = {}`));
5015 (REWRITE_TAC[AFF_GT_SUBSET_AFF_GE]);
5016 (REWRITE_TAC[SET_RULE `A UNION {} = A`]);
5018 (REWRITE_TAC[SET_RULE `{a,b} = {b, a}`]);
5020 (REWRITE_WITH `aff_ge {u0, u1:real^3} {u2, u3} =
5021 aff_gt {u0, u1} {u2, u3} UNION
5022 UNIONS {aff_ge {u0, u1} ({u2, u3} DELETE a) | a | a IN {u2, u3}}`);
5023 (MATCH_MP_TAC AFF_GE_AFF_GT_DECOMP);
5024 (REWRITE_TAC[Geomdetail.FINITE6]);
5025 (REWRITE_TAC[DISJOINT]);
5027 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
5029 (UNDISCH_TAC `~coplanar {u0, u1, u3, u2:real^3}`);
5030 (REWRITE_WITH `{u0, u1, u3, u2} = {u0, u1, u3:real^3}`);
5031 (UP_ASM_TAC THEN SET_TAC[]);
5032 (REWRITE_TAC[COPLANAR_3]);
5033 (UP_ASM_TAC THEN MESON_TAC[]);
5035 (ASM_CASES_TAC `u3 IN {u0, u1:real^3}`);
5037 (UNDISCH_TAC `~coplanar {u0, u1, u3, u2:real^3}`);
5038 (REWRITE_WITH `{u0, u1, u3, u2} = {u0, u1, u2:real^3}`);
5039 (UP_ASM_TAC THEN SET_TAC[]);
5040 (REWRITE_TAC[COPLANAR_3]);
5041 (UP_ASM_TAC THEN MESON_TAC[]);
5042 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
5044 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5046 `UNIONS {aff_ge {u0, u1:real^3} ({u2, u3} DELETE a) | a | a IN {u2, u3}}`);
5048 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5050 `aff_ge {u0, u1:real^3} {u2} UNION aff_ge {u0, u1:real^3} {u3}`);
5052 (MATCH_MP_TAC NEGLIGIBLE_UNION);
5055 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5056 (EXISTS_TAC `affine hull {u0, u1:real^3, u2}`);
5058 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
5059 (REWRITE_WITH `{u0,u1,u2:real^3} = {u0,u1} UNION {u2}`);
5061 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
5062 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5063 (EXISTS_TAC `affine hull {u0, u1:real^3, u3}`);
5065 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
5066 (REWRITE_WITH `{u0,u1,u3:real^3} = {u0,u1} UNION {u3}`);
5068 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
5069 (REWRITE_TAC[SET_RULE
5070 `UNIONS {aff_ge {u0, u1} ({m, s3} DELETE a) | a | a IN {m, s3}} =
5071 aff_ge {u0, u1} ({m, s3} DELETE s3)
5072 UNION aff_ge {u0, u1} ({m, s3} DELETE m)`]);
5073 (MATCH_MP_TAC (SET_RULE
5074 `A SUBSET B /\ C SUBSET D ==> A UNION C SUBSET B UNION D`));
5076 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
5080 (REWRITE_TAC[DISJOINT]);
5081 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
5083 (UNDISCH_TAC `~coplanar {u0, u1, u3, u2:real^3}`);
5084 (REWRITE_WITH `{u0, u1, u3, u2} = {u0, u1, u3:real^3}`);
5085 (UP_ASM_TAC THEN SET_TAC[]);
5086 (REWRITE_TAC[COPLANAR_3]);
5087 (UP_ASM_TAC THEN MESON_TAC[]);
5088 (UP_ASM_TAC THEN SET_TAC[]);
5090 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
5093 (REWRITE_TAC[DISJOINT]);
5094 (ASM_CASES_TAC `u3 IN {u0, u1:real^3}`);
5096 (UNDISCH_TAC `~coplanar {u0, u1, u3, u2:real^3}`);
5097 (REWRITE_WITH `{u0, u1, u3, u2} = {u0, u1, u2:real^3}`);
5098 (UP_ASM_TAC THEN SET_TAC[]);
5099 (REWRITE_TAC[COPLANAR_3]);
5100 (UP_ASM_TAC THEN MESON_TAC[]);
5101 (UP_ASM_TAC THEN SET_TAC[]);
5105 (REWRITE_TAC[ASSUME `D = conic_cap (u0:real^3) u1 r d`]);
5106 (REWRITE_WITH `vol (conic_cap u0 u1 r d INTER wedge u0 u1 u3 u2) =
5107 (if &1 < d \/ r < &0
5109 else azim u0 u1 u3 u2 / &3 * (&1 - max d (-- &1)) * r pow 3)`);
5110 (NEW_GOAL `~collinear {u0:real^3, u1, u2} /\ ~collinear {u0, u1, u3}`);
5112 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
5113 (EXISTS_TAC `u3:real^3`);
5114 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
5115 (ASM_REWRITE_TAC[]);
5116 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
5117 (EXISTS_TAC `u2:real^3`);
5118 (ASM_REWRITE_TAC[]);
5120 (ASM_SIMP_TAC[VOLUME_CONIC_CAP_WEDGE]);
5124 (UNDISCH_TAC `&0 < r` THEN UNDISCH_TAC `d < &1` THEN
5125 UP_ASM_TAC THEN REAL_ARITH_TAC);
5126 (UP_ASM_TAC THEN MESON_TAC[]);
5128 (REWRITE_WITH `azim (u0:real^3) u1 u3 u2 = dihV u0 u1 u3 u2`);
5129 (MATCH_MP_TAC AZIM_DIHV_SAME);
5130 (ASM_REWRITE_TAC[]);
5133 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
5134 (EXISTS_TAC `u2:real^3`);
5135 (ASM_REWRITE_TAC[]);
5136 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
5137 (EXISTS_TAC `u3:real^3`);
5138 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
5139 (ASM_REWRITE_TAC[]);
5141 (REWRITE_TAC[dihX]);
5144 (UNDISCH_TAC `~NULLSET (X INTER D)`);
5146 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5147 (EXISTS_TAC `X:real^3->bool`);
5148 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
5149 (UP_ASM_TAC THEN MESON_TAC[]);
5153 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
5154 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
5157 initial_sublist [u0; u1] ul)`);
5159 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
5160 (MATCH_MP_TAC SELECT_AX);
5161 (EXISTS_TAC `(4, vl:(real^3)list)`);
5163 (REWRITE_TAC[BETA_THM]);
5164 (REWRITE_TAC[IN; ARITH_RULE `4 <= 4`] THEN ASM_REWRITE_TAC[]);
5166 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
5168 (REWRITE_WITH `initial_sublist [u0;u1:real^3] [u0; u1; u2; u3] /\
5169 LENGTH [u0;u1] = 1 + 1`);
5170 (REWRITE_TAC[GSYM Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
5171 (REWRITE_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
5172 (ASM_REWRITE_TAC[]);
5173 (REWRITE_TAC[LENGTH] THEN ARITH_TAC);
5174 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
5175 (EXPAND_TAC "P" THEN REWRITE_TAC[IN] THEN REPEAT STRIP_TAC);
5177 (NEW_GOAL `k' = 4 /\ mcell k' V ul = mcell 4 V vl`);
5178 (MATCH_MP_TAC Ajripqn.AJRIPQN);
5179 (ASM_REWRITE_TAC[]);
5180 (REWRITE_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
5181 (REWRITE_WITH `mcell k' V ul INTER mcell 4 V vl = X`);
5182 (REWRITE_WITH `mcell 4 V vl = X`);
5183 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
5184 (SET_TAC[ASSUME `X = mcell k' V ul`]);
5187 (UNDISCH_TAC `k' <= 4` THEN REWRITE_TAC[ARITH_RULE
5188 `a <= 4 <=> a = 0 \/a = 1 \/ a = 2 \/ a = 3 \/ a = 4`] THEN SET_TAC[]);
5190 (UP_ASM_TAC THEN UNDISCH_TAC `~NULLSET X` THEN MESON_TAC[]);
5194 (UP_ASM_TAC THEN UP_ASM_TAC THEN ARITH_TAC);
5195 (UP_ASM_TAC THEN MESON_TAC[]);
5198 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN ARITH_TAC);
5199 (UP_ASM_TAC THEN MESON_TAC[]);
5202 (REWRITE_TAC[dihu4]);
5204 (REWRITE_WITH `dihV (EL 0 (ul:(real^3)list)) (EL 1 ul) (EL 2 ul) (EL 3 ul) =
5205 dihV u0 u1 u2 (u3:real^3)`);
5207 (NEW_GOAL `truncate_simplex 1 ul = [u0;u1:real^3] /\ 1 + 1 <= LENGTH ul`);
5208 (REWRITE_TAC[Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
5209 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
5211 (NEW_GOAL `EL 0 (ul:(real^3)list) = EL 0 (truncate_simplex 1 ul)`);
5212 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
5213 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
5214 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
5215 CARD (set_of_list ul) = 3 + 1`);
5216 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
5217 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
5220 (NEW_GOAL `EL 1 (ul:(real^3)list) = EL 1 (truncate_simplex 1 ul)`);
5221 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
5222 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
5223 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
5224 CARD (set_of_list ul) = 3 + 1`);
5225 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
5226 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
5229 (NEW_GOAL `{EL 0 ul, EL 1 ul, EL 2 ul, EL 3 ul} = {u0, u1,u2,u3:real^3}`);
5231 {EL 0 ul, EL 1 ul, EL 2 ul, EL 3 ul} = {u0, u1,u2,u3:real^3} <=>
5232 convex hull {EL 0 ul, EL 1 ul, EL 2 ul, EL 3 ul} =
5233 convex hull {u0, u1,u2,u3:real^3}`);
5234 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
5235 (MATCH_MP_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ);
5238 (UNDISCH_TAC `~NULLSET X`);
5240 (SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4;
5241 ASSUME `X = mcell k' V ul`; ASSUME `k' = 4`]);
5243 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
5244 (MATCH_MP_TAC BARV_3_EXPLICIT);
5245 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
5246 (UP_ASM_TAC THEN STRIP_TAC);
5247 (ASM_REWRITE_TAC[set_of_list]);
5248 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5249 (EXISTS_TAC `affine hull {v0, v1, v2, v3:real^3}`);
5250 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
5251 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
5252 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
5253 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
5254 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
5256 `affine_dependent {EL 0 ul, EL 1 ul, EL 2 ul, (EL 3 ul):real^3}`);
5257 (REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`;
5258 ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
5260 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
5262 (UNDISCH_TAC `~NULLSET X`);
5264 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4; set_of_list]);
5266 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5267 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
5268 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
5269 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
5270 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
5271 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
5272 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
5273 (ASM_REWRITE_TAC[]);
5274 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
5276 (REWRITE_WITH `convex hull {u0, u1, u2, u3:real^3} = X`);
5277 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4; set_of_list]);
5281 (UNDISCH_TAC `~NULLSET X`);
5283 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4; set_of_list]);
5284 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
5285 (UP_ASM_TAC THEN MESON_TAC[]);
5287 (SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4;
5288 ASSUME `X = mcell k' V ul`; ASSUME `k' = 4`]);
5290 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
5291 (MATCH_MP_TAC BARV_3_EXPLICIT);
5292 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
5293 (UP_ASM_TAC THEN STRIP_TAC);
5294 (REWRITE_TAC[set_of_list; ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
5295 (REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
5297 (UNDISCH_TAC `~NULLSET X`);
5299 (SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; mcell4;
5300 ASSUME `X = mcell k' V ul`; ASSUME `k' = 4`]);
5303 (UP_ASM_TAC THEN UP_ASM_TAC THEN REWRITE_TAC[]);
5304 (UP_ASM_TAC THEN MESON_TAC[]);
5305 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
5306 (UP_ASM_TAC THEN MESON_TAC[]);
5308 (UP_ASM_TAC THEN ASM_REWRITE_TAC[EL; HD; TL; ARITH_RULE `1 = SUC 0`]);
5311 (ASM_CASES_TAC `EL 2 ul = u2:real^3`);
5312 (NEW_GOAL `EL 3 ul = u3:real^3`);
5313 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
5315 (NEW_GOAL `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2:real^3}`);
5316 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
5317 (UNDISCH_TAC `~coplanar {u0,u1,u3,u2:real^3}`);
5319 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
5321 GSYM (ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2, u3:real^3}`);
5322 ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2:real^3}`; COPLANAR_3]);
5323 (ASM_REWRITE_TAC[]);
5325 (NEW_GOAL `EL 2 ul = u3:real^3`);
5326 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
5328 (NEW_GOAL `{u0:real^3, u1, EL 2 ul, EL 3 ul} = {u0, u1, EL 3 ul}`);
5329 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
5330 (UNDISCH_TAC `~coplanar {u0,u1,u3,u2:real^3}`);
5332 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
5336 GSYM (ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2, u3:real^3}`);
5337 ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0,u1:real^3, EL 3 ul}`; COPLANAR_3]);
5338 (NEW_GOAL `EL 3 ul = u2:real^3`);
5339 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
5341 (NEW_GOAL `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u3:real^3}`);
5342 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
5343 (UNDISCH_TAC `~coplanar {u0,u1,u3,u2:real^3}`);
5345 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
5348 GSYM (ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u2, u3:real^3}`);
5349 ASSUME `{u0, u1, EL 2 ul, EL 3 ul} = {u0, u1, u3:real^3}`; COPLANAR_3]);
5350 (ASM_REWRITE_TAC[]);
5351 (REWRITE_TAC[DIHV_SYM_2]);
5353 (REWRITE_TAC[DIHV_SYM_2]);
5354 (REWRITE_TAC[REAL_ARITH `a / b * c * d pow 3 = (c/ b * d pow 3) * a`]);
5355 (REWRITE_TAC[REAL_ARITH `a * b / (&2 * c) = (a / (&2 * c)) * b`]);
5356 (AP_THM_TAC THEN AP_TERM_TAC);
5359 `measurable (conic_cap u0 u1 r d) /\
5360 vol (conic_cap u0 u1 r d) =
5361 (if u1 = u0 \/ &1 <= d \/ r < &0
5363 else &2 / &3 * pi * (&1 - d) * r pow 3)`);
5364 (MATCH_MP_TAC VOLUME_CONIC_CAP);
5366 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
5369 (UP_ASM_TAC THEN STRIP_TAC);
5370 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1:real^3)` THEN MESON_TAC[]);
5371 (UNDISCH_TAC `d < &1` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5372 (UNDISCH_TAC `&0 < r` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5373 (UP_ASM_TAC THEN MESON_TAC[]);
5375 (REWRITE_WITH `max d (--(&1)) = d`);
5376 (MATCH_MP_TAC (REAL_ARITH `&0 < d /\ --(&1) < &0 ==> max d (--(&1)) = d`));
5377 (REWRITE_TAC[REAL_NEG_LT0]);
5380 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
5384 (&2 / &3 * pi * (&1 - d) * r pow 3) / (&2 * pi) = (&1 - d) / &3 * r pow 3 *
5385 ((&2 * pi) / (&2 * pi))`);
5387 (REWRITE_WITH `(&2 * pi) / (&2 * pi) = &1`);
5388 (MATCH_MP_TAC REAL_DIV_REFL);
5389 (REWRITE_TAC[REAL_ENTIRE; PI_NZ; REAL_ARITH `~(&2 = &0)`]);
5392 (UP_ASM_TAC THEN UNDISCH_TAC `k' = 4 /\ mcell k' V ul = mcell 4 V vl`
5394 (UP_ASM_TAC THEN MESON_TAC[]);
5396 (* ========================================================================== *)
5399 (NEW_GOAL `azim (u0:real^3) u1 u3 u2 =
5400 (if azim u0 u1 u2 u3 = &0 then &0 else &2 * pi - azim u0 u1 u2 u3)`);
5401 (MATCH_MP_TAC AZIM_COMPL);
5404 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
5405 (EXISTS_TAC `u3:real^3`);
5406 (ASM_REWRITE_TAC[]);
5407 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
5408 (EXISTS_TAC `u2:real^3`);
5409 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b, d, c}`]);
5410 (ASM_REWRITE_TAC[]);
5411 (UP_ASM_TAC THEN COND_CASES_TAC);
5413 (NEW_GOAL `(&0 < pi)`);
5414 (REWRITE_TAC[PI_POS]);
5415 (UNDISCH_TAC `~(azim (u0:real^3) u1 u2 u3 < pi)`);
5416 (ASM_REWRITE_TAC[]);
5417 (UP_ASM_TAC THEN MESON_TAC[]);
5420 (NEW_GOAL `azim (u0:real^3) u1 u2 u3 = pi`);
5421 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5422 (UNDISCH_TAC `~coplanar {u0, u1, u2, u3:real^3}`);
5423 (REWRITE_TAC[] THEN MATCH_MP_TAC AZIM_EQ_0_PI_IMP_COPLANAR);
5424 (ASM_REWRITE_TAC[]);
5425 (UP_ASM_TAC THEN MESON_TAC[]);
5427 (* ========================================================================= *)
5429 (* ========================================================================= *)
5432 (UP_ASM_TAC THEN UP_ASM_TAC THEN UNDISCH_TAC `2 <= k` THEN ARITH_TAC);
5433 (NEW_GOAL `?u2 u3. vl = [u0; u1;u2;u3:real^3]`);
5434 (NEW_GOAL `?v0 v1 u2 u3. vl = [v0; v1;u2;u3:real^3]`);
5435 (MATCH_MP_TAC BARV_3_EXPLICIT);
5436 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
5437 (UP_ASM_TAC THEN STRIP_TAC);
5438 (EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3`);
5440 (REWRITE_WITH `u0 = v0:real^3`);
5441 (REWRITE_WITH `v0:real^3 = HD (truncate_simplex 1 vl)`);
5442 (REWRITE_TAC[ASSUME `vl = [v0;v1;u2;u3:real^3]`;
5443 TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
5444 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_1; HD]);
5446 (REWRITE_WITH `u1 = v1:real^3`);
5447 (REWRITE_WITH `v1:real^3 = HD (TL (truncate_simplex 1 vl))`);
5448 (REWRITE_TAC[ASSUME `vl = [v0;v1;u2;u3:real^3]`;
5449 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
5450 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
5451 (ASM_REWRITE_TAC[]);
5452 (UP_ASM_TAC THEN STRIP_TAC);
5454 (ABBREV_TAC `L = aff_ge{u0, u1} {u2, mxi V vl}`);
5456 (REWRITE_WITH `vol (X INTER D) = vol (L INTER D)`);
5458 (ASM_SIMP_TAC[MCELL_EXPLICIT; TRUNCATE_SIMPLEX_EXPLICIT_2;
5459 mcell3; set_of_list; SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
5461 (ABBREV_TAC `m = mxi V vl`);
5462 (REWRITE_WITH `mxi V [u0; u1; u2; u3] = m`);
5463 (EXPAND_TAC "m" THEN DEL_TAC THEN ASM_REWRITE_TAC[]);
5466 (REWRITE_TAC[SET_RULE `A = B <=> A SUBSET B /\ B SUBSET A`]);
5468 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> A INTER X SUBSET B INTER X`));
5469 (REWRITE_TAC[Marchal_cells_2.CONVEX_HULL_4_SUBSET_AFF_GE_2_2]);
5470 (MATCH_MP_TAC (SET_RULE `(!x. x IN A /\ x IN B ==> x IN C) ==>
5471 A INTER B SUBSET C INTER B`));
5472 (NEW_GOAL `DISJOINT {u0,u1:real^3} {u2, m}`);
5473 (REWRITE_TAC[DISJOINT]);
5474 (MATCH_MP_TAC (MESON[] `(~A:bool ==> F) ==> A`));
5476 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
5477 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5478 (EXISTS_TAC `X:real^3->bool` THEN REWRITE_TAC[SET_RULE `A INTER X SUBSET A`]);
5481 (ASM_SIMP_TAC[MCELL_EXPLICIT; TRUNCATE_SIMPLEX_EXPLICIT_2;
5482 mcell3; set_of_list; SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
5483 (REWRITE_WITH `mxi V [u0; u1; u2; u3] = m`);
5484 (EXPAND_TAC "m" THEN REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
5485 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5486 (EXISTS_TAC `affine hull {u0, u1, u2, m:real^3}`);
5487 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
5488 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
5489 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
5491 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
5492 (REWRITE_WITH `{u0, u1, u2, m} = {u0, u1, m:real^3}`);
5493 (UP_ASM_TAC THEN SET_TAC[]);
5494 (REWRITE_TAC[COPLANAR_3]);
5495 (NEW_GOAL `m IN {u0, u1:real^3}`);
5496 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
5497 (REWRITE_WITH `{u0, u1, u2, m} = {u0, u1, u2:real^3}`);
5498 (UP_ASM_TAC THEN SET_TAC[]);
5499 (REWRITE_TAC[COPLANAR_3]);
5501 (SIMP_TAC[ASSUME `DISJOINT {u0, u1} {u2, m:real^3}`; AFF_GE_2_2]);
5502 (REWRITE_TAC[CONVEX_HULL_4; IN; IN_ELIM_THM]);
5504 (EXISTS_TAC `t1:real` THEN EXISTS_TAC `t2:real` THEN
5505 EXISTS_TAC `t3:real` THEN EXISTS_TAC `t4:real`);
5506 (ASM_REWRITE_TAC[]);
5509 (REWRITE_TAC[REAL_ARITH `&0 <= a <=> (a < &0 ==> F)`]);
5511 (UNDISCH_TAC `conic_cap (u0:real^3) u1 r d x`);
5512 (REWRITE_TAC[MESON[IN] `conic_cap u0 u1 r d x <=> x IN conic_cap u0 u1 r d`;
5513 GSYM (ASSUME `D = conic_cap (u0:real^3) u1 r d`)]);
5515 (REWRITE_TAC[IN_INTER; MESON[] `~(x:bool /\ y) <=> (~x \/ ~y)`]);
5517 (REWRITE_TAC[IN_BALL] THEN STRIP_TAC);
5519 (NEW_GOAL `(?b1:real. b1 IN P1 /\ (!x. x IN P1 ==> b1 <= x))`);
5520 (FIRST_ASSUM MATCH_MP_TAC);
5521 (REWRITE_TAC[SET_RULE `~(X = {}) <=> (?x. x IN X)`]);
5522 (EXISTS_TAC `(f1:(real^3)list -> real) vl`);
5523 (EXPAND_TAC "P1" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
5524 (EXISTS_TAC `vl:(real^3)list`);
5525 (ASM_REWRITE_TAC[]);
5526 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
5527 (ASM_REWRITE_TAC[]);
5529 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
5530 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5531 (EXISTS_TAC `X INTER (C:real^3->bool)`);
5533 (ASM_REWRITE_TAC[]);
5534 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
5535 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
5536 (MATCH_MP_TAC (SET_RULE
5537 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
5539 (MATCH_MP_TAC SUBSET_BALL);
5540 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
5541 (MATCH_MP_TAC RCONE_GT_SUBSET);
5542 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
5543 (FIRST_X_ASSUM CHOOSE_TAC);
5545 (NEW_GOAL `r1 = (@b. b IN P1 /\ (!x. x IN P1 ==> b <= x:real))`);
5549 (UP_ASM_TAC THEN REWRITE_TAC[]);
5550 (REWRITE_TAC[SET_RULE `~(X = {}) <=> (?x. x IN X)`]);
5551 (EXISTS_TAC `(f1:(real^3)list -> real) vl`);
5552 (EXPAND_TAC "P1" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
5553 (EXISTS_TAC `vl:(real^3)list`);
5554 (ASM_REWRITE_TAC[]);
5555 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
5558 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
5559 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5560 (EXISTS_TAC `X INTER (C:real^3->bool)`);
5562 (ASM_REWRITE_TAC[]);
5563 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
5564 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
5565 (MATCH_MP_TAC (SET_RULE
5566 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
5568 (MATCH_MP_TAC SUBSET_BALL);
5569 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
5570 (MATCH_MP_TAC RCONE_GT_SUBSET);
5571 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
5572 (UP_ASM_TAC THEN MESON_TAC[]);
5575 (ABBREV_TAC `Q1 = (\b:real. b IN P1 /\ (!x. x IN P1 ==> b <= x))`);
5576 (NEW_GOAL `(Q1:real->bool) r1`);
5577 (ASM_REWRITE_TAC[]);
5578 (MATCH_MP_TAC SELECT_AX);
5579 (EXISTS_TAC `b1:real` THEN EXPAND_TAC "Q1");
5580 (ASM_REWRITE_TAC[]);
5581 (UP_ASM_TAC THEN EXPAND_TAC "Q1" THEN REPEAT STRIP_TAC);
5582 (NEW_GOAL `r1 <= f1 (vl:(real^3)list)`);
5583 (FIRST_ASSUM MATCH_MP_TAC);
5584 (EXPAND_TAC "P1" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
5585 (EXISTS_TAC `vl:(real^3)list`);
5586 (ASM_REWRITE_TAC[]);
5587 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
5588 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`]);
5590 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
5591 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5592 (EXISTS_TAC `X INTER (C:real^3->bool)`);
5594 (ASM_REWRITE_TAC[]);
5595 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
5596 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
5597 (MATCH_MP_TAC (SET_RULE
5598 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
5600 (MATCH_MP_TAC SUBSET_BALL);
5601 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
5602 (MATCH_MP_TAC RCONE_GT_SUBSET);
5603 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
5605 (UP_ASM_TAC THEN EXPAND_TAC "f1" THEN REWRITE_TAC[EL; HD; TL;
5606 ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`;
5607 ASSUME `vl= [u0; u1; u2; u3:real^3]`]);
5608 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
5610 (REWRITE_TAC[ASSUME `vl = [u0;u1;u2;u3:real^3]`]);
5613 (NEW_GOAL `!v. v IN affine hull {u1, u2, m:real^3} ==> r1 <= dist (u0, v)`);
5615 (NEW_GOAL `dist (u0,closest_point (affine hull {u1, u2, m}) u0) <=
5616 dist (u0, v:real^3)`);
5617 (MATCH_MP_TAC CLOSEST_POINT_LE);
5618 (ASM_REWRITE_TAC[CLOSED_AFFINE_HULL]);
5619 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5621 (NEW_GOAL `r <= dist (u0:real^3, x)`);
5622 (REWRITE_TAC[dist]);
5623 (REWRITE_WITH `u0:real^3 - x = (t1 + t2 + t3 + t4) % u0 - x`);
5624 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
5625 (REWRITE_TAC[VECTOR_ADD_RDISTRIB]);
5626 (ASM_REWRITE_TAC[VECTOR_ARITH `(t1 % u0 + t2 % u0 + t3 % u0 + t4 % u0) -
5627 (t1 % u0 + t2 % u1 + t3 % u2 + t4 % u3) =
5628 (t2 + t3 + t4) % u0 - (t2 % u1 + t3 % u2 + t4 % u3)`]);
5629 (ABBREV_TAC `y:real^3 = t2 /(t2 + t3 + t4) % u1 +
5630 t3 /(t2 + t3 + t4) % u2 +
5631 t4 /(t2 + t3 + t4) % m`);
5632 (REWRITE_WITH `(t2 % u1 + t3 % u2 + t4 % m) = (t2 + t3 + t4) % (y:real^3)`);
5634 (REWRITE_TAC[VECTOR_ARITH `x % (t2 / x % u1 + t3 / x % u2 + t4 / x % u3) =
5635 (x / x) % (t2 % u1 + t3 % u2 + t4 % u3)`]);
5636 (REWRITE_WITH `(t2 + t3 + t4) / (t2 + t3 + t4) = &1`);
5637 (MATCH_MP_TAC REAL_DIV_REFL);
5638 (UNDISCH_TAC `t1 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1`);
5641 (REWRITE_TAC[VECTOR_ARITH `a % x - a % y = a % (x - y)`; NORM_MUL]);
5643 (NEW_GOAL `&1 < t2 + t3 + t4`);
5644 (UNDISCH_TAC `t1 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1`);
5646 (REWRITE_WITH `abs (t2 + t3 + t4) = t2 + t3 + t4`);
5647 (REWRITE_TAC[REAL_ABS_REFL] THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5648 (REWRITE_TAC[GSYM dist]);
5649 (NEW_GOAL `r1 <= dist (u0, y:real^3)`);
5650 (FIRST_ASSUM MATCH_MP_TAC);
5651 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
5652 (EXISTS_TAC `t2 / (t2 + t3 + t4)` THEN EXISTS_TAC `t3 / (t2 + t3 + t4)` THEN
5653 EXISTS_TAC `t4 / (t2 + t3 + t4)`);
5655 (REWRITE_TAC[REAL_ARITH `a / x + b / x + c / x = (a+b+c)/ x`]);
5656 (MATCH_MP_TAC REAL_DIV_REFL);
5657 (UP_ASM_TAC THEN REAL_ARITH_TAC);
5658 (ASM_REWRITE_TAC[]);
5660 (NEW_GOAL `r1 <= (t2 + t3 + t4) * dist (u0,y:real^3)`);
5661 (NEW_GOAL `dist (u0,y) <= (t2 + t3 + t4) * dist (u0,y:real^3)`);
5662 (REWRITE_TAC[REAL_ARITH `a <= b * a <=> &0 <= (b - &1) * a`]);
5663 (MATCH_MP_TAC REAL_LE_MUL);
5664 (REWRITE_TAC[DIST_POS_LE]);
5665 (DEL_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5666 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5667 (EXPAND_TAC "r" THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5668 (UNDISCH_TAC `dist (u0, x:real^3) < r` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
5670 (* ========================================================================== *)
5672 (REWRITE_TAC[REAL_ARITH `&0 <= a <=> (a < &0 ==> F)`]);
5674 (UNDISCH_TAC `conic_cap (u0:real^3) u1 r d x`);
5675 (REWRITE_TAC[MESON[IN] `conic_cap u0 u1 r d x <=> x IN conic_cap u0 u1 r d`;
5676 GSYM (ASSUME `D = conic_cap (u0:real^3) u1 r d`)]);
5678 (REWRITE_TAC[IN_INTER; MESON[] `~(x:bool /\ y) <=> (~x \/ ~y)`]);
5680 (REWRITE_TAC[IN; IN_ELIM_THM; rcone_gt; rconesgn] THEN STRIP_TAC);
5682 (NEW_GOAL `(?b1:real. b1 IN P3 /\ (!x. x IN P3 ==> x <= b1))`);
5683 (FIRST_ASSUM MATCH_MP_TAC);
5684 (REWRITE_TAC[SET_RULE `~(X = {}) <=> (?x. x IN X)`]);
5685 (EXISTS_TAC `(f3:(real^3)list -> real) vl`);
5686 (EXPAND_TAC "P3" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
5687 (EXISTS_TAC `vl:(real^3)list`);
5688 (ASM_REWRITE_TAC[]);
5689 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
5690 (ASM_SIMP_TAC[MCELL_EXPLICIT]);
5692 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
5693 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5694 (EXISTS_TAC `X INTER (C:real^3->bool)`);
5696 (ASM_REWRITE_TAC[]);
5697 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
5698 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
5699 (MATCH_MP_TAC (SET_RULE
5700 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
5702 (MATCH_MP_TAC SUBSET_BALL);
5703 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
5704 (MATCH_MP_TAC RCONE_GT_SUBSET);
5705 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
5706 (FIRST_X_ASSUM CHOOSE_TAC);
5708 (NEW_GOAL `d1 = (@b. b IN P3 /\ (!x. x IN P3 ==> x <= b:real))`);
5712 (UP_ASM_TAC THEN REWRITE_TAC[]);
5713 (REWRITE_TAC[SET_RULE `~(X = {}) <=> (?x. x IN X)`]);
5714 (EXISTS_TAC `(f3:(real^3)list -> real) vl`);
5715 (EXPAND_TAC "P3" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
5716 (EXISTS_TAC `vl:(real^3)list`);
5717 (ASM_REWRITE_TAC[]);
5718 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
5719 (ASM_SIMP_TAC[MCELL_EXPLICIT]);
5721 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
5722 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5723 (EXISTS_TAC `X INTER (C:real^3->bool)`);
5725 (ASM_REWRITE_TAC[]);
5726 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
5727 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
5728 (MATCH_MP_TAC (SET_RULE
5729 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
5731 (MATCH_MP_TAC SUBSET_BALL);
5732 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
5733 (MATCH_MP_TAC RCONE_GT_SUBSET);
5734 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
5735 (UP_ASM_TAC THEN MESON_TAC[]);
5738 (ABBREV_TAC `Q1 = (\b:real. b IN P3 /\ (!x. x IN P3 ==> x <= b))`);
5739 (NEW_GOAL `(Q1:real->bool) d1`);
5740 (ASM_REWRITE_TAC[]);
5741 (MATCH_MP_TAC SELECT_AX);
5742 (EXISTS_TAC `b1:real` THEN EXPAND_TAC "Q1");
5743 (ASM_REWRITE_TAC[]);
5744 (UP_ASM_TAC THEN EXPAND_TAC "Q1" THEN REPEAT STRIP_TAC);
5746 (NEW_GOAL `f3 (vl:(real^3)list) <= d1`);
5747 (FIRST_ASSUM MATCH_MP_TAC);
5748 (EXPAND_TAC "P3" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
5749 (EXISTS_TAC `vl:(real^3)list`);
5750 (ASM_REWRITE_TAC[]);
5751 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
5752 (ASM_SIMP_TAC[MCELL_EXPLICIT]);
5754 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
5755 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5756 (EXISTS_TAC `X INTER (C:real^3->bool)`);
5758 (ASM_REWRITE_TAC[]);
5759 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
5760 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
5761 (MATCH_MP_TAC (SET_RULE
5762 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
5764 (MATCH_MP_TAC SUBSET_BALL);
5765 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
5766 (MATCH_MP_TAC RCONE_GT_SUBSET);
5767 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
5769 (UP_ASM_TAC THEN EXPAND_TAC "f3");
5770 (REWRITE_TAC[EL; HD; TL;
5771 ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`; ASSUME `mxi V vl = m`;
5772 ASSUME `vl= [u0; u1; u2; u3:real^3]`] THEN STRIP_TAC);
5774 (ABBREV_TAC `xx = smallest_angle_line u2 m u0 u1`);
5776 (MP_TAC (ASSUME `smallest_angle_line u2 m u0 u1 = xx`));
5777 (REWRITE_TAC[smallest_angle_line; smallest_angle_set]);
5779 (\x:real^3. x IN convex hull {u2, m} /\
5780 (!y. y IN convex hull {u2, m}
5781 ==> ((y - u0) dot (u1 - u0)) /
5782 (norm (y - u0) * norm (u1 - u0)) <=
5783 ((x - u0) dot (u1 - u0)) /
5784 (norm (x - u0) * norm (u1 - u0))))`);
5785 (ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN STRIP_TAC);
5786 (NEW_GOAL `(Q2:real^3->bool) xx`);
5787 (ONCE_ASM_REWRITE_TAC[]);
5788 (MATCH_MP_TAC SELECT_AX);
5791 (MATCH_MP_TAC SMALLEST_ANGLE_LINE_EXISTS);
5793 (ASM_REWRITE_TAC[]);
5796 (UNDISCH_TAC `~NULLSET (X INTER D)`);
5798 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5799 (EXISTS_TAC `X:real^3->bool` THEN STRIP_TAC);
5800 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell3; set_of_list;TRUNCATE_SIMPLEX_EXPLICIT_2;
5801 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
5802 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
5804 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
5806 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5808 (EXISTS_TAC `affine hull {u0, u1, u2, m:real^3}`);
5810 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
5811 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
5812 (REWRITE_TAC[coplanar]);
5813 (UNDISCH_TAC `u0 IN convex hull {u2, m:real^3}`);
5814 (REWRITE_TAC[CONVEX_HULL_2; IN; IN_ELIM_THM] THEN STRIP_TAC);
5815 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN
5816 EXISTS_TAC `m:real^3`);
5817 (MATCH_MP_TAC (SET_RULE `a IN s /\ b SUBSET s ==> (a INSERT b) SUBSET s`));
5818 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
5819 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
5820 (EXISTS_TAC `&0` THEN EXISTS_TAC `u:real` THEN EXISTS_TAC `v:real`);
5822 (UNDISCH_TAC `u + v = &1` THEN REAL_ARITH_TAC);
5823 (UP_ASM_TAC THEN VECTOR_ARITH_TAC);
5824 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
5825 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
5828 (UP_ASM_TAC THEN EXPAND_TAC "Q2");
5830 (ABBREV_TAC `g = (\y:real^3. ((y - u0) dot (u1 - u0)) /
5831 (norm (y - u0) * norm (u1 - u0)))`);
5833 (NEW_GOAL `d < (g:real^3->real) x`);
5836 `d < ((x - u0) dot (u1 - u0)) / (norm (x - u0) * norm (u1 - u0:real^3)) <=>
5837 d * (norm (x - u0) * norm (u1 - u0)) < (x - u0) dot (u1 - u0)`);
5838 (MATCH_MP_TAC REAL_LT_RDIV_EQ);
5839 (MATCH_MP_TAC (REAL_ARITH `&0 <= a /\ ~(a = &0) ==> &0 < a`));
5841 (MATCH_MP_TAC REAL_LE_MUL);
5842 (ASM_REWRITE_TAC[NORM_POS_LE]);
5843 (REWRITE_TAC[REAL_ENTIRE; NORM_EQ_0; VECTOR_ARITH `x - y = vec 0 <=> x = y`]);
5844 (ASM_REWRITE_TAC[]);
5845 (REWRITE_WITH `t1 % u0 + t2 % u1 + t3 % u2 + t4 % m = u0:real^3 <=>
5846 t1 % u0 + t2 % u1 + t3 % u2 + t4 % m = (t1 + t2 + t3 + t4) % u0`);
5847 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
5848 (REWRITE_TAC[VECTOR_ARITH `t1 % u0 + u = (t1 + t2) % u0 <=> u = t2 % u0`]);
5851 (MP_TAC (ASSUME `~NULLSET (X INTER D)`) THEN REWRITE_TAC[]);
5852 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5853 (EXISTS_TAC `X:real^3->bool` THEN STRIP_TAC);
5854 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell3;set_of_list;
5855 TRUNCATE_SIMPLEX_EXPLICIT_2; SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
5856 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
5858 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
5859 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5861 (EXISTS_TAC `affine hull {u0, u1, u2, m:real^3}`);
5862 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
5863 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
5864 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
5865 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
5866 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
5867 (REWRITE_TAC[affine_dependent]);
5868 (EXISTS_TAC `u1:real^3`);
5872 (NEW_GOAL `~(u1 IN {u0, u2, m:real^3})`);
5874 (MP_TAC (ASSUME `~NULLSET (X INTER D)`) THEN REWRITE_TAC[]);
5875 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5876 (EXISTS_TAC `X:real^3->bool` THEN STRIP_TAC);
5877 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell3;set_of_list;
5878 TRUNCATE_SIMPLEX_EXPLICIT_2; SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
5879 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
5881 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
5882 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
5883 (EXISTS_TAC `affine hull {u0, u1, u2, m:real^3}`);
5884 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
5885 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
5886 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
5887 (REWRITE_WITH `{u0, u1, u2, m} = {u0:real^3,u2, m}`);
5888 (UP_ASM_TAC THEN SET_TAC[]);
5889 (REWRITE_TAC[COPLANAR_3]);
5891 (REWRITE_WITH `{u0, u1, u2, m} DELETE u1 = {u0, u2, m:real^3}`);
5892 (UP_ASM_TAC THEN SET_TAC[]);
5893 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
5894 (EXISTS_TAC `(t2 + t3 + t4) / t2`);
5895 (EXISTS_TAC `(-- t3) / t2`);
5896 (EXISTS_TAC `(-- t4) / t2`);
5899 (REWRITE_WITH `(t2 + t3 + t4) / t2 + --t3 / t2 + --t4 / t2 = t2 / t2`);
5901 (MATCH_MP_TAC REAL_DIV_REFL);
5902 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
5904 `u1 = (t2 + t3 + t4) / t2 % u0 + --t3 / t2 % u2 + --t4 / t2 % m:real^3 <=>
5905 u1 = (&1 / t2) % ((t2 + t3 + t4) % u0 - t3 % u2 - t4 % m)`);
5907 (REWRITE_TAC[GSYM (ASSUME `t2 % u1 + t3 % u2 + t4 % m =
5908 (t2 + t3 + t4) % u0:real^3`)]);
5909 (REWRITE_TAC[VECTOR_ARITH
5910 `(t2 % u1 + t3 % u2 + t4 % u3) - t3 % u2 - t4 % u3 = t2 % u1`]);
5911 (REWRITE_TAC[VECTOR_MUL_ASSOC]);
5912 (REWRITE_WITH `&1 / t2 * t2 = &1`);
5913 (REWRITE_TAC[REAL_ARITH `&1 / t2 * t2 = t2 / t2`]);
5914 (MATCH_MP_TAC REAL_DIV_REFL);
5915 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
5918 (REWRITE_TAC[REAL_ARITH `a * b * c < d <=> d > b * c * a`; GSYM dist]);
5919 (ASM_REWRITE_TAC[]);
5921 (NEW_GOAL `g x <= (g:real^3->real) xx`);
5922 (NEW_GOAL `!y. y IN convex hull {u2 , m:real^3} ==> g y <= g xx`);
5923 (EXPAND_TAC "g" THEN ASM_REWRITE_TAC[]);
5924 (NEW_GOAL `&0 < (t3 + t4)`);
5925 (MATCH_MP_TAC (REAL_ARITH `(&0 <= x) /\ ~(x = &0) ==> &0 < x`));
5927 (MATCH_MP_TAC REAL_LE_ADD);
5928 (ASM_REWRITE_TAC[]);
5930 (NEW_GOAL `t3 = &0 /\ t4 = &0`);
5931 (UNDISCH_TAC `&0 <= t3` THEN UNDISCH_TAC `&0 <= t4` THEN
5932 UP_ASM_TAC THEN REAL_ARITH_TAC);
5933 (UP_ASM_TAC THEN STRIP_TAC);
5936 (UNDISCH_TAC `(x - u0) dot (u1 - u0:real^3) > dist (x,u0) * dist (u1,u0) * d`);
5937 (REWRITE_WITH `x = t1 % u0 + t2 % u1:real^3`);
5938 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
5939 (MATCH_MP_TAC (REAL_ARITH `a <= &0 /\ &0 <= b ==> ~(a > b)`));
5941 (REWRITE_WITH `(t1 % u0 + t2 % u1) - u0 = (t1 % u0 + t2 % u1) -
5942 (t1 + t2 + t3 + t4) % u0:real^3`);
5943 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
5944 (REWRITE_TAC[ASSUME `t3 = &0`; ASSUME `t4 = &0`; VECTOR_ARITH
5945 `(t1 % u0 + t2 % u1) - (t1 + t2 + &0 + &0) % u0 = t2 % (u1 - u0)`;
5946 DOT_LMUL; REAL_ARITH `a * b <= &0 <=> &0 <= (--a) * b`]);
5947 (MATCH_MP_TAC REAL_LE_MUL);
5948 (REWRITE_TAC[DOT_POS_LE]);
5949 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
5950 (MATCH_MP_TAC REAL_LE_MUL);
5951 (REWRITE_TAC[DIST_POS_LE]);
5952 (MATCH_MP_TAC REAL_LE_MUL);
5953 (REWRITE_TAC[DIST_POS_LE]);
5954 (EXPAND_TAC "d" THEN UNDISCH_TAC `&0 < c/\ c < &1`);
5956 (UP_ASM_TAC THEN MESON_TAC[]);
5958 (ABBREV_TAC `y = t3 / (t3 + t4) % u2 + t4 / (t3 + t4) % m:real^3`);
5959 (NEW_GOAL `(g:real^3->real) y <= g xx`);
5960 (FIRST_ASSUM MATCH_MP_TAC);
5961 (REWRITE_TAC[CONVEX_HULL_2; IN; IN_ELIM_THM]);
5962 (EXISTS_TAC `t3 / (t3 + t4)` THEN EXISTS_TAC `t4 / (t3 + t4)`);
5964 (MATCH_MP_TAC REAL_LE_DIV);
5965 (ASM_SIMP_TAC[REAL_LE_ADD]);
5966 (ASM_SIMP_TAC[REAL_LE_ADD; REAL_LE_DIV]);
5967 (REWRITE_TAC[REAL_ARITH `a / x + b / x = (a + b) / x`]);
5968 (MATCH_MP_TAC REAL_DIV_REFL);
5969 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
5970 (ASM_REWRITE_TAC[]);
5972 (ABBREV_TAC `w = t1 / (t1 + t3 + t4) % u0 + t3 / (t1 + t3 + t4) % u2 +
5973 t4 / (t1 + t3 + t4) % m:real^3`);
5974 (NEW_GOAL `(g:real^3->real) y = g w`);
5977 (REWRITE_WITH `y:real^3 - u0 =
5978 &1 / (t3 + t4) % (t3 % u2 + t4 % m - (t3 + t4) % u0)`);
5980 (REWRITE_TAC[VECTOR_ARITH
5981 `(t3 / (t3 + t4) % u2 + t4 / (t3 + t4) % u3) - u0 =
5982 &1 / (t3 + t4) % (t3 % u2 + t4 % u3 - (t3 + t4) % u0) <=>
5983 (t3 + t4) / (t3 + t4) % u0 = u0`]);
5984 (REWRITE_WITH `(t3 + t4) / (t3 + t4) = &1`);
5985 (MATCH_MP_TAC REAL_DIV_REFL);
5986 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
5988 (REWRITE_TAC[NORM_MUL; DOT_LMUL]);
5990 (REWRITE_WITH `w:real^3 - u0 =
5991 &1 / (t1 + t3 + t4) % (t3 % u2 + t4 % m - (t3 + t4) % u0)`);
5993 (REWRITE_TAC[VECTOR_ARITH
5994 `(t1 / (t1 + t3 + t4) % u0 +
5995 t3 / (t1 + t3 + t4) % u2 + t4 / (t1 + t3 + t4) % u3) - u0 =
5996 &1 / (t1 + t3 + t4) % (t3 % u2 + t4 % u3 - (t3 + t4) % u0) <=>
5997 (t1 + t3 + t4) / (t1 + t3 + t4) % u0 = u0`]);
5998 (REWRITE_WITH `(t1 + t3 + t4) / (t1 + t3 + t4) = &1`);
5999 (MATCH_MP_TAC REAL_DIV_REFL);
6000 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1`
6001 THEN REAL_ARITH_TAC);
6003 (REWRITE_TAC[NORM_MUL; DOT_LMUL]);
6004 (REWRITE_WITH `abs (&1 / (t3 + t4)) = &1 / (t3 + t4)`);
6005 (REWRITE_TAC[REAL_ABS_REFL]);
6006 (ASM_SIMP_TAC[REAL_LE_DIV;REAL_LE_ADD; REAL_ARITH `&0 <= &1`]);
6007 (REWRITE_WITH `abs (&1 / (t1 + t3 + t4)) = &1 / (t1 + t3 + t4)`);
6008 (REWRITE_TAC[REAL_ABS_REFL]);
6009 (MATCH_MP_TAC REAL_LE_DIV THEN REWRITE_TAC[REAL_ARITH `&0 <= &1`]);
6010 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1`
6011 THEN REAL_ARITH_TAC);
6012 (REWRITE_TAC[REAL_ARITH `(a * x) / ((a * y) * z) =
6013 (a * x) / (a * (y * z))`]);
6015 `a1 = norm (t3 % u2 + t4 % m - (t3 + t4) % u0) * norm (u1 - u0:real^3)`);
6016 (NEW_GOAL `~(a1 = &0)`);
6017 (EXPAND_TAC "a1" THEN ASM_REWRITE_TAC[REAL_ENTIRE; NORM_EQ_0;
6018 VECTOR_ARITH `(a - b = vec 0 <=> a = b)/\(a + b-c = vec 0 <=> a + b = c)`]);
6021 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
6022 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6023 (EXISTS_TAC `(X:real^3->bool)`);
6026 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; TRUNCATE_SIMPLEX_EXPLICIT_2;
6027 set_of_list; SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6028 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
6030 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
6032 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6033 (EXISTS_TAC `affine hull {u0, u1, u2, m:real^3}`);
6034 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
6035 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
6036 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
6037 (REWRITE_TAC[coplanar]);
6038 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN
6039 EXISTS_TAC `m:real^3`);
6040 (MATCH_MP_TAC (SET_RULE `u0 IN S /\ b SUBSET S ==> (u0 INSERT b) SUBSET S`));
6041 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
6042 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
6043 (EXISTS_TAC `&0` THEN EXISTS_TAC `t3 / (t3 + t4)`
6044 THEN EXISTS_TAC `t4 / (t3 + t4)`);
6046 (REWRITE_TAC[REAL_ARITH `&0 + t3 / (t3 + t4) + t4 / (t3 + t4) =
6047 (t3 + t4) / (t3 + t4)`]);
6048 (MATCH_MP_TAC REAL_DIV_REFL);
6049 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
6050 (ASM_REWRITE_TAC[VECTOR_ARITH
6051 `&0 % u1 + t3 / (t3 + t4) % u2 + t4 / (t3 + t4) % u3 =
6052 (&1 / (t3 + t4)) % (t3 % u2 + t4 % u3)`]);
6053 (REWRITE_TAC[VECTOR_MUL_ASSOC; REAL_ARITH `&1 / a * a = a / a`]);
6054 (REWRITE_WITH `(t3 + t4) / (t3 + t4) = &1`);
6055 (MATCH_MP_TAC REAL_DIV_REFL);
6056 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
6060 (NEW_GOAL `~(&1 / (t3 + t4) = &0)`);
6061 (NEW_GOAL `&0 < &1 / (t3 + t4)`);
6062 (MATCH_MP_TAC REAL_LT_DIV);
6063 (ASM_REWRITE_TAC[REAL_ARITH `&0 < &1`]);
6064 (UP_ASM_TAC THEN REAL_ARITH_TAC);
6067 `(&1 / (t3 + t4) * ((t3 % u2 + t4 % m - (t3 + t4) % u0) dot (u1 - u0))) /
6068 (&1 / (t3 + t4) * a1) =
6069 ((t3 % u2 + t4 % m - (t3 + t4) % u0) dot (u1 - u0:real^3)) / a1`);
6070 (UP_ASM_TAC THEN UP_ASM_TAC THEN MESON_TAC[Trigonometry1.REAL_DIV_MUL2]);
6072 (NEW_GOAL `~(&1 / (t1 + t3 + t4) = &0)`);
6073 (NEW_GOAL `&0 < &1 / (t1 + t3 + t4)`);
6074 (MATCH_MP_TAC REAL_LT_DIV);
6075 (ASM_REWRITE_TAC[REAL_ARITH `&0 < &1`]);
6076 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN
6078 (UP_ASM_TAC THEN REAL_ARITH_TAC);
6081 `(&1 / (t1 + t3 + t4) * ((t3 % u2 + t4 % m - (t3 + t4) % u0) dot (u1 - u0))) /
6082 (&1 / (t1 + t3 + t4) * a1) =
6083 ((t3 % u2 + t4 % m - (t3 + t4) % u0) dot (u1 - u0:real^3)) / a1`);
6084 (UP_ASM_TAC THEN UNDISCH_TAC `~(a1 = &0)` THEN
6085 MESON_TAC[Trigonometry1.REAL_DIV_MUL2]);
6087 (NEW_GOAL `(g:real^3->real) x <= g w`);
6091 `((x - u0) dot (u1 - u0:real^3)) / (norm (x - u0) * norm (u1 - u0)) <=
6092 ((w - u0) dot (u1 - u0)) / (norm (w - u0) * norm (u1 - u0)) <=>
6093 ((x - u0) dot (u1 - u0)) * (norm (w - u0) * norm (u1 - u0)) <=
6094 ((w - u0) dot (u1 - u0)) * (norm (x - u0) * norm (u1 - u0))`);
6095 (MATCH_MP_TAC RAT_LEMMA4);
6097 (MATCH_MP_TAC REAL_LT_MUL);
6098 (ASM_REWRITE_TAC[NORM_POS_LT; VECTOR_ARITH `x - b = vec 0 <=> x = b`]);
6100 (UNDISCH_TAC `~NULLSET (X INTER D)`);
6103 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6104 (EXISTS_TAC `(X:real^3->bool)`);
6106 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
6107 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6108 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
6110 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
6111 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6112 (EXISTS_TAC `affine hull {u0, u1, u2, m:real^3}`);
6113 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
6114 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
6115 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
6116 (REWRITE_TAC[coplanar]);
6117 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u2:real^3` THEN
6118 EXISTS_TAC `m:real^3`);
6119 (ONCE_REWRITE_TAC[SET_RULE `{u0, u1, u2, u3} = {u1, u0, u2, u3}`]);
6120 (MATCH_MP_TAC (SET_RULE `u0 IN S /\ b SUBSET S ==> (u0 INSERT b) SUBSET S`));
6121 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
6122 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
6123 (EXISTS_TAC `(t2 + t3 + t4) / t2` THEN EXISTS_TAC `(--t3) / t2`
6124 THEN EXISTS_TAC `(--t4) / t2`);
6126 (REWRITE_TAC[REAL_ARITH
6127 `(t2 + t3 + t4) / t2 + --t3 / t2 + --t4 / t2 = t2 / t2`]);
6128 (MATCH_MP_TAC REAL_DIV_REFL);
6129 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
6130 (REWRITE_WITH `(t2 + t3 + t4) = &1 - t1`);
6131 (UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN REAL_ARITH_TAC);
6132 (NEW_GOAL `u0 - t1 % u0 - t3 % u2 - t4 % m:real^3 = t2 % u1`);
6133 (UP_ASM_TAC THEN VECTOR_ARITH_TAC);
6134 (ASM_REWRITE_TAC[VECTOR_ARITH
6135 `(&1 - t1) / t2 % u0 + --t3 / t2 % u2 + --t4 / t2 % u3 =
6136 (&1 / t2) % (u0 - t1 % u0 - t3 % u2 - t4 % u3)`]);
6137 (REWRITE_TAC[VECTOR_MUL_ASSOC; REAL_ARITH `&1 / a * a = a / a`]);
6138 (REWRITE_WITH `t2 / t2 = &1`);
6139 (MATCH_MP_TAC REAL_DIV_REFL);
6140 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
6144 (MATCH_MP_TAC REAL_LT_MUL);
6145 (ASM_REWRITE_TAC[NORM_POS_LT; VECTOR_ARITH `x - b = vec 0 <=> x = b`]);
6146 (EXPAND_TAC "w" THEN STRIP_TAC);
6147 (UNDISCH_TAC `~NULLSET (X INTER D)`);
6150 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6151 (EXISTS_TAC `(X:real^3->bool)`);
6153 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
6154 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6155 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
6157 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
6158 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6159 (EXISTS_TAC `affine hull {u0, u1, u2, m:real^3}`);
6160 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
6161 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
6162 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
6163 (REWRITE_TAC[coplanar]);
6164 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN
6165 EXISTS_TAC `m:real^3`);
6166 (MATCH_MP_TAC (SET_RULE `u0 IN S /\ b SUBSET S ==> (u0 INSERT b) SUBSET S`));
6167 (REWRITE_TAC[SET_SUBSET_AFFINE_HULL]);
6168 (REWRITE_TAC[AFFINE_HULL_3; IN; IN_ELIM_THM]);
6170 (EXISTS_TAC `&0` THEN EXISTS_TAC `t3 / (t3 + t4)`
6171 THEN EXISTS_TAC `t4 / (t3 + t4)`);
6173 (REWRITE_TAC[REAL_ARITH `&0 + t3 / (t3 + t4) + t4 / (t3 + t4) =
6174 (t3 + t4) / (t3 + t4)`]);
6175 (MATCH_MP_TAC REAL_DIV_REFL);
6176 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
6177 (ASM_REWRITE_TAC[VECTOR_ARITH
6178 `&0 % u1 + t3 / (t3 + t4) % u2 + t4 / (t3 + t4) % u3 =
6179 (&1 / (t3 + t4)) % (t3 % u2 + t4 % u3)`]);
6180 (UP_ASM_TAC THEN REWRITE_TAC[VECTOR_ARITH
6181 `t1 / x % u0 + t3 / x % u2 + t4 / x % u3 =
6182 (&1 / x) % (t1 % u0 + t3 % u2 + t4 % u3)`]);
6183 (REWRITE_WITH `&1 / (t1 + t3 + t4) % (t1 % u0 + t3 % u2 + t4 % m) = u0 <=>
6184 t1 % u0 + t3 % u2 + t4 % m = (t1 + t3 + t4) % u0:real^3`);
6185 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
6186 (MATCH_MP_TAC Collect_geom.CHANGE_SIDE);
6187 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 +t3 + t4 = &1` THEN
6190 (REWRITE_TAC[VECTOR_ARITH `t1 % u0 + t3 % u2 + t4 % u3 = (t1 + t3 + t4) % u0
6191 <=> t3 % u2 + t4 % u3 = (t3 + t4) % u0`]);
6192 (STRIP_TAC THEN ASM_REWRITE_TAC[]);
6193 (REWRITE_TAC[VECTOR_MUL_ASSOC; REAL_ARITH `&1 / a * a = a / a`]);
6194 (REWRITE_WITH `(t3 + t4) / (t3 + t4) = &1`);
6195 (MATCH_MP_TAC REAL_DIV_REFL);
6196 (UNDISCH_TAC `&0 < t3 + t4` THEN REAL_ARITH_TAC);
6200 (REWRITE_WITH `x = t2 % u1 + (t1 + t3 + t4) % w:real^3`);
6201 (ASM_REWRITE_TAC[] THEN EXPAND_TAC "w");
6202 (REWRITE_TAC[VECTOR_ARITH
6203 `x % (t1 /x % u0 + t3 / x % u2 + t4 /x % u3) =
6204 (x / x) % (t1 % u0 + t3 % u2 + t4 % u3)`]);
6205 (REWRITE_WITH `(t1 + t3 + t4) / (t1 + t3 + t4) = &1`);
6206 (MATCH_MP_TAC REAL_DIV_REFL);
6207 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN
6210 (ABBREV_TAC `t = t1 + t3 + t4`);
6211 (REWRITE_WITH `(t2 % u1 + t % w) - u0:real^3 =
6212 (t2 % u1 + t % w) - (t1 + t2 + t3 + t4) % u0`);
6213 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
6214 (REWRITE_WITH `t1 + t2 + t3 + t4 = t2 + t:real`);
6215 (EXPAND_TAC "t" THEN REAL_ARITH_TAC);
6216 (REWRITE_TAC[VECTOR_ARITH
6217 `(t2 % u1 + t % w) - (t2 + t) % u0 = t2 % (u1 - u0) + t % (w - u0)`]);
6218 (ABBREV_TAC `x1 = u1 - u0:real^3`);
6219 (ABBREV_TAC `x2 = w - u0:real^3`);
6221 (REWRITE_WITH `(t2 % x1 + t % x2) dot x1 =
6222 t2 * norm x1 pow 2 + t * x2 dot (x1:real^3)`);
6223 (REWRITE_TAC[NORM_POW_2]);
6226 (NEW_GOAL `t2 * norm x1 pow 2 * norm x2 * norm x1 <=
6227 t2 * (x2 dot x1) * norm x1 * norm (x1:real^3)`);
6228 (REWRITE_TAC[REAL_POW_2; REAL_ARITH `t2 * (x1 * x1) * x2 * x1 <=
6229 t2 * x3 * x1 * x1 <=> &0 <= (x1 pow 2) * (--t2) * (x2 * x1 - x3)`]);
6230 (MATCH_MP_TAC REAL_LE_MUL);
6231 (ASM_SIMP_TAC[REAL_LE_MUL; NORM_POS_LE]);
6232 (MATCH_MP_TAC REAL_LE_MUL);
6233 (REWRITE_TAC[REAL_ARITH `&0 <= a - b <=> b <= a`]);
6235 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
6236 (REWRITE_TAC[NORM_CAUCHY_SCHWARZ]);
6239 `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)`);
6241 (REWRITE_TAC[REAL_ARITH `t2 * x3 * x1 * x1 + t * x3 * x2 * x1 <=
6242 x3 * x4 * x1 <=> &0 <= (x1 * x3) * (x4 - t2 * x1 - t * x2)`]);
6243 (MATCH_MP_TAC REAL_LE_MUL);
6245 (MATCH_MP_TAC REAL_LE_MUL);
6246 (REWRITE_TAC[NORM_POS_LE]);
6247 (ASM_CASES_TAC `x2 dot (x1:real^3) < &0`);
6249 (NEW_GOAL `(g:real^3->real) x <= &0`);
6251 (REWRITE_TAC[REAL_ARITH `a / b <= &0 <=> &0 <= (--a) / b`]);
6252 (MATCH_MP_TAC REAL_LE_DIV);
6253 (SIMP_TAC[NORM_POS_LE; REAL_LE_MUL]);
6255 (REWRITE_WITH `x = t2 % u1 + (t1 + t3 + t4) % w:real^3`);
6256 (ASM_REWRITE_TAC[] THEN EXPAND_TAC "w");
6257 (REWRITE_TAC[VECTOR_ARITH
6258 `x % (t1 /x % u0 + t3 / x % u2 + t4 /x % u3) =
6259 (x / x) % (t1 % u0 + t3 % u2 + t4 % u3)`]);
6261 (REWRITE_WITH `(t1 + t3 + t4) / (t1 + t3 + t4) = &1`);
6262 (MATCH_MP_TAC REAL_DIV_REFL);
6263 (UNDISCH_TAC `t2 < &0` THEN UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN
6267 (REWRITE_TAC[REAL_ARITH `&0 <= --a <=> a <= &0`]);
6268 (REWRITE_WITH `(t2 % u1 + (t1 + t3 + t4) % w) - u0:real^3 =
6269 (t2 % u1 + (t1 + t3 + t4) % w) - (t1 + t2 + t3 + t4) % u0`);
6270 (ASM_REWRITE_TAC[] THEN VECTOR_ARITH_TAC);
6271 (REWRITE_WITH `(t2 % u1 + (t1 + t3 + t4) % w) - (t1 + t2 + t3 + t4) % u0 =
6272 t2 % x1 + t % x2:real^3`);
6273 (EXPAND_TAC "x1" THEN EXPAND_TAC "x2" THEN EXPAND_TAC "t"
6274 THEN VECTOR_ARITH_TAC);
6275 (NEW_GOAL `t % x2 dot (x1:real^3) <= &0`);
6276 (REWRITE_TAC[DOT_LMUL; REAL_ARITH `a * b <= &0 <=> &0 <= a * (--b)`]);
6277 (MATCH_MP_TAC REAL_LE_MUL);
6279 (EXPAND_TAC "t" THEN UNDISCH_TAC `t2 < &0` THEN
6280 UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN REAL_ARITH_TAC);
6281 (UP_ASM_TAC THEN REAL_ARITH_TAC);
6282 (NEW_GOAL `t2 % x1 dot (x1:real^3) <= &0`);
6283 (REWRITE_TAC[DOT_LMUL; REAL_ARITH `a * b <= &0 <=> &0 <= (--a) * b`]);
6284 (MATCH_MP_TAC REAL_LE_MUL);
6286 (EXPAND_TAC "t" THEN UNDISCH_TAC `t2 < &0` THEN
6287 UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN REAL_ARITH_TAC);
6288 (REWRITE_TAC[DOT_POS_LE]);
6289 (REWRITE_TAC[DOT_LADD]);
6290 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
6291 (UP_ASM_TAC THEN UNDISCH_TAC `d < (g:real^3->real) x`);
6292 (EXPAND_TAC "d" THEN UNDISCH_TAC `&0 < c /\ c < &1`);
6294 (UP_ASM_TAC THEN MESON_TAC[]);
6295 (UP_ASM_TAC THEN REAL_ARITH_TAC);
6297 (REWRITE_TAC [REAL_ARITH `&0 <= a - b * d - c <=> c <= a + (--b) * d`]);
6298 (REWRITE_WITH `t * norm (x2:real^3) = abs t * norm x2`);
6299 (AP_THM_TAC THEN AP_TERM_TAC);
6300 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
6301 (REWRITE_TAC[REAL_ABS_REFL]);
6302 (EXPAND_TAC "t" THEN UNDISCH_TAC `t2 < &0` THEN
6303 UNDISCH_TAC `t1 + t2 + t3 + t4 = &1` THEN REAL_ARITH_TAC);
6304 (REWRITE_WITH `(--t2) * norm (x1:real^3) = abs (--t2) * norm x1`);
6305 (AP_THM_TAC THEN AP_TERM_TAC);
6306 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
6307 (REWRITE_TAC[REAL_ABS_REFL]);
6308 (UNDISCH_TAC `t2 < &0` THEN REAL_ARITH_TAC);
6309 (REWRITE_TAC[GSYM NORM_MUL]);
6311 `norm (t % x2:real^3) = norm ((t2 % x1 + t % x2) + (--t2 % x1))`);
6312 (AP_TERM_TAC THEN VECTOR_ARITH_TAC);
6313 (REWRITE_TAC[NORM_TRIANGLE]);
6314 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
6315 (UNDISCH_TAC `(g:real^3->real) y <= g xx`);
6316 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
6318 (NEW_GOAL `(g:real^3->real) xx <= d1`);
6319 (FIRST_ASSUM MATCH_MP_TAC);
6321 (EXPAND_TAC "g" THEN EXPAND_TAC "f3");
6322 (REWRITE_TAC[IN_ELIM_THM; IN]);
6323 (EXISTS_TAC `vl:(real^3)list`);
6324 (REWRITE_TAC[ASSUME `barV V 3 vl`; ASSUME `vl = [u0;u1;u2;u3:real^3]`;
6325 TRUNCATE_SIMPLEX_EXPLICIT_1]);
6327 (SIMP_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
6328 (REWRITE_WITH `mcell 3 V vl = mcell k V vl`);
6330 (REWRITE_TAC[GSYM (ASSUME `X = mcell k V vl`)]);
6333 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
6334 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6335 (EXISTS_TAC `X INTER (C:real^3->bool)`);
6337 (ASM_REWRITE_TAC[]);
6338 (MATCH_MP_TAC (SET_RULE `D SUBSET C ==> X INTER D SUBSET X INTER C`));
6339 (EXPAND_TAC "D" THEN EXPAND_TAC "C");
6340 (MATCH_MP_TAC (SET_RULE
6341 `A SUBSET B /\ C SUBSET D ==> A INTER C SUBSET B INTER D`));
6343 (MATCH_MP_TAC SUBSET_BALL);
6344 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
6345 (MATCH_MP_TAC RCONE_GT_SUBSET);
6346 (EXPAND_TAC "d" THEN REAL_ARITH_TAC);
6350 (SIMP_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
6351 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
6353 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
6355 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN EXPAND_TAC "d");
6359 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
6360 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6361 (EXISTS_TAC `(X:real^3->bool)`);
6363 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; TRUNCATE_SIMPLEX_EXPLICIT_2;
6364 set_of_list; SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6365 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
6367 (UP_ASM_TAC THEN MESON_TAC[]);
6369 (* ========================================================================= *)
6371 (ABBREV_TAC `m = mxi V vl`);
6372 (NEW_GOAL `~coplanar {u0, u1, u2, m:real^3}`);
6374 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN REWRITE_TAC[]);
6375 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6376 (EXISTS_TAC `X:real^3->bool`);
6378 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; set_of_list]);
6380 (REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
6381 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6382 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
6384 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
6386 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6387 (EXISTS_TAC `affine hull {u0, u1, u2, m:real^3}`);
6388 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
6389 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
6390 (ASM_REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
6391 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
6394 (ASM_CASES_TAC `azim u0 u1 u2 (m:real^3) < pi`);
6395 (REWRITE_WITH `vol (L INTER D) = vol (D INTER wedge u0 u1 u2 m)`);
6396 (ASM_SIMP_TAC[WEDGE_LUNE]);
6397 (REWRITE_WITH `L INTER conic_cap (u0:real^3) u1 r d =
6398 conic_cap u0 u1 r d INTER L`);
6400 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_SYMDIFF);
6401 (REWRITE_WITH `conic_cap (u0:real^3) u1 r d INTER
6402 aff_gt {u0, u1} {u2, m} DIFF conic_cap u0 u1 r d INTER L = {}`);
6404 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> C INTER A DIFF C INTER B = {}`));
6405 (REWRITE_TAC[AFF_GT_SUBSET_AFF_GE]);
6406 (REWRITE_TAC[SET_RULE `A UNION {} = A`]);
6409 (REWRITE_WITH `aff_ge {u0, u1:real^3} {u2, m} =
6410 aff_gt {u0, u1} {u2, m} UNION
6411 UNIONS {aff_ge {u0, u1} ({u2, m} DELETE a) | a | a IN {u2, m}}`);
6412 (MATCH_MP_TAC AFF_GE_AFF_GT_DECOMP);
6413 (REWRITE_TAC[Geomdetail.FINITE6]);
6414 (REWRITE_TAC[DISJOINT]);
6416 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
6418 (UNDISCH_TAC `~coplanar {u0, u1, u2, m:real^3}`);
6419 (REWRITE_WITH `{u0, u1, u2, m} = {u0, u1, m:real^3}`);
6420 (UP_ASM_TAC THEN SET_TAC[]);
6421 (REWRITE_TAC[COPLANAR_3]);
6422 (UP_ASM_TAC THEN MESON_TAC[]);
6424 (ASM_CASES_TAC `m IN {u0, u1:real^3}`);
6426 (UNDISCH_TAC `~coplanar {u0, u1, u2, m:real^3}`);
6427 (REWRITE_WITH `{u0, u1, u2, m} = {u0, u1, u2:real^3}`);
6428 (UP_ASM_TAC THEN SET_TAC[]);
6429 (REWRITE_TAC[COPLANAR_3]);
6430 (UP_ASM_TAC THEN MESON_TAC[]);
6431 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
6433 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6435 `UNIONS {aff_ge {u0, u1:real^3} ({u2, m} DELETE a) | a | a IN {u2, m}}`);
6437 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6439 `aff_ge {u0, u1:real^3} {u2} UNION aff_ge {u0, u1:real^3} {m}`);
6441 (MATCH_MP_TAC NEGLIGIBLE_UNION);
6444 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6445 (EXISTS_TAC `affine hull {u0, u1:real^3, u2}`);
6447 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
6448 (REWRITE_WITH `{u0,u1,u2:real^3} = {u0,u1} UNION {u2}`);
6450 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
6451 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6452 (EXISTS_TAC `affine hull {u0, u1:real^3, m}`);
6454 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
6455 (REWRITE_WITH `{u0,u1,m:real^3} = {u0,u1} UNION {m}`);
6457 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
6458 (REWRITE_TAC[SET_RULE
6459 `UNIONS {aff_ge {u0, u1} ({m, s3} DELETE a) | a | a IN {m, s3}} =
6460 aff_ge {u0, u1} ({m, s3} DELETE s3)
6461 UNION aff_ge {u0, u1} ({m, s3} DELETE m)`]);
6462 (MATCH_MP_TAC (SET_RULE
6463 `A SUBSET B /\ C SUBSET D ==> A UNION C SUBSET B UNION D`));
6465 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
6469 (REWRITE_TAC[DISJOINT]);
6470 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
6472 (UNDISCH_TAC `~coplanar {u0, u1, u2, m:real^3}`);
6473 (REWRITE_WITH `{u0, u1, u2, m} = {u0, u1, m:real^3}`);
6474 (UP_ASM_TAC THEN SET_TAC[]);
6475 (REWRITE_TAC[COPLANAR_3]);
6476 (UP_ASM_TAC THEN MESON_TAC[]);
6477 (UP_ASM_TAC THEN SET_TAC[]);
6479 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
6482 (REWRITE_TAC[DISJOINT]);
6483 (ASM_CASES_TAC `m IN {u0, u1:real^3}`);
6485 (UNDISCH_TAC `~coplanar {u0, u1, u2, m:real^3}`);
6486 (REWRITE_WITH `{u0, u1, u2, m} = {u0, u1, u2:real^3}`);
6487 (UP_ASM_TAC THEN SET_TAC[]);
6488 (REWRITE_TAC[COPLANAR_3]);
6489 (UP_ASM_TAC THEN MESON_TAC[]);
6490 (UP_ASM_TAC THEN SET_TAC[]);
6494 (* begin the computation *)
6496 (REWRITE_TAC[ASSUME `D = conic_cap (u0:real^3) u1 r d`]);
6497 (REWRITE_WITH `vol (conic_cap u0 u1 r d INTER wedge u0 u1 u2 m) =
6498 (if &1 < d \/ r < &0
6500 else azim u0 u1 u2 m / &3 * (&1 - max d (-- &1)) * r pow 3)`);
6501 (NEW_GOAL `~collinear {u0:real^3, u1, u2} /\ ~collinear {u0, u1, m}`);
6503 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
6504 (EXISTS_TAC `m:real^3`);
6505 (ASM_REWRITE_TAC[]);
6506 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
6507 (EXISTS_TAC `u2:real^3`);
6508 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
6509 (ASM_REWRITE_TAC[]);
6510 (ASM_SIMP_TAC[VOLUME_CONIC_CAP_WEDGE]);
6514 (UNDISCH_TAC `&0 < r` THEN UNDISCH_TAC `d < &1` THEN
6515 UP_ASM_TAC THEN REAL_ARITH_TAC);
6516 (UP_ASM_TAC THEN MESON_TAC[]);
6518 (REWRITE_WITH `azim (u0:real^3) u1 u2 m = dihV u0 u1 u2 m`);
6519 (MATCH_MP_TAC AZIM_DIHV_SAME);
6520 (ASM_REWRITE_TAC[]);
6522 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
6523 (EXISTS_TAC `m:real^3`);
6524 (ASM_REWRITE_TAC[]);
6525 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
6526 (EXISTS_TAC `u2:real^3`);
6527 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
6528 (ASM_REWRITE_TAC[]);
6530 (REWRITE_TAC[dihX]);
6533 (UNDISCH_TAC `~NULLSET (X INTER D)`);
6535 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6536 (EXISTS_TAC `X:real^3->bool`);
6537 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
6538 (UP_ASM_TAC THEN MESON_TAC[]);
6542 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
6543 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
6546 initial_sublist [u0; u1] ul)`);
6548 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
6549 (MATCH_MP_TAC SELECT_AX);
6550 (EXISTS_TAC `(3, vl:(real^3)list)`);
6552 (REWRITE_TAC[BETA_THM]);
6553 (REWRITE_TAC[IN; ARITH_RULE `3 <= 4`] THEN ASM_REWRITE_TAC[]);
6554 (REWRITE_WITH `initial_sublist [u0;u1:real^3] [u0; u1; u2; u3] /\
6555 LENGTH [u0;u1] = 1 + 1`);
6556 (REWRITE_TAC[GSYM Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
6557 (REWRITE_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
6558 (ASM_REWRITE_TAC[]);
6559 (REWRITE_TAC[LENGTH] THEN ARITH_TAC);
6560 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
6561 (EXPAND_TAC "P" THEN REWRITE_TAC[IN] THEN REPEAT STRIP_TAC);
6563 (NEW_GOAL `k' = 3 /\ mcell k' V ul = mcell 3 V vl`);
6564 (MATCH_MP_TAC Ajripqn.AJRIPQN);
6565 (ASM_REWRITE_TAC[]);
6566 (REWRITE_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
6567 (REWRITE_WITH `mcell k' V ul INTER mcell 3 V vl = X`);
6568 (REWRITE_WITH `mcell 3 V vl = X`);
6570 (SET_TAC[ASSUME `X = mcell k' V ul`]);
6573 (UNDISCH_TAC `k' <= 4` THEN REWRITE_TAC[ARITH_RULE
6574 `a <= 4 <=> a = 0 \/a = 1 \/ a = 2 \/ a = 3 \/ a = 4`] THEN SET_TAC[]);
6576 (UP_ASM_TAC THEN UNDISCH_TAC `~NULLSET X` THEN MESON_TAC[]);
6580 (UP_ASM_TAC THEN UP_ASM_TAC THEN ARITH_TAC);
6581 (UP_ASM_TAC THEN MESON_TAC[]);
6584 (REWRITE_TAC[dihu3]);
6586 (REWRITE_WITH `dihV (EL 0 ul) (EL 1 ul) (EL 2 ul) (mxi V ul) =
6587 dihV u0 u1 u2 (m:real^3)`);
6589 (NEW_GOAL `truncate_simplex 1 ul = [u0;u1:real^3] /\ 1 + 1 <= LENGTH ul`);
6590 (REWRITE_TAC[Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
6591 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
6593 (NEW_GOAL `EL 0 (ul:(real^3)list) = EL 0 (truncate_simplex 1 ul)`);
6594 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
6595 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
6596 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
6597 CARD (set_of_list ul) = 3 + 1`);
6598 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
6599 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
6602 (NEW_GOAL `EL 1 (ul:(real^3)list) = EL 1 (truncate_simplex 1 ul)`);
6603 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
6604 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
6605 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
6606 CARD (set_of_list ul) = 3 + 1`);
6607 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
6608 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
6611 (NEW_GOAL `{EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul} = {u0, u1,u2,m:real^3}`);
6613 {EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul} = {u0, u1,u2,m:real^3} <=>
6614 convex hull {EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul} =
6615 convex hull {u0, u1,u2,m:real^3}`);
6616 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
6617 (MATCH_MP_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ);
6620 (UNDISCH_TAC `~NULLSET X`);
6622 (SIMP_TAC[MCELL_EXPLICIT; mcell3; ASSUME `X = mcell k' V ul`; ASSUME `k' = 3`]);
6624 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
6625 (MATCH_MP_TAC BARV_3_EXPLICIT);
6626 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
6627 (UP_ASM_TAC THEN STRIP_TAC);
6628 (ASM_REWRITE_TAC[set_of_list; TRUNCATE_SIMPLEX_EXPLICIT_2;
6629 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6630 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6631 (EXISTS_TAC `affine hull {v0, v1, v2, mxi V [v0; v1; v2; v3]}`);
6632 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
6633 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
6634 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
6635 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
6636 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
6637 (UNDISCH_TAC `affine_dependent {EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul}`);
6638 (REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`;
6639 ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
6641 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
6643 (UNDISCH_TAC `~NULLSET X`);
6645 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell3; set_of_list;
6646 TRUNCATE_SIMPLEX_EXPLICIT_2; SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6648 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6649 (EXISTS_TAC `affine hull {u0, u1, u2, mxi V [u0; u1; u2; u3]}`);
6650 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
6651 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
6652 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
6653 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
6654 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
6655 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
6657 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
6658 (ASM_REWRITE_TAC[]);
6660 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
6662 (REWRITE_WITH `convex hull {u0, u1, u2, m:real^3} = X`);
6663 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; set_of_list]);
6665 (REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
6666 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6667 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
6669 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
6672 (UNDISCH_TAC `~NULLSET X`);
6674 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; set_of_list]);
6675 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
6676 (UP_ASM_TAC THEN MESON_TAC[]);
6678 (SIMP_TAC[MCELL_EXPLICIT; mcell3; ASSUME `X = mcell k' V ul`; ASSUME `k' = 3`]);
6680 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
6681 (MATCH_MP_TAC BARV_3_EXPLICIT);
6682 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
6683 (UP_ASM_TAC THEN STRIP_TAC);
6684 (REWRITE_TAC[set_of_list; ASSUME `ul = [v0; v1; v2; v3:real^3]`;
6685 TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
6686 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
6687 (REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
6689 (UNDISCH_TAC `~NULLSET X`);
6691 (SIMP_TAC[MCELL_EXPLICIT; mcell3; ASSUME `X = mcell k' V ul`; ASSUME `k' = 3`]);
6692 (ASM_REWRITE_TAC[]);
6693 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
6694 (UP_ASM_TAC THEN MESON_TAC[]);
6696 (UP_ASM_TAC THEN ASM_REWRITE_TAC[EL; HD; TL; ARITH_RULE `1 = SUC 0`]);
6698 (NEW_GOAL `mxi V ul = m`);
6700 (MATCH_MP_TAC MCELL_ID_MXI);
6701 (EXISTS_TAC `k':num` THEN EXISTS_TAC `k:num`);
6702 (ASM_REWRITE_TAC[SET_RULE `3 IN {2, 3}`]);
6703 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
6704 (ASM_REWRITE_TAC[]);
6705 (ASM_REWRITE_TAC[HD]);
6706 (REWRITE_WITH `HD (ul) = (HD (truncate_simplex 1 ul)):real^3`);
6707 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
6708 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
6709 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
6710 CARD (set_of_list ul) = 3 + 1`);
6711 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
6712 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
6714 (ASM_REWRITE_TAC[HD]);
6715 (ASM_REWRITE_TAC[]);
6718 (NEW_GOAL `EL 2 ul = u2:real^3`);
6719 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
6721 (NEW_GOAL `{u0, u1, EL 2 ul, m} = {u0, u1, m:real^3}`);
6722 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
6723 (UNDISCH_TAC `~coplanar {u0,u1,u2,m:real^3}` THEN REWRITE_TAC[
6724 GSYM (ASSUME `{u0, u1, EL 2 ul, m} = {u0, u1, u2, m:real^3}`);
6725 ASSUME `{u0, u1, EL 2 ul, m} = {u0, u1, m:real^3}`; COPLANAR_3]);
6726 (ASM_REWRITE_TAC[]);
6728 (REWRITE_TAC[REAL_ARITH `a / b * c * d pow 3 = (c/ b * d pow 3) * a`]);
6729 (REWRITE_TAC[REAL_ARITH `a * b / (&2 * c) = (a / (&2 * c)) * b`]);
6730 (AP_THM_TAC THEN AP_TERM_TAC);
6733 `measurable (conic_cap u0 u1 r d) /\
6734 vol (conic_cap u0 u1 r d) =
6735 (if u1 = u0 \/ &1 <= d \/ r < &0
6737 else &2 / &3 * pi * (&1 - d) * r pow 3)`);
6738 (MATCH_MP_TAC VOLUME_CONIC_CAP);
6740 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
6743 (UP_ASM_TAC THEN STRIP_TAC);
6744 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1:real^3)` THEN MESON_TAC[]);
6745 (UNDISCH_TAC `d < &1` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
6746 (UNDISCH_TAC `&0 < r` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
6747 (UP_ASM_TAC THEN MESON_TAC[]);
6748 (REWRITE_TAC[ARITH_RULE `SUC 0 = 1`]);
6750 (REWRITE_WITH `max d (--(&1)) = d`);
6751 (MATCH_MP_TAC (REAL_ARITH `&0 < d /\ --(&1) < &0 ==> max d (--(&1)) = d`));
6752 (REWRITE_TAC[REAL_NEG_LT0]);
6755 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
6759 (&2 / &3 * pi * (&1 - d) * r pow 3) / (&2 * pi) = (&1 - d) / &3 * r pow 3 *
6760 ((&2 * pi) / (&2 * pi))`);
6762 (REWRITE_WITH `(&2 * pi) / (&2 * pi) = &1`);
6763 (MATCH_MP_TAC REAL_DIV_REFL);
6764 (REWRITE_TAC[REAL_ENTIRE; PI_NZ; REAL_ARITH `~(&2 = &0)`]);
6767 (UP_ASM_TAC THEN UNDISCH_TAC `k' = 3 /\ mcell k' V ul = mcell 3 V vl`
6769 (UP_ASM_TAC THEN MESON_TAC[]);
6771 (* ========================================================================= *)
6773 (ASM_CASES_TAC `azim u0 u1 m (u2:real^3) < pi`);
6774 (UNDISCH_TAC `~coplanar {u0, u1, u2, m:real^3}`);
6775 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
6777 (REWRITE_WITH `vol (L INTER D) = vol (D INTER wedge u0 u1 m u2)`);
6778 (ASM_SIMP_TAC[WEDGE_LUNE]);
6779 (REWRITE_WITH `L INTER conic_cap (u0:real^3) u1 r d =
6780 conic_cap u0 u1 r d INTER L`);
6782 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_SYMDIFF);
6784 (REWRITE_WITH `conic_cap (u0:real^3) u1 r d INTER
6785 aff_gt {u0, u1} {m, u2} DIFF conic_cap u0 u1 r d INTER L = {}`);
6787 (REWRITE_TAC[SET_RULE `{a,b} = {b, a}`]);
6788 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> C INTER A DIFF C INTER B = {}`));
6789 (REWRITE_TAC[AFF_GT_SUBSET_AFF_GE]);
6790 (REWRITE_TAC[SET_RULE `A UNION {} = A`]);
6792 (REWRITE_TAC[SET_RULE `{a,b} = {b, a}`]);
6794 (REWRITE_WITH `aff_ge {u0, u1:real^3} {m, u2} =
6795 aff_gt {u0, u1} {m, u2} UNION
6796 UNIONS {aff_ge {u0, u1} ({m, u2} DELETE a) | a | a IN {m, u2}}`);
6797 (MATCH_MP_TAC AFF_GE_AFF_GT_DECOMP);
6798 (REWRITE_TAC[Geomdetail.FINITE6]);
6799 (REWRITE_TAC[DISJOINT]);
6801 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
6803 (UNDISCH_TAC `~coplanar {u0, u1, m, u2:real^3}`);
6804 (REWRITE_WITH `{u0, u1, m, u2} = {u0, u1, m:real^3}`);
6805 (UP_ASM_TAC THEN SET_TAC[]);
6806 (REWRITE_TAC[COPLANAR_3]);
6807 (UP_ASM_TAC THEN MESON_TAC[]);
6809 (ASM_CASES_TAC `m IN {u0, u1:real^3}`);
6811 (UNDISCH_TAC `~coplanar {u0, u1, m, u2:real^3}`);
6812 (REWRITE_WITH `{u0, u1, m, u2} = {u0, u1, u2:real^3}`);
6813 (UP_ASM_TAC THEN SET_TAC[]);
6814 (REWRITE_TAC[COPLANAR_3]);
6815 (UP_ASM_TAC THEN MESON_TAC[]);
6816 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
6818 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6820 `UNIONS {aff_ge {u0, u1:real^3} ({m, u2} DELETE a) | a | a IN {m, u2}}`);
6822 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6824 `aff_ge {u0, u1:real^3} {u2} UNION aff_ge {u0, u1:real^3} {m}`);
6826 (MATCH_MP_TAC NEGLIGIBLE_UNION);
6829 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6830 (EXISTS_TAC `affine hull {u0, u1:real^3, u2}`);
6832 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
6833 (REWRITE_WITH `{u0,u1,u2:real^3} = {u0,u1} UNION {u2}`);
6835 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
6836 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6837 (EXISTS_TAC `affine hull {u0, u1:real^3, m}`);
6839 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
6840 (REWRITE_WITH `{u0,u1,m:real^3} = {u0,u1} UNION {m}`);
6842 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
6843 (REWRITE_TAC[SET_RULE
6844 `UNIONS {aff_ge {u0, u1} ({m, s3} DELETE a) | a | a IN {m, s3}} =
6845 aff_ge {u0, u1} ({m, s3} DELETE s3)
6846 UNION aff_ge {u0, u1} ({m, s3} DELETE m)`]);
6847 (MATCH_MP_TAC (SET_RULE
6848 `A SUBSET D /\ C SUBSET B ==> A UNION C SUBSET B UNION D`));
6850 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
6854 (REWRITE_TAC[DISJOINT]);
6855 (ASM_CASES_TAC `m IN {u0, u1:real^3}`);
6857 (UNDISCH_TAC `~coplanar {u0, u1, m, u2:real^3}`);
6858 (REWRITE_WITH `{u0, u1, m, u2} = {u0, u1, u2:real^3}`);
6859 (UP_ASM_TAC THEN SET_TAC[]);
6860 (REWRITE_TAC[COPLANAR_3]);
6861 (UP_ASM_TAC THEN MESON_TAC[]);
6862 (UP_ASM_TAC THEN SET_TAC[]);
6864 (MATCH_MP_TAC AFF_GE_MONO_RIGHT);
6867 (REWRITE_TAC[DISJOINT]);
6868 (ASM_CASES_TAC `u2 IN {u0, u1:real^3}`);
6870 (UNDISCH_TAC `~coplanar {u0, u1, m, u2:real^3}`);
6871 (REWRITE_WITH `{u0, u1, m, u2} = {u0, u1, m:real^3}`);
6872 (UP_ASM_TAC THEN SET_TAC[]);
6873 (REWRITE_TAC[COPLANAR_3]);
6874 (UP_ASM_TAC THEN MESON_TAC[]);
6875 (UP_ASM_TAC THEN SET_TAC[]);
6879 (REWRITE_TAC[ASSUME `D = conic_cap (u0:real^3) u1 r d`]);
6880 (REWRITE_WITH `vol (conic_cap u0 u1 r d INTER wedge u0 u1 m u2) =
6881 (if &1 < d \/ r < &0
6883 else azim u0 u1 m u2 / &3 * (&1 - max d (-- &1)) * r pow 3)`);
6884 (NEW_GOAL `~collinear {u0:real^3, u1, u2} /\ ~collinear {u0, u1, m}`);
6886 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
6887 (EXISTS_TAC `m:real^3`);
6888 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
6889 (ASM_REWRITE_TAC[]);
6890 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
6891 (EXISTS_TAC `u2:real^3`);
6892 (ASM_REWRITE_TAC[]);
6894 (ASM_SIMP_TAC[VOLUME_CONIC_CAP_WEDGE]);
6898 (UNDISCH_TAC `&0 < r` THEN UNDISCH_TAC `d < &1` THEN
6899 UP_ASM_TAC THEN REAL_ARITH_TAC);
6900 (UP_ASM_TAC THEN MESON_TAC[]);
6902 (REWRITE_WITH `azim (u0:real^3) u1 m u2 = dihV u0 u1 m u2`);
6903 (MATCH_MP_TAC AZIM_DIHV_SAME);
6904 (ASM_REWRITE_TAC[]);
6907 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
6908 (EXISTS_TAC `u2:real^3`);
6909 (ASM_REWRITE_TAC[]);
6910 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
6911 (EXISTS_TAC `m:real^3`);
6912 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
6913 (ASM_REWRITE_TAC[]);
6915 (REWRITE_TAC[dihX]);
6918 (UNDISCH_TAC `~NULLSET (X INTER D)`);
6920 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
6921 (EXISTS_TAC `X:real^3->bool`);
6922 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
6923 (UP_ASM_TAC THEN MESON_TAC[]);
6927 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
6928 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
6931 initial_sublist [u0; u1] ul)`);
6933 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
6934 (MATCH_MP_TAC SELECT_AX);
6935 (EXISTS_TAC `(3, vl:(real^3)list)`);
6937 (REWRITE_TAC[BETA_THM]);
6938 (REWRITE_TAC[IN; ARITH_RULE `3 <= 4`] THEN ASM_REWRITE_TAC[]);
6940 (REWRITE_WITH `initial_sublist [u0;u1:real^3] [u0; u1; u2; u3] /\
6941 LENGTH [u0;u1] = 1 + 1`);
6942 (REWRITE_TAC[GSYM Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
6943 (REWRITE_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
6944 (ASM_REWRITE_TAC[]);
6945 (REWRITE_TAC[LENGTH] THEN ARITH_TAC);
6946 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
6947 (EXPAND_TAC "P" THEN REWRITE_TAC[IN] THEN REPEAT STRIP_TAC);
6949 (NEW_GOAL `k' = 3 /\ mcell k' V ul = mcell 3 V vl`);
6950 (MATCH_MP_TAC Ajripqn.AJRIPQN);
6951 (ASM_REWRITE_TAC[]);
6952 (REWRITE_TAC[GSYM (ASSUME `vl = [u0; u1; u2; u3:real^3]`)]);
6953 (REWRITE_WITH `mcell k' V ul INTER mcell 3 V vl = X`);
6954 (REWRITE_WITH `mcell 3 V vl = X`);
6956 (SET_TAC[ASSUME `X = mcell k' V ul`]);
6959 (UNDISCH_TAC `k' <= 4` THEN REWRITE_TAC[ARITH_RULE
6960 `a <= 4 <=> a = 0 \/a = 1 \/ a = 2 \/ a = 3 \/ a = 4`] THEN SET_TAC[]);
6962 (UP_ASM_TAC THEN UNDISCH_TAC `~NULLSET X` THEN MESON_TAC[]);
6966 (UP_ASM_TAC THEN UP_ASM_TAC THEN ARITH_TAC);
6967 (UP_ASM_TAC THEN MESON_TAC[]);
6970 (REWRITE_TAC[dihu3]);
6972 (REWRITE_WITH `dihV (EL 0 ul) (EL 1 ul) (EL 2 ul) (mxi V ul) =
6973 dihV u0 u1 u2 (m:real^3)`);
6975 (NEW_GOAL `truncate_simplex 1 ul = [u0;u1:real^3] /\ 1 + 1 <= LENGTH ul`);
6976 (REWRITE_TAC[Packing3.TRUNCATE_SIMPLEX_INITIAL_SUBLIST]);
6977 (ASM_REWRITE_TAC[LENGTH] THEN ARITH_TAC);
6979 (NEW_GOAL `EL 0 (ul:(real^3)list) = EL 0 (truncate_simplex 1 ul)`);
6980 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
6981 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
6982 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
6983 CARD (set_of_list ul) = 3 + 1`);
6984 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
6985 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
6988 (NEW_GOAL `EL 1 (ul:(real^3)list) = EL 1 (truncate_simplex 1 ul)`);
6989 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
6990 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
6991 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
6992 CARD (set_of_list ul) = 3 + 1`);
6993 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
6994 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
6997 (NEW_GOAL `{EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul} = {u0, u1,u2,m:real^3}`);
6999 {EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul} = {u0, u1,u2,m:real^3} <=>
7000 convex hull {EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul} =
7001 convex hull {u0, u1,u2,m:real^3}`);
7002 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
7003 (MATCH_MP_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ);
7006 (UNDISCH_TAC `~NULLSET X`);
7008 (SIMP_TAC[MCELL_EXPLICIT; mcell3; ASSUME `X = mcell k' V ul`; ASSUME `k' = 3`]);
7010 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
7011 (MATCH_MP_TAC BARV_3_EXPLICIT);
7012 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7013 (UP_ASM_TAC THEN STRIP_TAC);
7014 (ASM_REWRITE_TAC[set_of_list; TRUNCATE_SIMPLEX_EXPLICIT_2;
7015 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
7016 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
7017 (EXISTS_TAC `affine hull {v0, v1, v2, mxi V [v0; v1; v2; v3]}`);
7018 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
7019 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
7020 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
7021 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
7022 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
7023 (UNDISCH_TAC `affine_dependent {EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul}`);
7024 (REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`;
7025 ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
7027 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
7029 (UNDISCH_TAC `~NULLSET X`);
7031 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell3; set_of_list;
7032 TRUNCATE_SIMPLEX_EXPLICIT_2; SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
7034 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
7035 (EXISTS_TAC `affine hull {u0, u1, u2, mxi V [u0; u1; u2; u3]}`);
7036 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
7037 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
7038 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
7039 (MATCH_MP_TAC Rogers.AFF_DIM_LE_2_IMP_COPLANAR);
7040 (MATCH_MP_TAC Njiutiu.AFF_DEPENDENT_AFF_DIM_4);
7041 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
7043 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
7044 (ASM_REWRITE_TAC[]);
7046 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
7048 (REWRITE_WITH `convex hull {u0, u1, u2, m:real^3} = X`);
7049 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; set_of_list]);
7051 (REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
7052 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
7053 (REWRITE_WITH `mxi V [u0;u1;u2;u3] = m`);
7055 (REWRITE_TAC[ASSUME `vl = [u0; u1; u2; u3:real^3]`]);
7058 (UNDISCH_TAC `~NULLSET X`);
7060 (ASM_SIMP_TAC[mcell3; MCELL_EXPLICIT; set_of_list]);
7061 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
7062 (UP_ASM_TAC THEN MESON_TAC[]);
7064 (SIMP_TAC[MCELL_EXPLICIT; mcell3; ASSUME `X = mcell k' V ul`; ASSUME `k' = 3`]);
7066 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2; v3:real^3]`);
7067 (MATCH_MP_TAC BARV_3_EXPLICIT);
7068 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7069 (UP_ASM_TAC THEN STRIP_TAC);
7070 (REWRITE_TAC[set_of_list; ASSUME `ul = [v0; v1; v2; v3:real^3]`;
7071 TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list;
7072 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
7073 (REWRITE_TAC[EL; HD; TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
7075 (UNDISCH_TAC `~NULLSET X`);
7077 (SIMP_TAC[MCELL_EXPLICIT; mcell3; ASSUME `X = mcell k' V ul`; ASSUME `k' = 3`]);
7078 (ASM_REWRITE_TAC[]);
7079 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
7080 (UP_ASM_TAC THEN MESON_TAC[]);
7082 (UP_ASM_TAC THEN ASM_REWRITE_TAC[EL; HD; TL; ARITH_RULE `1 = SUC 0`]);
7084 (NEW_GOAL `mxi V ul = m`);
7086 (MATCH_MP_TAC MCELL_ID_MXI);
7087 (EXISTS_TAC `k':num` THEN EXISTS_TAC `k:num`);
7088 (ASM_REWRITE_TAC[SET_RULE `3 IN {2, 3}`]);
7089 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
7090 (ASM_REWRITE_TAC[]);
7091 (ASM_REWRITE_TAC[HD]);
7092 (REWRITE_WITH `HD (ul) = (HD (truncate_simplex 1 ul)):real^3`);
7093 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
7094 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
7095 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
7096 CARD (set_of_list ul) = 3 + 1`);
7097 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
7098 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7100 (ASM_REWRITE_TAC[HD]);
7101 (ASM_REWRITE_TAC[]);
7104 (NEW_GOAL `EL 2 ul = u2:real^3`);
7105 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
7107 (NEW_GOAL `{u0, u1, EL 2 ul, m} = {u0, u1, m:real^3}`);
7108 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7109 (UNDISCH_TAC `~coplanar {u0,u1,m,u2:real^3}`);
7111 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b,d,c}`]);
7112 (REWRITE_TAC[GSYM (ASSUME `{u0, u1, EL 2 ul, m} = {u0, u1, u2, m:real^3}`);
7113 ASSUME `{u0, u1, EL 2 ul, m} = {u0, u1, m:real^3}`; COPLANAR_3]);
7114 (ASM_REWRITE_TAC[]);
7115 (REWRITE_TAC[DIHV_SYM_2]);
7117 (REWRITE_TAC[REAL_ARITH `a / b * c * d pow 3 = (c/ b * d pow 3) * a`]);
7118 (REWRITE_TAC[REAL_ARITH `a * b / (&2 * c) = (a / (&2 * c)) * b`]);
7119 (AP_THM_TAC THEN AP_TERM_TAC);
7122 `measurable (conic_cap u0 u1 r d) /\
7123 vol (conic_cap u0 u1 r d) =
7124 (if u1 = u0 \/ &1 <= d \/ r < &0
7126 else &2 / &3 * pi * (&1 - d) * r pow 3)`);
7127 (MATCH_MP_TAC VOLUME_CONIC_CAP);
7129 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
7132 (UP_ASM_TAC THEN STRIP_TAC);
7133 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1:real^3)` THEN MESON_TAC[]);
7134 (UNDISCH_TAC `d < &1` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7135 (UNDISCH_TAC `&0 < r` THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7136 (UP_ASM_TAC THEN MESON_TAC[]);
7137 (REWRITE_TAC[ARITH_RULE `SUC 0 = 1`]);
7139 (REWRITE_WITH `max d (--(&1)) = d`);
7140 (MATCH_MP_TAC (REAL_ARITH `&0 < d /\ --(&1) < &0 ==> max d (--(&1)) = d`));
7141 (REWRITE_TAC[REAL_NEG_LT0]);
7144 (UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
7148 (&2 / &3 * pi * (&1 - d) * r pow 3) / (&2 * pi) = (&1 - d) / &3 * r pow 3 *
7149 ((&2 * pi) / (&2 * pi))`);
7151 (REWRITE_WITH `(&2 * pi) / (&2 * pi) = &1`);
7152 (MATCH_MP_TAC REAL_DIV_REFL);
7153 (REWRITE_TAC[REAL_ENTIRE; PI_NZ; REAL_ARITH `~(&2 = &0)`]);
7156 (UP_ASM_TAC THEN UNDISCH_TAC `k' = 3 /\ mcell k' V ul = mcell 3 V vl`
7158 (UP_ASM_TAC THEN MESON_TAC[]);
7160 (* ========================================================================= *)
7163 (NEW_GOAL `azim (u0:real^3) u1 m u2 =
7164 (if azim u0 u1 u2 m = &0 then &0 else &2 * pi - azim u0 u1 u2 m)`);
7165 (MATCH_MP_TAC AZIM_COMPL);
7168 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
7169 (EXISTS_TAC `m:real^3`);
7170 (ASM_REWRITE_TAC[]);
7171 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
7172 (EXISTS_TAC `u2:real^3`);
7173 (ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,b, d, c}`]);
7174 (ASM_REWRITE_TAC[]);
7175 (UP_ASM_TAC THEN COND_CASES_TAC);
7177 (NEW_GOAL `(&0 < pi)`);
7178 (REWRITE_TAC[PI_POS]);
7179 (UNDISCH_TAC `~(azim (u0:real^3) u1 u2 m < pi)`);
7180 (ASM_REWRITE_TAC[]);
7181 (UP_ASM_TAC THEN MESON_TAC[]);
7184 (NEW_GOAL `azim (u0:real^3) u1 u2 m = pi`);
7185 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7186 (UNDISCH_TAC `~coplanar {u0, u1, u2, m:real^3}`);
7187 (REWRITE_TAC[] THEN MATCH_MP_TAC AZIM_EQ_0_PI_IMP_COPLANAR);
7188 (ASM_REWRITE_TAC[]);
7189 (UP_ASM_TAC THEN MESON_TAC[]);
7191 (* ========================================================================= *)
7192 (* ========================================================================= *)
7193 (ABBREV_TAC `s = {X | mcell_set V X /\ edgeX V X e}`);
7194 (NEW_GOAL `sum s (\t. vol (t INTER D)) = vol (D)`);
7195 (ABBREV_TAC `f = (\t:real^3->bool. t INTER D)`);
7196 (REWRITE_WITH `(\t. vol (t INTER D)) = (\x:real^3->bool. vol (f x))`);
7199 (REWRITE_WITH `sum s (\x:real^3->bool. vol (f x)) = vol (UNIONS (IMAGE f s))`);
7200 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
7201 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_UNIONS_IMAGE);
7205 (MATCH_MP_TAC FINITE_EDGE_X2);
7206 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3`);
7207 (ASM_REWRITE_TAC[]);
7210 (MATCH_MP_TAC MEASURABLE_INTER);
7212 (UP_ASM_TAC THEN EXPAND_TAC "s");
7213 (REWRITE_TAC[mcell_set; IN; IN_ELIM_THM]);
7215 (ASM_SIMP_TAC[MEASURABLE_MCELL]);
7216 (ASM_REWRITE_TAC[MEASURABLE_CONIC_CAP]);
7219 (UNDISCH_TAC `(x:real^3->bool) IN s` THEN
7220 UNDISCH_TAC `(y:real^3->bool) IN s` THEN EXPAND_TAC "s");
7221 (REWRITE_TAC[mcell_set_2; IN; IN_ELIM_THM]);
7223 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
7224 (EXISTS_TAC `x INTER (y:real^3->bool)`);
7225 (ASM_REWRITE_TAC[SET_RULE `(x INTER D) INTER y INTER D SUBSET x INTER y`]);
7226 (MATCH_MP_TAC (MESON[] `(~A ==> F) ==> A`));
7229 (NEW_GOAL `i' = i /\ mcell i' V ul' = mcell i V ul`);
7230 (MATCH_MP_TAC Ajripqn.AJRIPQN);
7231 (ASM_REWRITE_TAC[SET_RULE `i IN {0, 1, 2, 3, 4} <=>
7232 i = 0 \/ i = 1 \/ i = 2 \/ i = 3 \/ i = 4`]);
7233 (UNDISCH_TAC `i <= 4` THEN UNDISCH_TAC `i' <= 4` THEN ARITH_TAC);
7234 (UNDISCH_TAC `~(x = y:real^3->bool)` THEN ASM_REWRITE_TAC[]);
7238 (EXPAND_TAC "f" THEN REWRITE_TAC[IMAGE]);
7244 (MATCH_MP_TAC MEASURE_NEGLIGIBLE_SYMDIFF);
7246 `UNIONS {y | ?x. x IN {X | mcell_set V X /\ edgeX V X e} /\ y = x INTER D}
7248 (REWRITE_TAC[SET_RULE `A DIFF B = {} <=> A SUBSET B`]);
7249 (REWRITE_TAC[UNIONS_SUBSET; IN; IN_ELIM_THM]);
7251 (REWRITE_TAC[SET_RULE `{} UNION A = A`]);
7253 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
7254 (EXISTS_TAC `UNIONS {y | ?x. x IN {X | mcell_set V X /\ NULLSET (X INTER D) /\
7255 ~(X INTER D = {})} /\ y = x INTER D}`);
7257 (MATCH_MP_TAC NEGLIGIBLE_UNIONS);
7260 `{y | ?x. x IN {X | mcell_set V X /\ NULLSET (X INTER D) /\
7261 ~(X INTER D = {})} /\
7263 {y | ?x. x IN {X | mcell_set V X /\ NULLSET (X INTER D) /\
7264 ~(X INTER D = {})} /\
7266 (EXPAND_TAC "f" THEN REWRITE_TAC[]);
7267 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
7269 (* ========================================================================= *)
7270 (* ========================================================================= *)
7271 (* ========================================================================= *)
7273 (MATCH_MP_TAC FINITE_SUBSET);
7274 (EXISTS_TAC `{X | X SUBSET ball (u0, &10) /\ mcell_set V X}`);
7276 (ASM_SIMP_TAC[FINITE_MCELL_SET_LEMMA_2]);
7277 (REWRITE_TAC[SUBSET; IN_BALL; IN; IN_ELIM_THM; mcell_set] THEN
7280 (NEW_GOAL `?v1:real^3. v1 IN x /\ v1 IN D`);
7281 (REWRITE_TAC[GSYM IN_INTER]);
7282 (UNDISCH_TAC `~(x:real^3->bool INTER D = {})` THEN SET_TAC[]);
7283 (UP_ASM_TAC THEN STRIP_TAC);
7284 (NEW_GOAL `dist (u0, x') <= dist (u0, v1:real^3) + dist (v1, x')`);
7286 (NEW_GOAL `dist (u0, v1:real^3) < &1`);
7287 (REWRITE_TAC[GSYM IN_BALL]);
7288 (NEW_GOAL `D SUBSET ball (u0:real^3, &1)`);
7290 (NEW_GOAL `ball (u0, r) SUBSET ball (u0:real^3, &1)`);
7291 (MATCH_MP_TAC SUBSET_BALL);
7292 (EXPAND_TAC "r" THEN REAL_ARITH_TAC);
7293 (UP_ASM_TAC THEN SET_TAC[]);
7294 (UP_ASM_TAC THEN UNDISCH_TAC `v1:real^3 IN D` THEN SET_TAC[]);
7295 (NEW_GOAL `dist (v1,x':real^3) < &8`);
7296 (REWRITE_TAC[GSYM IN_BALL]);
7298 (NEW_GOAL `x SUBSET ball (v1:real^3, &8)`);
7299 (ASM_REWRITE_TAC[]);
7300 (MATCH_MP_TAC MCELL_SUBSET_BALL8);
7301 (REWRITE_TAC[GSYM (ASSUME `x = mcell i V ul`)] THEN ASM_REWRITE_TAC[]);
7302 (UNDISCH_TAC `(x:real^3->bool) x'` THEN UP_ASM_TAC THEN SET_TAC[]);
7303 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7304 (EXISTS_TAC `i:num` THEN EXISTS_TAC `ul:(real^3)list`);
7305 (ASM_REWRITE_TAC[]);
7307 (* ========================================================================= *)
7309 (REWRITE_TAC[IN; IN_ELIM_THM]);
7311 (REWRITE_TAC[ASSUME `t:real^3->bool = x INTER D`]);
7312 (ASM_REWRITE_TAC[]);
7314 (REWRITE_TAC[SUBSET; IN_UNIONS]);
7317 (NEW_GOAL `?v:real^3. v IN V /\ x IN voronoi_closed V v`);
7318 (ASM_SIMP_TAC[TIWWFYQ]);
7319 (UP_ASM_TAC THEN STRIP_TAC);
7320 (UP_ASM_TAC THEN REWRITE_WITH
7321 `x IN voronoi_closed V v <=> (?vl. vl IN barV V 3 /\ x IN rogers V vl /\
7322 truncate_simplex 0 vl = [v])`);
7323 (ASM_SIMP_TAC[GLTVHUM]);
7324 (REWRITE_TAC[IN] THEN STRIP_TAC);
7325 (NEW_GOAL `?i. i <= 4 /\ x IN mcell i V vl`);
7326 (ASM_SIMP_TAC[IN;SLTSTLO1]);
7327 (UP_ASM_TAC THEN STRIP_TAC);
7329 (ABBREV_TAC `X = mcell i V vl`);
7330 (NEW_GOAL `~NULLSET (X INTER D) ==> F`);
7337 truncate_simplex 1 ul = [u0; u1]`);
7338 (FIRST_ASSUM MATCH_MP_TAC);
7340 (REWRITE_TAC[mcell_set; IN_ELIM_THM; IN]);
7341 (EXISTS_TAC `i:num` THEN EXISTS_TAC `vl:(real^3)list`);
7342 (ASM_REWRITE_TAC[]);
7343 (ASM_REWRITE_TAC[]);
7344 (UP_ASM_TAC THEN STRIP_TAC);
7346 (MP_TAC (ASSUME `x IN
7349 {y | ?x. x IN {X | mcell_set V X /\ edgeX V X e} /\ y = x INTER D}`));
7350 (REWRITE_TAC[IN_DIFF; MESON[] `~(A /\ ~B) <=> ~A \/ B`]);
7352 (REWRITE_TAC[IN_UNIONS; IN; IN_ELIM_THM]);
7353 (EXISTS_TAC `X INTER (D:real^3->bool)`);
7356 (EXISTS_TAC `(X:real^3->bool)`);
7357 (REWRITE_TAC[mcell_set; IN; IN_ELIM_THM] THEN STRIP_TAC);
7358 (EXISTS_TAC `i:num` THEN EXISTS_TAC `vl:(real^3)list`);
7359 (ASM_REWRITE_TAC[]);
7361 (REWRITE_TAC[edgeX; IN_ELIM_THM]);
7362 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3`);
7365 (NEW_GOAL `VX V X = V INTER X`);
7366 (MATCH_MP_TAC Hdtfnfz.HDTFNFZ);
7367 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `(if k < 4 then k else 4)`);
7368 (ASM_REWRITE_TAC[]);
7372 (NEW_GOAL `k >= 4`);
7373 (UP_ASM_TAC THEN ARITH_TAC);
7374 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; ]);
7375 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN ASM_REWRITE_TAC[]);
7376 (MESON_TAC[NEGLIGIBLE_SUBSET; SET_RULE `A INTER B SUBSET A`]);
7378 (NEW_GOAL `(V:real^3->bool) INTER X =
7379 set_of_list (truncate_simplex ((if k < 4 then k else 4) - 1) ul)`);
7380 (REWRITE_WITH `X = mcell (if k < 4 then k else 4) V ul`);
7381 (ASM_REWRITE_TAC[]);
7384 (NEW_GOAL `k >= 4`);
7385 (UP_ASM_TAC THEN ARITH_TAC);
7386 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; ]);
7388 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
7389 (ASM_REWRITE_TAC[]);
7391 (UNDISCH_TAC `2 <= k` THEN ARITH_TAC);
7393 (UNDISCH_TAC `2 <= k` THEN ARITH_TAC);
7394 (REWRITE_WITH `mcell (if k < 4 then k else 4) V ul = X`);
7395 (ASM_REWRITE_TAC[]);
7398 (NEW_GOAL `k >= 4`);
7399 (UP_ASM_TAC THEN ARITH_TAC);
7400 (ASM_SIMP_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; ]);
7402 (UNDISCH_TAC `~NULLSET (X INTER D)` THEN
7403 REWRITE_TAC[ASSUME `X = {}:real^3->bool`; SET_RULE `{} INTER x = {}`;
7405 (ASM_REWRITE_TAC[]);
7406 (NEW_GOAL `set_of_list (truncate_simplex 1 (ul:(real^3)list)) SUBSET
7407 set_of_list (truncate_simplex ((if k < 4 then k else 4) - 1) ul)`);
7408 (MATCH_MP_TAC Rogers.TRUNCATE_SIMPLEX_SUBSET);
7409 (REWRITE_WITH `LENGTH ul = 3 + 1 /\
7410 CARD (set_of_list (ul:(real^3)list)) = 3 + 1`);
7411 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
7412 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7413 (UNDISCH_TAC `2 <= k` THEN ARITH_TAC);
7414 (REWRITE_TAC[MESON[IN] `(s:real^3->bool) u <=> u IN s`]);
7416 (UP_ASM_TAC THEN REWRITE_TAC[ASSUME `truncate_simplex 1 ul = [u0; u1:real^3]`;
7419 (ASM_REWRITE_TAC[]);
7420 (REWRITE_TAC[MESON[IN] `(s:real^3->bool) u <=> u IN s`; IN_INTER]);
7422 (ASM_REWRITE_TAC[]);
7426 {y | ?x. x IN {X | mcell_set V X /\ edgeX V X e} /\ y = x INTER D}`);
7428 (UP_ASM_TAC THEN REWRITE_TAC[] THEN STRIP_TAC);
7429 (EXISTS_TAC `X INTER (D:real^3 ->bool)`);
7431 (REWRITE_TAC[IN_ELIM_THM]);
7432 (EXISTS_TAC `(X:real^3 ->bool)`);
7436 (REWRITE_TAC[mcell_set; IN; IN_ELIM_THM]);
7437 (EXISTS_TAC `i:num` THEN EXISTS_TAC `vl:(real^3)list`);
7438 (ASM_REWRITE_TAC[]);
7440 (ASM_REWRITE_TAC[]);
7442 (REWRITE_TAC[SET_RULE `~(a = {}) <=> (?x. x IN a)`]);
7443 (EXISTS_TAC `x:real^3`);
7445 (REWRITE_TAC[IN_INTER]);
7447 (ASM_REWRITE_TAC[]);
7451 {y | ?x. x IN {X | mcell_set V X /\ edgeX V X e} /\ y = x INTER D}`);
7455 (REWRITE_TAC[MESON[IN] `(s:real^3->bool) u <=> u IN s`; IN_INTER]);
7457 (ASM_REWRITE_TAC[]);
7461 {y | ?x. x IN {X | mcell_set V X /\ edgeX V X e} /\ y = x INTER D}`);
7464 (* ========================================================================= *)
7465 (* ========================================================================= *)
7466 (* ========================================================================= *)
7469 (ABBREV_TAC `t ={X | mcell_set V X /\ edgeX V X e /\ ~NULLSET (X INTER D)}`);
7471 (REWRITE_WITH `sum s (\t. vol (t INTER D)) =
7472 sum t (\t. vol (t INTER D))`);
7473 (MATCH_MP_TAC SUM_SUPERSET);
7474 (EXPAND_TAC "s" THEN EXPAND_TAC "t" THEN REPEAT STRIP_TAC);
7476 (MATCH_MP_TAC MEASURE_EQ_0);
7477 (UP_ASM_TAC THEN UP_ASM_TAC THEN REWRITE_TAC[IN; IN_ELIM_THM] );
7481 (REWRITE_WITH `sum s (\t. dihX V t (u0,u1)) =
7482 sum t (\t. dihX V t (u0,u1))`);
7483 (MATCH_MP_TAC SUM_SUPERSET);
7484 (EXPAND_TAC "s" THEN EXPAND_TAC "t" THEN REPEAT STRIP_TAC);
7487 (NEW_GOAL `NULLSET (x INTER D)`);
7488 (UP_ASM_TAC THEN UP_ASM_TAC THEN REWRITE_TAC[IN; IN_ELIM_THM] );
7491 (NEW_GOAL `mcell_set V x /\ edgeX V x e`);
7492 (UNDISCH_TAC `x IN {X | mcell_set V X /\ edgeX V X e}`);
7493 (REWRITE_TAC[IN; IN_ELIM_THM]);
7494 (UP_ASM_TAC THEN REWRITE_TAC[mcell_set_2; IN_ELIM_THM;IN] THEN STRIP_TAC);
7496 (NEW_GOAL `~NULLSET x`);
7497 (UP_ASM_TAC THEN REWRITE_TAC[edgeX; VX; IN_ELIM_THM]);
7498 (COND_CASES_TAC THEN REPEAT STRIP_TAC);
7499 (UNDISCH_TAC `{} (u:real^3)` THEN REWRITE_TAC[MESON[IN] `{} x <=> x IN {}`]);
7502 (NEW_GOAL `VX V x = V INTER (x:real^3->bool)`);
7503 (MATCH_MP_TAC Hdtfnfz.HDTFNFZ);
7504 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
7505 (ASM_REWRITE_TAC[]);
7507 (NEW_GOAL `V INTER (x:real^3->bool) =
7508 set_of_list (truncate_simplex (i - 1) ul)`);
7509 (ASM_REWRITE_TAC[]);
7510 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
7511 (ASM_REWRITE_TAC[]);
7513 (ASM_CASES_TAC `i = 0`);
7514 (NEW_GOAL `V INTER (x:real^3->bool) = {}`);
7515 (ASM_REWRITE_TAC[]);
7516 (MATCH_MP_TAC Lepjbdj.LEPJBDJ_0);
7517 (ASM_REWRITE_TAC[]);
7519 (UNDISCH_TAC `edgeX V x e` THEN REWRITE_TAC[edgeX; IN_ELIM_THM]);
7521 (UNDISCH_TAC `VX V x u` THEN ASM_REWRITE_TAC[MESON[IN] `{} x <=> x IN {}`]);
7523 (UP_ASM_TAC THEN MESON_TAC[]);
7524 (UP_ASM_TAC THEN ARITH_TAC);
7525 (REWRITE_TAC[GSYM (ASSUME `x = mcell i V ul`)] THEN STRIP_TAC);
7526 (UNDISCH_TAC `~NULLSET x` THEN REWRITE_TAC[ASSUME `x:real^3->bool = {}`;
7529 (NEW_GOAL `(u0:real^3) IN VX V x /\ u1 IN VX V x`);
7530 (UNDISCH_TAC `edgeX V x e` THEN REWRITE_TAC[edgeX; IN_ELIM_THM;
7531 ASSUME `e = {u0, u1:real^3}`]);
7533 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7535 (* ========================================================================== *)
7538 (ASM_CASES_TAC `i <= 1`);
7539 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2 ;v3:real^3]`);
7540 (MATCH_MP_TAC BARV_3_EXPLICIT);
7541 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7542 (UP_ASM_TAC THEN STRIP_TAC);
7543 (NEW_GOAL `i - 1 = 0`);
7544 (UNDISCH_TAC `i <= 1` THEN ARITH_TAC);
7545 (UNDISCH_TAC `u0 IN VX V x /\ u1 IN VX V x`);
7546 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_0; set_of_list]);
7547 (UNDISCH_TAC `~(u0 = u1:real^3)` THEN SET_TAC[]);
7549 (ASM_CASES_TAC `i = 3`);
7550 (NEW_GOAL `vol (x INTER D) > &0`);
7551 (ONCE_REWRITE_TAC[SET_RULE `a INTER b = b INTER a`]);
7552 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2 ;v3:real^3]`);
7553 (MATCH_MP_TAC BARV_3_EXPLICIT);
7554 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7555 (UP_ASM_TAC THEN STRIP_TAC);
7556 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell3; TRUNCATE_SIMPLEX_EXPLICIT_2;
7557 set_of_list; SET_RULE `{a,c,d} UNION {x} = {a,c,d,x}`]);
7559 (NEW_GOAL `i - 1 = 2`);
7560 (UNDISCH_TAC `i = 3` THEN ARITH_TAC);
7561 (UNDISCH_TAC `u0 IN VX V x /\ u1 IN VX V x`);
7562 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list]);
7564 (NEW_GOAL `?v:real^3. {u0, u1, v} = {v0, v1, v2}`);
7565 (NEW_GOAL `?v:real^3. v IN {v0, v1, v2} DIFF {u0, u1}`);
7566 (REWRITE_TAC[SET_RULE `(?x. x IN s) <=> ~(s = {})`]);
7567 (REWRITE_WITH `{v0, v1, v2} DIFF {u0, u1:real^3} = {} <=>
7568 CARD ({v0, v1, v2} DIFF {u0, u1}) = 0`);
7569 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
7570 (MATCH_MP_TAC CARD_EQ_0);
7571 (MATCH_MP_TAC FINITE_SUBSET);
7572 (EXISTS_TAC `{v0, v1, v2:real^3}`);
7573 (REWRITE_TAC[Geomdetail.FINITE6] THEN SET_TAC[]);
7574 (REWRITE_TAC[ARITH_RULE `~(a = 0) <=> 1 <= a`]);
7576 (NEW_GOAL `CARD {v0, v1, v2} = CARD ({v0, v1, v2} DIFF {u0, u1:real^3}) +
7578 (MATCH_MP_TAC Hypermap.CARD_MINUS_DIFF_TWO_SET);
7579 (ASM_REWRITE_TAC[Geomdetail.FINITE6]);
7580 (UP_ASM_TAC THEN REWRITE_WITH `CARD ({v0, v1, v2:real^3}) = 3`);
7581 (REWRITE_WITH `{v0, v1, v2:real^3} = set_of_list (truncate_simplex 2 ul)`);
7582 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list]);
7583 (ABBREV_TAC `xl = truncate_simplex 2 (ul:(real^3)list)`);
7584 (REWRITE_WITH `LENGTH (xl:(real^3)list) = 2 + 1 /\
7585 CARD (set_of_list xl) = 2 + 1`);
7586 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
7587 (EXISTS_TAC `V:real^3->bool` THEN STRIP_TAC);
7588 (ASM_REWRITE_TAC[]);
7589 (EXPAND_TAC "xl" THEN MATCH_MP_TAC Packing3.TRUNCATE_SIMPLEX_BARV);
7590 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[ARITH_RULE `2 <= 3`]);
7593 (NEW_GOAL `CARD {u0, u1:real^3} <= 2`);
7594 (REWRITE_TAC[Geomdetail.CARD2]);
7595 (UP_ASM_TAC THEN ARITH_TAC);
7596 (UP_ASM_TAC THEN STRIP_TAC);
7597 (EXISTS_TAC `v:real^3`);
7598 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN
7599 UNDISCH_TAC `~(u0 = u1:real^3)` THEN SET_TAC[]);
7600 (UP_ASM_TAC THEN STRIP_TAC);
7601 (NEW_GOAL `{v0, v1, v2, mxi V [v0; v1; v2; v3]} =
7602 {u0, u1, v, mxi V [v0; v1; v2; v3]}`);
7603 (UP_ASM_TAC THEN SET_TAC[]);
7604 (ASM_REWRITE_TAC[]);
7605 (MATCH_MP_TAC CONIC_CAP_INTER_CONVEX_HULL_4_GT_0);
7606 (ASM_REWRITE_TAC[]);
7608 (EXPAND_TAC "d" THEN UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
7609 (REWRITE_TAC[GSYM (ASSUME `{v0, v1, v2, mxi V [v0; v1; v2; v3]} =
7610 {u0, u1, v, mxi V [v0; v1; v2; v3]}`)] THEN STRIP_TAC);
7611 (UNDISCH_TAC `~NULLSET x`);
7612 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell3; set_of_list;
7613 TRUNCATE_SIMPLEX_EXPLICIT_2]);
7614 (REWRITE_TAC[SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
7615 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
7616 (EXISTS_TAC `affine hull {v0, v1, v2, mxi V [v0; v1; v2; v3]}`);
7617 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
7618 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
7619 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
7620 (ASM_REWRITE_TAC[]);
7623 (UNDISCH_TAC `~NULLSET x`);
7624 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell3; set_of_list;
7625 TRUNCATE_SIMPLEX_EXPLICIT_2]);
7626 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
7627 (UP_ASM_TAC THEN MESON_TAC[]);
7629 (NEW_GOAL `vol (x INTER D) = &0`);
7630 (MATCH_MP_TAC MEASURE_EQ_0);
7631 (ASM_REWRITE_TAC[]);
7632 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7635 (* ========================================== *)
7637 (ASM_CASES_TAC `i = 4`);
7638 (NEW_GOAL `vol (x INTER D) > &0`);
7639 (ONCE_REWRITE_TAC[SET_RULE `a INTER b = b INTER a`]);
7640 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2 ;v3:real^3]`);
7641 (MATCH_MP_TAC BARV_3_EXPLICIT);
7642 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7643 (UP_ASM_TAC THEN STRIP_TAC);
7644 (ASM_SIMP_TAC[MCELL_EXPLICIT; mcell4; ARITH_RULE `4 >= 4`;
7647 (NEW_GOAL `i - 1 = 3`);
7648 (UNDISCH_TAC `i = 4` THEN ARITH_TAC);
7649 (UNDISCH_TAC `u0 IN VX V x /\ u1 IN VX V x`);
7650 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_3; set_of_list]);
7653 (NEW_GOAL `?v w:real^3. {u0, u1, v, w} = {v0, v1, v2, v3}`);
7655 (NEW_GOAL `?v:real^3. v IN {v0, v1, v2, v3} DIFF {u0, u1}`);
7656 (REWRITE_TAC[SET_RULE `(?x. x IN s) <=> ~(s = {})`]);
7657 (REWRITE_WITH `{v0, v1, v2, v3} DIFF {u0, u1:real^3} = {} <=>
7658 CARD ({v0, v1, v2, v3} DIFF {u0, u1}) = 0`);
7659 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
7660 (MATCH_MP_TAC CARD_EQ_0);
7661 (MATCH_MP_TAC FINITE_SUBSET);
7662 (EXISTS_TAC `{v0, v1, v2, v3:real^3}`);
7663 (REWRITE_TAC[Geomdetail.FINITE6] THEN SET_TAC[]);
7664 (REWRITE_TAC[ARITH_RULE `~(a = 0) <=> 1 <= a`]);
7666 (NEW_GOAL `CARD {v0, v1, v2, v3} =
7667 CARD ({v0, v1, v2, v3} DIFF {u0, u1:real^3}) + CARD {u0, u1}`);
7668 (MATCH_MP_TAC Hypermap.CARD_MINUS_DIFF_TWO_SET);
7669 (ASM_REWRITE_TAC[Geomdetail.FINITE6]);
7671 (UP_ASM_TAC THEN REWRITE_WITH `CARD ({v0, v1, v2, v3:real^3}) = 3 + 1`);
7672 (REWRITE_WITH `{v0, v1, v2, v3:real^3} = set_of_list ul`);
7673 (ASM_REWRITE_TAC[set_of_list]);
7674 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
7675 CARD (set_of_list ul) = 3 + 1`);
7676 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
7677 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7678 (NEW_GOAL `CARD {u0, u1:real^3} <= 2`);
7679 (REWRITE_TAC[Geomdetail.CARD2]);
7680 (UP_ASM_TAC THEN ARITH_TAC);
7681 (UP_ASM_TAC THEN STRIP_TAC);
7683 (NEW_GOAL `?w:real^3. w IN {v0, v1, v2, v3} DIFF {u0, u1, v}`);
7684 (REWRITE_TAC[SET_RULE `(?x. x IN s) <=> ~(s = {})`]);
7685 (REWRITE_WITH `{v0, v1, v2, v3} DIFF {u0, u1, v:real^3} = {} <=>
7686 CARD ({v0, v1, v2, v3} DIFF {u0, u1, v}) = 0`);
7687 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
7688 (MATCH_MP_TAC CARD_EQ_0);
7689 (MATCH_MP_TAC FINITE_SUBSET);
7690 (EXISTS_TAC `{v0, v1, v2, v3:real^3}`);
7691 (REWRITE_TAC[Geomdetail.FINITE6] THEN SET_TAC[]);
7692 (REWRITE_TAC[ARITH_RULE `~(a = 0) <=> 1 <= a`]);
7694 (NEW_GOAL `CARD ({v0, v1, v2, v3} DIFF {u0, u1,v:real^3}) =
7695 CARD {v0, v1, v2, v3} - CARD {u0,u1,v}`);
7696 (MATCH_MP_TAC CARD_DIFF);
7697 (ASM_REWRITE_TAC[Geomdetail.FINITE6]);
7698 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7699 (UP_ASM_TAC THEN REWRITE_WITH `CARD ({v0, v1, v2, v3:real^3}) = 3 + 1`);
7700 (REWRITE_WITH `{v0, v1, v2, v3:real^3} = set_of_list ul`);
7701 (ASM_REWRITE_TAC[set_of_list]);
7702 (REWRITE_WITH `LENGTH (ul:(real^3)list) = 3 + 1 /\
7703 CARD (set_of_list ul) = 3 + 1`);
7704 (MATCH_MP_TAC Rogers.BARV_IMP_LENGTH_EQ_CARD);
7705 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7706 (NEW_GOAL `CARD {u0, u1, v:real^3} <= 3`);
7707 (REWRITE_TAC[Geomdetail.CARD3]);
7708 (UP_ASM_TAC THEN ARITH_TAC);
7709 (UP_ASM_TAC THEN STRIP_TAC);
7711 (EXISTS_TAC `v:real^3` THEN EXISTS_TAC `w:real^3`);
7712 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN
7713 UNDISCH_TAC `~(u0 = u1:real^3)` THEN SET_TAC[]);
7714 (UP_ASM_TAC THEN STRIP_TAC);
7715 (REWRITE_TAC[GSYM (ASSUME `{u0:real^3, u1, v, w} = {v0, v1, v2, v3}`)]);
7716 (MATCH_MP_TAC CONIC_CAP_INTER_CONVEX_HULL_4_GT_0);
7717 (ASM_REWRITE_TAC[]);
7719 (EXPAND_TAC "d" THEN UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
7721 (UNDISCH_TAC `~NULLSET x`);
7722 (SIMP_TAC[MCELL_EXPLICIT; mcell4; set_of_list; ARITH_RULE `4 >= 4`;
7723 ASSUME `x = mcell i V ul`; ASSUME `i = 4`;
7724 ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
7726 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
7727 (EXISTS_TAC `affine hull {v0, v1, v2, v3:real^3}`);
7728 (REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
7729 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
7730 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
7731 (ASM_REWRITE_TAC[]);
7732 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
7735 (UNDISCH_TAC `~NULLSET x`);
7736 (SIMP_TAC[MCELL_EXPLICIT; mcell4; set_of_list; ARITH_RULE `4 >= 4`;
7737 ASSUME `x = mcell i V ul`; ASSUME `i = 4`;
7738 ASSUME `ul = [v0; v1; v2; v3:real^3]`]);
7741 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7742 (UP_ASM_TAC THEN MESON_TAC[]);
7743 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
7744 (UP_ASM_TAC THEN MESON_TAC[]);
7746 (NEW_GOAL `vol (x INTER D) = &0`);
7747 (MATCH_MP_TAC MEASURE_EQ_0);
7748 (ASM_REWRITE_TAC[]);
7749 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7751 (* ========================================== *)
7754 (UNDISCH_TAC `i <= 4` THEN UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC
7758 (NEW_GOAL `vol (x INTER D) > &0`);
7759 (ONCE_REWRITE_TAC[SET_RULE `a INTER b = b INTER a`]);
7760 (NEW_GOAL `?v0 v1 v2 v3. ul = [v0; v1; v2 ;v3:real^3]`);
7761 (MATCH_MP_TAC BARV_3_EXPLICIT);
7762 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
7763 (UP_ASM_TAC THEN STRIP_TAC);
7764 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell2; TRUNCATE_SIMPLEX_EXPLICIT_1;
7765 set_of_list; HD; TL]);
7769 (NEW_GOAL `i - 1 = 1`);
7770 (UNDISCH_TAC `i = 2` THEN ARITH_TAC);
7771 (UNDISCH_TAC `u0 IN VX V x /\ u1 IN VX V x`);
7772 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_1; set_of_list]);
7774 (NEW_GOAL `{u0, u1} = {v0, v1:real^3}`);
7775 (UP_ASM_TAC THEN UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1:real^3)` THEN
7777 (REWRITE_TAC[SET_RULE `A INTER B INTER C INTER D =
7778 (A INTER (B INTER C)) INTER D`]);
7779 (REWRITE_WITH `rcone_ge v0 v1 a' INTER rcone_ge v1 v0 a' =
7780 rcone_ge u0 u1 a' INTER rcone_ge u1 (u0:real^3) a'`);
7781 (ASM_CASES_TAC `u0:real^3 = v0`);
7782 (NEW_GOAL `u1 = v1:real^3`);
7783 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7784 (ASM_REWRITE_TAC[]);
7785 (NEW_GOAL `u0 = v1:real^3`);
7786 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7787 (NEW_GOAL `u1 = v0:real^3`);
7788 (UP_ASM_TAC THEN UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7789 (ASM_REWRITE_TAC[]);
7793 `conic_cap u0 u1 r d INTER rcone_ge u0 u1 a' INTER rcone_ge u1 u0 a' =
7794 conic_cap (u0:real^3) u1 r d`);
7795 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> A INTER B = A`));
7797 (NEW_GOAL `conic_cap (u0:real^3) u1 r d SUBSET rcone_ge u0 u1 a'`);
7798 (REWRITE_TAC[conic_cap]);
7799 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> C INTER A SUBSET B`));
7800 (NEW_GOAL `rcone_gt u0 u1 d SUBSET rcone_gt (u0:real^3) u1 a'`);
7801 (MATCH_MP_TAC RCONE_GT_SUBSET);
7802 (EXPAND_TAC "d" THEN EXPAND_TAC "c");
7803 (MATCH_MP_TAC (REAL_ARITH `a = x ==> a <= max (max y x) (max z t)`));
7804 (EXPAND_TAC "a'" THEN REWRITE_TAC[HL; set_of_list] THEN ASM_REWRITE_TAC[]);
7805 (NEW_GOAL `rcone_gt u0 u1 a' SUBSET rcone_ge (u0:real^3) u1 a'`);
7806 (REWRITE_TAC[RCONE_GT_SUBSET_RCONE_GE]);
7807 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7808 (REWRITE_TAC[SUBSET_INTER] THEN STRIP_TAC);
7809 (ASM_REWRITE_TAC[]);
7811 (REWRITE_TAC[SUBSET]);
7813 (MATCH_MP_TAC Marchal_cells_2_new.RCONEGE_INTER_VORONOI_CLOSED_IMP_RCONEGE);
7814 (EXISTS_TAC `V:real^3->bool`);
7815 (ASM_REWRITE_TAC[]);
7818 (REWRITE_WITH `a' = hl [u0; u1:real^3] / sqrt (&2)`);
7820 (REWRITE_TAC[HL; set_of_list] THEN ASM_REWRITE_TAC[]);
7821 (MATCH_MP_TAC REAL_LT_DIV);
7822 (REWRITE_TAC[HL_2]);
7824 (MATCH_MP_TAC REAL_LT_MUL);
7825 (REWRITE_TAC[REAL_ARITH `&0 < inv (&2)`]);
7826 (MATCH_MP_TAC DIST_POS_LT);
7827 (ASM_REWRITE_TAC[]);
7828 (MATCH_MP_TAC SQRT_POS_LT);
7831 (MATCH_MP_TAC REAL_DIV_LE_1_TACTICS);
7833 (MATCH_MP_TAC SQRT_POS_LT);
7835 (MATCH_MP_TAC (REAL_ARITH `a < b ==> a <= b`));
7836 (ASM_REWRITE_TAC[]);
7838 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7839 (NEW_GOAL `x':real^3 IN ball (u0, (&1))`);
7840 (UP_ASM_TAC THEN REWRITE_TAC[conic_cap;NORMBALL_BALL] THEN STRIP_TAC);
7841 (NEW_GOAL `ball (u0, r) SUBSET ball (u0:real^3, &1)`);
7842 (MATCH_MP_TAC SUBSET_BALL);
7845 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
7846 (UP_ASM_TAC THEN REWRITE_TAC[IN_BALL] THEN ONCE_REWRITE_TAC[DIST_SYM]
7848 (REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM]);
7850 (ASM_CASES_TAC `u0 = w:real^3`);
7851 (ASM_REWRITE_TAC[] THEN REAL_ARITH_TAC);
7852 (NEW_GOAL `&2 <= dist (u0, w:real^3)`);
7853 (UNDISCH_TAC `packing (V:real^3->bool)` THEN REWRITE_TAC[packing]);
7855 (FIRST_ASSUM MATCH_MP_TAC);
7856 (ASM_REWRITE_TAC[]);
7857 (UNDISCH_TAC `u0:real^3 IN V` THEN REWRITE_TAC[IN]);
7858 (NEW_GOAL `dist (x', u0) >= dist (u0, w) - dist (x', w:real^3)`);
7860 (UP_ASM_TAC THEN UP_ASM_TAC THEN DEL_TAC THEN DEL_TAC THEN UP_ASM_TAC
7861 THEN REAL_ARITH_TAC);
7862 (ABBREV_TAC `M = mxi V [v0; v1; v2; v3]`);
7863 (ABBREV_TAC `R = omega_list_n V [v0; v1; v2; v3] 3`);
7865 (NEW_GOAL `vol (conic_cap u0 u1 r d INTER convex hull {v0:real^3,v1,M,R})
7866 <= vol (conic_cap u0 u1 r d INTER aff_ge {v0, v1} {M, R})`);
7867 (MATCH_MP_TAC MEASURE_SUBSET);
7869 (MATCH_MP_TAC MEASURABLE_INTER);
7870 (REWRITE_TAC[MEASURABLE_CONIC_CAP]);
7871 (MATCH_MP_TAC MEASURABLE_CONVEX_HULL);
7872 (MATCH_MP_TAC FINITE_IMP_BOUNDED);
7873 (REWRITE_TAC[Geomdetail.FINITE6]);
7875 (REWRITE_TAC[conic_cap; NORMBALL_BALL]);
7876 (ONCE_REWRITE_TAC[SET_RULE `(a INTER b) INTER c =
7877 (a INTER b) INTER (a INTER c)`]);
7878 (MATCH_MP_TAC MEASURABLE_INTER);
7879 (REWRITE_TAC[MEASURABLE_BALL_AFF_GE]);
7880 (REWRITE_TAC[GSYM conic_cap; GSYM NORMBALL_BALL; MEASURABLE_CONIC_CAP]);
7882 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> C INTER A SUBSET C INTER B`));
7883 (REWRITE_TAC[Marchal_cells_2_new.CONVEX_HULL_4_SUBSET_AFF_GE_2_2]);
7887 (NEW_GOAL `vol (conic_cap u0 u1 r d INTER convex hull {v0, v1, M, R}) > &0`);
7888 (REWRITE_WITH `{v0, v1, M, R} = {u0, u1, M, R:real^3}`);
7889 (UNDISCH_TAC `{u0, u1} = {v0, v1:real^3}` THEN SET_TAC[]);
7890 (MATCH_MP_TAC CONIC_CAP_INTER_CONVEX_HULL_4_GT_0);
7891 (ASM_REWRITE_TAC[]);
7893 (EXPAND_TAC "d" THEN UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
7895 (UNDISCH_TAC `~NULLSET x`);
7896 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell2; set_of_list;
7897 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
7899 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
7900 (EXISTS_TAC `aff_ge {v0, v1} {M, R:real^3}`);
7901 (REWRITE_TAC[SET_RULE `a INTER B INTER c SUBSET c`]);
7902 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
7903 (EXISTS_TAC `affine hull ({v0, v1} UNION {M, R:real^3})`);
7904 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL; SET_RULE
7905 `{a, b} UNION {c, d} = {a,b,c,d}`]);
7906 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
7907 (REWRITE_TAC[COPLANAR_AFFINE_HULL_COPLANAR]);
7908 (REWRITE_WITH `{v0, v1, M, R} = {u0, u1, M, R:real^3}`);
7909 (UNDISCH_TAC `{u0, u1} = {v0, v1:real^3}` THEN SET_TAC[]);
7910 (ASM_REWRITE_TAC[]);
7911 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7914 (UNDISCH_TAC `~NULLSET x`);
7915 (ASM_REWRITE_TAC[MCELL_EXPLICIT; mcell2; set_of_list;
7916 TRUNCATE_SIMPLEX_EXPLICIT_1; HD; TL]);
7917 (REWRITE_TAC[NEGLIGIBLE_EMPTY]);
7918 (UP_ASM_TAC THEN MESON_TAC[]);
7920 (NEW_GOAL `vol (x INTER D) = &0`);
7921 (MATCH_MP_TAC MEASURE_EQ_0);
7922 (ASM_REWRITE_TAC[]);
7923 (UP_ASM_TAC THEN UP_ASM_TAC THEN REAL_ARITH_TAC);
7924 (UP_ASM_TAC THEN MESON_TAC[]);
7926 (* ========================================== *)
7928 (REWRITE_WITH `sum t (\t. vol (t INTER D)) =
7929 sum t (\t. vol D * dihX V t (u0,u1) / (&2 * pi))`);
7930 (MATCH_MP_TAC SUM_EQ);
7931 (EXPAND_TAC "t" THEN REWRITE_TAC[IN_ELIM_THM; IN] THEN REPEAT STRIP_TAC);
7933 (REWRITE_TAC[REAL_ARITH `a * b / c = (a / c) * b`]);
7934 (REWRITE_TAC[SUM_LMUL]);
7935 (ABBREV_TAC `R = sum t (\t. dihX V t (u0,u1))`);
7936 (REWRITE_TAC[REAL_ARITH `a / b * c = (a * c) / b`]);
7937 (REWRITE_WITH `(vol D * R) / (&2 * pi) = vol D <=>
7938 (vol D * R) = vol D * (&2 * pi)`);
7939 (MATCH_MP_TAC REAL_EQ_LDIV_EQ);
7940 (MATCH_MP_TAC REAL_LT_MUL);
7941 (REWRITE_TAC[PI_POS]);
7943 (REWRITE_TAC[REAL_ARITH `a * b = a * c <=> a * (b - c) = &0`]);
7944 (REWRITE_TAC[REAL_ENTIRE]);
7947 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
7949 (NEW_GOAL `&0 < d`);
7950 (EXPAND_TAC "d" THEN UNDISCH_TAC `&0 < c /\ c < &1` THEN REAL_ARITH_TAC);
7951 (ASM_SIMP_TAC[VOLUME_CONIC_CAP]);
7954 (UNDISCH_TAC `d < &1` THEN UNDISCH_TAC `&0 < r` THEN UP_ASM_TAC
7955 THEN REAL_ARITH_TAC);
7956 (REWRITE_TAC[REAL_ARITH `&2 / &3 * a = &0 <=> a = &0`]);
7957 (REWRITE_TAC[REAL_ENTIRE]);
7958 (NEW_GOAL `~(pi = &0)`);
7959 (MP_TAC PI_POS THEN REAL_ARITH_TAC);
7960 (NEW_GOAL `~(&1 - d = &0)`);
7961 (UNDISCH_TAC `d < &1` THEN REAL_ARITH_TAC);
7962 (NEW_GOAL `~(r pow 3 = &0)`);
7963 (MATCH_MP_TAC REAL_POW_NZ);
7964 (UNDISCH_TAC `&0 < r` THEN REAL_ARITH_TAC);
7965 (ASM_REWRITE_TAC[]);
7966 (UP_ASM_TAC THEN MESON_TAC[]);
7967 (UP_ASM_TAC THEN REAL_ARITH_TAC)]);;