1 (* ========================================================================= *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
4 (* Authour : VU KHAC KY *)
5 (* Book lemma: UPFZBZM *)
6 (* SUM_GAMMAX_LMFUN_ESTIMATE - a supported lemma. *)
7 (* Chaper : Packing (Clusters) *)
9 (* ========================================================================= *)
11 module Sum_gammax_lmfun_estimate = 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 let TSKAJXY_statement = new_definition
45 `TSKAJXY_statement <=>
50 critical_edgeX V X = {}
51 ==> gammaX V X lmfun >= &0)`;;
53 let SUM_GAMMAX_LMFUN_ESTIMATE_concl =
54 `!V. ?c. !r. saturated V /\ packing V /\ &1 <= r /\
55 cell_cluster_estimate_v1 V /\ TSKAJXY_statement ==>
56 c * r pow 2 <= sum {X | X SUBSET ball (vec 0, r) /\ mcell_set V X}
57 (\X. gammaX V X lmfun)`;;
59 (* ========================================================================= *)
60 (* ========================================================================= *)
62 let SUM_GAMMAX_LMFUN_ESTIMATE = prove_by_refinement (
63 SUM_GAMMAX_LMFUN_ESTIMATE_concl,
67 (* ================== Choose the constants ================================= *)
69 (NEW_GOAL `?cc1. (&1 <= cc1) /\ (!V X.
70 packing V /\ saturated V /\ mcell_set V X
71 ==> gammaX V X lmfun <= cc1)`);
72 (MP_TAC BOUND_GAMMA_X_lmfun THEN STRIP_TAC);
73 (EXISTS_TAC `max (c:real) (&1)`);
77 (NEW_GOAL `gammaX V X lmfun <= c`);
80 (UP_ASM_TAC THEN STRIP_TAC);
82 (NEW_GOAL `?cc2. (&1 <= cc2) /\
84 saturated V /\ packing V /\ u0 IN V
85 ==> & (CARD {X | mcell_set V X /\ VX V X u0}) <= cc2)`);
87 (MP_TAC CARD_MCELL_CONTAINS_POINT_klemma);
89 (EXISTS_TAC `max (&c:real) (&1)`);
93 (NEW_GOAL `&(CARD {X | mcell_set V X /\ VX V X u0}) <= (&c:real)`);
94 (REWRITE_TAC[REAL_OF_NUM_LE]);
96 (ABBREV_TAC `s = &(CARD {X | mcell_set V X /\ VX V X u0})`);
98 (UP_ASM_TAC THEN STRIP_TAC);
103 saturated V /\ packing V /\ mcell_set V X /\ critical_edgeX V X e
104 ==> beta_bump_v1 V e X <= cc3)`);
105 (MP_TAC Bump.BOUND_BETA_BUMP THEN STRIP_TAC);
106 (EXISTS_TAC `max (c:real) (&1)`);
110 (NEW_GOAL `beta_bump_v1 V e X <= c`);
112 (ASM_REAL_ARITH_TAC);
113 (UP_ASM_TAC THEN STRIP_TAC);
118 saturated V /\ packing V /\ u0 IN V
119 ==> &(CARD {X | mcell_set V X /\ VX V X u0}) <= cc4)`);
120 (MP_TAC CARD_MCELL_CONTAINS_POINT_klemma THEN STRIP_TAC);
121 (EXISTS_TAC `max (&c) (&1)`);
125 (NEW_GOAL `&(CARD {X | mcell_set V X /\ VX V X u0}) <= &c`);
126 (REWRITE_TAC[REAL_OF_NUM_LE]);
128 (ABBREV_TAC `s = &(CARD {X | mcell_set V X /\ VX V X u0})`);
129 (ASM_REAL_ARITH_TAC);
130 (UP_ASM_TAC THEN STRIP_TAC);
132 (ASM_CASES_TAC `saturated V /\ packing V`);
135 `?dd1. !r. &1 <= r ==>
136 &(CARD (V INTER ball ((vec 0):real^3,r) DIFF V INTER ball (vec 0,r - &8))) <=
139 (REWRITE_WITH `!r p. V INTER ball (p:real^3,r) DIFF V INTER ball (p,r - &8)
140 = V INTER ball (p:real^3,r + &0) DIFF V INTER ball (p,r - &8)`);
141 (ASM_REWRITE_TAC[REAL_ARITH `a + &0 = a`]);
142 (ASM_SIMP_TAC[PACKING_BALL_BOUNDARY]);
145 (ABBREV_TAC `dd2 = max dd1 (&1)`);
146 (ABBREV_TAC `dd = &1 / &2 * dd2 * (&4) pow 3 * cc2 * cc1`);
149 `?dd3. !r. &1 <= r ==>
150 &(CARD (V INTER ball ((vec 0):real^3,r) DIFF V INTER ball (vec 0,r - &16))) <=
153 (REWRITE_WITH `!r p. V INTER ball (p:real^3,r) DIFF V INTER ball (p,r - &16)
154 = V INTER ball (p:real^3,r + &0) DIFF V INTER ball (p,r - &16)`);
155 (ASM_REWRITE_TAC[REAL_ARITH `a + &0 = a`]);
156 (ASM_SIMP_TAC[PACKING_BALL_BOUNDARY]);
159 (ABBREV_TAC `dd4 = max dd3 (&1)`);
160 (ABBREV_TAC `ss1 = (&4) pow 3 * cc4 * cc3`);
161 (ABBREV_TAC `ss = &1 / &2 * dd4 * ss1`);
163 (ABBREV_TAC `c:real = -- (dd + ss)`);
164 (EXISTS_TAC `c:real`);
167 (* ============================================================================ *)
170 (NEW_GOAL `!X. mcell_set V X /\ critical_edgeX V X = {} ==>
171 gammaX V X lmfun >= &0`);
172 (UP_ASM_TAC THEN REWRITE_TAC[TSKAJXY_statement]);
176 (ABBREV_TAC `B = {X | X SUBSET ball (vec 0, r) /\ mcell_set V X}`);
177 (ABBREV_TAC `B0 = {X | X SUBSET ball (vec 0,r) /\ mcell_set V X /\
178 critical_edgeX V X = {}}`);
179 (ABBREV_TAC `B1 = {X | X SUBSET ball (vec 0,r) /\ mcell_set V X /\
180 ~(critical_edgeX V X = {})}`);
181 (NEW_GOAL `FINITE (B1:(real^3->bool)->bool)`);
183 (MATCH_MP_TAC FINITE_SUBSET);
184 (EXISTS_TAC `{X | X SUBSET ball (vec 0,r) /\ mcell_set V X}`);
186 (ASM_SIMP_TAC[FINITE_MCELL_SET_LEMMA]);
189 (REWRITE_WITH `B = B0 UNION B1:(real^3->bool)->bool`);
190 (EXPAND_TAC "B" THEN EXPAND_TAC "B1" THEN EXPAND_TAC "B0");
192 (REWRITE_WITH `sum (B0 UNION B1) (\X. gammaX V X lmfun) =
193 sum B0 (\X. gammaX V X lmfun) + sum B1 (\X. gammaX V X lmfun)`);
194 (MATCH_MP_TAC SUM_UNION);
197 (MATCH_MP_TAC FINITE_SUBSET);
198 (EXISTS_TAC `{X | X SUBSET ball (vec 0,r) /\ mcell_set V X}`);
200 (ASM_SIMP_TAC[FINITE_MCELL_SET_LEMMA]);
203 (EXPAND_TAC "B1" THEN EXPAND_TAC "B0");
205 (MATCH_MP_TAC (REAL_ARITH `&0 <= b /\ a <= c ==> a <= b + c`));
207 (MATCH_MP_TAC SUM_POS_LE);
210 (MATCH_MP_TAC FINITE_SUBSET);
211 (EXISTS_TAC `{X | X SUBSET ball (vec 0,r) /\ mcell_set V X}`);
213 (ASM_SIMP_TAC[FINITE_MCELL_SET_LEMMA]);
215 (REWRITE_TAC[BETA_THM; REAL_ARITH `&0 <= a <=> a >= &0`]);
216 (EXPAND_TAC "B0" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
221 `sum B1 (\X. gammaX V X lmfun) =
222 sum B1 (\X. (gammaX V X lmfun) *
223 sum (critical_edgeX V X) (\e. critical_weight V X))`);
224 (MATCH_MP_TAC SUM_EQ);
225 (EXPAND_TAC "B1" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
227 (REWRITE_TAC[critical_weight]);
229 `sum (critical_edgeX V x) (\e. &1 / &(CARD (critical_edgeX V x))) =
230 &(CARD (critical_edgeX V x)) * (&1 / &(CARD (critical_edgeX V x)))`);
231 (MATCH_MP_TAC SUM_CONST);
232 (REWRITE_TAC[FINITE_critical_edgeX]);
233 (REWRITE_TAC[REAL_ARITH `a * &1 / a = a / a`]);
234 (REWRITE_WITH `&(CARD (critical_edgeX V x)) / &(CARD (critical_edgeX V x)) = &1`);
235 (MATCH_MP_TAC REAL_DIV_REFL);
236 (REWRITE_TAC[REAL_OF_NUM_EQ]);
237 (REWRITE_WITH `CARD (critical_edgeX V x) = 0 <=> critical_edgeX V x = {}`);
238 (MATCH_MP_TAC CARD_EQ_0);
239 (REWRITE_TAC[FINITE_critical_edgeX]);
243 (* ------------------------------------------------------------------------- *)
244 (* Hint: - See proofs of KIZHLTL1; KIZHLTL2 to adapt *)
245 (* ------------------------------------------------------------------------- *)
247 (REWRITE_TAC[GSYM SUM_LMUL]);
249 (ABBREV_TAC `T1:real^3->bool = V INTER ball (vec 0, r)`);
250 (ABBREV_TAC `T2 = {{u0, u1:real^3} | u0 IN T1 /\ u1 IN T1 /\ ~(u0 = u1) /\
251 hl [u0; u1] <= hplus}`);
252 (NEW_GOAL `FINITE (T2:(real^3->bool)->bool)`);
253 (EXPAND_TAC "T2" THEN MATCH_MP_TAC FINITE_SUBSET);
254 (EXISTS_TAC `{{u0, u1:real^3} | u0 IN T1 /\ u1 IN T1}`);
256 (MATCH_MP_TAC FINITE_SET_PRODUCT_KY_LEMMA);
257 (EXPAND_TAC "T1" THEN MATCH_MP_TAC Pack2.KIUMVTC);
262 `sum B1 (\X. sum (critical_edgeX V X)
263 (\x. gammaX V X lmfun * critical_weight V X)) =
264 sum B1 (\X. sum {y:real^3->bool| y IN T2 /\ critical_edgeX V X y}
265 (\x. gammaX V X lmfun * critical_weight V X))`);
266 (MATCH_MP_TAC SUM_EQ);
267 (EXPAND_TAC "B1" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
269 (AP_THM_TAC THEN AP_TERM_TAC);
270 (REWRITE_TAC[SET_RULE `a = b <=> b SUBSET a /\ a SUBSET b`]);
273 (REWRITE_TAC[SET_RULE `A SUBSET {y | T2 y /\ A y} <=> A SUBSET T2`]);
274 (EXPAND_TAC "T2" THEN REWRITE_TAC[SUBSET; critical_edgeX; IN; IN_ELIM_THM; edgeX]);
276 (EXPAND_TAC "T1" THEN REWRITE_TAC[IN_ELIM_THM]);
277 (EXISTS_TAC `u':real^3` THEN EXISTS_TAC `v':real^3`);
278 (REWRITE_TAC[ASSUME `~(u' = v':real^3)`]);
280 (REWRITE_TAC[ASSUME `x' = {u, v:real^3}`; MESON[IN] `V (x:real^3) <=> x IN V`;
281 GSYM (ASSUME `{u, v} = {u', v':real^3}`); IN_INTER]);
283 (NEW_GOAL `VX V x = V INTER x`);
284 (MATCH_MP_TAC Hdtfnfz.HDTFNFZ);
285 (UNDISCH_TAC `mcell_set V x` THEN REWRITE_TAC[mcell_set; IN; IN_ELIM_THM]);
287 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
290 (NEW_GOAL `VX V x = {}`);
293 (UNDISCH_TAC `VX V x u'` THEN ASM_REWRITE_TAC[MESON[IN] `{} x <=> x IN {}`]);
300 (REWRITE_WITH `hl [u'; v':real^3] = hl [u; v:real^3]`);
301 (ASM_REWRITE_TAC[HL; set_of_list]);
304 (ABBREV_TAC `f = (\X. (\x:real^3->bool.
305 gammaX V X lmfun * critical_weight V X))`);
307 `sum B1 (\X. sum {y | y IN T2 /\ critical_edgeX V X y}
308 (\x:real^3->bool. gammaX V X lmfun * critical_weight V X)) =
309 sum B1 (\X. sum {y | y IN T2 /\ critical_edgeX V X y}
310 (\x:real^3->bool. f X x))`);
311 (EXPAND_TAC "f" THEN REFL_TAC);
313 `sum B1 (\X. sum {y | y IN T2 /\ critical_edgeX V X y} (\x. f X x)) =
314 sum T2 (\x. sum {X | X IN B1 /\ critical_edgeX V X x} (\X. f X x))`);
315 (ASM_SIMP_TAC[SUM_SUM_RESTRICT]);
317 (EXPAND_TAC "B1" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
318 (REWRITE_TAC[MESON[] `(A/\B/\C)/\D <=> A/\B/\C/\D`]);
321 {X | X SUBSET ball (vec 0,r) /\ mcell_set V X /\
322 ~(critical_edgeX V X = {}) /\ critical_edgeX V X x}
324 sum T2 (\x. sum {X | mcell_set V X /\
325 ~(critical_edgeX V X = {}) /\ critical_edgeX V X x}
327 sum T2 (\x. sum {X | ~(X SUBSET ball (vec 0,r)) /\ mcell_set V X /\
328 ~(critical_edgeX V X = {}) /\ critical_edgeX V X x}
330 (REWRITE_TAC[REAL_ARITH `a = b - c <=> b = a + c`]);
334 {X | X SUBSET ball (vec 0,r) /\ mcell_set V X /\
335 ~(critical_edgeX V X = {}) /\ critical_edgeX V X x}
339 {X | ~(X SUBSET ball (vec 0,r)) /\ mcell_set V X /\
340 ~(critical_edgeX V X = {}) /\ critical_edgeX V X x}
344 {X | X SUBSET ball (vec 0,r) /\ mcell_set V X /\
345 ~(critical_edgeX V X = {}) /\ critical_edgeX V X x}
348 {X | ~(X SUBSET ball (vec 0,r)) /\ mcell_set V X /\
349 ~(critical_edgeX V X = {}) /\ critical_edgeX V X x}
351 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
352 (MATCH_MP_TAC SUM_ADD);
354 (MATCH_MP_TAC SUM_EQ);
355 (REWRITE_TAC[BETA_THM] THEN REPEAT STRIP_TAC);
359 {X | X SUBSET ball (vec 0,r) /\
361 ~(critical_edgeX V X = {}) /\
362 critical_edgeX V X x}
365 {X | ~(X SUBSET ball (vec 0,r)) /\
367 ~(critical_edgeX V X = {}) /\
368 critical_edgeX V X x}
370 sum ({X | X SUBSET ball (vec 0,r) /\
372 ~(critical_edgeX V X = {}) /\
373 critical_edgeX V X x} UNION
374 {X | ~(X SUBSET ball (vec 0,r)) /\
376 ~(critical_edgeX V X = {}) /\
377 critical_edgeX V X x})
379 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
380 (MATCH_MP_TAC SUM_UNION);
383 (MATCH_MP_TAC FINITE_SUBSET);
384 (EXISTS_TAC `B1:(real^3->bool)->bool`);
386 (EXPAND_TAC "B1" THEN SET_TAC[]);
388 (UP_ASM_TAC THEN EXPAND_TAC "T2");
389 (REWRITE_TAC[IN; IN_ELIM_THM] THEN REPEAT STRIP_TAC);
390 (MATCH_MP_TAC FINITE_SUBSET);
391 (EXISTS_TAC `{X | X SUBSET ball (vec 0,r + &8) /\ mcell_set V X}`);
393 (ASM_SIMP_TAC[Marchal_cells_3.FINITE_MCELL_SET_LEMMA]);
394 (REWRITE_TAC[SUBSET; IN; IN_ELIM_THM]);
396 (NEW_GOAL `x SUBSET VX V x'`);
397 (UNDISCH_TAC `critical_edgeX V x' x` THEN REWRITE_TAC[critical_edgeX;edgeX]);
398 (REWRITE_TAC[IN_ELIM_THM]);
400 (REWRITE_TAC[ASSUME `x = {u, v:real^3}`; ASSUME `{u, v:real^3} = {u', v'}`]);
401 (SET_TAC[ASSUME `VX V x' u'`; ASSUME `VX V x' v'`]);
402 (NEW_GOAL `VX V x' = V INTER x'`);
403 (MATCH_MP_TAC Hdtfnfz.HDTFNFZ);
404 (UNDISCH_TAC `mcell_set V x'` THEN REWRITE_TAC[mcell_set; IN_ELIM_THM; IN]);
406 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
409 (NEW_GOAL `VX V x' = {}`);
410 (ASM_REWRITE_TAC[VX]);
411 (UNDISCH_TAC `x SUBSET VX V x'` THEN REWRITE_TAC[ASSUME `VX V x' = {}`]);
412 (REWRITE_TAC[ASSUME `x = {u0, u1:real^3}`] THEN SET_TAC[]);
413 (REWRITE_TAC[MESON[IN] `(A:real^3->bool) x <=> x IN A`; IN_BALL]);
414 (NEW_GOAL `dist (vec 0, x'') <= dist (vec 0, u0:real^3) + dist (u0, x'')`);
416 (NEW_GOAL `dist (vec 0, u0:real^3) < r`);
417 (REWRITE_TAC[GSYM IN_BALL]);
418 (UNDISCH_TAC `(T1:real^3->bool) u0` THEN EXPAND_TAC "T1");
419 (REWRITE_TAC[MESON[IN] `(A:real^3->bool) x <=> x IN A`] THEN SET_TAC[]);
420 (NEW_GOAL `dist (u0, x'':real^3) < &8`);
421 (REWRITE_TAC[GSYM IN_BALL]);
422 (NEW_GOAL `x' SUBSET ball (u0:real^3,&8)`);
423 (UNDISCH_TAC `mcell_set V x'` THEN REWRITE_TAC[mcell_set; IN_ELIM_THM; IN]);
426 (MATCH_MP_TAC MCELL_SUBSET_BALL8);
428 (REWRITE_TAC[GSYM (ASSUME `x' = mcell i V ul`)]);
429 (UNDISCH_TAC `x SUBSET VX V x'` THEN UNDISCH_TAC `VX V x' = V INTER x'`);
432 (SUBGOAL_THEN `(x'':real^3) IN x'` MP_TAC);
433 (UNDISCH_TAC `(x':real^3->bool) x''` THEN SET_TAC[]);
434 (UP_ASM_TAC THEN SET_TAC[]);
435 (ASM_REAL_ARITH_TAC);
439 (REWRITE_WITH ` ({X | X SUBSET ball (vec 0,r) /\
441 ~(critical_edgeX V X = {}) /\
442 critical_edgeX V X x} UNION
443 {X | ~(X SUBSET ball (vec 0,r)) /\
445 ~(critical_edgeX V X = {}) /\
446 critical_edgeX V X x}) =
447 {X | mcell_set V X /\ ~(critical_edgeX V X = {}) /\ critical_edgeX V X x}`);
451 {X | mcell_set V X /\
452 ~(critical_edgeX V X = {}) /\ critical_edgeX V X x} (\X. f X x)) =
454 {X | mcell_set V X /\ critical_edgeX V X x} (\X. f X x))`);
455 (REWRITE_TAC[FUN_EQ_THM]);
458 `{X | mcell_set V X /\
459 ~(!x. critical_edgeX V X x <=> {} x) /\ critical_edgeX V X x} =
460 {X | mcell_set V X /\ critical_edgeX V X x}`);
461 (REWRITE_TAC[SET_RULE `A = B <=> A SUBSET B /\ B SUBSET A`]);
464 (REWRITE_TAC[SUBSET; IN; IN_ELIM_THM] THEN REPEAT STRIP_TAC);
466 (SWITCH_TAC THEN UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
467 (REWRITE_TAC[MESON[IN] `(A:(real^3->bool)->bool) x <=> x IN A`]);
473 {X | ~(X SUBSET ball (vec 0,r)) /\ mcell_set V X /\
474 ~(critical_edgeX V X = {}) /\ critical_edgeX V X x} (\X. f X x)) =
476 {X | ~(X SUBSET ball (vec 0,r)) /\ mcell_set V X /\
477 critical_edgeX V X x} (\X. f X x))`);
478 (REWRITE_TAC[FUN_EQ_THM]);
481 `{X | ~(X SUBSET ball (vec 0,r)) /\ mcell_set V X /\
482 ~(!x. critical_edgeX V X x <=> {} x) /\ critical_edgeX V X x} =
483 {X | ~(X SUBSET ball (vec 0,r)) /\ mcell_set V X /\ critical_edgeX V X x}`);
484 (REWRITE_TAC[SET_RULE `A = B <=> A SUBSET B /\ B SUBSET A`]);
487 (REWRITE_TAC[SUBSET; IN; IN_ELIM_THM]);
488 (GEN_TAC THEN DISCH_TAC);
490 (UP_ASM_TAC THEN REPEAT STRIP_TAC);
491 (SWITCH_TAC THEN UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
492 (REWRITE_TAC[MESON[IN] `(A:(real^3->bool)->bool) x <=> x IN A`]);
497 (MATCH_MP_TAC (REAL_ARITH `(?x. c <= x /\ a + x <= b) ==> a <= b - c`));
498 (EXISTS_TAC `dd * r pow 2`);
502 `T3:real^3->bool = V INTER ball (vec 0, r) DIFF ball (vec 0, r - &8)`);
503 (ABBREV_TAC `T4 = {{u0:real^3, u1} | u0 IN T3 /\ u1 IN T3 /\
504 ~(u0 = u1) /\ hl [u0; u1] <= hplus}`);
505 (REWRITE_WITH `sum T2
507 {X | ~(X SUBSET ball (vec 0,r)) /\
509 critical_edgeX V X x}
510 (\X. f X x)) = sum T4
512 {X | ~(X SUBSET ball (vec 0,r)) /\
514 critical_edgeX V X x}
518 (MATCH_MP_TAC SUM_SUPERSET);
520 (EXPAND_TAC "T4" THEN EXPAND_TAC "T1" THEN EXPAND_TAC "T3" THEN SET_TAC[]);
522 (REWRITE_TAC[IN; IN_ELIM_THM] THEN REPEAT STRIP_TAC);
524 `{X | ~(X SUBSET ball (vec 0,r)) /\ mcell_set V X /\ critical_edgeX V X x} =
526 (REWRITE_TAC[SET_RULE `x = {} <=> ~(?s. s IN x)`]);
527 (REWRITE_TAC[IN; IN_ELIM_THM] THEN STRIP_TAC);
529 (NEW_GOAL `(x:real^3->bool) SUBSET s`);
530 (MATCH_MP_TAC CRITICAL_EDGEX_SUBSET_MCELL);
531 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
533 (NEW_GOAL `?p:real^3. p IN s DIFF ball (vec 0,r)`);
534 (UNDISCH_TAC `~(s SUBSET ball ((vec 0):real^3,r))` THEN SET_TAC[]);
535 (UP_ASM_TAC THEN STRIP_TAC);
536 (UP_ASM_TAC THEN REWRITE_TAC[IN_DIFF; IN_BALL; REAL_ARITH
537 `~(a < r) <=> r <= a`] THEN STRIP_TAC);
538 (NEW_GOAL `s SUBSET ball (p:real^3,&8)`);
539 (MATCH_MP_TAC MCELL_SUBSET_BALL8_2);
540 (EXISTS_TAC `V:real^3->bool`);
542 (NEW_GOAL `u0:real^3 IN ball (p,&8) /\ u1 IN ball (p,&8)`);
544 (UP_ASM_TAC THEN REWRITE_TAC[IN_BALL] THEN STRIP_TAC);
545 (UNDISCH_TAC `~(T4:(real^3->bool)->bool) x`);
546 (REWRITE_TAC[MESON[IN] `(T4:(real^3->bool)->bool) x <=> x IN T4`]);
547 (EXPAND_TAC "T4" THEN EXPAND_TAC "T3" THEN REWRITE_TAC[IN_INTER; IN_DIFF; IN_BALL]);
548 (REWRITE_TAC[IN; IN_ELIM_THM]);
549 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3` THEN ASM_REWRITE_TAC[]);
550 (UNDISCH_TAC `(T1:(real^3->bool)) u0` THEN
551 UNDISCH_TAC `(T1:(real^3->bool)) u1`);
552 (REWRITE_WITH `!x. T1 x <=> x:real^3 IN T1`);
553 (ASM_REWRITE_TAC[IN]);
554 (EXPAND_TAC "T1" THEN REWRITE_TAC[IN_INTER; IN_BALL]);
555 (REWRITE_TAC[IN] THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
556 (NEW_GOAL `dist (vec 0,p) <= dist (p, u0) + dist (vec 0, u0:real^3)`);
558 (ASM_REAL_ARITH_TAC);
559 (NEW_GOAL `dist (vec 0,p) <= dist (p, u1) + dist (vec 0, u1:real^3)`);
561 (ASM_REAL_ARITH_TAC);
562 (REWRITE_TAC[SUM_CLAUSES]);
564 (MATCH_MP_TAC (REAL_ARITH `(?x. a <= x /\ x <= b) ==> a <= b`));
565 (EXISTS_TAC `sum T4 (\x:real^3->bool. cc2 * cc1)`);
567 (MATCH_MP_TAC SUM_LE);
569 (MATCH_MP_TAC FINITE_SUBSET);
570 (EXISTS_TAC `{{u0:real^3, u1} | u0 IN T3 /\ u1 IN T3}`);
572 (MATCH_MP_TAC FINITE_SUBSET);
573 (ABBREV_TAC `S_temp = {u0, u1:real^3 | u0 IN T3 /\ u1 IN T3}`);
574 (ABBREV_TAC `f_temp = (\(u0,u1:real^3). {u0, u1})`);
575 (EXISTS_TAC `IMAGE (f_temp:real^3#real^3->real^3->bool) S_temp`);
577 (MATCH_MP_TAC FINITE_IMAGE);
578 (EXPAND_TAC "S_temp" THEN MATCH_MP_TAC FINITE_PRODUCT THEN REWRITE_TAC[]);
579 (MATCH_MP_TAC FINITE_SUBSET);
580 (EXISTS_TAC `T1:real^3->bool`);
582 (EXPAND_TAC "T1" THEN MATCH_MP_TAC FINITE_PACK_LEMMA THEN ASM_REWRITE_TAC[]);
584 (EXPAND_TAC "f_temp" THEN EXPAND_TAC "S_temp" THEN
585 REWRITE_TAC[IMAGE; SUBSET; IN; IN_ELIM_THM]);
587 (EXISTS_TAC `u0:real^3, u1:real^3` THEN ASM_REWRITE_TAC[]);
588 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3` THEN ASM_REWRITE_TAC[]);
590 (REWRITE_TAC[IN] THEN EXPAND_TAC "T4" THEN EXPAND_TAC "T3" THEN
591 REWRITE_TAC[ABS_SIMP; IN_DIFF; IN_INTER; IN_ELIM_THM]);
594 (MATCH_MP_TAC (REAL_ARITH `(?x. a <= x /\ x <= b) ==> a <= b`));
596 `sum {X| ~(X SUBSET ball (vec 0,r)) /\ mcell_set V X /\ critical_edgeX V X x}
599 (MATCH_MP_TAC SUM_LE);
601 (MATCH_MP_TAC FINITE_SUBSET);
602 (EXISTS_TAC `{X | mcell_set V X /\ edgeX V X x}`);
604 (MATCH_MP_TAC Marchal_cells_3.FINITE_EDGE_X2);
605 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3` THEN ASM_REWRITE_TAC[]);
606 (REWRITE_TAC[critical_edgeX] THEN SET_TAC[]);
607 (REWRITE_TAC[BETA_THM; ABS_SIMP; IN; IN_ELIM_THM] THEN REPEAT STRIP_TAC);
609 (NEW_GOAL `critical_weight V x' <= &1`);
610 (REWRITE_TAC[critical_weight]);
611 (REWRITE_WITH `&1 / &(CARD (critical_edgeX V x')) <= &1 <=>
612 &1 <= &(CARD (critical_edgeX V x'))`);
613 (MATCH_MP_TAC Packing3.REAL_DIV_LE_1);
614 (REWRITE_TAC[REAL_OF_NUM_LT; ARITH_RULE `0 < a <=> ~(a = 0)`]);
615 (REWRITE_WITH `CARD (critical_edgeX V x') = 0 <=> critical_edgeX V x' = {}`);
616 (MATCH_MP_TAC CARD_EQ_0);
617 (REWRITE_TAC[critical_edgeX; edgeX] THEN MATCH_MP_TAC FINITE_SUBSET);
619 (EXISTS_TAC `{{u0:real^3, u1} | u0 IN VX V x' /\ u1 IN VX V x'}`);
621 (MATCH_MP_TAC FINITE_SUBSET);
622 (ABBREV_TAC `S_temp = {u0, u1:real^3 | u0 IN VX V x' /\ u1 IN VX V x'}`);
623 (ABBREV_TAC `f_temp = (\(u0,u1:real^3). {u0, u1})`);
624 (EXISTS_TAC `IMAGE (f_temp:real^3#real^3->real^3->bool) S_temp`);
626 (MATCH_MP_TAC FINITE_IMAGE);
627 (EXPAND_TAC "S_temp" THEN MATCH_MP_TAC FINITE_PRODUCT THEN REWRITE_TAC[]);
628 (MATCH_MP_TAC FINITE_VX);
630 (EXPAND_TAC "f_temp" THEN EXPAND_TAC "S_temp" THEN
631 REWRITE_TAC[IMAGE; SUBSET; IN; IN_ELIM_THM]);
633 (EXISTS_TAC `u0':real^3, u1':real^3` THEN ASM_REWRITE_TAC[]);
634 (EXISTS_TAC `u0':real^3` THEN EXISTS_TAC `u1':real^3` THEN ASM_REWRITE_TAC[]);
636 (UP_ASM_TAC THEN SET_TAC[]);
637 (REWRITE_TAC[REAL_OF_NUM_LE; ARITH_RULE `1 <= a <=> ~(a = 0)`]);
638 (REWRITE_WITH `CARD (critical_edgeX V x') = 0 <=> critical_edgeX V x' = {}`);
639 (MATCH_MP_TAC CARD_EQ_0);
640 (REWRITE_TAC[critical_edgeX; edgeX] THEN MATCH_MP_TAC FINITE_SUBSET);
641 (EXISTS_TAC `{{u0:real^3, u1} | u0 IN VX V x' /\ u1 IN VX V x'}`);
643 (MATCH_MP_TAC FINITE_SUBSET);
644 (ABBREV_TAC `S_temp = {u0, u1:real^3 | u0 IN VX V x' /\ u1 IN VX V x'}`);
645 (ABBREV_TAC `f_temp = (\(u0,u1:real^3). {u0, u1})`);
646 (EXISTS_TAC `IMAGE (f_temp:real^3#real^3->real^3->bool) S_temp`);
648 (MATCH_MP_TAC FINITE_IMAGE);
649 (EXPAND_TAC "S_temp" THEN MATCH_MP_TAC FINITE_PRODUCT THEN REWRITE_TAC[]);
650 (MATCH_MP_TAC FINITE_VX);
652 (EXPAND_TAC "f_temp" THEN EXPAND_TAC "S_temp" THEN
653 REWRITE_TAC[IMAGE; SUBSET; IN; IN_ELIM_THM]);
655 (EXISTS_TAC `u0':real^3, u1':real^3` THEN ASM_REWRITE_TAC[]);
656 (EXISTS_TAC `u0':real^3` THEN EXISTS_TAC `u1':real^3` THEN ASM_REWRITE_TAC[]);
658 (UP_ASM_TAC THEN SET_TAC[]);
659 (NEW_GOAL `&0 <= critical_weight V x'`);
660 (REWRITE_TAC[critical_weight] THEN MATCH_MP_TAC REAL_LE_DIV);
661 (REWRITE_TAC[REAL_ARITH `&0 <= &1`; REAL_OF_NUM_LE]);
663 (NEW_GOAL `gammaX V x' lmfun <= cc1`);
664 (FIRST_ASSUM MATCH_MP_TAC);
666 (NEW_GOAL `gammaX V x' lmfun * critical_weight V x' <= cc1 * critical_weight V x'`);
668 (ONCE_REWRITE_TAC[REAL_ARITH `(a <= b <=> &0 <= b - a)`]);
669 (REWRITE_TAC[REAL_ARITH `a * x - b * x = (a - b) * x`]);
670 (MATCH_MP_TAC REAL_LE_MUL THEN ASM_REAL_ARITH_TAC);
672 (NEW_GOAL `cc1 * critical_weight V x' <= cc1`);
673 (ONCE_REWRITE_TAC[REAL_ARITH `(a <= b <=> &0 <= b - a)`]);
674 (REWRITE_WITH `!x b. b - b * x = b * (&1 - x)`);
676 (MATCH_MP_TAC REAL_LE_MUL THEN STRIP_TAC);
677 (ASM_REAL_ARITH_TAC);
678 (ASM_REAL_ARITH_TAC);
679 (ASM_REAL_ARITH_TAC);
682 {X | ~(X SUBSET ball (vec 0,r)) /\ mcell_set V X /\ critical_edgeX V X x}
685 {X | ~(X SUBSET ball (vec 0,r)) /\ mcell_set V X /\ critical_edgeX V X x})
687 (MATCH_MP_TAC SUM_CONST);
688 (MATCH_MP_TAC FINITE_SUBSET);
689 (EXISTS_TAC `{X | mcell_set V X /\ edgeX V X x}`);
691 (MATCH_MP_TAC Marchal_cells_3.FINITE_EDGE_X2);
692 (EXISTS_TAC `u0:real^3` THEN EXISTS_TAC `u1:real^3` THEN ASM_REWRITE_TAC[]);
693 (REWRITE_TAC[critical_edgeX] THEN SET_TAC[]);
695 (ONCE_REWRITE_TAC[REAL_ARITH `(a <= b <=> &0 <= b - a)`]);
696 (REWRITE_TAC[REAL_ARITH `a * x - b * x = x * (a - b)`]);
697 (MATCH_MP_TAC REAL_LE_MUL THEN STRIP_TAC);
698 (ASM_REAL_ARITH_TAC);
701 {X | ~(X SUBSET ball (vec 0,r)) /\ mcell_set V X /\ critical_edgeX V X x})
702 <= &(CARD {X | mcell_set V X /\ VX V X u0})`);
703 (REWRITE_TAC[REAL_OF_NUM_LE] THEN MATCH_MP_TAC CARD_SUBSET);
705 (ASM_REWRITE_TAC[critical_edgeX; edgeX; IN; IN_ELIM_THM]);
707 (MATCH_MP_TAC FINITE_SUBSET);
708 (EXISTS_TAC `{X | X SUBSET ball (u0,&8) /\ mcell_set V X}`);
710 (MATCH_MP_TAC FINITE_MCELL_SET_LEMMA_2);
712 (ONCE_REWRITE_TAC[SUBSET]);
713 (REWRITE_TAC[IN; IN_ELIM_THM] THEN REPEAT STRIP_TAC);
714 (MATCH_MP_TAC MCELL_SUBSET_BALL8_2);
715 (EXISTS_TAC `V:real^3->bool`);
717 (NEW_GOAL `VX V x' = V INTER x'`);
718 (MATCH_MP_TAC Hdtfnfz.HDTFNFZ);
719 (UNDISCH_TAC `mcell_set V x'` THEN
720 REWRITE_TAC[mcell_set; IN; IN_ELIM_THM] THEN REPEAT STRIP_TAC);
721 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
724 (UNDISCH_TAC `VX V x' u0` THEN ASM_REWRITE_TAC[VX]);
725 (REWRITE_TAC[MESON[IN] `{} x <=> x IN {}`]);
727 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
730 (NEW_GOAL `&(CARD {X | mcell_set V X /\ VX V X u0}) <= cc2`);
733 (ABBREV_TAC `s1_temp = &(CARD
734 {X | ~(X SUBSET ball (vec 0,r)) /\
736 critical_edgeX V X x})`);
737 (ABBREV_TAC `s2_temp = &(CARD {X | mcell_set V X /\ VX V X u0})`);
738 (ASM_REAL_ARITH_TAC);
740 (ABBREV_TAC `g = (\x:real^3->bool. cc2 * cc1)`);
743 `sum T4 (g:(real^3->bool)->real) =
745 sum {m,n | m IN T3 /\ n IN T3 /\ ~(m = n) /\ dist (m,n) <= &2 * hplus}
746 (\(m:real^3,n). g {m, n})`);
747 (ONCE_REWRITE_TAC[REAL_ARITH `a = &1 / &2 * b <=> b = &2 * a`]);
749 (REWRITE_TAC[HL_2; REAL_ARITH `inv (&2) * a <= b <=> a <= &2 * b`]);
750 (MATCH_MP_TAC SUM_PAIR_2_SET);
751 (MATCH_MP_TAC FINITE_SUBSET);
752 (EXISTS_TAC `T1:real^3->bool`);
754 (EXPAND_TAC "T1" THEN MATCH_MP_TAC FINITE_PACK_LEMMA THEN ASM_REWRITE_TAC[]);
756 (REWRITE_TAC[REAL_ARITH `&1 / &2 * s <= t <=> s <= &2 * t`]);
759 `h = (\m:real^3. {n | n IN T3 /\ ~(m = n) /\ dist (m,n) <= &2 * hplus})`);
761 `{m,n | m IN T3 /\ n IN T3 /\ ~(m = n) /\ dist (m,n) <= &2 * hplus} =
762 {m:real^3,n | m IN T3 /\ n IN h m}`);
765 (ABBREV_TAC `k = (\m n. (g:(real^3->bool)->real) {m,n})`);
766 (REWRITE_WITH `(\(m,n). (g:(real^3->bool)->real) {m, n}) = (\(m,n). k m n)`);
767 (REWRITE_TAC[FUN_EQ_THM]);
769 (NEW_GOAL `(x:real^3#real^3) = FST x, SND x`);
771 (ONCE_REWRITE_TAC[ASSUME `(x:real^3#real^3) = FST x, SND x`]);
772 (EXPAND_TAC "k" THEN REWRITE_TAC[]);
774 `sum {m:real^3,n:real^3 | m IN T3 /\ n IN h m} (\(m,n). k m n) =
775 sum T3 (\m. sum (h m) (k m))`);
776 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
777 (MATCH_MP_TAC SUM_SUM_PRODUCT);
780 (MATCH_MP_TAC FINITE_SUBSET);
781 (EXISTS_TAC `T1:real^3->bool`);
783 (EXPAND_TAC "T1" THEN MATCH_MP_TAC FINITE_PACK_LEMMA THEN ASM_REWRITE_TAC[]);
788 (MATCH_MP_TAC FINITE_SUBSET);
789 (EXISTS_TAC `T3:real^3->bool`);
791 (MATCH_MP_TAC FINITE_SUBSET);
792 (EXISTS_TAC `T1:real^3->bool`);
794 (EXPAND_TAC "T1" THEN MATCH_MP_TAC FINITE_PACK_LEMMA THEN ASM_REWRITE_TAC[]);
798 (EXPAND_TAC "k" THEN EXPAND_TAC "g");
799 (NEW_GOAL `sum T3 (\m. sum ((h:real^3->real^3->bool) m) (\n. cc2 * cc1)) <=
800 sum T3 (\m. (&4) pow 3 * cc2 * cc1)`);
801 (MATCH_MP_TAC SUM_LE);
803 (MATCH_MP_TAC FINITE_SUBSET);
804 (EXISTS_TAC `T1:real^3->bool`);
806 (EXPAND_TAC "T1" THEN MATCH_MP_TAC FINITE_PACK_LEMMA THEN ASM_REWRITE_TAC[]);
808 (EXPAND_TAC "h" THEN REPEAT STRIP_TAC THEN REWRITE_TAC[]);
810 `sum {n:real^3 | n IN T3 /\ ~(x = n) /\
811 dist (x,n) <= &2 * hplus} (\n. cc2 * cc1) =
812 &(CARD {n | n IN T3 /\ ~(x = n) /\ dist (x,n) <= &2 * hplus}) *
814 (MATCH_MP_TAC SUM_CONST);
815 (MATCH_MP_TAC FINITE_SUBSET);
816 (EXISTS_TAC `T3:real^3->bool`);
818 (MATCH_MP_TAC FINITE_SUBSET);
819 (EXISTS_TAC `T1:real^3->bool`);
821 (EXPAND_TAC "T1" THEN MATCH_MP_TAC FINITE_PACK_LEMMA THEN ASM_REWRITE_TAC[]);
825 (ONCE_REWRITE_TAC[REAL_ARITH `(a <= b <=> &0 <= b - a)`]);
826 (REWRITE_TAC[REAL_ARITH `a * x - b * x = (a - b) * x`]);
827 (MATCH_MP_TAC REAL_LE_MUL);
829 (ONCE_REWRITE_TAC[GSYM (REAL_ARITH `(a <= b <=> &0 <= b - a)`)]);
833 `&(CARD {n | n IN T3 /\ ~(x = n) /\ dist (x,n) <= &2 * hplus}) <=
834 &(CARD (V INTER ball (x:real^3, &3)))`);
835 (REWRITE_TAC[REAL_OF_NUM_LE]);
836 (MATCH_MP_TAC CARD_SUBSET);
838 (EXPAND_TAC "T3" THEN REWRITE_TAC[IN_DIFF; IN_BALL]);
839 (REWRITE_TAC[IN_INTER; IN_BALL; IN_ELIM_THM; SUBSET; IN]);
842 (NEW_GOAL `&2 * hplus < &3`);
843 (REWRITE_TAC[hplus] THEN REAL_ARITH_TAC);
844 (ASM_REAL_ARITH_TAC);
845 (MATCH_MP_TAC FINITE_PACK_LEMMA THEN ASM_REWRITE_TAC[]);
846 (NEW_GOAL `&(CARD (V INTER ball (x:real^3,&3))) <= &4 pow 3`);
847 (REWRITE_TAC[REAL_ARITH `&4 = &3 + &1`]);
848 (MATCH_MP_TAC BOUNDS_VGEN_klemma);
849 (ASM_REWRITE_TAC[REAL_ARITH `&0 <= &3`]);
851 `s1 = &(CARD {n:real^3 | n IN T3 /\ ~(x = n) /\ dist (x,n) <= &2 * hplus})`);
852 (ASM_REAL_ARITH_TAC);
853 (MATCH_MP_TAC REAL_LE_MUL);
854 (ASM_REAL_ARITH_TAC);
855 (NEW_GOAL `sum T3 (\m:real^3. &4 pow 3 * cc2 * cc1) <= &2 * dd * r pow 2`);
857 `sum T3 (\m:real^3. &4 pow 3 * cc2 * cc1) =
858 &(CARD T3) * &4 pow 3 * cc2 * cc1`);
859 (MATCH_MP_TAC SUM_CONST);
860 (MATCH_MP_TAC FINITE_SUBSET);
861 (EXISTS_TAC `T1:real^3->bool`);
863 (EXPAND_TAC "T1" THEN MATCH_MP_TAC FINITE_PACK_LEMMA THEN ASM_REWRITE_TAC[]);
867 (ONCE_REWRITE_TAC[REAL_ARITH `(a <= b <=> &0 <= b - a)`]);
868 (REWRITE_TAC[REAL_ARITH
869 `&2 * (&1 / &2 * dd2 * &4 pow 3 * cc2 * cc1) * r pow 2 -
870 &(CARD (T3:real^3->bool)) * &4 pow 3 * cc2 * cc1 =
871 (&4 pow 3 * cc2 * cc1) * (dd2 * r pow 2 - &(CARD T3))`]);
872 (MATCH_MP_TAC REAL_LE_MUL);
874 (REWRITE_TAC[REAL_ARITH `&0 <= &4 pow 3 * x <=> &0 <= x`]);
875 (MATCH_MP_TAC REAL_LE_MUL);
876 (ASM_REAL_ARITH_TAC);
877 (ONCE_REWRITE_TAC[GSYM (REAL_ARITH `(a <= b <=> &0 <= b - a)`)]);
880 (ONCE_REWRITE_TAC[SET_RULE `A INTER B DIFF C = A INTER B DIFF A INTER C`]);
881 (MATCH_MP_TAC (REAL_ARITH `(?x. a <= x /\ x <= b) ==> a <= b`));
882 (EXISTS_TAC `dd1 * r pow 2`);
884 (FIRST_ASSUM MATCH_MP_TAC);
886 (ONCE_REWRITE_TAC[REAL_ARITH `(a <= b <=> &0 <= b - a)`]);
887 (REWRITE_TAC[REAL_ARITH `a * x - b * x = (a - b ) * x`]);
888 (MATCH_MP_TAC REAL_LE_MUL THEN STRIP_TAC);
889 (ASM_REAL_ARITH_TAC);
890 (REWRITE_TAC[REAL_LE_POW_2]);
891 (ASM_REAL_ARITH_TAC);
893 (* ======================================================================== *)
894 (* CHECK DEN DAY LA OK ROI - (._o) (0_o) *)
895 (* ==================================================================== *)
898 `sum T2 (\x. sum {X | mcell_set V X /\ critical_edgeX V X x} (\X. f X x)) =
899 sum T2 (\e. cluster_gamma_v1 V e (cell_cluster V e)) -
900 sum T2 (\x. sum {X | mcell_set V X /\ critical_edgeX V X x} (beta_bump_v1 V x))`);
901 (REWRITE_TAC[REAL_ARITH `a = b - c <=> b = a + c`]);
903 `f1 = (\x. sum {X | mcell_set V X /\ critical_edgeX V X x} (\X. f X x))`);
905 `f2 = (\x. sum {X | mcell_set V X /\ critical_edgeX V X x} (beta_bump_v1 V x))`);
907 `sum T2 (\e. cluster_gamma_v1 V e (cell_cluster V e)) =
908 sum T2 (\e:real^3->bool. f1 e + f2 e)`);
909 (MATCH_MP_TAC SUM_EQ);
910 (EXPAND_TAC "T2" THEN REWRITE_TAC[IN; IN_ELIM_THM] THEN REPEAT STRIP_TAC);
911 (EXPAND_TAC "f1" THEN EXPAND_TAC "f2" THEN REWRITE_TAC[cluster_gamma_v1; cell_cluster]);
912 (REWRITE_TAC[FUN_EQ_THM] THEN REPEAT STRIP_TAC);
914 (REWRITE_TAC[SET_RULE `{X | x IN critical_edgeX V X /\ mcell_set V X} =
915 {X | mcell_set V X /\ critical_edgeX V X x}`]);
916 (MATCH_MP_TAC SUM_ADD);
917 (MATCH_MP_TAC FINITE_SUBSET);
918 (EXISTS_TAC `{X | X SUBSET ball (u0,&8) /\ mcell_set V X}`);
920 (MATCH_MP_TAC FINITE_MCELL_SET_LEMMA_2);
922 (ONCE_REWRITE_TAC[SUBSET]);
923 (REWRITE_TAC[IN; IN_ELIM_THM] THEN REPEAT STRIP_TAC);
924 (MATCH_MP_TAC MCELL_SUBSET_BALL8_2);
925 (EXISTS_TAC `V:real^3->bool`);
927 (NEW_GOAL `VX V x' = V INTER x'`);
928 (MATCH_MP_TAC Hdtfnfz.HDTFNFZ);
929 (UNDISCH_TAC `mcell_set V x'` THEN
930 REWRITE_TAC[mcell_set; IN; IN_ELIM_THM] THEN REPEAT STRIP_TAC);
931 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
934 (UNDISCH_TAC `critical_edgeX V x' x` THEN
935 REWRITE_TAC[critical_edgeX; edgeX; IN; IN_ELIM_THM] THEN STRIP_TAC);
936 (NEW_GOAL `VX V x' u0`);
937 (NEW_GOAL `u0 = u' \/ u0 = v':real^3`);
939 (UP_ASM_TAC THEN STRIP_TAC);
940 (REWRITE_TAC[ASSUME `u0 = u':real^3`]);
942 (REWRITE_TAC[ASSUME `u0 = v':real^3`]);
945 (UNDISCH_TAC `VX V x' u0` THEN ASM_REWRITE_TAC[VX]);
946 (REWRITE_TAC[MESON[IN] `{} x <=> x IN {}`]);
949 (NEW_GOAL `VX V x' u0`);
950 (UNDISCH_TAC `mcell_set V x'` THEN
951 REWRITE_TAC[mcell_set; IN; IN_ELIM_THM] THEN REPEAT STRIP_TAC);
952 (UNDISCH_TAC `critical_edgeX V x' x` THEN
953 REWRITE_TAC[critical_edgeX; edgeX; IN; IN_ELIM_THM] THEN STRIP_TAC);
954 (NEW_GOAL `u0 = u' \/ u0 = v':real^3`);
956 (UP_ASM_TAC THEN STRIP_TAC);
957 (REWRITE_TAC[ASSUME `u0 = u':real^3`]);
959 (REWRITE_TAC[ASSUME `u0 = v':real^3`]);
961 (UP_ASM_TAC THEN UP_ASM_TAC THEN SET_TAC[]);
963 (MATCH_MP_TAC SUM_ADD);
966 (MATCH_MP_TAC (REAL_ARITH `&0 <= a /\ b + x <= &0 ==> x <= a - b`));
968 (MATCH_MP_TAC SUM_POS_LE);
970 (EXPAND_TAC "T2" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
973 (UNDISCH_TAC `cell_cluster_estimate_v1 V`);
974 (REWRITE_TAC[cell_cluster_estimate_v1]);
975 (REWRITE_TAC[REAL_ARITH `&0 <= a <=> a >= &0`] THEN STRIP_TAC);
979 `f1 = (\x. sum {X | X SUBSET ball (vec 0, r + &8) /\
980 ~(X SUBSET ball (vec 0, r - &8)) /\
982 critical_edgeX V X x} (beta_bump_v1 V x))`);
984 `f2 = (\x. sum {X | X SUBSET ball (vec 0, r - &8) /\ mcell_set V X /\
985 critical_edgeX V X x} (beta_bump_v1 V x))`);
987 `sum T2 (\x. sum {X | mcell_set V X /\ critical_edgeX V X x} (beta_bump_v1 V x))
988 = sum (T2:(real^3->bool)->bool) f1 + sum T2 f2`);
990 `sum (T2:(real^3->bool)->bool) f1 + sum T2 f2 = sum T2 (\x. f1 x + f2 x)`);
991 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
992 (MATCH_MP_TAC SUM_ADD);
995 (MATCH_MP_TAC SUM_EQ);
996 (EXPAND_TAC "T2" THEN REWRITE_TAC[IN; IN_ELIM_THM] THEN REPEAT STRIP_TAC);
997 (EXPAND_TAC "f1" THEN EXPAND_TAC "f2");
999 `s1 = {X | X SUBSET ball (vec 0,r + &8) /\ ~(X SUBSET ball (vec 0,r - &8)) /\
1000 mcell_set V X /\ critical_edgeX V X x}`);
1001 (ABBREV_TAC `s2 = {X | X SUBSET ball (vec 0,r - &8) /\ mcell_set V X /\
1002 critical_edgeX V X x}`);
1003 (REWRITE_WITH `{X | mcell_set V X /\ critical_edgeX V X x} = s1 UNION s2`);
1004 (EXPAND_TAC "s1" THEN EXPAND_TAC "s2" THEN
1005 REWRITE_TAC[SET_EQ_LEMMA; IN_UNION; IN_ELIM_THM; IN]);
1007 (ASM_REWRITE_TAC[]);
1009 (ASM_CASES_TAC `x' SUBSET ball ((vec 0):real^3,r - &8)`);
1010 (ASM_REWRITE_TAC[]);
1011 (ASM_REWRITE_TAC[SUBSET; IN_DIFF; IN_BALL]);
1014 (NEW_GOAL `x' SUBSET ball (u0:real^3, &8)`);
1015 (MATCH_MP_TAC MCELL_SUBSET_BALL8_2);
1017 (EXISTS_TAC `V:real^3->bool`);
1018 (ASM_REWRITE_TAC[]);
1019 (NEW_GOAL `x:real^3->bool SUBSET x'`);
1020 (MATCH_MP_TAC CRITICAL_EDGEX_SUBSET_MCELL);
1021 (EXISTS_TAC `V:real^3->bool`);
1022 (ASM_REWRITE_TAC[]);
1023 (UP_ASM_TAC THEN ASM_REWRITE_TAC[]);
1025 (NEW_GOAL `dist (u0:real^3, x'') < &8`);
1026 (REWRITE_TAC[GSYM IN_BALL] THEN ASM_SET_TAC[]);
1027 (NEW_GOAL `dist (vec 0, x'') <= dist (u0, x'') + dist (vec 0, u0:real^3)`);
1029 (NEW_GOAL `dist (vec 0, u0:real^3) < r`);
1030 (REWRITE_TAC[GSYM IN_BALL]);
1031 (UNDISCH_TAC `(T1:real^3->bool) u0`);
1032 (EXPAND_TAC "T1" THEN REWRITE_TAC[MESON[IN] `(A:real^3->bool) x <=> x IN A`]);
1034 (ASM_REAL_ARITH_TAC);
1035 (ASM_REWRITE_TAC[]);
1037 (ASM_REWRITE_TAC[]);
1038 (ASM_REWRITE_TAC[]);
1039 (ASM_REWRITE_TAC[]);
1040 (MATCH_MP_TAC SUM_UNION);
1042 (MATCH_MP_TAC FINITE_SUBSET);
1043 (EXISTS_TAC `{X | X SUBSET ball (vec 0,r + &8) /\ mcell_set V X}`);
1045 (ASM_SIMP_TAC[FINITE_MCELL_SET_LEMMA_2]);
1047 (MATCH_MP_TAC FINITE_SUBSET);
1048 (EXISTS_TAC `{X | X SUBSET ball (vec 0,r - &8) /\ mcell_set V X}`);
1050 (ASM_SIMP_TAC[FINITE_MCELL_SET_LEMMA_2]);
1053 (* ======================================================================== *)
1054 (* ======================================================================== *)
1056 (EXPAND_TAC "s1" THEN EXPAND_TAC "s2" THEN SET_TAC[]);
1058 (REWRITE_WITH `sum (T2:(real^3->bool)->bool) f2 = &0`);
1060 (REWRITE_TAC[SET_RULE
1061 `!V r x. {X | X SUBSET ball (vec 0,r - &8) /\ mcell_set V X /\
1062 critical_edgeX V X x} =
1063 {X | X IN {X| X SUBSET ball (vec 0,r - &8) /\ mcell_set V X} /\
1064 critical_edgeX V X x}`]);
1068 {X | X IN {X | X SUBSET ball (vec 0,r - &8) /\ mcell_set V X} /\
1069 critical_edgeX V X x}
1070 (beta_bump_v1 V x)) =
1073 {X | X IN {X | X SUBSET ball (vec 0,r - &8) /\ mcell_set V X} /\
1074 critical_edgeX V X x}
1075 (\X. beta_bump_v1 V x X))`);
1076 (REWRITE_WITH `!x V. (\X. beta_bump_v1 V x X) = beta_bump_v1 V x`);
1077 (REWRITE_TAC[FUN_EQ_THM] THEN ASM_REWRITE_TAC[]);
1079 (ABBREV_TAC `t = {X | X SUBSET ball (vec 0,r - &8) /\ mcell_set V X}`);
1080 (ABBREV_TAC `g = beta_bump_v1 V`);
1081 (ABBREV_TAC `s = T2:(real^3->bool)->bool`);
1083 `sum s (\x. sum {X | X IN t /\ critical_edgeX V X x} (\X. g x X)) =
1084 sum t (\X. sum {x | x IN s /\ critical_edgeX V X x} (\x. g x X))`);
1085 (MATCH_MP_TAC SUM_SUM_RESTRICT);
1087 (EXPAND_TAC "s" THEN ASM_REWRITE_TAC[]);
1089 (MATCH_MP_TAC FINITE_MCELL_SET_LEMMA);
1090 (ASM_REWRITE_TAC[]);
1091 (EXPAND_TAC "s" THEN EXPAND_TAC "t" THEN EXPAND_TAC "g");
1092 (MATCH_MP_TAC SUM_EQ_0);
1093 (REWRITE_TAC[IN; IN_ELIM_THM] THEN REWRITE_TAC[] THEN REPEAT STRIP_TAC);
1095 (REWRITE_WITH `{x' | T2 x' /\ critical_edgeX V x x'} =
1096 {x' | x' IN critical_edgeX V x}`);
1097 (MATCH_MP_TAC (SET_RULE `A SUBSET B /\ B SUBSET A ==> A = B`));
1100 (ASM_REWRITE_TAC[IN]);
1101 (REWRITE_TAC[GSYM (ASSUME `{{u0:real^3, u1} | u0 IN T1 /\ u1 IN T1 /\
1102 ~(u0 = u1) /\ hl [u0; u1] <= hplus} = s`)]);
1104 (REWRITE_TAC[SUBSET; IN; IN_ELIM_THM; critical_edgeX; edgeX]);
1106 (EXISTS_TAC `u':real^3` THEN EXISTS_TAC `v':real^3` THEN ASM_REWRITE_TAC[]);
1108 (REWRITE_TAC[MESON[IN] `(A:real^3->bool) x <=> x IN A`; IN_INTER; IN_BALL]);
1109 (NEW_GOAL `VX V x = V INTER x`);
1110 (MATCH_MP_TAC Hdtfnfz.HDTFNFZ);
1111 (UNDISCH_TAC `mcell_set V x` THEN REWRITE_TAC[mcell_set; IN; IN_ELIM_THM]);
1113 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
1114 (ASM_REWRITE_TAC[IN]);
1115 (STRIP_TAC THEN UNDISCH_TAC `VX V x u'`);
1116 (ASM_REWRITE_TAC[VX; MESON[IN] `{} x <=> x IN {}`] THEN SET_TAC[]);
1117 (REWRITE_WITH `u':real^3 IN V /\ v' IN V`);
1121 (NEW_GOAL `u':real^3 IN ball (vec 0, r - &8)`);
1123 (UP_ASM_TAC THEN REWRITE_TAC[IN_BALL] THEN REAL_ARITH_TAC);
1124 (NEW_GOAL `v':real^3 IN ball (vec 0, r - &8)`);
1126 (UP_ASM_TAC THEN REWRITE_TAC[IN_BALL] THEN REAL_ARITH_TAC);
1127 (REWRITE_WITH `hl [u'; v':real^3] = hl [u; v:real^3]`);
1128 (REWRITE_TAC[HL; set_of_list]);
1129 (ASM_REWRITE_TAC[]);
1130 (ASM_REWRITE_TAC[]);
1132 (EXISTS_TAC `u:real^3` THEN EXISTS_TAC `v:real^3`);
1133 (ASM_REWRITE_TAC[]);
1134 (EXISTS_TAC `u':real^3` THEN EXISTS_TAC `v':real^3`);
1135 (ASM_REWRITE_TAC[]);
1136 (MATCH_MP_TAC Bump.SUM_BETA_BUMP_LEMMA);
1137 (ASM_REWRITE_TAC[]);
1139 (REWRITE_TAC[REAL_ARITH `a + &0 = a`]);
1141 (REWRITE_TAC[HL_2; REAL_ARITH `inv (&2) * a <= b <=> a <= &2 * b`]);
1143 `sum {{u0:real^3, u1} | u0 IN T1 /\ u1 IN T1 /\ ~(u0 = u1) /\
1144 dist (u0,u1) <= &2 * hplus} f1 =
1146 sum {m,n | m IN T1 /\ n IN T1 /\ ~(m = n) /\ dist (m,n) <= &2 * hplus}
1147 (\(m,n). f1 {m, n})`);
1148 (REWRITE_TAC[REAL_ARITH `a = &1 / &2 * b <=> b = &2 * a`]);
1149 (MATCH_MP_TAC SUM_PAIR_2_SET);
1150 (EXPAND_TAC "T1" THEN MATCH_MP_TAC FINITE_PACK_LEMMA);
1151 (ASM_REWRITE_TAC[]);
1154 `T3 = V INTER ball ((vec 0):real^3,r) DIFF ball (vec 0, r - &16)`);
1156 `sum {m:real^3,n | m IN T1 /\ n IN T1 /\ ~(m = n) /\ dist (m,n) <= &2 * hplus}
1157 (\(m,n). f1 {m, n}) =
1158 sum {m,n | m IN T3 /\ n IN T1 /\ ~(m = n) /\ dist (m,n) <= &2 * hplus}
1159 (\(m,n). f1 {m, n})`);
1160 (MATCH_MP_TAC SUM_SUPERSET);
1162 (EXPAND_TAC "T1" THEN EXPAND_TAC "T3" THEN
1163 REWRITE_TAC[SUBSET; IN; IN_ELIM_THM]);
1165 (EXISTS_TAC `m:real^3` THEN EXISTS_TAC `n:real^3` THEN ASM_REWRITE_TAC[]);
1166 (EXPAND_TAC "T1" THEN UNDISCH_TAC
1167 `(V INTER ball ((vec 0):real^3,r) DIFF ball (vec 0,r - &16)) m` THEN
1168 REWRITE_TAC[MESON[IN] `(A:real^3->bool) x <=> x IN A`]);
1170 (EXPAND_TAC "T1" THEN EXPAND_TAC "T3" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
1172 (ASM_REWRITE_TAC[]);
1175 `{X | X SUBSET ball (vec 0,r + &8) /\
1176 ~(X SUBSET ball (vec 0,r - &8)) /\
1178 critical_edgeX V X {m, n}} = {}`);
1179 (REWRITE_TAC[SET_RULE `y = {} <=> ~(?x. x IN y)`]);
1181 (UNDISCH_TAC `~(?m n.
1182 ((V INTER ball (vec 0,r) DIFF ball (vec 0,r - &16)) m /\
1183 (V INTER ball (vec 0,r)) n /\
1185 dist (m:real^3,n) <= &2 * hplus) /\
1186 x = m,n) ` THEN REWRITE_TAC[]);
1187 (EXISTS_TAC `m:real^3` THEN EXISTS_TAC `n:real^3`);
1188 (ASM_REWRITE_TAC[]);
1189 (REWRITE_TAC[MESON[IN] `(A:real^3->bool) x <=> x IN A`]);
1190 (EXPAND_TAC "T3" THEN REWRITE_TAC[IN_DIFF; IN; IN_BALL]);
1191 (ASM_REWRITE_TAC[]);
1192 (UP_ASM_TAC THEN REWRITE_TAC[IN; IN_ELIM_THM]);
1194 (NEW_GOAL `?p:real^3. p IN x' /\ ~(p IN ball (vec 0,r - &8))`);
1195 (UNDISCH_TAC `~(x' SUBSET ball ((vec 0):real^3,r - &8))`);
1197 (UP_ASM_TAC THEN STRIP_TAC);
1198 (UP_ASM_TAC THEN REWRITE_TAC[IN_BALL]);
1199 (NEW_GOAL `x' SUBSET ball (p:real^3, &8)`);
1200 (MATCH_MP_TAC MCELL_SUBSET_BALL8_2);
1201 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1202 (NEW_GOAL `m:real^3 IN x'`);
1203 (UNDISCH_TAC `critical_edgeX V x' {m, n}` THEN
1204 REWRITE_TAC[critical_edgeX; edgeX; IN_ELIM_THM; IN]);
1207 (NEW_GOAL `VX V x' = V INTER x'`);
1208 (MATCH_MP_TAC Hdtfnfz.HDTFNFZ);
1209 (UNDISCH_TAC `mcell_set V x'` THEN REWRITE_TAC[mcell_set; IN; IN_ELIM_THM]);
1211 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
1212 (ASM_REWRITE_TAC[IN]);
1213 (STRIP_TAC THEN UNDISCH_TAC `VX V x' u'`);
1214 (ASM_REWRITE_TAC[VX; MESON[IN] `{} x <=> x IN {}`] THEN SET_TAC[]);
1216 (REWRITE_TAC[MESON[IN] `(A:real^3->bool) x <=> x IN A`]);
1218 (NEW_GOAL `dist (p, m:real^3) < &8`);
1219 (REWRITE_TAC[GSYM IN_BALL]);
1221 (NEW_GOAL `dist (vec 0, p) <= dist (vec 0, m:real^3) + dist (p, m)`);
1223 (ASM_REAL_ARITH_TAC);
1224 (REWRITE_TAC[SUM_CLAUSES]);
1227 `g = (\m:real^3. {n | n IN T1 /\ ~(m = n) /\ dist (m,n) <= &2 * hplus})`);
1229 `{m,n | m IN T3 /\ n IN T1 /\ ~(m = n) /\ dist (m,n) <= &2 * hplus} =
1230 {m,n:real^3 | m IN T3 /\ n IN g m}`);
1231 (EXPAND_TAC "g" THEN ASM_REWRITE_TAC[] THEN SET_TAC[]);
1232 (ABBREV_TAC `h = (\m. (\n. (f1:(real^3->bool)->real) {m, n}))`);
1233 (REWRITE_WITH `(\(m,n). (f1:(real^3->bool)->real) {m, n}) =
1235 (REWRITE_TAC[FUN_EQ_THM]);
1236 (STRIP_TAC THEN ASM_REWRITE_TAC[]);
1237 (NEW_GOAL `x:real^3#real^3 = FST x, SND x`);
1238 (REWRITE_TAC[PAIR]);
1239 (ONCE_ASM_REWRITE_TAC[]);
1240 (EXPAND_TAC "h" THEN REWRITE_TAC[]);
1242 (REWRITE_WITH `sum {m,n | m IN T3 /\ n IN g m} (\(m,n). h m n) =
1243 sum T3 (\m. sum (g m) ((h:real^3->real^3->real) m))`);
1244 (ONCE_REWRITE_TAC[EQ_SYM_EQ]);
1245 (MATCH_MP_TAC SUM_SUM_PRODUCT);
1248 (MATCH_MP_TAC FINITE_SUBSET);
1249 (EXISTS_TAC `V:real^3->bool INTER ball (vec 0,r)`);
1251 (MATCH_MP_TAC FINITE_PACK_LEMMA THEN ASM_REWRITE_TAC[]);
1252 (EXPAND_TAC "T3" THEN SET_TAC[]);
1255 (EXPAND_TAC "g" THEN REWRITE_TAC[]);
1256 (MATCH_MP_TAC FINITE_SUBSET);
1257 (EXISTS_TAC `V:real^3->bool INTER ball (vec 0,r)`);
1259 (MATCH_MP_TAC FINITE_PACK_LEMMA THEN ASM_REWRITE_TAC[]);
1260 (EXPAND_TAC "T1" THEN SET_TAC[]);
1263 `sum T3 (\m. sum ((g:real^3->real^3->bool) m) (h m)) <=
1264 sum T3 (\n:real^3. ss1)`);
1265 (MATCH_MP_TAC SUM_LE);
1267 (MATCH_MP_TAC FINITE_SUBSET);
1268 (EXISTS_TAC `V:real^3->bool INTER ball (vec 0,r)`);
1270 (MATCH_MP_TAC FINITE_PACK_LEMMA THEN ASM_REWRITE_TAC[]);
1271 (EXPAND_TAC "T3" THEN SET_TAC[]);
1272 (REPEAT STRIP_TAC THEN REWRITE_TAC[]);
1274 (NEW_GOAL `sum ((g:real^3->real^3->bool) x) (h x) <= sum (g x) (\x. cc4 * cc3)`);
1275 (MATCH_MP_TAC SUM_LE);
1277 (EXPAND_TAC "g" THEN REWRITE_TAC[]);
1278 (MATCH_MP_TAC FINITE_SUBSET);
1279 (EXISTS_TAC `V:real^3->bool INTER ball (vec 0,r)`);
1281 (MATCH_MP_TAC FINITE_PACK_LEMMA THEN ASM_REWRITE_TAC[]);
1282 (EXPAND_TAC "T1" THEN SET_TAC[]);
1284 (REPEAT STRIP_TAC THEN EXPAND_TAC "h" THEN REWRITE_TAC[]);
1286 (ABBREV_TAC `S1 = {X | X SUBSET ball (vec 0,r + &8) /\
1287 ~(X SUBSET ball (vec 0,r - &8)) /\
1289 critical_edgeX V X {x, x'}}`);
1290 (NEW_GOAL `sum (S1:(real^3->bool)->bool) (beta_bump_v1 V {x, x'}) <=
1292 (MATCH_MP_TAC SUM_LE);
1294 (MATCH_MP_TAC FINITE_SUBSET);
1295 (EXISTS_TAC `{X | X SUBSET ball (vec 0,r + &8) /\ mcell_set V X}`);
1297 (REPEAT STRIP_TAC THEN REWRITE_TAC[]);
1298 (MATCH_MP_TAC FINITE_MCELL_SET_LEMMA);
1299 (ASM_REWRITE_TAC[]);
1300 (EXPAND_TAC "S1" THEN SET_TAC[]);
1303 (FIRST_ASSUM MATCH_MP_TAC);
1304 (UP_ASM_TAC THEN EXPAND_TAC "S1" THEN REWRITE_TAC[IN; IN_ELIM_THM]);
1305 (STRIP_TAC THEN ASM_REWRITE_TAC[]);
1307 (NEW_GOAL `sum S1 (\x:real^3->bool. cc3) = &(CARD S1) * cc3`);
1308 (MATCH_MP_TAC SUM_CONST);
1309 (MATCH_MP_TAC FINITE_SUBSET);
1310 (EXISTS_TAC `{X | X SUBSET ball (vec 0,r + &8) /\ mcell_set V X}`);
1312 (REPEAT STRIP_TAC THEN REWRITE_TAC[]);
1313 (MATCH_MP_TAC FINITE_MCELL_SET_LEMMA);
1314 (ASM_REWRITE_TAC[]);
1315 (EXPAND_TAC "S1" THEN SET_TAC[]);
1316 (NEW_GOAL `&(CARD (S1:(real^3->bool)->bool)) <= cc4`);
1317 (NEW_GOAL `&(CARD (S1:(real^3->bool)->bool)) <=
1318 &(CARD {X | mcell_set V X /\ VX V X x})`);
1319 (REWRITE_TAC[REAL_OF_NUM_LE]);
1320 (MATCH_MP_TAC CARD_SUBSET);
1322 (EXPAND_TAC "S1" THEN
1323 REWRITE_TAC[SUBSET; IN; IN_ELIM_THM; critical_edgeX; edgeX] THEN
1325 (ASM_REWRITE_TAC[]);
1326 (NEW_GOAL `x:real^3 = u' \/ x = v'`);
1328 (UP_ASM_TAC THEN STRIP_TAC);
1329 (ASM_REWRITE_TAC[]);
1330 (ASM_REWRITE_TAC[]);
1332 (MATCH_MP_TAC FINITE_SUBSET);
1333 (EXISTS_TAC `{X | X SUBSET ball (x:real^3, &8) /\ mcell_set V X}`);
1335 (MATCH_MP_TAC FINITE_MCELL_SET_LEMMA_2);
1336 (ASM_REWRITE_TAC[]);
1337 (REWRITE_TAC[SUBSET; IN; IN_ELIM_THM] THEN REPEAT STRIP_TAC);
1338 (REWRITE_TAC[MESON[IN] `(A:real^3->bool) x <=> x IN A`]);
1339 (NEW_GOAL `VX V x'' = V INTER x''`);
1340 (MATCH_MP_TAC Hdtfnfz.HDTFNFZ);
1341 (UNDISCH_TAC `mcell_set V x''` THEN REWRITE_TAC[mcell_set; IN; IN_ELIM_THM]);
1343 (EXISTS_TAC `ul:(real^3)list` THEN EXISTS_TAC `i:num`);
1344 (ASM_REWRITE_TAC[IN]);
1345 (STRIP_TAC THEN UNDISCH_TAC `VX V x'' x`);
1346 (ASM_REWRITE_TAC[VX; MESON[IN] `{} x <=> x IN {}`] THEN SET_TAC[]);
1347 (NEW_GOAL `x'' SUBSET ball (x:real^3, &8)`);
1348 (MATCH_MP_TAC MCELL_SUBSET_BALL8_2);
1349 (EXISTS_TAC `V:real^3->bool` THEN ASM_REWRITE_TAC[]);
1352 (ASM_REWRITE_TAC[]);
1353 (NEW_GOAL `&(CARD {X | mcell_set V X /\ VX V X x}) <= cc4`);
1354 (FIRST_ASSUM MATCH_MP_TAC);
1355 (ASM_REWRITE_TAC[]);
1356 (UNDISCH_TAC `x IN (T3:real^3->bool)` THEN EXPAND_TAC "T3");
1358 (ABBREV_TAC `s_temp = &(CARD {X | mcell_set V X /\ VX V X x})`);
1359 (ASM_REAL_ARITH_TAC);
1360 (NEW_GOAL `sum (S1:(real^3->bool)->bool) (\x. cc3) <= cc4 * cc3`);
1361 (ASM_REWRITE_TAC[]);
1362 (ONCE_REWRITE_TAC[REAL_ARITH `a <= b <=> &0 <= b - a`]);
1363 (ONCE_REWRITE_TAC[REAL_ARITH `a * x - b * x = (a - b) * x`]);
1364 (MATCH_MP_TAC REAL_LE_MUL THEN STRIP_TAC);
1365 (ASM_REAL_ARITH_TAC);
1366 (ASM_REAL_ARITH_TAC);
1367 (ABBREV_TAC `s_temp = sum (S1:(real^3->bool)->bool) (\x. cc3)`);
1368 (ASM_REAL_ARITH_TAC);
1372 (NEW_GOAL `sum ((g:real^3->real^3->bool) x) (\x. cc4 * cc3) <= ss1`);
1374 `sum ((g:real^3->real^3->bool) x) (\x. cc4 * cc3) =
1375 &(CARD (g x)) * cc4 * cc3`);
1376 (MATCH_MP_TAC SUM_CONST);
1378 (MATCH_MP_TAC FINITE_SUBSET);
1379 (EXISTS_TAC `T1:real^3->bool`);
1381 (EXPAND_TAC "T1" THEN MATCH_MP_TAC FINITE_PACK_LEMMA);
1382 (ASM_REWRITE_TAC[]);
1385 (NEW_GOAL `&(CARD ((g:real^3->real^3->bool) x)) <=
1386 &(CARD (V INTER ball (x:real^3, &3)))`);
1387 (REWRITE_TAC[REAL_OF_NUM_LE]);
1388 (MATCH_MP_TAC CARD_SUBSET);
1390 (EXPAND_TAC "g" THEN EXPAND_TAC "T1" THEN
1391 REWRITE_TAC[SUBSET; IN; IN_ELIM_THM; IN_INTER; IN_BALL]);
1393 (ASM_REWRITE_TAC[]);
1394 (NEW_GOAL `&2 * hplus < &3`);
1395 (REWRITE_TAC[hplus] THEN REAL_ARITH_TAC);
1396 (ASM_REAL_ARITH_TAC);
1397 (ASM_SIMP_TAC[FINITE_PACK_LEMMA]);
1400 (ONCE_REWRITE_TAC[REAL_ARITH `a <= b <=> &0 <= b - a`]);
1401 (ONCE_REWRITE_TAC[REAL_ARITH `a * x - b * x = (a - b) * x`]);
1402 (MATCH_MP_TAC REAL_LE_MUL THEN STRIP_TAC);
1403 (ONCE_REWRITE_TAC[GSYM (REAL_ARITH `a <= b <=> &0 <= b - a`)]);
1404 (NEW_GOAL `&(CARD (V INTER ball (x:real^3,&3))) <= &4 pow 3`);
1405 (REWRITE_TAC[REAL_ARITH `&4 = &3 + &1`]);
1406 (MATCH_MP_TAC BOUNDS_VGEN_klemma);
1407 (ASM_REWRITE_TAC[] THEN REAL_ARITH_TAC);
1408 (ASM_REAL_ARITH_TAC);
1409 (MATCH_MP_TAC REAL_LE_MUL);
1410 (ASM_REAL_ARITH_TAC);
1412 (ASM_REAL_ARITH_TAC);
1415 (REWRITE_TAC[REAL_ARITH `&1 / &2 * x + a <= &0 <=> x <= &2 * (-- a)`]);
1416 (REWRITE_TAC[REAL_ARITH `c * r pow 2 + d * r pow 2 = (c + d) * r pow 2`]);
1417 (REWRITE_WITH `(c:real) + dd = -- ss`);
1420 (REWRITE_TAC[REAL_ARITH `&2 * --(--ss * r pow 2) = &2 * ss * r pow 2`]);
1421 (NEW_GOAL `sum T3 (\n:real^3. ss1) <= &2 * ss * r pow 2`);
1422 (REWRITE_WITH `sum T3 (\n:real^3. ss1) = &(CARD (T3)) * ss1`);
1423 (MATCH_MP_TAC SUM_CONST);
1424 (MATCH_MP_TAC FINITE_SUBSET);
1425 (EXISTS_TAC `(V:real^3->bool) INTER ball (vec 0,r)`);
1427 (MATCH_MP_TAC FINITE_PACK_LEMMA THEN ASM_REWRITE_TAC[]);
1428 (EXPAND_TAC "T3" THEN SET_TAC[]);
1430 (REWRITE_TAC[REAL_ARITH
1431 `&2 * (&1 / &2 * dd4 * ss1) * r pow 2 = (dd4 * r pow 2) * ss1`]);
1432 (ONCE_REWRITE_TAC[REAL_ARITH `a <= b <=> &0 <= b - a`]);
1433 (ONCE_REWRITE_TAC[REAL_ARITH `a * x - b * x = (a - b) * x`]);
1434 (MATCH_MP_TAC REAL_LE_MUL THEN STRIP_TAC);
1435 (ONCE_REWRITE_TAC[GSYM (REAL_ARITH `a <= b <=> &0 <= b - a`)]);
1437 (ONCE_REWRITE_TAC[SET_RULE `A INTER B DIFF C = A INTER B DIFF A INTER C`]);
1439 (MATCH_MP_TAC (REAL_ARITH `(?x. a <= x /\ x <= b) ==> a <= b`));
1440 (EXISTS_TAC `dd3 * r pow 2`);
1442 (FIRST_ASSUM MATCH_MP_TAC);
1443 (ASM_REWRITE_TAC[]);
1444 (ONCE_REWRITE_TAC[REAL_ARITH `(a <= b <=> &0 <= b - a)`]);
1445 (REWRITE_TAC[REAL_ARITH `a * x - b * x = (a - b ) * x`]);
1446 (MATCH_MP_TAC REAL_LE_MUL THEN STRIP_TAC);
1447 (ASM_REAL_ARITH_TAC);
1448 (REWRITE_TAC[REAL_LE_POW_2]);
1450 (MATCH_MP_TAC REAL_LE_MUL);
1452 (ASM_REAL_ARITH_TAC);
1453 (MATCH_MP_TAC REAL_LE_MUL);
1454 (ASM_REAL_ARITH_TAC);
1457 `sum T3 (\m:real^3. sum {n | n IN T1 /\ ~(m = n) /\ dist (m,n) <= &2 * hplus}
1459 sum T3 (\m. sum (g m) (h m))`);
1460 (EXPAND_TAC "g" THEN REWRITE_TAC[]);
1461 (ASM_REAL_ARITH_TAC);
1466 (UNDISCH_TAC `~(saturated V /\ packing V)` THEN ASM_REWRITE_TAC[]);
1467 (ASM_MESON_TAC[])]);;