1 (* ========================================================================== *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
6 (* Author: Vu Khac Ky *)
8 (* ========================================================================== *)
11 module Tskajxy_lemmas = struct
14 open Euler_main_theorem;;
21 open Vukhacky_tactics;;
24 (* open Marchal_cells_2;; *)
25 open Marchal_cells_2_new;;
40 open Upfzbzm_support_lemmas;;
41 open Marchal_cells_3;;
44 open Sum_gammax_lmfun_estimate;;
52 (* ------------------------------------------------------------------------ *)
53 (* Changed by Vu Khac Ky - 15 Nov 2012 *)
54 (* The tactic SET_TAC has been changed collect_geom.hl, therefore *)
55 (* other files cannot be processed. It causes some troubles, *)
56 (* so I change it back to the original one here. *)
57 (* ------------------------------------------------------------------------ *)
61 POP_ASSUM_LIST(K ALL_TAC) THEN REPEAT COND_CASES_TAC THEN
62 REWRITE_TAC[EXTENSION; SUBSET; PSUBSET; DISJOINT; SING] THEN
63 REWRITE_TAC[NOT_IN_EMPTY; IN_UNIV; IN_UNION; IN_INTER; IN_DIFF; IN_INSERT;
64 IN_DELETE; IN_REST; IN_INTERS; IN_UNIONS; IN_IMAGE;
67 (if ths = [] then ALL_TAC else MP_TAC(end_itlist CONJ ths)) THEN
71 let SET_RULE tm = prove(tm,SET_TAC[]);;
73 (* ------------------------------------------------------------------------ *)
75 let AFF_GE_1_3 = prove(`!x u v w.
76 DISJOINT {x} {u, v, w}
77 ==> aff_ge {x} {u, v, w} =
82 t1 + t2 + t3 + t4 = &1 /\
83 y = t1 % x + t2 % u + t3 % v + t4 % w}`,
86 (* ------------------------------------------------------------------------ *)
88 let KY_COPLANAR_3 = prove (
89 `!a b c:real^3. coplanar {a,b,c}`,
90 REPEAT GEN_TAC THEN REWRITE_TAC[coplanar] THEN EXISTS_TAC `a:real^3` THEN
91 EXISTS_TAC `b:real^3` THEN EXISTS_TAC `c:real^3` THEN
92 REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);;
94 (* ------------------------------------------------------------------------ *)
96 let NEGLIGIBLE_MEASURE_UNION_klema = prove_by_refinement (
97 `!s t. measurable s /\ measurable t /\ negligible t ==>
98 vol (s UNION t) = vol s`,
100 (REWRITE_WITH `vol (s UNION t) = vol s + vol t - vol (s INTER t)`);
101 (ASM_SIMP_TAC[MEASURE_UNION]);
102 (REWRITE_WITH `vol t = &0`);
103 (ASM_SIMP_TAC[MEASURE_EQ_0]);
104 (REWRITE_WITH `vol (s INTER t) = &0`);
105 (MATCH_MP_TAC MEASURE_EQ_0);
106 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
107 (EXISTS_TAC `t:real^3->bool` THEN ASM_REWRITE_TAC[] THEN SET_TAC[]);
110 (* ------------------------------------------------------------------------ *)
111 let SOL_SOLID_TRIANGLE = prove_by_refinement (
112 `!v0 v1 v2 v3 a123 a231 a312.
113 ~coplanar {v0, v1, v2, v3} /\
114 a = dihV v0 v1 v2 v3 /\
115 b = dihV v0 v2 v3 v1 /\
117 ==> sol v0 (convex hull {v0,v1,v2,v3}) = a + b + c - pi`,
120 (NEW_GOAL `CARD {v0, v1, v2, v3:real^3} = 4`);
121 (MATCH_MP_TAC Collect_geom2.NOT_COPLANAR_IMP_CARD4);
122 (ASM_REWRITE_TAC[coplanar_alt; GSYM Trigonometry2.coplanar1]);
124 (NEW_GOAL `~(v0 = v1:real^3) /\ ~(v0 = v2) /\ ~(v0 = v3) /\
125 ~(v1 = v2) /\ ~(v1 = v3) /\ ~(v2 = v3)`);
127 (NEW_GOAL `CARD {v0, v1, v2, v3:real^3} <= 3`);
128 (REWRITE_TAC[ASSUME `v0 = v1:real^3`;
129 SET_RULE `{v1, v1, v2, v3} = {v1,v2,v3}`;Geomdetail.CARD3 ]);
131 (NEW_GOAL `CARD {v0, v1, v2, v3:real^3} <= 3`);
132 (REWRITE_TAC[ASSUME `v0 = v2:real^3`;
133 SET_RULE `{v2, v1, v2, v3} = {v1,v2,v3}`;Geomdetail.CARD3 ]);
135 (NEW_GOAL `CARD {v0, v1, v2, v3:real^3} <= 3`);
136 (REWRITE_TAC[ASSUME `v0 = v3:real^3`;
137 SET_RULE `{v3, v1, v2, v3} = {v1,v2,v3}`;Geomdetail.CARD3 ]);
139 (NEW_GOAL `CARD {v0, v1, v2, v3:real^3} <= 3`);
140 (REWRITE_TAC[ASSUME `v1 = v2:real^3`;
141 SET_RULE `{v0, v2, v2, v3} = {v0,v2,v3}`;Geomdetail.CARD3 ]);
143 (NEW_GOAL `CARD {v0, v1, v2, v3:real^3} <= 3`);
144 (REWRITE_TAC[ASSUME `v1 = v3:real^3`;
145 SET_RULE `{v0, v3, v2, v3} = {v0,v2,v3}`;Geomdetail.CARD3 ]);
147 (NEW_GOAL `CARD {v0, v1, v2, v3:real^3} <= 3`);
148 (REWRITE_TAC[ASSUME `v2 = v3:real^3`;
149 SET_RULE `{v0, v1, v3, v3} = {v0,v1,v3}`;Geomdetail.CARD3 ]);
153 (ABBREV_TAC `s = closest_point (convex hull {v1,v2,v3:real^3}) v0`);
154 (NEW_GOAL `s IN convex hull {v1,v2,v3:real^3} /\
155 (!y. y IN convex hull {v1,v2,v3} ==> dist (v0,s) <= dist (v0,y))`);
157 (MATCH_MP_TAC CLOSEST_POINT_EXISTS);
159 (MATCH_MP_TAC Marchal_cells_2_new.CLOSED_CONVEX_HULL_FINITE);
160 (REWRITE_TAC[Geomdetail.FINITE6]);
161 (REWRITE_TAC[CONVEX_HULL_EQ_EMPTY] THEN SET_TAC[]);
162 (UP_ASM_TAC THEN STRIP_TAC);
163 (ABBREV_TAC `r = dist (v0, s:real^3)`);
164 (ABBREV_TAC `C = convex hull {v0,v1,v2,v3:real^3}`);
166 measurable (C INTER normball (v0:real^3) r) /\
167 radial_norm r v0 (C INTER normball v0 r)`);
170 (REWRITE_TAC[NORM_ARITH `dist (x,y) > &0 <=> ~(x = y)`]);
173 (UNDISCH_TAC `~coplanar {v0,v1,v2,v3:real^3}`);
174 (REWRITE_TAC[coplanar]);
175 (EXISTS_TAC `v1:real^3` THEN EXISTS_TAC `v2:real^3` THEN
176 EXISTS_TAC `v3:real^3`);
177 (REWRITE_TAC[SUBSET; SET_RULE `a IN {x,y,z,t} <=> a=x\/a=y\/a=z\/a=t`]);
180 (MATCH_MP_TAC (SET_RULE `(?s. a IN s /\ s SUBSET t) ==> a IN t`));
181 (EXISTS_TAC `convex hull {v1,v2,v3:real^3}`);
182 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
184 (MATCH_MP_TAC (SET_RULE `(?s. a IN s /\ s SUBSET t) ==> a IN t`));
185 (EXISTS_TAC `{v1,v2,v3:real^3}`);
186 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
189 (MATCH_MP_TAC (SET_RULE `(?s. a IN s /\ s SUBSET t) ==> a IN t`));
190 (EXISTS_TAC `{v1,v2,v3:real^3}`);
191 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
194 (MATCH_MP_TAC (SET_RULE `(?s. a IN s /\ s SUBSET t) ==> a IN t`));
195 (EXISTS_TAC `{v1,v2,v3:real^3}`);
196 (REWRITE_TAC[Qzksykg.SET_SUBSET_AFFINE_HULL]);
200 (NEW_GOAL `measurable (C INTER normball (v0:real^3) r)`);
201 (MATCH_MP_TAC MEASURABLE_INTER);
202 (REWRITE_TAC[NORMBALL_BALL; MEASURABLE_BALL]);
204 (MATCH_MP_TAC MEASURABLE_CONVEX_HULL);
205 (MATCH_MP_TAC FINITE_IMP_BOUNDED);
206 (REWRITE_TAC[Geomdetail.FINITE6]);
209 (REWRITE_TAC[GSYM Marchal_cells_2_new.RADIAL_VS_RADIAL_NORM; radial]);
210 (REWRITE_TAC[NORMBALL_BALL; SET_RULE `a INTER s SUBSET s`]);
211 (REWRITE_TAC[IN_INTER]);
213 (REWRITE_TAC[Marchal_cells_2_new.CONVEX_HULL_4; IN; IN_ELIM_THM]);
216 (EXISTS_TAC `&1 - t * (v + w + z)`);
217 (EXISTS_TAC `t*v` THEN EXISTS_TAC `t*w` THEN EXISTS_TAC `t*z`);
218 (NEW_GOAL `&0 <= t`);
219 (ASM_REAL_ARITH_TAC);
220 (ASM_SIMP_TAC[REAL_LE_MUL]);
221 (REWRITE_TAC[REAL_ARITH `&1 - t * (v + w + z) + t * v + t * w + t * z = &1`]);
223 (REWRITE_TAC[REAL_ARITH `&0 <= a - b <=> ~(a < b)`]);
225 (ABBREV_TAC `t' = &1 / (v + w + z)`);
226 (NEW_GOAL `v0 + t' % u IN convex hull {v1,v2,v3:real^3}`);
227 (REWRITE_TAC[IN; CONVEX_HULL_3; IN_ELIM_THM]);
228 (EXISTS_TAC `v/(v+w+z)` THEN EXISTS_TAC `w/(v+w+z)` THEN EXISTS_TAC `z/(v+w+z)`);
230 (MATCH_MP_TAC REAL_LE_DIV);
231 (ASM_SIMP_TAC[REAL_LE_ADD]);
232 (MATCH_MP_TAC REAL_LE_DIV);
233 (ASM_SIMP_TAC[REAL_LE_ADD]);
234 (MATCH_MP_TAC REAL_LE_DIV);
235 (ASM_SIMP_TAC[REAL_LE_ADD]);
236 (REWRITE_TAC[REAL_ARITH `a/x+b/x+c/x = (a+b+c)/x`]);
237 (MATCH_MP_TAC REAL_DIV_REFL);
239 (UNDISCH_TAC `&1 < t * (v + w + z)` THEN ASM_REWRITE_TAC[]);
241 (REWRITE_TAC[VECTOR_ARITH `v / (v + w + z) % v1 + w / (v + w + z) % v2 +
242 z / (v + w + z) % v3 = (&1/(v+w+z)) % (v%v1+w%v2+z%v3)`]);
243 (REWRITE_WITH `v%v1+w%v2+z%v3 = (v0:real^3) + u - u' % v0`);
244 (UNDISCH_TAC `v0 + u = u' % v0 + v % v1 + w % v2 + z % (v3:real^3)`);
246 (MATCH_MP_TAC Trigonometry2.VECTOR_MUL_R_TO_L);
249 (UNDISCH_TAC `&1 < t * (v + w + z)` THEN ASM_REWRITE_TAC[]);
251 (REWRITE_TAC[VECTOR_ARITH `(v + w + z) % (v0 + t' % u) = v0 + u - u' % v0 <=>
252 (u' + v + w + z) % v0 + ((v + w + z) * t') % u = v0 + u`]);
253 (EXPAND_TAC "t'" THEN REWRITE_TAC[ASSUME `u' + v + w + z = &1`; ARITH_RULE
254 `x * &1 / x = x / x`; VECTOR_ARITH `&1 % x + y = x + z <=> y = z`]);
255 (REWRITE_WITH `(v + w + z) / (v + w + z) = &1`);
256 (MATCH_MP_TAC REAL_DIV_REFL);
258 (UNDISCH_TAC `&1 < t * (v + w + z)` THEN ASM_REWRITE_TAC[]);
262 (NEW_GOAL `r <= dist(v0:real^3, v0 + t' % u)`);
264 (NEW_GOAL `t' < t:real`);
265 (REWRITE_TAC[REAL_ARITH `a < b <=> ~(b <= a)`] THEN STRIP_TAC);
266 (NEW_GOAL `t' * (v+ w + z) = &1`);
267 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
268 (REWRITE_WITH `&1 = t' * (v + w + z) <=> &1/(v+w+z) = t'`);
269 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
270 (MATCH_MP_TAC REAL_EQ_LDIV_EQ);
271 (NEW_GOAL `&0 <= v + w + z`);
272 (ASM_SIMP_TAC[REAL_LE_ADD]);
273 (NEW_GOAL `~(v + w + z = &0)`);
275 (UNDISCH_TAC `&1 < t * (v + w + z)` THEN ASM_REWRITE_TAC[]);
277 (ASM_REAL_ARITH_TAC);
279 (NEW_GOAL `t * (v + w + z) <= t' * (v + w + z)`);
280 (REWRITE_TAC[REAL_ARITH `a * x <= b * x <=> &0 <= (b - a) * x`]);
281 (MATCH_MP_TAC REAL_LE_MUL);
282 (ASM_SIMP_TAC[REAL_LE_ADD]);
283 (ASM_REAL_ARITH_TAC);
284 (ASM_REAL_ARITH_TAC);
286 (NEW_GOAL `v0 + t' % u IN ball (v0:real^3, r)`);
287 (REWRITE_TAC[IN_BALL; dist; VECTOR_ARITH `v0 - (v0 + t' % u) = --t' % u`]);
288 (REWRITE_TAC[NORM_MUL; REAL_ARITH `abs (-- t) = abs (t)`]);
289 (REWRITE_WITH `abs (t') = t'`);
290 (REWRITE_TAC[REAL_ABS_REFL]);
291 (EXPAND_TAC "t'" THEN MATCH_MP_TAC REAL_LE_DIV THEN ASM_SIMP_TAC[REAL_LE_ADD]);
293 (NEW_GOAL `t' * norm u <= t * norm (u:real^3)`);
294 (REWRITE_TAC[REAL_ARITH `a * x <= b * x <=> &0 <= (b - a) * x`]);
295 (MATCH_MP_TAC REAL_LE_MUL);
296 (ASM_SIMP_TAC[NORM_POS_LE]);
297 (ASM_REAL_ARITH_TAC);
298 (ASM_REAL_ARITH_TAC);
299 (UP_ASM_TAC THEN REWRITE_TAC[IN_BALL]);
300 (ASM_REAL_ARITH_TAC);
301 (REWRITE_TAC[VECTOR_ARITH `v0 + t % u =
302 (&1 - t * (v + w + z)) % v0 + (t * v) % v1 + (t * w) % v2 + (t * z) % v3 <=>
303 t % u = t % (v % v1 + w % v2 + z % v3 - (v+w+z) % v0)`]);
305 (REWRITE_TAC[VECTOR_ARITH `u = v % v1 + w % v2 + z % v3 - (v + w + z) % v0
306 <=> (u'+v+w+z) % v0 + u = u' % v0 + v % v1 + w % v2 + z % v3 `]);
307 (ASM_REWRITE_TAC[VECTOR_ARITH `&1 % a = a`]);
308 (REWRITE_TAC[MESON[IN] `(V:real^3->bool) x <=> x IN V`]);
310 (REWRITE_TAC[IN_BALL; dist; VECTOR_ARITH `v0 - (v0 + t' % u) = --t' % u`]);
311 (REWRITE_TAC[NORM_MUL; REAL_ARITH `abs (-- t) = abs (t)`]);
312 (REWRITE_WITH `abs (t) = t`);
313 (REWRITE_TAC[REAL_ABS_REFL]);
314 (ASM_REAL_ARITH_TAC);
319 (NEW_GOAL `C INTER normball v0 r =
320 aff_ge {v0:real^3} {v1,v2,v3} INTER normball v0 r`);
321 (MATCH_MP_TAC (SET_RULE `A SUBSET B /\ B SUBSET A ==> A = B`));
323 (MATCH_MP_TAC (SET_RULE `A SUBSET B ==> A INTER C SUBSET B INTER C`));
326 (NEW_GOAL `DISJOINT {v0} {v1,v2,v3:real^3}`);
327 (REWRITE_TAC[DISJOINT; SET_RULE
328 `{v0} INTER {v1, v2, v3} = {} <=> ~(v0 = v1 \/ v0 = v2 \/ v0 = v3)`]);
330 (UNDISCH_TAC `~coplanar {v0,v1,v2,v3:real^3}`);
331 (ASM_REWRITE_TAC[SET_RULE `{a,a,c,d} = {a,c,d}`; KY_COPLANAR_3]);
332 (UNDISCH_TAC `~coplanar {v0,v1,v2,v3:real^3}`);
333 (ASM_REWRITE_TAC[SET_RULE `{c,a,c,d} = {a,c,d}`; KY_COPLANAR_3]);
334 (UNDISCH_TAC `~coplanar {v0,v1,v2,v3:real^3}`);
335 (ASM_REWRITE_TAC[SET_RULE `{d,a,c,d} = {a,c,d}`; KY_COPLANAR_3]);
336 (ASM_SIMP_TAC[AFF_GE_1_3]);
337 (EXPAND_TAC "C" THEN REWRITE_TAC[SUBSET; CONVEX_HULL_4; IN; IN_ELIM_THM]);
339 (EXISTS_TAC `u:real` THEN EXISTS_TAC `v:real` THEN
340 EXISTS_TAC `w:real` THEN EXISTS_TAC `z:real` THEN ASM_REWRITE_TAC[]);
342 (REWRITE_TAC[SUBSET; IN_INTER]);
343 (NEW_GOAL `DISJOINT {v0} {v1,v2,v3:real^3}`);
344 (REWRITE_TAC[DISJOINT; SET_RULE
345 `{v0} INTER {v1, v2, v3} = {} <=> ~(v0 = v1 \/ v0 = v2 \/ v0 = v3)`]);
347 (UNDISCH_TAC `~coplanar {v0,v1,v2,v3:real^3}`);
348 (ASM_REWRITE_TAC[SET_RULE `{a,a,c,d} = {a,c,d}`; KY_COPLANAR_3]);
349 (UNDISCH_TAC `~coplanar {v0,v1,v2,v3:real^3}`);
350 (ASM_REWRITE_TAC[SET_RULE `{c,a,c,d} = {a,c,d}`; KY_COPLANAR_3]);
351 (UNDISCH_TAC `~coplanar {v0,v1,v2,v3:real^3}`);
352 (ASM_REWRITE_TAC[SET_RULE `{d,a,c,d} = {a,c,d}`; KY_COPLANAR_3]);
353 (ASM_SIMP_TAC[AFF_GE_1_3]);
354 (EXPAND_TAC "C" THEN REWRITE_TAC[SUBSET; CONVEX_HULL_4; IN; IN_ELIM_THM]);
356 (EXISTS_TAC `t1:real` THEN EXISTS_TAC `t2:real` THEN
357 EXISTS_TAC `t3:real` THEN EXISTS_TAC `t4:real` THEN ASM_REWRITE_TAC[]);
359 (REWRITE_TAC[ARITH_RULE `&0 <= s <=> ~(s < &0)`] THEN STRIP_TAC);
360 (NEW_GOAL `&1 < t2 + t3 + t4`);
361 (ASM_REAL_ARITH_TAC);
363 (ABBREV_TAC `u = &1 / (t2 + t3 + t4)`);
364 (NEW_GOAL `v0 + u % (x - v0) IN convex hull {v1,v2,v3:real^3}`);
365 (REWRITE_TAC[IN; CONVEX_HULL_3; IN_ELIM_THM]);
366 (EXISTS_TAC `t2/(t2+t3+t4)` THEN EXISTS_TAC `t3/(t2+t3+t4)` THEN EXISTS_TAC `t4/(t2+t3+t4)`);
368 (MATCH_MP_TAC REAL_LE_DIV);
369 (ASM_SIMP_TAC[REAL_LE_ADD]);
370 (MATCH_MP_TAC REAL_LE_DIV);
371 (ASM_SIMP_TAC[REAL_LE_ADD]);
372 (MATCH_MP_TAC REAL_LE_DIV);
373 (ASM_SIMP_TAC[REAL_LE_ADD]);
374 (REWRITE_TAC[REAL_ARITH `a/x+b/x+c/x = (a+b+c)/x`]);
375 (MATCH_MP_TAC REAL_DIV_REFL);
376 (ASM_REAL_ARITH_TAC);
377 (REWRITE_TAC[VECTOR_ARITH `v / (v + w + z) % v1 + w / (v + w + z) % v2 +
378 z / (v + w + z) % v3 = (&1/(v+w+z)) % (v%v1+w%v2+z%v3)`]);
379 (REWRITE_WITH `t2 % v1 + t3 % v2 + t4 % v3 =
380 (x - v0:real^3) + (&1 - t1) % v0`);
381 (UNDISCH_TAC `x = t1 % v0 + t2 % v1 + t3 % v2 + t4 % (v3:real^3)`);
383 (MATCH_MP_TAC Trigonometry2.VECTOR_MUL_R_TO_L);
385 (ASM_REAL_ARITH_TAC);
386 (REWRITE_TAC[VECTOR_ARITH
387 `(t2 + t3 + t4) % (v0 + u % (x - v0)) = x - v0 + (&1 - t1) % v0 <=>
388 (t1 + t2 + t3 + t4) % v0 + ((t2 + t3 + t4) * u) % (x - v0) = v0 + (x - v0)`]);
389 (EXPAND_TAC "u" THEN REWRITE_TAC[ASSUME `t1 + t2 + t3 + t4 = &1`;
390 ARITH_RULE `x * &1 / x = x / x`;
391 VECTOR_ARITH `&1 % x + y = x + z <=> y = z`]);
392 (REWRITE_WITH `(t2 + t3 + t4) / (t2 + t3 + t4) = &1`);
393 (MATCH_MP_TAC REAL_DIV_REFL);
394 (ASM_REAL_ARITH_TAC);
397 (NEW_GOAL `r <= dist(v0:real^3, v0 + u % (x - v0))`);
399 (UP_ASM_TAC THEN REWRITE_TAC[dist;
400 VECTOR_ARITH `v0 - (v0 + u % (x - v0)) = --u % (x - v0)`;
401 NORM_MUL; REAL_ARITH `abs (-- t) = abs (t)`]);
402 (REWRITE_WITH `abs (u) = u`);
403 (REWRITE_TAC[REAL_ABS_REFL]);
405 (MATCH_MP_TAC REAL_LE_DIV);
406 (ASM_REAL_ARITH_TAC);
407 (REWRITE_TAC[GSYM dist]);
408 (REWRITE_TAC[REAL_ARITH `a < b <=> ~(b <= a)`] THEN STRIP_TAC);
410 (NEW_GOAL `u * dist (x,v0:real^3) <= dist (x,v0:real^3)`);
411 (REWRITE_TAC[REAL_ARITH `a * b <= b <=> &0 <= (&1 - a) * b`]);
412 (MATCH_MP_TAC REAL_LE_MUL);
413 (REWRITE_TAC[DIST_POS_LE; REAL_ARITH `&0 <= a - b <=> b <= a`]);
415 (REWRITE_WITH `&1 / (t2 + t3 + t4) <= &1 <=> &1 <= (t2 + t3 + t4)`);
416 (MATCH_MP_TAC Packing3.REAL_DIV_LE_1);
417 (ASM_REAL_ARITH_TAC);
418 (ASM_REAL_ARITH_TAC);
419 (NEW_GOAL `r <= dist (v0, x:real^3)`);
420 (ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REAL_ARITH_TAC);
421 (UNDISCH_TAC `normball (v0:real^3) r x` THEN REWRITE_TAC[NORMBALL_BALL]);
422 (REWRITE_TAC[MESON[IN] `(V:real^3->bool) x <=> x IN V`; IN_BALL]);
423 (ASM_REAL_ARITH_TAC);
426 (REWRITE_WITH `vol (aff_ge {v0} {v1, v2, v3} INTER normball v0 r) =
427 vol (ball (v0,r) INTER aff_gt {v0} {v1, v2, v3})`);
428 (REWRITE_TAC[SET_RULE `a INTER normball v0 r = normball v0 r INTER a`]);
429 (REWRITE_TAC[NORMBALL_BALL]);
432 `aff_ge {v0} {v1, v2, v3:real^3} =
433 aff_gt {v0} {v1, v2, v3} UNION
434 UNIONS {aff_ge {v0} ({v1, v2, v3} DELETE a) | a | a IN {v1, v2, v3}}`);
435 (MATCH_MP_TAC AFF_GE_AFF_GT_DECOMP);
436 (REWRITE_TAC[Geomdetail.FINITE6]);
438 (REWRITE_TAC[DISJOINT; SET_RULE
439 `{v0} INTER {v1, v2, v3} = {} <=> ~(v0 = v1 \/ v0 = v2 \/ v0 = v3)`]);
441 (UNDISCH_TAC `~coplanar {v0,v1,v2,v3:real^3}`);
442 (ASM_REWRITE_TAC[SET_RULE `{a,a,c,d} = {a,c,d}`; KY_COPLANAR_3]);
443 (UNDISCH_TAC `~coplanar {v0,v1,v2,v3:real^3}`);
444 (ASM_REWRITE_TAC[SET_RULE `{c,a,c,d} = {a,c,d}`; KY_COPLANAR_3]);
445 (UNDISCH_TAC `~coplanar {v0,v1,v2,v3:real^3}`);
446 (ASM_REWRITE_TAC[SET_RULE `{d,a,c,d} = {a,c,d}`; KY_COPLANAR_3]);
448 (REWRITE_TAC[SET_RULE `A INTER (B UNION C) = (A INTER B) UNION (A INTER C)`]);
449 (MATCH_MP_TAC NEGLIGIBLE_MEASURE_UNION_klema);
450 (REWRITE_TAC[MEASURABLE_BALL_AFF_GT]);
452 (REWRITE_WITH `ball (v0:real^3,r) INTER
453 UNIONS {aff_ge {v0} ({v1, v2, v3} DELETE a) | a | a IN {v1, v2, v3}} =
454 UNIONS {ball (v0,r) INTER aff_ge {v0} ({v1, v2, v3} DELETE a) | a | a IN {v1, v2, v3}}`);
455 (REWRITE_TAC[SET_EQ_LEMMA; IN_INTER; IN_UNIONS] THEN REPEAT STRIP_TAC);
456 (EXISTS_TAC `ball (v0:real^3, r) INTER t`);
458 (DEL_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
459 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
460 (NEW_GOAL `(t:real^3->bool) SUBSET ball(v0:real^3, r)`);
461 (DEL_TAC THEN UP_ASM_TAC THEN REWRITE_TAC[IN; IN_ELIM_THM] THEN STRIP_TAC);
462 (UP_ASM_TAC THEN SET_TAC[]);
463 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
464 (SWITCH_TAC THEN UP_ASM_TAC THEN ONCE_REWRITE_TAC[IN] THEN
465 REWRITE_TAC[IN_ELIM_THM] THEN STRIP_TAC);
467 (EXISTS_TAC `aff_ge {v0:real^3} ({v1, v2, v3} DELETE a')`);
468 (ONCE_REWRITE_TAC[MESON[IN] `(V:real^3->bool) x <=> x IN V`]);
470 (EXISTS_TAC `a':real^3`);
472 (UP_ASM_TAC THEN DEL_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
474 (MATCH_MP_TAC MEASURABLE_UNIONS);
478 `fun = (\a:real^3. ball (v0,r) INTER aff_ge {v0} ({v1, v2, v3} DELETE a))`);
480 `{ball (v0,r) INTER aff_ge {v0} ({v1, v2, v3} DELETE a) | a | a IN
482 {fun a | a | a IN {v1,v2,v3:real^3}}`);
483 (EXPAND_TAC "fun" THEN REWRITE_TAC[]);
484 (REWRITE_WITH `{(fun:real^3->real^3->bool) a | a IN {v1, v2, v3:real^3}} =
485 {y | ?a. a IN {v1,v2,v3} /\ y = fun a}`);
486 (ONCE_REWRITE_TAC[SET_EQ_LEMMA]);
487 (ONCE_REWRITE_TAC[IN]);
488 (REWRITE_TAC[IN_ELIM_THM]);
489 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
490 (REWRITE_TAC[Geomdetail.FINITE6]);
492 (UP_ASM_TAC THEN REWRITE_TAC[IN; IN_ELIM_THM] THEN REPEAT STRIP_TAC);
493 (ASM_REWRITE_TAC[MEASURABLE_BALL_AFF_GE]);
494 (MATCH_MP_TAC NEGLIGIBLE_INTER);
496 (MATCH_MP_TAC NEGLIGIBLE_UNIONS);
500 `fun = (\a:real^3. aff_ge {v0} ({v1, v2, v3} DELETE a))`);
502 `{aff_ge {v0} ({v1, v2, v3} DELETE a) | a | a IN {v1, v2, v3}} =
503 {fun a | a | a IN {v1,v2,v3:real^3}}`);
504 (EXPAND_TAC "fun" THEN REWRITE_TAC[]);
505 (REWRITE_WITH `{(fun:real^3->real^3->bool) a | a IN {v1, v2, v3:real^3}} =
506 {y | ?a. a IN {v1,v2,v3} /\ y = fun a}`);
507 (ONCE_REWRITE_TAC[SET_EQ_LEMMA]);
508 (ONCE_REWRITE_TAC[IN]);
509 (REWRITE_TAC[IN_ELIM_THM]);
510 (MATCH_MP_TAC FINITE_IMAGE_EXPAND);
511 (REWRITE_TAC[Geomdetail.FINITE6]);
513 (ONCE_REWRITE_TAC[IN] THEN REWRITE_TAC[SET_RULE `a IN {x,y,z} <=>
514 a = x \/ a = y \/ a = z`; IN_ELIM_THM] THEN REPEAT STRIP_TAC);
516 (REWRITE_WITH `{v1, v2, v3} DELETE v1 = {v2,v3:real^3}`);
517 (UNDISCH_TAC `~(v0 = v1:real^3) /\ ~(v0 = v2) /\ ~(v0 = v3) /\
518 ~(v1 = v2) /\ ~(v1 = v3) /\ ~(v2 = v3)`);
520 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
521 (EXISTS_TAC `affine hull {v0,v2,v3:real^3}`);
522 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
523 (REWRITE_TAC[SET_RULE `{a,b,c} = {a} UNION {b,c}`]);
524 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
527 (REWRITE_WITH `{v1, v2, v3} DELETE v2 = {v1,v3:real^3}`);
528 (UNDISCH_TAC `~(v0 = v1:real^3) /\ ~(v0 = v2) /\ ~(v0 = v3) /\
529 ~(v1 = v2) /\ ~(v1 = v3) /\ ~(v2 = v3)`);
531 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
532 (EXISTS_TAC `affine hull {v0,v1,v3:real^3}`);
533 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
534 (REWRITE_TAC[SET_RULE `{a,b,c} = {a} UNION {b,c}`]);
535 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
538 (REWRITE_WITH `{v1, v2, v3} DELETE v3 = {v1,v2:real^3}`);
539 (UNDISCH_TAC `~(v0 = v1:real^3) /\ ~(v0 = v2) /\ ~(v0 = v3) /\
540 ~(v1 = v2) /\ ~(v1 = v3) /\ ~(v2 = v3)`);
542 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
543 (EXISTS_TAC `affine hull {v0,v1,v2:real^3}`);
544 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
545 (REWRITE_TAC[SET_RULE `{a,b,c} = {a} UNION {b,c}`]);
546 (REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL]);
548 (REWRITE_WITH `vol (ball (v0,r) INTER aff_gt {v0} {v1, v2, v3}) =
549 (let a123 = dihV v0 v1 v2 v3 in
550 let a231 = dihV v0 v2 v3 v1 in
551 let a312 = dihV v0 v3 v1 v2 in
552 (a123 + a231 + a312 - pi) * r pow 3 / &3)`);
553 (MATCH_MP_TAC VOLUME_SOLID_TRIANGLE);
555 (ASM_REAL_ARITH_TAC);
557 (REWRITE_TAC[REAL_ARITH
558 `&3 * (x * r pow 3 / &3) / r pow 3 = x * (r pow 3 / r pow 3)`]);
559 (REWRITE_WITH `r pow 3 / r pow 3 = &1`);
560 (MATCH_MP_TAC REAL_DIV_REFL);
561 (REWRITE_TAC[REAL_POW_EQ_0; ARITH_RULE `~(3 = 0)`]);
562 (ASM_REAL_ARITH_TAC);
565 (* ---------------------------------------------------------------------- *)
567 let DIHX_DIH_Y_lemma = prove_by_refinement (
568 `!V X ul u0 u1 u2 u3 i y1 y2 y3 y4 y5 y6.
575 ul = [u0; u1; u2; u3] /\
583 dihX V X (u0,u1) = dih_y y1 y2 y3 y4 y5 y6 /\
584 dihX V X (u0,u2) = dih_y y2 y3 y1 y5 y6 y4 /\
585 dihX V X (u0,u3) = dih_y y3 y1 y2 y6 y4 y5 /\
586 dihX V X (u2,u3) = dih_y y4 y3 y5 y1 y6 y2 /\
587 dihX V X (u1,u3) = dih_y y5 y1 y6 y2 y4 y3 /\
588 dihX V X (u1,u2) = dih_y y6 y1 y5 y3 y4 y2`,
589 [(REPEAT GEN_TAC THEN STRIP_TAC);
590 (NEW_GOAL `~(X:real^3->bool = {})`);
591 (STRIP_TAC THEN UNDISCH_TAC `~NULLSET X` THEN
592 REWRITE_TAC[ASSUME `X:real^3->bool = {}`; NEGLIGIBLE_EMPTY]);
594 (NEW_GOAL `X = mcell4 V ul`);
596 (ASM_SIMP_TAC[MCELL_EXPLICIT]);
597 (UP_ASM_TAC THEN REWRITE_TAC[mcell4]);
599 (REWRITE_TAC[ASSUME `ul = [u0; u1; u2; u3:real^3]`; set_of_list]);
602 (NEW_GOAL `VX V X = {u0,u1,u2,u3}`);
603 (REWRITE_WITH `VX V X = V INTER X`);
604 (MATCH_MP_TAC Hdtfnfz.HDTFNFZ);
605 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
608 (REWRITE_WITH `X = mcell 4 V ul`);
610 (MESON_TAC[ARITH_RULE `4 >= 4`; ASSUME `i >= 4`; MCELL_EXPLICIT]);
613 `V INTER mcell 4 V ul = set_of_list (truncate_simplex (4 - 1) ul)`);
614 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
615 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 4 /\ 4 <= 4`]);
616 (REWRITE_WITH ` mcell 4 V [u0; u1; u2; u3] = X`);
618 (MESON_TAC[ARITH_RULE `4 >= 4`; ASSUME `i >= 4`; MCELL_EXPLICIT]);
620 (ASM_REWRITE_TAC[ARITH_RULE `4 - 1 = 3`; TRUNCATE_SIMPLEX_EXPLICIT_3;
623 (* ---------------------------------------------------------------- *)
624 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} = 4`);
625 (REWRITE_TAC[ARITH_RULE `4 = 3 + 1`; GSYM set_of_list;
626 GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
627 (MATCH_MP_TAC Marchal_cells_3.BARV_CARD_LEMMA);
628 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
629 (NEW_GOAL `~(u0 = u1:real^3) /\ ~(u0 = u2) /\ ~(u0 = u3) /\
630 ~(u1 = u2) /\ ~(u1 = u3) /\ ~(u2 = u3)`);
632 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
633 (REWRITE_TAC[ASSUME `u0 = u1:real^3`;
634 SET_RULE `{u1, u1, u2, u3} = {u1,u2,u3}`;Geomdetail.CARD3 ]);
636 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
637 (REWRITE_TAC[ASSUME `u0 = u2:real^3`;
638 SET_RULE `{u2, u1, u2, u3} = {u1,u2,u3}`;Geomdetail.CARD3 ]);
640 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
641 (REWRITE_TAC[ASSUME `u0 = u3:real^3`;
642 SET_RULE `{u3, u1, u2, u3} = {u1,u2,u3}`;Geomdetail.CARD3 ]);
644 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
645 (REWRITE_TAC[ASSUME `u1 = u2:real^3`;
646 SET_RULE `{u0, u2, u2, u3} = {u0,u2,u3}`;Geomdetail.CARD3 ]);
648 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
649 (REWRITE_TAC[ASSUME `u1 = u3:real^3`;
650 SET_RULE `{u0, u3, u2, u3} = {u0,u2,u3}`;Geomdetail.CARD3 ]);
652 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
653 (REWRITE_TAC[ASSUME `u2 = u3:real^3`;
654 SET_RULE `{u0, u1, u3, u3} = {u0,u1,u3}`;Geomdetail.CARD3 ]);
657 (NEW_GOAL `edgeX V X = {{u0,u1:real^3}, {u0,u2}, {u0,u3},
658 {u1,u2}, {u1,u3}, {u2,u3}}`);
659 (REWRITE_TAC[edgeX]);
660 (ONCE_REWRITE_TAC[SET_EQ_LEMMA]);
661 (REWRITE_TAC[IN_ELIM_THM]);
664 (UNDISCH_TAC `VX V X u` THEN UNDISCH_TAC `VX V X v`);
665 (REWRITE_TAC[MESON[IN] `VX V X s <=> s IN VX V X`]);
666 (ASM_REWRITE_TAC[SET_RULE `v IN {u0, u1, u2, u3} <=>
667 v = u0 \/ v = u1 \/ v = u2 \/ v = u3`]);
672 (REWRITE_WITH `{u,v} = {v,u:real^3}`);
674 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
675 (REWRITE_WITH `{u,v} = {v,u:real^3}`);
677 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
678 (REWRITE_WITH `{u,v} = {v,u:real^3}`);
680 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
681 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
685 (REWRITE_WITH `{u,v} = {v,u:real^3}`);
687 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
688 (REWRITE_WITH `{u,v} = {v,u:real^3}`);
690 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
691 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
692 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
696 (REWRITE_WITH `{u,v} = {v,u:real^3}`);
698 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
699 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
700 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
701 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
706 (UP_ASM_TAC THEN REWRITE_TAC[SET_RULE `x IN {a,b,c,d,e,f} <=>
707 x = a \/ x = b \/ x = c \/ x = d \/ x = e \/ x = f`]);
708 (REWRITE_TAC[MESON[IN] `VX V X s <=> s IN VX V X`]);
709 (ASM_REWRITE_TAC[SET_RULE `v IN {u0, u1, u2, u3} <=>
710 v = u0 \/ v = u1 \/ v = u2 \/ v = u3`]);
712 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3` THEN ASM_REWRITE_TAC[]);
713 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u2:real^3` THEN ASM_REWRITE_TAC[]);
714 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u3:real^3` THEN ASM_REWRITE_TAC[]);
715 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN ASM_REWRITE_TAC[]);
716 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u3:real^3` THEN ASM_REWRITE_TAC[]);
717 (EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3` THEN ASM_REWRITE_TAC[]);
719 (* ==================================== *)
725 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
726 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
729 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
730 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
733 initial_sublist [u0; u1] ul)`);
735 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
736 (MATCH_MP_TAC SELECT_AX);
737 (EXISTS_TAC `(4, ul:(real^3)list)`);
739 (REWRITE_TAC[BETA_THM]);
740 (ASM_REWRITE_TAC[IN; ARITH_RULE `4 <= 4`]);
742 (MESON_TAC[MCELL_EXPLICIT; ASSUME `i >= 4`; ARITH_RULE `4 >= 4`]);
743 (REWRITE_TAC[INITIAL_SUBLIST]);
744 (EXISTS_TAC `[u2;u3:real^3]` THEN REWRITE_TAC[APPEND]);
746 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
747 (EXPAND_TAC "P" THEN REWRITE_TAC[IN]);
750 (ASM_CASES_TAC `2 <= k`);
753 (!t. 4 - 1 <= t /\ t <= 3
754 ==> omega_list_n V ul t = omega_list_n V ul' t)`);
755 (MATCH_MP_TAC Marchal_cells_3.MCELL_ID_OMEGA_LIST_N);
756 (ASM_REWRITE_TAC[SET_RULE `x IN {2,3,4} <=> x=2\/x=3\/x=4`]);
757 (REWRITE_TAC[GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
758 (REWRITE_WITH `mcell 4 V ul = X`);
759 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
760 (MESON_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; ASSUME `i >= 4`]);
761 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `~NULLSET X`]);
767 (UP_ASM_TAC THEN MESON_TAC[]);
771 (UP_ASM_TAC THEN MESON_TAC[]);
773 (REWRITE_TAC[dihu4]);
774 (NEW_GOAL `?v0 v1 v2 v3. ul' = [v0;v1;v2;v3:real^3]`);
775 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
776 (EXISTS_TAC `V:real^3->bool`);
778 (UP_ASM_TAC THEN STRIP_TAC);
780 (NEW_GOAL `u0 = v0:real^3`);
781 (NEW_GOAL`u0 = HD [u0;u1:real^3]`);
783 (ONCE_REWRITE_TAC[ASSUME `u0 = HD[u0;u1:real^3]`]);
784 (REWRITE_WITH `v0:real^3 = HD ul'`);
785 (ASM_REWRITE_TAC[HD]);
786 (REWRITE_WITH `[u0;u1:real^3] = truncate_simplex 1 ul'`);
787 (NEW_GOAL `[u0;u1:real^3] = truncate_simplex (LENGTH [u0;u1] - 1) ul' /\
788 LENGTH [u0;u1] <= LENGTH ul'`);
789 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
790 (ASM_REWRITE_TAC[LENGTH]);
792 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
794 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
795 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
796 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
797 (EXISTS_TAC `V:real^3->bool`);
801 (NEW_GOAL `u1 = v1:real^3`);
802 (NEW_GOAL`u1 = EL 1 [u0;u1:real^3]`);
803 (REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
804 (ONCE_REWRITE_TAC[ASSUME `u1 = EL 1 [u0;u1:real^3]`]);
806 (REWRITE_WITH `v1:real^3 = EL 1 ul'`);
807 (ASM_REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
808 (REWRITE_WITH `[u0;u1:real^3] = truncate_simplex 1 ul'`);
809 (NEW_GOAL `[u0;u1:real^3] = truncate_simplex (LENGTH [u0;u1] - 1) ul' /\
810 LENGTH [u0;u1] <= LENGTH ul'`);
811 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
812 (ASM_REWRITE_TAC[LENGTH]);
814 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
816 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
817 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
818 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
819 (EXISTS_TAC `V:real^3->bool`);
823 (NEW_GOAL `{u0,u1,u2,u3:real^3} = {v0,v1,v2,v3}`);
824 (NEW_GOAL `{u0,u1,u2,u3:real^3} = {v0,v1,v2,v3} <=>
825 convex hull {u0,u1,u2,u3:real^3} = convex hull {v0,v1,v2,v3}`);
826 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
827 (MATCH_MP_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ);
828 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`);
829 GSYM (ASSUME `ul' = [v0;v1;v2;v3:real^3]`)]);
831 (MATCH_MP_TAC Rogers.BARV_AFFINE_INDEPENDENT);
832 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
833 (MATCH_MP_TAC Rogers.BARV_AFFINE_INDEPENDENT);
834 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
835 (ONCE_REWRITE_TAC[ASSUME `{u0, u1, u2, u3:real^3} = {v0, v1, v2, v3} <=>
836 convex hull {u0, u1, u2, u3} = convex hull {v0, v1, v2, v3}`]);
837 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`);
838 GSYM (ASSUME `ul' = [v0;v1;v2;v3:real^3]`)]);
839 (REWRITE_WITH `convex hull set_of_list ul= X:real^3->bool`);
840 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
841 (REWRITE_WITH `mcell i V ul = mcell4 V ul`);
842 (MESON_TAC[ASSUME `i >= 4`; MCELL_EXPLICIT]);
843 (REWRITE_TAC[mcell4]);
847 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
848 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
850 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 4`]);
851 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
852 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
853 (REWRITE_TAC[mcell4]);
857 (NEW_GOAL `X:real^3->bool = {}`);
858 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 4`]);
859 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
860 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
861 (REWRITE_TAC[mcell4]);
864 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
865 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
867 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
868 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
869 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
870 (NEW_GOAL `(v2 = u2 /\ v3 = u3:real^3) \/ (v2 = u3 /\ v3 = u2)`);
873 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1) /\ ~(u0 = u2) /\ ~(u0 = u3) /\
874 ~(u1 = u2) /\ ~(u1 = u3) /\ ~(u2 = u3:real^3)`);
877 (UP_ASM_TAC THEN STRIP_TAC);
879 (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] DIHV_EQ_DIH_Y));
882 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
883 (EXISTS_TAC `v3:real^3`);
884 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
885 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
886 affine hull (affine hull {u, v, w})`);
887 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
888 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
889 affine hull {u:real^3, v, w}`);
890 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
892 (NEW_GOAL `NULLSET X`);
893 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
894 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
896 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
897 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
898 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
900 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
901 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
902 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
903 (REWRITE_TAC[mcell4]);
905 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
907 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
909 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
910 (EXISTS_TAC `v2:real^3`);
911 (ONCE_REWRITE_TAC[SET_RULE ` {v0, v1, v3, v2} = {v0, v1, v2, v3}`]);
912 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
913 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
914 affine hull (affine hull {u, v, w})`);
915 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
916 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
917 affine hull {u:real^3, v, w}`);
918 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
920 (NEW_GOAL `NULLSET X`);
921 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
922 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
924 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
925 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
926 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
928 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
929 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
930 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
931 (REWRITE_TAC[mcell4]);
933 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
935 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
938 (REWRITE_TAC[GSYM (ASSUME `u0 = v0:real^3`); GSYM (ASSUME `u1 = v1:real^3`)]);
939 (EXPAND_TAC "y1" THEN EXPAND_TAC "y2" THEN EXPAND_TAC "y3");
940 (EXPAND_TAC "y4" THEN EXPAND_TAC "y5" THEN EXPAND_TAC "y6");
943 (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] DIHV_EQ_DIH_Y));
946 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
947 (EXISTS_TAC `v3:real^3`);
948 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
949 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
950 affine hull (affine hull {u, v, w})`);
951 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
952 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
953 affine hull {u:real^3, v, w}`);
954 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
956 (NEW_GOAL `NULLSET X`);
957 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
958 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
960 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
961 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
962 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
964 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
965 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
966 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
967 (REWRITE_TAC[mcell4]);
969 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
971 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
973 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
974 (EXISTS_TAC `v2:real^3`);
975 (ONCE_REWRITE_TAC[SET_RULE ` {v0, v1, v3, v2} = {v0, v1, v2, v3}`]);
976 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
977 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
978 affine hull (affine hull {u, v, w})`);
979 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
980 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
981 affine hull {u:real^3, v, w}`);
982 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
984 (NEW_GOAL `NULLSET X`);
985 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
986 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
988 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
989 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
990 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
992 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
993 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
994 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
995 (REWRITE_TAC[mcell4]);
997 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
999 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1001 (ASM_REWRITE_TAC[]);
1002 (REWRITE_TAC[GSYM (ASSUME `u0 = v0:real^3`); GSYM (ASSUME `u1 = v1:real^3`)]);
1003 (EXPAND_TAC "y1" THEN EXPAND_TAC "y2" THEN EXPAND_TAC "y3");
1004 (EXPAND_TAC "y4" THEN EXPAND_TAC "y5" THEN EXPAND_TAC "y6");
1005 (REWRITE_TAC[Nonlinear_lemma.dih_y_sym; DIST_SYM]);
1008 (UP_ASM_TAC THEN MESON_TAC[]);
1011 (NEW_GOAL `V INTER (X:real^3->bool) = set_of_list (truncate_simplex (4 - 1) ul)`);
1012 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
1013 (REWRITE_WITH `mcell i V ul = mcell 4 V ul`);
1014 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
1015 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
1016 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 4 /\ 4 <= 4`]);
1017 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
1018 (ASM_REWRITE_TAC[]);
1019 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
1020 (ASM_REWRITE_TAC[]);
1021 (UP_ASM_TAC THEN REWRITE_TAC[ARITH_RULE `4 - 1 = 3`;
1022 ASSUME `ul = [u0;u1;u2;u3:real^3]`; TRUNCATE_SIMPLEX_EXPLICIT_3]);
1023 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
1024 (ASM_CASES_TAC `k = 1`);
1026 (REWRITE_WITH `V INTER (X:real^3->bool) =
1027 set_of_list (truncate_simplex (k - 1) ul')`);
1028 (REWRITE_TAC[ASSUME `X = mcell k V ul'`]);
1029 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
1030 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 1 /\ 1 <= 4`]);
1031 (REWRITE_WITH `mcell 1 V ul' = X`);
1032 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 1`]);
1033 (ASM_REWRITE_TAC[]);
1034 (REWRITE_TAC[ARITH_RULE `1 - 1 = 0`; ASSUME `k = 1`]);
1035 (REWRITE_WITH `truncate_simplex 0 (ul':(real^3)list) = [HD ul']`);
1036 (MATCH_MP_TAC Packing3.TRUNCATE_0_EQ_HEAD);
1037 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
1038 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
1039 (EXISTS_TAC `V:real^3->bool`);
1040 (ASM_REWRITE_TAC[]);
1044 (NEW_GOAL `CARD (set_of_list [(HD ul'):real^3]) =
1045 CARD (set_of_list (ul:(real^3)list))`);
1046 (AP_TERM_TAC THEN ASM_REWRITE_TAC[]);
1047 (UP_ASM_TAC THEN REWRITE_WITH `CARD (set_of_list (ul:(real^3)list)) = 3 + 1`);
1048 (MATCH_MP_TAC Marchal_cells_3.BARV_CARD_LEMMA);
1049 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1050 (REWRITE_TAC[set_of_list; Geomdetail.CARD_SING] THEN ARITH_TAC);
1054 (REWRITE_WITH `V INTER X = {}:real^3->bool`);
1055 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 0`]);
1056 (MATCH_MP_TAC Lepjbdj.LEPJBDJ_0);
1057 (ASM_REWRITE_TAC[]);
1058 (ASM_REWRITE_TAC[set_of_list]);
1059 (NEW_GOAL `u0 IN {u0,u1,u2,u3:real^3}`);
1061 (UP_ASM_TAC THEN SET_TAC[]);
1062 (UP_ASM_TAC THEN MESON_TAC[]);
1064 (* ========================================================================= *)
1066 (REWRITE_TAC[dihX]);
1069 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1070 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1073 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
1074 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
1077 initial_sublist [u0; u2] ul)`);
1079 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
1080 (MATCH_MP_TAC SELECT_AX);
1082 (ABBREV_TAC `wl = [u0;u2;u1;u3:real^3]`);
1084 (* Need to list properties of wl at this point *)
1085 (NEW_GOAL `?p. p permutes 0..3 /\
1086 wl:(real^3)list = left_action_list p ul`);
1087 (ASM_REWRITE_TAC[] THEN EXPAND_TAC "wl");
1088 (MATCH_MP_TAC Marchal_cells_3.LEFT_ACTION_LIST_3_EXISTS);
1090 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
1091 (REWRITE_TAC[ARITH_RULE `4 = 3 + 1`]);
1092 (MATCH_MP_TAC Marchal_cells_3.BARV_CARD_LEMMA);
1093 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1095 (UP_ASM_TAC THEN STRIP_TAC);
1096 (NEW_GOAL `barV V 3 wl`);
1097 (MATCH_MP_TAC Qzksykg.QZKSYKG1);
1098 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `4` THEN EXISTS_TAC `p:num->num`);
1099 (ASM_REWRITE_TAC[SET_RULE `4 IN {0,1,2,3,4}`; ARITH_RULE `4 - 1 = 3`]);
1100 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
1101 (ASM_REWRITE_TAC[]);
1102 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
1103 (ASM_REWRITE_TAC[]);
1105 (EXISTS_TAC `(4, wl:(real^3)list)`);
1107 (REWRITE_TAC[BETA_THM]);
1108 (ASM_REWRITE_TAC[IN; ARITH_RULE `4 <= 4`]);
1111 (REWRITE_WITH `mcell i V [u0; u1; u2; u3] = mcell 4 V [u0; u1; u2; u3]`);
1112 (MESON_TAC[MCELL_EXPLICIT; ASSUME `i >= 4`; ARITH_RULE `4 >= 4`]);
1113 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
1114 (MATCH_MP_TAC Rvfxzbu.RVFXZBU);
1115 (ASM_REWRITE_TAC[SET_RULE `4 IN {0,1,2,3,4}`; ARITH_RULE `4 - 1 = 3`]);
1116 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
1117 (ASM_REWRITE_TAC[]);
1118 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
1119 (REWRITE_TAC[GSYM (ASSUME `wl:(real^3)list = left_action_list p ul`)]);
1121 (REWRITE_WITH `[u0; u2; u1; u3] = APPEND [u0; u2] [u1; u3:real^3]`);
1122 (REWRITE_TAC[APPEND]);
1123 (REWRITE_TAC[Packing3.INITIAL_SUBLIST_APPEND]);
1125 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1126 (EXPAND_TAC "P" THEN REWRITE_TAC[IN]);
1129 (ASM_CASES_TAC `2 <= k`);
1132 (!t. 4 - 1 <= t /\ t <= 3
1133 ==> omega_list_n V ul t = omega_list_n V ul' t)`);
1134 (MATCH_MP_TAC Marchal_cells_3.MCELL_ID_OMEGA_LIST_N);
1135 (ASM_REWRITE_TAC[SET_RULE `x IN {2,3,4} <=> x=2\/x=3\/x=4`]);
1136 (REWRITE_TAC[GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
1137 (REWRITE_WITH `mcell 4 V ul = X`);
1138 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
1139 (MESON_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; ASSUME `i >= 4`]);
1140 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `~NULLSET X`]);
1142 (ASM_REWRITE_TAC[]);
1146 (UP_ASM_TAC THEN MESON_TAC[]);
1150 (UP_ASM_TAC THEN MESON_TAC[]);
1152 (REWRITE_TAC[dihu4]);
1153 (NEW_GOAL `?v0 v1 v2 v3. ul' = [v0;v1;v2;v3:real^3]`);
1154 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
1155 (EXISTS_TAC `V:real^3->bool`);
1156 (ASM_REWRITE_TAC[]);
1157 (UP_ASM_TAC THEN STRIP_TAC);
1159 (NEW_GOAL `u0 = v0:real^3`);
1160 (NEW_GOAL`u0 = HD [u0;u2:real^3]`);
1162 (ONCE_REWRITE_TAC[ASSUME `u0 = HD[u0;u2:real^3]`]);
1163 (REWRITE_WITH `v0:real^3 = HD ul'`);
1164 (ASM_REWRITE_TAC[HD]);
1165 (REWRITE_WITH `[u0;u2:real^3] = truncate_simplex 1 ul'`);
1166 (NEW_GOAL `[u0;u2:real^3] = truncate_simplex (LENGTH [u0;u2] - 1) ul' /\
1167 LENGTH [u0;u2] <= LENGTH ul'`);
1168 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
1169 (ASM_REWRITE_TAC[LENGTH]);
1171 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
1173 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
1174 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
1175 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
1176 (EXISTS_TAC `V:real^3->bool`);
1177 (ASM_REWRITE_TAC[]);
1180 (NEW_GOAL `u2 = v1:real^3`);
1181 (NEW_GOAL`u2 = EL 1 [u0;u2:real^3]`);
1182 (REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
1183 (ONCE_REWRITE_TAC[ASSUME `u2 = EL 1 [u0;u2:real^3]`]);
1185 (REWRITE_WITH `v1:real^3 = EL 1 ul'`);
1186 (ASM_REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
1187 (REWRITE_WITH `[u0;u2:real^3] = truncate_simplex 1 ul'`);
1188 (NEW_GOAL `[u0;u2:real^3] = truncate_simplex (LENGTH [u0;u2] - 1) ul' /\
1189 LENGTH [u0;u2] <= LENGTH ul'`);
1190 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
1191 (ASM_REWRITE_TAC[LENGTH]);
1193 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
1195 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
1196 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
1197 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
1198 (EXISTS_TAC `V:real^3->bool`);
1199 (ASM_REWRITE_TAC[]);
1202 (NEW_GOAL `{u0,u1,u2,u3:real^3} = {v0,v1,v2,v3}`);
1203 (NEW_GOAL `{u0,u1,u2,u3:real^3} = {v0,v1,v2,v3} <=>
1204 convex hull {u0,u1,u2,u3:real^3} = convex hull {v0,v1,v2,v3}`);
1205 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
1206 (MATCH_MP_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ);
1207 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`);
1208 GSYM (ASSUME `ul' = [v0;v1;v2;v3:real^3]`)]);
1210 (MATCH_MP_TAC Rogers.BARV_AFFINE_INDEPENDENT);
1211 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
1212 (MATCH_MP_TAC Rogers.BARV_AFFINE_INDEPENDENT);
1213 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
1214 (ONCE_REWRITE_TAC[ASSUME `{u0, u1, u2, u3:real^3} = {v0, v1, v2, v3} <=>
1215 convex hull {u0, u1, u2, u3} = convex hull {v0, v1, v2, v3}`]);
1216 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`);
1217 GSYM (ASSUME `ul' = [v0;v1;v2;v3:real^3]`)]);
1218 (REWRITE_WITH `convex hull set_of_list ul= X:real^3->bool`);
1219 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
1220 (REWRITE_WITH `mcell i V ul = mcell4 V ul`);
1221 (MESON_TAC[ASSUME `i >= 4`; MCELL_EXPLICIT]);
1222 (REWRITE_TAC[mcell4]);
1226 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1227 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1229 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 4`]);
1230 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
1231 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
1232 (REWRITE_TAC[mcell4]);
1236 (NEW_GOAL `X:real^3->bool = {}`);
1237 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 4`]);
1238 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
1239 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
1240 (REWRITE_TAC[mcell4]);
1243 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1244 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1246 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1247 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1249 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
1251 (NEW_GOAL `(v2 = u1 /\ v3 = u3:real^3) \/ (v2 = u3 /\ v3 = u1)`);
1252 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1) /\ ~(u0 = u2) /\ ~(u0 = u3) /\
1253 ~(u1 = u2) /\ ~(u1 = u3) /\ ~(u2 = u3:real^3)`);
1254 (ASM_REWRITE_TAC[]);
1256 (UP_ASM_TAC THEN STRIP_TAC);
1258 (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] DIHV_EQ_DIH_Y));
1261 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
1262 (EXISTS_TAC `v3:real^3`);
1263 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
1264 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
1265 affine hull (affine hull {u, v, w})`);
1266 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
1267 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
1268 affine hull {u:real^3, v, w}`);
1269 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
1271 (NEW_GOAL `NULLSET X`);
1272 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1273 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
1275 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1276 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
1277 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
1278 (ASM_REWRITE_TAC[]);
1279 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
1280 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
1281 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
1282 (REWRITE_TAC[mcell4]);
1284 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
1286 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1288 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
1289 (EXISTS_TAC `v2:real^3`);
1290 (ONCE_REWRITE_TAC[SET_RULE ` {v0, v1, v3, v2} = {v0, v1, v2, v3}`]);
1291 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
1292 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
1293 affine hull (affine hull {u, v, w})`);
1294 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
1295 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
1296 affine hull {u:real^3, v, w}`);
1297 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
1299 (NEW_GOAL `NULLSET X`);
1300 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1301 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
1303 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1304 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
1305 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
1306 (ASM_REWRITE_TAC[]);
1307 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
1308 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
1309 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
1310 (REWRITE_TAC[mcell4]);
1312 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
1314 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1316 (ASM_REWRITE_TAC[]);
1317 (REWRITE_TAC[GSYM (ASSUME `u0 = v0:real^3`); GSYM (ASSUME `u2 = v1:real^3`)]);
1318 (EXPAND_TAC "y1" THEN EXPAND_TAC "y2" THEN EXPAND_TAC "y3");
1319 (EXPAND_TAC "y4" THEN EXPAND_TAC "y5" THEN EXPAND_TAC "y6");
1320 (REWRITE_TAC[Nonlinear_lemma.dih_y_sym; DIST_SYM]);
1322 (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] DIHV_EQ_DIH_Y));
1325 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
1326 (EXISTS_TAC `v3:real^3`);
1327 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
1328 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
1329 affine hull (affine hull {u, v, w})`);
1330 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
1331 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
1332 affine hull {u:real^3, v, w}`);
1333 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
1335 (NEW_GOAL `NULLSET X`);
1336 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1337 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
1339 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1340 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
1341 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
1342 (ASM_REWRITE_TAC[]);
1343 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
1344 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
1345 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
1346 (REWRITE_TAC[mcell4]);
1348 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
1350 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1352 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
1353 (EXISTS_TAC `v2:real^3`);
1354 (ONCE_REWRITE_TAC[SET_RULE ` {v0, v1, v3, v2} = {v0, v1, v2, v3}`]);
1355 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
1356 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
1357 affine hull (affine hull {u, v, w})`);
1358 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
1359 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
1360 affine hull {u:real^3, v, w}`);
1361 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
1363 (NEW_GOAL `NULLSET X`);
1364 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1365 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
1367 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1368 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
1369 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
1370 (ASM_REWRITE_TAC[]);
1371 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
1372 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
1373 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
1374 (REWRITE_TAC[mcell4]);
1376 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
1378 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1380 (ASM_REWRITE_TAC[]);
1381 (REWRITE_TAC[GSYM (ASSUME `u0 = v0:real^3`); GSYM (ASSUME `u2 = v1:real^3`)]);
1382 (EXPAND_TAC "y1" THEN EXPAND_TAC "y2" THEN EXPAND_TAC "y3");
1383 (EXPAND_TAC "y4" THEN EXPAND_TAC "y5" THEN EXPAND_TAC "y6");
1384 (REWRITE_TAC[DIST_SYM]);
1387 (UP_ASM_TAC THEN MESON_TAC[]);
1390 (NEW_GOAL `V INTER (X:real^3->bool) = set_of_list (truncate_simplex (4 - 1) ul)`);
1391 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
1392 (REWRITE_WITH `mcell i V ul = mcell 4 V ul`);
1393 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
1394 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
1395 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 4 /\ 4 <= 4`]);
1396 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
1397 (ASM_REWRITE_TAC[]);
1398 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
1399 (ASM_REWRITE_TAC[]);
1400 (UP_ASM_TAC THEN REWRITE_TAC[ARITH_RULE `4 - 1 = 3`;
1401 ASSUME `ul = [u0;u1;u2;u3:real^3]`; TRUNCATE_SIMPLEX_EXPLICIT_3]);
1402 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
1403 (ASM_CASES_TAC `k = 1`);
1405 (REWRITE_WITH `V INTER (X:real^3->bool) =
1406 set_of_list (truncate_simplex (k - 1) ul')`);
1407 (REWRITE_TAC[ASSUME `X = mcell k V ul'`]);
1408 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
1409 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 1 /\ 1 <= 4`]);
1410 (REWRITE_WITH `mcell 1 V ul' = X`);
1411 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 1`]);
1412 (ASM_REWRITE_TAC[]);
1413 (REWRITE_TAC[ARITH_RULE `1 - 1 = 0`; ASSUME `k = 1`]);
1414 (REWRITE_WITH `truncate_simplex 0 (ul':(real^3)list) = [HD ul']`);
1415 (MATCH_MP_TAC Packing3.TRUNCATE_0_EQ_HEAD);
1416 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
1417 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
1418 (EXISTS_TAC `V:real^3->bool`);
1419 (ASM_REWRITE_TAC[]);
1423 (NEW_GOAL `CARD (set_of_list [(HD ul'):real^3]) =
1424 CARD (set_of_list (ul:(real^3)list))`);
1425 (AP_TERM_TAC THEN ASM_REWRITE_TAC[]);
1426 (UP_ASM_TAC THEN REWRITE_WITH `CARD (set_of_list (ul:(real^3)list)) = 3 + 1`);
1427 (MATCH_MP_TAC Marchal_cells_3.BARV_CARD_LEMMA);
1428 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1429 (REWRITE_TAC[set_of_list; Geomdetail.CARD_SING] THEN ARITH_TAC);
1433 (REWRITE_WITH `V INTER X = {}:real^3->bool`);
1434 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 0`]);
1435 (MATCH_MP_TAC Lepjbdj.LEPJBDJ_0);
1436 (ASM_REWRITE_TAC[]);
1437 (ASM_REWRITE_TAC[set_of_list]);
1438 (NEW_GOAL `u0 IN {u0,u1,u2,u3:real^3}`);
1440 (UP_ASM_TAC THEN SET_TAC[]);
1441 (UP_ASM_TAC THEN MESON_TAC[]);
1443 (* ========================================================================= *)
1445 (REWRITE_TAC[dihX]);
1449 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1450 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1453 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
1454 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
1457 initial_sublist [u0; u3] ul)`);
1459 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
1460 (MATCH_MP_TAC SELECT_AX);
1462 (ABBREV_TAC `wl = [u0;u3;u1;u2:real^3]`);
1464 (* Need to list properties of wl at this point *)
1465 (NEW_GOAL `?p. p permutes 0..3 /\
1466 wl:(real^3)list = left_action_list p ul`);
1467 (ASM_REWRITE_TAC[] THEN EXPAND_TAC "wl");
1468 (MATCH_MP_TAC Marchal_cells_3.LEFT_ACTION_LIST_3_EXISTS);
1470 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
1471 (REWRITE_TAC[ARITH_RULE `4 = 3 + 1`]);
1472 (MATCH_MP_TAC Marchal_cells_3.BARV_CARD_LEMMA);
1473 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1475 (UP_ASM_TAC THEN STRIP_TAC);
1476 (NEW_GOAL `barV V 3 wl`);
1477 (MATCH_MP_TAC Qzksykg.QZKSYKG1);
1478 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `4` THEN EXISTS_TAC `p:num->num`);
1479 (ASM_REWRITE_TAC[SET_RULE `4 IN {0,1,2,3,4}`; ARITH_RULE `4 - 1 = 3`]);
1480 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
1481 (ASM_REWRITE_TAC[]);
1482 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
1483 (ASM_REWRITE_TAC[]);
1485 (EXISTS_TAC `(4, wl:(real^3)list)`);
1487 (REWRITE_TAC[BETA_THM]);
1488 (ASM_REWRITE_TAC[IN; ARITH_RULE `4 <= 4`]);
1491 (REWRITE_WITH `mcell i V [u0; u1; u2; u3] = mcell 4 V [u0; u1; u2; u3]`);
1492 (MESON_TAC[MCELL_EXPLICIT; ASSUME `i >= 4`; ARITH_RULE `4 >= 4`]);
1493 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
1494 (MATCH_MP_TAC Rvfxzbu.RVFXZBU);
1495 (ASM_REWRITE_TAC[SET_RULE `4 IN {0,1,2,3,4}`; ARITH_RULE `4 - 1 = 3`]);
1496 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
1497 (ASM_REWRITE_TAC[]);
1498 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
1499 (REWRITE_TAC[GSYM (ASSUME `wl:(real^3)list = left_action_list p ul`)]);
1501 (REWRITE_WITH `[u0; u3; u1; u2] = APPEND [u0; u3] [u1; u2:real^3]`);
1502 (REWRITE_TAC[APPEND]);
1503 (REWRITE_TAC[Packing3.INITIAL_SUBLIST_APPEND]);
1505 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1506 (EXPAND_TAC "P" THEN REWRITE_TAC[IN]);
1509 (ASM_CASES_TAC `2 <= k`);
1512 (!t. 4 - 1 <= t /\ t <= 3
1513 ==> omega_list_n V ul t = omega_list_n V ul' t)`);
1514 (MATCH_MP_TAC Marchal_cells_3.MCELL_ID_OMEGA_LIST_N);
1515 (ASM_REWRITE_TAC[SET_RULE `x IN {2,3,4} <=> x=2\/x=3\/x=4`]);
1516 (REWRITE_TAC[GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
1517 (REWRITE_WITH `mcell 4 V ul = X`);
1518 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
1519 (MESON_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; ASSUME `i >= 4`]);
1520 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `~NULLSET X`]);
1522 (ASM_REWRITE_TAC[]);
1526 (UP_ASM_TAC THEN MESON_TAC[]);
1530 (UP_ASM_TAC THEN MESON_TAC[]);
1532 (REWRITE_TAC[dihu4]);
1533 (NEW_GOAL `?v0 v1 v2 v3. ul' = [v0;v1;v2;v3:real^3]`);
1534 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
1535 (EXISTS_TAC `V:real^3->bool`);
1536 (ASM_REWRITE_TAC[]);
1537 (UP_ASM_TAC THEN STRIP_TAC);
1539 (NEW_GOAL `u0 = v0:real^3`);
1540 (NEW_GOAL`u0 = HD [u0;u3:real^3]`);
1542 (ONCE_REWRITE_TAC[ASSUME `u0 = HD[u0;u3:real^3]`]);
1543 (REWRITE_WITH `v0:real^3 = HD ul'`);
1544 (ASM_REWRITE_TAC[HD]);
1545 (REWRITE_WITH `[u0;u3:real^3] = truncate_simplex 1 ul'`);
1546 (NEW_GOAL `[u0;u3:real^3] = truncate_simplex (LENGTH [u0;u3] - 1) ul' /\
1547 LENGTH [u0;u3] <= LENGTH ul'`);
1548 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
1549 (ASM_REWRITE_TAC[LENGTH]);
1551 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
1553 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
1554 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
1555 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
1556 (EXISTS_TAC `V:real^3->bool`);
1557 (ASM_REWRITE_TAC[]);
1560 (NEW_GOAL `u3 = v1:real^3`);
1561 (NEW_GOAL`u3 = EL 1 [u0;u3:real^3]`);
1562 (REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
1563 (ONCE_REWRITE_TAC[ASSUME `u3 = EL 1 [u0;u3:real^3]`]);
1565 (REWRITE_WITH `v1:real^3 = EL 1 ul'`);
1566 (ASM_REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
1567 (REWRITE_WITH `[u0;u3:real^3] = truncate_simplex 1 ul'`);
1568 (NEW_GOAL `[u0;u3:real^3] = truncate_simplex (LENGTH [u0;u3] - 1) ul' /\
1569 LENGTH [u0;u3] <= LENGTH ul'`);
1570 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
1571 (ASM_REWRITE_TAC[LENGTH]);
1573 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
1575 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
1576 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
1577 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
1578 (EXISTS_TAC `V:real^3->bool`);
1579 (ASM_REWRITE_TAC[]);
1582 (NEW_GOAL `{u0,u1,u2,u3:real^3} = {v0,v1,v2,v3}`);
1583 (NEW_GOAL `{u0,u1,u2,u3:real^3} = {v0,v1,v2,v3} <=>
1584 convex hull {u0,u1,u2,u3:real^3} = convex hull {v0,v1,v2,v3}`);
1585 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
1586 (MATCH_MP_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ);
1587 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`);
1588 GSYM (ASSUME `ul' = [v0;v1;v2;v3:real^3]`)]);
1590 (MATCH_MP_TAC Rogers.BARV_AFFINE_INDEPENDENT);
1591 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
1592 (MATCH_MP_TAC Rogers.BARV_AFFINE_INDEPENDENT);
1593 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
1594 (ONCE_REWRITE_TAC[ASSUME `{u0, u1, u2, u3:real^3} = {v0, v1, v2, v3} <=>
1595 convex hull {u0, u1, u2, u3} = convex hull {v0, v1, v2, v3}`]);
1596 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`);
1597 GSYM (ASSUME `ul' = [v0;v1;v2;v3:real^3]`)]);
1598 (REWRITE_WITH `convex hull set_of_list ul= X:real^3->bool`);
1599 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
1600 (REWRITE_WITH `mcell i V ul = mcell4 V ul`);
1601 (MESON_TAC[ASSUME `i >= 4`; MCELL_EXPLICIT]);
1602 (REWRITE_TAC[mcell4]);
1606 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1607 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1609 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 4`]);
1610 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
1611 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
1612 (REWRITE_TAC[mcell4]);
1616 (NEW_GOAL `X:real^3->bool = {}`);
1617 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 4`]);
1618 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
1619 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
1620 (REWRITE_TAC[mcell4]);
1623 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1624 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1626 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1627 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1629 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
1631 (NEW_GOAL `(v2 = u1 /\ v3 = u2:real^3) \/ (v2 = u2 /\ v3 = u1)`);
1632 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1) /\ ~(u0 = u2) /\ ~(u0 = u3) /\
1633 ~(u1 = u2) /\ ~(u1 = u3) /\ ~(u2 = u3:real^3)`);
1634 (ASM_REWRITE_TAC[]);
1636 (UP_ASM_TAC THEN STRIP_TAC);
1638 (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] DIHV_EQ_DIH_Y));
1641 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
1642 (EXISTS_TAC `v3:real^3`);
1643 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
1644 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
1645 affine hull (affine hull {u, v, w})`);
1646 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
1647 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
1648 affine hull {u:real^3, v, w}`);
1649 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
1651 (NEW_GOAL `NULLSET X`);
1652 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1653 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
1655 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1656 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
1657 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
1658 (ASM_REWRITE_TAC[]);
1659 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
1660 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
1661 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
1662 (REWRITE_TAC[mcell4]);
1664 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
1666 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1668 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
1669 (EXISTS_TAC `v2:real^3`);
1670 (ONCE_REWRITE_TAC[SET_RULE ` {v0, v1, v3, v2} = {v0, v1, v2, v3}`]);
1671 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
1672 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
1673 affine hull (affine hull {u, v, w})`);
1674 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
1675 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
1676 affine hull {u:real^3, v, w}`);
1677 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
1679 (NEW_GOAL `NULLSET X`);
1680 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1681 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
1683 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1684 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
1685 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
1686 (ASM_REWRITE_TAC[]);
1687 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
1688 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
1689 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
1690 (REWRITE_TAC[mcell4]);
1692 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
1694 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1696 (ASM_REWRITE_TAC[]);
1697 (REWRITE_TAC[GSYM (ASSUME `u0 = v0:real^3`); GSYM (ASSUME `u3 = v1:real^3`)]);
1698 (EXPAND_TAC "y1" THEN EXPAND_TAC "y2" THEN EXPAND_TAC "y3");
1699 (EXPAND_TAC "y4" THEN EXPAND_TAC "y5" THEN EXPAND_TAC "y6");
1700 (REWRITE_TAC[Nonlinear_lemma.dih_y_sym; Nonlinear_lemma.dih_y_sym2;
1703 (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] DIHV_EQ_DIH_Y));
1706 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
1707 (EXISTS_TAC `v3:real^3`);
1708 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
1709 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
1710 affine hull (affine hull {u, v, w})`);
1711 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
1712 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
1713 affine hull {u:real^3, v, w}`);
1714 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
1716 (NEW_GOAL `NULLSET X`);
1717 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1718 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
1720 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1721 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
1722 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
1723 (ASM_REWRITE_TAC[]);
1724 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
1725 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
1726 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
1727 (REWRITE_TAC[mcell4]);
1729 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
1731 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1733 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
1734 (EXISTS_TAC `v2:real^3`);
1735 (ONCE_REWRITE_TAC[SET_RULE ` {v0, v1, v3, v2} = {v0, v1, v2, v3}`]);
1736 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
1737 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
1738 affine hull (affine hull {u, v, w})`);
1739 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
1740 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
1741 affine hull {u:real^3, v, w}`);
1742 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
1744 (NEW_GOAL `NULLSET X`);
1745 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1746 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
1748 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
1749 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
1750 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
1751 (ASM_REWRITE_TAC[]);
1752 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
1753 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
1754 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
1755 (REWRITE_TAC[mcell4]);
1757 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
1759 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1761 (ASM_REWRITE_TAC[]);
1762 (REWRITE_TAC[GSYM (ASSUME `u0 = v0:real^3`); GSYM (ASSUME `u3 = v1:real^3`)]);
1763 (EXPAND_TAC "y1" THEN EXPAND_TAC "y2" THEN EXPAND_TAC "y3");
1764 (EXPAND_TAC "y4" THEN EXPAND_TAC "y5" THEN EXPAND_TAC "y6");
1765 (REWRITE_TAC[Nonlinear_lemma.dih_y_sym; Nonlinear_lemma.dih_y_sym2;
1769 (UP_ASM_TAC THEN MESON_TAC[]);
1772 (NEW_GOAL `V INTER (X:real^3->bool) = set_of_list (truncate_simplex (4 - 1) ul)`);
1773 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
1774 (REWRITE_WITH `mcell i V ul = mcell 4 V ul`);
1775 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
1776 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
1777 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 4 /\ 4 <= 4`]);
1778 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
1779 (ASM_REWRITE_TAC[]);
1780 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
1781 (ASM_REWRITE_TAC[]);
1782 (UP_ASM_TAC THEN REWRITE_TAC[ARITH_RULE `4 - 1 = 3`;
1783 ASSUME `ul = [u0;u1;u2;u3:real^3]`; TRUNCATE_SIMPLEX_EXPLICIT_3]);
1784 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
1785 (ASM_CASES_TAC `k = 1`);
1787 (REWRITE_WITH `V INTER (X:real^3->bool) =
1788 set_of_list (truncate_simplex (k - 1) ul')`);
1789 (REWRITE_TAC[ASSUME `X = mcell k V ul'`]);
1790 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
1791 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 1 /\ 1 <= 4`]);
1792 (REWRITE_WITH `mcell 1 V ul' = X`);
1793 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 1`]);
1794 (ASM_REWRITE_TAC[]);
1795 (REWRITE_TAC[ARITH_RULE `1 - 1 = 0`; ASSUME `k = 1`]);
1796 (REWRITE_WITH `truncate_simplex 0 (ul':(real^3)list) = [HD ul']`);
1797 (MATCH_MP_TAC Packing3.TRUNCATE_0_EQ_HEAD);
1798 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
1799 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
1800 (EXISTS_TAC `V:real^3->bool`);
1801 (ASM_REWRITE_TAC[]);
1805 (NEW_GOAL `CARD (set_of_list [(HD ul'):real^3]) =
1806 CARD (set_of_list (ul:(real^3)list))`);
1807 (AP_TERM_TAC THEN ASM_REWRITE_TAC[]);
1808 (UP_ASM_TAC THEN REWRITE_WITH `CARD (set_of_list (ul:(real^3)list)) = 3 + 1`);
1809 (MATCH_MP_TAC Marchal_cells_3.BARV_CARD_LEMMA);
1810 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1811 (REWRITE_TAC[set_of_list; Geomdetail.CARD_SING] THEN ARITH_TAC);
1815 (REWRITE_WITH `V INTER X = {}:real^3->bool`);
1816 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 0`]);
1817 (MATCH_MP_TAC Lepjbdj.LEPJBDJ_0);
1818 (ASM_REWRITE_TAC[]);
1819 (ASM_REWRITE_TAC[set_of_list]);
1820 (NEW_GOAL `u0 IN {u0,u1,u2,u3:real^3}`);
1822 (UP_ASM_TAC THEN SET_TAC[]);
1823 (UP_ASM_TAC THEN MESON_TAC[]);
1825 (* ========================================================================= *)
1827 (REWRITE_TAC[dihX]);
1831 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1832 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1835 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
1836 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
1839 initial_sublist [u2; u3] ul)`);
1841 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
1842 (MATCH_MP_TAC SELECT_AX);
1844 (ABBREV_TAC `wl = [u2;u3;u0;u1:real^3]`);
1846 (* Need to list properties of wl at this point *)
1847 (NEW_GOAL `?p. p permutes 0..3 /\
1848 wl:(real^3)list = left_action_list p ul`);
1849 (ASM_REWRITE_TAC[] THEN EXPAND_TAC "wl");
1850 (MATCH_MP_TAC Marchal_cells_3.LEFT_ACTION_LIST_3_EXISTS);
1852 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
1853 (REWRITE_TAC[ARITH_RULE `4 = 3 + 1`]);
1854 (MATCH_MP_TAC Marchal_cells_3.BARV_CARD_LEMMA);
1855 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1857 (UP_ASM_TAC THEN STRIP_TAC);
1858 (NEW_GOAL `barV V 3 wl`);
1859 (MATCH_MP_TAC Qzksykg.QZKSYKG1);
1860 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `4` THEN EXISTS_TAC `p:num->num`);
1861 (ASM_REWRITE_TAC[SET_RULE `4 IN {0,1,2,3,4}`; ARITH_RULE `4 - 1 = 3`]);
1862 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
1863 (ASM_REWRITE_TAC[]);
1864 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
1865 (ASM_REWRITE_TAC[]);
1867 (EXISTS_TAC `(4, wl:(real^3)list)`);
1869 (REWRITE_TAC[BETA_THM]);
1870 (ASM_REWRITE_TAC[IN; ARITH_RULE `4 <= 4`]);
1873 (REWRITE_WITH `mcell i V [u0; u1; u2; u3] = mcell 4 V [u0; u1; u2; u3]`);
1874 (MESON_TAC[MCELL_EXPLICIT; ASSUME `i >= 4`; ARITH_RULE `4 >= 4`]);
1875 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
1876 (MATCH_MP_TAC Rvfxzbu.RVFXZBU);
1877 (ASM_REWRITE_TAC[SET_RULE `4 IN {0,1,2,3,4}`; ARITH_RULE `4 - 1 = 3`]);
1878 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
1879 (ASM_REWRITE_TAC[]);
1880 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
1881 (REWRITE_TAC[GSYM (ASSUME `wl:(real^3)list = left_action_list p ul`)]);
1883 (REWRITE_WITH `[u2; u3; u0; u1] = APPEND [u2; u3] [u0; u1:real^3]`);
1884 (REWRITE_TAC[APPEND]);
1885 (REWRITE_TAC[Packing3.INITIAL_SUBLIST_APPEND]);
1887 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1888 (EXPAND_TAC "P" THEN REWRITE_TAC[IN]);
1891 (ASM_CASES_TAC `2 <= k`);
1894 (!t. 4 - 1 <= t /\ t <= 3
1895 ==> omega_list_n V ul t = omega_list_n V ul' t)`);
1896 (MATCH_MP_TAC Marchal_cells_3.MCELL_ID_OMEGA_LIST_N);
1897 (ASM_REWRITE_TAC[SET_RULE `x IN {2,3,4} <=> x=2\/x=3\/x=4`]);
1898 (REWRITE_TAC[GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
1899 (REWRITE_WITH `mcell 4 V ul = X`);
1900 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
1901 (MESON_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; ASSUME `i >= 4`]);
1902 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `~NULLSET X`]);
1904 (ASM_REWRITE_TAC[]);
1908 (UP_ASM_TAC THEN MESON_TAC[]);
1912 (UP_ASM_TAC THEN MESON_TAC[]);
1914 (REWRITE_TAC[dihu4]);
1915 (NEW_GOAL `?v0 v1 v2 v3. ul' = [v0;v1;v2;v3:real^3]`);
1916 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
1917 (EXISTS_TAC `V:real^3->bool`);
1918 (ASM_REWRITE_TAC[]);
1919 (UP_ASM_TAC THEN STRIP_TAC);
1921 (NEW_GOAL `u2 = v0:real^3`);
1922 (NEW_GOAL`u2 = HD [u2;u3:real^3]`);
1924 (ONCE_REWRITE_TAC[ASSUME `u2 = HD[u2;u3:real^3]`]);
1925 (REWRITE_WITH `v0:real^3 = HD ul'`);
1926 (ASM_REWRITE_TAC[HD]);
1927 (REWRITE_WITH `[u2;u3:real^3] = truncate_simplex 1 ul'`);
1928 (NEW_GOAL `[u2;u3:real^3] = truncate_simplex (LENGTH [u2;u3] - 1) ul' /\
1929 LENGTH [u2;u3] <= LENGTH ul'`);
1930 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
1931 (ASM_REWRITE_TAC[LENGTH]);
1933 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
1935 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
1936 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
1937 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
1938 (EXISTS_TAC `V:real^3->bool`);
1939 (ASM_REWRITE_TAC[]);
1942 (NEW_GOAL `u3 = v1:real^3`);
1943 (NEW_GOAL`u3 = EL 1 [u2;u3:real^3]`);
1944 (REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
1945 (ONCE_REWRITE_TAC[ASSUME `u3 = EL 1 [u2;u3:real^3]`]);
1947 (REWRITE_WITH `v1:real^3 = EL 1 ul'`);
1948 (ASM_REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
1949 (REWRITE_WITH `[u2;u3:real^3] = truncate_simplex 1 ul'`);
1950 (NEW_GOAL `[u2;u3:real^3] = truncate_simplex (LENGTH [u2;u3] - 1) ul' /\
1951 LENGTH [u2;u3] <= LENGTH ul'`);
1952 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
1953 (ASM_REWRITE_TAC[LENGTH]);
1955 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
1957 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
1958 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
1959 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
1960 (EXISTS_TAC `V:real^3->bool`);
1961 (ASM_REWRITE_TAC[]);
1964 (NEW_GOAL `{u0,u1,u2,u3:real^3} = {v0,v1,v2,v3}`);
1965 (NEW_GOAL `{u0,u1,u2,u3:real^3} = {v0,v1,v2,v3} <=>
1966 convex hull {u0,u1,u2,u3:real^3} = convex hull {v0,v1,v2,v3}`);
1967 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
1968 (MATCH_MP_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ);
1969 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`);
1970 GSYM (ASSUME `ul' = [v0;v1;v2;v3:real^3]`)]);
1972 (MATCH_MP_TAC Rogers.BARV_AFFINE_INDEPENDENT);
1973 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
1974 (MATCH_MP_TAC Rogers.BARV_AFFINE_INDEPENDENT);
1975 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
1976 (ONCE_REWRITE_TAC[ASSUME `{u0, u1, u2, u3:real^3} = {v0, v1, v2, v3} <=>
1977 convex hull {u0, u1, u2, u3} = convex hull {v0, v1, v2, v3}`]);
1978 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`);
1979 GSYM (ASSUME `ul' = [v0;v1;v2;v3:real^3]`)]);
1980 (REWRITE_WITH `convex hull set_of_list ul= X:real^3->bool`);
1981 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
1982 (REWRITE_WITH `mcell i V ul = mcell4 V ul`);
1983 (MESON_TAC[ASSUME `i >= 4`; MCELL_EXPLICIT]);
1984 (REWRITE_TAC[mcell4]);
1988 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1989 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1991 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 4`]);
1992 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
1993 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
1994 (REWRITE_TAC[mcell4]);
1998 (NEW_GOAL `X:real^3->bool = {}`);
1999 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 4`]);
2000 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2001 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2002 (REWRITE_TAC[mcell4]);
2005 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2006 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2008 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2009 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2011 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
2013 (NEW_GOAL `(v2 = u0 /\ v3 = u1:real^3) \/ (v2 = u1 /\ v3 = u0)`);
2014 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1) /\ ~(u0 = u2) /\ ~(u0 = u3) /\
2015 ~(u1 = u2) /\ ~(u1 = u3) /\ ~(u2 = u3:real^3)`);
2016 (ASM_REWRITE_TAC[]);
2018 (UP_ASM_TAC THEN STRIP_TAC);
2020 (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] DIHV_EQ_DIH_Y));
2023 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
2024 (EXISTS_TAC `v3:real^3`);
2025 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
2026 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
2027 affine hull (affine hull {u, v, w})`);
2028 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
2029 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
2030 affine hull {u:real^3, v, w}`);
2031 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
2033 (NEW_GOAL `NULLSET X`);
2034 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2035 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
2037 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2038 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
2039 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
2040 (ASM_REWRITE_TAC[]);
2041 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
2042 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2043 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2044 (REWRITE_TAC[mcell4]);
2046 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
2048 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2050 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
2051 (EXISTS_TAC `v2:real^3`);
2052 (ONCE_REWRITE_TAC[SET_RULE ` {v0, v1, v3, v2} = {v0, v1, v2, v3}`]);
2053 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
2054 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
2055 affine hull (affine hull {u, v, w})`);
2056 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
2057 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
2058 affine hull {u:real^3, v, w}`);
2059 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
2061 (NEW_GOAL `NULLSET X`);
2062 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2063 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
2065 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2066 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
2067 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
2068 (ASM_REWRITE_TAC[]);
2069 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
2070 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2071 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2072 (REWRITE_TAC[mcell4]);
2074 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
2076 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2078 (ASM_REWRITE_TAC[]);
2079 (REWRITE_TAC[GSYM (ASSUME `u2 = v0:real^3`); GSYM (ASSUME `u3 = v1:real^3`)]);
2080 (EXPAND_TAC "y1" THEN EXPAND_TAC "y2" THEN EXPAND_TAC "y3");
2081 (EXPAND_TAC "y4" THEN EXPAND_TAC "y5" THEN EXPAND_TAC "y6");
2082 (REWRITE_TAC[DIST_SYM]);
2084 `dih_y (dist (u2,u3)) (dist (u0,u2)) (dist (u1,u2)) (dist (u0,u1))
2085 (dist (u1,u3:real^3))
2087 dih_y (dist (u2,u3)) (dist (u1,u2)) (dist (u0,u2)) (dist (u0,u1))
2089 (dist (u1,u3:real^3))`);
2090 (REWRITE_TAC[Nonlinear_lemma.dih_y_sym]);
2091 (REWRITE_TAC[Nonlinear_lemma.dih_y_sym2]);
2093 (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] DIHV_EQ_DIH_Y));
2096 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
2097 (EXISTS_TAC `v3:real^3`);
2098 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
2099 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
2100 affine hull (affine hull {u, v, w})`);
2101 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
2102 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
2103 affine hull {u:real^3, v, w}`);
2104 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
2106 (NEW_GOAL `NULLSET X`);
2107 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2108 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
2110 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2111 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
2112 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
2113 (ASM_REWRITE_TAC[]);
2114 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
2115 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2116 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2117 (REWRITE_TAC[mcell4]);
2119 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
2121 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2123 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
2124 (EXISTS_TAC `v2:real^3`);
2125 (ONCE_REWRITE_TAC[SET_RULE ` {v0, v1, v3, v2} = {v0, v1, v2, v3}`]);
2126 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
2127 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
2128 affine hull (affine hull {u, v, w})`);
2129 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
2130 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
2131 affine hull {u:real^3, v, w}`);
2132 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
2134 (NEW_GOAL `NULLSET X`);
2135 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2136 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
2138 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2139 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
2140 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
2141 (ASM_REWRITE_TAC[]);
2142 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
2143 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2144 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2145 (REWRITE_TAC[mcell4]);
2147 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
2149 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2151 (ASM_REWRITE_TAC[]);
2152 (REWRITE_TAC[GSYM (ASSUME `u2 = v0:real^3`); GSYM (ASSUME `u3 = v1:real^3`)]);
2153 (EXPAND_TAC "y1" THEN EXPAND_TAC "y2" THEN EXPAND_TAC "y3");
2154 (EXPAND_TAC "y4" THEN EXPAND_TAC "y5" THEN EXPAND_TAC "y6");
2155 (REWRITE_TAC[DIST_SYM]);
2157 `dih_y (dist (u2,u3)) (dist (u0,u2)) (dist (u1,u2)) (dist (u0,u1))
2159 (dist (u0,u3:real^3)) =
2160 dih_y (dist (u2,u3)) (dist (u1,u2)) (dist (u0,u2)) (dist (u0,u1))
2163 (REWRITE_TAC[Nonlinear_lemma.dih_y_sym]);
2164 (REWRITE_TAC[Nonlinear_lemma.dih_y_sym2]);
2168 (UP_ASM_TAC THEN MESON_TAC[]);
2171 (NEW_GOAL `V INTER (X:real^3->bool) = set_of_list (truncate_simplex (4 - 1) ul)`);
2172 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
2173 (REWRITE_WITH `mcell i V ul = mcell 4 V ul`);
2174 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
2175 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
2176 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 4 /\ 4 <= 4`]);
2177 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
2178 (ASM_REWRITE_TAC[]);
2179 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
2180 (ASM_REWRITE_TAC[]);
2181 (UP_ASM_TAC THEN REWRITE_TAC[ARITH_RULE `4 - 1 = 3`;
2182 ASSUME `ul = [u0;u1;u2;u3:real^3]`; TRUNCATE_SIMPLEX_EXPLICIT_3]);
2183 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
2184 (ASM_CASES_TAC `k = 1`);
2186 (REWRITE_WITH `V INTER (X:real^3->bool) =
2187 set_of_list (truncate_simplex (k - 1) ul')`);
2188 (REWRITE_TAC[ASSUME `X = mcell k V ul'`]);
2189 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
2190 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 1 /\ 1 <= 4`]);
2191 (REWRITE_WITH `mcell 1 V ul' = X`);
2192 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 1`]);
2193 (ASM_REWRITE_TAC[]);
2194 (REWRITE_TAC[ARITH_RULE `1 - 1 = 0`; ASSUME `k = 1`]);
2195 (REWRITE_WITH `truncate_simplex 0 (ul':(real^3)list) = [HD ul']`);
2196 (MATCH_MP_TAC Packing3.TRUNCATE_0_EQ_HEAD);
2197 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
2198 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
2199 (EXISTS_TAC `V:real^3->bool`);
2200 (ASM_REWRITE_TAC[]);
2204 (NEW_GOAL `CARD (set_of_list [(HD ul'):real^3]) =
2205 CARD (set_of_list (ul:(real^3)list))`);
2206 (AP_TERM_TAC THEN ASM_REWRITE_TAC[]);
2207 (UP_ASM_TAC THEN REWRITE_WITH `CARD (set_of_list (ul:(real^3)list)) = 3 + 1`);
2208 (MATCH_MP_TAC Marchal_cells_3.BARV_CARD_LEMMA);
2209 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2210 (REWRITE_TAC[set_of_list; Geomdetail.CARD_SING] THEN ARITH_TAC);
2214 (REWRITE_WITH `V INTER X = {}:real^3->bool`);
2215 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 0`]);
2216 (MATCH_MP_TAC Lepjbdj.LEPJBDJ_0);
2217 (ASM_REWRITE_TAC[]);
2218 (ASM_REWRITE_TAC[set_of_list]);
2219 (NEW_GOAL `u0 IN {u0,u1,u2,u3:real^3}`);
2221 (UP_ASM_TAC THEN SET_TAC[]);
2222 (UP_ASM_TAC THEN MESON_TAC[]);
2224 (* ========================================================================= *)
2226 (REWRITE_TAC[dihX]);
2230 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2231 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2234 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
2235 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
2238 initial_sublist [u1; u3] ul)`);
2240 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
2241 (MATCH_MP_TAC SELECT_AX);
2243 (ABBREV_TAC `wl = [u1;u3;u0;u2:real^3]`);
2245 (* Need to list properties of wl at this point *)
2246 (NEW_GOAL `?p. p permutes 0..3 /\
2247 wl:(real^3)list = left_action_list p ul`);
2248 (ASM_REWRITE_TAC[] THEN EXPAND_TAC "wl");
2249 (MATCH_MP_TAC Marchal_cells_3.LEFT_ACTION_LIST_3_EXISTS);
2251 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
2252 (REWRITE_TAC[ARITH_RULE `4 = 3 + 1`]);
2253 (MATCH_MP_TAC Marchal_cells_3.BARV_CARD_LEMMA);
2254 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2256 (UP_ASM_TAC THEN STRIP_TAC);
2257 (NEW_GOAL `barV V 3 wl`);
2258 (MATCH_MP_TAC Qzksykg.QZKSYKG1);
2259 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `4` THEN EXISTS_TAC `p:num->num`);
2260 (ASM_REWRITE_TAC[SET_RULE `4 IN {0,1,2,3,4}`; ARITH_RULE `4 - 1 = 3`]);
2261 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
2262 (ASM_REWRITE_TAC[]);
2263 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
2264 (ASM_REWRITE_TAC[]);
2266 (EXISTS_TAC `(4, wl:(real^3)list)`);
2268 (REWRITE_TAC[BETA_THM]);
2269 (ASM_REWRITE_TAC[IN; ARITH_RULE `4 <= 4`]);
2272 (REWRITE_WITH `mcell i V [u0; u1; u2; u3] = mcell 4 V [u0; u1; u2; u3]`);
2273 (MESON_TAC[MCELL_EXPLICIT; ASSUME `i >= 4`; ARITH_RULE `4 >= 4`]);
2274 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2275 (MATCH_MP_TAC Rvfxzbu.RVFXZBU);
2276 (ASM_REWRITE_TAC[SET_RULE `4 IN {0,1,2,3,4}`; ARITH_RULE `4 - 1 = 3`]);
2277 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
2278 (ASM_REWRITE_TAC[]);
2279 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
2280 (REWRITE_TAC[GSYM (ASSUME `wl:(real^3)list = left_action_list p ul`)]);
2282 (REWRITE_WITH `[u1; u3; u0; u2] = APPEND [u1; u3] [u0; u2:real^3]`);
2283 (REWRITE_TAC[APPEND]);
2284 (REWRITE_TAC[Packing3.INITIAL_SUBLIST_APPEND]);
2286 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2287 (EXPAND_TAC "P" THEN REWRITE_TAC[IN]);
2290 (ASM_CASES_TAC `2 <= k`);
2293 (!t. 4 - 1 <= t /\ t <= 3
2294 ==> omega_list_n V ul t = omega_list_n V ul' t)`);
2295 (MATCH_MP_TAC Marchal_cells_3.MCELL_ID_OMEGA_LIST_N);
2296 (ASM_REWRITE_TAC[SET_RULE `x IN {2,3,4} <=> x=2\/x=3\/x=4`]);
2297 (REWRITE_TAC[GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
2298 (REWRITE_WITH `mcell 4 V ul = X`);
2299 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
2300 (MESON_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; ASSUME `i >= 4`]);
2301 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `~NULLSET X`]);
2303 (ASM_REWRITE_TAC[]);
2307 (UP_ASM_TAC THEN MESON_TAC[]);
2311 (UP_ASM_TAC THEN MESON_TAC[]);
2313 (REWRITE_TAC[dihu4]);
2314 (NEW_GOAL `?v0 v1 v2 v3. ul' = [v0;v1;v2;v3:real^3]`);
2315 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
2316 (EXISTS_TAC `V:real^3->bool`);
2317 (ASM_REWRITE_TAC[]);
2318 (UP_ASM_TAC THEN STRIP_TAC);
2320 (NEW_GOAL `u1 = v0:real^3`);
2321 (NEW_GOAL`u1 = HD [u1;u3:real^3]`);
2323 (ONCE_REWRITE_TAC[ASSUME `u1 = HD[u1;u3:real^3]`]);
2324 (REWRITE_WITH `v0:real^3 = HD ul'`);
2325 (ASM_REWRITE_TAC[HD]);
2326 (REWRITE_WITH `[u1;u3:real^3] = truncate_simplex 1 ul'`);
2327 (NEW_GOAL `[u1;u3:real^3] = truncate_simplex (LENGTH [u1;u3] - 1) ul' /\
2328 LENGTH [u1;u3] <= LENGTH ul'`);
2329 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
2330 (ASM_REWRITE_TAC[LENGTH]);
2332 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
2334 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
2335 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
2336 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
2337 (EXISTS_TAC `V:real^3->bool`);
2338 (ASM_REWRITE_TAC[]);
2341 (NEW_GOAL `u3 = v1:real^3`);
2342 (NEW_GOAL`u3 = EL 1 [u1;u3:real^3]`);
2343 (REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
2344 (ONCE_REWRITE_TAC[ASSUME `u3 = EL 1 [u1;u3:real^3]`]);
2346 (REWRITE_WITH `v1:real^3 = EL 1 ul'`);
2347 (ASM_REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
2348 (REWRITE_WITH `[u1;u3:real^3] = truncate_simplex 1 ul'`);
2349 (NEW_GOAL `[u1;u3:real^3] = truncate_simplex (LENGTH [u1;u3] - 1) ul' /\
2350 LENGTH [u1;u3] <= LENGTH ul'`);
2351 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
2352 (ASM_REWRITE_TAC[LENGTH]);
2354 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
2356 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
2357 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
2358 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
2359 (EXISTS_TAC `V:real^3->bool`);
2360 (ASM_REWRITE_TAC[]);
2363 (NEW_GOAL `{u0,u1,u2,u3:real^3} = {v0,v1,v2,v3}`);
2364 (NEW_GOAL `{u0,u1,u2,u3:real^3} = {v0,v1,v2,v3} <=>
2365 convex hull {u0,u1,u2,u3:real^3} = convex hull {v0,v1,v2,v3}`);
2366 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2367 (MATCH_MP_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ);
2368 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`);
2369 GSYM (ASSUME `ul' = [v0;v1;v2;v3:real^3]`)]);
2371 (MATCH_MP_TAC Rogers.BARV_AFFINE_INDEPENDENT);
2372 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
2373 (MATCH_MP_TAC Rogers.BARV_AFFINE_INDEPENDENT);
2374 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
2375 (ONCE_REWRITE_TAC[ASSUME `{u0, u1, u2, u3:real^3} = {v0, v1, v2, v3} <=>
2376 convex hull {u0, u1, u2, u3} = convex hull {v0, v1, v2, v3}`]);
2377 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`);
2378 GSYM (ASSUME `ul' = [v0;v1;v2;v3:real^3]`)]);
2379 (REWRITE_WITH `convex hull set_of_list ul= X:real^3->bool`);
2380 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
2381 (REWRITE_WITH `mcell i V ul = mcell4 V ul`);
2382 (MESON_TAC[ASSUME `i >= 4`; MCELL_EXPLICIT]);
2383 (REWRITE_TAC[mcell4]);
2387 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2388 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2390 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 4`]);
2391 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2392 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2393 (REWRITE_TAC[mcell4]);
2397 (NEW_GOAL `X:real^3->bool = {}`);
2398 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 4`]);
2399 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2400 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2401 (REWRITE_TAC[mcell4]);
2404 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2405 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2407 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2408 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2410 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
2412 (NEW_GOAL `(v2 = u0 /\ v3 = u2:real^3) \/ (v2 = u2 /\ v3 = u0)`);
2413 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1) /\ ~(u0 = u2) /\ ~(u0 = u3) /\
2414 ~(u1 = u2) /\ ~(u1 = u3) /\ ~(u2 = u3:real^3)`);
2415 (ASM_REWRITE_TAC[]);
2417 (UP_ASM_TAC THEN STRIP_TAC);
2419 (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] DIHV_EQ_DIH_Y));
2422 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
2423 (EXISTS_TAC `v3:real^3`);
2424 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
2425 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
2426 affine hull (affine hull {u, v, w})`);
2427 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
2428 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
2429 affine hull {u:real^3, v, w}`);
2430 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
2432 (NEW_GOAL `NULLSET X`);
2433 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2434 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
2436 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2437 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
2438 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
2439 (ASM_REWRITE_TAC[]);
2440 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
2441 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2442 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2443 (REWRITE_TAC[mcell4]);
2445 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
2447 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2449 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
2450 (EXISTS_TAC `v2:real^3`);
2451 (ONCE_REWRITE_TAC[SET_RULE ` {v0, v1, v3, v2} = {v0, v1, v2, v3}`]);
2452 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
2453 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
2454 affine hull (affine hull {u, v, w})`);
2455 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
2456 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
2457 affine hull {u:real^3, v, w}`);
2458 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
2460 (NEW_GOAL `NULLSET X`);
2461 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2462 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
2464 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2465 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
2466 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
2467 (ASM_REWRITE_TAC[]);
2468 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
2469 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2470 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2471 (REWRITE_TAC[mcell4]);
2473 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
2475 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2477 (ASM_REWRITE_TAC[]);
2478 (REWRITE_TAC[GSYM (ASSUME `u1 = v0:real^3`); GSYM (ASSUME `u3 = v1:real^3`)]);
2479 (EXPAND_TAC "y1" THEN EXPAND_TAC "y2" THEN EXPAND_TAC "y3");
2480 (EXPAND_TAC "y4" THEN EXPAND_TAC "y5" THEN EXPAND_TAC "y6");
2481 (REWRITE_TAC[DIST_SYM]);
2483 (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] DIHV_EQ_DIH_Y));
2486 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
2487 (EXISTS_TAC `v3:real^3`);
2488 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
2489 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
2490 affine hull (affine hull {u, v, w})`);
2491 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
2492 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
2493 affine hull {u:real^3, v, w}`);
2494 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
2496 (NEW_GOAL `NULLSET X`);
2497 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2498 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
2500 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2501 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
2502 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
2503 (ASM_REWRITE_TAC[]);
2504 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
2505 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2506 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2507 (REWRITE_TAC[mcell4]);
2509 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
2511 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2513 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
2514 (EXISTS_TAC `v2:real^3`);
2515 (ONCE_REWRITE_TAC[SET_RULE ` {v0, v1, v3, v2} = {v0, v1, v2, v3}`]);
2516 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
2517 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
2518 affine hull (affine hull {u, v, w})`);
2519 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
2520 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
2521 affine hull {u:real^3, v, w}`);
2522 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
2524 (NEW_GOAL `NULLSET X`);
2525 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2526 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
2528 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2529 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
2530 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
2531 (ASM_REWRITE_TAC[]);
2532 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
2533 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2534 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2535 (REWRITE_TAC[mcell4]);
2537 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
2539 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2541 (ASM_REWRITE_TAC[]);
2542 (REWRITE_TAC[GSYM (ASSUME `u1 = v0:real^3`); GSYM (ASSUME `u3 = v1:real^3`)]);
2543 (EXPAND_TAC "y1" THEN EXPAND_TAC "y2" THEN EXPAND_TAC "y3");
2544 (EXPAND_TAC "y4" THEN EXPAND_TAC "y5" THEN EXPAND_TAC "y6");
2545 (REWRITE_TAC[DIST_SYM]);
2546 (REWRITE_TAC[Nonlinear_lemma.dih_y_sym]);
2550 (UP_ASM_TAC THEN MESON_TAC[]);
2553 (NEW_GOAL `V INTER (X:real^3->bool) = set_of_list (truncate_simplex (4 - 1) ul)`);
2554 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
2555 (REWRITE_WITH `mcell i V ul = mcell 4 V ul`);
2556 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
2557 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
2558 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 4 /\ 4 <= 4`]);
2559 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
2560 (ASM_REWRITE_TAC[]);
2561 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
2562 (ASM_REWRITE_TAC[]);
2563 (UP_ASM_TAC THEN REWRITE_TAC[ARITH_RULE `4 - 1 = 3`;
2564 ASSUME `ul = [u0;u1;u2;u3:real^3]`; TRUNCATE_SIMPLEX_EXPLICIT_3]);
2565 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
2566 (ASM_CASES_TAC `k = 1`);
2568 (REWRITE_WITH `V INTER (X:real^3->bool) =
2569 set_of_list (truncate_simplex (k - 1) ul')`);
2570 (REWRITE_TAC[ASSUME `X = mcell k V ul'`]);
2571 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
2572 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 1 /\ 1 <= 4`]);
2573 (REWRITE_WITH `mcell 1 V ul' = X`);
2574 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 1`]);
2575 (ASM_REWRITE_TAC[]);
2576 (REWRITE_TAC[ARITH_RULE `1 - 1 = 0`; ASSUME `k = 1`]);
2577 (REWRITE_WITH `truncate_simplex 0 (ul':(real^3)list) = [HD ul']`);
2578 (MATCH_MP_TAC Packing3.TRUNCATE_0_EQ_HEAD);
2579 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
2580 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
2581 (EXISTS_TAC `V:real^3->bool`);
2582 (ASM_REWRITE_TAC[]);
2586 (NEW_GOAL `CARD (set_of_list [(HD ul'):real^3]) =
2587 CARD (set_of_list (ul:(real^3)list))`);
2588 (AP_TERM_TAC THEN ASM_REWRITE_TAC[]);
2589 (UP_ASM_TAC THEN REWRITE_WITH `CARD (set_of_list (ul:(real^3)list)) = 3 + 1`);
2590 (MATCH_MP_TAC Marchal_cells_3.BARV_CARD_LEMMA);
2591 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2592 (REWRITE_TAC[set_of_list; Geomdetail.CARD_SING] THEN ARITH_TAC);
2596 (REWRITE_WITH `V INTER X = {}:real^3->bool`);
2597 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 0`]);
2598 (MATCH_MP_TAC Lepjbdj.LEPJBDJ_0);
2599 (ASM_REWRITE_TAC[]);
2600 (ASM_REWRITE_TAC[set_of_list]);
2601 (NEW_GOAL `u0 IN {u0,u1,u2,u3:real^3}`);
2603 (UP_ASM_TAC THEN SET_TAC[]);
2604 (UP_ASM_TAC THEN MESON_TAC[]);
2606 (* ========================================================================= *)
2608 (REWRITE_TAC[dihX]);
2612 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2613 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2616 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
2617 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
2620 initial_sublist [u1; u2] ul)`);
2622 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
2623 (MATCH_MP_TAC SELECT_AX);
2625 (ABBREV_TAC `wl = [u1;u2;u0;u3:real^3]`);
2627 (* Need to list properties of wl at this point *)
2628 (NEW_GOAL `?p. p permutes 0..3 /\
2629 wl:(real^3)list = left_action_list p ul`);
2630 (ASM_REWRITE_TAC[] THEN EXPAND_TAC "wl");
2631 (MATCH_MP_TAC Marchal_cells_3.LEFT_ACTION_LIST_3_EXISTS);
2633 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
2634 (REWRITE_TAC[ARITH_RULE `4 = 3 + 1`]);
2635 (MATCH_MP_TAC Marchal_cells_3.BARV_CARD_LEMMA);
2636 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2638 (UP_ASM_TAC THEN STRIP_TAC);
2639 (NEW_GOAL `barV V 3 wl`);
2640 (MATCH_MP_TAC Qzksykg.QZKSYKG1);
2641 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `4` THEN EXISTS_TAC `p:num->num`);
2642 (ASM_REWRITE_TAC[SET_RULE `4 IN {0,1,2,3,4}`; ARITH_RULE `4 - 1 = 3`]);
2643 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
2644 (ASM_REWRITE_TAC[]);
2645 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
2646 (ASM_REWRITE_TAC[]);
2648 (EXISTS_TAC `(4, wl:(real^3)list)`);
2650 (REWRITE_TAC[BETA_THM]);
2651 (ASM_REWRITE_TAC[IN; ARITH_RULE `4 <= 4`]);
2654 (REWRITE_WITH `mcell i V [u0; u1; u2; u3] = mcell 4 V [u0; u1; u2; u3]`);
2655 (MESON_TAC[MCELL_EXPLICIT; ASSUME `i >= 4`; ARITH_RULE `4 >= 4`]);
2656 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2657 (MATCH_MP_TAC Rvfxzbu.RVFXZBU);
2658 (ASM_REWRITE_TAC[SET_RULE `4 IN {0,1,2,3,4}`; ARITH_RULE `4 - 1 = 3`]);
2659 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
2660 (ASM_REWRITE_TAC[]);
2661 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
2662 (REWRITE_TAC[GSYM (ASSUME `wl:(real^3)list = left_action_list p ul`)]);
2664 (REWRITE_WITH `[u1; u2; u0; u3] = APPEND [u1; u2] [u0; u3:real^3]`);
2665 (REWRITE_TAC[APPEND]);
2666 (REWRITE_TAC[Packing3.INITIAL_SUBLIST_APPEND]);
2668 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2669 (EXPAND_TAC "P" THEN REWRITE_TAC[IN]);
2672 (ASM_CASES_TAC `2 <= k`);
2675 (!t. 4 - 1 <= t /\ t <= 3
2676 ==> omega_list_n V ul t = omega_list_n V ul' t)`);
2677 (MATCH_MP_TAC Marchal_cells_3.MCELL_ID_OMEGA_LIST_N);
2678 (ASM_REWRITE_TAC[SET_RULE `x IN {2,3,4} <=> x=2\/x=3\/x=4`]);
2679 (REWRITE_TAC[GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
2680 (REWRITE_WITH `mcell 4 V ul = X`);
2681 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
2682 (MESON_TAC[MCELL_EXPLICIT; ARITH_RULE `4 >= 4`; ASSUME `i >= 4`]);
2683 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `~NULLSET X`]);
2685 (ASM_REWRITE_TAC[]);
2689 (UP_ASM_TAC THEN MESON_TAC[]);
2693 (UP_ASM_TAC THEN MESON_TAC[]);
2695 (REWRITE_TAC[dihu4]);
2696 (NEW_GOAL `?v0 v1 v2 v3. ul' = [v0;v1;v2;v3:real^3]`);
2697 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
2698 (EXISTS_TAC `V:real^3->bool`);
2699 (ASM_REWRITE_TAC[]);
2700 (UP_ASM_TAC THEN STRIP_TAC);
2702 (NEW_GOAL `u1 = v0:real^3`);
2703 (NEW_GOAL`u1 = HD [u1;u2:real^3]`);
2705 (ONCE_REWRITE_TAC[ASSUME `u1 = HD[u1;u2:real^3]`]);
2706 (REWRITE_WITH `v0:real^3 = HD ul'`);
2707 (ASM_REWRITE_TAC[HD]);
2708 (REWRITE_WITH `[u1;u2:real^3] = truncate_simplex 1 ul'`);
2709 (NEW_GOAL `[u1;u2:real^3] = truncate_simplex (LENGTH [u1;u2] - 1) ul' /\
2710 LENGTH [u1;u2] <= LENGTH ul'`);
2711 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
2712 (ASM_REWRITE_TAC[LENGTH]);
2714 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
2716 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
2717 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
2718 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
2719 (EXISTS_TAC `V:real^3->bool`);
2720 (ASM_REWRITE_TAC[]);
2723 (NEW_GOAL `u2 = v1:real^3`);
2724 (NEW_GOAL`u2 = EL 1 [u1;u2:real^3]`);
2725 (REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
2726 (ONCE_REWRITE_TAC[ASSUME `u2 = EL 1 [u1;u2:real^3]`]);
2728 (REWRITE_WITH `v1:real^3 = EL 1 ul'`);
2729 (ASM_REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
2730 (REWRITE_WITH `[u1;u2:real^3] = truncate_simplex 1 ul'`);
2731 (NEW_GOAL `[u1;u2:real^3] = truncate_simplex (LENGTH [u1;u2] - 1) ul' /\
2732 LENGTH [u1;u2] <= LENGTH ul'`);
2733 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
2734 (ASM_REWRITE_TAC[LENGTH]);
2736 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
2738 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
2739 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
2740 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
2741 (EXISTS_TAC `V:real^3->bool`);
2742 (ASM_REWRITE_TAC[]);
2745 (NEW_GOAL `{u0,u1,u2,u3:real^3} = {v0,v1,v2,v3}`);
2746 (NEW_GOAL `{u0,u1,u2,u3:real^3} = {v0,v1,v2,v3} <=>
2747 convex hull {u0,u1,u2,u3:real^3} = convex hull {v0,v1,v2,v3}`);
2748 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
2749 (MATCH_MP_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ);
2750 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`);
2751 GSYM (ASSUME `ul' = [v0;v1;v2;v3:real^3]`)]);
2753 (MATCH_MP_TAC Rogers.BARV_AFFINE_INDEPENDENT);
2754 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
2755 (MATCH_MP_TAC Rogers.BARV_AFFINE_INDEPENDENT);
2756 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
2757 (ONCE_REWRITE_TAC[ASSUME `{u0, u1, u2, u3:real^3} = {v0, v1, v2, v3} <=>
2758 convex hull {u0, u1, u2, u3} = convex hull {v0, v1, v2, v3}`]);
2759 (REWRITE_TAC[GSYM set_of_list; GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`);
2760 GSYM (ASSUME `ul' = [v0;v1;v2;v3:real^3]`)]);
2761 (REWRITE_WITH `convex hull set_of_list ul= X:real^3->bool`);
2762 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
2763 (REWRITE_WITH `mcell i V ul = mcell4 V ul`);
2764 (MESON_TAC[ASSUME `i >= 4`; MCELL_EXPLICIT]);
2765 (REWRITE_TAC[mcell4]);
2769 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2770 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2772 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 4`]);
2773 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2774 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2775 (REWRITE_TAC[mcell4]);
2779 (NEW_GOAL `X:real^3->bool = {}`);
2780 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 4`]);
2781 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2782 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2783 (REWRITE_TAC[mcell4]);
2786 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2787 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2789 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2790 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2792 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `3 = SUC 2 /\ 2 = SUC 1 /\ 1 = SUC 0`]);
2794 (NEW_GOAL `(v2 = u0 /\ v3 = u3:real^3) \/ (v2 = u3 /\ v3 = u0)`);
2795 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1) /\ ~(u0 = u2) /\ ~(u0 = u3) /\
2796 ~(u1 = u2) /\ ~(u1 = u3) /\ ~(u2 = u3:real^3)`);
2797 (ASM_REWRITE_TAC[]);
2799 (UP_ASM_TAC THEN STRIP_TAC);
2801 (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] DIHV_EQ_DIH_Y));
2804 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
2805 (EXISTS_TAC `v3:real^3`);
2806 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
2807 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
2808 affine hull (affine hull {u, v, w})`);
2809 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
2810 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
2811 affine hull {u:real^3, v, w}`);
2812 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
2814 (NEW_GOAL `NULLSET X`);
2815 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2816 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
2818 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2819 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
2820 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
2821 (ASM_REWRITE_TAC[]);
2822 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
2823 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2824 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2825 (REWRITE_TAC[mcell4]);
2827 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
2829 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2831 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
2832 (EXISTS_TAC `v2:real^3`);
2833 (ONCE_REWRITE_TAC[SET_RULE ` {v0, v1, v3, v2} = {v0, v1, v2, v3}`]);
2834 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
2835 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
2836 affine hull (affine hull {u, v, w})`);
2837 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
2838 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
2839 affine hull {u:real^3, v, w}`);
2840 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
2842 (NEW_GOAL `NULLSET X`);
2843 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2844 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
2846 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2847 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
2848 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
2849 (ASM_REWRITE_TAC[]);
2850 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
2851 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2852 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2853 (REWRITE_TAC[mcell4]);
2855 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
2857 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2859 (ASM_REWRITE_TAC[]);
2860 (REWRITE_TAC[GSYM (ASSUME `u1 = v0:real^3`); GSYM (ASSUME `u2 = v1:real^3`)]);
2861 (EXPAND_TAC "y1" THEN EXPAND_TAC "y2" THEN EXPAND_TAC "y3");
2862 (EXPAND_TAC "y4" THEN EXPAND_TAC "y5" THEN EXPAND_TAC "y6");
2863 (REWRITE_TAC[DIST_SYM]);
2865 (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] DIHV_EQ_DIH_Y));
2868 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
2869 (EXISTS_TAC `v3:real^3`);
2870 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
2871 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
2872 affine hull (affine hull {u, v, w})`);
2873 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
2874 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
2875 affine hull {u:real^3, v, w}`);
2876 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
2878 (NEW_GOAL `NULLSET X`);
2879 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2880 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
2882 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2883 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
2884 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
2885 (ASM_REWRITE_TAC[]);
2886 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
2887 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2888 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2889 (REWRITE_TAC[mcell4]);
2891 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
2893 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2895 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
2896 (EXISTS_TAC `v2:real^3`);
2897 (ONCE_REWRITE_TAC[SET_RULE ` {v0, v1, v3, v2} = {v0, v1, v2, v3}`]);
2898 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
2899 (NEW_GOAL `affine hull {v0, v1, v2, v3:real^3} SUBSET
2900 affine hull (affine hull {u, v, w})`);
2901 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
2902 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
2903 affine hull {u:real^3, v, w}`);
2904 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
2906 (NEW_GOAL `NULLSET X`);
2907 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2908 (EXISTS_TAC `affine hull {v0, v1, v2,v3:real^3}`);
2910 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
2911 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
2912 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
2913 (ASM_REWRITE_TAC[]);
2914 (REWRITE_TAC[ASSUME `k = 4`; ASSUME `X = mcell k V ul'`]);
2915 (REWRITE_WITH `mcell 4 V ul' = mcell4 V ul'`);
2916 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT]);
2917 (REWRITE_TAC[mcell4]);
2919 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
2921 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2923 (ASM_REWRITE_TAC[]);
2924 (REWRITE_TAC[GSYM (ASSUME `u1 = v0:real^3`); GSYM (ASSUME `u2 = v1:real^3`)]);
2925 (EXPAND_TAC "y1" THEN EXPAND_TAC "y2" THEN EXPAND_TAC "y3");
2926 (EXPAND_TAC "y4" THEN EXPAND_TAC "y5" THEN EXPAND_TAC "y6");
2927 (REWRITE_TAC[DIST_SYM]);
2928 (REWRITE_TAC[Nonlinear_lemma.dih_y_sym]);
2932 (UP_ASM_TAC THEN MESON_TAC[]);
2935 (NEW_GOAL `V INTER (X:real^3->bool) = set_of_list (truncate_simplex (4 - 1) ul)`);
2936 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
2937 (REWRITE_WITH `mcell i V ul = mcell 4 V ul`);
2938 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
2939 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
2940 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 4 /\ 4 <= 4`]);
2941 (REWRITE_WITH `mcell 4 V [u0; u1; u2; u3] = X`);
2942 (ASM_REWRITE_TAC[]);
2943 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
2944 (ASM_REWRITE_TAC[]);
2945 (UP_ASM_TAC THEN REWRITE_TAC[ARITH_RULE `4 - 1 = 3`;
2946 ASSUME `ul = [u0;u1;u2;u3:real^3]`; TRUNCATE_SIMPLEX_EXPLICIT_3]);
2947 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
2948 (ASM_CASES_TAC `k = 1`);
2950 (REWRITE_WITH `V INTER (X:real^3->bool) =
2951 set_of_list (truncate_simplex (k - 1) ul')`);
2952 (REWRITE_TAC[ASSUME `X = mcell k V ul'`]);
2953 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
2954 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 1 /\ 1 <= 4`]);
2955 (REWRITE_WITH `mcell 1 V ul' = X`);
2956 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 1`]);
2957 (ASM_REWRITE_TAC[]);
2958 (REWRITE_TAC[ARITH_RULE `1 - 1 = 0`; ASSUME `k = 1`]);
2959 (REWRITE_WITH `truncate_simplex 0 (ul':(real^3)list) = [HD ul']`);
2960 (MATCH_MP_TAC Packing3.TRUNCATE_0_EQ_HEAD);
2961 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
2962 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
2963 (EXISTS_TAC `V:real^3->bool`);
2964 (ASM_REWRITE_TAC[]);
2968 (NEW_GOAL `CARD (set_of_list [(HD ul'):real^3]) =
2969 CARD (set_of_list (ul:(real^3)list))`);
2970 (AP_TERM_TAC THEN ASM_REWRITE_TAC[]);
2971 (UP_ASM_TAC THEN REWRITE_WITH `CARD (set_of_list (ul:(real^3)list)) = 3 + 1`);
2972 (MATCH_MP_TAC Marchal_cells_3.BARV_CARD_LEMMA);
2973 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
2974 (REWRITE_TAC[set_of_list; Geomdetail.CARD_SING] THEN ARITH_TAC);
2978 (REWRITE_WITH `V INTER X = {}:real^3->bool`);
2979 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 0`]);
2980 (MATCH_MP_TAC Lepjbdj.LEPJBDJ_0);
2981 (ASM_REWRITE_TAC[]);
2982 (ASM_REWRITE_TAC[set_of_list]);
2983 (NEW_GOAL `u0 IN {u0,u1,u2,u3:real^3}`);
2985 (UP_ASM_TAC THEN SET_TAC[]);
2986 (UP_ASM_TAC THEN MESON_TAC[]);
2990 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
2991 (UP_ASM_TAC THEN ASM_REWRITE_TAC[])]);;
2993 (* ---------------------------------------------------------------------- *)
2995 let SOL_SOL_Y_EXPLICIT = prove_by_refinement (
2996 `!V X ul u0 u1 u2 u3 i y1 y2 y3 y4 y5 y6.
3003 ul = [u0; u1; u2; u3] /\
3004 dist (u0,u1) = y1 /\
3005 dist (u0,u2) = y2 /\
3006 dist (u0,u3) = y3 /\
3007 dist (u2,u3) = y4 /\
3008 dist (u1,u3) = y5 /\
3011 sol u0 X = sol_y y1 y2 y3 y4 y5 y6 /\
3012 sol u1 X = sol_y y1 y5 y6 y4 y2 y3 /\
3013 sol u2 X = sol_y y4 y2 y6 y1 y5 y3 /\
3014 sol u3 X = sol_y y4 y5 y3 y1 y2 y6`,
3016 [(REPEAT GEN_TAC THEN STRIP_TAC);
3017 (NEW_GOAL `~(X:real^3->bool = {})`);
3018 (STRIP_TAC THEN UNDISCH_TAC `~NULLSET X` THEN
3019 REWRITE_TAC[ASSUME `X:real^3->bool = {}`; NEGLIGIBLE_EMPTY]);
3021 (NEW_GOAL `X = mcell4 V ul`);
3022 (ASM_REWRITE_TAC[]);
3023 (ASM_SIMP_TAC[MCELL_EXPLICIT]);
3024 (UP_ASM_TAC THEN REWRITE_TAC[mcell4]);
3026 (REWRITE_TAC[ASSUME `ul = [u0; u1; u2; u3:real^3]`; set_of_list]);
3029 (NEW_GOAL `VX V X = {u0,u1,u2,u3}`);
3030 (REWRITE_WITH `VX V X = V INTER X`);
3031 (MATCH_MP_TAC Hdtfnfz.HDTFNFZ);
3032 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
3033 (ASM_REWRITE_TAC[]);
3035 (REWRITE_WITH `X = mcell 4 V ul`);
3036 (ASM_REWRITE_TAC[]);
3037 (MESON_TAC[ARITH_RULE `4 >= 4`; ASSUME `i >= 4`; MCELL_EXPLICIT]);
3040 `V INTER mcell 4 V ul = set_of_list (truncate_simplex (4 - 1) ul)`);
3041 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
3042 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 4 /\ 4 <= 4`]);
3043 (REWRITE_WITH ` mcell 4 V [u0; u1; u2; u3] = X`);
3044 (ASM_REWRITE_TAC[]);
3045 (MESON_TAC[ARITH_RULE `4 >= 4`; ASSUME `i >= 4`; MCELL_EXPLICIT]);
3046 (ASM_REWRITE_TAC[]);
3047 (ASM_REWRITE_TAC[ARITH_RULE `4 - 1 = 3`; TRUNCATE_SIMPLEX_EXPLICIT_3;
3050 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} = 4`);
3051 (REWRITE_TAC[ARITH_RULE `4 = 3 + 1`; GSYM set_of_list;
3052 GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
3053 (MATCH_MP_TAC Marchal_cells_3.BARV_CARD_LEMMA);
3054 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3055 (NEW_GOAL `~(u0 = u1:real^3) /\ ~(u0 = u2) /\ ~(u0 = u3) /\
3056 ~(u1 = u2) /\ ~(u1 = u3) /\ ~(u2 = u3)`);
3058 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
3059 (REWRITE_TAC[ASSUME `u0 = u1:real^3`;
3060 SET_RULE `{u1, u1, u2, u3} = {u1,u2,u3}`;Geomdetail.CARD3 ]);
3062 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
3063 (REWRITE_TAC[ASSUME `u0 = u2:real^3`;
3064 SET_RULE `{u2, u1, u2, u3} = {u1,u2,u3}`;Geomdetail.CARD3 ]);
3066 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
3067 (REWRITE_TAC[ASSUME `u0 = u3:real^3`;
3068 SET_RULE `{u3, u1, u2, u3} = {u1,u2,u3}`;Geomdetail.CARD3 ]);
3070 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
3071 (REWRITE_TAC[ASSUME `u1 = u2:real^3`;
3072 SET_RULE `{u0, u2, u2, u3} = {u0,u2,u3}`;Geomdetail.CARD3 ]);
3074 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
3075 (REWRITE_TAC[ASSUME `u1 = u3:real^3`;
3076 SET_RULE `{u0, u3, u2, u3} = {u0,u2,u3}`;Geomdetail.CARD3 ]);
3078 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
3079 (REWRITE_TAC[ASSUME `u2 = u3:real^3`;
3080 SET_RULE `{u0, u1, u3, u3} = {u0,u1,u3}`;Geomdetail.CARD3 ]);
3084 (NEW_GOAL `~(coplanar {u0,u1,u2,u3:real^3})`);
3085 (REWRITE_TAC[coplanar] THEN STRIP_TAC);
3086 (NEW_GOAL `affine hull {u0, u1, u2, u3:real^3} SUBSET
3087 affine hull (affine hull {u, v, w})`);
3088 (ASM_SIMP_TAC[Marchal_cells_2_new.AFFINE_SUBSET_KY_LEMMA]);
3089 (UP_ASM_TAC THEN REWRITE_WITH `affine hull (affine hull {u, v, w}) =
3090 affine hull {u:real^3, v, w}`);
3091 (REWRITE_TAC[AFFINE_HULL_EQ; AFFINE_AFFINE_HULL]);
3093 (NEW_GOAL `NULLSET X`);
3094 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3095 (EXISTS_TAC `affine hull {u0, u1, u2, u3:real^3}`);
3097 (MATCH_MP_TAC NEGLIGIBLE_SUBSET);
3098 (EXISTS_TAC `affine hull {u,v,w:real^3}`);
3099 (REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3]);
3100 (ASM_REWRITE_TAC[]);
3101 (REWRITE_TAC[ASSUME `X = mcell i V ul`]);
3102 (REWRITE_WITH `mcell i V ul = mcell4 V ul`);
3103 (MESON_TAC[ARITH_RULE `4 >= 4`; MCELL_EXPLICIT; ASSUME `i >= 4`]);
3104 (REWRITE_TAC[mcell4]);
3106 (ASM_REWRITE_TAC[set_of_list; CONVEX_HULL_SUBSET_AFFINE_HULL]);
3108 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3111 (REWRITE_TAC[sol_y]);
3112 (REWRITE_WITH `dih_y y1 y2 y3 y4 y5 y6 = dihV (u0:real^3) u1 u2 u3`);
3113 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3114 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
3115 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
3123 (FIRST_ASSUM MATCH_MP_TAC);
3126 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3127 (EXISTS_TAC `u3:real^3` THEN ASM_REWRITE_TAC[]);
3128 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3129 (EXISTS_TAC `u2:real^3`);
3130 (ONCE_REWRITE_TAC[SET_RULE `{u0,u1,u3,u2} = {u0,u1,u2,u3}`]);
3131 (ASM_REWRITE_TAC[]);
3133 (REWRITE_WITH `dih_y y2 y3 y1 y5 y6 y4 = dihV (u0:real^3) u2 u3 u1`);
3134 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3135 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
3136 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
3145 `dih_y (dist (u0,u2:real^3)) (dist (u0,u3)) (dist (u0,u1)) (dist (u1,u3))
3146 (dist (u1,u2)) (dist (u2,u3)) =
3147 dih_y (dist (u0,u2)) (dist (u0,u3)) (dist (u0,u1)) (dist (u3,u1))
3148 (dist (u2,u1)) (dist (u2,u3))`);
3149 (REWRITE_TAC[DIST_SYM]);
3150 (FIRST_ASSUM MATCH_MP_TAC);
3152 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3153 (EXISTS_TAC `u1:real^3` THEN ASM_REWRITE_TAC[]);
3154 (ONCE_REWRITE_TAC[SET_RULE `{u0,u2,u3,u1} = {u0,u1,u2,u3}`]);
3155 (ASM_REWRITE_TAC[]);
3156 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3157 (EXISTS_TAC `u3:real^3`);
3158 (ONCE_REWRITE_TAC[SET_RULE `{u0,u2,u1,u3} = {u0,u1,u2,u3}`]);
3159 (ASM_REWRITE_TAC[]);
3161 (REWRITE_WITH `dih_y y3 y1 y2 y6 y4 y5 = dihV (u0:real^3) u3 u1 u2`);
3162 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3163 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
3164 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
3173 `dih_y (dist (u0,u3)) (dist (u0,u1)) (dist (u0,u2)) (dist (u1,u2))
3174 (dist (u2,u3:real^3))
3176 dih_y (dist (u0,u3)) (dist (u0,u1)) (dist (u0,u2)) (dist (u1,u2))
3179 (REWRITE_TAC[DIST_SYM]);
3180 (FIRST_ASSUM MATCH_MP_TAC);
3182 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3183 (EXISTS_TAC `u2:real^3` THEN ASM_REWRITE_TAC[]);
3184 (ONCE_REWRITE_TAC[SET_RULE `{u0,u3,u1,u2} = {u0,u1,u2,u3}`]);
3185 (ASM_REWRITE_TAC[]);
3186 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3187 (EXISTS_TAC `u1:real^3`);
3188 (ONCE_REWRITE_TAC[SET_RULE `{u0,u3, u2,u1} = {u0,u1,u2,u3}`]);
3189 (ASM_REWRITE_TAC[]);
3190 (REWRITE_WITH `X = convex hull {u0,u1,u2,u3:real^3}`);
3191 (ASM_SIMP_TAC[MCELL_EXPLICIT; ASSUME `i >= 4`; mcell4; set_of_list]);
3192 (MATCH_MP_TAC SOL_SOLID_TRIANGLE);
3193 (ASM_REWRITE_TAC[]);
3196 (REWRITE_TAC[sol_y]);
3197 (REWRITE_WITH `dih_y y1 y5 y6 y4 y2 y3 = dihV (u1:real^3) u0 u3 u2`);
3198 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3199 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
3200 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
3209 `dih_y (dist (u0,u1)) (dist (u1,u3)) (dist (u1,u2)) (dist (u2,u3))
3210 (dist (u0,u2:real^3))
3212 dih_y (dist (u1,u0)) (dist (u1,u3)) (dist (u1,u2)) (dist (u3,u2))
3215 (REWRITE_TAC[DIST_SYM]);
3216 (FIRST_ASSUM MATCH_MP_TAC);
3219 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3220 (EXISTS_TAC `u2:real^3` THEN ASM_REWRITE_TAC[]);
3221 (ONCE_REWRITE_TAC[SET_RULE `{u1,u0,u3,u2} = {u0,u1,u2,u3}`]);
3222 (ASM_REWRITE_TAC[]);
3224 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3225 (EXISTS_TAC `u3:real^3`);
3226 (ONCE_REWRITE_TAC[SET_RULE `{u1,u0,u2,u3} = {u0,u1,u2,u3}`]);
3227 (ASM_REWRITE_TAC[]);
3229 (REWRITE_WITH `dih_y y5 y6 y1 y2 y3 y4 = dihV (u1:real^3) u3 u2 u0`);
3230 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3231 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
3232 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
3241 `dih_y (dist (u1,u3)) (dist (u1,u2)) (dist (u0,u1)) (dist (u0,u2))
3242 (dist (u0,u3:real^3))
3244 dih_y (dist (u1,u3)) (dist (u1,u2)) (dist (u1,u0)) (dist (u2,u0))
3247 (REWRITE_TAC[DIST_SYM]);
3248 (FIRST_ASSUM MATCH_MP_TAC);
3250 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3251 (EXISTS_TAC `u0:real^3` THEN ASM_REWRITE_TAC[]);
3252 (ONCE_REWRITE_TAC[SET_RULE `{u1,u3,u2,u0} = {u0,u1,u2,u3}`]);
3253 (ASM_REWRITE_TAC[]);
3254 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3255 (EXISTS_TAC `u2:real^3`);
3256 (ONCE_REWRITE_TAC[SET_RULE `{u1,u3,u0,u2} = {u0,u1,u2,u3}`]);
3257 (ASM_REWRITE_TAC[]);
3259 (REWRITE_WITH `dih_y y6 y1 y5 y3 y4 y2 = dihV (u1:real^3) u2 u0 u3`);
3260 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3261 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
3262 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
3271 `dih_y (dist (u1,u2)) (dist (u0,u1)) (dist (u1,u3)) (dist (u0,u3))
3272 (dist (u2,u3:real^3))
3274 dih_y (dist (u1,u2)) (dist (u1,u0)) (dist (u1,u3)) (dist (u0,u3))
3277 (REWRITE_TAC[DIST_SYM]);
3278 (FIRST_ASSUM MATCH_MP_TAC);
3281 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3282 (EXISTS_TAC `u3:real^3`);
3283 (ONCE_REWRITE_TAC[SET_RULE `{u1,u2,u0,u3} = {u0,u1,u2,u3}`]);
3284 (ASM_REWRITE_TAC[]);
3285 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3286 (EXISTS_TAC `u0:real^3`);
3287 (ONCE_REWRITE_TAC[SET_RULE `{u1,u2, u3,u0} = {u0,u1,u2,u3}`]);
3288 (ASM_REWRITE_TAC[]);
3290 (REWRITE_WITH `X = convex hull {u0,u1,u2,u3:real^3}`);
3291 (ASM_SIMP_TAC[MCELL_EXPLICIT; ASSUME `i >= 4`; mcell4; set_of_list]);
3292 (ONCE_REWRITE_TAC[SET_RULE `{u0,u1,u2,u3} = {u1,u2,u0,u3}`]);
3294 (ONCE_REWRITE_TAC[REAL_ARITH `a + b + c - s = c + a + b - s`]);
3295 (MATCH_MP_TAC SOL_SOLID_TRIANGLE);
3296 (ONCE_REWRITE_TAC[GSYM (SET_RULE `{u0,u1,u2,u3} = {u1,u2,u0,u3}`)]);
3297 (ASM_REWRITE_TAC[]);
3299 (REWRITE_TAC[sol_y]);
3300 (REWRITE_WITH `dih_y y4 y2 y6 y1 y5 y3 = dihV (u2:real^3) u3 u0 u1`);
3301 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3302 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
3303 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
3312 `dih_y (dist (u2,u3)) (dist (u0,u2)) (dist (u1,u2)) (dist (u0,u1))
3313 (dist (u1,u3:real^3))
3315 dih_y (dist (u2,u3)) (dist (u2,u0)) (dist (u2,u1)) (dist (u0,u1))
3318 (REWRITE_TAC[DIST_SYM]);
3319 (FIRST_ASSUM MATCH_MP_TAC);
3321 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3322 (EXISTS_TAC `u1:real^3` THEN ASM_REWRITE_TAC[]);
3323 (ONCE_REWRITE_TAC[SET_RULE `{u2,u3,u0,u1} = {u0,u1,u2,u3}`]);
3324 (ASM_REWRITE_TAC[]);
3325 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3326 (EXISTS_TAC `u0:real^3`);
3327 (ONCE_REWRITE_TAC[SET_RULE `{u2,u3,u1,u0} = {u0,u1,u2,u3}`]);
3328 (ASM_REWRITE_TAC[]);
3330 (REWRITE_WITH `dih_y y2 y6 y4 y5 y3 y1 = dihV (u2:real^3) u0 u1 u3`);
3331 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3332 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
3333 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
3342 `dih_y (dist (u0,u2)) (dist (u1,u2)) (dist (u2,u3)) (dist (u1,u3))
3343 (dist (u0,u3:real^3))
3345 dih_y (dist (u2,u0)) (dist (u2,u1)) (dist (u2,u3)) (dist (u1,u3))
3348 (REWRITE_TAC[DIST_SYM]);
3349 (FIRST_ASSUM MATCH_MP_TAC);
3351 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3352 (EXISTS_TAC `u3:real^3`);
3353 (ONCE_REWRITE_TAC[SET_RULE `{u2,u0,u1,u3} = {u0,u1,u2,u3}`]);
3354 (ASM_REWRITE_TAC[]);
3355 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3356 (EXISTS_TAC `u1:real^3`);
3357 (ONCE_REWRITE_TAC[SET_RULE `{u2, u0, u3,u1} = {u0,u1,u2,u3}`]);
3358 (ASM_REWRITE_TAC[]);
3360 (REWRITE_WITH `dih_y y6 y4 y2 y3 y1 y5 = dihV (u2:real^3) u1 u3 u0`);
3361 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3362 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
3363 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
3372 `dih_y (dist (u1,u2)) (dist (u2,u3)) (dist (u0,u2)) (dist (u0,u3))
3373 (dist (u0,u1:real^3))
3375 dih_y (dist (u2,u1)) (dist (u2,u3)) (dist (u2,u0)) (dist (u3,u0))
3378 (REWRITE_TAC[DIST_SYM]);
3379 (FIRST_ASSUM MATCH_MP_TAC);
3382 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3383 (EXISTS_TAC `u0:real^3`);
3384 (ONCE_REWRITE_TAC[SET_RULE `{u2,u1,u3,u0} = {u0,u1,u2,u3}`]);
3385 (ASM_REWRITE_TAC[]);
3386 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3387 (EXISTS_TAC `u3:real^3`);
3388 (ONCE_REWRITE_TAC[SET_RULE `{u2,u1,u0,u3} = {u0,u1,u2,u3}`]);
3389 (ASM_REWRITE_TAC[]);
3391 (REWRITE_WITH `X = convex hull {u0,u1,u2,u3:real^3}`);
3392 (ASM_SIMP_TAC[MCELL_EXPLICIT; ASSUME `i >= 4`; mcell4; set_of_list]);
3393 (ONCE_REWRITE_TAC[SET_RULE `{u0,u1,u2,u3} = {u2,u3,u0,u1}`]);
3395 (MATCH_MP_TAC SOL_SOLID_TRIANGLE);
3396 (ONCE_REWRITE_TAC[SET_RULE `{u2,u3,u0,u1} = {u0, u1, u2, u3}`]);
3397 (ASM_REWRITE_TAC[]);
3400 (REWRITE_TAC[sol_y]);
3401 (REWRITE_WITH `dih_y y4 y5 y3 y1 y2 y6 = dihV (u3:real^3) u2 u1 u0`);
3402 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3403 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
3404 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
3413 `dih_y (dist (u2,u3)) (dist (u1,u3)) (dist (u0,u3)) (dist (u0,u1))
3416 dih_y (dist (u3,u2)) (dist (u3,u1)) (dist (u3,u0)) (dist (u1,u0))
3417 (dist (u2,u0:real^3))
3419 (REWRITE_TAC[DIST_SYM]);
3420 (FIRST_ASSUM MATCH_MP_TAC);
3422 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3423 (EXISTS_TAC `u0:real^3` THEN ASM_REWRITE_TAC[]);
3424 (ONCE_REWRITE_TAC[SET_RULE `{u3,u2,u1,u0} = {u0,u1,u2,u3}`]);
3425 (ASM_REWRITE_TAC[]);
3427 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3428 (EXISTS_TAC `u1:real^3`);
3429 (ONCE_REWRITE_TAC[SET_RULE `{u3,u2,u0,u1} = {u0,u1,u2,u3}`]);
3430 (ASM_REWRITE_TAC[]);
3432 (REWRITE_WITH `dih_y y5 y3 y4 y2 y6 y1 = dihV (u3:real^3) u1 u0 u2`);
3433 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3434 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
3435 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
3444 `dih_y (dist (u1,u3)) (dist (u0,u3)) (dist (u2,u3)) (dist (u0,u2))
3445 (dist (u1,u2:real^3))
3447 dih_y (dist (u3,u1)) (dist (u3,u0)) (dist (u3,u2)) (dist (u0,u2))
3450 (REWRITE_TAC[DIST_SYM]);
3451 (FIRST_ASSUM MATCH_MP_TAC);
3453 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3454 (EXISTS_TAC `u2:real^3` THEN ASM_REWRITE_TAC[]);
3455 (ONCE_REWRITE_TAC[SET_RULE `{u3,u1,u0,u2} = {u0,u1,u2,u3}`]);
3456 (ASM_REWRITE_TAC[]);
3457 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3458 (EXISTS_TAC `u0:real^3`);
3459 (ONCE_REWRITE_TAC[SET_RULE `{u3, u1, u2,u0} = {u0,u1,u2,u3}`]);
3460 (ASM_REWRITE_TAC[]);
3462 (REWRITE_WITH `dih_y y3 y4 y5 y6 y1 y2 = dihV (u3:real^3) u0 u2 u1`);
3463 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
3464 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
3465 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
3474 `dih_y (dist (u0,u3)) (dist (u2,u3)) (dist (u1,u3)) (dist (u1,u2))
3475 (dist (u0,u1:real^3))
3477 dih_y (dist (u3,u0)) (dist (u3,u2)) (dist (u3,u1)) (dist (u2,u1))
3479 (dist (u0,u2:real^3))`);
3480 (REWRITE_TAC[DIST_SYM]);
3481 (FIRST_ASSUM MATCH_MP_TAC);
3484 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3485 (EXISTS_TAC `u1:real^3`);
3486 (ONCE_REWRITE_TAC[SET_RULE `{u3,u0,u2,u1} = {u0,u1,u2,u3}`]);
3487 (ASM_REWRITE_TAC[]);
3488 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
3489 (EXISTS_TAC `u2:real^3`);
3490 (ONCE_REWRITE_TAC[SET_RULE `{u3,u0,u1,u2} = {u0,u1,u2,u3}`]);
3491 (ASM_REWRITE_TAC[]);
3493 (REWRITE_WITH `X = convex hull {u0,u1,u2,u3:real^3}`);
3494 (ASM_SIMP_TAC[MCELL_EXPLICIT; ASSUME `i >= 4`; mcell4; set_of_list]);
3495 (ONCE_REWRITE_TAC[SET_RULE `{u0,u1,u2,u3} = {u3,u0,u2,u1}`]);
3497 (ONCE_REWRITE_TAC[REAL_ARITH `a + b + c - s = c + a + b - s`]);
3498 (MATCH_MP_TAC SOL_SOLID_TRIANGLE);
3499 (ONCE_REWRITE_TAC[GSYM (SET_RULE `{u0,u1,u2,u3} = {u3, u0, u2, u1}`)]);
3500 (ASM_REWRITE_TAC[]);
3502 (STRIP_TAC THEN NEW_GOAL `F`);
3503 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3504 (UP_ASM_TAC THEN ASM_REWRITE_TAC[])]);;
3506 (* ---------------------------------------------------------------------- *)
3508 let gammaX_gamm4fgcy = prove_by_refinement (
3509 `!V X ul u0 u1 u2 u3 i y1 y2 y3 y4 y5 y6.
3516 ul = [u0; u1; u2; u3] /\
3517 dist (u0,u1) = y1 /\
3518 dist (u0,u2) = y2 /\
3519 dist (u0,u3) = y3 /\
3520 dist (u2,u3) = y4 /\
3521 dist (u1,u3) = y5 /\
3524 vol X = vol_y y1 y2 y3 y4 y5 y6 /\
3525 gammaX V X lmfun = gamma4fgcy y1 y2 y3 y4 y5 y6 lmfun`,
3527 [(REPEAT GEN_TAC THEN STRIP_TAC);
3528 (NEW_GOAL `~(X:real^3->bool = {})`);
3529 (STRIP_TAC THEN UNDISCH_TAC `~NULLSET X` THEN
3530 REWRITE_TAC[ASSUME `X:real^3->bool = {}`; NEGLIGIBLE_EMPTY]);
3532 (NEW_GOAL `X = mcell4 V ul`);
3533 (ASM_REWRITE_TAC[]);
3534 (ASM_SIMP_TAC[MCELL_EXPLICIT]);
3535 (UP_ASM_TAC THEN REWRITE_TAC[mcell4]);
3537 (REWRITE_TAC[ASSUME `ul = [u0; u1; u2; u3:real^3]`; set_of_list]);
3540 (NEW_GOAL `VX V X = {u0,u1,u2,u3}`);
3541 (REWRITE_WITH `VX V X = V INTER X`);
3542 (MATCH_MP_TAC Hdtfnfz.HDTFNFZ);
3543 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
3544 (ASM_REWRITE_TAC[]);
3546 (REWRITE_WITH `X = mcell 4 V ul`);
3547 (ASM_REWRITE_TAC[]);
3548 (MESON_TAC[ARITH_RULE `4 >= 4`; ASSUME `i >= 4`; MCELL_EXPLICIT]);
3551 `V INTER mcell 4 V ul = set_of_list (truncate_simplex (4 - 1) ul)`);
3552 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
3553 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 4 /\ 4 <= 4`]);
3554 (REWRITE_WITH ` mcell 4 V [u0; u1; u2; u3] = X`);
3555 (ASM_REWRITE_TAC[]);
3556 (MESON_TAC[ARITH_RULE `4 >= 4`; ASSUME `i >= 4`; MCELL_EXPLICIT]);
3557 (ASM_REWRITE_TAC[]);
3558 (ASM_REWRITE_TAC[ARITH_RULE `4 - 1 = 3`; TRUNCATE_SIMPLEX_EXPLICIT_3;
3561 (REWRITE_TAC[gammaX; gamma4fgcy;gamma4f]);
3563 (REWRITE_WITH `vol X = vol_y y1 y2 y3 y4 y5 y6`);
3564 (REWRITE_TAC[vol_y; y_of_x; vol_x;
3565 ASSUME `X = convex hull {u0, u1, u2, u3:real^3}`;
3566 VOLUME_OF_CLOSED_TETRAHEDRON; REAL_POW_2]);
3567 (ASM_REWRITE_TAC[]);
3568 (REWRITE_TAC[REAL_ARITH `a - b + c = a - d <=> d = b - c`; vol4f]);
3570 (* ---------------------------------------------------------------- *)
3571 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} = 4`);
3572 (REWRITE_TAC[ARITH_RULE `4 = 3 + 1`; GSYM set_of_list;
3573 GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
3574 (MATCH_MP_TAC Marchal_cells_3.BARV_CARD_LEMMA);
3575 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
3576 (NEW_GOAL `~(u0 = u1:real^3) /\ ~(u0 = u2) /\ ~(u0 = u3) /\
3577 ~(u1 = u2) /\ ~(u1 = u3) /\ ~(u2 = u3)`);
3579 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
3580 (REWRITE_TAC[ASSUME `u0 = u1:real^3`;
3581 SET_RULE `{u1, u1, u2, u3} = {u1,u2,u3}`;Geomdetail.CARD3 ]);
3583 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
3584 (REWRITE_TAC[ASSUME `u0 = u2:real^3`;
3585 SET_RULE `{u2, u1, u2, u3} = {u1,u2,u3}`;Geomdetail.CARD3 ]);
3587 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
3588 (REWRITE_TAC[ASSUME `u0 = u3:real^3`;
3589 SET_RULE `{u3, u1, u2, u3} = {u1,u2,u3}`;Geomdetail.CARD3 ]);
3591 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
3592 (REWRITE_TAC[ASSUME `u1 = u2:real^3`;
3593 SET_RULE `{u0, u2, u2, u3} = {u0,u2,u3}`;Geomdetail.CARD3 ]);
3595 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
3596 (REWRITE_TAC[ASSUME `u1 = u3:real^3`;
3597 SET_RULE `{u0, u3, u2, u3} = {u0,u2,u3}`;Geomdetail.CARD3 ]);
3599 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
3600 (REWRITE_TAC[ASSUME `u2 = u3:real^3`;
3601 SET_RULE `{u0, u1, u3, u3} = {u0,u1,u3}`;Geomdetail.CARD3 ]);
3604 (NEW_GOAL `edgeX V X = {{u0,u1:real^3}, {u0,u2}, {u0,u3},
3605 {u1,u2}, {u1,u3}, {u2,u3}}`);
3606 (REWRITE_TAC[edgeX]);
3607 (ONCE_REWRITE_TAC[SET_EQ_LEMMA]);
3608 (REWRITE_TAC[IN_ELIM_THM]);
3611 (UNDISCH_TAC `VX V X u` THEN UNDISCH_TAC `VX V X v`);
3612 (REWRITE_TAC[MESON[IN] `VX V X s <=> s IN VX V X`]);
3613 (ASM_REWRITE_TAC[SET_RULE `v IN {u0, u1, u2, u3} <=>
3614 v = u0 \/ v = u1 \/ v = u2 \/ v = u3`]);
3619 (REWRITE_WITH `{u,v} = {v,u:real^3}`);
3621 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3622 (REWRITE_WITH `{u,v} = {v,u:real^3}`);
3624 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3625 (REWRITE_WITH `{u,v} = {v,u:real^3}`);
3627 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3628 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3632 (REWRITE_WITH `{u,v} = {v,u:real^3}`);
3634 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3635 (REWRITE_WITH `{u,v} = {v,u:real^3}`);
3637 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3638 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3639 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3643 (REWRITE_WITH `{u,v} = {v,u:real^3}`);
3645 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3646 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3647 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3648 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
3653 (UP_ASM_TAC THEN REWRITE_TAC[SET_RULE `x IN {a,b,c,d,e,f} <=>
3654 x = a \/ x = b \/ x = c \/ x = d \/ x = e \/ x = f`]);
3655 (REWRITE_TAC[MESON[IN] `VX V X s <=> s IN VX V X`]);
3656 (ASM_REWRITE_TAC[SET_RULE `v IN {u0, u1, u2, u3} <=>
3657 v = u0 \/ v = u1 \/ v = u2 \/ v = u3`]);
3659 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3` THEN ASM_REWRITE_TAC[]);
3660 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u2:real^3` THEN ASM_REWRITE_TAC[]);
3661 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u3:real^3` THEN ASM_REWRITE_TAC[]);
3662 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN ASM_REWRITE_TAC[]);
3663 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u3:real^3` THEN ASM_REWRITE_TAC[]);
3664 (EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3` THEN ASM_REWRITE_TAC[]);
3668 (\({u, v}). if {u, v} IN edgeX V X
3669 then dihX V X (u,v) * lmfun (hl [u; v])
3671 (MATCH_MP_TAC (REAL_ARITH `y = b /\ x = a ==> a - b = x - y`));
3674 (ASM_REWRITE_TAC[]);
3676 (ABBREV_TAC `S5 = {{u0, u2}, {u0, u3}, {u1, u2}, {u1, u3}, {u2, u3:real^3}}`);
3677 (REWRITE_WITH `sum ({u0,u1:real^3} INSERT S5) f =
3678 (if {u0,u1} IN S5 then sum S5 f else f {u0,u1} + sum S5 f)`);
3679 (MATCH_MP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
3681 (REWRITE_TAC[Geomdetail.FINITE6]);
3684 (UP_ASM_TAC THEN EXPAND_TAC "S5");
3685 (REWRITE_TAC[SET_RULE `x IN {a,b,c,d,e} <=> x=a\/x=b\/x=c\/x=d\/x=e`]);
3687 `~(u0 = u1:real^3) /\ ~(u0 = u2) /\ ~(u0 = u3) /\ ~(u1 = u2) /\
3688 ~(u1 = u3) /\ ~(u2 = u3)`]);
3689 (UP_ASM_TAC THEN MESON_TAC[]);
3692 (ABBREV_TAC `S4 = {{u0, u3}, {u1, u2}, {u1, u3}, {u2, u3:real^3}}`);
3693 (REWRITE_WITH `sum ({u0,u2:real^3} INSERT S4) f =
3694 (if {u0,u2} IN S4 then sum S4 f else f {u0,u2} + sum S4 f)`);
3695 (MATCH_MP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
3697 (REWRITE_TAC[Geomdetail.FINITE6]);
3700 (UP_ASM_TAC THEN EXPAND_TAC "S4");
3701 (REWRITE_TAC[SET_RULE `x IN {a,b,c,d} <=> x=a\/x=b\/x=c\/x=d`]);
3703 `~(u0 = u1:real^3) /\ ~(u0 = u2) /\ ~(u0 = u3) /\ ~(u1 = u2) /\
3704 ~(u1 = u3) /\ ~(u2 = u3)`]);
3705 (UP_ASM_TAC THEN MESON_TAC[]);
3709 (ABBREV_TAC `S3 = {{u1, u2}, {u1, u3}, {u2, u3:real^3}}`);
3710 (REWRITE_WITH `sum ({u0,u3:real^3} INSERT S3) f =
3711 (if {u0,u3} IN S3 then sum S3 f else f {u0,u3} + sum S3 f)`);
3712 (MATCH_MP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
3714 (REWRITE_TAC[Geomdetail.FINITE6]);
3717 (UP_ASM_TAC THEN EXPAND_TAC "S3");
3718 (REWRITE_TAC[SET_RULE `x IN {a,b,c} <=> x=a\/x=b\/x=c`]);
3720 `~(u0 = u1:real^3) /\ ~(u0 = u2) /\ ~(u0 = u3) /\ ~(u1 = u2) /\
3721 ~(u1 = u3) /\ ~(u2 = u3)`]);
3722 (UP_ASM_TAC THEN MESON_TAC[]);
3725 (ABBREV_TAC `S2 = {{u1, u3}, {u2, u3:real^3}}`);
3726 (REWRITE_WITH `sum ({u1,u2:real^3} INSERT S2) f =
3727 (if {u1,u2} IN S2 then sum S2 f else f {u1,u2} + sum S2 f)`);
3728 (MATCH_MP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
3730 (REWRITE_TAC[Geomdetail.FINITE6]);
3733 (UP_ASM_TAC THEN EXPAND_TAC "S2");
3734 (REWRITE_TAC[SET_RULE `x IN {a,b} <=> x=a\/x=b`]);
3736 `~(u0 = u1:real^3) /\ ~(u0 = u2) /\ ~(u0 = u3) /\ ~(u1 = u2) /\
3737 ~(u1 = u3) /\ ~(u2 = u3)`]);
3738 (UP_ASM_TAC THEN MESON_TAC[]);
3741 (ABBREV_TAC `S1 = {{u2, u3:real^3}}`);
3742 (REWRITE_WITH `sum ({u1,u3:real^3} INSERT S1) f =
3743 (if {u1,u3} IN S1 then sum S1 f else f {u1,u3} + sum S1 f)`);
3744 (MATCH_MP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
3746 (REWRITE_TAC[Geomdetail.FINITE6]);
3749 (UP_ASM_TAC THEN EXPAND_TAC "S1");
3750 (REWRITE_TAC[SET_RULE `x IN {a} <=> x=a`]);
3752 `~(u0 = u1:real^3) /\ ~(u0 = u2) /\ ~(u0 = u3) /\ ~(u1 = u2) /\
3753 ~(u1 = u3) /\ ~(u2 = u3)`]);
3754 (UP_ASM_TAC THEN MESON_TAC[]);
3755 (EXPAND_TAC "S1" THEN REWRITE_TAC[SUM_SING]);
3757 (* ========================================================================= *)
3759 (REWRITE_WITH `f {u0, u1:real^3} = lmfun (y1 / &2) * dih_y y1 y2 y3 y4 y5 y6`);
3762 (ABBREV_TAC `g = (\u v. if {u, v:real^3} IN edgeX V X
3763 then dihX V X (u,v) * lmfun (hl [u; v])
3765 (REWRITE_WITH `(\({u, v}). if {u, v} IN edgeX V X
3766 then dihX V X (u,v) * lmfun (hl [u; v])
3767 else &0) = (\({u, v:real^3}). g u v)`);
3768 (EXPAND_TAC "g" THEN REWRITE_TAC[]);
3769 (REWRITE_WITH `(\({u, v:real^3}). g u v) {u0, u1} = (g u0 u1):real`);
3770 (MATCH_MP_TAC BETA_PAIR_THM);
3771 (REPEAT STRIP_TAC THEN EXPAND_TAC "g" );
3774 (REWRITE_WITH `dihX V X (u,v) = dihX V X (v,u)`);
3775 (MATCH_MP_TAC Marchal_cells_3.DIHX_SYM);
3776 (REWRITE_TAC[mcell_set; IN_ELIM_THM]);
3777 (ASM_REWRITE_TAC[IN]);
3778 (EXISTS_TAC `i:num` THEN EXISTS_TAC `ul:(real^3)list` THEN ASM_REWRITE_TAC[]);
3779 (REWRITE_TAC[HL; set_of_list; SET_RULE `{a,b} = {b,a}`]);
3781 (UP_ASM_TAC THEN REWRITE_TAC[]);
3782 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
3783 (ASM_REWRITE_TAC[]);
3784 (UP_ASM_TAC THEN MESON_TAC[]);
3787 (UP_ASM_TAC THEN REWRITE_TAC[]);
3788 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
3789 (ASM_REWRITE_TAC[]);
3790 (UP_ASM_TAC THEN MESON_TAC[]);
3794 (REWRITE_TAC[HL_2; REAL_ARITH `inv(&2) * a = a / &2`]);
3795 (REWRITE_TAC[REAL_ARITH ` t * lmfun(s) = lmfun(s) * t`]);
3796 (EXPAND_TAC "y1" THEN AP_TERM_TAC);
3797 (REWRITE_TAC[ASSUME `dist (u0,u1:real^3) = y1`]);
3799 `dihX V X (u0,u1) = dih_y y1 y2 y3 y4 y5 y6 /\
3800 dihX V X (u0,u2) = dih_y y2 y3 y1 y5 y6 y4 /\
3801 dihX V X (u0,u3) = dih_y y3 y1 y2 y6 y4 y5 /\
3802 dihX V X (u2,u3) = dih_y y4 y3 y5 y1 y6 y2 /\
3803 dihX V X (u1,u3) = dih_y y5 y1 y6 y2 y4 y3 /\
3804 dihX V X (u1,u2) = dih_y y6 y1 y5 y3 y4 y2`);
3805 (MATCH_MP_TAC DIHX_DIH_Y_lemma);
3806 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
3807 (ASM_REWRITE_TAC[]);
3810 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3812 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3814 (* ========================================================================= *)
3816 (REWRITE_WITH `f {u0, u2:real^3} = lmfun (y2 / &2) * dih_y y2 y3 y1 y5 y6 y4`);
3818 (ABBREV_TAC `g = (\u v. if {u, v:real^3} IN edgeX V X
3819 then dihX V X (u,v) * lmfun (hl [u; v])
3821 (REWRITE_WITH `(\({u, v}). if {u, v} IN edgeX V X
3822 then dihX V X (u,v) * lmfun (hl [u; v])
3823 else &0) = (\({u, v:real^3}). g u v)`);
3824 (EXPAND_TAC "g" THEN REWRITE_TAC[]);
3825 (REWRITE_WITH `(\({u, v:real^3}). g u v) {u0, u2} = (g u0 u2):real`);
3826 (MATCH_MP_TAC BETA_PAIR_THM);
3827 (REPEAT STRIP_TAC THEN EXPAND_TAC "g" );
3830 (REWRITE_WITH `dihX V X (u,v) = dihX V X (v,u)`);
3831 (MATCH_MP_TAC Marchal_cells_3.DIHX_SYM);
3832 (REWRITE_TAC[mcell_set; IN_ELIM_THM]);
3833 (ASM_REWRITE_TAC[IN]);
3834 (EXISTS_TAC `i:num` THEN EXISTS_TAC `ul:(real^3)list` THEN ASM_REWRITE_TAC[]);
3835 (REWRITE_TAC[HL; set_of_list; SET_RULE `{a,b} = {b,a}`]);
3837 (UP_ASM_TAC THEN REWRITE_TAC[]);
3838 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
3839 (ASM_REWRITE_TAC[]);
3840 (UP_ASM_TAC THEN MESON_TAC[]);
3843 (UP_ASM_TAC THEN REWRITE_TAC[]);
3844 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
3845 (ASM_REWRITE_TAC[]);
3846 (UP_ASM_TAC THEN MESON_TAC[]);
3850 (REWRITE_TAC[HL_2; REAL_ARITH `inv(&2) * a = a / &2`]);
3851 (REWRITE_TAC[REAL_ARITH ` t * lmfun(s) = lmfun(s) * t`]);
3852 (EXPAND_TAC "y2" THEN AP_TERM_TAC);
3853 (REWRITE_TAC[ASSUME `dist (u0,u2:real^3) = y2`]);
3855 `dihX V X (u0,u1) = dih_y y1 y2 y3 y4 y5 y6 /\
3856 dihX V X (u0,u2) = dih_y y2 y3 y1 y5 y6 y4 /\
3857 dihX V X (u0,u3) = dih_y y3 y1 y2 y6 y4 y5 /\
3858 dihX V X (u2,u3) = dih_y y4 y3 y5 y1 y6 y2 /\
3859 dihX V X (u1,u3) = dih_y y5 y1 y6 y2 y4 y3 /\
3860 dihX V X (u1,u2) = dih_y y6 y1 y5 y3 y4 y2`);
3861 (MATCH_MP_TAC DIHX_DIH_Y_lemma);
3862 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
3863 (ASM_REWRITE_TAC[]);
3866 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3867 (EXPAND_TAC "S5" THEN SET_TAC[]);
3868 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3870 (* ========================================================================= *)
3872 (REWRITE_WITH `f {u0, u3:real^3} = lmfun (y3 / &2) * dih_y y3 y1 y2 y6 y4 y5`);
3874 (ABBREV_TAC `g = (\u v. if {u, v:real^3} IN edgeX V X
3875 then dihX V X (u,v) * lmfun (hl [u; v])
3877 (REWRITE_WITH `(\({u, v}). if {u, v} IN edgeX V X
3878 then dihX V X (u,v) * lmfun (hl [u; v])
3879 else &0) = (\({u, v:real^3}). g u v)`);
3880 (EXPAND_TAC "g" THEN REWRITE_TAC[]);
3881 (REWRITE_WITH `(\({u, v:real^3}). g u v) {u0, u3} = (g u0 u3):real`);
3882 (MATCH_MP_TAC BETA_PAIR_THM);
3883 (REPEAT STRIP_TAC THEN EXPAND_TAC "g" );
3886 (REWRITE_WITH `dihX V X (u,v) = dihX V X (v,u)`);
3887 (MATCH_MP_TAC Marchal_cells_3.DIHX_SYM);
3888 (REWRITE_TAC[mcell_set; IN_ELIM_THM]);
3889 (ASM_REWRITE_TAC[IN]);
3890 (EXISTS_TAC `i:num` THEN EXISTS_TAC `ul:(real^3)list` THEN ASM_REWRITE_TAC[]);
3891 (REWRITE_TAC[HL; set_of_list; SET_RULE `{a,b} = {b,a}`]);
3893 (UP_ASM_TAC THEN REWRITE_TAC[]);
3894 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
3895 (ASM_REWRITE_TAC[]);
3896 (UP_ASM_TAC THEN MESON_TAC[]);
3899 (UP_ASM_TAC THEN REWRITE_TAC[]);
3900 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
3901 (ASM_REWRITE_TAC[]);
3902 (UP_ASM_TAC THEN MESON_TAC[]);
3906 (REWRITE_TAC[HL_2; REAL_ARITH `inv(&2) * a = a / &2`]);
3907 (REWRITE_TAC[REAL_ARITH ` t * lmfun(s) = lmfun(s) * t`]);
3908 (EXPAND_TAC "y3" THEN AP_TERM_TAC);
3909 (REWRITE_TAC[ASSUME `dist (u0,u3:real^3) = y3`]);
3911 `dihX V X (u0,u1) = dih_y y1 y2 y3 y4 y5 y6 /\
3912 dihX V X (u0,u2) = dih_y y2 y3 y1 y5 y6 y4 /\
3913 dihX V X (u0,u3) = dih_y y3 y1 y2 y6 y4 y5 /\
3914 dihX V X (u2,u3) = dih_y y4 y3 y5 y1 y6 y2 /\
3915 dihX V X (u1,u3) = dih_y y5 y1 y6 y2 y4 y3 /\
3916 dihX V X (u1,u2) = dih_y y6 y1 y5 y3 y4 y2`);
3917 (MATCH_MP_TAC DIHX_DIH_Y_lemma);
3918 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
3919 (ASM_REWRITE_TAC[]);
3922 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3923 (EXPAND_TAC "S5" THEN EXPAND_TAC "S4" THEN SET_TAC[]);
3924 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3926 (* ========================================================================= *)
3928 (REWRITE_WITH `f {u2, u3:real^3} = lmfun (y4 / &2) * dih_y y4 y3 y5 y1 y6 y2`);
3930 (ABBREV_TAC `g = (\u v. if {u, v:real^3} IN edgeX V X
3931 then dihX V X (u,v) * lmfun (hl [u; v])
3933 (REWRITE_WITH `(\({u, v}). if {u, v} IN edgeX V X
3934 then dihX V X (u,v) * lmfun (hl [u; v])
3935 else &0) = (\({u, v:real^3}). g u v)`);
3936 (EXPAND_TAC "g" THEN REWRITE_TAC[]);
3937 (REWRITE_WITH `(\({u, v:real^3}). g u v) {u2, u3} = (g u2 u3):real`);
3938 (MATCH_MP_TAC BETA_PAIR_THM);
3939 (REPEAT STRIP_TAC THEN EXPAND_TAC "g" );
3942 (REWRITE_WITH `dihX V X (u,v) = dihX V X (v,u)`);
3943 (MATCH_MP_TAC Marchal_cells_3.DIHX_SYM);
3944 (REWRITE_TAC[mcell_set; IN_ELIM_THM]);
3945 (ASM_REWRITE_TAC[IN]);
3946 (EXISTS_TAC `i:num` THEN EXISTS_TAC `ul:(real^3)list` THEN ASM_REWRITE_TAC[]);
3947 (REWRITE_TAC[HL; set_of_list; SET_RULE `{a,b} = {b,a}`]);
3949 (UP_ASM_TAC THEN REWRITE_TAC[]);
3950 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
3951 (ASM_REWRITE_TAC[]);
3952 (UP_ASM_TAC THEN MESON_TAC[]);
3955 (UP_ASM_TAC THEN REWRITE_TAC[]);
3956 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
3957 (ASM_REWRITE_TAC[]);
3958 (UP_ASM_TAC THEN MESON_TAC[]);
3962 (REWRITE_TAC[HL_2; REAL_ARITH `inv(&2) * a = a / &2`]);
3963 (REWRITE_TAC[REAL_ARITH ` t * lmfun(s) = lmfun(s) * t`]);
3964 (EXPAND_TAC "y4" THEN AP_TERM_TAC);
3966 (REWRITE_TAC[ASSUME `dist (u2,u3:real^3) = y4`]);
3968 `dihX V X (u0,u1) = dih_y y1 y2 y3 y4 y5 y6 /\
3969 dihX V X (u0,u2) = dih_y y2 y3 y1 y5 y6 y4 /\
3970 dihX V X (u0,u3) = dih_y y3 y1 y2 y6 y4 y5 /\
3971 dihX V X (u2,u3) = dih_y y4 y3 y5 y1 y6 y2 /\
3972 dihX V X (u1,u3) = dih_y y5 y1 y6 y2 y4 y3 /\
3973 dihX V X (u1,u2) = dih_y y6 y1 y5 y3 y4 y2`);
3974 (MATCH_MP_TAC DIHX_DIH_Y_lemma);
3975 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
3976 (ASM_REWRITE_TAC[]);
3979 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3980 (EXPAND_TAC "S5" THEN EXPAND_TAC "S4" THEN EXPAND_TAC "S3" THEN
3981 EXPAND_TAC "S2" THEN EXPAND_TAC "S1"THEN SET_TAC[]);
3982 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
3984 (* ========================================================================= *)
3986 (REWRITE_WITH `f {u1, u3:real^3} = lmfun (y5 / &2) * dih_y y5 y1 y6 y2 y4 y3`);
3988 (ABBREV_TAC `g = (\u v. if {u, v:real^3} IN edgeX V X
3989 then dihX V X (u,v) * lmfun (hl [u; v])
3991 (REWRITE_WITH `(\({u, v}). if {u, v} IN edgeX V X
3992 then dihX V X (u,v) * lmfun (hl [u; v])
3993 else &0) = (\({u, v:real^3}). g u v)`);
3994 (EXPAND_TAC "g" THEN REWRITE_TAC[]);
3995 (REWRITE_WITH `(\({u, v:real^3}). g u v) {u1, u3} = (g u1 u3):real`);
3996 (MATCH_MP_TAC BETA_PAIR_THM);
3997 (REPEAT STRIP_TAC THEN EXPAND_TAC "g" );
4000 (REWRITE_WITH `dihX V X (u,v) = dihX V X (v,u)`);
4001 (MATCH_MP_TAC Marchal_cells_3.DIHX_SYM);
4002 (REWRITE_TAC[mcell_set; IN_ELIM_THM]);
4003 (ASM_REWRITE_TAC[IN]);
4004 (EXISTS_TAC `i:num` THEN EXISTS_TAC `ul:(real^3)list` THEN ASM_REWRITE_TAC[]);
4005 (REWRITE_TAC[HL; set_of_list; SET_RULE `{a,b} = {b,a}`]);
4007 (UP_ASM_TAC THEN REWRITE_TAC[]);
4008 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
4009 (ASM_REWRITE_TAC[]);
4010 (UP_ASM_TAC THEN MESON_TAC[]);
4013 (UP_ASM_TAC THEN REWRITE_TAC[]);
4014 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
4015 (ASM_REWRITE_TAC[]);
4016 (UP_ASM_TAC THEN MESON_TAC[]);
4020 (REWRITE_TAC[HL_2; REAL_ARITH `inv(&2) * a = a / &2`]);
4021 (REWRITE_TAC[REAL_ARITH ` t * lmfun(s) = lmfun(s) * t`]);
4022 (EXPAND_TAC "y5" THEN AP_TERM_TAC);
4024 (REWRITE_TAC[ASSUME `dist (u1,u3:real^3) = y5`]);
4026 `dihX V X (u0,u1) = dih_y y1 y2 y3 y4 y5 y6 /\
4027 dihX V X (u0,u2) = dih_y y2 y3 y1 y5 y6 y4 /\
4028 dihX V X (u0,u3) = dih_y y3 y1 y2 y6 y4 y5 /\
4029 dihX V X (u2,u3) = dih_y y4 y3 y5 y1 y6 y2 /\
4030 dihX V X (u1,u3) = dih_y y5 y1 y6 y2 y4 y3 /\
4031 dihX V X (u1,u2) = dih_y y6 y1 y5 y3 y4 y2`);
4032 (MATCH_MP_TAC DIHX_DIH_Y_lemma);
4033 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
4034 (ASM_REWRITE_TAC[]);
4037 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
4038 (EXPAND_TAC "S5" THEN EXPAND_TAC "S4" THEN EXPAND_TAC "S3" THEN
4039 EXPAND_TAC "S2" THEN EXPAND_TAC "S1"THEN SET_TAC[]);
4040 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
4042 (* ========================================================================= *)
4044 (REWRITE_WITH `f {u1, u2:real^3} = lmfun (y6 / &2) * dih_y y6 y1 y5 y3 y4 y2`);
4046 (ABBREV_TAC `g = (\u v. if {u, v:real^3} IN edgeX V X
4047 then dihX V X (u,v) * lmfun (hl [u; v])
4049 (REWRITE_WITH `(\({u, v}). if {u, v} IN edgeX V X
4050 then dihX V X (u,v) * lmfun (hl [u; v])
4051 else &0) = (\({u, v:real^3}). g u v)`);
4052 (EXPAND_TAC "g" THEN REWRITE_TAC[]);
4053 (REWRITE_WITH `(\({u, v:real^3}). g u v) {u1, u2} = (g u1 u2):real`);
4054 (MATCH_MP_TAC BETA_PAIR_THM);
4055 (REPEAT STRIP_TAC THEN EXPAND_TAC "g" );
4058 (REWRITE_WITH `dihX V X (u,v) = dihX V X (v,u)`);
4059 (MATCH_MP_TAC Marchal_cells_3.DIHX_SYM);
4060 (REWRITE_TAC[mcell_set; IN_ELIM_THM]);
4061 (ASM_REWRITE_TAC[IN]);
4062 (EXISTS_TAC `i:num` THEN EXISTS_TAC `ul:(real^3)list` THEN ASM_REWRITE_TAC[]);
4063 (REWRITE_TAC[HL; set_of_list; SET_RULE `{a,b} = {b,a}`]);
4065 (UP_ASM_TAC THEN REWRITE_TAC[]);
4066 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
4067 (ASM_REWRITE_TAC[]);
4068 (UP_ASM_TAC THEN MESON_TAC[]);
4071 (UP_ASM_TAC THEN REWRITE_TAC[]);
4072 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
4073 (ASM_REWRITE_TAC[]);
4074 (UP_ASM_TAC THEN MESON_TAC[]);
4078 (REWRITE_TAC[HL_2; REAL_ARITH `inv(&2) * a = a / &2`]);
4079 (REWRITE_TAC[REAL_ARITH ` t * lmfun(s) = lmfun(s) * t`]);
4080 (EXPAND_TAC "y6" THEN AP_TERM_TAC);
4082 (REWRITE_TAC[ASSUME `dist (u1,u2:real^3) = y6`]);
4084 `dihX V X (u0,u1) = dih_y y1 y2 y3 y4 y5 y6 /\
4085 dihX V X (u0,u2) = dih_y y2 y3 y1 y5 y6 y4 /\
4086 dihX V X (u0,u3) = dih_y y3 y1 y2 y6 y4 y5 /\
4087 dihX V X (u2,u3) = dih_y y4 y3 y5 y1 y6 y2 /\
4088 dihX V X (u1,u3) = dih_y y5 y1 y6 y2 y4 y3 /\
4089 dihX V X (u1,u2) = dih_y y6 y1 y5 y3 y4 y2`);
4090 (MATCH_MP_TAC DIHX_DIH_Y_lemma);
4091 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
4092 (ASM_REWRITE_TAC[]);
4095 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
4096 (EXPAND_TAC "S5" THEN EXPAND_TAC "S4" THEN EXPAND_TAC "S3" THEN
4097 EXPAND_TAC "S2" THEN EXPAND_TAC "S1"THEN SET_TAC[]);
4098 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
4100 (* ==================================== *)
4104 (REWRITE_TAC[total_solid]);
4105 (REWRITE_TAC[ASSUME `VX V X = {u0,u1,u2,u3}`]);
4106 (ABBREV_TAC `h = (\x. sol x X)`);
4108 (ABBREV_TAC `S3 = {u1,u2,u3:real^3}`);
4109 (REWRITE_WITH `sum (u0:real^3 INSERT S3) h =
4110 (if u0 IN S3 then sum S3 h else h u0 + sum S3 h)`);
4111 (MATCH_MP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
4113 (REWRITE_TAC[Geomdetail.FINITE6]);
4116 (UP_ASM_TAC THEN EXPAND_TAC "S3");
4117 (REWRITE_TAC[SET_RULE `x IN {a,b,c} <=> x=a\/x=b\/x=c`]);
4119 `~(u0 = u1:real^3) /\ ~(u0 = u2) /\ ~(u0 = u3) /\ ~(u1 = u2) /\
4120 ~(u1 = u3) /\ ~(u2 = u3)`]);
4121 (UP_ASM_TAC THEN MESON_TAC[]);
4124 (ABBREV_TAC `S2 = {u2,u3:real^3}`);
4125 (REWRITE_WITH `sum (u1:real^3 INSERT S2) h =
4126 (if u1 IN S2 then sum S2 h else h u1 + sum S2 h)`);
4127 (MATCH_MP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
4129 (REWRITE_TAC[Geomdetail.FINITE6]);
4132 (UP_ASM_TAC THEN EXPAND_TAC "S2");
4133 (REWRITE_TAC[SET_RULE `x IN {a,b} <=> x = a \/ x = b`]);
4135 `~(u0 = u1:real^3) /\ ~(u0 = u2) /\ ~(u0 = u3) /\ ~(u1 = u2) /\
4136 ~(u1 = u3) /\ ~(u2 = u3)`]);
4137 (UP_ASM_TAC THEN MESON_TAC[]);
4140 (ABBREV_TAC `S1 = {u3:real^3}`);
4141 (REWRITE_WITH `sum (u2:real^3 INSERT S1) h =
4142 (if u2 IN S1 then sum S1 h else h u2 + sum S1 h)`);
4143 (MATCH_MP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
4145 (REWRITE_TAC[Geomdetail.FINITE6]);
4148 (UP_ASM_TAC THEN EXPAND_TAC "S1");
4149 (REWRITE_TAC[SET_RULE `x IN {a} <=> x = a`]);
4151 `~(u0 = u1:real^3) /\ ~(u0 = u2) /\ ~(u0 = u3) /\ ~(u1 = u2) /\
4152 ~(u1 = u3) /\ ~(u2 = u3)`]);
4153 (UP_ASM_TAC THEN MESON_TAC[]);
4155 (EXPAND_TAC "S1" THEN REWRITE_TAC[SUM_SING]);
4156 (EXPAND_TAC "h" THEN REWRITE_TAC[BETA_THM]);
4159 `sol u0 X = sol_y y1 y2 y3 y4 y5 y6 /\
4160 sol u1 X = sol_y y1 y5 y6 y4 y2 y3 /\
4161 sol u2 X = sol_y y4 y2 y6 y1 y5 y3 /\
4162 sol u3 X = sol_y y4 y5 y3 y1 y2 y6`);
4163 (MATCH_MP_TAC SOL_SOL_Y_EXPLICIT);
4164 (EXISTS_TAC `V:real^3->bool` THEN EXISTS_TAC `ul:(real^3)list` THEN
4165 EXISTS_TAC `i:num`);
4166 (ASM_REWRITE_TAC[]);
4169 (STRIP_TAC THEN NEW_GOAL `F`);
4170 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
4171 (UP_ASM_TAC THEN ASM_REWRITE_TAC[])]);;
4173 (* ---------------------------------------------------------------------- *)
4176 (* ====================================================================== *)
4178 let gammaX_gamma3f = prove_by_refinement (
4179 `!V X ul u0 u1 u2 u3 y4 y5 y6.
4185 ul = [u0; u1; u2; u3] /\
4186 dist (u1, u2) = y4 /\
4187 dist (u0, u2) = y5 /\
4190 vol X = vol_y sqrt2 sqrt2 sqrt2 y4 y5 y6 /\
4191 sol u0 X = sol_y y5 y6 sqrt2 sqrt2 sqrt2 y4 /\
4192 sol u1 X = sol_y y6 y4 sqrt2 sqrt2 sqrt2 y5 /\
4193 sol u2 X = sol_y y4 y5 sqrt2 sqrt2 sqrt2 y6 /\
4194 dihX V X (u0,u1) = dih_y y6 y4 sqrt2 sqrt2 sqrt2 y5 /\
4195 dihX V X (u0,u2) = dih_y y5 y6 sqrt2 sqrt2 sqrt2 y4 /\
4196 dihX V X (u1,u2) = dih_y y4 y5 sqrt2 sqrt2 sqrt2 y6 /\
4197 gammaX V X lmfun = gamma3f y4 y5 y6 sqrt2 lmfun`,
4198 [(REPEAT GEN_TAC THEN STRIP_TAC);
4200 (NEW_GOAL `~(X:real^3->bool = {})`);
4201 (STRIP_TAC THEN UNDISCH_TAC `~NULLSET X` THEN
4202 REWRITE_TAC[ASSUME `X:real^3->bool = {}`; NEGLIGIBLE_EMPTY]);
4204 (NEW_GOAL `X = mcell3 V ul`);
4205 (ASM_REWRITE_TAC[]);
4206 (ASM_SIMP_TAC[MCELL_EXPLICIT]);
4207 (UP_ASM_TAC THEN REWRITE_TAC[mcell3]);
4211 (NEW_GOAL `(?s. between s (omega_list_n V ul 2,omega_list_n V ul 3) /\
4212 dist (u0,s) = sqrt (&2) /\
4214 (MATCH_MP_TAC MXI_EXPLICIT);
4215 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN EXISTS_TAC `u3:real^3`);
4216 (ASM_REWRITE_TAC[]);
4217 (UP_ASM_TAC THEN STRIP_TAC);
4218 (ABBREV_TAC `s2 = omega_list_n V ul 2`);
4219 (ABBREV_TAC `s3 = omega_list_n V ul 3`);
4220 (ABBREV_TAC `vl = truncate_simplex 2 (ul:(real^3)list)`);
4221 (NEW_GOAL `s2 IN voronoi_list V vl`);
4222 (EXPAND_TAC "s2" THEN EXPAND_TAC "vl");
4223 (MATCH_MP_TAC Rogers.OMEGA_LIST_N_IN_VORONOI_LIST_GEN);
4224 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
4227 (NEW_GOAL `s3 IN voronoi_list V vl`);
4228 (EXPAND_TAC "s3" THEN EXPAND_TAC "vl");
4229 (MATCH_MP_TAC Rogers.OMEGA_LIST_N_IN_VORONOI_LIST_GEN);
4230 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
4233 (NEW_GOAL `s IN voronoi_list V vl`);
4234 (MATCH_MP_TAC (SET_RULE `(?x. s IN x /\ x SUBSET t)==> s IN t`));
4235 (EXISTS_TAC `convex hull {s2,s3:real^3}`);
4237 (ASM_REWRITE_TAC[GSYM BETWEEN_IN_CONVEX_HULL]);
4238 (NEW_GOAL `voronoi_list V vl = convex hull (voronoi_list V vl)`);
4239 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4240 (REWRITE_TAC[CONVEX_HULL_EQ; Packing3.CONVEX_VORONOI_LIST]);
4241 (ONCE_REWRITE_TAC[ASSUME `voronoi_list V vl = convex hull voronoi_list V vl`]);
4242 (MATCH_MP_TAC Marchal_cells.CONVEX_HULL_SUBSET);
4245 (MP_TAC (ASSUME `s IN voronoi_list V vl`));
4246 (EXPAND_TAC "vl" THEN REWRITE_TAC[ASSUME `ul = [u0;u1;u2;u3:real^3]`;
4247 TRUNCATE_SIMPLEX_EXPLICIT_2; VORONOI_LIST; VORONOI_SET; set_of_list;
4248 SET_RULE `x IN {a,b,c} <=> x=a\/x=b\/x=c`; IN_INTERS]);
4250 (NEW_GOAL `s IN voronoi_closed V u0 /\ s IN voronoi_closed V u1 /\
4251 s IN voronoi_closed V (u2:real^3)`);
4252 (UP_ASM_TAC THEN SET_TAC[]);
4253 (UP_ASM_TAC THEN REWRITE_TAC[voronoi_closed; IN; IN_ELIM_THM] THEN
4256 (NEW_GOAL `u0 IN V /\ u1 IN V /\ u2 IN V /\ (u3:real^3) IN V`);
4257 (REWRITE_TAC[SET_RULE `u0 IN V /\ u1 IN V /\ u2 IN V /\ (u3:real^3) IN V <=>
4258 {u0,u1,u2,u3} SUBSET V`; GSYM set_of_list; GSYM
4259 (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
4260 (MATCH_MP_TAC BARV_SUBSET);
4261 (EXISTS_TAC `3` THEN ASM_REWRITE_TAC[]);
4262 (FIRST_ASSUM MP_TAC THEN REWRITE_TAC[IN] THEN STRIP_TAC);
4264 (NEW_GOAL `dist (s,u1:real^3) = sqrt(&2)`);
4265 (REWRITE_TAC[GSYM (ASSUME `dist (u0:real^3, s) = sqrt (&2)`)]);
4266 (REWRITE_WITH `dist (u0,s:real^3) = dist (s,u0)`);
4268 (REWRITE_TAC[REAL_ARITH `a = b <=> a <= b /\ b <= a`]);
4270 (NEW_GOAL `dist (s,u2:real^3) = sqrt(&2)`);
4271 (REWRITE_TAC[GSYM (ASSUME `dist (u0:real^3, s) = sqrt (&2)`)]);
4272 (REWRITE_WITH `dist (u0,s:real^3) = dist (s,u0)`);
4274 (REWRITE_TAC[REAL_ARITH `a = b <=> a <= b /\ b <= a`]);
4277 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} = 4`);
4278 (REWRITE_TAC[ARITH_RULE `4 = 3 + 1`; GSYM set_of_list;
4279 GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
4280 (MATCH_MP_TAC Marchal_cells_3.BARV_CARD_LEMMA);
4281 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
4282 (NEW_GOAL `~(u0 = u1:real^3) /\ ~(u0 = u2) /\ ~(u0 = u3) /\
4283 ~(u1 = u2) /\ ~(u1 = u3) /\ ~(u2 = u3)`);
4285 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
4286 (REWRITE_TAC[ASSUME `u0 = u1:real^3`;
4287 SET_RULE `{u1, u1, u2, u3} = {u1,u2,u3}`;Geomdetail.CARD3 ]);
4289 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
4290 (REWRITE_TAC[ASSUME `u0 = u2:real^3`;
4291 SET_RULE `{u2, u1, u2, u3} = {u1,u2,u3}`;Geomdetail.CARD3 ]);
4293 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
4294 (REWRITE_TAC[ASSUME `u0 = u3:real^3`;
4295 SET_RULE `{u3, u1, u2, u3} = {u1,u2,u3}`;Geomdetail.CARD3 ]);
4297 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
4298 (REWRITE_TAC[ASSUME `u1 = u2:real^3`;
4299 SET_RULE `{u0, u2, u2, u3} = {u0,u2,u3}`;Geomdetail.CARD3 ]);
4301 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
4302 (REWRITE_TAC[ASSUME `u1 = u3:real^3`;
4303 SET_RULE `{u0, u3, u2, u3} = {u0,u2,u3}`;Geomdetail.CARD3 ]);
4305 (NEW_GOAL `CARD {u0, u1, u2, u3:real^3} <= 3`);
4306 (REWRITE_TAC[ASSUME `u2 = u3:real^3`;
4307 SET_RULE `{u0, u1, u3, u3} = {u0,u1,u3}`;Geomdetail.CARD3 ]);
4311 (NEW_GOAL `VX V X = {u0,u1,u2}`);
4312 (REWRITE_WITH `VX V X = V INTER X`);
4313 (MATCH_MP_TAC Hdtfnfz.HDTFNFZ);
4314 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `3`);
4315 (ASM_REWRITE_TAC[]);
4316 (REWRITE_WITH `X = mcell 3 V ul`);
4317 (ASM_REWRITE_TAC[]);
4319 `V INTER mcell 3 V ul = set_of_list (truncate_simplex (3 - 1) ul)`);
4320 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
4321 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 3 /\ 3 <= 4`]);
4322 (REWRITE_WITH ` mcell 3 V [u0; u1; u2; u3] = X`);
4323 (ASM_REWRITE_TAC[]);
4324 (ASM_REWRITE_TAC[]);
4325 (ASM_REWRITE_TAC[ARITH_RULE `3 - 1 = 2`; TRUNCATE_SIMPLEX_EXPLICIT_2;
4328 (UNDISCH_TAC `X = convex hull (set_of_list vl UNION {mxi V ul})`);
4329 (EXPAND_TAC "vl" THEN REWRITE_TAC[set_of_list; TRUNCATE_SIMPLEX_EXPLICIT_2;
4330 ASSUME `ul = [u0;u1;u2;u3:real^3]`;
4331 SET_RULE `{a,b,c} UNION {d} = {a,b,c,d}`]);
4332 (REWRITE_WITH `mxi V [u0; u1; u2; u3] = s`);
4333 (EXPAND_TAC "s" THEN AP_TERM_TAC THEN ASM_REWRITE_TAC[]);
4336 (NEW_GOAL `~coplanar {u0,u1,u2,s:real^3}`);
4337 (ONCE_REWRITE_TAC[GSYM COPLANAR_AFFINE_HULL_COPLANAR]);
4339 (NEW_GOAL `NULLSET X`);
4340 (MATCH_MP_TAC COPLANAR_IMP_NEGLIGIBLE);
4341 (REWRITE_TAC[ASSUME `X = convex hull {u0, u1, u2, s:real^3}`]);
4342 (MATCH_MP_TAC COPLANAR_SUBSET);
4343 (EXISTS_TAC `affine hull {u0, u1, u2, s:real^3}`);
4344 (ASM_REWRITE_TAC[CONVEX_HULL_SUBSET_AFFINE_HULL]);
4345 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
4347 (NEW_GOAL `CARD {u0, u1, u2, s:real^3} = 4`);
4348 (NEW_GOAL `CARD {u0, u1, u2, s:real^3} <= 4`);
4349 (REWRITE_TAC[Geomdetail.CARD4]);
4350 (ASM_CASES_TAC `CARD {u0, u1, u2, s:real^3} <= 3`);
4352 (UNDISCH_TAC `~coplanar {u0, u1, u2, s:real^3}`);
4353 (REWRITE_TAC[] THEN MATCH_MP_TAC COPLANAR_SMALL);
4354 (ASM_REWRITE_TAC[Geomdetail.FINITE6]);
4355 (UP_ASM_TAC THEN MESON_TAC[]);
4358 (NEW_GOAL `~(u0 = s:real^3) /\ ~(u1 = s) /\ ~(u2 = s)`);
4360 (NEW_GOAL `CARD {u0, u1, u2,s:real^3} <= 3`);
4361 (REWRITE_TAC[ASSUME `u0 = s:real^3`;
4362 SET_RULE `{s, u1, u2, s} = {s,u1,u2}`;Geomdetail.CARD3 ]);
4364 (NEW_GOAL `CARD {u0, u1, u2, s:real^3} <= 3`);
4365 (REWRITE_TAC[ASSUME `u1 = s:real^3`;
4366 SET_RULE `{u0, s, u2, s} = {u0,u2,s}`;Geomdetail.CARD3 ]);
4368 (NEW_GOAL `CARD {u0, u1, u2, s:real^3} <= 3`);
4369 (REWRITE_TAC[ASSUME `u2 = s:real^3`;
4370 SET_RULE `{u0, u1, s, s} = {u0,u1,s}`;Geomdetail.CARD3 ]);
4373 (* ========================================================================= *)
4375 (NEW_GOAL `vol X = vol_y sqrt2 sqrt2 sqrt2 y4 y5 y6`);
4377 (REWRITE_TAC[vol_y; y_of_x; vol_x;
4378 ASSUME `X = convex hull {u0, u1, u2, s:real^3}`]);
4379 (ONCE_REWRITE_TAC[SET_RULE `{u0, u1, u2,s} = {s, u0,u1, u2}`]);
4380 (REWRITE_TAC[VOLUME_OF_CLOSED_TETRAHEDRON; REAL_POW_2]);
4381 (ASM_REWRITE_TAC[]);
4382 (ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REWRITE_TAC[sqrt2]);
4384 (REWRITE_TAC[gamma3f; gammaX; vol3r;vol3f]);
4385 (REWRITE_TAC[ASSUME `vol X = vol_y sqrt2 sqrt2 sqrt2 y4 y5 y6`]);
4388 (* ========================================================================= *)
4390 (REWRITE_TAC[total_solid; ASSUME `VX V X = {u0,u1,u2:real^3}`]);
4391 (ABBREV_TAC `h = (\x. sol x X)`);
4393 (ABBREV_TAC `S2 = {u1,u2:real^3}`);
4394 (REWRITE_WITH `sum (u0:real^3 INSERT S2) h =
4395 (if u0 IN S2 then sum S2 h else h u0 + sum S2 h)`);
4396 (MATCH_MP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
4398 (REWRITE_TAC[Geomdetail.FINITE6]);
4401 (UP_ASM_TAC THEN EXPAND_TAC "S2");
4402 (REWRITE_TAC[SET_RULE `x IN {a,b} <=> x = a \/ x = b`]);
4404 `~(u0 = u1:real^3) /\ ~(u0 = u2) /\ ~(u0 = u3) /\ ~(u1 = u2) /\
4405 ~(u1 = u3) /\ ~(u2 = u3)`]);
4406 (UP_ASM_TAC THEN MESON_TAC[]);
4409 (ABBREV_TAC `S1 = {u2:real^3}`);
4410 (REWRITE_WITH `sum (u1:real^3 INSERT S1) h =
4411 (if u1 IN S1 then sum S1 h else h u1 + sum S1 h)`);
4412 (MATCH_MP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
4414 (REWRITE_TAC[Geomdetail.FINITE6]);
4417 (UP_ASM_TAC THEN EXPAND_TAC "S1");
4418 (REWRITE_TAC[SET_RULE `x IN {a} <=> x = a`]);
4420 `~(u0 = u1:real^3) /\ ~(u0 = u2) /\ ~(u0 = u3) /\ ~(u1 = u2) /\
4421 ~(u1 = u3) /\ ~(u2 = u3)`]);
4422 (UP_ASM_TAC THEN MESON_TAC[]);
4424 (EXPAND_TAC "S1" THEN REWRITE_TAC[SUM_SING]);
4425 (EXPAND_TAC "h" THEN REWRITE_TAC[BETA_THM]);
4427 (* ======================================================================== *)
4429 (REWRITE_WITH `sol u0 X = sol_y y5 y6 sqrt2 sqrt2 sqrt2 y4`);
4430 (REWRITE_TAC[sol_y]);
4431 (REWRITE_WITH `dih_y y5 y6 sqrt2 sqrt2 sqrt2 y4 = dihV (u0:real^3) u2 u1 s`);
4432 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4433 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
4434 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
4440 `dih_y (dist (u0,u2)) (dist (u0,u1)) sqrt2 sqrt2 sqrt2 (dist (u1,u2)) =
4441 dih_y (dist (u0,u2)) (dist (u0,u1)) (dist (u0,s))
4442 (dist (u1,s)) (dist (u2,s)) (dist (u2,u1:real^3))`);
4443 (ASM_REWRITE_TAC[DIST_SYM; sqrt2]);
4444 (FIRST_ASSUM MATCH_MP_TAC);
4447 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4448 (EXISTS_TAC `s:real^3`);
4449 (ONCE_REWRITE_TAC[SET_RULE `{u0,u2,u1,s} = {u0,u1,u2,s}`]);
4450 (ASM_REWRITE_TAC[]);
4451 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4452 (EXISTS_TAC `u1:real^3`);
4453 (ONCE_REWRITE_TAC[SET_RULE `{u0,u2,s,u1} = {u0,u1,u2,s}`]);
4454 (ASM_REWRITE_TAC[]);
4456 (REWRITE_WITH `dih_y y6 sqrt2 y5 sqrt2 y4 sqrt2 =
4457 dihV (u0:real^3) u1 s u2`);
4458 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4459 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
4460 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
4466 `dih_y (dist (u0,u1)) sqrt2 (dist (u0,u2)) sqrt2 (dist (u1,u2)) sqrt2 =
4467 dih_y (dist (u0,u1)) (dist (u0,s)) (dist (u0,u2)) (dist (s,u2))
4468 (dist (u1,u2)) (dist (u1,s:real^3))`);
4469 (ASM_REWRITE_TAC[DIST_SYM; sqrt2]);
4470 (FIRST_ASSUM MATCH_MP_TAC);
4472 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4473 (EXISTS_TAC `u2:real^3`);
4474 (ONCE_REWRITE_TAC[SET_RULE `{u0,u1,s,u2} = {u0,u1,u2,s}`]);
4475 (ASM_REWRITE_TAC[]);
4476 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4477 (EXISTS_TAC `s:real^3`);
4478 (ASM_REWRITE_TAC[]);
4480 (REWRITE_WITH `dih_y sqrt2 y5 y6 y4 sqrt2 sqrt2 =
4481 dihV (u0:real^3) s u2 u1`);
4482 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4483 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
4484 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
4490 `dih_y sqrt2 (dist (u0,u2)) (dist (u0,u1)) (dist (u1,u2)) sqrt2 sqrt2 =
4491 dih_y (dist (u0,s)) (dist (u0,u2)) (dist (u0,u1)) (dist (u2,u1))
4492 (dist (s,u1)) (dist (s,u2:real^3))`);
4493 (ASM_REWRITE_TAC[DIST_SYM;sqrt2]);
4494 (FIRST_ASSUM MATCH_MP_TAC);
4496 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4497 (EXISTS_TAC `u1:real^3`);
4498 (ONCE_REWRITE_TAC[SET_RULE `{u0,s,u2,u1} = {u0,u1,u2,s}`]);
4499 (ASM_REWRITE_TAC[]);
4500 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4501 (EXISTS_TAC `u2:real^3`);
4502 (ONCE_REWRITE_TAC[SET_RULE `{u0,s, u1,u2} = {u0,u1,u2,s}`]);
4503 (ASM_REWRITE_TAC[]);
4505 (REWRITE_TAC[ASSUME `X = convex hull {u0,u1,u2,s:real^3}`]);
4506 (ONCE_REWRITE_TAC[REAL_ARITH `a + b + c = b + a + c`]);
4507 (MATCH_MP_TAC SOL_SOLID_TRIANGLE);
4508 (ASM_REWRITE_TAC[DIHV_SYM_2]);
4510 (* ======================================================================== *)
4512 (REWRITE_WITH `sol u1 X = sol_y y6 y4 sqrt2 sqrt2 sqrt2 y5`);
4513 (REWRITE_TAC[sol_y]);
4514 (REWRITE_WITH `dih_y y6 y4 sqrt2 sqrt2 sqrt2 y5 = dihV (u1:real^3) u0 u2 s`);
4515 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4516 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
4517 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
4523 `dih_y (dist (u0,u1)) (dist (u1,u2)) sqrt2 sqrt2 sqrt2 (dist (u0,u2)) =
4524 dih_y (dist (u1,u0)) (dist (u1,u2)) (dist (u1,s))
4525 (dist (u2,s)) (dist (u0,s)) (dist (u0,u2:real^3))`);
4526 (ASM_REWRITE_TAC[DIST_SYM; sqrt2]);
4527 (FIRST_ASSUM MATCH_MP_TAC);
4530 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4531 (EXISTS_TAC `s:real^3`);
4532 (ONCE_REWRITE_TAC[SET_RULE `{u1,u0,u2,s} = {u0,u1,u2,s}`]);
4533 (ASM_REWRITE_TAC[]);
4534 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4535 (EXISTS_TAC `u2:real^3`);
4536 (ONCE_REWRITE_TAC[SET_RULE `{u1,u0,s,u2} = {u0,u1,u2,s}`]);
4537 (ASM_REWRITE_TAC[]);
4539 (REWRITE_WITH `dih_y y4 sqrt2 y6 sqrt2 y5 sqrt2 =
4540 dihV (u1:real^3) u2 s u0`);
4541 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4542 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
4543 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
4549 `dih_y (dist (u1,u2)) sqrt2 (dist (u0,u1)) sqrt2 (dist (u0,u2)) sqrt2 =
4550 dih_y (dist (u1,u2)) (dist (u1,s)) (dist (u1,u0)) (dist (s,u0))
4551 (dist (u2,u0)) (dist (u2,s:real^3))`);
4552 (REWRITE_WITH `dist (s,u0:real^3) = dist (u0,s)`);
4553 (REWRITE_TAC[DIST_SYM]);
4554 (ASM_REWRITE_TAC[DIST_SYM; sqrt2]);
4555 (FIRST_ASSUM MATCH_MP_TAC);
4557 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4558 (EXISTS_TAC `u0:real^3`);
4559 (ONCE_REWRITE_TAC[SET_RULE `{u1,u2,s,u0} = {u0,u1,u2,s}`]);
4560 (ASM_REWRITE_TAC[]);
4561 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4562 (EXISTS_TAC `s:real^3`);
4563 (ONCE_REWRITE_TAC[SET_RULE `{u1,u2,u0,s} = {u0,u1,u2,s}`]);
4564 (ASM_REWRITE_TAC[]);
4566 (REWRITE_WITH `dih_y sqrt2 y6 y4 y5 sqrt2 sqrt2 =
4567 dihV (u1:real^3) s u0 u2`);
4568 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4569 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
4570 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
4576 `dih_y sqrt2 (dist (u0,u1)) (dist (u1,u2)) (dist (u0,u2)) sqrt2 sqrt2 =
4577 dih_y (dist (u1,s)) (dist (u1,u0)) (dist (u1,u2)) (dist (u0,u2))
4578 (dist (s,u2)) (dist (s,u0:real^3))`);
4579 (REWRITE_WITH `dist (s,u0:real^3) = dist (u0,s)`);
4580 (REWRITE_TAC[DIST_SYM]);
4581 (ASM_REWRITE_TAC[DIST_SYM;sqrt2]);
4582 (FIRST_ASSUM MATCH_MP_TAC);
4584 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4585 (EXISTS_TAC `u2:real^3`);
4586 (ONCE_REWRITE_TAC[SET_RULE `{u1,s,u0,u2} = {u0,u1,u2,s}`]);
4587 (ASM_REWRITE_TAC[]);
4588 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4589 (EXISTS_TAC `u0:real^3`);
4590 (ONCE_REWRITE_TAC[SET_RULE `{u1,s, u2,u0} = {u0,u1,u2,s}`]);
4591 (ASM_REWRITE_TAC[]);
4593 (REWRITE_TAC[ASSUME `X = convex hull {u0,u1,u2,s:real^3}`]);
4594 (ONCE_REWRITE_TAC[SET_RULE `{u0, u1, u2, s} = {u1,u0,u2,s}`]);
4595 (MATCH_MP_TAC SOL_SOLID_TRIANGLE);
4596 (ONCE_REWRITE_TAC[GSYM (SET_RULE `{u0, u1, u2, s} = {u1,u0,u2,s}`)]);
4597 (ASM_REWRITE_TAC[]);
4599 (* ======================================================================== *)
4601 (REWRITE_WITH `sol u2 X = sol_y y4 y5 sqrt2 sqrt2 sqrt2 y6`);
4602 (REWRITE_TAC[sol_y]);
4603 (REWRITE_WITH `dih_y y4 y5 sqrt2 sqrt2 sqrt2 y6 =
4604 dihV (u2:real^3) u1 u0 s`);
4605 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4606 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
4607 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
4613 `dih_y (dist (u1,u2)) (dist (u0,u2)) sqrt2 sqrt2 sqrt2 (dist (u0,u1)) =
4614 dih_y (dist (u2,u1)) (dist (u2,u0)) (dist (u2,s))
4615 (dist (u0,s)) (dist (u1,s)) (dist (u1,u0:real^3))`);
4616 (ASM_REWRITE_TAC[DIST_SYM; sqrt2]);
4617 (FIRST_ASSUM MATCH_MP_TAC);
4620 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4621 (EXISTS_TAC `s:real^3`);
4622 (ONCE_REWRITE_TAC[SET_RULE `{u2,u1,u0,s} = {u0,u1,u2,s}`]);
4623 (ASM_REWRITE_TAC[]);
4624 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4625 (EXISTS_TAC `u0:real^3`);
4626 (ONCE_REWRITE_TAC[SET_RULE `{u2,u1,s,u0} = {u0,u1,u2,s}`]);
4627 (ASM_REWRITE_TAC[]);
4629 (REWRITE_WITH `dih_y y5 sqrt2 y4 sqrt2 y6 sqrt2 =
4630 dihV (u2:real^3) u0 s u1`);
4631 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4632 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
4633 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
4639 `dih_y (dist (u0,u2)) sqrt2 (dist (u1,u2)) sqrt2 (dist (u0,u1)) sqrt2 =
4640 dih_y (dist (u2,u0)) (dist (u2,s)) (dist (u2,u1)) (dist (s,u1))
4641 (dist (u0,u1)) (dist (u0,s:real^3))`);
4642 (ASM_REWRITE_TAC[DIST_SYM; sqrt2]);
4643 (FIRST_ASSUM MATCH_MP_TAC);
4645 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4646 (EXISTS_TAC `u1:real^3`);
4647 (ONCE_REWRITE_TAC[SET_RULE `{u2,u0,s,u1} = {u0,u1,u2,s}`]);
4648 (ASM_REWRITE_TAC[]);
4649 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4650 (EXISTS_TAC `s:real^3`);
4651 (ONCE_REWRITE_TAC[SET_RULE `{u2,u0,u1,s} = {u0,u1,u2,s}`]);
4652 (ASM_REWRITE_TAC[]);
4654 (REWRITE_WITH `dih_y sqrt2 y4 y5 y6 sqrt2 sqrt2 =
4655 dihV (u2:real^3) s u1 u0`);
4656 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4657 (MP_TAC Merge_ineq.DIHV_EQ_DIH_Y);
4658 (REWRITE_TAC[LET_DEF; LET_END_DEF]);
4664 `dih_y sqrt2 (dist (u1,u2)) (dist (u0,u2)) (dist (u0,u1)) sqrt2 sqrt2 =
4665 dih_y (dist (u2,s)) (dist (u2,u1)) (dist (u2,u0)) (dist (u1,u0))
4666 (dist (s,u0)) (dist (s,u1:real^3))`);
4667 (REWRITE_WITH `dist (s,u0:real^3) = dist (u0,s)`);
4668 (REWRITE_TAC[DIST_SYM]);
4669 (ASM_REWRITE_TAC[DIST_SYM;sqrt2]);
4670 (FIRST_ASSUM MATCH_MP_TAC);
4672 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4673 (EXISTS_TAC `u0:real^3`);
4674 (ONCE_REWRITE_TAC[SET_RULE `{u2,s,u1,u0} = {u0,u1,u2,s}`]);
4675 (ASM_REWRITE_TAC[]);
4676 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4677 (EXISTS_TAC `u1:real^3`);
4678 (ONCE_REWRITE_TAC[SET_RULE `{u2,s, u0,u1} = {u0,u1,u2,s}`]);
4679 (ASM_REWRITE_TAC[]);
4681 (REWRITE_TAC[ASSUME `X = convex hull {u0,u1,u2,s:real^3}`]);
4682 (ONCE_REWRITE_TAC[SET_RULE `{u0, u1, u2, s} = {u2,u1,u0,s}`]);
4683 (MATCH_MP_TAC SOL_SOLID_TRIANGLE);
4684 (ONCE_REWRITE_TAC[SET_RULE `{u2, u1, u0, s} = {u0,u1,u2,s}`]);
4685 (ASM_REWRITE_TAC[]);
4687 (* ===================================================================== *)
4688 (NEW_GOAL `dihX V X (u0,u1) = dih_y y6 y4 sqrt2 sqrt2 sqrt2 y5`);
4689 (REWRITE_TAC[dihX]);
4693 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
4694 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
4697 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
4698 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
4701 initial_sublist [u0; u1] ul)`);
4703 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
4704 (MATCH_MP_TAC SELECT_AX);
4705 (EXISTS_TAC `(3, ul:(real^3)list)`);
4707 (REWRITE_TAC[BETA_THM]);
4708 (ASM_REWRITE_TAC[IN; ARITH_RULE `3 <= 4`]);
4709 (REWRITE_TAC[INITIAL_SUBLIST]);
4710 (EXISTS_TAC `[u2;u3:real^3]` THEN REWRITE_TAC[APPEND]);
4712 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
4713 (EXPAND_TAC "P" THEN REWRITE_TAC[IN]);
4716 (ASM_CASES_TAC `2 <= k`);
4720 (!t. 3 - 1 <= t /\ t <= 3
4721 ==> omega_list_n V ul t = omega_list_n V ul' t)`);
4722 (MATCH_MP_TAC Marchal_cells_3.MCELL_ID_OMEGA_LIST_N);
4723 (ASM_REWRITE_TAC[SET_RULE `x IN {2,3,4} <=> x=2\/x=3\/x=4`]);
4724 (REWRITE_TAC[GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
4725 (REWRITE_WITH `mcell 3 V ul = X`);
4726 (ASM_REWRITE_TAC[]);
4727 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `~NULLSET X`]);
4729 (ASM_REWRITE_TAC[]);
4733 (UP_ASM_TAC THEN MESON_TAC[]);
4736 (* This part is harder than the previous *)
4738 (REWRITE_TAC[dihu3]);
4739 (NEW_GOAL `?v0 v1 v2 v3. ul' = [v0;v1;v2;v3:real^3]`);
4740 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
4741 (EXISTS_TAC `V:real^3->bool`);
4742 (ASM_REWRITE_TAC[]);
4743 (UP_ASM_TAC THEN STRIP_TAC);
4745 (NEW_GOAL `u0 = v0:real^3`);
4746 (NEW_GOAL`u0 = HD [u0;u1:real^3]`);
4748 (ONCE_REWRITE_TAC[ASSUME `u0 = HD[u0;u1:real^3]`]);
4749 (REWRITE_WITH `v0:real^3 = HD ul'`);
4750 (ASM_REWRITE_TAC[HD]);
4751 (REWRITE_WITH `[u0;u1:real^3] = truncate_simplex 1 ul'`);
4752 (NEW_GOAL `[u0;u1:real^3] = truncate_simplex (LENGTH [u0;u1] - 1) ul' /\
4753 LENGTH [u0;u1] <= LENGTH ul'`);
4754 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
4755 (ASM_REWRITE_TAC[LENGTH]);
4757 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
4759 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
4760 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
4761 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
4762 (EXISTS_TAC `V:real^3->bool`);
4763 (ASM_REWRITE_TAC[]);
4766 (NEW_GOAL `u1 = v1:real^3`);
4767 (NEW_GOAL`u1 = EL 1 [u0;u1:real^3]`);
4768 (REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
4769 (ONCE_REWRITE_TAC[ASSUME `u1 = EL 1 [u0;u1:real^3]`]);
4771 (REWRITE_WITH `v1:real^3 = EL 1 ul'`);
4772 (ASM_REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
4773 (REWRITE_WITH `[u0;u1:real^3] = truncate_simplex 1 ul'`);
4774 (NEW_GOAL `[u0;u1:real^3] = truncate_simplex (LENGTH [u0;u1] - 1) ul' /\
4775 LENGTH [u0;u1] <= LENGTH ul'`);
4776 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
4777 (ASM_REWRITE_TAC[LENGTH]);
4779 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
4781 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
4782 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
4783 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
4784 (EXISTS_TAC `V:real^3->bool`);
4785 (ASM_REWRITE_TAC[]);
4788 (NEW_GOAL `{u0,u1,u2:real^3} = {v0,v1,v2}`);
4789 (REWRITE_TAC[GSYM set_of_list]);
4790 (REWRITE_WITH `[u0; u1; u2:real^3] = truncate_simplex (3 - 1) ul`);
4791 (ASM_REWRITE_TAC[ARITH_RULE `3 - 1 = 2`; TRUNCATE_SIMPLEX_EXPLICIT_2]);
4792 (REWRITE_WITH `set_of_list (truncate_simplex (3 - 1) ul) =
4793 V INTER (mcell 3 V ul)`);
4794 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4795 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
4796 (REWRITE_WITH `mcell 3 V ul = X`);
4797 (ASM_REWRITE_TAC[]);
4798 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 3 /\ 3 <= 4`]);
4799 (REWRITE_WITH `mcell 3 V ul = X`);
4800 (ASM_REWRITE_TAC[]);
4801 (REWRITE_WITH `X = mcell 3 V ul'`);
4803 (REWRITE_WITH `[v0; v1; v2:real^3] = truncate_simplex (3 - 1) ul'`);
4804 (ASM_REWRITE_TAC[ARITH_RULE `3 - 1 = 2`; TRUNCATE_SIMPLEX_EXPLICIT_2]);
4805 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
4806 (REWRITE_WITH `mcell 3 V ul' = X`);
4808 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 3 /\ 3 <= 4`]);
4809 (NEW_GOAL `u2:real^3 = v2`);
4810 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1) /\ ~(u0 = u2) /\ ~(u0 = u3) /\
4811 ~(u1 = u2) /\ ~(u1 = u3) /\ ~(u2 = u3:real^3)`
4812 THEN ASM_REWRITE_TAC[]);
4813 (EXPAND_TAC "S1" THEN REWRITE_TAC[]);
4815 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `2 = SUC 1 /\ 1 = SUC 0`]);
4817 (REWRITE_WITH `mxi V [v0; v1; v2; v3] = s`);
4819 (MATCH_MP_TAC Marchal_cells_3.MCELL_ID_MXI_2);
4820 (EXISTS_TAC `3` THEN EXISTS_TAC `3`);
4821 (REWRITE_TAC[GSYM (ASSUME `ul' = [v0; v1; v2; v3:real^3]`)]);
4822 (REWRITE_WITH `mcell 3 V ul' = X`);
4824 (ASM_REWRITE_TAC[SET_RULE `3 IN {2,3}`]);
4825 (REWRITE_TAC[GSYM (ASSUME `u0 = v0:real^3`);
4826 GSYM (ASSUME `u1 = v1:real^3`);
4827 GSYM (ASSUME `u2 = v2:real^3`)]);
4828 (EXPAND_TAC "y4" THEN EXPAND_TAC "y5" THEN EXPAND_TAC "y6");
4829 (ONCE_REWRITE_TAC[DIHV_SYM]);
4832 `dih_y (dist (u0,u1)) (dist (u1,u2)) sqrt2 sqrt2 sqrt2 (dist (u0,u2)) =
4833 dih_y (dist (u1,u0)) (dist (u1,u2)) (dist (u1,s))
4834 (dist (u2,s)) (dist (u0,s)) (dist (u0,u2:real^3))`);
4835 (REWRITE_WITH `dist (u1,s) = dist (s,u1:real^3) /\
4836 dist (u2,s) = dist (s,u2) /\ dist (s,u0) = dist (u0,s)`);
4837 (REWRITE_TAC[DIST_SYM]);
4838 (ASM_REWRITE_TAC[DIST_SYM; sqrt2]);
4840 (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] DIHV_EQ_DIH_Y));
4842 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4843 (EXISTS_TAC `s:real^3`);
4844 (ONCE_REWRITE_TAC[SET_RULE `{u1,u0,u2,s} = {u0,u1,u2,s}`]);
4845 (ASM_REWRITE_TAC[]);
4846 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
4847 (EXISTS_TAC `u2:real^3`);
4848 (ONCE_REWRITE_TAC[SET_RULE `{u1,u0,s,u2} = {u0,u1,u2,s}`]);
4849 (ASM_REWRITE_TAC[]);
4853 (UP_ASM_TAC THEN MESON_TAC[]);
4855 (NEW_GOAL `V INTER (X:real^3->bool) = set_of_list (truncate_simplex (3 - 1) ul)`);
4856 (REWRITE_TAC[ASSUME `X = mcell 3 V ul`]);
4857 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
4858 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 3 /\ 3 <= 4`]);
4859 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
4860 (ASM_REWRITE_TAC[]);
4861 (ASM_REWRITE_TAC[]);
4862 (UP_ASM_TAC THEN REWRITE_TAC[]);
4864 (ASM_CASES_TAC `k = 1`);
4865 (REWRITE_WITH `V INTER (X:real^3->bool) =
4866 set_of_list (truncate_simplex (k - 1) ul')`);
4867 (REWRITE_TAC[ASSUME `X = mcell k V ul'`]);
4868 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
4869 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 1 /\ 1 <= 4`]);
4870 (REWRITE_WITH `mcell 1 V ul' = X`);
4871 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 1`]);
4872 (ASM_REWRITE_TAC[]);
4874 (REWRITE_TAC[ARITH_RULE `1 - 1 = 0`; ASSUME `k = 1`]);
4875 (REWRITE_WITH `truncate_simplex 0 (ul':(real^3)list) = [HD ul']`);
4876 (MATCH_MP_TAC Packing3.TRUNCATE_0_EQ_HEAD);
4877 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
4878 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
4879 (EXISTS_TAC `V:real^3->bool`);
4880 (ASM_REWRITE_TAC[]);
4882 (ASM_REWRITE_TAC[ARITH_RULE `3 - 1 = 2`;
4883 TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list; HD]);
4884 (UNDISCH_TAC `~(u0 = u1) /\ ~(u0 = u2) /\ ~(u0 = u3) /\
4885 ~(u1 = u2) /\ ~(u1 = u3) /\ ~(u2 = u3:real^3)`);
4886 (EXPAND_TAC "S2" THEN EXPAND_TAC "S1" THEN SET_TAC[]);
4890 (REWRITE_WITH `V INTER X = {}:real^3->bool`);
4891 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 0`]);
4892 (MATCH_MP_TAC Lepjbdj.LEPJBDJ_0);
4893 (ASM_REWRITE_TAC[]);
4894 (ASM_REWRITE_TAC[ARITH_RULE `3 - 1 = 2`;
4895 TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list]);
4896 (NEW_GOAL `u0 IN {u0,u1,u2:real^3}`);
4898 (UP_ASM_TAC THEN SET_TAC[]);
4899 (UP_ASM_TAC THEN MESON_TAC[]);
4901 (* ======================================================================= *)
4902 (NEW_GOAL `dihX V X (u0,u2) = dih_y y5 y6 sqrt2 sqrt2 sqrt2 y4`);
4903 (REWRITE_TAC[dihX]);
4907 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
4908 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
4911 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
4912 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
4915 initial_sublist [u0; u2] ul)`);
4917 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
4918 (MATCH_MP_TAC SELECT_AX);
4920 (ABBREV_TAC `wl = [u0;u2;u1;u3:real^3]`);
4921 (NEW_GOAL `?p. p permutes 0..2 /\
4922 wl:(real^3)list = left_action_list p ul`);
4923 (ASM_REWRITE_TAC[] THEN EXPAND_TAC "wl");
4924 (MATCH_MP_TAC Marchal_cells_3.LEFT_ACTION_LIST_2_EXISTS);
4926 (ASM_REWRITE_TAC[]);
4927 (EXPAND_TAC "S2" THEN EXPAND_TAC "S1" THEN SET_TAC[]);
4928 (UP_ASM_TAC THEN STRIP_TAC);
4930 (NEW_GOAL `barV V 3 wl`);
4931 (MATCH_MP_TAC Qzksykg.QZKSYKG1);
4932 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `3` THEN EXISTS_TAC `p:num->num`);
4933 (ASM_REWRITE_TAC[SET_RULE `3 IN {0,1,2,3,4}`; ARITH_RULE `3 - 1 = 2`]);
4934 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
4935 (ASM_REWRITE_TAC[]);
4936 (ASM_REWRITE_TAC[]);
4938 (EXISTS_TAC `(3, wl:(real^3)list)`);
4940 (REWRITE_TAC[BETA_THM]);
4941 (ASM_REWRITE_TAC[IN; ARITH_RULE `3 <= 4`]);
4944 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
4945 (MATCH_MP_TAC Rvfxzbu.RVFXZBU);
4946 (ASM_REWRITE_TAC[SET_RULE `3 IN {0,1,2,3,4}`; ARITH_RULE `3 - 1 = 2`]);
4947 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
4948 (ASM_REWRITE_TAC[]);
4949 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
4950 (REWRITE_TAC[GSYM (ASSUME `wl:(real^3)list = left_action_list p ul`)]);
4952 (REWRITE_WITH `[u0; u2; u1; u3] = APPEND [u0; u2] [u1; u3:real^3]`);
4953 (REWRITE_TAC[APPEND]);
4954 (REWRITE_TAC[Packing3.INITIAL_SUBLIST_APPEND]);
4956 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
4957 (EXPAND_TAC "P" THEN REWRITE_TAC[IN]);
4961 (ASM_CASES_TAC `2 <= k`);
4965 (!t. 3 - 1 <= t /\ t <= 3
4966 ==> omega_list_n V ul t = omega_list_n V ul' t)`);
4967 (MATCH_MP_TAC Marchal_cells_3.MCELL_ID_OMEGA_LIST_N);
4968 (ASM_REWRITE_TAC[SET_RULE `x IN {2,3,4} <=> x=2\/x=3\/x=4`]);
4969 (REWRITE_TAC[GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
4970 (REWRITE_WITH `mcell 3 V ul = X`);
4971 (ASM_REWRITE_TAC[]);
4972 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `~NULLSET X`]);
4974 (ASM_REWRITE_TAC[]);
4979 (UP_ASM_TAC THEN MESON_TAC[]);
4982 (* This part is harder than the previous *)
4983 (REWRITE_TAC[dihu3]);
4984 (NEW_GOAL `?v0 v1 v2 v3. ul' = [v0;v1;v2;v3:real^3]`);
4985 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
4986 (EXISTS_TAC `V:real^3->bool`);
4987 (ASM_REWRITE_TAC[]);
4988 (UP_ASM_TAC THEN STRIP_TAC);
4990 (NEW_GOAL `u0 = v0:real^3`);
4991 (NEW_GOAL`u0 = HD [u0;u2:real^3]`);
4993 (ONCE_REWRITE_TAC[ASSUME `u0 = HD[u0;u2:real^3]`]);
4994 (REWRITE_WITH `v0:real^3 = HD ul'`);
4995 (ASM_REWRITE_TAC[HD]);
4996 (REWRITE_WITH `[u0;u2:real^3] = truncate_simplex 1 ul'`);
4997 (NEW_GOAL `[u0;u2:real^3] = truncate_simplex (LENGTH [u0;u2] - 1) ul' /\
4998 LENGTH [u0;u2] <= LENGTH ul'`);
4999 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
5000 (ASM_REWRITE_TAC[LENGTH]);
5002 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
5004 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
5005 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
5006 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
5007 (EXISTS_TAC `V:real^3->bool`);
5008 (ASM_REWRITE_TAC[]);
5011 (NEW_GOAL `u2 = v1:real^3`);
5012 (NEW_GOAL`u2 = EL 1 [u0;u2:real^3]`);
5013 (REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
5014 (ONCE_REWRITE_TAC[ASSUME `u2 = EL 1 [u0;u2:real^3]`]);
5016 (REWRITE_WITH `v1:real^3 = EL 1 ul'`);
5017 (ASM_REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
5018 (REWRITE_WITH `[u0;u2:real^3] = truncate_simplex 1 ul'`);
5019 (NEW_GOAL `[u0;u2:real^3] = truncate_simplex (LENGTH [u0;u2] - 1) ul' /\
5020 LENGTH [u0;u2] <= LENGTH ul'`);
5021 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
5022 (ASM_REWRITE_TAC[LENGTH]);
5024 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
5026 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
5027 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
5028 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
5029 (EXISTS_TAC `V:real^3->bool`);
5030 (ASM_REWRITE_TAC[]);
5033 (NEW_GOAL `{u0,u1,u2:real^3} = {v0,v1,v2}`);
5034 (REWRITE_TAC[GSYM set_of_list]);
5035 (REWRITE_WITH `[u0; u1; u2:real^3] = truncate_simplex (3 - 1) ul`);
5036 (ASM_REWRITE_TAC[ARITH_RULE `3 - 1 = 2`; TRUNCATE_SIMPLEX_EXPLICIT_2]);
5037 (REWRITE_WITH `set_of_list (truncate_simplex (3 - 1) ul) =
5038 V INTER (mcell 3 V ul)`);
5039 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
5040 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
5041 (REWRITE_WITH `mcell 3 V ul = X`);
5042 (ASM_REWRITE_TAC[]);
5043 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 3 /\ 3 <= 4`]);
5044 (REWRITE_WITH `mcell 3 V ul = X`);
5045 (ASM_REWRITE_TAC[]);
5046 (REWRITE_WITH `X = mcell 3 V ul'`);
5048 (REWRITE_WITH `[v0; v1; v2:real^3] = truncate_simplex (3 - 1) ul'`);
5049 (ASM_REWRITE_TAC[ARITH_RULE `3 - 1 = 2`; TRUNCATE_SIMPLEX_EXPLICIT_2]);
5050 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
5051 (REWRITE_WITH `mcell 3 V ul' = X`);
5053 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 3 /\ 3 <= 4`]);
5055 (NEW_GOAL `u1:real^3 = v2`);
5056 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1) /\ ~(u0 = u2) /\ ~(u0 = u3) /\
5057 ~(u1 = u2) /\ ~(u1 = u3) /\ ~(u2 = u3:real^3)`
5058 THEN ASM_REWRITE_TAC[]);
5059 (EXPAND_TAC "S2" THEN EXPAND_TAC "S1" THEN SET_TAC[]);
5061 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `2 = SUC 1 /\ 1 = SUC 0`]);
5062 (REWRITE_WITH `mxi V [v0; v1; v2; v3] = s`);
5064 (MATCH_MP_TAC Marchal_cells_3.MCELL_ID_MXI_2);
5065 (EXISTS_TAC `3` THEN EXISTS_TAC `3`);
5066 (REWRITE_TAC[GSYM (ASSUME `ul' = [v0; v1; v2; v3:real^3]`)]);
5067 (REWRITE_WITH `mcell 3 V ul' = X`);
5069 (ASM_REWRITE_TAC[SET_RULE `3 IN {2,3}`]);
5070 (REWRITE_TAC[GSYM (ASSUME `u0 = v0:real^3`);
5071 GSYM (ASSUME `u2 = v1:real^3`);
5072 GSYM (ASSUME `u1 = v2:real^3`)]);
5073 (EXPAND_TAC "y4" THEN EXPAND_TAC "y5" THEN EXPAND_TAC "y6");
5076 `dih_y (dist (u0,u2)) (dist (u0,u1)) sqrt2 sqrt2 sqrt2 (dist (u1,u2)) =
5077 dih_y (dist (u0,u2)) (dist (u0,u1)) (dist (u0,s))
5078 (dist (u1,s)) (dist (u2,s)) (dist (u2,u1:real^3))`);
5079 (REWRITE_WITH `dist (u1,s) = dist (s,u1:real^3) /\
5080 dist (u2,s) = dist (s,u2) /\ dist (s,u0) = dist (u0,s)`);
5081 (REWRITE_TAC[DIST_SYM]);
5082 (ASM_REWRITE_TAC[DIST_SYM; sqrt2]);
5084 (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] DIHV_EQ_DIH_Y));
5086 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
5087 (EXISTS_TAC `s:real^3`);
5088 (ONCE_REWRITE_TAC[SET_RULE `{u0,u2,u1,s} = {u0,u1,u2,s}`]);
5089 (ASM_REWRITE_TAC[]);
5090 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
5091 (EXISTS_TAC `u1:real^3`);
5092 (ONCE_REWRITE_TAC[SET_RULE `{u0,u2,s,u1} = {u0,u1,u2,s}`]);
5093 (ASM_REWRITE_TAC[]);
5097 (UP_ASM_TAC THEN MESON_TAC[]);
5099 (NEW_GOAL `V INTER (X:real^3->bool) = set_of_list (truncate_simplex (3 - 1) ul)`);
5100 (REWRITE_TAC[ASSUME `X = mcell 3 V ul`]);
5101 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
5102 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 3 /\ 3 <= 4`]);
5103 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
5104 (ASM_REWRITE_TAC[]);
5105 (ASM_REWRITE_TAC[]);
5106 (UP_ASM_TAC THEN REWRITE_TAC[]);
5108 (ASM_CASES_TAC `k = 1`);
5109 (REWRITE_WITH `V INTER (X:real^3->bool) =
5110 set_of_list (truncate_simplex (k - 1) ul')`);
5111 (REWRITE_TAC[ASSUME `X = mcell k V ul'`]);
5112 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
5113 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 1 /\ 1 <= 4`]);
5114 (REWRITE_WITH `mcell 1 V ul' = X`);
5115 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 1`]);
5116 (ASM_REWRITE_TAC[]);
5118 (REWRITE_TAC[ARITH_RULE `1 - 1 = 0`; ASSUME `k = 1`]);
5119 (REWRITE_WITH `truncate_simplex 0 (ul':(real^3)list) = [HD ul']`);
5120 (MATCH_MP_TAC Packing3.TRUNCATE_0_EQ_HEAD);
5121 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
5122 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
5123 (EXISTS_TAC `V:real^3->bool`);
5124 (ASM_REWRITE_TAC[]);
5126 (ASM_REWRITE_TAC[ARITH_RULE `3 - 1 = 2`;
5127 TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list; HD]);
5129 (UNDISCH_TAC `~(u0 = u1) /\ ~(u0 = u2) /\ ~(u0 = u3) /\
5130 ~(u1 = u2) /\ ~(u1 = u3) /\ ~(u2 = u3:real^3)`);
5131 (EXPAND_TAC "S2" THEN EXPAND_TAC "S1" THEN SET_TAC[]);
5135 (REWRITE_WITH `V INTER X = {}:real^3->bool`);
5136 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 0`]);
5137 (MATCH_MP_TAC Lepjbdj.LEPJBDJ_0);
5138 (ASM_REWRITE_TAC[]);
5139 (ASM_REWRITE_TAC[ARITH_RULE `3 - 1 = 2`;
5140 TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list]);
5141 (NEW_GOAL `u0 IN {u0,u1,u2:real^3}`);
5143 (UP_ASM_TAC THEN SET_TAC[]);
5144 (UP_ASM_TAC THEN MESON_TAC[]);
5146 (* ========================================================================= *)
5148 (NEW_GOAL `dihX V X (u1,u2) = dih_y y4 y5 sqrt2 sqrt2 sqrt2 y6`);
5149 (REWRITE_TAC[dihX]);
5153 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
5154 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
5157 (UP_ASM_TAC THEN REWRITE_TAC[cell_params_d]);
5158 (ABBREV_TAC `P = (\(k, ul). k <= 4 /\
5161 initial_sublist [u1; u2] ul)`);
5163 (NEW_GOAL `(P:num#(real^3)list->bool) ((@) P)`);
5164 (MATCH_MP_TAC SELECT_AX);
5166 (ABBREV_TAC `wl = [u1;u2;u0;u3:real^3]`);
5167 (NEW_GOAL `?p. p permutes 0..2 /\
5168 wl:(real^3)list = left_action_list p ul`);
5169 (ASM_REWRITE_TAC[] THEN EXPAND_TAC "wl");
5170 (MATCH_MP_TAC Marchal_cells_3.LEFT_ACTION_LIST_2_EXISTS);
5171 (ASM_REWRITE_TAC[]);
5172 (EXPAND_TAC "S2" THEN EXPAND_TAC "S1" THEN SET_TAC[]);
5173 (UP_ASM_TAC THEN STRIP_TAC);
5175 (NEW_GOAL `barV V 3 wl`);
5176 (MATCH_MP_TAC Qzksykg.QZKSYKG1);
5177 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `3` THEN EXISTS_TAC `p:num->num`);
5178 (ASM_REWRITE_TAC[SET_RULE `3 IN {0,1,2,3,4}`; ARITH_RULE `3 - 1 = 2`]);
5179 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
5180 (ASM_REWRITE_TAC[]);
5181 (ASM_REWRITE_TAC[]);
5183 (EXISTS_TAC `(3, wl:(real^3)list)`);
5185 (REWRITE_TAC[BETA_THM]);
5186 (ASM_REWRITE_TAC[IN; ARITH_RULE `3 <= 4`]);
5189 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
5190 (MATCH_MP_TAC Rvfxzbu.RVFXZBU);
5191 (ASM_REWRITE_TAC[SET_RULE `3 IN {0,1,2,3,4}`; ARITH_RULE `3 - 1 = 2`]);
5192 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
5193 (ASM_REWRITE_TAC[]);
5194 (REWRITE_TAC[GSYM (ASSUME `ul = [u0; u1; u2; u3:real^3]`)]);
5195 (REWRITE_TAC[GSYM (ASSUME `wl:(real^3)list = left_action_list p ul`)]);
5197 (REWRITE_WITH `[u1; u2; u0; u3] = APPEND [u1; u2] [u0; u3:real^3]`);
5198 (REWRITE_TAC[APPEND]);
5199 (REWRITE_TAC[Packing3.INITIAL_SUBLIST_APPEND]);
5201 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
5202 (EXPAND_TAC "P" THEN REWRITE_TAC[IN]);
5206 (ASM_CASES_TAC `2 <= k`);
5210 (!t. 3 - 1 <= t /\ t <= 3
5211 ==> omega_list_n V ul t = omega_list_n V ul' t)`);
5212 (MATCH_MP_TAC Marchal_cells_3.MCELL_ID_OMEGA_LIST_N);
5213 (ASM_REWRITE_TAC[SET_RULE `x IN {2,3,4} <=> x=2\/x=3\/x=4`]);
5214 (REWRITE_TAC[GSYM (ASSUME `ul = [u0;u1;u2;u3:real^3]`)]);
5215 (REWRITE_WITH `mcell 3 V ul = X`);
5216 (ASM_REWRITE_TAC[]);
5217 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `~NULLSET X`]);
5219 (ASM_REWRITE_TAC[]);
5224 (UP_ASM_TAC THEN MESON_TAC[]);
5227 (* This part is harder than the previous *)
5228 (REWRITE_TAC[dihu3]);
5229 (NEW_GOAL `?v0 v1 v2 v3. ul' = [v0;v1;v2;v3:real^3]`);
5230 (MATCH_MP_TAC Marchal_cells.BARV_3_EXPLICIT);
5231 (EXISTS_TAC `V:real^3->bool`);
5232 (ASM_REWRITE_TAC[]);
5233 (UP_ASM_TAC THEN STRIP_TAC);
5235 (NEW_GOAL `u1 = v0:real^3`);
5236 (NEW_GOAL`u1 = HD [u1;u2:real^3]`);
5238 (ONCE_REWRITE_TAC[ASSUME `u1 = HD[u1;u2:real^3]`]);
5239 (REWRITE_WITH `v0:real^3 = HD ul'`);
5240 (ASM_REWRITE_TAC[HD]);
5241 (REWRITE_WITH `[u1;u2:real^3] = truncate_simplex 1 ul'`);
5242 (NEW_GOAL `[u1;u2:real^3] = truncate_simplex (LENGTH [u1;u2] - 1) ul' /\
5243 LENGTH [u1;u2] <= LENGTH ul'`);
5244 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
5245 (ASM_REWRITE_TAC[LENGTH]);
5247 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
5249 (MATCH_MP_TAC Packing3.HD_TRUNCATE_SIMPLEX);
5250 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
5251 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
5252 (EXISTS_TAC `V:real^3->bool`);
5253 (ASM_REWRITE_TAC[]);
5256 (NEW_GOAL `u2 = v1:real^3`);
5257 (NEW_GOAL`u2 = EL 1 [u1;u2:real^3]`);
5258 (REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
5259 (ONCE_REWRITE_TAC[ASSUME `u2 = EL 1 [u1;u2:real^3]`]);
5261 (REWRITE_WITH `v1:real^3 = EL 1 ul'`);
5262 (ASM_REWRITE_TAC[EL; ARITH_RULE `1 = SUC 0`; TL; HD]);
5263 (REWRITE_WITH `[u1;u2:real^3] = truncate_simplex 1 ul'`);
5264 (NEW_GOAL `[u1;u2:real^3] = truncate_simplex (LENGTH [u1;u2] - 1) ul' /\
5265 LENGTH [u1;u2] <= LENGTH ul'`);
5266 (MATCH_MP_TAC Packing3.INITIAL_SUBLIST_IMP_TRUNCATE_SIMPLEX);
5267 (ASM_REWRITE_TAC[LENGTH]);
5270 (UP_ASM_TAC THEN REWRITE_TAC[LENGTH; ARITH_RULE `SUC(SUC(0)) - 1 = 1`]);
5272 (MATCH_MP_TAC Packing3.EL_TRUNCATE_SIMPLEX);
5273 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
5274 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
5275 (EXISTS_TAC `V:real^3->bool`);
5276 (ASM_REWRITE_TAC[]);
5279 (NEW_GOAL `{u0,u1,u2:real^3} = {v0,v1,v2}`);
5280 (REWRITE_TAC[GSYM set_of_list]);
5281 (REWRITE_WITH `[u0; u1; u2:real^3] = truncate_simplex (3 - 1) ul`);
5282 (ASM_REWRITE_TAC[ARITH_RULE `3 - 1 = 2`; TRUNCATE_SIMPLEX_EXPLICIT_2]);
5283 (REWRITE_WITH `set_of_list (truncate_simplex (3 - 1) ul) =
5284 V INTER (mcell 3 V ul)`);
5285 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
5286 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
5287 (REWRITE_WITH `mcell 3 V ul = X`);
5288 (ASM_REWRITE_TAC[]);
5289 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 3 /\ 3 <= 4`]);
5290 (REWRITE_WITH `mcell 3 V ul = X`);
5291 (ASM_REWRITE_TAC[]);
5292 (REWRITE_WITH `X = mcell 3 V ul'`);
5294 (REWRITE_WITH `[v0; v1; v2:real^3] = truncate_simplex (3 - 1) ul'`);
5295 (ASM_REWRITE_TAC[ARITH_RULE `3 - 1 = 2`; TRUNCATE_SIMPLEX_EXPLICIT_2]);
5296 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
5297 (REWRITE_WITH `mcell 3 V ul' = X`);
5299 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 3 /\ 3 <= 4`]);
5301 (NEW_GOAL `u0:real^3 = v2`);
5302 (UP_ASM_TAC THEN UNDISCH_TAC `~(u0 = u1) /\ ~(u0 = u2) /\ ~(u0 = u3) /\
5303 ~(u1 = u2) /\ ~(u1 = u3) /\ ~(u2 = u3:real^3)`
5304 THEN ASM_REWRITE_TAC[]);
5305 (EXPAND_TAC "S2" THEN EXPAND_TAC "S1" THEN SET_TAC[]);
5307 (ASM_REWRITE_TAC[EL;HD;TL; ARITH_RULE `2 = SUC 1 /\ 1 = SUC 0`]);
5308 (REWRITE_WITH `mxi V [v0; v1; v2; v3] = s`);
5310 (MATCH_MP_TAC Marchal_cells_3.MCELL_ID_MXI_2);
5311 (EXISTS_TAC `3` THEN EXISTS_TAC `3`);
5312 (REWRITE_TAC[GSYM (ASSUME `ul' = [v0; v1; v2; v3:real^3]`)]);
5313 (REWRITE_WITH `mcell 3 V ul' = X`);
5315 (ASM_REWRITE_TAC[SET_RULE `3 IN {2,3}`]);
5316 (REWRITE_TAC[GSYM (ASSUME `u1 = v0:real^3`);
5317 GSYM (ASSUME `u2 = v1:real^3`);
5318 GSYM (ASSUME `u0 = v2:real^3`)]);
5319 (EXPAND_TAC "y4" THEN EXPAND_TAC "y5" THEN EXPAND_TAC "y6");
5320 (ONCE_REWRITE_TAC[DIHV_SYM]);
5322 `dih_y (dist (u1,u2)) (dist (u0,u2)) sqrt2 sqrt2 sqrt2 (dist (u0,u1)) =
5323 dih_y (dist (u2,u1)) (dist (u2,u0)) (dist (u2,s))
5324 (dist (u0,s)) (dist (u1,s)) (dist (u1,u0:real^3))`);
5325 (REWRITE_WITH `dist (u1,s) = dist (s,u1:real^3) /\
5326 dist (u2,s) = dist (s,u2) /\ dist (s,u0) = dist (u0,s)`);
5327 (REWRITE_TAC[DIST_SYM]);
5328 (ASM_REWRITE_TAC[DIST_SYM; sqrt2]);
5330 (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] DIHV_EQ_DIH_Y));
5332 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
5333 (EXISTS_TAC `s:real^3`);
5334 (ONCE_REWRITE_TAC[SET_RULE `{u2,u1,u0,s} = {u0,u1,u2,s}`]);
5335 (ASM_REWRITE_TAC[]);
5336 (MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR);
5337 (EXISTS_TAC `u0:real^3`);
5338 (ONCE_REWRITE_TAC[SET_RULE `{u2,u1,s,u0} = {u0,u1,u2,s}`]);
5339 (ASM_REWRITE_TAC[]);
5343 (UP_ASM_TAC THEN MESON_TAC[]);
5345 (NEW_GOAL `V INTER (X:real^3->bool) = set_of_list (truncate_simplex (3 - 1) ul)`);
5346 (REWRITE_TAC[ASSUME `X = mcell 3 V ul`]);
5347 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
5348 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 3 /\ 3 <= 4`]);
5349 (REWRITE_WITH `mcell 3 V [u0; u1; u2; u3] = X`);
5350 (ASM_REWRITE_TAC[]);
5351 (ASM_REWRITE_TAC[]);
5352 (UP_ASM_TAC THEN REWRITE_TAC[]);
5354 (ASM_CASES_TAC `k = 1`);
5355 (REWRITE_WITH `V INTER (X:real^3->bool) =
5356 set_of_list (truncate_simplex (k - 1) ul')`);
5357 (REWRITE_TAC[ASSUME `X = mcell k V ul'`]);
5358 (MATCH_MP_TAC Lepjbdj.LEPJBDJ);
5359 (ASM_REWRITE_TAC[ARITH_RULE `1 <= 1 /\ 1 <= 4`]);
5360 (REWRITE_WITH `mcell 1 V ul' = X`);
5361 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 1`]);
5362 (ASM_REWRITE_TAC[]);
5364 (REWRITE_TAC[ARITH_RULE `1 - 1 = 0`; ASSUME `k = 1`]);
5365 (REWRITE_WITH `truncate_simplex 0 (ul':(real^3)list) = [HD ul']`);
5366 (MATCH_MP_TAC Packing3.TRUNCATE_0_EQ_HEAD);
5367 (REWRITE_WITH `LENGTH (ul':(real^3)list) = 3 + 1`);
5368 (MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA);
5369 (EXISTS_TAC `V:real^3->bool`);
5370 (ASM_REWRITE_TAC[]);
5372 (ASM_REWRITE_TAC[ARITH_RULE `3 - 1 = 2`;
5373 TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list; HD]);
5374 (UNDISCH_TAC `~(u0 = u1) /\ ~(u0 = u2) /\ ~(u0 = u3) /\
5375 ~(u1 = u2) /\ ~(u1 = u3) /\ ~(u2 = u3:real^3)`);
5376 (EXPAND_TAC "S2" THEN EXPAND_TAC "S1" THEN SET_TAC[]);
5380 (REWRITE_WITH `V INTER X = {}:real^3->bool`);
5381 (REWRITE_TAC[ASSUME `X = mcell k V ul'`; ASSUME `k = 0`]);
5382 (MATCH_MP_TAC Lepjbdj.LEPJBDJ_0);
5383 (ASM_REWRITE_TAC[]);
5384 (ASM_REWRITE_TAC[ARITH_RULE `3 - 1 = 2`;
5385 TRUNCATE_SIMPLEX_EXPLICIT_2; set_of_list]);
5386 (NEW_GOAL `u0 IN {u0,u1,u2:real^3}`);
5388 (UP_ASM_TAC THEN SET_TAC[]);
5389 (UP_ASM_TAC THEN MESON_TAC[]);
5391 (REWRITE_TAC[ASSUME `dihX V X (u0,u1) = dih_y y6 y4 sqrt2 sqrt2 sqrt2 y5`]);
5392 (REWRITE_TAC[ASSUME `dihX V X (u0,u2) = dih_y y5 y6 sqrt2 sqrt2 sqrt2 y4`]);
5393 (REWRITE_TAC[ASSUME `dihX V X (u1,u2) = dih_y y4 y5 sqrt2 sqrt2 sqrt2 y6`]);
5395 (* ======================================================================== *)
5398 REAL_ARITH `(a:real) = x /\ b = y /\ c = z ==> (a - b + c = x - (y - z))`));
5405 (NEW_GOAL `edgeX V X = {{u0,u1:real^3}, {u0,u2}, {u1,u2}}`);
5406 (REWRITE_TAC[edgeX]);
5407 (ONCE_REWRITE_TAC[SET_EQ_LEMMA]);
5408 (REWRITE_TAC[IN_ELIM_THM]);
5411 (UNDISCH_TAC `VX V X u` THEN UNDISCH_TAC `VX V X v`);
5412 (REWRITE_TAC[MESON[IN] `VX V X s <=> s IN VX V X`]);
5413 (REWRITE_TAC[ASSUME `VX V X = {u0,u1,u2}`;
5414 SET_RULE `v IN {u0, u1, u2} <=> v=u0 \/ v = u1 \/ v = u2`]);
5419 (REWRITE_WITH `{u,v} = {v,u:real^3}`);
5421 (ASM_REWRITE_TAC[] THEN SET_TAC[]);
5422 (REWRITE_WITH `{u,v} = {v,u:real^3}`);
5425 (REWRITE_TAC[ASSUME `x = {u, v:real^3}`; ASSUME `u = u2:real^3`;
5426 ASSUME `v = u0:real^3`] THEN SET_TAC[]);
5427 (REWRITE_WITH `{u,v} = {v,u:real^3}`);
5429 (REWRITE_TAC[ASSUME `x = {u, v:real^3}`; ASSUME `u = u0:real^3`;
5430 ASSUME `v = u1:real^3`] THEN SET_TAC[]);
5434 (REWRITE_WITH `{u,v} = {v,u:real^3}`);
5436 (REWRITE_TAC[ASSUME `x = {u, v:real^3}`; ASSUME `u = u2:real^3`;
5437 ASSUME `v = u1:real^3`] THEN SET_TAC[]);
5438 (REWRITE_TAC[ASSUME `x = {u, v:real^3}`; ASSUME `u = u0:real^3`;
5439 ASSUME `v = u2:real^3`] THEN SET_TAC[]);
5440 (REWRITE_TAC[ASSUME `x = {u, v:real^3}`; ASSUME `u = u1:real^3`;
5441 ASSUME `v = u2:real^3`] THEN SET_TAC[]);
5446 (UP_ASM_TAC THEN REWRITE_TAC[SET_RULE `x IN {a,b,c} <=> x=a\/x=b\/x=c`]);
5447 (REWRITE_TAC[MESON[IN] `VX V X s <=> s IN VX V X`]);
5448 (REWRITE_TAC[ASSUME `VX V X = {u0,u1,u2:real^3}`;
5449 SET_RULE `v IN {u0, u1, u2} <=> v = u0 \/ v = u1 \/ v = u2`]);
5451 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3` THEN ASM_REWRITE_TAC[]);
5452 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u2:real^3` THEN ASM_REWRITE_TAC[]);
5453 (EXISTS_TAC `u1:real^3` THEN EXISTS_TAC `u2:real^3` THEN ASM_REWRITE_TAC[]);
5456 (\({u, v}). if {u, v} IN edgeX V X
5457 then dihX V X (u,v) * lmfun (hl [u; v])
5459 (REWRITE_TAC[ASSUME `edgeX V X = {{u0, u1}, {u0, u2}, {u1, u2}}`]);
5461 (ABBREV_TAC `H2 = {{u0, u2}, {u1, u2:real^3}}`);
5462 (REWRITE_WITH `sum ({u0,u1:real^3} INSERT H2) f =
5463 (if {u0,u1} IN H2 then sum H2 f else f {u0,u1} + sum H2 f)`);
5464 (MATCH_MP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
5466 (REWRITE_TAC[Geomdetail.FINITE6]);
5469 (UP_ASM_TAC THEN EXPAND_TAC "H2");
5470 (REWRITE_TAC[SET_RULE `x IN {a,b} <=> x=a\/x=b`]);
5472 `~(u0 = u1:real^3) /\ ~(u0 = u2) /\ ~(u0 = u3) /\ ~(u1 = u2) /\
5473 ~(u1 = u3) /\ ~(u2 = u3)`]);
5474 (UP_ASM_TAC THEN MESON_TAC[]);
5477 (ABBREV_TAC `H1 = {{u1, u2:real^3}}`);
5478 (REWRITE_WITH `sum ({u0,u2:real^3} INSERT H1) f =
5479 (if {u0,u2} IN H1 then sum H1 f else f {u0,u2} + sum H1 f)`);
5480 (MATCH_MP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
5482 (REWRITE_TAC[Geomdetail.FINITE6]);
5486 (UP_ASM_TAC THEN EXPAND_TAC "H1");
5487 (REWRITE_TAC[SET_RULE `x IN {a} <=> x=a`]);
5489 `~(u0 = u1:real^3) /\ ~(u0 = u2) /\ ~(u0 = u3) /\ ~(u1 = u2) /\
5490 ~(u1 = u3) /\ ~(u2 = u3)`]);
5491 (UP_ASM_TAC THEN MESON_TAC[]);
5492 (EXPAND_TAC "H1" THEN REWRITE_TAC[SUM_SING]);
5494 (REWRITE_WITH `f {u0, u1:real^3} =
5495 lmfun (y6 / &2) * dih_y y6 y4 sqrt2 sqrt2 sqrt2 y5`);
5498 (ABBREV_TAC `g = (\u v. if {u, v:real^3} IN edgeX V X
5499 then dihX V X (u,v) * lmfun (hl [u; v])
5501 (REWRITE_WITH `(\({u, v}). if {u, v} IN edgeX V X
5502 then dihX V X (u,v) * lmfun (hl [u; v])
5503 else &0) = (\({u, v:real^3}). g u v)`);
5504 (EXPAND_TAC "g" THEN REWRITE_TAC[]);
5505 (REWRITE_WITH `(\({u, v:real^3}). g u v) {u0, u1} = (g u0 u1):real`);
5506 (MATCH_MP_TAC BETA_PAIR_THM);
5507 (REPEAT STRIP_TAC THEN EXPAND_TAC "g" );
5510 (REWRITE_WITH `dihX V X (u,v) = dihX V X (v,u)`);
5511 (MATCH_MP_TAC Marchal_cells_3.DIHX_SYM);
5512 (REWRITE_TAC[mcell_set; IN_ELIM_THM]);
5513 (ASM_REWRITE_TAC[IN]);
5514 (EXISTS_TAC `3:num` THEN EXISTS_TAC `ul:(real^3)list` THEN ASM_REWRITE_TAC[]);
5515 (REWRITE_TAC[HL; set_of_list; SET_RULE `{a,b} = {b,a}`]);
5517 (UP_ASM_TAC THEN REWRITE_TAC[]);
5518 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
5519 (ASM_REWRITE_TAC[]);
5520 (UP_ASM_TAC THEN MESON_TAC[]);
5523 (UP_ASM_TAC THEN REWRITE_TAC[]);
5524 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
5525 (ASM_REWRITE_TAC[]);
5526 (UP_ASM_TAC THEN MESON_TAC[]);
5530 (REWRITE_TAC[HL_2; REAL_ARITH `inv(&2) * a = a / &2`]);
5531 (REWRITE_TAC[REAL_ARITH ` t * lmfun(s) = lmfun(s) * t`]);
5532 (EXPAND_TAC "y6" THEN AP_TERM_TAC);
5534 (REWRITE_TAC[ASSUME `dist (u0,u1:real^3) = y6`]);
5535 (ASM_REWRITE_TAC[]);
5538 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
5540 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
5543 (REWRITE_WITH `f {u0, u2:real^3} =
5544 lmfun (y5 / &2) * dih_y y5 y6 sqrt2 sqrt2 sqrt2 y4`);
5547 (ABBREV_TAC `g = (\u v. if {u, v:real^3} IN edgeX V X
5548 then dihX V X (u,v) * lmfun (hl [u; v])
5550 (REWRITE_WITH `(\({u, v}). if {u, v} IN edgeX V X
5551 then dihX V X (u,v) * lmfun (hl [u; v])
5552 else &0) = (\({u, v:real^3}). g u v)`);
5553 (EXPAND_TAC "g" THEN REWRITE_TAC[]);
5554 (REWRITE_WITH `(\({u, v:real^3}). g u v) {u0, u2} = (g u0 u2):real`);
5555 (MATCH_MP_TAC BETA_PAIR_THM);
5556 (REPEAT STRIP_TAC THEN EXPAND_TAC "g" );
5559 (REWRITE_WITH `dihX V X (u,v) = dihX V X (v,u)`);
5560 (MATCH_MP_TAC Marchal_cells_3.DIHX_SYM);
5561 (REWRITE_TAC[mcell_set; IN_ELIM_THM]);
5562 (ASM_REWRITE_TAC[IN]);
5563 (EXISTS_TAC `3:num` THEN EXISTS_TAC `ul:(real^3)list` THEN ASM_REWRITE_TAC[]);
5564 (REWRITE_TAC[HL; set_of_list; SET_RULE `{a,b} = {b,a}`]);
5566 (UP_ASM_TAC THEN REWRITE_TAC[]);
5567 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
5568 (ASM_REWRITE_TAC[]);
5569 (UP_ASM_TAC THEN MESON_TAC[]);
5572 (UP_ASM_TAC THEN REWRITE_TAC[]);
5573 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
5574 (ASM_REWRITE_TAC[]);
5575 (UP_ASM_TAC THEN MESON_TAC[]);
5580 (REWRITE_TAC[HL_2; REAL_ARITH `inv(&2) * a = a / &2`]);
5581 (REWRITE_TAC[REAL_ARITH ` t * lmfun(s) = lmfun(s) * t`]);
5582 (EXPAND_TAC "y5" THEN AP_TERM_TAC);
5584 (REWRITE_TAC[ASSUME `dist (u0,u2:real^3) = y5`]);
5585 (ASM_REWRITE_TAC[]);
5588 (UP_ASM_TAC THEN REWRITE_TAC[ASSUME `edgeX V X = {u0, u1} INSERT H2`]);
5589 (EXPAND_TAC "H2" THEN SET_TAC[]);
5590 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
5593 (REWRITE_WITH `f {u1, u2:real^3} =
5594 lmfun (y4 / &2) * dih_y y4 y5 sqrt2 sqrt2 sqrt2 y6`);
5597 (ABBREV_TAC `g = (\u v. if {u, v:real^3} IN edgeX V X
5598 then dihX V X (u,v) * lmfun (hl [u; v])
5600 (REWRITE_WITH `(\({u, v}). if {u, v} IN edgeX V X
5601 then dihX V X (u,v) * lmfun (hl [u; v])
5602 else &0) = (\({u, v:real^3}). g u v)`);
5603 (EXPAND_TAC "g" THEN REWRITE_TAC[]);
5604 (REWRITE_WITH `(\({u, v:real^3}). g u v) {u1, u2} = (g u1 u2):real`);
5605 (MATCH_MP_TAC BETA_PAIR_THM);
5606 (REPEAT STRIP_TAC THEN EXPAND_TAC "g" );
5609 (REWRITE_WITH `dihX V X (u,v) = dihX V X (v,u)`);
5610 (MATCH_MP_TAC Marchal_cells_3.DIHX_SYM);
5611 (REWRITE_TAC[mcell_set; IN_ELIM_THM]);
5612 (ASM_REWRITE_TAC[IN]);
5613 (EXISTS_TAC `3` THEN EXISTS_TAC `ul:(real^3)list` THEN ASM_REWRITE_TAC[]);
5614 (REWRITE_TAC[HL; set_of_list; SET_RULE `{a,b} = {b,a}`]);
5616 (UP_ASM_TAC THEN REWRITE_TAC[]);
5617 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
5618 (ASM_REWRITE_TAC[]);
5619 (UP_ASM_TAC THEN MESON_TAC[]);
5622 (UP_ASM_TAC THEN REWRITE_TAC[]);
5623 (ONCE_REWRITE_TAC[SET_RULE `{a,b} = {b,a}`]);
5624 (ASM_REWRITE_TAC[]);
5625 (UP_ASM_TAC THEN MESON_TAC[]);
5630 (REWRITE_TAC[HL_2; REAL_ARITH `inv(&2) * a = a / &2`]);
5631 (REWRITE_TAC[REAL_ARITH ` t * lmfun(s) = lmfun(s) * t`]);
5632 (EXPAND_TAC "y4" THEN AP_TERM_TAC);
5635 (REWRITE_TAC[ASSUME `dist (u1,u2:real^3) = y4`]);
5636 (ASM_REWRITE_TAC[]);
5639 (UP_ASM_TAC THEN REWRITE_TAC[ASSUME `edgeX V X = {u0, u1} INSERT H2`]);
5640 (EXPAND_TAC "H2" THEN EXPAND_TAC "H1" THEN SET_TAC[]);
5641 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
5644 (STRIP_TAC THEN NEW_GOAL `F`);
5645 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
5646 (UP_ASM_TAC THEN ASM_REWRITE_TAC[])]);;
5648 (* ======================================================================= *)
5649 (* From Thomas Hales *)
5650 (* ======================================================================= *)
5652 let HJKDESR1a_1cell = prove_by_refinement(
5653 `&0 < &8 * pi * sqrt2 / &3 - &8 * mm1 `,
5656 REWRITE_TAC[ arith `&8 * pi * sqrt2 / &3 = (&8 / &3) * (pi * sqrt2)`];
5657 MATCH_MP_TAC (arith `&3 * mm1 < z ==> &0 < (&8/ &3) * z - &8 * mm1`);
5658 MATCH_MP_TAC REAL_LT_TRANS;
5659 EXISTS_TAC (`&3 * #1.3`);
5660 GMATCH_SIMP_TAC REAL_LT_LMUL_EQ;
5661 GMATCH_SIMP_TAC REAL_LT_MUL2;
5662 MP_TAC Flyspeck_constants.bounds;