1 (* ========================================================================== *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
6 (* Author: Thomas C. Hales *)
8 (* ========================================================================== *)
10 (* Combine all the OXLZLEZ lemmas into the final result *)
13 When NQT finishes the cell cluster inequality section, this needs to be combined
14 with CELL_CLUSTER_ESTIMATE_PROPS to give OXLZLEZ
19 let WELLDEFINED_FUNCTION_3 = prove_by_refinement(
20 `!(f:C -> A->B) (s:C->A->bool) b. (!x i j. s x i /\ s x j ==> (f x i = f x j)) ==>
21 (?(g:C -> B). (!x. s x = {} ==> g x = b) /\ (!x i. s x i ==> g x = f x i))`,
24 REPEAT WEAK_STRIP_TAC;
25 TYPED_ABBREV_TAC `(g:C->B) = \x. if (s x = {}) then b else (f x (@i. (s x i)))` ;
26 TYPIFY `g` EXISTS_TAC;
28 REPEAT WEAK_STRIP_TAC;
30 BY(ASM_REWRITE_TAC[]);
31 REPEAT WEAK_STRIP_TAC;
34 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN SET_TAC[]);
36 FIRST_X_ASSUM MATCH_MP_TAC;
37 BY(ASM_REWRITE_TAC[]);
42 let S_LEAF_FINITE = `!V ul. packing V ==> FINITE (s_leaf V ul)`;;
44 let cc1 = `!V u0 u1 p n. saturated V /\ packing V /\ (n = CARD (s_leaf V [u0;u1])) ==>
45 (?f. IMAGE f (:num) = s_leaf V [u0;u1] /\ (!i. f (i + n) = f i) /\
46 (!i j. (i < j /\ j < n) ==> azim u0 u1 p (f i) < azim u0 u1 p (f j)))`;;
50 module Oxlzlez = struct
56 parse_as_infix("<<",(18,"right"));;
60 let s_leaf = new_definition `s_leaf V ul u <=>
61 (leaf V [EL 0 ul;EL 1 ul;u] /\ (cc_ke V [EL 0 ul; EL 1 ul; u] = 4 \/ cc_ke V [EL 1 ul;EL 0 ul;u] = 4))`;;
63 let gg_mcell = new_definition `gg_mcell V f u0 u1 i =
65 { X | mcell_set V X /\ {u0,u1} IN edgeX V X /\ X SUBSET wedge_ge u0 u1 (f i) (f (SUC i))}
66 (\X. gammaX V X lmfun * critical_weight V X + beta_bump_v1 V {u0,u1} X)`;;
68 let azim_mcell = new_definition `azim_mcell V f u0 u1 i =
69 sum { X | mcell_set V X /\ {u0,u1} IN edgeX V X /\ X SUBSET wedge_ge u0 u1 (f i) (f (SUC i))}
70 (\X. dihX V X (u0,u1))`;;
72 let cc_data_v8 = new_definition `cc_data_v8 V f u0 u1 =
74 (azim_mcell V f u0 u1);
76 (\i. gammaX V (cc_cell V [u0;u1;f i]) lmfun * critical_weight V (cc_cell V [u0;u1;f i]));
77 (\i. gammaX V (cc_cell V [u1;u0;f (SUC i)]) lmfun * critical_weight V (cc_cell V [u1;u0;f (SUC i)]))
80 (\i. dist(f i,f(SUC i)) < &2 * hminus);
81 (\i. &2 * hminus <= dist (f i, f (SUC i)) /\ dist (f i,f(SUC i)) <= &2 * hplus);
82 (\i. &2 * hplus < dist (f i, f(SUC i)));
83 (\i. dist(u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus);
84 (\i. hl [u0;u1;f i] < #1.34);
85 (\i. ?ul. barV V 3 ul /\ {u0,u1} IN edgeX V (mcell4 V ul) /\ mcell4 V ul SUBSET (wedge_ge u0 u1 (f i) (f (SUC i))))
87 CARD (s_leaf V [u0;u1]))`;;
89 let leaf_rank = new_definition `!V ul w0 n f. leaf_rank V ul w0 n f =
90 (IMAGE f (:num) = s_leaf V ul /\
91 (!i. f (i + n) = f i) /\
93 i < n /\ j < n /\ i < j
94 ==> azim (EL 0 ul) (EL 1 ul) w0 (f i) <
95 azim (EL 0 ul) (EL 1 ul) w0 (f j)))`;;
98 let cc_4 = new_definition `cc_4 V u0 u1 f i = (?ul. barV V 3 ul /\
99 {u0, u1} IN edgeX V (mcell4 V ul) /\
100 mcell4 V ul SUBSET wedge_ge u0 u1 (f i) (f (SUC i)))`;;
102 (* GENERIC RESULTS *)
104 let CARD_INSERT_INTER = prove_by_refinement(
105 `!(a:A) A B. FINITE B ==> CARD((a INSERT A) INTER B) =
106 if (a IN B /\ ~(a IN A)) then SUC(CARD (A INTER B)) else CARD(A INTER B)`,
109 REPEAT WEAKER_STRIP_TAC;
111 ASM_REWRITE_TAC[INSERT_INTER];
112 GMATCH_SIMP_TAC (CONJUNCT2 CARD_CLAUSES);
113 ASM_REWRITE_TAC[IN_INTER];
114 BY(ASM_MESON_TAC[FINITE_INTER]);
115 FIRST_X_ASSUM MP_TAC;
116 REWRITE_TAC[DE_MORGAN_THM];
117 DISCH_THEN DISJ_CASES_TAC;
118 BY(ASM_REWRITE_TAC[INSERT_INTER]);
119 ASM_REWRITE_TAC[INSERT_INTER];
121 GMATCH_SIMP_TAC (CONJUNCT2 CARD_CLAUSES);
122 ASM_REWRITE_TAC[IN_INTER];
123 BY(ASM_MESON_TAC[FINITE_INTER]);
128 let CARD_INSERT_INTER_ALT = prove_by_refinement(
129 `!(a:A) A B. FINITE B ==> CARD((a INSERT A) INTER B) =
130 (if (a IN B /\ ~(a IN A)) then 1 else 0) + CARD(A INTER B)`,
133 REPEAT WEAKER_STRIP_TAC;
134 ASM_SIMP_TAC [CARD_INSERT_INTER];
136 BY(REWRITE_TAC[arith `1 + x = SUC x`]);
137 BY(REWRITE_TAC[arith `0 + x = x`])
141 let NUMSEG_LT = prove_by_refinement(
142 `!r. ~(r = 0) ==> (0.. (r - 1)) = {i | i < r}`,
145 REWRITE_TAC[EXTENSION;IN_NUMSEG;IN_ELIM_THM];
150 let CARD4_IN_PAIRS = prove_by_refinement(
152 CARD {a,b,c,d} = 4 /\ {a,b,c,d} = {a,b,e,f} ==> {c,d} = {e,f}`,
155 REPEAT WEAKER_STRIP_TAC;
156 REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
157 MATCH_MP_TAC Leaf_cell.LENGTH4_SET2;
158 REWRITE_TAC[set_of_list];
163 let initial_sublist_cons = prove_by_refinement(
164 `!(a:A) b x y. initial_sublist (CONS a x) (CONS b y) <=> (a = b) /\ initial_sublist x y`,
167 REWRITE_TAC[Sphere.INITIAL_SUBLIST];
168 REPEAT WEAKER_STRIP_TAC;
170 REWRITE_TAC[CONS_11];
175 let COPLANAR_CONVEX_HULL_COPLANAR = prove_by_refinement(
176 `!(s:real^A->bool). coplanar (convex hull s) <=> coplanar s`,
179 ONCE_REWRITE_TAC[GSYM COPLANAR_AFFINE_HULL_COPLANAR];
181 BY(REWRITE_TAC[AFFINE_HULL_CONVEX_HULL])
186 let STRICT_TOPOLOGICAL_SORT = prove_by_refinement(
187 `!((<<):(A->A->bool)). (!x y. ~(x << y /\ y << x)) /\
188 (!x y. ~(x << y) ==> (x = y) \/ (y << x)) /\
189 (!x y z. x << y /\ y << z ==> x << z)
192 ==> (?f. s = IMAGE f (1..n) /\
194 j IN 1..n /\ k IN 1..n /\ j < k
195 ==> (f j << f k))))`,
198 REPEAT WEAK_STRIP_TAC;
199 INTRO_TAC TOPOLOGICAL_SORT [`\x y. (x = y) \/ ( x << y)`];
203 REPEAT WEAK_STRIP_TAC;
204 FIRST_X_ASSUM (C INTRO_TAC [`n`;`s`]);
206 REPEAT WEAK_STRIP_TAC;
207 TYPIFY `f` EXISTS_TAC;
209 REPEAT WEAK_STRIP_TAC;
215 let BARV3_SET_OF_LIST4 = prove_by_refinement(
216 `!V ul. packing V /\ barV V 3 ul ==>
217 set_of_list ul = {EL 0 ul,EL 1 ul, EL 2 ul, EL 3 ul}`,
220 REPEAT WEAKER_STRIP_TAC;
221 INTRO_TAC Bump.set_of_list4 [`ul`];
223 REWRITE_TAC[arith `4 = 3 + 1`] THEN MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA;
229 let STRICT_SORT_FINITE = prove_by_refinement(
230 `!((<<):(A->A->bool)) s n. (!x y. x IN s /\ y IN s /\ x << y /\ y << x ==> x = y) /\
231 (!x y z. x IN s /\ y IN s /\ z IN s /\ x << y /\ y << z ==> x << z) /\
233 (?f. s = IMAGE f (1..n) /\
235 j IN 1..n /\ k IN 1..n /\ j < k
236 ==> ~(f k << f j)))`,
239 REPEAT WEAK_STRIP_TAC;
240 INTRO_TAC TOPOLOGICAL_SORT [`\x y. x IN s /\ y IN s /\ ((x = y) \/ x << y)`];
244 REPEAT WEAK_STRIP_TAC;
245 FIRST_X_ASSUM (C INTRO_TAC [`n`;`s`]);
247 REPEAT WEAK_STRIP_TAC;
248 TYPIFY `f` EXISTS_TAC;
250 REPEAT WEAK_STRIP_TAC;
251 TYPIFY `f j IN s /\ f k IN s` (C SUBGOAL_THEN ASSUME_TAC);
252 FIRST_X_ASSUM_ST `IMAGE` MP_TAC;
253 REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM];
259 let MOD_INJ1_ALT = prove_by_refinement
260 (`!k n. ~( n = 0) /\ k < n /\ ~( k = 0) ==> (! x. ~( x MOD n = (x + k) MOD n)) `,
263 INTRO_TAC Oxl_def.MOD_INJ [`n`;`x`;`x`;`x + (k:num)`];
265 ASM_REWRITE_TAC[IN_NUMSEG];
266 REPEAT (FIRST_X_ASSUM MP_TAC);
267 SIMP_TAC[LE_REFL; ARITH_RULE` ~( n = 0) ==> x <= n - 1 + x `; ARITH_RULE` a <= a + x:num `];
269 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC)
272 let MOD_PERIOD_BOUNDED_ALT = prove_by_refinement (
273 `!k n. ~( n = 0) /\ ~( k = 0) ==> (! x. (x + k) MOD n = x MOD n ==> n <= k ) `,
277 INTRO_TAC MOD_INJ1_ALT [`k`;`n`];
279 BY(ASM_REWRITE_TAC[ARITH_RULE` a < (b:num) <=> ~(b <= a ) `]);
283 let MOD_REFL_ALT = REWRITE_RULE[MULT_CLAUSES] (SPECL [`m:num `;`1`] MOD_MULT);;
286 let periodic_o = prove_by_refinement(
287 `!(g:A->B) f n. periodic f n ==> periodic (g o f) n`,
290 REWRITE_TAC[Oxl_def.periodic;o_DEF];
295 let periodic_shift = prove_by_refinement(
296 `!k (f:num->A) n. periodic f n ==> (periodic (\i. f (i + k)) n)`,
299 REWRITE_TAC[Oxl_def.periodic];
300 REPEAT WEAKER_STRIP_TAC;
301 TYPIFY `(i + n) + (k:num) = (i + k) + n` (C SUBGOAL_THEN SUBST1_TAC);
307 let PERIODIC_IMAGE = prove_by_refinement(
308 `!f n. ~(n = 0) /\ periodic (f:num->A) n ==>
309 IMAGE f {i | i < n} = IMAGE f (:num)`,
312 REPEAT WEAKER_STRIP_TAC;
313 REWRITE_TAC[EXTENSION;IN_IMAGE;IN_UNIV;IN_ELIM_THM];
314 REPEAT WEAKER_STRIP_TAC;
315 REWRITE_TAC[Geomdetail.EQ_EXPAND];
317 REPEAT WEAKER_STRIP_TAC;
319 REPEAT WEAKER_STRIP_TAC;
320 TYPIFY `x' MOD n` EXISTS_TAC;
322 ASM_SIMP_TAC[GSYM Oxl_def.periodic_mod];
323 BY(ASM_MESON_TAC[DIVISION])
327 let PERIODIC_REDUCE_MOD = prove_by_refinement(
328 `!(f:num->A) n i. 1 <= n /\ periodic f n ==> (?j. j < n /\ f i = f j /\ f (SUC i) = f (SUC j))`,
331 REPEAT WEAKER_STRIP_TAC;
332 TYPIFY `i MOD n` EXISTS_TAC;
333 TYPIFY `~(n=0)` (C SUBGOAL_THEN ASSUME_TAC);
334 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
335 ASM_SIMP_TAC[DIVISION];
336 ASM_SIMP_TAC[GSYM Oxl_def.periodic_mod];
337 BY(ASM_MESON_TAC[Hypermap.lemma_suc_mod;Oxl_def.periodic_mod])
341 (* renamed from PERIODIC_INJ *)
343 let PERIODIC_EQ_IMAGE = prove_by_refinement(
344 `!(f:num->A) n i j. ~(n=0) /\ periodic f n /\ (i MOD n = j MOD n) ==> (f i = f j)`,
347 BY(ASM_MESON_TAC[Oxl_def.periodic_mod])
351 let F_SUC_PRE = prove_by_refinement(
352 `!(f:num->A) n i. ~(n = 0) /\ periodic f n ==> f (SUC (i + n - 1)) = f i`,
355 REPEAT WEAKER_STRIP_TAC;
356 MATCH_MP_TAC PERIODIC_EQ_IMAGE;
359 ASM_SIMP_TAC[arith `~(n=0) ==> SUC (i + n - 1) = 1 * n + i`];
360 BY(REWRITE_TAC[MOD_MULT_ADD])
364 let F_DEMOD = prove_by_refinement(
365 `!f n i. periodic f n /\ 1 < n ==>
366 f (i MOD n) = f i /\ f (SUC (i MOD n)) = f (SUC i)`,
369 REPEAT WEAKER_STRIP_TAC;
370 MP_TAC (arith `1 < n ==> ~(n =0)`);
372 REPEAT WEAKER_STRIP_TAC;
374 MATCH_MP_TAC PERIODIC_EQ_IMAGE;
375 TYPIFY `n` EXISTS_TAC;
376 BY(ASM_SIMP_TAC[MOD_MOD_REFL]);
377 MATCH_MP_TAC PERIODIC_EQ_IMAGE;
378 TYPIFY `n` EXISTS_TAC;
380 REWRITE_TAC[arith `SUC x = x + 1`];
381 BY(ASM_MESON_TAC[MOD_LT;MOD_ADD_MOD])
385 let FM_DEMOD = prove_by_refinement(
386 `!f n i. periodic f n /\ 1 < n ==> f (i MOD n) = f i /\
387 f (i MOD n + n - 1) = f (i + n - 1) `,
390 REPEAT WEAKER_STRIP_TAC;
391 MP_TAC (arith `1 < n ==> ~(n =0)`);
393 REPEAT WEAKER_STRIP_TAC;
395 MATCH_MP_TAC PERIODIC_EQ_IMAGE;
396 TYPIFY `n` EXISTS_TAC;
397 BY(ASM_SIMP_TAC[MOD_MOD_REFL]);
398 MATCH_MP_TAC PERIODIC_EQ_IMAGE;
399 TYPIFY `n` EXISTS_TAC;
401 TYPIFY `n - 1 < n` (C SUBGOAL_THEN ASSUME_TAC);
402 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
403 BY(ASM_MESON_TAC[MOD_LT;MOD_ADD_MOD])
407 let NULLSET_AFF_2_1 = prove_by_refinement(
408 `!x y z. NULLSET (aff_ge {x,y} {z})`,
411 REPEAT WEAKER_STRIP_TAC;
412 MATCH_MP_TAC NEGLIGIBLE_SUBSET;
413 TYPIFY `affine hull {x,y,z}` EXISTS_TAC;
414 REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3];
415 TYPIFY `{x,y,z} = {x,y} UNION {z}` (C SUBGOAL_THEN SUBST1_TAC);
417 BY(REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL])
421 (* renamed from coplanar_dih_y -> coplanar_delta_y *)
423 let coplanar_delta_y = prove_by_refinement(
424 `!u0 u1 u2 (u3:real^3).
425 ~coplanar {u0, u1, u2, u3} <=>
427 delta_y (dist (u0,u1)) (dist (u0,u2)) (dist (u0,u3)) (dist (u2,u3))
432 REPEAT WEAKER_STRIP_TAC;
433 GMATCH_SIMP_TAC ( Leaf_cell.coplanar_eq_coplanar_alt);
434 REWRITE_TAC[DIMINDEX_3;arith `2 <= 3`];
435 REWRITE_TAC[REWRITE_RULE[TAUT `(a <=> ~b) <=> (b <=> ~a)`] (Collect_geom2.POS_EQ_NOT_COPLANANR)];
436 REWRITE_TAC[Merge_ineq.delta_delta_x];
437 BY(REWRITE_TAC[arith `x pow 2 = x * x`;GSYM Sphere.delta_y])
441 let RADV_ETAY = prove_by_refinement(
442 `!u0 u1 (u2:real^3). ~collinear {u0,u1,u2} ==>
443 radV {u0,u1,u2} = eta_y (dist(u0,u1)) (dist(u0,u2)) (dist(u1,u2))`,
446 REPEAT WEAKER_STRIP_TAC;
447 INTRO_TAC Collect_geom.RADV_FORMULAR [`u2`;`u1`;`u0`];
449 TYPIFY `{u2,u1,u0} = {u0,u1,u2}` (C SUBGOAL_THEN SUBST1_TAC);
452 DISCH_THEN SUBST1_TAC;
453 REWRITE_TAC[Geomdetail.dist3];
454 BY(MESON_TAC[DIST_SYM])
458 let RADV2 = prove_by_refinement(
459 `!u (v:real^3). radV {u,v} = inv(&2) * dist(u,v)`,
462 REPEAT WEAKER_STRIP_TAC;
463 INTRO_TAC Pack_defs.HL [`[u;v]`];
464 REWRITE_TAC[set_of_list;Marchal_cells_3.HL_2];
469 let GDRQXLGv3 = prove_by_refinement(
470 `!(v0:real^3) v1 v2 v3. (let s = {v0,v1,v2,v3} in
471 let x1 = dist (v0,v1) pow 2 in
472 let x2 = dist (v0,v2) pow 2 in
473 let x3 = dist (v0,v3) pow 2 in
474 let x4 = dist (v2,v3) pow 2 in
475 let x5 = dist (v1,v3) pow 2 in
476 let x6 = dist (v1,v2) pow 2 in
478 ==> radV s pow 2 = rad2_x x1 x2 x3 x4 x5 x6)`,
481 REWRITE_TAC[LET_DEF;LET_END_DEF];
482 REPEAT WEAKER_STRIP_TAC;
483 INTRO_TAC Merge_ineq.GDRQXLGv2 [`v0`;`v1`;`v2`;`v3`];
484 REWRITE_TAC[LET_DEF;LET_END_DEF];
485 DISCH_THEN MATCH_MP_TAC;
486 TYPIFY `coplanar {v0,v1,v2,v3} = coplanar_alt{v0,v1,v2,v3}` (C SUBGOAL_THEN MP_TAC);
487 MATCH_MP_TAC Leaf_cell.coplanar_eq_coplanar_alt;
488 BY(ASM_REWRITE_TAC[DIMINDEX_3;arith `2 <= 3`]);
491 BY(ASM_MESON_TAC[Collect_geom2.NOT_COPLANAR_IMP_CARD4])
495 let DIST_IMP_COLLINEAR = prove_by_refinement(
496 `!(u0:real^3) u1 u2. &2 <= dist(u0,u1) /\ &2 <= dist(u0,u2) /\ &2 <= dist(u1,u2) /\
497 dist(u0,u1) < &4 /\ dist(u0,u2) < &4 /\ dist(u1,u2) < &4 ==> ~collinear{u0,u1,u2}`,
500 REWRITE_TAC[Collect_geom.COL_EQ_UPS_0;Trigonometry2.UPS_X_AND_HERON];
501 REPEAT WEAKER_STRIP_TAC;
502 FIRST_X_ASSUM MP_TAC;
504 MATCH_MP_TAC (arith `&0 < x ==> ~(x = &0)`);
505 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
506 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
507 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
508 ASM_SIMP_TAC[arith `&2 <= x /\ &2 <= y /\ &2 <= z ==> &0 < x + y + z`];
509 TYPIFY `!x y z. &2 <= x /\ &2 <= y /\ z < &4 ==> &0 < x + y - z` ENOUGH_TO_SHOW_TAC;
515 let UPS_X8_POS = prove_by_refinement(
517 &2 <= y5 /\ y5 < &4 /\ &2 <= y6 /\ y6 < &4 ==>
518 &0 < ups_x (&8) (y5 * y5) (y6 * y6)`,
521 REWRITE_TAC[GSYM Nonlinear_lemma.sqrt8_2;arith `&8 = #8.0`];
522 REPEAT WEAKER_STRIP_TAC;
523 MATCH_MP_TAC Merge_ineq.TRI_UPS_X_STRICT_POS;
524 MP_TAC Flyspeck_constants.bounds;
525 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC)
529 let DIST_IMP_UPS_X_POS = prove_by_refinement(
530 `!(u0:real^3) u1 u2. &2 <= dist(u0,u1) /\ &2 <= dist(u0,u2) /\ &2 <= dist(u1,u2) /\
531 dist(u0,u1) < &4 /\ dist(u0,u2) < &4 /\ dist(u1,u2) < &4 ==>
532 &0 < ups_x (dist(u0,u1) pow 2) (dist (u0,u2) pow 2) (dist (u1,u2) pow 2)`,
535 REPEAT WEAKER_STRIP_TAC;
536 REWRITE_TAC[GSYM Collect_geom2.NOT_COL_EQ_UPS_X_POS];
537 MATCH_MP_TAC DIST_IMP_COLLINEAR;
538 BY(ASM_REWRITE_TAC[])
542 let INITIAL_SUBLIST_TRUNCATE = prove_by_refinement(
543 `!vl (ul:(real^3)list). LENGTH ul = 4 /\
544 initial_sublist vl ul /\ ~initial_sublist vl (truncate_simplex 2 ul) ==>
548 REPEAT WEAKER_STRIP_TAC;
549 TYPIFY `ul = [EL 0 ul;EL 1 ul;EL 2 ul;EL 3 ul]` (C SUBGOAL_THEN ASSUME_TAC);
550 MATCH_MP_TAC Bump.LENGTH4;
551 BY(ASM_REWRITE_TAC[]);
553 FIRST_X_ASSUM_ST `initial_sublist` MP_TAC;
555 TYPIFY `truncate_simplex 2 ul = [EL 0 ul;EL 1 ul;EL 2 ul]` (C SUBGOAL_THEN SUBST1_TAC);
556 FIRST_X_ASSUM_ST `EL` SUBST1_TAC;
557 BY(REWRITE_TAC[Marchal_cells.TRUNCATE_SIMPLEX_EXPLICIT_2;Bump.EL_EXPLICIT]);
558 FIRST_X_ASSUM_ST `initial_sublist` MP_TAC;
559 INTRO_TAC Packing3.INITIAL_SUBLIST_APPEND_SING [`vl`;`[EL 0 ul;EL 1 ul;EL 2 ul]`;`EL 3 ul`];
560 TYPIFY `APPEND [EL 0 ul; EL 1 ul; EL 2 ul] [EL 3 ul] = [EL 0 ul; EL 1 ul; EL 2 ul; EL 3 ul]` (C SUBGOAL_THEN SUBST1_TAC);
561 BY(REWRITE_TAC[APPEND]);
566 let NOT_COPLANAR_AFF_3 = prove_by_refinement(
567 `!(s:real^3->bool). ~coplanar s ==> aff_dim s = &3`,
570 REPEAT WEAKER_STRIP_TAC;
571 REWRITE_TAC[INT_ARITH `x = int_of_num 3 <=> x <= &3 /\ ~(x <= &2)`];
573 BY(ASM_MESON_TAC[Rogers.AFF_DIM_LE_2_IMP_COPLANAR]);
574 BY(MESON_TAC[AFF_DIM_LE_UNIV;DIMINDEX_3])
578 let AFF_DEP_COPLANAR = prove_by_refinement(
579 `!(a:real^3) b c d. CARD {a,b,c,d} = 4 ==> (affine_dependent {a,b,c,d} <=> coplanar {a,b,c,d})`,
582 ONCE_REWRITE_TAC[TAUT `(a <=> b) <=> (~a <=> ~b)`];
583 REWRITE_TAC[AFFINE_INDEPENDENT_IFF_CARD;FINITE_INSERT;FINITE_EMPTY];
584 REPEAT WEAKER_STRIP_TAC;
585 ASM_REWRITE_TAC[INT_ARITH `int_of_num 4 - &1 = &3`];
586 BY(ASM_MESON_TAC[Leaf_cell.COPLANAR_IMP_AFF_DIM;NOT_COPLANAR_AFF_3;INT_ARITH `x = int_of_num 3 ==> ~(x <= &2)`])
590 let HL_IMP_BARV = prove_by_refinement(
591 `!V ul. packing V /\ saturated V /\ ~coplanar (set_of_list ul) /\
592 set_of_list ul SUBSET V /\ hl ul < sqrt(&2) /\ barV V 2 (truncate_simplex 2 ul) /\
597 REWRITE_TAC[Sphere.BARV;Sphere.VORONOI_NONDG;arith `2 + 1 = 3`;arith `3 + 1 = 4`];
598 REPEAT WEAKER_STRIP_TAC;
600 REPEAT WEAKER_STRIP_TAC;
601 COMMENT "preliminaries";
602 TYPIFY `initial_sublist vl (truncate_simplex 2 ul)` ASM_CASES_TAC;
604 TYPIFY `vl = ul` (C SUBGOAL_THEN ASSUME_TAC);
605 MATCH_MP_TAC INITIAL_SUBLIST_TRUNCATE;
606 BY(ASM_REWRITE_TAC[]);
607 ASM_REWRITE_TAC[arith `4 < 5`;arith `x + &4 = int_of_num 4 <=> x = &0`];
608 REWRITE_TAC[AFF_DIM_EQ_0];
609 TYPIFY `circumcenter (set_of_list ul)` EXISTS_TAC;
610 TYPIFY `!x y. x SUBSET {y} /\ y IN x ==> x = {(y:real^3)}` (C SUBGOAL_THEN MATCH_MP_TAC);
612 TYPIFY `set_of_list ul = {EL 0 ul,EL 1 ul,EL 2 ul,EL 3 ul}` (C SUBGOAL_THEN ASSUME_TAC);
613 MATCH_MP_TAC Bump.set_of_list4;
614 BY(ASM_REWRITE_TAC[]);
615 TYPIFY `~coplanar_alt {EL 0 ul,EL 1 ul,EL 2 ul,EL 3 ul}` (C SUBGOAL_THEN ASSUME_TAC);
616 GMATCH_SIMP_TAC (GSYM Leaf_cell.coplanar_eq_coplanar_alt);
617 BY(ASM_MESON_TAC[DIMINDEX_3;arith `2 <= 3`]);
618 TYPIFY `~affine_dependent {EL 0 ul,EL 1 ul,EL 2 ul,EL 3 ul}` (C SUBGOAL_THEN ASSUME_TAC);
619 GMATCH_SIMP_TAC AFF_DEP_COPLANAR;
622 MATCH_MP_TAC Collect_geom2.NOT_COPLANAR_IMP_CARD4;
623 BY(ASM_REWRITE_TAC[]);
625 INTRO_TAC Rogers.CIRCUMCENTER_IN_VORONOI_SET [`V`;`set_of_list ul`];
628 BY(ASM_MESON_TAC[Pack_defs.HL]);
629 BY(REWRITE_TAC[Sphere.VORONOI_LIST]);
630 REWRITE_TAC[SUBSET;IN_SING];
631 REPEAT WEAKER_STRIP_TAC;
632 INTRO_TAC Rogers.OAPVION3 [`set_of_list ul`];
635 DISCH_THEN (C INTRO_TAC [`x`]);
636 DISCH_THEN MATCH_MP_TAC;
637 GMATCH_SIMP_TAC Tskajxy.NOT_COPLANAR_R3;
640 REWRITE_TAC[IN_UNIV];
641 FIRST_X_ASSUM MP_TAC;
642 REWRITE_TAC[Sphere.VORONOI_LIST;Sphere.VORONOI_SET];
643 REWRITE_TAC[IN_INTERS;IN_ELIM_THM];
645 TYPIFY `!w. w IN set_of_list ul ==> x IN voronoi_closed V w` (C SUBGOAL_THEN MP_TAC);
647 REWRITE_TAC[Sphere.voronoi_closed;IN_ELIM_THM];
649 TYPIFY `dist(x,EL 0 ul)` EXISTS_TAC;
650 REPEAT WEAKER_STRIP_TAC;
651 MATCH_MP_TAC (arith `x <= y /\ y <= x ==> x = y`);
653 FIRST_X_ASSUM (C INTRO_TAC [`w`]);
655 DISCH_THEN MATCH_MP_TAC;
656 BY(ASM_MESON_TAC[SUBSET;IN;IN_INSERT]);
657 FIRST_X_ASSUM (C INTRO_TAC [`EL 0 ul`]);
659 BY(ASM_MESON_TAC[IN_INSERT]);
660 DISCH_THEN MATCH_MP_TAC;
661 BY(ASM_MESON_TAC[SUBSET;IN])
665 let EDGE_LE_2RAD = prove_by_refinement(
667 &0 < delta_x x1 x2 x3 x4 x5 x6 /\
668 &0 < x4 /\ &0 < x5 /\ &0 < x6 /\ &0 < ups_x x4 x5 x6 ==>
669 x4 <= &4 * rad2_x x1 x2 x3 x4 x5 x6`,
672 REPEAT WEAKER_STRIP_TAC;
673 MATCH_MP_TAC REAL_LE_TRANS;
674 TYPIFY `&4 * eta_x x4 x5 x6 pow 2` EXISTS_TAC;
676 GMATCH_SIMP_TAC Real_ext.REAL_LE_LMUL_IMP;
679 MATCH_MP_TAC Merge_ineq.rad2_x_eta_x;
680 BY(ASM_REWRITE_TAC[]);
681 INTRO_TAC Collect_geom.HVXIKHW [`sqrt x4`;`sqrt x5`;`sqrt x6`];
682 REWRITE_TAC[Collect_geom.ups_x_pow2];
683 REWRITE_TAC[Sphere.eta_y;LET_DEF;LET_END_DEF];
684 REPEAT (GMATCH_SIMP_TAC SQRT_POS_LE);
685 REPEAT (GMATCH_SIMP_TAC Merge_ineq.sqrtpow2);
686 ASM_SIMP_TAC [arith `&0 < x ==> &0 <= x`];
687 GMATCH_SIMP_TAC REAL_LE_LDIV_EQ;
691 TYPIFY `x4 = sqrt(x4) pow 2` (C SUBGOAL_THEN MP_TAC);
692 GMATCH_SIMP_TAC SQRT_POW_2;
693 BY(ASM_SIMP_TAC[arith `&0 < x ==> &0 <= x`]);
695 ASM_SIMP_TAC [arith `x = y ==> (x <= &4 * z <=> y <= &4 * z)`];
696 TYPIFY `sqrt x4 pow 2 <= (&2 * eta_x x4 x5 x6) pow 2` ENOUGH_TO_SHOW_TAC;
697 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC);
698 MATCH_MP_TAC Collect_geom2.POS_IMP_POW2;
700 GMATCH_SIMP_TAC SQRT_POS_LE;
701 BY(ASM_SIMP_TAC[arith `&0 < x ==> &0 <= x`]);
702 MATCH_MP_TAC REAL_LE_TRANS;
703 TYPIFY `max_real3 (sqrt x4) (sqrt x5) (sqrt x6)` EXISTS_TAC;
704 ASM_SIMP_TAC[arith `&2 * x = x * &2`];
705 REWRITE_TAC[Collect_geom.max_real3];
706 REWRITE_TAC[Misc_defs_and_lemmas.max_real];
707 BY(REPEAT COND_CASES_TAC THEN REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC)
711 let RAD2_Y_SQRT8 = prove_by_refinement(
713 &2 <= y5 /\ &2 <= y6 /\ y5 < &4 /\ y6 < &4 /\
714 &0 < delta_y y1 y2 y3 (sqrt8) y5 y6 ==>
715 &2 <= rad2_y y1 y2 y3 (sqrt8) y5 y6`,
718 REWRITE_TAC[Sphere.rad2_y;Sphere.delta_y;Sphere.y_of_x;Nonlinear_lemma.sqrt8_2;arith `#8.0 = &8`];
719 REPEAT WEAKER_STRIP_TAC;
720 REWRITE_TAC[arith `&2 <= x <=> &8 <= &4 * x`];
721 MATCH_MP_TAC EDGE_LE_2RAD;
722 REPEAT (GMATCH_SIMP_TAC REAL_LT_MUL_EQ);
723 ASM_SIMP_TAC[arith `&0 < &8`;arith `&2 <= x ==> &0 < x`];
724 MATCH_MP_TAC UPS_X8_POS;
725 BY(ASM_REWRITE_TAC[])
729 (* renamed from DIH_X_LE_PI *)
731 let DIH_X_LT_PI = prove_by_refinement(
732 `!x1 x2 x3 x4 x5 x6. &0 < x1 /\ &0 < delta_x x1 x2 x3 x4 x5 x6 ==>
733 dih_x x1 x2 x3 x4 x5 x6 < pi`,
736 REWRITE_TAC[Sphere.dih_x;LET_DEF;LET_END_DEF];
737 REPEAT WEAKER_STRIP_TAC;
738 REWRITE_TAC[arith `pi / &2 + x < pi <=> x < pi / &2`];
739 MATCH_MP_TAC Merge_ineq.ATN2_LE_PI2;
740 GMATCH_SIMP_TAC REAL_LT_RSQRT;
741 REWRITE_TAC[arith `&0 pow 2 = &0`];
742 REWRITE_TAC[arith `&0 < &4 * x <=> &0 < x`];
743 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
744 BY(ASM_REWRITE_TAC[])
748 let DIH_Y_LT_PI = prove_by_refinement(
749 `!y1 y2 y3 y4 y5 y6. &0 < y1 /\ &0 < delta_y y1 y2 y3 y4 y5 y6 ==>
750 dih_y y1 y2 y3 y4 y5 y6 < pi`,
753 REWRITE_TAC[Sphere.delta_y;Sphere.dih_y;LET_DEF;LET_END_DEF];
754 REPEAT WEAKER_STRIP_TAC;
755 MATCH_MP_TAC DIH_X_LT_PI;
757 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
758 BY(ASM_REWRITE_TAC[])
762 let DIHV_EQ_0_PI_EQ_COPLANAR_ALT = prove_by_refinement(
763 `!(v0:real^3) v1 w1 w2. ~coplanar {v0,v1,w1,w2} ==> ~(dihV v0 v1 w1 w2 = &0)`,
766 REPEAT WEAKER_STRIP_TAC;
767 TYPIFY` ~collinear {v0,v1,w1} /\ ~collinear{v0,v1,w2}` (C SUBGOAL_THEN ASSUME_TAC);
768 CONJ_TAC THEN MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR;
770 TYPIFY `w1` EXISTS_TAC;
771 TYPIFY `{v0,v1,w2,w1} = {v0,v1,w1,w2}` (C SUBGOAL_THEN SUBST1_TAC);
773 BY(ASM_REWRITE_TAC[]);
774 INTRO_TAC DIHV_EQ_0_PI_EQ_COPLANAR [`v0`;`v1`;`w1`;`w2`];
779 let AZIM_ZERO_SHIFT = prove_by_refinement(
780 `!u0 u1 u2 w w'. ~collinear {u0,u1,u2} /\ ~collinear {u0,u1,w} /\ ~collinear {u0,u1,w'} ==>
781 (azim u0 u1 u2 w = azim u0 u1 u2 w' <=> azim u0 u1 w w' = &0)`,
784 REPEAT WEAKER_STRIP_TAC;
785 MATCH_MP_TAC (TAUT `((a ==> b) /\ (b ==> a)) ==> (a = b)`);
787 REPEAT WEAKER_STRIP_TAC;
788 INTRO_TAC Fan.sum4_azim_fan [`u0`;`u1`;`u2`;`w`;`w'`];
791 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC);
795 INTRO_TAC Fan.sum5_azim_fan [`u0`;`u1`;`u2`;`w`;`w'`];
798 BY(REWRITE_TAC[Local_lemmas.AZIM_RANGE]);
804 let ORDER_AZIM_SUM2Pi0 = prove_by_refinement(
806 ~collinear {x, y, z} /\
807 (!i. i < n ==> ~collinear {x, y, g i}) /\
811 j < n /\ k < n /\ j < k
812 ==> azim x y z (g j) < azim x y z (g k))
813 ==> sum {i | i < n} (\i. azim x y (g i) (g (i + 1))) = &2 * pi`,
816 REPEAT WEAKER_STRIP_TAC;
817 INTRO_TAC Counting_spheres.ORDER_AZIM_SUM2Pi [`x`;`y`;`z`;`n`;`g o PRE`];
819 ASM_REWRITE_TAC[o_THM];
820 REWRITE_TAC[IN_NUMSEG];
822 REPEAT WEAKER_STRIP_TAC;
823 BY(ASM_MESON_TAC[arith `1 <= i /\ i <= n ==> PRE i < n`]);
824 ASM_REWRITE_TAC[arith `PRE (n + 1) = n /\ PRE 1 = 0`];
825 REPEAT WEAKER_STRIP_TAC;
826 BY(ASM_MESON_TAC[arith `1 <= i /\ i <= n ==> PRE i < n`;arith `j < k /\ 1 <= j ==> PRE j < PRE k`]);
827 DISCH_THEN (SUBST1_TAC o GSYM);
828 TYPIFY `sum (1..n) (\i. azim x y ((g o PRE) i) ((g o PRE) (i + 1))) = sum (1..n) ((\i. azim x y (g i) (g (i + 1))) o PRE)` (C SUBGOAL_THEN SUBST1_TAC);
830 REWRITE_TAC[IN_NUMSEG;o_THM];
831 REPEAT WEAKER_STRIP_TAC;
832 BY(ASM_SIMP_TAC[arith `1 <= x' ==> (PRE (x' + 1) = PRE x' + 1)`]);
833 MATCH_MP_TAC (GSYM Bump.BIJ_SUM);
834 REWRITE_TAC[BIJ;SURJ;INJ;IN_NUMSEG;IN_ELIM_THM];
837 DISCH_THEN (unlist REWRITE_TAC);
838 REPEAT WEAKER_STRIP_TAC;
839 TYPIFY `SUC x'` EXISTS_TAC;
840 BY(FIRST_X_ASSUM MP_TAC THEN ARITH_TAC)
845 (* MCELL FUNCTIONS *)
847 let CRITICAL_WEIGHT_POS_LE = prove_by_refinement(
848 `!V X. &0 <= critical_weight V X`,
851 REWRITE_TAC[Pack_defs.critical_weight];
852 REPEAT WEAKER_STRIP_TAC;
853 REWRITE_TAC[real_div];
854 GMATCH_SIMP_TAC REAL_LE_MUL;
857 REWRITE_TAC[REAL_LE_INV_EQ];
858 REWRITE_TAC[ REAL_OF_NUM_LE];
863 let GAMMAX_NO_BETA = prove_by_refinement(
864 `!V ul X e k. packing V /\ saturated V /\ barV V 3 ul /\ X = mcell k V ul /\
866 k < 4 /\ e IN critical_edgeX V X /\
867 gammaX V X lmfun >= &0 ==> gammaX V X lmfun * critical_weight V X + beta_bump_v1 V e X >= &0`,
870 REPEAT WEAKER_STRIP_TAC;
871 INTRO_TAC Bump.MCELL_BUMP_0 [`V`;`ul`;`e`;`k`];
875 DISCH_THEN SUBST1_TAC;
876 FIRST_X_ASSUM MP_TAC;
877 ASM_REWRITE_TAC[arith `x + &0 = x /\ (x >= &0 <=> &0 <= x)`];
879 GMATCH_SIMP_TAC REAL_LE_MUL;
880 BY(ASM_REWRITE_TAC[CRITICAL_WEIGHT_POS_LE])
886 let REUHADY = prove_by_refinement(
888 saturated V /\ packing V /\ leaf V [u0;u1;v1] /\ leaf V [u0;u1;v2] /\
890 sum {X | mcell_set V X /\ {u0,u1} IN edgeX V X /\ X SUBSET wedge_ge u0 u1 v1 v2}
891 (\t. dihX V t (u0,u1)) = azim u0 u1 v1 v2`,
894 REPEAT WEAK_STRIP_TAC;
895 MATCH_MP_TAC Reuhady.REUHADY1;
896 GEXISTL_TAC [`[u0;u1;v1]`;`[u0;u1;v2]`];
897 TYPIFY `EL 2 [u0;u1;v1] = v1 /\ EL 2 [u0;u1;v2] = v2` (C SUBGOAL_THEN (unlist REWRITE_TAC));
898 BY(REWRITE_TAC[Bump.EL_EXPLICIT]);
899 TYPIFY `(hl [u0;u1;v1] < sqrt2 /\ hl [u0;u1;v2] < sqrt2 /\ [u0;u1;v1] IN barV V 2 /\ [u0;u1;v2] IN barV V 2) /\ hl [u0;u1] < sqrt(&2)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
901 BY(ASM_MESON_TAC[Leaf_cell.leaf;IN]);
902 REPEAT WEAK_STRIP_TAC;
903 INTRO_TAC Rogers.XNHPWAB4 [`V`;`[u0;u1;v1]`;`2`];
904 ASM_REWRITE_TAC[GSYM Sphere.sqrt2];
905 DISCH_THEN (C INTRO_TAC [`1`;`2`]);
906 REWRITE_TAC[arith `1 < 2 /\ 2 <= 2`;Marchal_cells.TRUNCATE_SIMPLEX_EXPLICIT_2;Marchal_cells.TRUNCATE_SIMPLEX_EXPLICIT_1];
907 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
909 TYPIFY `set_of_list (truncate_simplex 1 [u0; u1; v1]) = {u0, u1} /\ set_of_list (truncate_simplex 1 [u0; u1; v2]) = {u0, u1}` (C SUBGOAL_THEN (unlist REWRITE_TAC));
910 REWRITE_TAC[Marchal_cells.TRUNCATE_SIMPLEX_EXPLICIT_2;Marchal_cells.TRUNCATE_SIMPLEX_EXPLICIT_1];
911 BY(REWRITE_TAC[Bump.set_of_list2_explicit]);
912 TYPIFY `~([u0; u1; v1] = [u0; u1; v2])` (C SUBGOAL_THEN (unlist REWRITE_TAC));
913 BY(ASM_REWRITE_TAC[CONS_11]);
914 TYPIFY `~collinear {u0,u1,v1} /\ ~collinear {u0,u1,v2}` (C SUBGOAL_THEN ASSUME_TAC);
915 REWRITE_TAC[GSYM Bump.set_of_list3_explicit];
916 BY(ASM_MESON_TAC[GBEWYFX]);
917 ASM_SIMP_TAC[Leaf_cell.WEDGE_GE_ALMOST_DISJOINT];
918 TYPIFY `~(u0 = u1)` (C SUBGOAL_THEN ASSUME_TAC);
919 BY(ASM_MESON_TAC[Collect_geom.NOT_COLLINEAR_IMP_2_UNEQUAL]);
920 TYPIFY `u0 IN V /\ u1 IN V` (C SUBGOAL_THEN (unlist ASM_REWRITE_TAC));
921 INTRO_TAC Packing3.BARV_SUBSET [`V`;`2`;`[u0;u1;v1]`];
923 BY(ASM_MESON_TAC[leaf;IN;Sphere.BARV]);
924 REWRITE_TAC[Bump.set_of_list3_explicit];
927 ASM_SIMP_TAC[Local_lemmas.AZIM_EQ_0_GE_ALT2];
929 INTRO_TAC Leaf_cell.FCHKUGT [`V`;`u0`;`u1`;`v1`;`v2`];
931 ASM_REWRITE_TAC[cc_A0;Bump.EL_EXPLICIT];
932 MATCH_MP_TAC Local_lemmas.COLL_IN_AFF_GT_AFF_GT_EQ;
934 FIRST_X_ASSUM MP_TAC;
935 GMATCH_SIMP_TAC Collect_geom.IN_AFF_GE_INTERPRET_TO_AFF_GT_AND_AFF;
937 BY(ASM_SIMP_TAC[Fan.th3a]);
938 REWRITE_TAC[Collect_geom.aff];
939 TYPIFY `v2 IN affine hull {u0,u1}` ASM_CASES_TAC;
940 FIRST_X_ASSUM (MP_TAC o (MATCH_MP AFFINE_HULL_3_IMP_COLLINEAR));
943 BY(ASM_REWRITE_TAC[]);
945 REPEAT WEAK_STRIP_TAC;
946 MATCH_MP_TAC Leaf_cell.EWYBJUA;
947 TYPIFY `V` EXISTS_TAC;
948 BY(ASM_REWRITE_TAC[])
952 let s_leaf_leaf = prove_by_refinement(
953 `!V ul x. x IN s_leaf V ul ==> leaf V [EL 0 ul;EL 1 ul;x]`,
956 BY(MESON_TAC[IN;s_leaf])
960 let s_leaf_collinear = prove_by_refinement(
961 `!V ul x. packing V /\ saturated V /\ x IN s_leaf V ul ==> ~(collinear {EL 0 ul,EL 1 ul,x})`,
964 REPEAT WEAK_STRIP_TAC;
965 FIRST_X_ASSUM (MP_TAC o (MATCH_MP s_leaf_leaf));
967 INTRO_TAC Leaf_cell.GBEWYFX [`V`;`[EL 0 ul;EL 1 ul;x]`];
968 REWRITE_TAC[Bump.set_of_list3_explicit];
969 BY(ASM_REWRITE_TAC[])
973 let LEAF_RANKING_LEMMA = prove_by_refinement(
974 `!V ul w0 n. 0 < n /\ packing V /\ saturated V /\
975 s_leaf V ul HAS_SIZE n /\
976 ~collinear {EL 0 ul,EL 1 ul,w0} ==>
977 (?f. IMAGE f (:num) = s_leaf V ul /\
978 (!i. f (i + n) = f i) /\
979 (!i j. i < n /\ j < n /\ i < j ==> azim (EL 0 ul) (EL 1 ul) w0 (f i) < azim (EL 0 ul) (EL 1 ul) w0 (f j)))`,
982 REPEAT WEAK_STRIP_TAC;
983 TYPED_ABBREV_TAC `(s:real^3->bool) = s_leaf V ul` ;
984 TYPIFY `!x. x IN s ==> ~(collinear {EL 0 ul,EL 1 ul,x})` (C SUBGOAL_THEN ASSUME_TAC);
985 BY(ASM_MESON_TAC[s_leaf_collinear]);
986 INTRO_TAC STRICT_SORT_FINITE [`\v w. (azim (EL 0 ul) (EL 1 ul) w0 v <= azim (EL 0 ul) (EL 1 ul) w0 w)`;`s`;`n` ];
992 REPEAT WEAK_STRIP_TAC;
993 TYPIFY `azim (EL 0 ul) (EL 1 ul) w0 x = azim (EL 0 ul) (EL 1 ul) w0 y ==> (x = y)` ENOUGH_TO_SHOW_TAC;
994 REPEAT WEAK_STRIP_TAC;
995 FIRST_X_ASSUM MATCH_MP_TAC;
996 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
998 MATCH_MP_TAC Leaf_cell.FCHKUGT;
999 GEXISTL_TAC [`V`;`EL 0 ul`;`EL 1 ul`];
1000 REWRITE_TAC[Leaf_cell.cc_A0];
1001 REWRITE_TAC[Bump.EL_EXPLICIT];
1002 FIRST_ASSUM (C INTRO_TAC [`x`]);
1003 FIRST_X_ASSUM (C INTRO_TAC [`y`]);
1005 REPEAT WEAK_STRIP_TAC;
1006 FIRST_X_ASSUM_ST `azim` MP_TAC;
1007 ASM_SIMP_TAC[AZIM_EQ_ALT];
1008 BY(ASM_MESON_TAC[Local_lemmas.COLL_IN_AFF_GT_AFF_GT_EQ;s_leaf_leaf]);
1009 REPEAT WEAK_STRIP_TAC;
1010 TYPIFY `\i. f (SUC (i MOD n))` EXISTS_TAC;
1014 REPEAT WEAK_STRIP_TAC;
1015 INTRO_TAC MOD_MULT_ADD [`1`;`n`;`i`];
1016 REWRITE_TAC[arith `1 * n + i = i + n`];
1017 DISCH_THEN SUBST1_TAC;
1019 REPEAT WEAK_STRIP_TAC;
1020 ASM_SIMP_TAC[MOD_LT];
1021 FIRST_X_ASSUM (C INTRO_TAC [`SUC i`;`SUC j`]);
1022 REWRITE_TAC[arith `~(a <= b) <=> (b <a)`];
1023 DISCH_THEN MATCH_MP_TAC;
1024 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[IN_NUMSEG] THEN ARITH_TAC);
1026 REWRITE_TAC[EXTENSION;IMAGE;IN_ELIM_THM;IN_UNIV];
1028 MATCH_MP_TAC (TAUT `((a==> b) /\ (b ==> a)) ==> (a = b)`);
1030 REPEAT WEAK_STRIP_TAC;
1031 TYPIFY `SUC (x' MOD n)` EXISTS_TAC;
1032 ASM_REWRITE_TAC[IN_NUMSEG];
1033 REWRITE_TAC[arith `1 <= SUC x`];
1034 REWRITE_TAC[arith `SUC x <= n <=> x < n`];
1035 BY(ASM_MESON_TAC[DIVISION;arith `~(n=0) <=> (0 < n)`]);
1036 REPEAT WEAK_STRIP_TAC;
1038 TYPIFY `PRE x'` EXISTS_TAC;
1040 TYPIFY `PRE x' MOD n = PRE x'` (C SUBGOAL_THEN SUBST1_TAC);
1041 MATCH_MP_TAC MOD_LT;
1042 FIRST_X_ASSUM_ST `IN` MP_TAC;
1043 REWRITE_TAC[IN_NUMSEG];
1045 FIRST_X_ASSUM_ST `IN` MP_TAC;
1046 REWRITE_TAC[IN_NUMSEG];
1052 let S_LEAF_SET = prove_by_refinement(
1053 `!V ul. s_leaf V ul = { u | leaf V [EL 0 ul; EL 1 ul; u] /\
1054 (cc_ke V [EL 0 ul; EL 1 ul; u] = 4 \/ cc_ke V [EL 1 ul; EL 0 ul; u] = 4)}`,
1057 BY(REWRITE_TAC[EXTENSION;IN_ELIM_THM;s_leaf;IN])
1061 (* renamed from LEAF_RANK_COLLINEAR: *)
1063 let LEAF_RANK_COLLINEAR = prove_by_refinement(
1064 `!V ul w0 n f k. packing V /\ saturated V /\ leaf_rank V ul w0 n f ==> ~collinear {EL 0 ul,EL 1 ul,f k}`,
1067 REWRITE_TAC[leaf_rank;IMAGE;IN_UNIV;EXTENSION;IN_ELIM_THM];
1068 REPEAT WEAKER_STRIP_TAC;
1069 FIRST_X_ASSUM MP_TAC THEN REWRITE_TAC[];
1070 MATCH_MP_TAC s_leaf_collinear;
1075 let S_LEAF_SUBSET_PACKING = prove_by_refinement(
1076 `!V ul. packing V /\ saturated V ==> s_leaf V ul SUBSET V`,
1079 REPEAT WEAK_STRIP_TAC;
1080 REWRITE_TAC[S_LEAF_SET;leaf;SUBSET;IN_ELIM_THM;IN];
1081 REPEAT WEAKER_STRIP_TAC;
1082 FIRST_X_ASSUM (MP_TAC o (MATCH_MP Packing3.BARV_SUBSET));
1083 REWRITE_TAC[set_of_list];
1088 let S_LEAF_BOUNDED = prove_by_refinement(
1089 `!V ul. packing V /\ saturated V ==> s_leaf V ul SUBSET (ball(EL 0 ul, &2 * sqrt(&2) ))`,
1092 REPEAT WEAKER_STRIP_TAC;
1093 REWRITE_TAC[S_LEAF_SET;SUBSET;IN_ELIM_THM;ball;leaf;IN;Sphere.sqrt2];
1094 REPEAT WEAKER_STRIP_TAC;
1095 INTRO_TAC Rogers.HL_PROPERTIES [`V`;`[EL 0 ul;EL 1 ul;x]`;`2`];
1096 ASM_REWRITE_TAC[set_of_list;IN_INSERT];
1097 TYPED_ABBREV_TAC `(d:real^3) = circumcenter {EL 0 ul, EL 1 ul, x}` ;
1098 REPEAT WEAKER_STRIP_TAC;
1100 FIRST_ASSUM (C INTRO_TAC [`EL 0 ul`]);
1102 ONCE_REWRITE_TAC[DIST_SYM];
1103 FIRST_X_ASSUM (C INTRO_TAC [`x`]);
1105 REPEAT WEAKER_STRIP_TAC;
1106 INTRO_TAC DIST_TRIANGLE [`EL 0 ul`;`d`;`x`];
1107 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC)
1111 let S_LEAF_FINITE = prove_by_refinement(
1112 `!V ul. packing V /\ saturated V ==> FINITE (s_leaf V ul)`,
1115 REPEAT WEAKER_STRIP_TAC;
1116 MATCH_MP_TAC FINITE_SUBSET;
1117 TYPIFY `V INTER ball(EL 0 ul, &2 * sqrt(&2))` EXISTS_TAC;
1119 MATCH_MP_TAC Packing3.KIUMVTC;
1120 BY(ASM_REWRITE_TAC[]);
1121 REWRITE_TAC[SUBSET_INTER];
1122 BY(ASM_MESON_TAC[S_LEAF_SUBSET_PACKING;S_LEAF_BOUNDED])
1126 let S_LEAF_SYM = prove_by_refinement(
1130 s_leaf V [u1;u0] = s_leaf V [u0;u1]`,
1133 REPEAT WEAKER_STRIP_TAC;
1134 ASM_REWRITE_TAC[EXTENSION;s_leaf;IN;Bump.EL_EXPLICIT];
1135 BY(ASM_MESON_TAC[Leaf_cell.ZASUVOR])
1139 let S_LEAF_TRUNCATE = prove_by_refinement(
1140 `!V ul. s_leaf V ul = s_leaf V [EL 0 ul;EL 1 ul]`,
1143 BY(REWRITE_TAC[EXTENSION;s_leaf;IN;Bump.EL_EXPLICIT])
1147 let MCELL_AVOID_LEAVES = prove_by_refinement(
1148 `!V ul X. packing V /\ saturated V /\ ~NULLSET X /\ mcell_set V X ==>
1149 ?v. v IN X /\ (!u. u IN s_leaf V ul ==> ~(v IN aff_ge {EL 0 ul,EL 1 ul} {u}))`,
1152 REPEAT WEAKER_STRIP_TAC;
1154 TYPIFY `X SUBSET UNIONS (IMAGE (\u. aff_ge {EL 0 ul, EL 1 ul} {u}) (s_leaf V ul))` (C SUBGOAL_THEN ASSUME_TAC);
1155 REWRITE_TAC[SUBSET;IN_UNIONS;IN_IMAGE];
1156 FIRST_X_ASSUM MP_TAC;
1158 FIRST_X_ASSUM_ST `NULLSET` MP_TAC;
1160 MATCH_MP_TAC NEGLIGIBLE_SUBSET;
1161 TYPIFY `UNIONS (IMAGE (\u. aff_ge {EL 0 ul, EL 1 ul} {u}) (s_leaf V ul))` EXISTS_TAC;
1163 MATCH_MP_TAC NEGLIGIBLE_UNIONS;
1165 MATCH_MP_TAC FINITE_IMAGE;
1166 MATCH_MP_TAC S_LEAF_FINITE;
1167 BY(ASM_REWRITE_TAC[]);
1168 REWRITE_TAC[IN_IMAGE];
1169 REPEAT WEAKER_STRIP_TAC;
1171 BY(REWRITE_TAC[NULLSET_AFF_2_1])
1175 let MCELL_WEDGE_UNIQUE = prove_by_refinement(
1179 s_leaf V ul HAS_SIZE n /\
1180 ~collinear {EL 0 ul, EL 1 ul, w0} /\
1181 leaf_rank V ul w0 n f /\ mcell_set V X /\
1183 {EL 0 ul,EL 1 ul} IN edgeX V X ==>
1184 (!i j. i < n /\ j < n /\ X SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) /\
1185 X SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f j) (f (SUC j)) ==> (i = j))`,
1188 REPEAT WEAKER_STRIP_TAC;
1189 TYPIFY `n <= 1` ASM_CASES_TAC;
1190 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
1192 TYPIFY `!k. ~collinear {EL 0 ul,EL 1 ul, f k}` (C SUBGOAL_THEN ASSUME_TAC);
1193 BY(ASM_MESON_TAC[LEAF_RANK_COLLINEAR]);
1194 TYPIFY `wedge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) INTER wedge (EL 0 ul) (EL 1 ul) (f j) (f (SUC j)) = {}` ENOUGH_TO_SHOW_TAC;
1195 INTRO_TAC Leaf_cell.WEDGE_WEDGE_GE [`EL 0 ul`;`EL 1 ul`;`f i`;`f (SUC i)`];
1197 BY(ASM_MESON_TAC[]);
1198 INTRO_TAC Leaf_cell.WEDGE_WEDGE_GE [`EL 0 ul`;`EL 1 ul`;`f j`;`f (SUC j)`];
1200 BY(ASM_MESON_TAC[]);
1201 REPEAT WEAKER_STRIP_TAC;
1202 TYPIFY `X SUBSET aff_ge {EL 0 ul, EL 1 ul} {f i} UNION aff_ge {EL 0 ul, EL 1 ul} {f (SUC i)} UNION aff_ge {EL 0 ul,EL 1 ul} {f j} UNION aff_ge {EL 0 ul, EL 1 ul} { f (SUC j)}` (C SUBGOAL_THEN ASSUME_TAC);
1203 REPEAT (FIRST_X_ASSUM MP_TAC);
1205 BY(ASM_MESON_TAC[NEGLIGIBLE_UNION;NEGLIGIBLE_SUBSET;NULLSET_AFF_2_1]);
1206 INTRO_TAC Counting_spheres.WEDGE_ORDER_DISJOINT [`EL 0 ul`;`EL 1 ul`;`w0`;`n`;`f o PRE`];
1210 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
1211 REWRITE_TAC[leaf_rank];
1212 REWRITE_TAC[arith `PRE (n+1) = n /\ PRE 1 = 0`];
1213 REPEAT WEAKER_STRIP_TAC;
1215 BY(ASM_MESON_TAC[arith `0 + n = n`]);
1216 REWRITE_TAC[IN_NUMSEG];
1217 REPEAT WEAKER_STRIP_TAC;
1218 FIRST_X_ASSUM MATCH_MP_TAC;
1219 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
1220 DISCH_THEN (C INTRO_TAC [`SUC i`;`SUC j`]);
1221 ASM_REWRITE_TAC[IN_NUMSEG;arith `1 <= SUC l`;arith `SUC i = SUC j <=> i = j`;arith `PRE (SUC i) = i`;arith `PRE(SUC i + 1) = SUC i`];
1222 DISCH_THEN MATCH_MP_TAC;
1223 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC)
1227 let LEAF_RANK_PERIODIC = prove_by_refinement(
1228 `!V ul w0 n f. leaf_rank V ul w0 n f ==> periodic f n`,
1231 BY(MESON_TAC[leaf_rank;Oxl_def.periodic])
1235 let LEAF_RANK_AZIM_INJ = prove_by_refinement(
1236 `!V ul w0 n f i j. saturated V /\ packing V /\ ~(n=0) /\
1237 ~collinear {EL 0 ul, EL 1 ul, w0} /\ leaf_rank V ul w0 n f ==> (
1238 azim (EL 0 ul) (EL 1 ul) (f i) (f j) = &0 <=> ((i MOD n) = (j MOD n)))`,
1241 REPEAT WEAKER_STRIP_TAC;
1242 TYPIFY `!j. f j IN s_leaf V ul` (C SUBGOAL_THEN ASSUME_TAC);
1243 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
1244 REWRITE_TAC[leaf_rank;EXTENSION;IN_IMAGE;IN_UNIV];
1246 TYPIFY `!j. leaf V [EL 0 ul; EL 1 ul; f j]` (C SUBGOAL_THEN ASSUME_TAC);
1248 MATCH_MP_TAC s_leaf_leaf;
1249 BY(ASM_REWRITE_TAC[]);
1250 TYPIFY `!j. ~collinear {EL 0 ul, EL 1 ul, f j}` (C SUBGOAL_THEN ASSUME_TAC);
1252 INTRO_TAC Leaf_cell.GBEWYFX [`V`;`[EL 0 ul;EL 1 ul; f j]`];
1253 BY(ASM_REWRITE_TAC[set_of_list]);
1254 INTRO_TAC AZIM_ZERO_SHIFT [`EL 0 ul`;`EL 1 ul`;`w0`];
1255 DISCH_THEN ((unlist ASM_SIMP_TAC) o GSYM);
1256 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
1257 MATCH_MP_TAC LEAF_RANK_PERIODIC;
1258 BY(ASM_MESON_TAC[]);
1259 TYPIFY `!k. f k = f (k MOD n)` (C SUBGOAL_THEN ASSUME_TAC);
1260 BY(ASM_MESON_TAC[Oxl_def.periodic_mod]);
1261 ONCE_REWRITE_TAC[Geomdetail.EQ_EXPAND];
1263 BY(ASM_MESON_TAC[]);
1266 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
1267 REWRITE_TAC[leaf_rank];
1268 REPEAT WEAKER_STRIP_TAC;
1269 TYPIFY `!k. k MOD n < n` (C SUBGOAL_THEN ASSUME_TAC);
1270 BY(ASM_MESON_TAC[DIVISION]);
1271 TYPIFY `i MOD n < j MOD n` ASM_CASES_TAC;
1272 BY(ASM_MESON_TAC[arith `x < y ==> ~(x = y)`]);
1273 TYPIFY `j MOD n < i MOD n` (C SUBGOAL_THEN ASSUME_TAC);
1274 FIRST_X_ASSUM MP_TAC;
1275 REWRITE_TAC[arith `~((i:num) < j) <=> (j < i \/ (i = j))`];
1276 BY(ASM_REWRITE_TAC[]);
1277 FIRST_X_ASSUM (C INTRO_TAC [`j MOD n`;`i MOD n`]);
1279 BY(ASM_MESON_TAC[]);
1280 BY(ASM_MESON_TAC[arith `x < y ==> ~(x = y)`])
1284 let LEAF_RANK_AZIM_NZ = prove_by_refinement(
1285 `!V ul w0 n f i. saturated V /\ packing V /\ leaf_rank V ul w0 n f /\ 1 < n
1286 /\ ~collinear {EL 0 ul, EL 1 ul,w0} ==> ~(azim (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) = &0)`,
1289 REPEAT WEAKER_STRIP_TAC;
1290 INTRO_TAC LEAF_RANK_AZIM_INJ [`V`;`ul`;`w0`;`n`;`f`;`i`;`SUC i`];
1292 ASM_SIMP_TAC[arith `1 < n ==> ~(n = 0)`];
1293 BY(ASM_MESON_TAC[arith `SUC i = i + 1`;arith `1 < n ==> ~(n = 0)`;arith `~(1 = 0)`;arith `1 < n ==> ~(n <= 1)`;MOD_PERIOD_BOUNDED_ALT])
1297 let MCELL_IN_WEDGE = prove_by_refinement(
1302 s_leaf V ul HAS_SIZE n /\
1303 ~collinear {EL 0 ul, EL 1 ul, w0} /\
1304 leaf_rank V ul w0 n f /\ mcell_set V X /\
1306 {EL 0 ul,EL 1 ul} IN edgeX V X ==>
1307 ?i. i < n /\ X SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i))`,
1310 REPEAT WEAKER_STRIP_TAC;
1311 INTRO_TAC MCELL_AVOID_LEAVES [`V`;`ul`;`X`];
1313 REPEAT WEAKER_STRIP_TAC;
1314 TYPIFY `!j. f j IN s_leaf V ul` (C SUBGOAL_THEN ASSUME_TAC);
1315 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
1316 REWRITE_TAC[leaf_rank;EXTENSION;IN_IMAGE;IN_UNIV];
1318 TYPIFY `!j. leaf V [EL 0 ul; EL 1 ul; f j]` (C SUBGOAL_THEN ASSUME_TAC);
1320 MATCH_MP_TAC s_leaf_leaf;
1321 BY(ASM_REWRITE_TAC[]);
1322 TYPIFY `!j. ~collinear {EL 0 ul, EL 1 ul, f j}` (C SUBGOAL_THEN ASSUME_TAC);
1324 INTRO_TAC Leaf_cell.GBEWYFX [`V`;`[EL 0 ul;EL 1 ul; f j]`];
1325 BY(ASM_REWRITE_TAC[set_of_list]);
1326 COMMENT "reduce to v in wedge";
1327 TYPIFY `?i. i < n /\ v IN wedge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i))` ENOUGH_TO_SHOW_TAC;
1328 REPEAT WEAKER_STRIP_TAC;
1329 TYPIFY `i` EXISTS_TAC;
1331 MATCH_MP_TAC Leaf_cell.BDXKHTW;
1332 TYPIFY `V` EXISTS_TAC;
1335 BY(ASM_MESON_TAC[IN]);
1337 REWRITE_TAC[IN_INTER];
1338 BY(ASM_MESON_TAC[]);
1339 MATCH_MP_TAC LEAF_RANK_AZIM_NZ;
1340 BY(ASM_MESON_TAC[]);
1341 COMMENT "try top piece";
1342 TYPIFY `v IN wedge (EL 0 ul) (EL 1 ul) (f (PRE n)) (f 0)` ASM_CASES_TAC;
1343 TYPIFY `PRE n` EXISTS_TAC;
1345 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
1346 TYPIFY `f (SUC (PRE n)) = f 0` ENOUGH_TO_SHOW_TAC;
1347 DISCH_THEN SUBST1_TAC;
1348 BY(ASM_REWRITE_TAC[]);
1349 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
1350 REWRITE_TAC[leaf_rank];
1351 REPEAT WEAKER_STRIP_TAC;
1353 FIRST_X_ASSUM (C INTRO_TAC [`0`]);
1354 TYPIFY `SUC (PRE n) = n` (C SUBGOAL_THEN SUBST1_TAC);
1355 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
1356 BY(REWRITE_TAC[arith `0 + n = n`]);
1357 INTRO_TAC Leaf_cell.WEDGE_COMPLEMENT [`EL 0 ul`;`EL 1 ul`;`f (PRE n)`;`f 0`];
1359 GMATCH_SIMP_TAC LEAF_RANK_AZIM_INJ;
1360 TYPIFY `n` EXISTS_TAC;
1362 BY(ASM_MESON_TAC[arith `1 < n ==> ~(n = 0)`]);
1363 ASM_SIMP_TAC[MOD_0;arith `1 < n ==> ~(n=0)`];
1364 TYPIFY `PRE n MOD n = PRE n` (C SUBGOAL_THEN SUBST1_TAC);
1365 MATCH_MP_TAC MOD_LT;
1366 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
1367 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
1368 REWRITE_TAC[EXTENSION;IN_UNIV;IN_DIFF];
1369 DISCH_THEN (C INTRO_TAC [`v`]);
1371 REWRITE_TAC[Local_lemmas.WEDGE_GE_AZIM_LE];
1373 TYPED_ABBREV_TAC `(A:num->bool) = {i | i < n /\ azim (EL 0 ul) (EL 1 ul) (f 0) (f i) < azim (EL 0 ul) (EL 1 ul) (f 0) v }` ;
1374 TYPIFY `0 IN A` (C SUBGOAL_THEN ASSUME_TAC);
1376 REWRITE_TAC[IN_ELIM_THM;AZIM_REFL];
1378 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
1380 TYPIFY `azim (EL 0 ul) (EL 1 ul) (f 0) v = &0` (C SUBGOAL_THEN ASSUME_TAC);
1381 MATCH_MP_TAC (arith `~(&0 < x) /\ (&0 <= x) ==> (x = &0)`);
1382 BY(ASM_REWRITE_TAC[Local_lemmas.AZIM_RANGE]);
1383 BY(ASM_MESON_TAC[Local_lemmas.AZIM_EQ_0_GE_ALT2]);
1384 INTRO_TAC num_MAX [`A`];
1385 DISCH_THEN (MP_TAC o MATCH_MP (TAUT `(a <=> b) ==> (a ==> b)`));
1388 BY(ASM_MESON_TAC[IN]);
1389 TYPIFY `n` EXISTS_TAC;
1391 REWRITE_TAC[IN_ELIM_THM];
1393 REPEAT WEAKER_STRIP_TAC;
1394 TYPIFY `m` EXISTS_TAC;
1395 TYPIFY `m < n /\ azim (EL 0 ul) (EL 1 ul) (f 0) (f m) < azim (EL 0 ul) (EL 1 ul) (f 0) v` (C SUBGOAL_THEN ASSUME_TAC);
1397 FIRST_X_ASSUM MP_TAC;
1399 BY(REWRITE_TAC[IN_ELIM_THM]);
1401 REWRITE_TAC[Reuhady.WEDGE_SIMPLE;IN_ELIM_THM];
1402 COMMENT "v not collinear";
1403 TYPIFY `~(EL 0 ul= EL 1 ul)` (C SUBGOAL_THEN ASSUME_TAC);
1404 BY(ASM_MESON_TAC[Collect_geom.NOT_COLLINEAR_IMP_2_UNEQUAL]);
1405 TYPIFY `~collinear {EL 0 ul,EL 1 ul,v}` (C SUBGOAL_THEN ASSUME_TAC);
1406 ASM_SIMP_TAC[COLLINEAR_3_AFFINE_HULL];
1408 FIRST_X_ASSUM_ST `aff_ge` (C INTRO_TAC [`f 0`]);
1410 TYPIFY `affine hull {EL 0 ul,EL 1 ul} SUBSET aff_ge {EL 0 ul,EL 1 ul} {f 0}` ENOUGH_TO_SHOW_TAC;
1411 FIRST_X_ASSUM MP_TAC;
1413 MATCH_MP_TAC AFFINE_HULL_SUBSET_AFF_GE;
1414 MATCH_MP_TAC Fan.th3a;
1415 BY(ASM_MESON_TAC[]);
1416 COMMENT "do azim shifts";
1418 INTRO_TAC Leaf_cell.AZIM_BASE_SHIFT_LE [`EL 0 ul`;`EL 1 ul`;`f 0 `;`f m`;`f m`;`v`];
1421 BY(ASM_SIMP_TAC[arith `x <= x`;arith `x < y ==> x <= y`]);
1422 REWRITE_TAC[AZIM_REFL];
1423 BY(REPLICATE_TAC 5 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
1424 COMMENT "second azim ineq";
1425 TYPIFY `SUC m < n` (C SUBGOAL_THEN ASSUME_TAC);
1426 TYPIFY `~(m= PRE n)` ENOUGH_TO_SHOW_TAC;
1427 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
1429 REPEAT (FIRST_X_ASSUM_ST `azim` MP_TAC);
1432 TYPIFY `~(SUC m IN A)` (C SUBGOAL_THEN MP_TAC);
1433 BY(ASM_MESON_TAC[IN;arith `~(SUC m <= m)`]);
1435 ASM_REWRITE_TAC[IN_ELIM_THM];
1436 REWRITE_TAC[arith `~(x < y) <=> y <= x`];
1438 INTRO_TAC Leaf_cell.AZIM_BASE_SHIFT_LE [`EL 0 ul`;`EL 1 ul`;`f 0 `;`f m`;`v`;`f (SUC m)`];
1440 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
1441 INTRO_TAC Leaf_cell.AZIM_BASE_SHIFT_LE [`EL 0 ul`;`EL 1 ul`;`w0 `;`f 0`;`f m`;`f (SUC m)`];
1444 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
1445 REWRITE_TAC[leaf_rank];
1446 REPEAT WEAKER_STRIP_TAC;
1448 TYPIFY `m = 0` ASM_CASES_TAC;
1451 FIRST_X_ASSUM (C INTRO_TAC [`0`;`m`]);
1452 BY(ASM_MESON_TAC[arith `1 < n ==> 0 < n`;arith `~(m=0) ==> 0 < m`;arith `x < y ==> x <= y`]);
1453 FIRST_X_ASSUM (C INTRO_TAC [`0`;`SUC m`]);
1454 BY(ASM_MESON_TAC[arith `1 < n ==> 0 < n`;arith ` 0 < SUC m`;arith `x < y ==> x <= y`]);
1455 REPEAT WEAKER_STRIP_TAC;
1456 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
1457 REWRITE_TAC[leaf_rank];
1458 REPEAT WEAKER_STRIP_TAC;
1459 FIRST_X_ASSUM (C INTRO_TAC [`m`;`SUC m`]);
1461 BY(ASM_REWRITE_TAC[arith `m < SUC m`]);
1462 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
1463 ONCE_REWRITE_TAC [arith `x < y <=> &0 < y - x`];
1464 DISCH_THEN (SUBST1_TAC o GSYM);
1465 MATCH_MP_TAC (arith `~(x = y) /\ (x <= y) ==> &0 < y - x`);
1467 ASM_SIMP_TAC[AZIM_ZERO_SHIFT];
1468 ONCE_REWRITE_TAC[Local_lemmas.AZIM_EQ_0_SYM2];
1469 BY(ASM_SIMP_TAC[AZIM_EQ_0_GE_ALT])
1473 let LEAF_RANK_REUHADY = prove_by_refinement(
1476 packing V /\ saturated V /\ s_leaf V ul HAS_SIZE n /\
1477 ~collinear {EL 0 ul, EL 1 ul, w0 } /\
1478 leaf_rank V ul w0 n f ==>
1479 azim_mcell V f (EL 0 ul) (EL 1 ul) i = azim (EL 0 ul) (EL 1 ul) (f i) (f (SUC i))`,
1482 REPEAT WEAKER_STRIP_TAC;
1483 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
1484 MATCH_MP_TAC LEAF_RANK_PERIODIC;
1485 BY(ASM_MESON_TAC[]);
1486 TYPIFY `!k. f (k MOD n) = f k` (C SUBGOAL_THEN ASSUME_TAC);
1487 BY(ASM_MESON_TAC[Oxl_def.periodic_mod;arith `1 < n ==> ~(n=0)`]);
1488 REWRITE_TAC[azim_mcell];
1489 INTRO_TAC REUHADY [`V`;`EL 0 ul`;`EL 1 ul`;`f i`;`f (SUC i)`];
1490 DISCH_THEN MATCH_MP_TAC;
1491 TYPIFY `!j. f j IN s_leaf V ul` (C SUBGOAL_THEN ASSUME_TAC);
1492 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
1493 REWRITE_TAC[leaf_rank;EXTENSION;IN_IMAGE;IN_UNIV];
1495 TYPIFY `!j. leaf V [EL 0 ul; EL 1 ul; f j]` (C SUBGOAL_THEN ASSUME_TAC);
1497 MATCH_MP_TAC s_leaf_leaf;
1498 BY(ASM_REWRITE_TAC[]);
1501 INTRO_TAC LEAF_RANK_AZIM_NZ [`V`;`ul`;`w0`;`n`;`f`;`i`];
1503 BY(ASM_REWRITE_TAC[]);
1505 BY(REWRITE_TAC[AZIM_REFL])
1509 let LEAF_RANK_BIJ = prove_by_refinement(
1512 packing V /\ saturated V /\ s_leaf V ul HAS_SIZE n /\
1513 EL 0 ul IN V /\ EL 1 ul IN V /\
1514 ~collinear {EL 0 ul, EL 1 ul, w0 } /\
1515 leaf_rank V ul w0 n f ==>
1516 BIJ SND {i,X | i < n /\
1518 {EL 0 ul, EL 1 ul} IN edgeX V X /\
1519 X SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i))} {X | mcell_set V X /\
1520 {EL 0 ul, EL 1 ul} IN edgeX V X }
1524 REPEAT WEAKER_STRIP_TAC;
1525 REWRITE_TAC[BIJ;INJ];
1528 REWRITE_TAC[IN_ELIM_THM];
1529 REPEAT WEAKER_STRIP_TAC;
1530 BY(ASM_REWRITE_TAC[SND]);
1532 REWRITE_TAC[IN_ELIM_THM];
1533 REPEAT WEAKER_STRIP_TAC;
1534 FIRST_X_ASSUM MP_TAC;
1535 ASM_REWRITE_TAC[SND];
1536 REWRITE_TAC[PAIR_EQ];
1538 INTRO_TAC MCELL_WEDGE_UNIQUE [`V`;`ul`;`w0`;`n`;`f`;`X`];
1542 FIRST_X_ASSUM_ST `mcell_set` MP_TAC;
1543 REWRITE_TAC[Pack_defs.mcell_set;IN_ELIM_THM];
1544 REPEAT WEAKER_STRIP_TAC;
1545 BY(ASM_MESON_TAC[Bump.RIJRIED;NOT_IN_EMPTY;IN]);
1547 DISCH_THEN MATCH_MP_TAC;
1548 BY(ASM_MESON_TAC[]);
1552 REWRITE_TAC[IN_ELIM_THM];
1553 REPEAT WEAKER_STRIP_TAC;
1554 INTRO_TAC MCELL_IN_WEDGE [`V`;`ul`;`w0`;`n`;`f`;`x`];
1557 FIRST_X_ASSUM_ST `mcell_set` MP_TAC;
1558 REWRITE_TAC[Pack_defs.mcell_set;IN_ELIM_THM];
1559 REPEAT WEAKER_STRIP_TAC;
1560 BY(ASM_MESON_TAC[Bump.RIJRIED;NOT_IN_EMPTY;IN]);
1561 REPEAT WEAKER_STRIP_TAC;
1562 TYPIFY `(i,x)` EXISTS_TAC;
1563 BY(ASM_MESON_TAC[SND])
1567 let LEAF_RANK_GRUTOTI = prove_by_refinement(
1570 packing V /\ saturated V /\ s_leaf V ul HAS_SIZE n /\
1571 EL 0 ul IN V /\ EL 1 ul IN V /\
1572 ~collinear {EL 0 ul, EL 1 ul, w0 } /\
1573 leaf_rank V ul w0 n f /\
1574 hl [EL 0 ul;EL 1 ul] < sqrt (&2) ==>
1575 sum {i | i < n } (azim_mcell V f (EL 0 ul) (EL 1 ul)) = &2 * pi`,
1578 REPEAT WEAKER_STRIP_TAC;
1579 TYPIFY `azim_mcell V f (EL 0 ul) (EL 1 ul) = (\i. azim_mcell V f (EL 0 ul) (EL 1 ul) i)` (C SUBGOAL_THEN SUBST1_TAC);
1580 BY(REWRITE_TAC[FUN_EQ_THM]);
1581 INTRO_TAC LEAF_RANK_REUHADY [`V`;`ul`;`w0`;`n`;`f`];
1583 DISCH_THEN (unlist REWRITE_TAC);
1584 REWRITE_TAC[arith `SUC i = i + 1`];
1585 MATCH_MP_TAC ORDER_AZIM_SUM2Pi0;
1586 TYPIFY `w0` EXISTS_TAC;
1589 BY(ASM_MESON_TAC[LEAF_RANK_COLLINEAR]);
1590 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
1591 REWRITE_TAC[leaf_rank];
1592 BY(MESON_TAC[arith `0 + n = n`])
1597 let LEAF_RANK_GRUTOTI_DEPRECATED = prove_by_refinement(
1600 packing V /\ saturated V /\ s_leaf V ul HAS_SIZE n /\
1601 EL 0 ul IN V /\ EL 1 ul IN V /\
1602 ~collinear {EL 0 ul, EL 1 ul, w0 } /\
1603 leaf_rank V ul w0 n f /\
1604 hl [EL 0 ul;EL 1 ul] < sqrt (&2) ==>
1605 sum {i | i < n } (azim_mcell V f (EL 0 ul) (EL 1 ul)) = &2 * pi
1609 REPEAT WEAKER_STRIP_TAC;
1610 TYPIFY `azim_mcell V f (EL 0 ul) (EL 1 ul) = (\i. azim_mcell V f (EL 0 ul) (EL 1 ul) i)` (C SUBGOAL_THEN SUBST1_TAC);
1611 BY(REWRITE_TAC[FUN_EQ_THM]);
1612 REWRITE_TAC[azim_mcell];
1613 GMATCH_SIMP_TAC SUM_SUM_PRODUCT;
1615 REWRITE_TAC[FINITE_NUMSEG_LT];
1616 REWRITE_TAC[IN_ELIM_THM];
1617 REPEAT WEAKER_STRIP_TAC;
1618 MATCH_MP_TAC FINITE_SUBSET;
1619 TYPIFY `{X | mcell_set V X /\edgeX V X {EL 0 ul, EL 1 ul} }` EXISTS_TAC;
1622 MATCH_MP_TAC Marchal_cells_3.FINITE_EDGE_X2;
1623 BY(ASM_MESON_TAC[]);
1624 REWRITE_TAC[IN_ELIM_THM];
1625 INTRO_TAC LEAF_RANK_BIJ [`V`;`ul`;`w0`;`n`;`f`];
1627 BY(ASM_MESON_TAC[]);
1628 TYPIFY` (\ ((i:num),j). dihX V j (EL 0 ul,EL 1 ul)) = (\X. dihX V X (EL 0 ul, EL 1 ul)) o SND` (C SUBGOAL_THEN (unlist REWRITE_TAC));
1629 BY(REWRITE_TAC[FUN_EQ_THM;o_THM;Bump.BETA_ORDERED_PAIR_THM]);
1631 GMATCH_SIMP_TAC Bump.BIJ_SUM;
1632 TYPIFY `{X | mcell_set V X /\ {EL 0 ul, EL 1 ul} IN edgeX V X}` EXISTS_TAC;
1634 MATCH_MP_TAC Grutoti.GRUTOTI;
1636 BY(ASM_MESON_TAC[Collect_geom.NOT_COLLINEAR_IMP_2_UNEQUAL])
1641 let LEAF_RANK_GG_SUM = prove_by_refinement(
1644 packing V /\ saturated V /\ s_leaf V ul HAS_SIZE n /\
1645 EL 0 ul IN V /\ EL 1 ul IN V /\
1646 ~collinear {EL 0 ul, EL 1 ul, w0 } /\
1647 leaf_rank V ul w0 n f ==>
1648 sum {i | i < n } (gg_mcell V f (EL 0 ul) (EL 1 ul)) =
1649 sum { X | mcell_set V X /\ {EL 0 ul, EL 1 ul} IN edgeX V X }
1650 (\X. gammaX V X lmfun * critical_weight V X + beta_bump_v1 V {EL 0 ul, EL 1 ul} X )`,
1653 REPEAT WEAKER_STRIP_TAC;
1654 TYPIFY `gg_mcell V f (EL 0 ul) (EL 1 ul) = (\i. gg_mcell V f (EL 0 ul) (EL 1 ul) i)` (C SUBGOAL_THEN SUBST1_TAC);
1655 BY(REWRITE_TAC[FUN_EQ_THM]);
1656 REWRITE_TAC[gg_mcell];
1657 GMATCH_SIMP_TAC SUM_SUM_PRODUCT;
1659 REWRITE_TAC[FINITE_NUMSEG_LT];
1660 REWRITE_TAC[IN_ELIM_THM];
1661 REPEAT WEAKER_STRIP_TAC;
1662 MATCH_MP_TAC FINITE_SUBSET;
1663 TYPIFY `{X | mcell_set V X /\edgeX V X {EL 0 ul, EL 1 ul} }` EXISTS_TAC;
1666 MATCH_MP_TAC Marchal_cells_3.FINITE_EDGE_X2;
1667 BY(ASM_MESON_TAC[]);
1668 REWRITE_TAC[IN_ELIM_THM];
1669 INTRO_TAC LEAF_RANK_BIJ [`V`;`ul`;`w0`;`n`;`f`];
1671 BY(ASM_MESON_TAC[]);
1672 TYPIFY` (\ ((i:num),j). gammaX V j lmfun * critical_weight V j + beta_bump_v1 V {EL 0 ul, EL 1 ul} j) = (\X. gammaX V X lmfun * critical_weight V X + beta_bump_v1 V {EL 0 ul, EL 1 ul} X) o SND` (C SUBGOAL_THEN (unlist REWRITE_TAC));
1673 BY(REWRITE_TAC[FUN_EQ_THM;o_THM;Bump.BETA_ORDERED_PAIR_THM]);
1675 GMATCH_SIMP_TAC Bump.BIJ_SUM;
1676 TYPIFY `{X | mcell_set V X /\ {EL 0 ul, EL 1 ul} IN edgeX V X}` EXISTS_TAC;
1677 BY(ASM_REWRITE_TAC[])
1681 let MCELL2_DIHX_POS = prove_by_refinement(
1682 `!V X ul. saturated V /\ packing V /\ barV V 3 ul /\ X = mcell2 V ul /\ {EL 0 ul,EL 1 ul} IN edgeX V X ==>
1683 &0 < dihX V X (EL 0 ul,EL 1 ul)`,
1686 REPEAT WEAKER_STRIP_TAC;
1687 TYPIFY `~NULLSET X` (C SUBGOAL_THEN ASSUME_TAC);
1689 INTRO_TAC Bump.RIJRIED [`V`;`ul`;`2`];
1691 BY(ASM_MESON_TAC[Bump.MCELL2]);
1692 REWRITE_TAC[EXTENSION;NOT_IN_EMPTY];
1693 BY(ASM_MESON_TAC[Bump.MCELL2]);
1694 ASM_SIMP_TAC[Tskajxy.MCELL2_DIHX];
1695 MATCH_MP_TAC (arith `~(x = &0) /\ (&0 <= x) ==> &0 < x`);
1696 REWRITE_TAC[Upfzbzm_support_lemmas.DIHV_LE_0];
1697 MATCH_MP_TAC DIHV_EQ_0_PI_EQ_COPLANAR_ALT;
1698 INTRO_TAC Leaf_cell.MCELL2_SUBSET_AFF_GE [`V`;`ul`];
1699 ONCE_REWRITE_TAC[GSYM COPLANAR_AFFINE_HULL_COPLANAR];
1700 REPEAT WEAKER_STRIP_TAC;
1701 TYPIFY `mcell2 V ul SUBSET affine hull {EL 0 ul, EL 1 ul, mxi V ul, omega_list_n V ul 3}` (C SUBGOAL_THEN ASSUME_TAC);
1702 MATCH_MP_TAC SUBSET_TRANS;
1703 TYPIFY `aff_ge {HD ul, HD (TL ul)} {mxi V ul, omega_list_n V ul 3}` EXISTS_TAC;
1705 TYPIFY `!a b c (d:real^3). {a,b,c,d} = {a,b} UNION {c,d}` (C SUBGOAL_THEN (unlist REWRITE_TAC));
1707 BY(REWRITE_TAC[AFF_GE_SUBSET_AFFINE_HULL;EL;arith `1 = SUC 0`]);
1708 FIRST_X_ASSUM_ST `NULLSET` MP_TAC;
1710 MATCH_MP_TAC NEGLIGIBLE_SUBSET;
1711 BY(ASM_MESON_TAC[COPLANAR_IMP_NEGLIGIBLE])
1715 let MCELL3_CONVEX_HULL = prove_by_refinement(
1716 `!V ul. packing V /\
1719 ~NULLSET (mcell3 V ul) ==>
1720 mcell3 V ul = convex hull {EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul}`,
1723 REPEAT WEAKER_STRIP_TAC;
1724 INTRO_TAC Pack_defs.mcell3 [`V`;`ul`];
1726 DISCH_THEN SUBST1_TAC;
1728 TYPIFY `set_of_list(truncate_simplex 2 ul) = {EL 0 ul,EL 1 ul,EL 2 ul}` (C SUBGOAL_THEN SUBST1_TAC);
1729 MATCH_MP_TAC Bump.SET_OF_LIST_TRUNCATE_2;
1730 BY(ASM_MESON_TAC[IN;Sphere.BARV;arith `3 <= 3 + 1`]);
1732 BY(ASM_MESON_TAC[NEGLIGIBLE_EMPTY])
1736 let MCELL3_EXTREME_CARD = prove_by_refinement(
1737 `!V ul. packing V /\
1740 ~NULLSET (mcell3 V ul) ==>
1741 CARD {EL 0 ul, EL 1 ul, EL 2 ul,mxi V ul} = 4`,
1744 REPEAT WEAK_STRIP_TAC;
1745 MATCH_MP_TAC Collect_geom2.NOT_COPLANAR_IMP_CARD4;
1746 GMATCH_SIMP_TAC (GSYM coplanar_eq_coplanar_alt);
1747 REWRITE_TAC[DIMINDEX_3;arith `2 <= 3`];
1748 ONCE_REWRITE_TAC[GSYM COPLANAR_CONVEX_HULL_COPLANAR];
1749 TYPIFY `convex hull {EL 0 ul, EL 1 ul, EL 2 ul, mxi V ul} = mcell3 V ul` ENOUGH_TO_SHOW_TAC;
1750 DISCH_THEN SUBST1_TAC;
1751 BY(ASM_MESON_TAC[COPLANAR_IMP_NEGLIGIBLE]);
1752 BY(ASM_MESON_TAC[MCELL3_CONVEX_HULL])
1756 let MCELL3_DIHX = prove_by_refinement(
1762 {EL 0 ul,EL 1 ul} IN edgeX V X /\
1764 ==> dihX V X (EL 0 ul,EL 1 ul) =
1765 dihV (EL 0 ul) (EL 1 ul) (EL 2 ul) (mxi V ul)`,
1768 REPEAT WEAKER_STRIP_TAC;
1769 ASM_REWRITE_TAC[Pack_defs.dihX;LET_DEF;LET_END_DEF;Bump.BETA_ORDERED_PAIR_THM];
1770 INTRO_TAC Leaf_cell.MCELL_EDGE_FIRST [`V`;`ul`;`3`;`EL 0 ul`;`EL 1 ul`];
1772 BY(ASM_MESON_TAC[IN;Bump.MCELL3]);
1773 REPEAT WEAKER_STRIP_TAC;
1774 INTRO_TAC Tskajxy.INITIAL_SUBLIST_2 [`vl`];
1776 REWRITE_TAC[arith `4 = 3 + 1`] THEN MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA;
1777 BY(ASM_MESON_TAC[IN]);
1779 INTRO_TAC Tskajxy.MCELL_PARAM_D_UL [`V`;`vl`;`[EL 0 ul;EL 1 ul]`;`SND (cell_params_d V X [EL 0 ul;EL 1 ul])`;`X`;`3`];
1781 BY(ASM_MESON_TAC[IN;arith `3 <= 4`;Bump.MCELL3]);
1782 REPEAT WEAKER_STRIP_TAC;
1783 INTRO_TAC Tskajxy.MCELL_CELL_PARAMETERS_D_EXIST [`V`;`vl`;`[EL 0 ul;EL 1 ul]`;`3`;`X`];
1785 BY(ASM_MESON_TAC[IN;arith `3 <= 4`;Bump.MCELL3]);
1787 DISCH_THEN SUBST1_TAC;
1788 REWRITE_TAC[arith `~(3 = 2)`;Pack_defs.dihu3];
1789 REPEAT (FIRST_X_ASSUM_ST `SND` MP_TAC);
1791 TYPED_ABBREV_TAC `(wl:(real^3)list) = (SND (cell_params_d V (mcell3 V ul) [EL 0 vl; EL 1 vl]))` ;
1793 REPEAT WEAKER_STRIP_TAC;
1794 COMMENT "match wl with vl";
1795 TYPIFY `EL 0 wl = EL 0 vl /\ EL 1 wl = EL 1 vl` (C SUBGOAL_THEN ASSUME_TAC);
1796 INTRO_TAC Bump.LENGTH4 [`wl`];
1798 REWRITE_TAC[arith `4 = 3 + 1`] THEN MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA;
1799 BY(ASM_MESON_TAC[IN]);
1802 FIRST_X_ASSUM_ST `initial_sublist` MP_TAC;
1803 FIRST_X_ASSUM_ST `CONS` SUBST1_TAC;
1804 REWRITE_TAC[initial_sublist_cons];
1805 BY(ASM_MESON_TAC[]);
1806 COMMENT "mcell3 as convex hull";
1807 INTRO_TAC MCELL3_CONVEX_HULL [`V`;`vl`];
1808 INTRO_TAC MCELL3_CONVEX_HULL [`V`;`wl`];
1811 BY(ASM_MESON_TAC[Bump.MCELL3]);
1814 BY(ASM_MESON_TAC[Bump.MCELL3]);
1816 TYPIFY `convex hull {EL 0 vl, EL 1 vl, EL 2 wl, mxi V wl} = convex hull {EL 0 vl, EL 1 vl, EL 2 vl, mxi V vl}` (C SUBGOAL_THEN MP_TAC);
1817 BY(ASM_MESON_TAC[Bump.MCELL3]);
1818 GMATCH_SIMP_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ;
1819 REWRITE_TAC[AFFINE_INDEPENDENT_IFF_CARD;FINITE_INSERT;FINITE_EMPTY];
1820 TYPIFY `CARD {EL 0 vl,EL 1 vl,EL 2 vl,mxi V vl} = 4 /\ CARD {EL 0 vl,EL 1 vl,EL 2 wl,mxi V wl} = 4 ` (C SUBGOAL_THEN ASSUME_TAC);
1821 BY(ASM_MESON_TAC[MCELL3_EXTREME_CARD;Bump.MCELL3]);
1822 REPEAT WEAKER_STRIP_TAC;
1823 TYPIFY `aff_dim {EL 0 vl, EL 1 vl, EL 2 wl, mxi V wl} = &3 /\ aff_dim {EL 0 vl, EL 1 vl, EL 2 vl, mxi V vl} = &3` (C SUBGOAL_THEN (unlist REWRITE_TAC));
1824 REPEAT (GMATCH_SIMP_TAC NOT_COPLANAR_AFF_3);
1825 ONCE_REWRITE_TAC[GSYM COPLANAR_CONVEX_HULL_COPLANAR];
1826 BY(ASM_MESON_TAC[COPLANAR_IMP_NEGLIGIBLE;Bump.MCELL3]);
1828 BY(ASM_MESON_TAC[INT_ARITH `&3 = &4 - int_of_num 1`]);
1829 REPEAT WEAKER_STRIP_TAC;
1830 INTRO_TAC Leaf_cell.LENGTH4_SET2 [`EL 0 vl`;`EL 1 vl`;`EL 2 vl`;`mxi V vl`;`EL 2 wl`;`mxi V wl`];
1832 REWRITE_TAC[set_of_list];
1833 BY(ASM_MESON_TAC[]);
1834 INTRO_TAC MCELL3_CONVEX_HULL [`V`;`ul`];
1836 BY(ASM_MESON_TAC[Bump.MCELL3;IN]);
1838 TYPIFY `convex hull {EL 0 vl, EL 1 vl, EL 2 wl, mxi V wl} = convex hull {EL 0 vl, EL 1 vl, EL 2 ul, mxi V ul}` (C SUBGOAL_THEN MP_TAC);
1839 BY(ASM_MESON_TAC[Bump.MCELL3]);
1840 GMATCH_SIMP_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ;
1841 REWRITE_TAC[AFFINE_INDEPENDENT_IFF_CARD;FINITE_INSERT;FINITE_EMPTY];
1842 TYPIFY `CARD {EL 0 vl,EL 1 vl,EL 2 ul,mxi V ul} = 4` (C SUBGOAL_THEN ASSUME_TAC);
1843 BY(ASM_MESON_TAC[IN;MCELL3_EXTREME_CARD;Bump.MCELL3]);
1844 REPEAT WEAKER_STRIP_TAC;
1845 TYPIFY `aff_dim {EL 0 vl, EL 1 vl, EL 2 wl, mxi V wl} = &3 /\ aff_dim {EL 0 vl, EL 1 vl, EL 2 ul, mxi V ul} = &3` (C SUBGOAL_THEN (unlist REWRITE_TAC));
1846 REPEAT (GMATCH_SIMP_TAC NOT_COPLANAR_AFF_3);
1847 ONCE_REWRITE_TAC[GSYM COPLANAR_CONVEX_HULL_COPLANAR];
1848 BY(ASM_MESON_TAC[COPLANAR_IMP_NEGLIGIBLE;Bump.MCELL3]);
1850 BY(ASM_MESON_TAC[INT_ARITH `&3 = &4 - int_of_num 1`]);
1851 REPEAT WEAKER_STRIP_TAC;
1852 INTRO_TAC Leaf_cell.LENGTH4_SET2 [`EL 0 vl`;`EL 1 vl`;`EL 2 ul`;`mxi V ul`;`EL 2 wl`;`mxi V wl`];
1854 REWRITE_TAC[set_of_list];
1855 BY(ASM_MESON_TAC[]);
1857 BY(ASM_MESON_TAC[]);
1859 BY(MESON_TAC[Trigonometry2.DIHV_SYM])
1863 let MCELL3_DIHX_POS = prove_by_refinement(
1864 `!V X ul. saturated V /\ packing V /\ barV V 3 ul /\ X = mcell3 V ul /\ {EL 0 ul,EL 1 ul} IN edgeX V X ==>
1865 &0 < dihX V X (EL 0 ul,EL 1 ul)`,
1868 REPEAT WEAKER_STRIP_TAC;
1869 TYPIFY `~NULLSET X` (C SUBGOAL_THEN ASSUME_TAC);
1871 INTRO_TAC Bump.RIJRIED [`V`;`ul`;`3`];
1873 BY(ASM_MESON_TAC[Bump.MCELL3]);
1874 REWRITE_TAC[EXTENSION;NOT_IN_EMPTY];
1875 BY(ASM_MESON_TAC[Bump.MCELL3]);
1876 ASM_SIMP_TAC[MCELL3_DIHX];
1877 MATCH_MP_TAC (arith `~(x = &0) /\ (&0 <= x) ==> &0 < x`);
1878 REWRITE_TAC[Upfzbzm_support_lemmas.DIHV_LE_0];
1879 MATCH_MP_TAC DIHV_EQ_0_PI_EQ_COPLANAR_ALT;
1880 ONCE_REWRITE_TAC[GSYM COPLANAR_CONVEX_HULL_COPLANAR];
1881 GMATCH_SIMP_TAC (GSYM MCELL3_CONVEX_HULL);
1883 BY(ASM_MESON_TAC[IN]);
1884 BY(ASM_MESON_TAC[COPLANAR_IMP_NEGLIGIBLE])
1888 let MCELL3_DOMAIN = prove_by_refinement(
1889 `!V ul. saturated V /\
1892 ~(NULLSET (mcell3 V ul)) ==>
1893 ~collinear {EL 0 ul,EL 1 ul,EL 2 ul} /\
1894 &2 <= dist (EL 1 ul,EL 2 ul) /\
1895 &2 <= dist (EL 0 ul,EL 2 ul) /\
1896 &2 <= dist (EL 0 ul,EL 1 ul) /\
1897 dist (EL 1 ul,EL 2 ul) < &2 * sqrt (&2) /\
1898 dist (EL 0 ul,EL 2 ul) < &2 * sqrt (&2) /\
1899 dist (EL 0 ul,EL 1 ul) < &2 * sqrt (&2) /\
1900 eta_y (dist (EL 0 ul,EL 1 ul)) (dist (EL 0 ul,EL 2 ul))
1901 (dist (EL 1 ul,EL 2 ul)) <
1905 REPEAT WEAKER_STRIP_TAC;
1906 GMATCH_SIMP_TAC (GSYM RADV_ETAY);
1907 TYPIFY `hl (truncate_simplex 2 ul) < sqrt(&2)` (C SUBGOAL_THEN ASSUME_TAC);
1908 FIRST_X_ASSUM_ST `mcell3` MP_TAC;
1909 REWRITE_TAC[Pack_defs.mcell3];
1911 BY(ASM_REWRITE_TAC[]);
1912 BY(ASM_MESON_TAC[NEGLIGIBLE_EMPTY]);
1913 COMMENT "deal with radV";
1914 TYPIFY `truncate_simplex 2 ul = [EL 0 ul;EL 1 ul;EL 2 ul]` (C SUBGOAL_THEN ASSUME_TAC);
1915 BY(ASM_MESON_TAC[Leaf_cell.BARV3_TRUNC2;IN]);
1916 TYPIFY `radV {EL 0 ul, EL 1 ul, EL 2 ul} < sqrt (&2)` (C SUBGOAL_THEN ASSUME_TAC);
1917 BY(FIRST_X_ASSUM_ST `hl` MP_TAC THEN ASM_REWRITE_TAC[Pack_defs.HL;set_of_list]);
1918 TYPIFY `~collinear {EL 0 ul,EL 1 ul,EL 2 ul}` (C SUBGOAL_THEN ASSUME_TAC);
1919 MATCH_MP_TAC NOT_COPLANAR_NOT_COLLINEAR;
1920 TYPIFY `mxi V ul` EXISTS_TAC;
1921 ONCE_REWRITE_TAC[GSYM COPLANAR_CONVEX_HULL_COPLANAR];
1922 GMATCH_SIMP_TAC (GSYM MCELL3_CONVEX_HULL);
1923 BY(ASM_MESON_TAC[COPLANAR_IMP_NEGLIGIBLE;IN]);
1925 TYPIFY `~affine_dependent {EL 0 ul,EL 1 ul,EL 2 ul}` (C SUBGOAL_THEN ASSUME_TAC);
1926 BY(ASM_MESON_TAC[AFFINE_DEPENDENT_IMP_COLLINEAR_3]);
1927 TYPIFY `!x y. {x,y} SUBSET {EL 0 ul,EL 1 ul,EL 2 ul} ==> dist(x,y) < &2 * sqrt(&2)` (C SUBGOAL_THEN ASSUME_TAC);
1928 REPEAT WEAKER_STRIP_TAC;
1929 REWRITE_TAC[arith `x < &2 * y <=> inv(&2) * x < y`];
1930 REWRITE_TAC[GSYM RADV2];
1931 MATCH_MP_TAC REAL_LET_TRANS;
1932 TYPIFY `radV {EL 0 ul, EL 1 ul, EL 2 ul}` EXISTS_TAC;
1934 MATCH_MP_TAC Rogers.RADV_MONO;
1935 ASM_REWRITE_TAC[EXTENSION;IN_INSERT;NOT_IN_EMPTY];
1937 INTRO_TAC Packing3.BARV_SUBSET [`V`;`3`;`ul`];
1940 TYPIFY `set_of_list ul = {EL 0 ul,EL 1 ul,EL 2 ul,EL 3 ul}` (C SUBGOAL_THEN ASSUME_TAC);
1941 MATCH_MP_TAC Bump.set_of_list4;
1942 REWRITE_TAC[arith `4 = 3 + 1`] THEN MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA;
1943 BY(ASM_MESON_TAC[]);
1944 TYPIFY `~(EL 0 ul = EL 1 ul) /\ ~(EL 1 ul = EL 2 ul) /\ ~(EL 0 ul = EL 2 ul)` (C SUBGOAL_THEN ASSUME_TAC);
1945 TYPIFY `{EL 0 ul,EL 1 ul, EL 2 ul} = {EL 1 ul,EL 2 ul,EL 0 ul}` (C SUBGOAL_THEN ASSUME_TAC);
1947 BY(ASM_MESON_TAC[Collect_geom.NOT_COLLINEAR_IMP_2_UNEQUAL]);
1948 TYPIFY `&2 <= dist (EL 1 ul,EL 2 ul) /\ &2 <= dist (EL 0 ul,EL 2 ul) /\ &2 <= dist (EL 0 ul,EL 1 ul)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
1949 FIRST_X_ASSUM_ST `packing` MP_TAC;
1950 REWRITE_TAC[Sphere.packing];
1951 FIRST_X_ASSUM_ST `SUBSET` MP_TAC;
1952 ASM_REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY];
1954 BY(ASM_MESON_TAC[]);
1955 BY(REPEAT (CONJ_TAC THEN (TRY (FIRST_X_ASSUM MATCH_MP_TAC))) THEN SET_TAC[])
1959 let TSKAJXY_3 = Prove_by_refinement.prove_by_refinement(
1960 `!V X ul. pack_nonlinear_non_ox3q1h /\
1966 ==> gammaX V X lmfun >= &0`,
1969 REPEAT WEAKER_STRIP_TAC;
1970 INTRO_TAC Tskajxy_lemmas.gammaX_gamma3f [`V`;`X`;`ul`;`EL 0 ul`;`EL 1 ul`;`EL 2 ul`;`EL 3 ul`;`dist(EL 1 ul,EL 2 ul)`;`dist(EL 0 ul,EL 2 ul)`;`dist(EL 0 ul,EL 1 ul)`];
1974 BY(REWRITE_TAC[Bump.MCELL3]);
1975 MATCH_MP_TAC Bump.LENGTH4;
1976 REWRITE_TAC[arith `4 = 3 + 1`] THEN MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA;
1977 BY(ASM_MESON_TAC[]);
1978 DISCH_THEN (unlist REWRITE_TAC);
1979 INTRO_TAC Merge_ineq.cell3_from_ineq_thm_ALT [];
1980 ASM_REWRITE_TAC[arith `x >= &0 <=> &0 <= x`];
1981 DISCH_THEN MATCH_MP_TAC;
1982 TYPIFY `eta_y (dist (EL 1 ul,EL 2 ul)) (dist (EL 0 ul,EL 2 ul)) (dist (EL 0 ul,EL 1 ul)) = eta_y (dist (EL 0 ul,EL 1 ul)) (dist (EL 0 ul,EL 2 ul)) (dist (EL 1 ul,EL 2 ul))` (C SUBGOAL_THEN SUBST1_TAC);
1983 BY(MESON_TAC[Collect_geom.ETA_Y_SYYM]);
1984 INTRO_TAC MCELL3_DOMAIN [`V`;`ul`];
1986 BY(ASM_MESON_TAC[]);
1987 REPEAT WEAKER_STRIP_TAC;
1988 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`])
1992 let MCELL4_LEAF2 = prove_by_refinement(
1993 `!V ul. packing V /\ saturated V /\ barV V 3 ul /\ ~NULLSET (mcell4 V ul) ==>
1994 leaf V [EL 0 ul;EL 1 ul;EL 2 ul]`,
1997 REWRITE_TAC[Leaf_cell.leaf;Pack_defs.mcell4];
2000 REPEAT WEAKER_STRIP_TAC;
2001 INTRO_TAC Packing3.TRUNCATE_SIMPLEX_BARV [`V`;`2`;`3`;`ul`];
2002 INTRO_TAC Rogers.HL_DECREASE [`V`;`ul`;`3`;`2`];
2003 ASM_REWRITE_TAC[arith `2 <= 3`;IN];
2004 INTRO_TAC Leaf_cell.BARV3_TRUNC2 [`V`;`ul`];
2006 BY(ASM_MESON_TAC[IN]);
2007 DISCH_THEN SUBST1_TAC;
2008 REPEAT WEAKER_STRIP_TAC;
2010 BY(ASM_MESON_TAC[arith `h < s /\ h' <= h ==> h' < s`;Sphere.sqrt2]);
2011 BY(MESON_TAC[NEGLIGIBLE_EMPTY])
2015 let MCELL4_CONVEX_HULL = prove_by_refinement(
2016 `!V ul. packing V /\ saturated V /\ barV V 3 ul /\ ~NULLSET (mcell4 V ul) ==>
2017 mcell4 V ul = convex hull {EL 0 ul, EL 1 ul, EL 2 ul, EL 3 ul}`,
2020 REWRITE_TAC[Pack_defs.mcell4];
2023 BY(MESON_TAC[BARV3_SET_OF_LIST4]);
2024 BY(REWRITE_TAC[NEGLIGIBLE_EMPTY])
2028 let MCELL4_CARD4 = prove_by_refinement(
2029 `!V ul. packing V /\ saturated V /\ barV V 3 ul /\ ~NULLSET (mcell4 V ul) ==>
2030 CARD ({EL 0 ul,EL 1 ul, EL 2 ul, EL 3 ul}) = 4`,
2033 REPEAT WEAKER_STRIP_TAC;
2034 MATCH_MP_TAC Collect_geom2.NOT_COPLANAR_IMP_CARD4;
2035 GMATCH_SIMP_TAC (GSYM coplanar_eq_coplanar_alt);
2036 REWRITE_TAC[DIMINDEX_3;arith `2 <= 3`];
2037 ONCE_REWRITE_TAC[GSYM COPLANAR_CONVEX_HULL_COPLANAR];
2038 TYPIFY `convex hull {EL 0 ul, EL 1 ul, EL 2 ul, EL 3 ul} = mcell4 V ul` ENOUGH_TO_SHOW_TAC;
2039 DISCH_THEN SUBST1_TAC;
2040 BY(ASM_MESON_TAC[COPLANAR_IMP_NEGLIGIBLE]);
2041 BY(ASM_MESON_TAC[MCELL4_CONVEX_HULL])
2045 let MCELL4_LEAF3 = prove_by_refinement(
2046 `!V ul. packing V /\ saturated V /\ barV V 3 ul /\ ~NULLSET (mcell4 V ul) ==>
2047 leaf V [EL 0 ul;EL 1 ul;EL 3 ul]`,
2050 REPEAT WEAKER_STRIP_TAC;
2051 INTRO_TAC Marchal_cells_3.LEFT_ACTION_LIST_3_EXISTS [`EL 0 ul`;`EL 1 ul`;`EL 2 ul`;`EL 3 ul`;`EL 0 ul`;`EL 1 ul`;`EL 3 ul`;`EL 2 ul`];
2054 MATCH_MP_TAC MCELL4_CARD4;
2055 BY(ASM_MESON_TAC[]);
2057 REPEAT WEAKER_STRIP_TAC;
2058 INTRO_TAC Rvfxzbu.RVFXZBU [`V`;`ul`;`4`;`p`];
2059 ASM_REWRITE_TAC[arith `4 - 1 = 3`];
2062 INTRO_TAC Rogers.YIFVQDV_1 [`V`;`ul`;`3`;`p`];
2066 BY(ASM_MESON_TAC[IN]);
2068 FIRST_X_ASSUM_ST `NULLSET` MP_TAC;
2069 BY(ASM_REWRITE_TAC[Pack_defs.mcell4;NEGLIGIBLE_EMPTY]);
2070 REPEAT WEAKER_STRIP_TAC;
2071 INTRO_TAC Bump.LENGTH4 [`ul`];
2073 REWRITE_TAC[arith `4 = 3 + 1`] THEN MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA;
2074 BY(ASM_MESON_TAC[]);
2077 FIRST_X_ASSUM_ST `left_action_list p (CONS x y)` MP_TAC;
2078 FIRST_X_ASSUM (SUBST1_TAC o GSYM);
2079 TYPED_ABBREV_TAC `(wl:(real^3) list) = left_action_list p ul` ;
2082 INTRO_TAC MCELL4_LEAF2 [`V`;`wl`];
2085 BY(ASM_MESON_TAC[IN;Bump.MCELL4]);
2087 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT])
2091 let MCELL4_LEAF_S_LEAF = prove_by_refinement(
2092 `!V ul u. packing V /\ saturated V /\ barV V 3 ul /\ ~NULLSET (mcell4 V ul) /\
2093 leaf V [EL 0 ul;EL 1 ul;u] /\ (u IN {EL 2 ul, EL 3 ul} ) ==> s_leaf V [EL 0 ul;EL 1 ul] u`,
2096 REWRITE_TAC[s_leaf;Bump.EL_EXPLICIT;IN_INSERT;NOT_IN_EMPTY];
2097 REPEAT WEAKER_STRIP_TAC;
2099 INTRO_TAC Leaf_cell.CFFONNL [`V`;`[EL 0 ul;EL 1 ul;u]`;`mcell4 V ul`];
2100 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
2101 REWRITE_TAC[TAUT `(a /\ b /\ c /\ ~d ==> e) <=> (a /\ b /\ c ==> (d \/ e))`];
2104 REWRITE_TAC[IN_ELIM_THM;Pack_defs.mcell_set];
2105 BY(ASM_MESON_TAC[IN;Bump.MCELL4]);
2107 GMATCH_SIMP_TAC Bump.MCELL4_EDGE;
2110 MATCH_MP_TAC Marchal_cells_2_new.CARD4_IMP_DISTINCT;
2111 BY(ASM_MESON_TAC[MCELL4_CARD4]);
2112 GMATCH_SIMP_TAC BARV3_SET_OF_LIST4;
2114 BY(ASM_MESON_TAC[]);
2116 REWRITE_TAC[EXTENSION;NOT_IN_EMPTY;IN_INTER;Leaf_cell.cc_A0;NOT_FORALL_THM;Bump.EL_EXPLICIT];
2117 TYPIFY `u` EXISTS_TAC;
2119 GMATCH_SIMP_TAC MCELL4_CONVEX_HULL;
2121 MATCH_MP_TAC Marchal_cells_2_new.IN_SET_IMP_IN_CONVEX_HULL_SET;
2122 BY(ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY]);
2123 MATCH_MP_TAC Local_lemmas.DISJOINT_IMP_Z_IN_AFF_GT;
2124 REWRITE_TAC[DISJOINT;EXTENSION;IN_SING;NOT_IN_EMPTY;IN_INTER;IN_INSERT];
2125 INTRO_TAC MCELL4_CARD4 [`V`;`ul`];
2127 DISCH_THEN (MP_TAC o (MATCH_MP Leaf_cell.CARD4_ALL_DISTINCT));
2128 BY(ASM_MESON_TAC[]);
2129 REWRITE_TAC[Bump.MCELL4;Leaf_cell.cc_cell];
2131 INTRO_TAC Ajripqn.AJRIPQN [`V`;`ul`;`cc_uh V [EL 0 ul;EL 1 ul;u]`;`4`;`cc_ke V [EL 0 ul; EL 1 ul; u]`];
2135 BY(ASM_MESON_TAC[Leaf_cell.cc_uh;IN]);
2138 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
2140 BY(MESON_TAC[Leaf_cell.CC_KE_34]);
2141 REWRITE_TAC[INTER_IDEMPOT];
2142 BY(ASM_MESON_TAC[Bump.MCELL4]);
2143 BY(DISCH_THEN (unlist REWRITE_TAC));
2144 COMMENT "second case";
2145 INTRO_TAC Ajripqn.AJRIPQN [`V`;`ul`;`cc_uh V [EL 1 ul;EL 0 ul;u]`;`4`;`cc_ke V [EL 1 ul; EL 0 ul; u]`];
2149 ONCE_REWRITE_TAC[GSYM IN];
2150 GMATCH_SIMP_TAC Leaf_cell.cc_uh;
2152 BY(ASM_MESON_TAC[Leaf_cell.ZASUVOR]);
2155 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
2157 BY(MESON_TAC[Leaf_cell.CC_KE_34]);
2158 REWRITE_TAC[INTER_IDEMPOT];
2159 BY(ASM_MESON_TAC[Bump.MCELL4]);
2160 BY(DISCH_THEN (unlist REWRITE_TAC))
2164 let S_LEAF_CARD2 = prove_by_refinement(
2165 `!V ul. packing V /\ saturated V /\ barV V 3 ul /\ ~NULLSET (mcell4 V ul) ==>
2166 2 <= CARD(s_leaf V [EL 0 ul;EL 1 ul])`,
2169 REPEAT WEAKER_STRIP_TAC;
2170 TYPIFY `2 = CARD {EL 2 ul, EL 3 ul}` ((C SUBGOAL_THEN SUBST1_TAC) );
2171 MATCH_MP_TAC EQ_SYM;
2172 MATCH_MP_TAC Hypermap.CARD_TWO_ELEMENTS;
2173 INTRO_TAC MCELL4_CARD4 [`V`;`ul`];
2175 TYPIFY `{EL 0 ul, EL 1 ul, EL 2 ul, EL 3 ul} = {EL 2 ul, EL 3 ul, EL 0 ul, EL 1 ul}` (C SUBGOAL_THEN SUBST1_TAC);
2177 BY(MESON_TAC[Marchal_cells_2_new.CARD4_IMP_DISTINCT]);
2178 MATCH_MP_TAC CARD_SUBSET;
2179 ASM_SIMP_TAC[S_LEAF_FINITE];
2180 REWRITE_TAC[SUBSET];
2181 REPEAT WEAKER_STRIP_TAC;
2182 ONCE_REWRITE_TAC[IN];
2183 INTRO_TAC MCELL4_LEAF_S_LEAF [`V`;`ul`;`x`];
2184 DISCH_THEN MATCH_MP_TAC;
2186 FIRST_X_ASSUM MP_TAC;
2187 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
2188 BY(ASM_MESON_TAC[MCELL4_LEAF2;MCELL4_LEAF3])
2192 let LEAF_RANK_ONTO = prove_by_refinement(
2194 packing V /\ saturated V /\ barV V 3 ul /\
2195 leaf_rank V [EL 0 ul;EL 1 ul] w0 n f /\ ~(n=0) /\ ~NULLSET(mcell4 V ul) /\
2196 (u IN {EL 2 ul,EL 3 ul}) ==>
2197 (?i. i < n /\ (u = f i))`,
2200 REPEAT WEAKER_STRIP_TAC;
2201 INTRO_TAC LEAF_RANK_PERIODIC [`V`;`[EL 0 ul;EL 1 ul]`;`w0`;`n`;`f`];
2204 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
2205 REWRITE_TAC[leaf_rank;IMAGE;IN_UNIV;EXTENSION;IN_ELIM_THM;Bump.EL_EXPLICIT];
2206 INTRO_TAC MCELL4_LEAF_S_LEAF [`V`;`ul`;`u`];
2209 FIRST_X_ASSUM_ST `IN` MP_TAC;
2210 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
2211 BY(ASM_MESON_TAC[MCELL4_LEAF2;MCELL4_LEAF3]);
2212 REPEAT WEAKER_STRIP_TAC;
2213 TYPIFY `?j. u = f j` (C SUBGOAL_THEN MP_TAC);
2214 BY(ASM_MESON_TAC[IN]);
2215 REPEAT WEAKER_STRIP_TAC;
2216 TYPIFY `j MOD n` EXISTS_TAC;
2218 BY(ASM_MESON_TAC[DIVISION]);
2219 BY(ASM_MESON_TAC[Oxl_def.periodic_mod])
2223 let S_LEAF_IN_WEDGE_GE = prove_by_refinement(
2224 `!V ul u w0 n f j i'.
2225 packing V /\ saturated V /\ leaf_rank V [EL 0 ul;EL 1 ul] w0 n f /\ leaf V [EL 0 ul;EL 1 ul;u] /\
2226 ~collinear {EL 0 ul,EL 1 ul,w0} /\
2228 (u = f i') /\ (i' < n) /\
2229 u IN wedge_ge (EL 0 ul) (EL 1 ul) (f j) (f (SUC j)) ==> (u = f j \/ u = f (SUC j))`,
2232 REPEAT WEAKER_STRIP_TAC;
2233 TYPIFY `?i. (i < n) /\ f j = f i /\ f (SUC j) = f (SUC i)` (C SUBGOAL_THEN MP_TAC);
2234 TYPIFY `~(n = 0)` (C SUBGOAL_THEN ASSUME_TAC);
2235 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2236 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
2237 BY(ASM_MESON_TAC[ LEAF_RANK_PERIODIC]);
2238 TYPIFY `j MOD n` EXISTS_TAC;
2239 BY(ASM_SIMP_TAC[F_DEMOD;DIVISION]);
2240 DISCH_THEN (fun t -> REPEAT (FIRST_X_ASSUM MP_TAC) THEN MP_TAC t);
2243 REPLICATE_TAC 2 (FIRST_X_ASSUM kill);
2244 REPEAT WEAKER_STRIP_TAC;
2246 MATCH_MP_TAC (TAUT ` (~a /\ ~b ==> F) ==> a \/ b`);
2247 REPEAT WEAKER_STRIP_TAC;
2248 INTRO_TAC LEAF_RANK_COLLINEAR [`V`;`[EL 0 ul;EL 1 ul]`;`w0`;`n`;`f`];
2249 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
2251 COMMENT "deal with i=n-1";
2252 TYPIFY `i = n - 1` ASM_CASES_TAC;
2253 FIRST_X_ASSUM_ST `wedge_ge` MP_TAC;
2255 GMATCH_SIMP_TAC (GSYM Leaf_cell.WEDGE_COMPLEMENT);
2256 REWRITE_TAC[IN_DIFF;IN_UNIV];
2258 ONCE_REWRITE_TAC[arith `(x:real) = y <=> y = x`];
2260 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
2261 REWRITE_TAC[leaf_rank;Bump.EL_EXPLICIT];
2262 REPEAT WEAKER_STRIP_TAC;
2263 FIRST_X_ASSUM (C INTRO_TAC [`0`;`i`]);
2265 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2267 INTRO_TAC Fan.sum4_azim_fan [`EL 0 ul`;`EL 1 ul`;`w0`;`f 0`;`f i`];
2269 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
2270 FIRST_X_ASSUM_ST `SUC` MP_TAC;
2271 ASM_SIMP_TAC[arith `1 < n ==> SUC (n - 1) = n`];
2272 TYPIFY `f n = f 0` (C SUBGOAL_THEN SUBST1_TAC);
2273 BY(ASM_MESON_TAC[arith `0 + n = n`]);
2274 FIRST_X_ASSUM MP_TAC;
2277 ASM_SIMP_TAC[arith `1 < n ==> SUC (n - 1) = n`];
2278 TYPIFY `f n = f 0` (C SUBGOAL_THEN SUBST1_TAC);
2279 BY(ASM_MESON_TAC[arith `0 + n = n`;leaf_rank]);
2280 REWRITE_TAC[Reuhady.WEDGE_SIMPLE;IN_ELIM_THM];
2281 TYPIFY `i' = 0 \/ (0 < i' /\ i' < (n-1)) \/ (i' = (n-1))` (C SUBGOAL_THEN ASSUME_TAC);
2282 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2283 FIRST_X_ASSUM DISJ_CASES_TAC;
2284 FIRST_X_ASSUM_ST `SUC` MP_TAC;
2286 ASM_SIMP_TAC[arith `1 < n ==> SUC (n - 1) = n`];
2287 TYPIFY `f n = f 0` (C SUBGOAL_THEN SUBST1_TAC);
2288 BY(ASM_MESON_TAC[arith `0 + n = n`;leaf_rank]);
2290 FIRST_X_ASSUM DISJ_CASES_TAC;
2291 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
2292 REWRITE_TAC[leaf_rank;Bump.EL_EXPLICIT];
2293 REPEAT WEAKER_STRIP_TAC;
2294 FIRST_ASSUM (C INTRO_TAC [`0`;`i'`]);
2296 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2297 FIRST_X_ASSUM (C INTRO_TAC [`i'`;`n-1`]);
2299 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2300 REPEAT WEAKER_STRIP_TAC;
2301 INTRO_TAC Leaf_cell.AZIM_BASE_SHIFT_LE [`EL 0 ul`;`EL 1 ul`;`w0`;`f 0`;`f 0`;`f i'`];
2303 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`;arith `x <= x`]);
2304 INTRO_TAC Leaf_cell.AZIM_BASE_SHIFT_LE [`EL 0 ul`;`EL 1 ul`;`w0`;`f 0`;`f i'`;`f (n-1)`];
2306 ASM_SIMP_TAC [arith `x < y ==> x <= y`];
2307 BY(REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2308 REWRITE_TAC[AZIM_REFL];
2309 BY(REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2310 BY(ASM_MESON_TAC[]);
2311 COMMENT "done with i = n-1";
2312 COMMENT "deal with wedge_ge";
2313 FIRST_X_ASSUM_ST `wedge_ge` MP_TAC;
2314 REWRITE_TAC[Local_lemmas.WEDGE_GE_AZIM_LE];
2316 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
2317 REWRITE_TAC[leaf_rank;Bump.EL_EXPLICIT];
2318 REPEAT WEAKER_STRIP_TAC;
2319 MP_TAC (arith `i' = i \/ i' = SUC i \/ SUC i < i' \/ i' < i `);
2320 DISCH_THEN DISJ_CASES_TAC;
2321 BY(ASM_MESON_TAC[]);
2322 FIRST_X_ASSUM DISJ_CASES_TAC;
2323 BY(ASM_MESON_TAC[]);
2324 FIRST_X_ASSUM DISJ_CASES_TAC;
2325 INTRO_TAC Leaf_cell.AZIM_BASE_SHIFT_LE [`EL 0 ul`;`EL 1 ul`;`w0`;`f i`;`f (SUC i)`;`f i'`];
2329 FIRST_X_ASSUM (C INTRO_TAC [`i`;`SUC i`]);
2331 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2333 FIRST_X_ASSUM (C INTRO_TAC [`i`;`i'`]);
2335 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2337 FIRST_X_ASSUM (C INTRO_TAC [`SUC i`;`i'`]);
2339 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2340 FIRST_X_ASSUM_ST `azim` MP_TAC;
2343 COMMENT "last wedge case";
2344 INTRO_TAC Fan.sum4_azim_fan [`EL 0 ul`;`EL 1 ul`;`f i`;`f i'`;`f (SUC i)`];
2347 BY(ASM_MESON_TAC[]);
2349 INTRO_TAC Fan.sum4_azim_fan [`EL 0 ul`;`EL 1 ul`;`f i'`;`f i`;`f (SUC i)`];
2352 INTRO_TAC Leaf_cell.AZIM_BASE_SHIFT_LE [`EL 0 ul`;`EL 1 ul`;`w0`;`f i'`;`f i`;`f (SUC i)`];
2356 FIRST_X_ASSUM (C INTRO_TAC [`i'`;`i`]);
2358 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2360 FIRST_X_ASSUM (C INTRO_TAC [`i'`;`SUC i`]);
2362 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2364 FIRST_X_ASSUM (C INTRO_TAC [`i`;`SUC i`]);
2366 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2369 TYPIFY `azim (EL 0 ul) (EL 1 ul) (f i) (f i') = -- azim (EL 0 ul) (EL 1 ul) (f i') (f i)` (C SUBGOAL_THEN MP_TAC);
2370 BY(REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2371 REWRITE_TAC[arith `x = -- y <=> y + x = &0`];
2372 GMATCH_SIMP_TAC Leaf_cell.AZIM_POS_IMP_SUM_2PI_ALT;
2374 MATCH_MP_TAC (arith `&0 < x ==> ~(x = &0)`);
2375 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
2376 REWRITE_TAC[PI_POS];
2378 FIRST_X_ASSUM (C INTRO_TAC [`i'`;`i`]);
2380 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2382 INTRO_TAC Fan.sum4_azim_fan [`EL 0 ul`;`EL 1 ul`;`w0`;`f i'`;`f i`];
2384 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
2385 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC)
2390 let S_LEAF_IN_WEDGE_GE = prove_by_refinement(
2391 `!V ul u w0 n f i i'.
2392 packing V /\ saturated V /\ leaf_rank V [EL 0 ul;EL 1 ul] w0 n f /\ leaf V [EL 0 ul;EL 1 ul;u] /\
2393 ~collinear {EL 0 ul,EL 1 ul,w0} /\
2395 (u = f i') /\ (i' < n) /\
2397 u IN wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) ==> (u = f i \/ u = f (SUC i))`,
2400 REPEAT WEAKER_STRIP_TAC;
2401 MATCH_MP_TAC (TAUT ` (~a /\ ~b ==> F) ==> a \/ b`);
2402 REPEAT WEAKER_STRIP_TAC;
2403 INTRO_TAC LEAF_RANK_COLLINEAR [`V`;`[EL 0 ul;EL 1 ul]`;`w0`;`n`;`f`];
2404 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
2406 COMMENT "deal with i=n-1";
2407 TYPIFY `i = n - 1` ASM_CASES_TAC;
2408 FIRST_X_ASSUM_ST `wedge_ge` MP_TAC;
2410 GMATCH_SIMP_TAC (GSYM Leaf_cell.WEDGE_COMPLEMENT);
2411 REWRITE_TAC[IN_DIFF;IN_UNIV];
2413 ONCE_REWRITE_TAC[arith `(x:real) = y <=> y = x`];
2415 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
2416 REWRITE_TAC[leaf_rank;Bump.EL_EXPLICIT];
2417 REPEAT WEAKER_STRIP_TAC;
2418 FIRST_X_ASSUM (C INTRO_TAC [`0`;`i`]);
2420 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2422 INTRO_TAC Fan.sum4_azim_fan [`EL 0 ul`;`EL 1 ul`;`w0`;`f 0`;`f i`];
2424 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
2425 FIRST_X_ASSUM_ST `SUC` MP_TAC;
2426 ASM_SIMP_TAC[arith `1 < n ==> SUC (n - 1) = n`];
2427 TYPIFY `f n = f 0` (C SUBGOAL_THEN SUBST1_TAC);
2428 BY(ASM_MESON_TAC[arith `0 + n = n`]);
2429 FIRST_X_ASSUM MP_TAC;
2432 ASM_SIMP_TAC[arith `1 < n ==> SUC (n - 1) = n`];
2433 TYPIFY `f n = f 0` (C SUBGOAL_THEN SUBST1_TAC);
2434 BY(ASM_MESON_TAC[arith `0 + n = n`;leaf_rank]);
2435 REWRITE_TAC[Reuhady.WEDGE_SIMPLE;IN_ELIM_THM];
2436 TYPIFY `i' = 0 \/ (0 < i' /\ i' < (n-1)) \/ (i' = (n-1))` (C SUBGOAL_THEN ASSUME_TAC);
2437 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2438 FIRST_X_ASSUM DISJ_CASES_TAC;
2439 FIRST_X_ASSUM_ST `SUC` MP_TAC;
2441 ASM_SIMP_TAC[arith `1 < n ==> SUC (n - 1) = n`];
2442 TYPIFY `f n = f 0` (C SUBGOAL_THEN SUBST1_TAC);
2443 BY(ASM_MESON_TAC[arith `0 + n = n`;leaf_rank]);
2445 FIRST_X_ASSUM DISJ_CASES_TAC;
2446 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
2447 REWRITE_TAC[leaf_rank;Bump.EL_EXPLICIT];
2448 REPEAT WEAKER_STRIP_TAC;
2449 FIRST_ASSUM (C INTRO_TAC [`0`;`i'`]);
2451 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2452 FIRST_X_ASSUM (C INTRO_TAC [`i'`;`n-1`]);
2454 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2455 REPEAT WEAKER_STRIP_TAC;
2456 INTRO_TAC Leaf_cell.AZIM_BASE_SHIFT_LE [`EL 0 ul`;`EL 1 ul`;`w0`;`f 0`;`f 0`;`f i'`];
2458 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`;arith `x <= x`]);
2459 INTRO_TAC Leaf_cell.AZIM_BASE_SHIFT_LE [`EL 0 ul`;`EL 1 ul`;`w0`;`f 0`;`f i'`;`f (n-1)`];
2461 ASM_SIMP_TAC [arith `x < y ==> x <= y`];
2462 BY(REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2463 REWRITE_TAC[AZIM_REFL];
2464 BY(REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2465 BY(ASM_MESON_TAC[]);
2466 COMMENT "done with i = n-1";
2467 COMMENT "deal with wedge_ge";
2468 FIRST_X_ASSUM_ST `wedge_ge` MP_TAC;
2469 REWRITE_TAC[Local_lemmas.WEDGE_GE_AZIM_LE];
2471 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
2472 REWRITE_TAC[leaf_rank;Bump.EL_EXPLICIT];
2473 REPEAT WEAKER_STRIP_TAC;
2474 MP_TAC (arith `i' = i \/ i' = SUC i \/ SUC i < i' \/ i' < i `);
2475 DISCH_THEN DISJ_CASES_TAC;
2476 BY(ASM_MESON_TAC[]);
2477 FIRST_X_ASSUM DISJ_CASES_TAC;
2478 BY(ASM_MESON_TAC[]);
2479 FIRST_X_ASSUM DISJ_CASES_TAC;
2480 INTRO_TAC Leaf_cell.AZIM_BASE_SHIFT_LE [`EL 0 ul`;`EL 1 ul`;`w0`;`f i`;`f (SUC i)`;`f i'`];
2484 FIRST_X_ASSUM (C INTRO_TAC [`i`;`SUC i`]);
2486 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2488 FIRST_X_ASSUM (C INTRO_TAC [`i`;`i'`]);
2490 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2492 FIRST_X_ASSUM (C INTRO_TAC [`SUC i`;`i'`]);
2494 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2495 FIRST_X_ASSUM_ST `azim` MP_TAC;
2498 COMMENT "last wedge case";
2499 INTRO_TAC Fan.sum4_azim_fan [`EL 0 ul`;`EL 1 ul`;`f i`;`f i'`;`f (SUC i)`];
2502 BY(ASM_MESON_TAC[]);
2504 INTRO_TAC Fan.sum4_azim_fan [`EL 0 ul`;`EL 1 ul`;`f i'`;`f i`;`f (SUC i)`];
2507 INTRO_TAC Leaf_cell.AZIM_BASE_SHIFT_LE [`EL 0 ul`;`EL 1 ul`;`w0`;`f i'`;`f i`;`f (SUC i)`];
2511 FIRST_X_ASSUM (C INTRO_TAC [`i'`;`i`]);
2513 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2515 FIRST_X_ASSUM (C INTRO_TAC [`i'`;`SUC i`]);
2517 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2519 FIRST_X_ASSUM (C INTRO_TAC [`i`;`SUC i`]);
2521 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2524 TYPIFY `azim (EL 0 ul) (EL 1 ul) (f i) (f i') = -- azim (EL 0 ul) (EL 1 ul) (f i') (f i)` (C SUBGOAL_THEN MP_TAC);
2525 BY(REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2526 REWRITE_TAC[arith `x = -- y <=> y + x = &0`];
2527 GMATCH_SIMP_TAC Leaf_cell.AZIM_POS_IMP_SUM_2PI_ALT;
2529 MATCH_MP_TAC (arith `&0 < x ==> ~(x = &0)`);
2530 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
2531 REWRITE_TAC[PI_POS];
2533 FIRST_X_ASSUM (C INTRO_TAC [`i'`;`i`]);
2535 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2537 INTRO_TAC Fan.sum4_azim_fan [`EL 0 ul`;`EL 1 ul`;`w0`;`f i'`;`f i`];
2539 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
2540 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC)
2545 let LEAF_IN_WEDGE_GE = prove_by_refinement(
2547 packing V /\ saturated V /\ leaf_rank V [EL 0 ul;EL 1 ul] w0 n f /\ leaf V [EL 0 ul;EL 1 ul;u] /\
2549 ~collinear {EL 0 ul,EL 1 ul,w0} /\
2550 (1<n) /\ ~NULLSET(mcell4 V ul) /\
2551 (u IN {EL 2 ul,EL 3 ul}) /\
2552 u IN wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) ==> (u = f i \/ u = f (SUC i))`,
2555 REPEAT WEAKER_STRIP_TAC;
2556 INTRO_TAC LEAF_RANK_ONTO [`V`;`ul`;`w0`;`n`;`f`;`u`];
2558 BY(ASM_SIMP_TAC[arith `1 < n==> ~(n=0)`]);
2559 REPEAT WEAKER_STRIP_TAC;
2560 MATCH_MP_TAC S_LEAF_IN_WEDGE_GE;
2561 GEXISTL_TAC [`V`;`ul`;`w0`;`n`;`i'`];
2562 BY(ASM_REWRITE_TAC[])
2564 REPEAT WEAKER_STRIP_TAC;
2565 MATCH_MP_TAC (TAUT ` (~a /\ ~b ==> F) ==> a \/ b`);
2566 REPEAT WEAKER_STRIP_TAC;
2567 INTRO_TAC LEAF_RANK_COLLINEAR [`V`;`[EL 0 ul;EL 1 ul]`;`w0`;`n`;`f`];
2568 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
2570 INTRO_TAC LEAF_RANK_ONTO [`V`;`ul`;`w0`;`n`;`f`;`u`];
2572 BY(ASM_SIMP_TAC[arith `1 < n==> ~(n=0)`]);
2574 COMMENT "deal with i=n-1";
2575 TYPIFY `i = n - 1` ASM_CASES_TAC;
2576 FIRST_X_ASSUM_ST `wedge_ge` MP_TAC;
2578 GMATCH_SIMP_TAC (GSYM Leaf_cell.WEDGE_COMPLEMENT);
2579 REWRITE_TAC[IN_DIFF;IN_UNIV];
2581 ONCE_REWRITE_TAC[arith `(x:real) = y <=> y = x`];
2583 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
2584 REWRITE_TAC[leaf_rank;Bump.EL_EXPLICIT];
2585 REPEAT WEAKER_STRIP_TAC;
2586 FIRST_X_ASSUM (C INTRO_TAC [`0`;`i`]);
2588 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2590 INTRO_TAC Fan.sum4_azim_fan [`EL 0 ul`;`EL 1 ul`;`w0`;`f 0`;`f i`];
2592 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
2593 FIRST_X_ASSUM_ST `SUC` MP_TAC;
2594 ASM_SIMP_TAC[arith `1 < n ==> SUC (n - 1) = n`];
2595 TYPIFY `f n = f 0` (C SUBGOAL_THEN SUBST1_TAC);
2596 BY(ASM_MESON_TAC[arith `0 + n = n`]);
2597 FIRST_X_ASSUM MP_TAC;
2600 ASM_SIMP_TAC[arith `1 < n ==> SUC (n - 1) = n`];
2601 TYPIFY `f n = f 0` (C SUBGOAL_THEN SUBST1_TAC);
2602 BY(ASM_MESON_TAC[arith `0 + n = n`;leaf_rank]);
2603 REWRITE_TAC[Reuhady.WEDGE_SIMPLE;IN_ELIM_THM];
2604 TYPIFY `i' = 0 \/ (0 < i' /\ i' < (n-1)) \/ (i' = (n-1))` (C SUBGOAL_THEN ASSUME_TAC);
2605 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2606 FIRST_X_ASSUM DISJ_CASES_TAC;
2607 FIRST_X_ASSUM_ST `SUC` MP_TAC;
2609 ASM_SIMP_TAC[arith `1 < n ==> SUC (n - 1) = n`];
2610 TYPIFY `f n = f 0` (C SUBGOAL_THEN SUBST1_TAC);
2611 BY(ASM_MESON_TAC[arith `0 + n = n`;leaf_rank]);
2613 FIRST_X_ASSUM DISJ_CASES_TAC;
2614 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
2615 REWRITE_TAC[leaf_rank;Bump.EL_EXPLICIT];
2616 REPEAT WEAKER_STRIP_TAC;
2617 FIRST_ASSUM (C INTRO_TAC [`0`;`i'`]);
2619 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2620 FIRST_X_ASSUM (C INTRO_TAC [`i'`;`n-1`]);
2622 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2623 REPEAT WEAKER_STRIP_TAC;
2624 INTRO_TAC Leaf_cell.AZIM_BASE_SHIFT_LE [`EL 0 ul`;`EL 1 ul`;`w0`;`f 0`;`f 0`;`f i'`];
2626 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`;arith `x <= x`]);
2627 INTRO_TAC Leaf_cell.AZIM_BASE_SHIFT_LE [`EL 0 ul`;`EL 1 ul`;`w0`;`f 0`;`f i'`;`f (n-1)`];
2629 ASM_SIMP_TAC [arith `x < y ==> x <= y`];
2630 BY(REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2631 REWRITE_TAC[AZIM_REFL];
2632 BY(REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2633 BY(ASM_MESON_TAC[]);
2634 COMMENT "done with i = n-1";
2635 COMMENT "deal with wedge_ge";
2636 FIRST_X_ASSUM_ST `wedge_ge` MP_TAC;
2637 REWRITE_TAC[Local_lemmas.WEDGE_GE_AZIM_LE];
2639 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
2640 REWRITE_TAC[leaf_rank;Bump.EL_EXPLICIT];
2641 REPEAT WEAKER_STRIP_TAC;
2642 MP_TAC (arith `i' = i \/ i' = SUC i \/ SUC i < i' \/ i' < i `);
2643 DISCH_THEN DISJ_CASES_TAC;
2644 BY(ASM_MESON_TAC[]);
2645 FIRST_X_ASSUM DISJ_CASES_TAC;
2646 BY(ASM_MESON_TAC[]);
2647 FIRST_X_ASSUM DISJ_CASES_TAC;
2648 INTRO_TAC Leaf_cell.AZIM_BASE_SHIFT_LE [`EL 0 ul`;`EL 1 ul`;`w0`;`f i`;`f (SUC i)`;`f i'`];
2652 FIRST_X_ASSUM (C INTRO_TAC [`i`;`SUC i`]);
2654 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2656 FIRST_X_ASSUM (C INTRO_TAC [`i`;`i'`]);
2658 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2660 FIRST_X_ASSUM (C INTRO_TAC [`SUC i`;`i'`]);
2662 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2663 FIRST_X_ASSUM_ST `azim` MP_TAC;
2666 COMMENT "last wedge case";
2667 INTRO_TAC Fan.sum4_azim_fan [`EL 0 ul`;`EL 1 ul`;`f i`;`f i'`;`f (SUC i)`];
2670 BY(ASM_MESON_TAC[]);
2672 INTRO_TAC Fan.sum4_azim_fan [`EL 0 ul`;`EL 1 ul`;`f i'`;`f i`;`f (SUC i)`];
2675 INTRO_TAC Leaf_cell.AZIM_BASE_SHIFT_LE [`EL 0 ul`;`EL 1 ul`;`w0`;`f i'`;`f i`;`f (SUC i)`];
2679 FIRST_X_ASSUM (C INTRO_TAC [`i'`;`i`]);
2681 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2683 FIRST_X_ASSUM (C INTRO_TAC [`i'`;`SUC i`]);
2685 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2687 FIRST_X_ASSUM (C INTRO_TAC [`i`;`SUC i`]);
2689 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2692 TYPIFY `azim (EL 0 ul) (EL 1 ul) (f i) (f i') = -- azim (EL 0 ul) (EL 1 ul) (f i') (f i)` (C SUBGOAL_THEN MP_TAC);
2693 BY(REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2694 REWRITE_TAC[arith `x = -- y <=> y + x = &0`];
2695 GMATCH_SIMP_TAC Leaf_cell.AZIM_POS_IMP_SUM_2PI_ALT;
2697 MATCH_MP_TAC (arith `&0 < x ==> ~(x = &0)`);
2698 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
2699 REWRITE_TAC[PI_POS];
2701 FIRST_X_ASSUM (C INTRO_TAC [`i'`;`i`]);
2703 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2705 INTRO_TAC Fan.sum4_azim_fan [`EL 0 ul`;`EL 1 ul`;`w0`;`f i'`;`f i`];
2707 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
2708 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC)
2713 let MCELL4_FI_EL = prove_by_refinement(
2717 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
2719 ~collinear {EL 0 ul, EL 1 ul, w0} /\
2721 ~NULLSET (mcell4 V ul) /\
2722 mcell4 V ul SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) ==>
2723 {EL 2 ul, EL 3 ul} = {f i, f (SUC i)}`,
2726 REPEAT WEAKER_STRIP_TAC;
2727 INTRO_TAC MCELL4_CONVEX_HULL [`V`;`ul`];
2729 BY(ASM_MESON_TAC[]);
2731 TYPIFY `!(a:real^3) b c d. ~(a = b) /\ {a,b} SUBSET {c,d} ==> {a,b} = {c,d}` (C SUBGOAL_THEN MATCH_MP_TAC);
2734 INTRO_TAC MCELL4_CARD4 [`V`;`ul`];
2736 BY(MESON_TAC[Leaf_cell.CARD4_ALL_DISTINCT]);
2738 REWRITE_TAC[SUBSET];
2739 REPEAT WEAKER_STRIP_TAC;
2740 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
2741 INTRO_TAC LEAF_IN_WEDGE_GE [`V`;`ul`;`x`;`w0`;`n`;`f`;`i`];
2742 DISCH_THEN MATCH_MP_TAC;
2745 FIRST_X_ASSUM MP_TAC;
2746 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
2747 BY(ASM_MESON_TAC[MCELL4_LEAF2;MCELL4_LEAF3]);
2748 FIRST_X_ASSUM_ST `SUBSET` MP_TAC;
2749 REWRITE_TAC[SUBSET];
2750 DISCH_THEN MATCH_MP_TAC;
2752 MATCH_MP_TAC Marchal_cells_2_new.IN_SET_IMP_IN_CONVEX_HULL_SET;
2753 FIRST_X_ASSUM MP_TAC;
2758 let MCELL4_FI = prove_by_refinement(
2762 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
2764 ~collinear {EL 0 ul, EL 1 ul, w0} /\
2766 ~NULLSET (mcell4 V ul) /\
2767 (mcell4 V ul) SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) ==>
2768 mcell4 V ul = convex hull {EL 0 ul,EL 1 ul, f i, f(SUC i)} `,
2771 REPEAT WEAKER_STRIP_TAC;
2772 INTRO_TAC MCELL4_CONVEX_HULL [`V`;`ul`];
2774 BY(ASM_MESON_TAC[]);
2778 TYPIFY `{EL 2 ul,EL 3 ul} = {f i, f (SUC i)}` ENOUGH_TO_SHOW_TAC;
2780 MATCH_MP_TAC MCELL4_FI_EL;
2785 let MCELL4_BARV_FI = prove_by_refinement(
2789 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
2791 ~collinear {EL 0 ul, EL 1 ul, w0} /\
2793 ~NULLSET (mcell4 V ul) /\
2794 (mcell4 V ul) SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) ==>
2795 barV V 3 [EL 0 ul;EL 1 ul; f i; f (SUC i)] /\
2796 mcell4 V ul = mcell4 V [EL 0 ul;EL 1 ul; f i; f (SUC i)]`,
2799 REPEAT WEAKER_STRIP_TAC;
2800 INTRO_TAC Marchal_cells_3.LEFT_ACTION_LIST_3_EXISTS [`EL 0 ul`;`EL 1 ul`;`EL 2 ul`;`EL 3 ul`;`EL 0 ul`;`EL 1 ul`;`f i`;`f (SUC i)`];
2803 MATCH_MP_TAC MCELL4_CARD4;
2804 BY(ASM_MESON_TAC[]);
2805 INTRO_TAC MCELL4_FI_EL [`V`;`ul`;`w0`;`n`;`f`;`i`];
2807 BY(ASM_MESON_TAC[]);
2809 REPEAT WEAKER_STRIP_TAC;
2810 INTRO_TAC Rogers.YIFVQDV_1 [`V`;`ul`;`3`;`p`];
2812 INTRO_TAC Rvfxzbu.RVFXZBU [`V`;`ul`;`4`;`p`];
2813 ASM_REWRITE_TAC[arith `4 - 1 = 3`;IN_INSERT];
2814 FIRST_X_ASSUM MP_TAC;
2815 TYPIFY `[EL 0 ul; EL 1 ul; EL 2 ul; EL 3 ul] = ul` (C SUBGOAL_THEN SUBST1_TAC);
2816 MATCH_MP_TAC EQ_SYM;
2817 MATCH_MP_TAC Bump.LENGTH4;
2818 REWRITE_TAC[arith `4 = 3 + 1`] THEN MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA;
2819 BY(ASM_MESON_TAC[]);
2820 DISCH_THEN (SUBST1_TAC o GSYM);
2821 REWRITE_TAC[Bump.MCELL4];
2822 DISCH_THEN SUBST1_TAC;
2823 ASM_REWRITE_TAC[IN];
2824 DISCH_THEN MATCH_MP_TAC;
2826 FIRST_X_ASSUM_ST `NULLSET` MP_TAC;
2828 REWRITE_TAC[Pack_defs.mcell4];
2830 BY(REWRITE_TAC[NEGLIGIBLE_EMPTY])
2834 let MCELL4_AZIM_LT_PI = prove_by_refinement(
2838 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
2840 ~collinear {EL 0 ul, EL 1 ul, w0} /\
2842 ~NULLSET (mcell4 V ul) /\
2843 (mcell4 V ul) SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) ==>
2844 azim (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) < pi`,
2847 REPEAT WEAKER_STRIP_TAC;
2848 INTRO_TAC MCELL4_FI [`V`;`ul`;`w0`;`n`;`f`;`i`];
2851 INTRO_TAC LEAF_RANK_COLLINEAR [`V`;`[EL 0 ul;EL 1 ul]`;`w0`;`n`;`f`];
2852 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
2854 INTRO_TAC Marchal_cells_2_new.CONVEX_HULL_4_SUBSET_AFF_GE_2_2 [`EL 0 ul`;`EL 1 ul`;`f i`;`f(SUC i)`];
2856 MATCH_MP_TAC (arith `~(x = pi) /\ ~(pi < x) ==> x < pi`);
2859 TYPIFY `coplanar {EL 0 ul,EL 1 ul,f i, f (SUC i)}` (C SUBGOAL_THEN MP_TAC);
2860 MATCH_MP_TAC AZIM_EQ_0_PI_IMP_COPLANAR;
2861 BY(ASM_REWRITE_TAC[]);
2863 ONCE_REWRITE_TAC[GSYM COPLANAR_CONVEX_HULL_COPLANAR];
2864 BY(ASM_MESON_TAC[COPLANAR_IMP_NEGLIGIBLE]);
2866 INTRO_TAC Leaf_cell.AZIM_POS_IMP_SUM_2PI_ALT [`EL 0 ul`;`EL 1 ul`;`f i`;`f (SUC i)`];
2868 FIRST_X_ASSUM MP_TAC;
2872 TYPIFY `azim (EL 0 ul) (EL 1 ul) (f (SUC i)) (f i) < pi` (C SUBGOAL_THEN ASSUME_TAC);
2873 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2874 FIRST_X_ASSUM_ST `aff_ge` MP_TAC;
2875 TYPIFY `{f i,f (SUC i)} = {f (SUC i),f i}` (C SUBGOAL_THEN SUBST1_TAC);
2878 GMATCH_SIMP_TAC (GSYM Local_lemmas.WEDGE_GE_EQ_AFF_GE);
2881 INTRO_TAC Leaf_cell.WEDGE_GE_ALMOST_DISJOINT [`EL 0 ul`;`EL 1 ul`;`f i`;`f (SUC i)`];
2883 REWRITE_TAC[SUBSET;IN_INTER;IN_UNION];
2884 REPEAT WEAKER_STRIP_TAC;
2885 TYPIFY `mcell4 V ul SUBSET aff_ge {EL 0 ul, EL 1 ul} {f i} UNION aff_ge {EL 0 ul, EL 1 ul } {f (SUC i)}` (C SUBGOAL_THEN ASSUME_TAC);
2886 REWRITE_TAC[SUBSET;IN_UNION];
2887 REPEAT WEAKER_STRIP_TAC;
2888 FIRST_X_ASSUM MATCH_MP_TAC;
2889 FIRST_X_ASSUM_ST `convex` MP_TAC;
2890 TYPIFY `{EL 0 ul, EL 1 ul, f (SUC i), f i} = {EL 0 ul, EL 1 ul, f (i), f (SUC i)}` (C SUBGOAL_THEN SUBST1_TAC);
2892 BY(ASM_MESON_TAC[SUBSET]);
2893 FIRST_X_ASSUM_ST `NULLSET` MP_TAC;
2895 MATCH_MP_TAC NEGLIGIBLE_SUBSET;
2896 TYPIFY `aff_ge {EL 0 ul, EL 1 ul} {f i} UNION aff_ge {EL 0 ul, EL 1 ul} {f (SUC i)}` EXISTS_TAC;
2898 MATCH_MP_TAC NEGLIGIBLE_UNION;
2899 BY(REWRITE_TAC[NULLSET_AFF_2_1])
2903 let MCELL4_DIHX_AZIM = prove_by_refinement(
2907 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
2909 ~collinear {EL 0 ul, EL 1 ul, w0} /\
2911 ~NULLSET (mcell4 V ul) /\
2912 mcell4 V ul SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) ==>
2913 dihX V (mcell4 V ul) (EL 0 ul, EL 1 ul) = azim (EL 0 ul) (EL 1 ul) (f i) (f (SUC i))`,
2916 REPEAT WEAKER_STRIP_TAC;
2917 INTRO_TAC LEAF_RANK_COLLINEAR [`V`;`[EL 0 ul;EL 1 ul]`;`w0`;`n`;`f`];
2918 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
2920 INTRO_TAC MCELL4_AZIM_LT_PI [`V`;`ul`;`w0`;`n`;`f`;`i`];
2922 BY(ASM_REWRITE_TAC[]);
2924 GMATCH_SIMP_TAC Local_lemmas.AZIM_LE_PI_EQ_DIHV;
2926 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
2927 INTRO_TAC Merge_ineq.DIHV_EQ_DIH_Y [`EL 0 ul`;`EL 1 ul`;`f i`;`f (SUC i)`];
2928 REWRITE_TAC[LET_DEF;LET_END_DEF];
2930 BY(ASM_REWRITE_TAC[]);
2931 DISCH_THEN SUBST1_TAC;
2932 INTRO_TAC Tskajxy_lemmas.DIHX_DIH_Y_lemma [`V`;`mcell4 V ul`;`[EL 0 ul;EL 1 ul;f i;f (SUC i)]`;`EL 0 ul`;`EL 1 ul`;`f i`;`f (SUC i)`;`4`;`dist(EL 0 ul,EL 1 ul)`;`dist(EL 0 ul,f i)`;`dist(EL 0 ul, f (SUC i))`;`dist(f i, f (SUC i))`;`dist(EL 1 ul,f (SUC i))`;`dist(EL 1 ul,f i)`];
2934 ASM_REWRITE_TAC[arith `4 >= 4`];
2935 INTRO_TAC MCELL4_FI [`V`;`ul`;`w0`;`n`;`f`;`i`];
2937 BY(ASM_REWRITE_TAC[]);
2939 INTRO_TAC MCELL4_CONVEX_HULL [`V`;`ul`];
2941 BY(ASM_REWRITE_TAC[]);
2943 REWRITE_TAC[GSYM Bump.MCELL4];
2944 MATCH_MP_TAC MCELL4_BARV_FI;
2945 BY(ASM_MESON_TAC[]);
2946 BY(DISCH_THEN (unlist REWRITE_TAC))
2950 let LEAF_RANK_HAS_SIZE = prove_by_refinement(
2951 `!V ul w0 n f. ~(n=0) /\ packing V /\ saturated V /\ leaf_rank V ul w0 n f /\
2952 ~collinear {EL 0 ul, EL 1 ul, w0}
2954 s_leaf V ul HAS_SIZE n`,
2957 REWRITE_TAC[HAS_SIZE];
2958 REPEAT WEAKER_STRIP_TAC;
2960 BY(ASM_MESON_TAC[S_LEAF_FINITE]);
2962 INTRO_TAC LEAF_RANK_PERIODIC [`V`;`ul`;`w0`;`n`;`f`];
2965 INTRO_TAC LEAF_RANK_AZIM_INJ [`V`;`ul`;`w0`;`n`;`f`];
2968 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
2969 REWRITE_TAC[leaf_rank];
2970 GMATCH_SIMP_TAC (GSYM PERIODIC_IMAGE);
2971 TYPIFY `n` EXISTS_TAC;
2973 REPEAT WEAKER_STRIP_TAC;
2974 MATCH_MP_TAC EQ_SYM;
2975 TYPIFY `n = CARD {i | i < n }` (C SUBGOAL_THEN SUBST1_TAC);
2976 BY(REWRITE_TAC[CARD_NUMSEG_LT]);
2977 MATCH_MP_TAC Misc_defs_and_lemmas.BIJ_CARD;
2978 TYPIFY `f` EXISTS_TAC;
2979 REWRITE_TAC[FINITE_NUMSEG_LT];
2980 REWRITE_TAC[BIJ;INJ];
2983 FIRST_X_ASSUM_ST `IMAGE` MP_TAC;
2984 REWRITE_TAC[EXTENSION;IN_IMAGE];
2986 REWRITE_TAC[IN_ELIM_THM];
2987 REPEAT WEAKER_STRIP_TAC;
2988 GMATCH_SIMP_TAC (GSYM MOD_LT);
2989 TYPIFY `n` EXISTS_TAC;
2991 TYPIFY `y = y MOD n` (C SUBGOAL_THEN SUBST1_TAC);
2992 BY(ASM_MESON_TAC[MOD_LT]);
2993 TYPIFY `azim (EL 0 ul) (EL 1 ul) (f x) (f y) = &0` ENOUGH_TO_SHOW_TAC;
2994 BY(ASM_MESON_TAC[]);
2995 FIRST_X_ASSUM SUBST1_TAC;
2996 BY(REWRITE_TAC[AZIM_REFL]);
2997 REPEAT WEAKER_STRIP_TAC;
2998 ASM_REWRITE_TAC[SURJ];
2999 FIRST_X_ASSUM_ST `IMAGE` MP_TAC;
3000 REWRITE_TAC[EXTENSION;IN_IMAGE];
3005 let MCELL4_FULL_WEDGE = prove_by_refinement(
3009 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
3011 ~collinear {EL 0 ul, EL 1 ul, w0} /\
3013 ~NULLSET (mcell4 V ul) /\
3015 X SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) /\
3016 {EL 0 ul, EL 1 ul} IN edgeX V X /\
3017 mcell4 V ul SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) ==>
3021 REPEAT WEAKER_STRIP_TAC;
3022 FIRST_X_ASSUM_ST `mcell_set` MP_TAC;
3023 REWRITE_TAC[Qzyzmjc.mcell_set_2;IN_ELIM_THM];
3025 REWRITE_TAC[arith `!i. i <= 4 <=> i <= 1 \/ i = 4 \/ (i = 2 \/ i = 3)`];
3026 REPEAT WEAKER_STRIP_TAC;
3029 FIRST_X_ASSUM DISJ_CASES_TAC;
3030 INTRO_TAC Bump.EDGE_IMP_K2 [`V`;`ul'`;`i'`];
3031 ASM_REWRITE_TAC[EXTENSION;NOT_IN_EMPTY];
3032 BY(ASM_MESON_TAC[]);
3034 FIRST_X_ASSUM DISJ_CASES_TAC;
3035 INTRO_TAC MCELL4_FI [`V`;`ul`;`w0`;`n`;`f`;`i`];
3039 INTRO_TAC Leaf_cell.MCELL_EDGE_FIRST [`V`;`ul'`;`4`;`EL 0 ul`;`EL 1 ul`];
3041 BY(ASM_MESON_TAC[IN]);
3042 REPEAT WEAKER_STRIP_TAC;
3043 INTRO_TAC MCELL4_FI [`V`;`vl`;`w0`;`n`;`f`;`i`];
3046 TYPIFY `~NULLSET (mcell4 V vl)` (C SUBGOAL_THEN ASSUME_TAC);
3048 FIRST_X_ASSUM_ST `edgeX` MP_TAC;
3050 GMATCH_SIMP_TAC Bump.RIJRIED;
3051 REWRITE_TAC[NOT_IN_EMPTY];
3052 BY(ASM_MESON_TAC[IN;Bump.MCELL4]);
3053 BY(ASM_MESON_TAC[IN;Bump.MCELL4]);
3055 BY(ASM_MESON_TAC[Bump.MCELL4]);
3056 COMMENT "cases 2 and 3";
3057 INTRO_TAC LEAF_RANK_REUHADY [`V`;`[EL 0 ul;EL 1 ul]`;`w0`;`n`;`f`;`i`];
3058 REWRITE_TAC[Bump.EL_EXPLICIT];
3059 DISCH_THEN MP_TAC THEN ANTS_TAC;
3061 MATCH_MP_TAC LEAF_RANK_HAS_SIZE;
3062 REWRITE_TAC[Bump.EL_EXPLICIT];
3063 GEXISTL_TAC [`w0`;`f`];
3064 BY(ASM_MESON_TAC[arith `1 < n ==> ~(n = 0)`]);
3065 REWRITE_TAC[azim_mcell];
3066 TYPED_ABBREV_TAC `(A:(real^3->bool)->bool) = {X | mcell_set V X /\ {EL 0 ul, EL 1 ul} IN edgeX V X /\ X SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i))}` ;
3067 INTRO_TAC SUM_SUBSET_SIMPLE [`{X,mcell4 V ul}`;`A`;`(\X. dihX V X (EL 0 ul,EL 1 ul))`];
3071 MATCH_MP_TAC FINITE_SUBSET;
3072 TYPIFY `{X | mcell_set V X /\ edgeX V X {EL 0 ul, EL 1 ul} }` EXISTS_TAC;
3074 MATCH_MP_TAC Marchal_cells_3.FINITE_EDGE_X2;
3075 BY(ASM_MESON_TAC[]);
3079 REWRITE_TAC[SUBSET;IN_INSERT;IN_ELIM_THM;NOT_IN_EMPTY];
3082 REWRITE_TAC[Qzyzmjc.mcell_set_2;IN_ELIM_THM];
3083 BY(ASM_MESON_TAC[SUBSET;IN;arith `2 <= 4 /\ 3 <= 4`]);
3084 REWRITE_TAC[Qzyzmjc.mcell_set_2;IN_ELIM_THM];
3086 GEXISTL_TAC [`4`;`ul`];
3087 BY(ASM_MESON_TAC[IN;arith `4 <= 4`;Bump.MCELL4]);
3089 FIRST_X_ASSUM SUBST1_TAC;
3090 GMATCH_SIMP_TAC Bump.MCELL4_EDGE;
3092 BY(ASM_MESON_TAC[]);
3094 MATCH_MP_TAC Marchal_cells_2_new.CARD4_IMP_DISTINCT;
3095 GEXISTL_TAC [`EL 2 ul`;`EL 3 ul`];
3096 MATCH_MP_TAC MCELL4_CARD4;
3097 BY(ASM_MESON_TAC[]);
3099 GMATCH_SIMP_TAC Bump.set_of_list4;
3102 REWRITE_TAC[arith `4 = 3 + 1`] THEN MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA;
3103 BY(ASM_MESON_TAC[]);
3104 BY(ASM_MESON_TAC[SUBSET]);
3105 BY(REWRITE_TAC[Marchal_cells_3.DIHX_RANGE]);
3106 REPEAT WEAKER_STRIP_TAC;
3107 FIRST_X_ASSUM_ST `<=` MP_TAC;
3109 REPLICATE_TAC 2 (FIRST_X_ASSUM kill);
3110 REWRITE_TAC[arith `~(x <= y) <=> (y < x)`];
3111 GMATCH_SIMP_TAC Geomdetail.SUM_DIS2;
3113 BY(ASM_MESON_TAC[]);
3114 GMATCH_SIMP_TAC MCELL4_DIHX_AZIM;
3115 GEXISTL_TAC [`f`;`i`];
3117 BY(ASM_MESON_TAC[]);
3118 REWRITE_TAC[arith `a < d + a <=> &0 < d`];
3119 FIRST_X_ASSUM DISJ_CASES_TAC;
3120 INTRO_TAC Leaf_cell.MCELL2_EDGE_FIRST [`V`;`ul'`;`EL 0 ul`;`EL 1 ul`];
3122 BY(ASM_MESON_TAC[Bump.MCELL2;IN]);
3124 REPEAT WEAKER_STRIP_TAC;
3125 TYPIFY `dihX V (mcell i' V ul') (EL 0 ul,EL 1 ul) = dihX V (mcell2 V vl) (EL 0 vl,EL 1 vl)` (C SUBGOAL_THEN SUBST1_TAC);
3126 BY(ASM_MESON_TAC[Bump.MCELL2]);
3127 MATCH_MP_TAC MCELL2_DIHX_POS;
3130 BY(ASM_MESON_TAC[Bump.MCELL2]);
3132 INTRO_TAC Leaf_cell.MCELL3_EDGE_FIRST [`V`;`ul'`;`EL 0 ul`;`EL 1 ul`];
3134 BY(ASM_MESON_TAC[Bump.MCELL3;IN]);
3136 REPEAT WEAKER_STRIP_TAC;
3137 TYPIFY `dihX V (mcell i' V ul') (EL 0 ul,EL 1 ul) = dihX V (mcell3 V vl) (EL 0 vl,EL 1 vl)` (C SUBGOAL_THEN SUBST1_TAC);
3138 BY(ASM_MESON_TAC[Bump.MCELL3]);
3139 MATCH_MP_TAC MCELL3_DIHX_POS;
3142 BY(ASM_MESON_TAC[Bump.MCELL3])
3146 let MCELL4_REPARAM = prove_by_refinement(
3147 `!V ul vl. packing V /\ saturated V /\ CARD (set_of_list ul) = 4 /\ (set_of_list ul = set_of_list vl) /\
3148 LENGTH vl = 4 /\ ~(NULLSET (mcell4 V ul)) /\
3149 barV V 3 ul ==> mcell4 V ul = mcell4 V vl /\ barV V 3 vl`,
3152 REPEAT WEAKER_STRIP_TAC;
3153 INTRO_TAC Marchal_cells_3.LEFT_ACTION_LIST_3_EXISTS [`EL 0 ul`;`EL 1 ul`;`EL 2 ul`;`EL 3 ul`;`EL 0 vl`;`EL 1 vl`;`EL 2 vl`;`EL 3 vl`];
3154 TYPIFY `set_of_list ul = {EL 0 ul, EL 1 ul, EL 2 ul, EL 3 ul}` (C SUBGOAL_THEN ASSUME_TAC);
3155 MATCH_MP_TAC Bump.set_of_list4;
3156 REWRITE_TAC[arith `4 = 3 + 1`] THEN MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA;
3157 BY(ASM_MESON_TAC[]);
3158 TYPIFY `set_of_list vl = {EL 0 vl,EL 1 vl,EL 2 vl,EL 3 vl}` (C SUBGOAL_THEN ASSUME_TAC);
3159 MATCH_MP_TAC Bump.set_of_list4;
3160 BY(ASM_REWRITE_TAC[]);
3162 BY(ASM_MESON_TAC[]);
3163 REPEAT WEAKER_STRIP_TAC;
3164 TYPIFY `ul = [EL 0 ul;EL 1 ul;EL 2 ul;EL 3 ul]` (C SUBGOAL_THEN ASSUME_TAC);
3165 MATCH_MP_TAC Bump.LENGTH4;
3166 REWRITE_TAC[arith `4 = 3 + 1`] THEN MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA;
3167 BY(ASM_MESON_TAC[]);
3168 TYPIFY `vl = [EL 0 vl;EL 1 vl;EL 2 vl;EL 3 vl]` (C SUBGOAL_THEN ASSUME_TAC);
3169 MATCH_MP_TAC Bump.LENGTH4;
3170 BY(ASM_REWRITE_TAC[]);
3171 INTRO_TAC Rvfxzbu.RVFXZBU [`V`;`ul`;`4`;`p`];
3172 ASM_REWRITE_TAC[IN_INSERT;arith `4 - 1 = 3`];
3175 BY(ASM_MESON_TAC[Bump.MCELL4]);
3177 INTRO_TAC Qzksykg.QZKSYKG1 [`V`;`ul`;`vl`;`4`;`p`];
3178 DISCH_THEN MATCH_MP_TAC;
3179 ASM_REWRITE_TAC[IN_INSERT;arith `4 - 1 = 3`];
3180 BY(ASM_MESON_TAC[Bump.MCELL4;NEGLIGIBLE_EMPTY])
3184 let MCELL4_GG = prove_by_refinement(
3188 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
3190 ~collinear {EL 0 ul, EL 1 ul, w0} /\
3194 X SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) ==>
3195 gg_mcell V f (EL 0 ul) (EL 1 ul) i =
3196 gammaX V X lmfun * critical_weight V X + beta_bump_v1 V {EL 0 ul,EL 1 ul} X`,
3199 REPEAT WEAKER_STRIP_TAC;
3200 REWRITE_TAC[gg_mcell];
3201 TYPIFY `{X | mcell_set V X /\ {EL 0 ul, EL 1 ul} IN edgeX V X /\ X SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i))} = {X}` ENOUGH_TO_SHOW_TAC;
3202 DISCH_THEN SUBST1_TAC;
3203 BY(REWRITE_TAC[SUM_SING]);
3204 ONCE_REWRITE_TAC[EXTENSION];
3205 REWRITE_TAC[IN_SING;IN_ELIM_THM];
3206 REWRITE_TAC[Geomdetail.EQ_EXPAND];
3207 REPEAT WEAKER_STRIP_TAC;
3209 DISCH_THEN SUBST1_TAC;
3211 REWRITE_TAC[Pack_defs.mcell_set];
3212 REWRITE_TAC[Pack_defs.mcell_set;IN_ELIM_THM];
3214 BY(ASM_MESON_TAC[Bump.MCELL4;IN]);
3215 GMATCH_SIMP_TAC Bump.MCELL4_EDGE;
3217 BY(ASM_MESON_TAC[]);
3219 MATCH_MP_TAC Marchal_cells_2_new.CARD4_IMP_DISTINCT;
3220 GEXISTL_TAC [`EL 2 ul`;`EL 3 ul`];
3221 MATCH_MP_TAC MCELL4_CARD4;
3222 BY(ASM_MESON_TAC[]);
3224 GMATCH_SIMP_TAC Bump.set_of_list4;
3227 REWRITE_TAC[arith `4 = 3 + 1`] THEN MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA;
3228 BY(ASM_MESON_TAC[]);
3229 REPEAT WEAKER_STRIP_TAC;
3231 MATCH_MP_TAC MCELL4_FULL_WEDGE;
3232 GEXISTL_TAC [`w0`;`n`;`f`;`i`];
3238 let LEAF_RANK_TRUNCATE = prove_by_refinement(
3239 `!V ul w0 n f. leaf_rank V ul w0 n f = leaf_rank V [EL 0 ul;EL 1 ul] w0 n f`,
3242 REWRITE_TAC[leaf_rank;Bump.EL_EXPLICIT];
3243 BY(MESON_TAC[S_LEAF_TRUNCATE])
3247 let LEAF_RANK_S_LEAF = prove_by_refinement(
3248 `!V ul w0 n f i. leaf_rank V ul w0 n f ==> s_leaf V ul (f i)`,
3251 REWRITE_TAC[leaf_rank;IMAGE;EXTENSION;IN_ELIM_THM;IN_UNIV];
3256 let CC_CELL_SUBSET_WEDGE = prove_by_refinement(
3257 `!V ul u0 u1 w0 n f j.
3260 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
3262 {u0,u1} = {EL 0 ul,EL 1 ul} /\
3263 ~collinear {EL 0 ul, EL 1 ul, w0} ==>
3264 cc_cell V [u0;u1;f j] SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f j) (f (SUC j)) \/
3265 cc_cell V [u0;u1;f j] SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f (j+(n-1))) (f j)`,
3268 REPEAT WEAKER_STRIP_TAC;
3269 TYPIFY `?i. (i < n) /\ f j = f i /\ f(SUC j) = f(SUC i) /\ f(j+(n-1)) = f(i+(n-1))` (C SUBGOAL_THEN MP_TAC);
3270 TYPIFY `~(n = 0)` (C SUBGOAL_THEN ASSUME_TAC);
3271 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
3272 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
3273 BY(ASM_MESON_TAC[ LEAF_RANK_PERIODIC]);
3274 TYPIFY `j MOD n` EXISTS_TAC;
3275 BY(ASM_SIMP_TAC[F_DEMOD;FM_DEMOD;DIVISION]);
3276 DISCH_THEN (fun t -> REPEAT (FIRST_X_ASSUM MP_TAC) THEN MP_TAC t);
3279 REPLICATE_TAC 3 (FIRST_X_ASSUM kill);
3280 REPEAT WEAKER_STRIP_TAC;
3282 TYPIFY `!i. leaf V [EL 0 ul; EL 1 ul; f i]` (C SUBGOAL_THEN ASSUME_TAC);
3284 MATCH_MP_TAC s_leaf_leaf;
3286 MATCH_MP_TAC LEAF_RANK_S_LEAF;
3287 BY(ASM_MESON_TAC[LEAF_RANK_TRUNCATE]);
3288 TYPIFY `leaf V [u0;u1;f i]` (C SUBGOAL_THEN ASSUME_TAC);
3289 FIRST_X_ASSUM_ST `=` MP_TAC;
3290 REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
3291 DISCH_THEN DISJ_CASES_TAC;
3292 BY(ASM_REWRITE_TAC[]);
3294 INTRO_TAC Leaf_cell.ZASUVOR [`V`;`EL 0 ul`;`EL 1 ul`;`f i`];
3296 BY(ASM_REWRITE_TAC[]);
3298 COMMENT "f periodic";
3299 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
3300 BY(ASM_MESON_TAC[LEAF_RANK_PERIODIC]);
3301 COMMENT "mcell in wedge";
3302 INTRO_TAC MCELL_IN_WEDGE [`V`;` [EL 0 ul;EL 1 ul]`;`w0`;`n`;`f`;`cc_cell V [u0;u1;f i]`];
3303 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
3306 MATCH_MP_TAC LEAF_RANK_HAS_SIZE;
3307 REWRITE_TAC[Bump.EL_EXPLICIT];
3308 BY(ASM_MESON_TAC[arith `1 < n ==> ~(n=0)`]);
3310 ONCE_REWRITE_TAC[GSYM IN];
3311 MATCH_MP_TAC Leaf_cell.CC_CELL_IN_MCELL_SET;
3312 BY(ASM_REWRITE_TAC[]);
3314 BY(ASM_MESON_TAC[Leaf_cell.CC_CELL_NOT_NULLSET]);
3315 INTRO_TAC Leaf_cell.STEM_EDGEX [`V`;`[u0;u1; f i]`];
3316 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT]);
3317 REPEAT WEAKER_STRIP_TAC;
3318 COMMENT "f i' in wedge";
3319 INTRO_TAC Leaf_cell.U2_IN_CC_CELL [`V`;`[u0;u1;f i]`];
3320 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
3322 INTRO_TAC S_LEAF_IN_WEDGE_GE [`V`;`[EL 0 ul;EL 1 ul]`;`f i`;`w0`;`n`;`f`;`i'`;`i`];
3323 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
3325 BY(REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN SET_TAC[]);
3326 COMMENT "first case";
3327 DISCH_THEN DISJ_CASES_TAC;
3328 INTRO_TAC LEAF_RANK_AZIM_INJ [`V`;`[EL 0 ul;EL 1 ul]`;`w0`;`n`;`f`;`i`;`i'`];
3329 ASM_REWRITE_TAC[Bump.EL_EXPLICIT;AZIM_REFL];
3330 ASM_SIMP_TAC[arith `1 < n ==> ~(n=0)`];
3332 TYPIFY `f (SUC i') = f (SUC i)` ENOUGH_TO_SHOW_TAC;
3333 BY(ASM_MESON_TAC[]);
3334 GMATCH_SIMP_TAC Oxl_def.periodic_mod;
3335 TYPIFY `n` EXISTS_TAC;
3336 GMATCH_SIMP_TAC (GSYM Hypermap.lemma_suc_mod);
3337 FIRST_X_ASSUM (SUBST1_TAC o GSYM);
3338 BY(ASM_MESON_TAC[Hypermap.lemma_suc_mod;Oxl_def.periodic_mod;arith `1 < n ==> ~(n=0)`]);
3340 COMMENT "second case";
3341 TYPIFY `f i' = f (i + n - 1)` ENOUGH_TO_SHOW_TAC;
3342 BY(ASM_MESON_TAC[]);
3343 INTRO_TAC LEAF_RANK_AZIM_INJ [`V`;`[EL 0 ul;EL 1 ul]`;`w0`;`n`;`f`;`i`;`SUC i'`];
3344 ASM_REWRITE_TAC[Bump.EL_EXPLICIT;AZIM_REFL];
3345 ASM_SIMP_TAC[arith `1 < n ==> ~(n=0)`];
3347 TYPIFY `i' MOD n = (i + n - 1) MOD n` ENOUGH_TO_SHOW_TAC;
3349 BY(ASM_MESON_TAC [Oxl_def.periodic_mod;arith `1 < n ==> ~(n = 0)`]);
3350 GMATCH_SIMP_TAC (GSYM MOD_ADD_MOD);
3352 GMATCH_SIMP_TAC MOD_ADD_MOD;
3353 TYPIFY `SUC i' + n - 1 = 1*n + i'` (C SUBGOAL_THEN SUBST1_TAC);
3354 BY(FIRST_X_ASSUM_ST `1 < n` MP_TAC THEN ARITH_TAC);
3355 REWRITE_TAC[MOD_MULT_ADD];
3356 BY(ASM_SIMP_TAC[arith `1 < n ==> ~(n = 0)`])
3361 let CC_CELL_SUBSET_WEDGE = prove_by_refinement(
3362 `!V ul u0 u1 w0 n f i.
3365 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
3368 {u0,u1} = {EL 0 ul,EL 1 ul} /\
3369 ~collinear {EL 0 ul, EL 1 ul, w0} ==>
3370 cc_cell V [u0;u1;f i] SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) \/
3371 cc_cell V [u0;u1;f i] SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f (i+(n-1))) (f i)`,
3374 REPEAT WEAKER_STRIP_TAC;
3375 TYPIFY `!i. leaf V [EL 0 ul; EL 1 ul; f i]` (C SUBGOAL_THEN ASSUME_TAC);
3377 MATCH_MP_TAC s_leaf_leaf;
3379 MATCH_MP_TAC LEAF_RANK_S_LEAF;
3380 BY(ASM_MESON_TAC[LEAF_RANK_TRUNCATE]);
3381 TYPIFY `leaf V [u0;u1;f i]` (C SUBGOAL_THEN ASSUME_TAC);
3382 FIRST_X_ASSUM_ST `=` MP_TAC;
3383 REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
3384 DISCH_THEN DISJ_CASES_TAC;
3385 BY(ASM_REWRITE_TAC[]);
3387 INTRO_TAC Leaf_cell.ZASUVOR [`V`;`EL 0 ul`;`EL 1 ul`;`f i`];
3389 BY(ASM_REWRITE_TAC[]);
3391 COMMENT "f periodic";
3392 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
3393 BY(ASM_MESON_TAC[LEAF_RANK_PERIODIC]);
3394 COMMENT "mcell in wedge";
3395 INTRO_TAC MCELL_IN_WEDGE [`V`;` [EL 0 ul;EL 1 ul]`;`w0`;`n`;`f`;`cc_cell V [u0;u1;f i]`];
3396 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
3399 MATCH_MP_TAC LEAF_RANK_HAS_SIZE;
3400 REWRITE_TAC[Bump.EL_EXPLICIT];
3401 BY(ASM_MESON_TAC[arith `1 < n ==> ~(n=0)`]);
3403 ONCE_REWRITE_TAC[GSYM IN];
3404 MATCH_MP_TAC Leaf_cell.CC_CELL_IN_MCELL_SET;
3405 BY(ASM_REWRITE_TAC[]);
3407 BY(ASM_MESON_TAC[Leaf_cell.CC_CELL_NOT_NULLSET]);
3408 INTRO_TAC Leaf_cell.STEM_EDGEX [`V`;`[u0;u1; f i]`];
3409 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT]);
3410 REPEAT WEAKER_STRIP_TAC;
3411 COMMENT "f i' in wedge";
3412 INTRO_TAC Leaf_cell.U2_IN_CC_CELL [`V`;`[u0;u1;f i]`];
3413 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
3415 INTRO_TAC S_LEAF_IN_WEDGE_GE [`V`;`[EL 0 ul;EL 1 ul]`;`f i`;`w0`;`n`;`f`;`i'`;`i`];
3416 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
3418 BY(REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN SET_TAC[]);
3419 COMMENT "first case";
3420 DISCH_THEN DISJ_CASES_TAC;
3421 INTRO_TAC LEAF_RANK_AZIM_INJ [`V`;`[EL 0 ul;EL 1 ul]`;`w0`;`n`;`f`;`i`;`i'`];
3422 ASM_REWRITE_TAC[Bump.EL_EXPLICIT;AZIM_REFL];
3423 ASM_SIMP_TAC[arith `1 < n ==> ~(n=0)`];
3425 TYPIFY `f (SUC i') = f (SUC i)` ENOUGH_TO_SHOW_TAC;
3426 BY(ASM_MESON_TAC[]);
3427 GMATCH_SIMP_TAC Oxl_def.periodic_mod;
3428 TYPIFY `n` EXISTS_TAC;
3429 GMATCH_SIMP_TAC (GSYM Hypermap.lemma_suc_mod);
3430 FIRST_X_ASSUM (SUBST1_TAC o GSYM);
3431 BY(ASM_MESON_TAC[Hypermap.lemma_suc_mod;Oxl_def.periodic_mod;arith `1 < n ==> ~(n=0)`]);
3433 COMMENT "second case";
3434 TYPIFY `f i' = f (i + n - 1)` ENOUGH_TO_SHOW_TAC;
3435 BY(ASM_MESON_TAC[]);
3436 INTRO_TAC LEAF_RANK_AZIM_INJ [`V`;`[EL 0 ul;EL 1 ul]`;`w0`;`n`;`f`;`i`;`SUC i'`];
3437 ASM_REWRITE_TAC[Bump.EL_EXPLICIT;AZIM_REFL];
3438 ASM_SIMP_TAC[arith `1 < n ==> ~(n=0)`];
3440 TYPIFY `i' MOD n = (i + n - 1) MOD n` ENOUGH_TO_SHOW_TAC;
3442 BY(ASM_MESON_TAC [Oxl_def.periodic_mod;arith `1 < n ==> ~(n = 0)`]);
3443 GMATCH_SIMP_TAC (GSYM MOD_ADD_MOD);
3445 GMATCH_SIMP_TAC MOD_ADD_MOD;
3446 TYPIFY `SUC i' + n - 1 = 1*n + i'` (C SUBGOAL_THEN SUBST1_TAC);
3447 BY(FIRST_X_ASSUM_ST `1 < n` MP_TAC THEN ARITH_TAC);
3448 REWRITE_TAC[MOD_MULT_ADD];
3449 BY(ASM_SIMP_TAC[arith `1 < n ==> ~(n = 0)`])
3454 let WEDGE_UNIQUE_CC_CELL = prove_by_refinement(
3458 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
3460 ~collinear {EL 0 ul, EL 1 ul, w0} ==>
3461 (~(cc_cell V [EL 0 ul;EL 1 ul;f j] SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f(SUC i))) \/
3462 ~(cc_cell V [EL 1 ul;EL 0 ul;f j] SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f(SUC i))))`,
3465 REWRITE_TAC[GSYM DE_MORGAN_THM];
3466 REPEAT WEAKER_STRIP_TAC;
3467 TYPIFY `cc_ke V [EL 0 ul;EL 1 ul;f j] = 4 \/ cc_ke V [EL 1 ul;EL 0 ul;f j] = 4` (C SUBGOAL_THEN ASSUME_TAC);
3468 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
3469 REWRITE_TAC[leaf_rank;IMAGE;EXTENSION;IN_UNIV;IN_ELIM_THM];
3470 REWRITE_TAC[IN;s_leaf;Bump.EL_EXPLICIT];
3472 COMMENT "do symmetry reduction";
3473 TYPED_ABBREV_TAC `(W:real^3->bool) = wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i))` ;
3474 TYPIFY `!u0 u1. {u0,u1} = {EL 0 ul,EL 1 ul} /\ cc_ke V [u0;u1;f j] = 4 /\ cc_cell V [u0;u1;f j] SUBSET W /\ cc_cell V [u1;u0;f j] SUBSET W ==> F` ENOUGH_TO_SHOW_TAC;
3475 DISCH_THEN MATCH_MP_TAC;
3476 FIRST_X_ASSUM DISJ_CASES_TAC;
3477 GEXISTL_TAC [`EL 0 ul`;`EL 1 ul`];
3478 BY(ASM_REWRITE_TAC[]);
3479 GEXISTL_TAC [`EL 1 ul`;`EL 0 ul`];
3482 REPEAT WEAKER_STRIP_TAC;
3483 COMMENT "basic facts";
3484 TYPIFY `!j. leaf V [EL 0 ul; EL 1 ul; f j]` (C SUBGOAL_THEN ASSUME_TAC);
3486 MATCH_MP_TAC s_leaf_leaf;
3488 MATCH_MP_TAC LEAF_RANK_S_LEAF;
3489 BY(ASM_MESON_TAC[LEAF_RANK_TRUNCATE]);
3490 TYPIFY `leaf V [u0;u1;f j]` (C SUBGOAL_THEN ASSUME_TAC);
3491 FIRST_X_ASSUM_ST `{u0,u1} = {v0,v1}` MP_TAC;
3492 REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
3493 DISCH_THEN DISJ_CASES_TAC;
3494 BY(ASM_REWRITE_TAC[]);
3496 INTRO_TAC Leaf_cell.ZASUVOR [`V`;`EL 0 ul`;`EL 1 ul`;`f j`];
3498 BY(ASM_REWRITE_TAC[]);
3500 TYPIFY `leaf V [u1;u0;f j]` (C SUBGOAL_THEN ASSUME_TAC);
3501 INTRO_TAC Leaf_cell.ZASUVOR [`V`;`u0`;`u1`;`f j`];
3503 BY(ASM_REWRITE_TAC[]);
3505 COMMENT "show 4-cell has standard form";
3506 INTRO_TAC Leaf_cell.MCELL4_EDGE_FIRST [`V`;`cc_uh V [u0;u1;f j]`;`EL 0 ul`;`EL 1 ul`];
3510 BY(ASM_MESON_TAC[Leaf_cell.cc_uh]);
3512 INTRO_TAC Leaf_cell.STEM_EDGEX [`V`;`[u0;u1;f j]`];
3513 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT;Leaf_cell.cc_cell;Bump.MCELL4]);
3515 ONCE_REWRITE_TAC[EQ_SYM_EQ];
3516 REPEAT WEAKER_STRIP_TAC;
3517 TYPIFY `cc_cell V [u0;u1;f j] = mcell4 V vl` (C SUBGOAL_THEN ASSUME_TAC);
3518 BY(ASM_MESON_TAC[Leaf_cell.cc_cell;Bump.MCELL4]);
3519 INTRO_TAC MCELL4_FI [`V`;`vl`;`w0`;`n`;`f`;`i`];
3521 BY(ASM_MESON_TAC[IN;Leaf_cell.CC_CELL_NOT_NULLSET]);
3522 COMMENT "show two cc cells are equal";
3524 INTRO_TAC MCELL4_FULL_WEDGE [`V`;`cc_cell V [u1;u0;f j]`;`vl`;`w0`;`n`;`f`;`i`];
3528 BY(ASM_MESON_TAC[IN]);
3530 BY(ASM_MESON_TAC[IN;Leaf_cell.CC_CELL_NOT_NULLSET]);
3532 BY(ASM_MESON_TAC[Leaf_cell.CC_CELL_IN_MCELL_SET;IN]);
3534 INTRO_TAC Leaf_cell.STEM_EDGEX [`V`;`[u1;u0;f j]`];
3536 BY(ASM_REWRITE_TAC[]);
3537 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
3538 TYPIFY `{u1,u0} = {u0,u1}` (C SUBGOAL_THEN SUBST1_TAC);
3540 BY(ASM_REWRITE_TAC[]);
3541 BY(ASM_MESON_TAC[]);
3543 COMMENT "deal with equality";
3544 TYPIFY `~(EL 0 ul = EL 1 ul)` (C SUBGOAL_THEN ASSUME_TAC);
3545 BY(ASM_MESON_TAC[Collect_geom.NOT_COLLINEAR_IMP_2_UNEQUAL]);
3546 TYPIFY `~(u0 = u1)` (C SUBGOAL_THEN ASSUME_TAC);
3547 FIRST_X_ASSUM_ST `{u0,u1} = {v0,v1}` MP_TAC;
3548 REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
3549 DISCH_THEN DISJ_CASES_TAC;
3550 BY(ASM_REWRITE_TAC[]);
3551 BY(ASM_REWRITE_TAC[]);
3552 INTRO_TAC Leaf_cell.FUEIMOV_4 [`V`;`[u0;u1;f j]`;`[u1;u0;f j]`];
3553 ASM_REWRITE_TAC[Bump.EL_EXPLICIT;CONS_11];
3554 DISCH_THEN MP_TAC THEN ANTS_TAC;
3555 TYPIFY `{u0,u1} = {u1,u0}` (C SUBGOAL_THEN ASSUME_TAC);
3557 REPEAT (GMATCH_SIMP_TAC Leaf_cell.STEM_OF_LEAF);
3558 REWRITE_TAC[Bump.EL_EXPLICIT];
3559 BY(ASM_MESON_TAC[]);
3561 TYPIFY `EL 3 (cc_uh V [u1;u0;f j]) = f j` (C SUBGOAL_THEN ASSUME_TAC);
3562 FIRST_X_ASSUM SUBST1_TAC;
3563 BY(REWRITE_TAC[Bump.EL_EXPLICIT]);
3564 INTRO_TAC Leaf_cell.CC_CELL_NOT_NULLSET [`V`;`[u1;u0;f j]`];
3566 BY(ASM_REWRITE_TAC[]);
3569 INTRO_TAC Leaf_cell.CC_CELL4 [`V`;`[u1;u0;f j]`];
3572 INTRO_TAC Ajripqn.AJRIPQN [`V`;`vl`;`cc_uh V [u1;u0;f j]`;`4`;`cc_ke V [u1;u0;f j]`];
3574 TYPIFY `saturated V /\ packing V /\ barV V 3 vl` (C SUBGOAL_THEN (unlist REWRITE_TAC));
3575 BY(ASM_MESON_TAC[IN]);
3577 BY(ASM_MESON_TAC[Leaf_cell.cc_uh;IN]);
3580 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
3582 BY(MESON_TAC[Leaf_cell.CC_KE_34]);
3583 TYPIFY `(mcell 4 V vl INTER mcell (cc_ke V [u1; u0; f j]) V (cc_uh V [u1; u0; f j])) = cc_cell V [u1;u0; f j]` ENOUGH_TO_SHOW_TAC;
3584 DISCH_THEN SUBST1_TAC;
3585 BY(ASM_REWRITE_TAC[]);
3586 REWRITE_TAC[GSYM Bump.MCELL4];
3587 BY(ASM_MESON_TAC[INTER_IDEMPOT;Leaf_cell.cc_cell]);
3590 TYPIFY `set_of_list (cc_uh V [u1;u0;f j]) SUBSET affine hull {u1,u0,f j}` ENOUGH_TO_SHOW_TAC;
3592 FIRST_X_ASSUM_ST `NULLSET` MP_TAC;
3594 MATCH_MP_TAC NEGLIGIBLE_SUBSET;
3595 TYPIFY `affine hull {u1,u0,f j}` EXISTS_TAC;
3596 REWRITE_TAC[NEGLIGIBLE_AFFINE_HULL_3];
3597 FIRST_X_ASSUM_ST `cc_cell V ul = x` SUBST1_TAC;
3598 FIRST_X_ASSUM (MP_TAC o (MATCH_MP Marchal_cells.CONVEX_HULL_SUBSET));
3599 BY(MESON_TAC[CONVEX_HULL_EQ;AFFINE_AFFINE_HULL;AFFINE_IMP_CONVEX]);
3600 MATCH_MP_TAC SUBSET_TRANS;
3601 TYPIFY `{u1,u0,f j}` EXISTS_TAC;
3602 REWRITE_TAC[Counting_spheres.SUBSET_P_HULL];
3603 INTRO_TAC Leaf_cell.EL_CC_UH [`V`;`[u1;u0;f j]`];
3605 BY(ASM_REWRITE_TAC[]);
3606 REWRITE_TAC[Bump.EL_EXPLICIT];
3607 REPEAT WEAKER_STRIP_TAC;
3608 GMATCH_SIMP_TAC Bump.set_of_list4;
3610 INTRO_TAC Leaf_cell.cc_uh [`V`;`[u1;u0;f j]`];
3612 BY(ASM_MESON_TAC[]);
3613 BY(MESON_TAC[IN;Sphere.BARV;arith `3 + 1 = 4`]);
3620 let WEDGE_UNIQUE_CC_CELL_ALT = prove_by_refinement(
3624 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
3626 ~collinear {EL 0 ul, EL 1 ul, w0} ==>
3627 (~(cc_cell V [EL 0 ul;EL 1 ul;f j] SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f(SUC i))) \/
3628 ~(cc_cell V [EL 1 ul;EL 0 ul;f j] SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f(SUC i))))`,
3631 REPEAT WEAKER_STRIP_TAC;
3632 TYPIFY `~(n = 0)` (C SUBGOAL_THEN ASSUME_TAC);
3633 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
3634 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
3635 BY(ASM_MESON_TAC[ LEAF_RANK_PERIODIC]);
3636 INTRO_TAC WEDGE_UNIQUE_CC_CELL [`V`;`ul`;`w0`;`n`;`f`;`i MOD n`;`j`];
3637 BY(ASM_SIMP_TAC[DIVISION;F_DEMOD])
3642 let LEAF_RANK4_CHI_MSB = prove_by_refinement(
3643 `!V ul w0 n f i. packing V /\
3646 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
3647 ~collinear {EL 0 ul, EL 1 ul, w0} /\
3650 ~NULLSET (mcell4 V ul) /\
3651 mcell4 V ul SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) ==>
3652 &0 < chi_msb [EL 0 ul;EL 1 ul;f i] (f (SUC i))`,
3655 REPEAT WEAKER_STRIP_TAC;
3656 INTRO_TAC MCELL4_AZIM_LT_PI [`V`;`ul`;`w0`;`n`;`f`;`i`];
3658 BY(ASM_REWRITE_TAC[]);
3660 REWRITE_TAC[Leaf_cell.chi_msb;GSYM Local_lemmas.SIN_AZIM_MUTUAL_SROSS;Bump.EL_EXPLICIT];
3661 INTRO_TAC (GSYM AZIM_TRANSLATION) [`EL 0 ul`;`(vec 0):real^3`;`(EL 1 ul - EL 0 ul):real^3`;`(f i - EL 0 ul):real^3`;`(f (SUC i) - EL 0 ul):real^3`];
3662 REWRITE_TAC[varith `!(u:real^3) v. v + u - v = u`;varith `!(u:real^3). u + vec 0 = u`];
3663 DISCH_THEN SUBST1_TAC;
3664 MATCH_MP_TAC SIN_POS_PI;
3666 MATCH_MP_TAC (arith `~(x = &0) /\ (&0 <= x) ==> &0 < x`);
3667 REWRITE_TAC[Local_lemmas.AZIM_RANGE];
3668 GMATCH_SIMP_TAC LEAF_RANK_AZIM_INJ;
3669 TYPIFY `n` EXISTS_TAC;
3671 GEXISTL_TAC [`V`;`w0`];
3672 ASM_SIMP_TAC[arith `1 < n ==> ~(n=0)`];
3673 BY(ASM_MESON_TAC[LEAF_RANK_TRUNCATE]);
3674 ASM_SIMP_TAC[MOD_LT];
3675 TYPIFY `SUC i < n \/ SUC i = n` (C SUBGOAL_THEN DISJ_CASES_TAC);
3676 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
3677 ASM_SIMP_TAC[MOD_LT];
3679 ASM_SIMP_TAC[MOD_REFL_ALT;arith `1 < n ==> ~(n = 0)`];
3680 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC)
3684 let LEAF_RANK4_CHI_MSB_ALT = prove_by_refinement(
3685 `!V ul w0 n f i. packing V /\
3688 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
3689 ~collinear {EL 0 ul, EL 1 ul, w0} /\
3691 ~NULLSET (mcell4 V ul) /\
3692 mcell4 V ul SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) ==>
3693 &0 < chi_msb [EL 0 ul;EL 1 ul;f i] (f (SUC i))`,
3696 REPEAT WEAKER_STRIP_TAC;
3697 INTRO_TAC PERIODIC_REDUCE_MOD [`f`;`n`;`i`];
3699 ASM_SIMP_TAC[ arith `1 < n ==> 1 <= n`];
3700 BY(ASM_MESON_TAC[LEAF_RANK_PERIODIC]);
3701 REPEAT WEAKER_STRIP_TAC;
3702 INTRO_TAC LEAF_RANK4_CHI_MSB [`V`;`ul`;`w0`;`n`;`f`;`j`];
3704 DISCH_THEN MATCH_MP_TAC;
3709 let CC_CELL_WEDGE_MATCH_UH = prove_by_refinement(
3710 `!V ul u0 u1 w0 n f i j. packing V /\
3712 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
3713 ~collinear {EL 0 ul, EL 1 ul, w0} /\
3715 {u0,u1} = {EL 0 ul,EL 1 ul} /\
3716 cc_cell V [u0;u1;f j] SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) /\
3717 cc_ke V [u0;u1;f j] = 4 ==>
3718 {f j, EL 3 (cc_uh V [u0;u1;f j])} = {f i, f (SUC i)}`,
3721 REPEAT WEAKER_STRIP_TAC;
3722 COMMENT "basic facts";
3723 TYPIFY `!j. leaf V [EL 0 ul; EL 1 ul; f j]` (C SUBGOAL_THEN ASSUME_TAC);
3725 MATCH_MP_TAC s_leaf_leaf;
3727 MATCH_MP_TAC LEAF_RANK_S_LEAF;
3728 BY(ASM_MESON_TAC[LEAF_RANK_TRUNCATE]);
3729 TYPIFY `leaf V [u0;u1;f j]` (C SUBGOAL_THEN ASSUME_TAC);
3730 FIRST_X_ASSUM_ST `{u0,u1} = {v0,v1}` MP_TAC;
3731 REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
3732 DISCH_THEN DISJ_CASES_TAC;
3733 BY(ASM_REWRITE_TAC[]);
3735 INTRO_TAC Leaf_cell.ZASUVOR [`V`;`EL 0 ul`;`EL 1 ul`;`f j`];
3737 BY(ASM_REWRITE_TAC[]);
3739 TYPIFY `leaf V [u1;u0;f j]` (C SUBGOAL_THEN ASSUME_TAC);
3740 INTRO_TAC Leaf_cell.ZASUVOR [`V`;`u0`;`u1`;`f j`];
3742 BY(ASM_REWRITE_TAC[]);
3744 INTRO_TAC Leaf_cell.EL_CC_UH [`V`;`[u0;u1;f j]`];
3746 BY(ASM_REWRITE_TAC[]);
3747 REWRITE_TAC[Bump.EL_EXPLICIT];
3748 REPEAT WEAKER_STRIP_TAC;
3749 TYPIFY `~(NULLSET (cc_cell V [u0;u1;f j]))` (C SUBGOAL_THEN ASSUME_TAC);
3750 BY(ASM_MESON_TAC[IN;Leaf_cell.CC_CELL_NOT_NULLSET]);
3751 COMMENT "show 4-cell has standard form";
3753 INTRO_TAC Leaf_cell.MCELL4_EDGE_FIRST [`V`;`cc_uh V [u0;u1;f j]`;`EL 0 ul`;`EL 1 ul`];
3757 BY(ASM_MESON_TAC[Leaf_cell.cc_uh]);
3759 INTRO_TAC Leaf_cell.STEM_EDGEX [`V`;`[u0;u1;f j]`];
3760 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT;Leaf_cell.cc_cell;Bump.MCELL4]);
3762 ONCE_REWRITE_TAC[EQ_SYM_EQ];
3763 REPEAT WEAKER_STRIP_TAC;
3764 TYPIFY `cc_cell V [u0;u1;f j] = mcell4 V vl` (C SUBGOAL_THEN ASSUME_TAC);
3765 BY(ASM_MESON_TAC[Leaf_cell.cc_cell;Bump.MCELL4]);
3766 INTRO_TAC MCELL4_FI [`V`;`vl`;`w0`;`n`;`f`;`i`];
3768 BY(ASM_MESON_TAC[IN]);
3770 COMMENT "show two cc cells are equal";
3771 INTRO_TAC Leaf_cell.CC_CELL4 [`V`;`[u0;u1;f j]`];
3773 BY(ASM_REWRITE_TAC[]);
3775 TYPIFY `convex hull {EL 0 vl, EL 1 vl, f i, f (SUC i)} = convex hull set_of_list (cc_uh V [u0; u1; f j])` (C SUBGOAL_THEN MP_TAC);
3776 BY(ASM_MESON_TAC[]);
3778 TYPIFY `affine hull {EL 0 vl, EL 1 vl, f i, f (SUC i)} = affine hull set_of_list (cc_uh V [u0; u1; f j])` (C SUBGOAL_THEN ASSUME_TAC);
3779 BY(ASM_MESON_TAC[AFFINE_HULL_CONVEX_HULL]);
3780 TYPIFY `aff_dim {EL 0 vl, EL 1 vl, f i, f (SUC i)} = aff_dim (set_of_list (cc_uh V [u0; u1; f j]))` (C SUBGOAL_THEN ASSUME_TAC);
3781 BY(ASM_MESON_TAC[AFF_DIM_AFFINE_HULL]);
3782 INTRO_TAC Leaf_cell.SET_OF_LIST_CC_UH [`V`;`[u0;u1;f j]`];
3784 BY(ASM_MESON_TAC[]);
3785 REWRITE_TAC[Bump.EL_EXPLICIT];
3787 TYPIFY `CARD {u0,u1,f j,EL 3 (cc_uh V [u0;u1;f j])} = 4` (C SUBGOAL_THEN ASSUME_TAC);
3788 INTRO_TAC MCELL4_CARD4 [`V`;`cc_uh V [u0;u1;f j]`];
3790 BY(ASM_MESON_TAC[IN;Leaf_cell.cc_uh]);
3791 BY(ASM_REWRITE_TAC[]);
3792 COMMENT "show two lists are equal";
3793 INTRO_TAC Packing3.CONVEX_HULL_EQ_EQ_SET_EQ [`{EL 0 vl, EL 1 vl, f i, f (SUC i)}`;`set_of_list (cc_uh V [u0; u1; f j])`];
3794 TYPIFY `(~affine_dependent {EL 0 vl, EL 1 vl, f i, f (SUC i)} /\ ~affine_dependent (set_of_list (cc_uh V [u0; u1; f j])))` ENOUGH_TO_SHOW_TAC;
3795 DISCH_THEN (unlist REWRITE_TAC);
3798 FIRST_X_ASSUM_ST `~` MP_TAC;
3800 MATCH_MP_TAC CARD4_IN_PAIRS;
3801 GEXISTL_TAC [`u0`;`u1`];
3803 FIRST_X_ASSUM (SUBST1_TAC o GSYM);
3804 FIRST_X_ASSUM_ST `{a,b} = {c,d}` MP_TAC;
3806 ASM_REWRITE_TAC[AFFINE_INDEPENDENT_IFF_CARD];
3807 REWRITE_TAC[FINITE_INSERT;FINITE_EMPTY];
3808 TYPIFY `aff_dim {u0, u1, f j, EL 3 (cc_uh V [u0; u1; f j])} = &3` (C SUBGOAL_THEN ASSUME_TAC);
3809 MATCH_MP_TAC NOT_COPLANAR_AFF_3;
3810 ONCE_REWRITE_TAC[GSYM COPLANAR_CONVEX_HULL_COPLANAR];
3811 DISCH_THEN (MP_TAC o (MATCH_MP COPLANAR_IMP_NEGLIGIBLE));
3812 BY(ASM_MESON_TAC[COPLANAR_IMP_NEGLIGIBLE]);
3814 REWRITE_TAC[INT_ARITH `!(x:int). &3 = x - &1 <=> x = &4`];
3815 REWRITE_TAC[INT_OF_NUM_EQ];
3816 MATCH_MP_TAC (arith `x <= 4 /\ ~(x <= 3) ==> (x = 4)`);
3817 REWRITE_TAC[Geomdetail.CARD4];
3819 INTRO_TAC AFF_DIM_LE_CARD [`{EL 0 ul, EL 1 ul, f i, f (SUC i)}`];
3820 REWRITE_TAC[FINITE_INSERT;FINITE_EMPTY];
3821 MATCH_MP_TAC (INT_ARITH `c <= &3 /\ a = int_of_num 3 ==> ~(a <= c - int_of_num 1)`);
3822 ASM_REWRITE_TAC[INT_OF_NUM_LE];
3828 let CC_CELL_WEDGE_MATCH_UH_ALT = prove_by_refinement(
3829 `!V ul u0 u1 w0 n f i j. packing V /\
3831 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
3832 ~collinear {EL 0 ul, EL 1 ul, w0} /\
3834 {u0,u1} = {EL 0 ul,EL 1 ul} /\
3835 cc_cell V [u0;u1;f j] SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i)) /\
3836 cc_ke V [u0;u1;f j] = 4 ==>
3837 {f j, EL 3 (cc_uh V [u0;u1;f j])} = {f i, f (SUC i)}`,
3840 REPEAT WEAKER_STRIP_TAC;
3841 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
3842 BY(ASM_MESON_TAC[LEAF_RANK_PERIODIC]);
3843 INTRO_TAC PERIODIC_REDUCE_MOD [`f`;`n`;`i`];
3844 ASM_SIMP_TAC[arith `1 < n ==> 1 <= n`];
3845 DISCH_THEN (fun t -> REPEAT (FIRST_X_ASSUM MP_TAC) THEN MP_TAC ( t));
3848 REPEAT WEAKER_STRIP_TAC;
3849 INTRO_TAC CC_CELL_WEDGE_MATCH_UH [`V`;`ul`;`u0`;`u1`;`w0`;`n`;`f`;`j'`;`j`];
3855 let K4_CC_WI_ALT = prove_by_refinement(
3856 `!V ul w0 n f i. packing V /\
3858 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
3859 ~collinear {EL 0 ul, EL 1 ul, w0} /\
3861 cc_ke V [EL 0 ul;EL 1 ul;f i] = 4 ==>
3862 cc_cell V [EL 0 ul;EL 1 ul;f i] SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i))`,
3865 REPEAT WEAKER_STRIP_TAC;
3866 COMMENT "preliminaries";
3867 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
3868 BY(ASM_MESON_TAC[ LEAF_RANK_PERIODIC]);
3869 TYPIFY `~(n = 0)` (C SUBGOAL_THEN ASSUME_TAC);
3870 BY(FIRST_X_ASSUM_ST `1 < n` MP_TAC THEN ARITH_TAC);
3871 TYPIFY `f (SUC (i + n - 1)) = f i` (C SUBGOAL_THEN ASSUME_TAC);
3872 BY(ASM_SIMP_TAC[F_SUC_PRE]);
3873 INTRO_TAC CC_CELL_SUBSET_WEDGE [`V`;`ul`;`EL 0 ul`;`EL 1 ul`;`w0`;`n`;`f`;`i`];
3875 BY(ASM_MESON_TAC[]);
3876 MATCH_MP_TAC (TAUT `~b ==> (a \/ b ==> a)`);
3878 TYPIFY `!j. leaf V [EL 0 ul; EL 1 ul; f j]` (C SUBGOAL_THEN ASSUME_TAC);
3880 MATCH_MP_TAC s_leaf_leaf;
3882 MATCH_MP_TAC LEAF_RANK_S_LEAF;
3883 BY(ASM_MESON_TAC[LEAF_RANK_TRUNCATE]);
3884 INTRO_TAC Leaf_cell.EL_CC_UH [`V`;`[EL 0 ul;EL 1 ul;f i]`];
3885 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
3886 REPEAT WEAKER_STRIP_TAC;
3887 TYPIFY `&0 < chi_msb [EL 0 (cc_uh V [EL 0 ul;EL 1 ul;f i]); EL 1 (cc_uh V [EL 0 ul;EL 1 ul;f i]); f(i + n - 1)] (f (SUC (i + n - 1)))` (C SUBGOAL_THEN MP_TAC);
3888 MATCH_MP_TAC LEAF_RANK4_CHI_MSB_ALT;
3889 GEXISTL_TAC [`V`;`w0`;`n`];
3890 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
3892 BY(ASM_MESON_TAC[Leaf_cell.cc_uh;IN]);
3893 TYPIFY `mcell4 V (cc_uh V [EL 0 ul;EL 1 ul; f i]) = cc_cell V [EL 0 ul;EL 1 ul;f i]` (C SUBGOAL_THEN SUBST1_TAC);
3894 REWRITE_TAC[Leaf_cell.cc_cell;Bump.MCELL4];
3895 BY(ASM_MESON_TAC[]);
3897 MATCH_MP_TAC Leaf_cell.CC_CELL_NOT_NULLSET;
3898 BY(ASM_MESON_TAC[]);
3899 BY(ASM_REWRITE_TAC[]);
3902 COMMENT "now compute chi a second way via 0 < chi cc_cell";
3903 INTRO_TAC Leaf_cell.K4_CHI_MSB_POS [`V`;`[EL 0 ul;EL 1 ul;f (i)]`];
3905 ONCE_REWRITE_TAC[Leaf_cell.chi_msb_swap_23];
3906 TYPIFY `EL 3 (cc_uh V [EL 0 ul; EL 1 ul; f i]) = f (i + n - 1)` ENOUGH_TO_SHOW_TAC;
3907 DISCH_THEN SUBST1_TAC;
3908 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC);
3909 INTRO_TAC CC_CELL_WEDGE_MATCH_UH [`V`;`ul`;`EL 0 ul`;`EL 1 ul`;`w0`;`n`;`f`;`(i + n - 1)`;`i`];
3911 REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
3912 DISCH_THEN DISJ_CASES_TAC;
3914 FIRST_X_ASSUM_ST `/\` MP_TAC;
3915 REPEAT WEAKER_STRIP_TAC;
3916 INTRO_TAC LEAF_RANK_AZIM_INJ [`V`;`[EL 0 ul;EL 1 ul;f i]`;`w0`;`n`;`f`;`i`;`i + n - 1`];
3917 ASM_SIMP_TAC[arith `1 < n ==> ~(n = 0)`;Bump.EL_EXPLICIT;AZIM_REFL];
3918 DISCH_THEN MP_TAC THEN ANTS_TAC;
3919 BY(ASM_MESON_TAC[]);
3920 BY(ASM_MESON_TAC[MOD_INJ1_ALT;arith `1 < n ==> ~(n = 0) /\ 1 < n ==> (n - 1) < n /\ 1 < n ==> ~(n - 1 = 0)`]);
3926 let K4_CC_WI_ALT = prove_by_refinement(
3927 `!V ul w0 n f i. packing V /\
3929 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
3930 ~collinear {EL 0 ul, EL 1 ul, w0} /\
3932 cc_ke V [EL 0 ul;EL 1 ul;f i] = 4 ==>
3933 cc_cell V [EL 0 ul;EL 1 ul;f i] SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i))`,
3936 REPEAT WEAKER_STRIP_TAC;
3937 TYPIFY `~(n = 0)` (C SUBGOAL_THEN ASSUME_TAC);
3938 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
3939 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
3940 BY(ASM_MESON_TAC[ LEAF_RANK_PERIODIC]);
3941 INTRO_TAC K4_CC_WI [`V`;`ul`;`w0`;`n`;`f`;`i MOD n`];
3942 BY(ASM_SIMP_TAC[DIVISION;F_DEMOD])
3947 let K4_CC_WIM = prove_by_refinement(
3948 `!V ul w0 n f i. packing V /\
3950 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
3951 ~collinear {EL 0 ul, EL 1 ul, w0} /\
3953 cc_ke V [EL 1 ul;EL 0 ul;f i] = 4 ==>
3954 cc_cell V [EL 1 ul;EL 0 ul;f i] SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f (i + n - 1)) (f i)`,
3957 REPEAT WEAKER_STRIP_TAC;
3958 COMMENT "preliminaries";
3959 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
3960 BY(ASM_MESON_TAC[ LEAF_RANK_PERIODIC]);
3961 TYPIFY `~(n = 0)` (C SUBGOAL_THEN ASSUME_TAC);
3962 BY(FIRST_X_ASSUM_ST `1 < n` MP_TAC THEN ARITH_TAC);
3963 TYPIFY `f (SUC (i + n - 1)) = f i` (C SUBGOAL_THEN ASSUME_TAC);
3964 BY(ASM_SIMP_TAC[F_SUC_PRE]);
3965 TYPIFY `{EL 1 ul,EL 0 ul} = {EL 0 ul,EL 1 ul}` (C SUBGOAL_THEN ASSUME_TAC);
3967 INTRO_TAC CC_CELL_SUBSET_WEDGE [`V`;`ul`;`EL 1 ul`;`EL 0 ul`;`w0`;`n`;`f`;`i`];
3969 BY(ASM_MESON_TAC[]);
3970 MATCH_MP_TAC (TAUT `~a ==> (a \/ b ==> b)`);
3972 TYPIFY `!j. leaf V [EL 0 ul; EL 1 ul; f j]` (C SUBGOAL_THEN ASSUME_TAC);
3974 MATCH_MP_TAC s_leaf_leaf;
3976 MATCH_MP_TAC LEAF_RANK_S_LEAF;
3977 BY(ASM_MESON_TAC[LEAF_RANK_TRUNCATE]);
3978 TYPIFY `!j. leaf V [EL 1 ul;EL 0 ul; f j]` (C SUBGOAL_THEN ASSUME_TAC);
3980 INTRO_TAC Leaf_cell.ZASUVOR [`V`;`EL 0 ul`;`EL 1 ul`;`f j`];
3982 BY(ASM_REWRITE_TAC[]);
3984 INTRO_TAC Leaf_cell.EL_CC_UH [`V`;`[EL 1 ul;EL 0 ul;f i]`];
3985 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
3986 REPEAT WEAKER_STRIP_TAC;
3987 INTRO_TAC Leaf_cell.CC_CELL_NOT_NULLSET [`V`;`[EL 1 ul; EL 0 ul; f i]`];
3989 BY(ASM_REWRITE_TAC[]);
3991 COMMENT "reparametrize";
3992 INTRO_TAC MCELL4_REPARAM [`V`;`cc_uh V [EL 1 ul;EL 0 ul;f i]`;`[EL 0 ul;EL 1 ul;f i; EL 3 (cc_uh V [EL 1 ul;EL 0 ul;f i])]`];
3993 COMMENT "long list of ants";
3995 ASM_REWRITE_TAC[LENGTH;arith `SUC(SUC(SUC(SUC 0))) = 4`];
3996 INTRO_TAC Leaf_cell.CC_CELL_EXTREME_CARD [`V`;`[EL 1 ul;EL 0 ul;f i]`;`EL 3 (cc_uh V [EL 1 ul;EL 0 ul;f i])`];
3998 BY(ASM_REWRITE_TAC[arith `~(4 = 3)`]);
3999 REWRITE_TAC[Bump.EL_EXPLICIT];
4001 TYPIFY `barV V 3 (cc_uh V [EL 1 ul; EL 0 ul; f i])` (C SUBGOAL_THEN ASSUME_TAC);
4002 BY(ASM_MESON_TAC[Leaf_cell.cc_uh;IN]);
4003 INTRO_TAC BARV3_SET_OF_LIST4 [`V`;`cc_uh V [EL 1 ul; EL 0 ul; f i]`];
4007 BY(ASM_MESON_TAC[]);
4009 ASM_REWRITE_TAC[set_of_list];
4011 BY(ASM_MESON_TAC[Leaf_cell.cc_cell;Bump.MCELL4;IN]);
4012 REPEAT WEAKER_STRIP_TAC;
4013 TYPED_ABBREV_TAC `(vl:(real^3)list) = [EL 0 ul; EL 1 ul; f i; EL 3 (cc_uh V [EL 1 ul; EL 0 ul; f i])]` ;
4014 TYPIFY `EL 0 vl = EL 0 ul /\ EL 1 vl = EL 1 ul` (C SUBGOAL_THEN ASSUME_TAC);
4016 BY(REWRITE_TAC[Bump.EL_EXPLICIT]);
4017 COMMENT "compute chi_msb";
4018 INTRO_TAC LEAF_RANK4_CHI_MSB_ALT [`V`;`vl`;`w0`;`n`;`f`;`i`];
4021 BY(ASM_MESON_TAC[Leaf_cell.cc_cell;Bump.MCELL4]);
4024 COMMENT "now compute chi a second way via 0 < chi cc_cell";
4025 INTRO_TAC Leaf_cell.K4_CHI_MSB_POS [`V`;`[EL 1 ul;EL 0 ul;f (i)]`];
4027 ONCE_REWRITE_TAC[Leaf_cell.chi_msb_swap_01];
4028 TYPIFY `EL 3 (cc_uh V [EL 1 ul; EL 0 ul; f i]) = f (SUC i)` ENOUGH_TO_SHOW_TAC;
4029 DISCH_THEN SUBST1_TAC;
4030 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC);
4031 INTRO_TAC CC_CELL_WEDGE_MATCH_UH [`V`;`ul`;`EL 1 ul`;`EL 0 ul`;`w0`;`n`;`f`;`i`;`i`];
4033 REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
4034 DISCH_THEN DISJ_CASES_TAC;
4035 BY(ASM_REWRITE_TAC[]);
4037 FIRST_X_ASSUM_ST `/\` MP_TAC;
4038 REPEAT WEAKER_STRIP_TAC;
4039 INTRO_TAC LEAF_RANK_AZIM_INJ [`V`;`[EL 0 ul;EL 1 ul]`;`w0`;`n`;`f`;`i`;`SUC i`];
4040 ASM_SIMP_TAC[arith `1 < n ==> ~(n = 0)`;Bump.EL_EXPLICIT;AZIM_REFL];
4041 REWRITE_TAC[arith `SUC i = (i + 1)`];
4042 BY(ASM_MESON_TAC[MOD_INJ1_ALT;arith `1 < n ==> ~(n = 0) /\ ~(1 = 0)`])
4047 let K4_CC_WIM = prove_by_refinement(
4048 `!V ul w0 n f i. packing V /\
4050 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
4051 ~collinear {EL 0 ul, EL 1 ul, w0} /\
4053 cc_ke V [EL 1 ul;EL 0 ul;f i] = 4 ==>
4054 cc_cell V [EL 1 ul;EL 0 ul;f i] SUBSET wedge_ge (EL 0 ul) (EL 1 ul) (f (i + n - 1)) (f i)`,
4057 REPEAT WEAKER_STRIP_TAC;
4058 TYPIFY `~(n = 0)` (C SUBGOAL_THEN ASSUME_TAC);
4059 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
4060 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
4061 BY(ASM_MESON_TAC[ LEAF_RANK_PERIODIC]);
4062 INTRO_TAC K4_CC_WI_MINUS [`V`;`ul`;`w0`;`n`;`f`;`i MOD n`];
4063 BY(ASM_SIMP_TAC[DIVISION;FM_DEMOD])
4068 let K3_CC_WI_ALT = prove_by_refinement(
4072 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
4073 ~collinear {EL 0 ul, EL 1 ul, w0} /\
4075 cc_ke V [EL 0 ul; EL 1 ul; f i] = 3
4076 ==> cc_cell V [EL 0 ul; EL 1 ul; f i] SUBSET
4077 wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i))`,
4080 REPEAT WEAKER_STRIP_TAC;
4081 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
4082 BY(ASM_MESON_TAC[ LEAF_RANK_PERIODIC]);
4083 INTRO_TAC CC_CELL_SUBSET_WEDGE [`V`;`ul`;`EL 0 ul`;`EL 1 ul`;`w0`;`n`;`f`;`i`];
4085 DISCH_THEN DISJ_CASES_TAC;
4086 BY(ASM_REWRITE_TAC[]);
4088 TYPIFY `~(n=0)` (C SUBGOAL_THEN ASSUME_TAC);
4089 BY(FIRST_X_ASSUM_ST `1 < n` MP_TAC THEN ARITH_TAC);
4090 TYPIFY `cc_ke V [EL 1 ul;EL 0 ul;f i] = 4` (C SUBGOAL_THEN ASSUME_TAC);
4091 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
4092 REWRITE_TAC[leaf_rank];
4093 REWRITE_TAC[IMAGE;EXTENSION;IN_IMAGE;IN_UNIV;IN_ELIM_THM;s_leaf];
4094 REWRITE_TAC[IN;s_leaf;Bump.EL_EXPLICIT];
4095 BY(ASM_MESON_TAC[arith `~(3 = 4)`]);
4096 INTRO_TAC K4_CC_WIM [`V`;`ul`;`w0`;`n`;`f`;`i`];
4098 BY(ASM_REWRITE_TAC[]);
4100 INTRO_TAC WEDGE_UNIQUE_CC_CELL [`V`;`ul`;`w0`;`n`;`f`;`(i + n - 1) MOD n`;`i`];
4102 BY(ASM_SIMP_TAC[DIVISION]);
4103 ASM_SIMP_TAC[F_DEMOD];
4104 REWRITE_TAC[DE_MORGAN_THM];
4105 TYPIFY `f (SUC (i + n - 1)) = f i` ENOUGH_TO_SHOW_TAC;
4106 DISCH_THEN SUBST1_TAC;
4107 BY(ASM_REWRITE_TAC[]);
4108 MATCH_MP_TAC F_SUC_PRE;
4109 BY(ASM_REWRITE_TAC[])
4114 let K3_CC_WI_ALT = prove_by_refinement(
4118 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
4119 ~collinear {EL 0 ul, EL 1 ul, w0} /\
4121 cc_ke V [EL 0 ul; EL 1 ul; f i] = 3
4122 ==> cc_cell V [EL 0 ul; EL 1 ul; f i] SUBSET
4123 wedge_ge (EL 0 ul) (EL 1 ul) (f i) (f (SUC i))`,
4126 REPEAT WEAKER_STRIP_TAC;
4127 TYPIFY `~(n = 0)` (C SUBGOAL_THEN ASSUME_TAC);
4128 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
4129 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
4130 BY(ASM_MESON_TAC[ LEAF_RANK_PERIODIC]);
4131 INTRO_TAC K3_CC_WI [`V`;`ul`;`w0`;`n`;`f`;`i MOD n`];
4132 BY(ASM_SIMP_TAC[DIVISION;F_DEMOD])
4137 let K3_CC_WIM_ALT = prove_by_refinement(
4141 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
4142 ~collinear {EL 0 ul, EL 1 ul, w0} /\
4144 cc_ke V [EL 1 ul; EL 0 ul; f i] = 3
4145 ==> cc_cell V [EL 1 ul; EL 0 ul; f i] SUBSET
4146 wedge_ge (EL 0 ul) (EL 1 ul) (f (i + n - 1)) (f i)`,
4149 REPEAT WEAKER_STRIP_TAC;
4150 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
4151 BY(ASM_MESON_TAC[ LEAF_RANK_PERIODIC]);
4152 INTRO_TAC CC_CELL_SUBSET_WEDGE [`V`;`ul`;`EL 1 ul`;`EL 0 ul`;`w0`;`n`;`f`;`i`];
4156 MATCH_MP_TAC (TAUT `~a ==> (a \/ b ==> b)`);
4158 TYPIFY `~(n=0)` (C SUBGOAL_THEN ASSUME_TAC);
4159 BY(FIRST_X_ASSUM_ST `1 < n` MP_TAC THEN ARITH_TAC);
4160 TYPIFY `cc_ke V [EL 0 ul;EL 1 ul;f i] = 4` (C SUBGOAL_THEN ASSUME_TAC);
4161 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
4162 REWRITE_TAC[leaf_rank];
4163 REWRITE_TAC[IMAGE;EXTENSION;IN_IMAGE;IN_UNIV;IN_ELIM_THM];
4164 REWRITE_TAC[IN;s_leaf;Bump.EL_EXPLICIT];
4165 BY(ASM_MESON_TAC[arith `~(3 = 4)`]);
4166 INTRO_TAC K4_CC_WI_ALT [`V`;`ul`;`w0`;`n`;`f`;`i`];
4168 BY(ASM_REWRITE_TAC[]);
4170 INTRO_TAC WEDGE_UNIQUE_CC_CELL [`V`;`ul`;`w0`;`n`;`f`;`i`;`i`];
4172 BY(ASM_REWRITE_TAC[]);
4173 BY(ASM_REWRITE_TAC[DE_MORGAN_THM])
4178 let K3_CC_WIM_ALT = prove_by_refinement(
4182 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
4183 ~collinear {EL 0 ul, EL 1 ul, w0} /\
4185 cc_ke V [EL 1 ul; EL 0 ul; f i] = 3
4186 ==> cc_cell V [EL 1 ul; EL 0 ul; f i] SUBSET
4187 wedge_ge (EL 0 ul) (EL 1 ul) (f (i + n - 1)) (f i)`,
4190 REPEAT WEAKER_STRIP_TAC;
4191 TYPIFY `~(n = 0)` (C SUBGOAL_THEN ASSUME_TAC);
4192 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
4193 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
4194 BY(ASM_MESON_TAC[ LEAF_RANK_PERIODIC]);
4195 INTRO_TAC K3_CC_WIM [`V`;`ul`;`w0`;`n`;`f`;`i MOD n`];
4196 BY(ASM_SIMP_TAC[DIVISION;FM_DEMOD])
4201 let NO_4CELL_IMP_K3 = prove_by_refinement(
4205 leaf_rank V [EL 0 ul; EL 1 ul] w0 n f /\
4206 ~collinear {EL 0 ul, EL 1 ul, w0} /\
4207 W = wedge_ge (EL 0 ul) (EL 1 ul) (f i ) (f (SUC i)) /\
4209 ~(?vl. barV V 3 vl /\ {EL 0 ul,EL 1 ul} IN edgeX V (mcell4 V vl) /\ mcell4 V vl SUBSET W) ==>
4210 cc_ke V [EL 1 ul; EL 0 ul; f (SUC i)] = 3 /\
4211 cc_ke V [EL 0 ul;EL 1 ul; f i ] = 3 /\
4212 cc_cell V [EL 0 ul;EL 1 ul;f i] SUBSET W /\
4213 cc_cell V [EL 1 ul;EL 0 ul; f(SUC i)] SUBSET W /\
4214 ~(cc_cell V [EL 0 ul;EL 1 ul;f i ] = cc_cell V [EL 1 ul;EL 0 ul;f (SUC i)])`,
4217 REPEAT WEAKER_STRIP_TAC;
4218 COMMENT "preliminaries";
4219 TYPIFY `!j. leaf V [EL 0 ul; EL 1 ul; f j]` (C SUBGOAL_THEN ASSUME_TAC);
4221 MATCH_MP_TAC s_leaf_leaf;
4223 MATCH_MP_TAC LEAF_RANK_S_LEAF;
4224 BY(ASM_MESON_TAC[LEAF_RANK_TRUNCATE]);
4225 TYPIFY `!j. leaf V [EL 1 ul;EL 0 ul;f j]` (C SUBGOAL_THEN ASSUME_TAC);
4227 INTRO_TAC Leaf_cell.ZASUVOR [`V`;`EL 0 ul`;`EL 1 ul`;`f j`];
4229 BY(ASM_REWRITE_TAC[]);
4230 BY(ASM_MESON_TAC[]);
4231 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
4232 BY(ASM_MESON_TAC[ LEAF_RANK_PERIODIC]);
4233 TYPIFY `{EL 0 ul,EL 1 ul} = {EL 1 ul,EL 0 ul}` (C SUBGOAL_THEN ASSUME_TAC);
4237 INTRO_TAC Leaf_cell.CC_KE_34 [`V`;`[EL 1 ul;EL 0 ul;f(SUC i)]`];
4238 DISCH_THEN DISJ_CASES_TAC;
4239 BY(ASM_REWRITE_TAC[]);
4240 INTRO_TAC K4_CC_WIM [`V`;`ul`;`w0`;`n`;`f`;`SUC i`];
4242 TYPIFY `f (SUC i + n - 1) = f i` (C SUBGOAL_THEN SUBST1_TAC);
4243 MATCH_MP_TAC PERIODIC_EQ_IMAGE;
4244 TYPIFY `n` EXISTS_TAC;
4245 ASM_SIMP_TAC[arith `1 < n ==> ~(n = 0)`;arith `1 < n ==> SUC i + n - 1 = 1 *n + i`];
4246 BY(REWRITE_TAC[MOD_MULT_ADD]);
4247 REWRITE_TAC[arith `~(4 = 3)`];
4249 FIRST_X_ASSUM_ST `?` MP_TAC;
4251 TYPIFY `cc_uh V [EL 1 ul;EL 0 ul;f(SUC i)]` EXISTS_TAC;
4253 BY(ASM_MESON_TAC[Leaf_cell.cc_uh;IN]);
4255 TYPIFY ` mcell4 V (cc_uh V [EL 1 ul;EL 0 ul;f (SUC i)]) = cc_cell V [EL 1 ul;EL 0 ul;f (SUC i)]` (C SUBGOAL_THEN SUBST1_TAC);
4256 BY(ASM_REWRITE_TAC[Leaf_cell.cc_cell;Bump.MCELL4]);
4258 INTRO_TAC Leaf_cell.STEM_EDGEX [`V`;`[EL 1 ul;EL 0 ul;f (SUC i)]`];
4259 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT]);
4263 INTRO_TAC Leaf_cell.CC_KE_34 [`V`;`[EL 0 ul;EL 1 ul;f i]`];
4264 DISCH_THEN DISJ_CASES_TAC;
4265 BY(ASM_REWRITE_TAC[]);
4266 INTRO_TAC K4_CC_WI_ALT [`V`;`ul`;`w0`;`n`;`f`;`i`];
4268 REWRITE_TAC[arith `~(4 = 3)`];
4270 FIRST_X_ASSUM_ST `?` MP_TAC;
4272 TYPIFY `cc_uh V [EL 0 ul;EL 1 ul;f( i)]` EXISTS_TAC;
4274 BY(ASM_MESON_TAC[Leaf_cell.cc_uh;IN]);
4276 TYPIFY ` mcell4 V (cc_uh V [EL 0 ul;EL 1 ul;f ( i)]) = cc_cell V [EL 0 ul;EL 1 ul;f ( i)]` (C SUBGOAL_THEN SUBST1_TAC);
4277 BY(ASM_REWRITE_TAC[Leaf_cell.cc_cell;Bump.MCELL4]);
4279 INTRO_TAC Leaf_cell.STEM_EDGEX [`V`;`[EL 0 ul;EL 1 ul;f ( i)]`];
4280 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT]);
4282 COMMENT "cc_cell3+";
4285 MATCH_MP_TAC K3_CC_WI_ALT;
4286 BY(ASM_MESON_TAC[]);
4287 COMMENT "cc_cell3-";
4290 INTRO_TAC K3_CC_WIM_ALT [`V`;`ul`;`w0`;`n`;`f`;`SUC i`];
4292 TYPIFY `f (SUC i + n - 1) = f i` (C SUBGOAL_THEN SUBST1_TAC);
4293 MATCH_MP_TAC PERIODIC_EQ_IMAGE;
4294 TYPIFY `n` EXISTS_TAC;
4295 BY(ASM_SIMP_TAC[arith `1 < n ==> ~(n =0)`;arith `1 < n ==> SUC i + n - 1 = 1*n + i`;MOD_MULT_ADD]);
4297 COMMENT "inequality";
4299 INTRO_TAC Leaf_cell.FUEIMOV_3 [`V`;`[EL 0 ul;EL 1 ul;f i]`;`[EL 1 ul;EL 0 ul;f (SUC i)]`];
4300 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
4301 REWRITE_TAC[CONS_11];
4302 BY(ASM_MESON_TAC[Collect_geom.NOT_COLLINEAR_IMP_2_UNEQUAL])
4306 let JSPEVYT_EXPLICIT = prove_by_refinement(
4307 `!(u0:real^3) u1 u2.
4308 pack_nonlinear_non_ox3q1h /\
4309 ~collinear {u0,u1,u2} /\
4310 hl [u0;u1;u2] <= #1.34 /\ &2 * hminus <= dist(u0,u1) /\ &2 <= dist (u0,u2) ==>
4311 dist(u1,u2) < &2 * hminus`,
4314 REWRITE_TAC[Pack_defs.HL;set_of_list];
4315 REPEAT WEAKER_STRIP_TAC;
4316 FIRST_X_ASSUM_ST `radV` MP_TAC;
4317 ASM_SIMP_TAC[RADV_ETAY];
4319 INTRO_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "JSPEVYT") [`&1`;`&1`;`&1`;`dist(u0,u1)`;`dist(u1,u2)`;`dist(u0,u2)`];
4320 REWRITE_TAC[Sphere.ineq;arith `&1 <= &1`];
4321 REPEAT WEAKER_STRIP_TAC;
4322 TYPIFY `~affine_dependent {u0,u1,u2}` (C SUBGOAL_THEN ASSUME_TAC);
4323 BY(ASM_MESON_TAC[AFFINE_DEPENDENT_IMP_COLLINEAR_3]);
4324 INTRO_TAC Rogers.RADV_MONO [`{u0,u1,u2}`;`{u0,u1}`];
4325 INTRO_TAC Rogers.RADV_MONO [`{u0,u1,u2}`;`{u0,u2}`];
4326 INTRO_TAC Rogers.RADV_MONO [`{u0,u1,u2}`;`{u1,u2}`];
4327 ASM_SIMP_TAC[RADV_ETAY];
4329 REPEAT (ANTS_TAC THENL [SET_TAC[];DISCH_TAC]);
4330 TYPIFY `&0 <= ups_x (dist (u0,u1) pow 2) (dist (u1,u2) pow 2) (dist (u0,u2) pow 2)` (C SUBGOAL_THEN MP_TAC);
4331 BY(REWRITE_TAC[Collect_geom.TROI_OI_DAT_HOI]);
4332 REWRITE_TAC[REAL_POW_2];
4334 REWRITE_TAC[arith `x < y <=> ~(y <= x)`];
4336 FIRST_X_ASSUM_ST `#1.34` MP_TAC;
4337 TYPIFY `eta_y (dist (u0,u1)) (dist (u1,u2)) (dist (u0,u2)) = eta_y (dist (u0,u1)) (dist (u0,u2)) (dist (u1,u2))` (C SUBGOAL_THEN SUBST1_TAC);
4338 BY(ASM_MESON_TAC[Collect_geom.ETA_Y_SYM]);
4339 INTRO_TAC Merge_ineq.eta_y_nn [`dist(u0,u1)`;`dist(u0,u2)`;`dist(u1,u2)`];
4341 BY(ASM_MESON_TAC[Collect_geom.UPS_X_SYM]);
4343 TYPED_ABBREV_TAC `(eta:real) = eta_y (dist (u0,u1)) (dist (u0,u2)) (dist (u1,u2))` ;
4345 TYPIFY `!x. inv (&2) * x <= eta ==> x <= sqrt8` (C SUBGOAL_THEN (unlist ASM_SIMP_TAC));
4347 FIRST_X_ASSUM_ST `#1.34` MP_TAC;
4348 MP_TAC Flyspeck_constants.bounds;
4350 MATCH_MP_TAC (arith `x <= y ==> ~(x > y)`);
4351 MATCH_MP_TAC Collect_geom2.POS_IMP_POW2;
4352 BY(ASM_REWRITE_TAC[])
4356 let CELL_CLUSTER_ESTIMATE_REDUCE = prove_by_refinement(
4357 `!V. packing V /\ saturated V /\
4358 (!u0 u1. ~(u0 = u1) /\ hminus <= hl [u0;u1] /\ hl [u0;u1] <= hplus ==>
4359 &0 <= sum {X | {u0,u1} IN edgeX V X /\ mcell_set V X}
4360 (\X. gammaX V X lmfun * critical_weight V X + beta_bump_v1 V {u0,u1} X))
4361 ==> cell_cluster_estimate_v1 V`,
4364 REPEAT WEAKER_STRIP_TAC;
4365 REWRITE_TAC[Pack_defs.cell_cluster_estimate_v1;Pack_defs.cluster_gamma_v1;Pack_defs.cell_cluster];
4367 TYPIFY `{X | e IN critical_edgeX V X /\ mcell_set V X} = {}` ASM_CASES_TAC;
4368 ASM_REWRITE_TAC[SUM_CLAUSES];
4370 FIRST_X_ASSUM (MP_TAC o (REWRITE_RULE[EXTENSION;NOT_IN_EMPTY;IN_ELIM_THM;NOT_FORALL_THM]));
4371 DISCH_THEN (MP_TAC o (REWRITE_RULE[Pack_defs.critical_edgeX;IN_ELIM_THM]));
4372 REPEAT WEAKER_STRIP_TAC;
4373 TYPIFY `u = v` ASM_CASES_TAC;
4375 FIRST_X_ASSUM (MP_TAC o (MATCH_MP Bump.EDGE_MCELL_EL));
4376 REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
4379 FIRST_X_ASSUM (C INTRO_TAC [`u`;`v`]);
4380 ASM_REWRITE_TAC[arith `x >= &0 <=> &0 <= x`];
4381 TYPIFY `!X. {u, v} IN critical_edgeX V X <=> {u,v} IN edgeX V X` (C SUBGOAL_THEN (unlist REWRITE_TAC));
4382 REWRITE_TAC[Pack_defs.critical_edgeX;IN_ELIM_THM];
4387 let cc_card_data = prove_by_refinement(
4388 `!V f u0 u1. cc_card_v11 (cc_data_v8 V f u0 u1) = CARD(s_leaf V [u0;u1])`,
4391 BY(REWRITE_TAC[Oxl_def.cc_card_v11;cc_data_v8;Oxl_def.cc_v11])
4395 let cc_real_data = prove_by_refinement(
4396 `!V f u0 u1. cc_azim_v11 (cc_data_v8 V f u0 u1) = azim_mcell V f u0 u1 /\
4397 cc_gg_v11 (cc_data_v8 V f u0 u1) = gg_mcell V f u0 u1 /\
4398 cc_gg3a_v11 (cc_data_v8 V f u0 u1) = (\i. gammaX V (cc_cell V [u0;u1;f i]) lmfun * critical_weight V (cc_cell V [u0;u1;f i])) /\
4399 cc_gg3b_v11 (cc_data_v8 V f u0 u1) = (\i. gammaX V (cc_cell V [u1;u0;f(SUC i)]) lmfun * critical_weight V (cc_cell V [u1;u0;f (SUC i)]))`,
4402 BY(REWRITE_TAC[FUN_EQ_THM;Oxl_def.cc_azim_v11;Oxl_def.cc_gg_v11;Oxl_def.cc_gg3a_v11;Oxl_def.cc_gg3b_v11;Oxl_def.cc_real_v11;cc_data_v8;Oxl_def.cc_v11;Bump.EL_EXPLICIT])
4406 let cc_bool_data = prove_by_refinement(
4407 `!V f u0 u1. cc_subcrit_v11 (cc_data_v8 V f u0 u1) = (\i. dist(f i,f(SUC i)) < &2 * hminus)
4409 cc_crit_v11 (cc_data_v8 V f u0 u1) = (\i. &2 * hminus <= dist (f i, f (SUC i)) /\ dist (f i,f(SUC i)) <= &2 *hplus) /\
4410 cc_supercrit_v11 (cc_data_v8 V f u0 u1) = (\i. &2 *hplus < dist (f i, f(SUC i))) /\
4411 cc_small_v11 (cc_data_v8 V f u0 u1) = (\i. dist(u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
4412 cc_small_eta_v11 (cc_data_v8 V f u0 u1) = (\i. hl [u0;u1;f i] < #1.34) /\
4413 cc_4cell_v11 (cc_data_v8 V f u0 u1) =
4414 (\i. ?ul. barV V 3 ul /\ {u0,u1} IN edgeX V (mcell4 V ul) /\ mcell4 V ul SUBSET (wedge_ge u0 u1 (f i) (f (SUC i))))
4418 BY(REWRITE_TAC[FUN_EQ_THM;Oxl_def.cc_subcrit_v11;Oxl_def.cc_crit_v11;Oxl_def.cc_supercrit_v11;Oxl_def.cc_small_v11;Oxl_def.cc_small_eta_v11;Oxl_def.cc_4cell_v11;Oxl_def.cc_bool_v11;cc_data_v8;Oxl_def.cc_v11;Bump.EL_EXPLICIT])
4422 let cc_bool_model_data = prove_by_refinement(
4424 pack_nonlinear_non_ox3q1h /\
4426 packing V /\ saturated V /\ s_leaf V [u0;u1] HAS_SIZE n /\
4427 u0 IN V /\ u1 IN V /\
4428 ~collinear {u0, u1, w0 } /\
4429 critical_edge_y (dist(u0,u1)) /\
4430 leaf_rank V [u0;u1] w0 n f ==>
4431 cc_bool_model_v11 (cc_data_v8 V f u0 u1)`,
4434 REWRITE_TAC[Oxl_def.cc_bool_model_v11;cc_card_data];
4435 REWRITE_TAC[HAS_SIZE];
4436 REPEAT WEAKER_STRIP_TAC;
4439 BY(ASM_SIMP_TAC[arith `1 < n==> ~(n = 0)`]);
4440 TYPIFY `(!i. ~(cc_crit_v11 (cc_data_v8 V f u0 u1) i /\ cc_supercrit_v11 (cc_data_v8 V f u0 u1) i)) /\ (!i. ~(cc_crit_v11 (cc_data_v8 V f u0 u1) i /\ cc_subcrit_v11 (cc_data_v8 V f u0 u1) i)) /\ (!i. ~(cc_supercrit_v11 (cc_data_v8 V f u0 u1) i /\ cc_subcrit_v11 (cc_data_v8 V f u0 u1) i))` (C SUBGOAL_THEN (unlist REWRITE_TAC));
4441 REWRITE_TAC[cc_bool_data];
4442 INTRO_TAC Merge_ineq.hminus_lt_hplus [];
4444 TYPIFY `periodic (cc_subcrit_v11 (cc_data_v8 V f u0 u1)) n /\ periodic (cc_crit_v11 (cc_data_v8 V f u0 u1)) n /\ periodic (cc_supercrit_v11 (cc_data_v8 V f u0 u1)) n /\ periodic (cc_small_v11 (cc_data_v8 V f u0 u1)) n /\ periodic (cc_small_eta_v11 (cc_data_v8 V f u0 u1)) n /\ periodic (cc_4cell_v11 (cc_data_v8 V f u0 u1)) n` (C SUBGOAL_THEN (unlist REWRITE_TAC));
4445 REWRITE_TAC[Oxl_def.periodic;cc_bool_data;cc_real_data];
4446 REWRITE_TAC[arith `!i. SUC(i + n) = SUC i + n`];
4447 INTRO_TAC LEAF_RANK_PERIODIC [`V`;`[u0;u1]`;`w0`;`n`;`f`];
4449 BY(ASM_REWRITE_TAC[]);
4450 REWRITE_TAC[Oxl_def.periodic];
4453 REPEAT WEAKER_STRIP_TAC;
4454 REWRITE_TAC[cc_bool_data];
4456 REWRITE_TAC[cc_bool_data];
4457 REPEAT WEAKER_STRIP_TAC;
4458 TYPIFY `f i IN s_leaf V [u0;u1]` (C SUBGOAL_THEN MP_TAC);
4459 FIRST_X_ASSUM_ST `leaf_rank` MP_TAC;
4460 REWRITE_TAC[leaf_rank;EXTENSION;IN_IMAGE;IN_UNIV];
4462 REWRITE_TAC[IN;s_leaf;Bump.EL_EXPLICIT];
4463 REPEAT WEAKER_STRIP_TAC;
4464 TYPIFY `f i IN V` (C SUBGOAL_THEN ASSUME_TAC);
4465 FIRST_X_ASSUM_ST `leaf` MP_TAC;
4466 REWRITE_TAC[Leaf_cell.leaf;IN];
4467 REPEAT WEAKER_STRIP_TAC;
4468 FIRST_X_ASSUM (MP_TAC o (MATCH_MP Packing3.BARV_SUBSET));
4469 REWRITE_TAC[set_of_list;SUBSET;IN_INSERT;NOT_IN_EMPTY];
4471 TYPIFY `~collinear {u0,u1,f i}` (C SUBGOAL_THEN ASSUME_TAC);
4472 INTRO_TAC Leaf_cell.GBEWYFX [`V`;`[u0;u1;f i]`];
4473 BY(ASM_REWRITE_TAC[set_of_list]);
4474 COMMENT "symmetry reduction";
4475 TYPIFY `!v0 v1 ff. v0 IN V /\ v1 IN V /\ ~collinear {v0,v1,ff} /\ ff IN V /\ critical_edge_y( dist(v0,v1)) /\ dist(v0,ff) <= dist(v1,ff) /\ hl [v0;v1;ff] < #1.34 ==> dist(v1,ff) < &2 * hminus` ENOUGH_TO_SHOW_TAC;
4477 TYPIFY `dist(u0,f i) <= dist(u1,f i)` ASM_CASES_TAC;
4478 FIRST_X_ASSUM (C INTRO_TAC [`u0`;`u1`;`f i`]);
4480 BY(ASM_REWRITE_TAC[]);
4481 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC);
4482 COMMENT "second half of symmetry reduction";
4483 FIRST_X_ASSUM (ASSUME_TAC o (MATCH_MP (arith `~(x <= y) ==> (y <= x)`)));
4484 FIRST_X_ASSUM (C INTRO_TAC [`u1`;`u0`;`f i`]);
4488 TYPIFY `{u1,u0,f i} = {u0,u1,f i}` (C SUBGOAL_THEN SUBST1_TAC);
4490 BY(ASM_REWRITE_TAC[]);
4492 BY(ASM_MESON_TAC[DIST_SYM]);
4493 FIRST_X_ASSUM_ST `hl` MP_TAC;
4494 REWRITE_TAC[Pack_defs.HL;set_of_list];
4495 TYPIFY `{u0,u1,f i } = {u1,u0, f i}` (C SUBGOAL_THEN SUBST1_TAC);
4498 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC);
4499 COMMENT "symmetry reduction complete";
4500 REPEAT WEAKER_STRIP_TAC;
4501 MATCH_MP_TAC JSPEVYT_EXPLICIT;
4502 TYPIFY `v0` EXISTS_TAC;
4503 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
4505 FIRST_X_ASSUM_ST `critical_edge_y` MP_TAC;
4506 REWRITE_TAC[Sphere.critical_edge_y];
4508 TYPIFY `~(v0 = ff)` (C SUBGOAL_THEN ASSUME_TAC);
4509 BY(ASM_MESON_TAC[Collect_geom.NOT_COLLINEAR_IMP_2_UNEQUAL]);
4510 FIRST_X_ASSUM_ST `packing` MP_TAC;
4511 REWRITE_TAC[Sphere.packing];
4512 DISCH_THEN MATCH_MP_TAC;
4513 BY(ASM_MESON_TAC[IN])
4517 let cc_prep_model_data = prove_by_refinement(
4520 packing V /\ saturated V /\
4521 ~collinear {u0, u1, w0 } /\
4522 leaf_rank V [u0;u1] w0 n f ==>
4523 cc_bool_prep_v11 (cc_data_v8 V f u0 u1)`,
4526 REPEAT WEAKER_STRIP_TAC;
4527 REWRITE_TAC[Oxl_def.cc_bool_prep_v11;Oxl_def.cc_qy_v11;cc_bool_data];
4528 REPEAT WEAKER_STRIP_TAC;
4529 TYPIFY `periodic f n` (C SUBGOAL_THEN ASSUME_TAC);
4530 BY(ASM_MESON_TAC[ LEAF_RANK_PERIODIC]);
4531 TYPIFY `~(n = 0)` (C SUBGOAL_THEN ASSUME_TAC);
4532 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
4533 TYPIFY `cc_uh V [u0;u1;f (i + 1)]` EXISTS_TAC;
4534 TYPIFY `!j. leaf V [u0; u1; f j]` (C SUBGOAL_THEN ASSUME_TAC);
4536 INTRO_TAC s_leaf_leaf[`V`;`[u0;u1]`;`f j`];
4537 REWRITE_TAC[Bump.EL_EXPLICIT];
4538 DISCH_THEN MATCH_MP_TAC;
4540 MATCH_MP_TAC LEAF_RANK_S_LEAF;
4541 BY(ASM_MESON_TAC[LEAF_RANK_TRUNCATE]);
4543 BY(ASM_MESON_TAC[Leaf_cell.cc_uh;IN]);
4545 FIRST_X_ASSUM_ST `?` (MP_TAC o (REWRITE_RULE[NOT_EXISTS_THM]));
4547 INTRO_TAC Leaf_cell.CC_KE_34 [`V`;`[u0;u1;f(i+1)]`];
4548 DISCH_THEN (MP_TAC o (MATCH_MP (TAUT `a \/ b ==> b \/ a`)));
4549 DISCH_THEN DISJ_CASES_TAC;
4550 TYPIFY `mcell4 V (cc_uh V [u0;u1;f(i+1)]) = cc_cell V [u0;u1;f (i + 1)]` (C SUBGOAL_THEN SUBST1_TAC);
4551 BY(ASM_REWRITE_TAC[Leaf_cell.cc_cell;Bump.MCELL4]);
4552 INTRO_TAC Leaf_cell.EL_CC_UH [`V`;`[u0;u1;f (i+1)]`];
4554 REWRITE_TAC[Bump.EL_EXPLICIT];
4555 REPEAT WEAKER_STRIP_TAC;
4557 INTRO_TAC Leaf_cell.STEM_EDGEX [`V`;`[u0;u1;f(i+1)]`];
4558 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT]);
4560 INTRO_TAC K4_CC_WI_ALT [`V`;`[u0;u1]`;`w0`;`n`;`f`;`i+1`];
4561 REWRITE_TAC[Bump.EL_EXPLICIT];
4562 BY(ASM_REWRITE_TAC[]);
4564 TYPIFY `cc_ke V [u1;u0;f (i+1)] = 4` (C SUBGOAL_THEN ASSUME_TAC);
4565 TYPIFY `s_leaf V [u0;u1] (f(i+1))` (C SUBGOAL_THEN MP_TAC);
4566 BY(ASM_MESON_TAC[LEAF_RANK_S_LEAF]);
4567 GMATCH_SIMP_TAC S_LEAF_SYM;
4569 REWRITE_TAC[s_leaf;Bump.EL_EXPLICIT];
4570 BY(ASM_MESON_TAC[arith `~(3=4)`]);
4571 INTRO_TAC K4_CC_WIM [`V`;`[u0;u1]`;`w0`;`n`;`f`;`i+1`];
4572 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
4573 TYPIFY `wedge_ge u0 u1 (f ((i + 1) + n - 1)) (f (i + 1)) = wedge_ge u0 u1 (f i) (f (SUC i))` (C SUBGOAL_THEN SUBST1_TAC);
4574 REWRITE_TAC[arith `i + 1 = SUC i`];
4575 ASM_SIMP_TAC[arith `1 < n ==> SUC i + n - 1 = 1*n + i`];
4576 TYPIFY `f (1 * n + i) = f i` ENOUGH_TO_SHOW_TAC;
4578 MATCH_MP_TAC PERIODIC_EQ_IMAGE;
4579 TYPIFY `n` EXISTS_TAC;
4580 BY(ASM_REWRITE_TAC[MOD_MULT_ADD]);
4581 FIRST_X_ASSUM (C INTRO_TAC [`cc_uh V [u1;u0;f (i+1)]`]);
4582 TYPIFY `mcell4 V (cc_uh V [u1; u0; f (i + 1)]) = cc_cell V [u1; u0; f (i + 1)]` (C SUBGOAL_THEN SUBST1_TAC);
4583 BY(ASM_REWRITE_TAC[Leaf_cell.cc_cell;Bump.MCELL4]);
4584 REPEAT WEAKER_STRIP_TAC;
4586 FIRST_X_ASSUM_ST `barV` MP_TAC;
4588 TYPIFY `leaf V [u1;u0;f (i+1)]` (C SUBGOAL_THEN ASSUME_TAC);
4589 INTRO_TAC Leaf_cell.ZASUVOR [`V`;`u0`;`u1`;`f (i+1)`];
4591 BY(ASM_REWRITE_TAC[]);
4594 BY(ASM_MESON_TAC[Leaf_cell.cc_uh;IN]);
4595 INTRO_TAC Leaf_cell.STEM_EDGEX [`V`;`[u1;u0;f(i+1)]`];
4597 BY(ASM_REWRITE_TAC[]);
4598 REWRITE_TAC[Bump.EL_EXPLICIT];
4599 TYPIFY `{u1,u0} = {u0,u1}` (C SUBGOAL_THEN SUBST1_TAC);
4605 let LEAF_DOMAIN = prove_by_refinement(
4606 `!V ul. saturated V /\
4609 ~collinear {EL 0 ul,EL 1 ul,EL 2 ul} /\
4610 &2 <= dist (EL 1 ul,EL 2 ul) /\
4611 &2 <= dist (EL 0 ul,EL 2 ul) /\
4612 &2 <= dist (EL 0 ul,EL 1 ul) /\
4613 dist (EL 1 ul,EL 2 ul) < &2 * sqrt (&2) /\
4614 dist (EL 0 ul,EL 2 ul) < &2 * sqrt (&2) /\
4615 dist (EL 0 ul,EL 1 ul) < &2 * sqrt (&2) /\
4616 eta_y (dist (EL 0 ul,EL 1 ul)) (dist (EL 0 ul,EL 2 ul))
4617 (dist (EL 1 ul,EL 2 ul)) <
4621 REPEAT WEAKER_STRIP_TAC;
4622 TYPIFY `barV V 2 ul` (C SUBGOAL_THEN ASSUME_TAC);
4623 FIRST_X_ASSUM MP_TAC;
4624 REWRITE_TAC[Leaf_cell.leaf;IN];
4626 TYPIFY `ul = [EL 0 ul;EL 1 ul;EL 2 ul]` (C SUBGOAL_THEN ASSUME_TAC);
4627 MATCH_MP_TAC Bump.LENGTH3;
4628 REWRITE_TAC[arith `3 = 2 + 1`] THEN MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA;
4629 BY(ASM_MESON_TAC[]);
4630 TYPIFY `truncate_simplex 2 ul = ul` (C SUBGOAL_THEN ASSUME_TAC);
4631 FIRST_X_ASSUM SUBST1_TAC;
4632 BY(REWRITE_TAC[Marchal_cells.TRUNCATE_SIMPLEX_EXPLICIT_2]);
4633 GMATCH_SIMP_TAC (GSYM RADV_ETAY);
4634 TYPIFY `hl ( ul) < sqrt(&2)` (C SUBGOAL_THEN ASSUME_TAC);
4635 FIRST_X_ASSUM_ST `leaf` MP_TAC;
4636 REWRITE_TAC[Leaf_cell.leaf];
4637 BY(MESON_TAC[Sphere.sqrt2]);
4638 COMMENT "deal with radV";
4639 TYPIFY `radV {EL 0 ul, EL 1 ul, EL 2 ul} < sqrt (&2)` (C SUBGOAL_THEN ASSUME_TAC);
4640 (FIRST_X_ASSUM_ST `hl` MP_TAC THEN ASM_REWRITE_TAC[Pack_defs.HL;set_of_list]);
4641 BY(FIRST_X_ASSUM_ST `EL` SUBST1_TAC THEN REWRITE_TAC[set_of_list;Bump.EL_EXPLICIT]);
4642 TYPIFY `~collinear {EL 0 ul,EL 1 ul,EL 2 ul}` (C SUBGOAL_THEN ASSUME_TAC);
4643 INTRO_TAC Leaf_cell.GBEWYFX [`V`;`ul`];
4644 FIRST_ASSUM_ST `CONS (EL 0 ul)` SUBST1_TAC;
4645 REWRITE_TAC[Bump.EL_EXPLICIT;set_of_list];
4646 DISCH_THEN MATCH_MP_TAC;
4647 BY(ASM_MESON_TAC[]);
4649 TYPIFY `~affine_dependent {EL 0 ul,EL 1 ul,EL 2 ul}` (C SUBGOAL_THEN ASSUME_TAC);
4650 BY(ASM_MESON_TAC[AFFINE_DEPENDENT_IMP_COLLINEAR_3]);
4651 TYPIFY `!x y. {x,y} SUBSET {EL 0 ul,EL 1 ul,EL 2 ul} ==> dist(x,y) < &2 * sqrt(&2)` (C SUBGOAL_THEN ASSUME_TAC);
4652 REPEAT WEAKER_STRIP_TAC;
4653 REWRITE_TAC[arith `x < &2 * y <=> inv(&2) * x < y`];
4654 REWRITE_TAC[GSYM RADV2];
4655 MATCH_MP_TAC REAL_LET_TRANS;
4656 TYPIFY `radV {EL 0 ul, EL 1 ul, EL 2 ul}` EXISTS_TAC;
4658 MATCH_MP_TAC Rogers.RADV_MONO;
4659 ASM_REWRITE_TAC[EXTENSION;IN_INSERT;NOT_IN_EMPTY];
4661 INTRO_TAC Packing3.BARV_SUBSET [`V`;`2`;`ul`];
4664 TYPIFY `set_of_list ul = {EL 0 ul,EL 1 ul,EL 2 ul}` (C SUBGOAL_THEN ASSUME_TAC);
4665 FIRST_ASSUM_ST `CONS (EL 0 ul)` SUBST1_TAC;
4666 BY(REWRITE_TAC[Bump.EL_EXPLICIT;set_of_list]);
4667 TYPIFY `~(EL 0 ul = EL 1 ul) /\ ~(EL 1 ul = EL 2 ul) /\ ~(EL 0 ul = EL 2 ul)` (C SUBGOAL_THEN ASSUME_TAC);
4668 TYPIFY `{EL 0 ul,EL 1 ul, EL 2 ul} = {EL 1 ul,EL 2 ul,EL 0 ul}` (C SUBGOAL_THEN ASSUME_TAC);
4670 BY(ASM_MESON_TAC[Collect_geom.NOT_COLLINEAR_IMP_2_UNEQUAL]);
4671 TYPIFY `&2 <= dist (EL 1 ul,EL 2 ul) /\ &2 <= dist (EL 0 ul,EL 2 ul) /\ &2 <= dist (EL 0 ul,EL 1 ul)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
4672 FIRST_X_ASSUM_ST `packing` MP_TAC;
4673 REWRITE_TAC[Sphere.packing];
4674 FIRST_X_ASSUM_ST `SUBSET` MP_TAC;
4675 ASM_REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY];
4677 BY(ASM_MESON_TAC[]);
4678 BY(REPEAT (CONJ_TAC THEN (TRY (FIRST_X_ASSUM MATCH_MP_TAC))) THEN SET_TAC[])
4682 let CELL_CLUSTER_N_LE_1 = prove_by_refinement(
4683 `!V u0 u1. pack_nonlinear_non_ox3q1h /\ packing V /\ saturated V /\ hminus <= hl [u0; u1] /\
4684 hl [u0; u1] <= hplus /\ CARD(s_leaf V [u0;u1]) <= 1 ==>
4685 &0 <= sum {X | {u0, u1} IN edgeX V X /\ mcell_set V X}
4686 (\X. gammaX V X lmfun * critical_weight V X +
4687 beta_bump_v1 V {u0, u1} X)`,
4690 REPEAT WEAKER_STRIP_TAC;
4691 TYPIFY `?ul. {u0,u1} IN edgeX V (mcell4 V ul) /\ barV V 3 ul` ASM_CASES_TAC;
4692 FIRST_X_ASSUM MP_TAC;
4693 REPEAT WEAKER_STRIP_TAC;
4694 INTRO_TAC Leaf_cell.MCELL4_EDGE_FIRST [`V`;`ul`;`u0`;`u1`];
4696 BY(ASM_REWRITE_TAC[IN]);
4697 REPEAT WEAKER_STRIP_TAC;
4698 INTRO_TAC S_LEAF_CARD2 [`V`;`vl`];
4702 BY(ASM_MESON_TAC[IN]);
4703 FIRST_X_ASSUM (SUBST1_TAC o GSYM);
4704 REWRITE_TAC[Bump.MCELL4];
4705 DISCH_THEN (MP_TAC o (MATCH_MP Bump.RIJRIED));
4706 REWRITE_TAC[EXTENSION;NOT_IN_EMPTY];
4707 BY(ASM_MESON_TAC[Bump.MCELL4]);
4708 FIRST_X_ASSUM_ST `CARD` MP_TAC;
4711 COMMENT "now sum over 0--3 sums and use positivity.";
4712 MATCH_MP_TAC SUM_POS_LE;
4715 ONCE_REWRITE_TAC[TAUT `!a b. a /\ b <=> b /\ a`];
4716 MATCH_MP_TAC Marchal_cells_3.FINITE_EDGE_X2;
4717 BY(ASM_MESON_TAC[]);
4718 REWRITE_TAC[IN_ELIM_THM;Qzyzmjc.mcell_set_2];
4719 REPEAT WEAKER_STRIP_TAC;
4720 FIRST_X_ASSUM_ST `edgeX` MP_TAC;
4721 FIRST_X_ASSUM_ST `mcell` SUBST1_TAC;
4722 REPEAT WEAKER_STRIP_TAC;
4723 FIRST_X_ASSUM_ST `i <= 4` MP_TAC;
4724 REWRITE_TAC[arith `i <= 4 <=> (i <= 1) \/ (i = 4) \/ (i = 2) \/ (i = 3)`];
4725 DISCH_THEN DISJ_CASES_TAC;
4726 BY(ASM_MESON_TAC[Bump.EDGE_IMP_K2;NOT_IN_EMPTY;IN]);
4727 FIRST_X_ASSUM DISJ_CASES_TAC;
4728 BY(ASM_MESON_TAC[IN;Bump.MCELL4]);
4729 REWRITE_TAC[arith `&0 <= x <=> x >= &0`];
4730 MATCH_MP_TAC GAMMAX_NO_BETA;
4731 GEXISTL_TAC [`ul`;`i`];
4732 ASM_SIMP_TAC[arith `i = 2 \/ i = 3 ==> i < 4`];
4734 BY(ASM_MESON_TAC[IN]);
4736 BY(ASM_MESON_TAC[Bump.RIJRIED;NOT_IN_EMPTY]);
4738 REWRITE_TAC[Pack_defs.critical_edgeX;IN_ELIM_THM];
4739 BY(ASM_MESON_TAC[]);
4740 FIRST_X_ASSUM DISJ_CASES_TAC;
4741 MATCH_MP_TAC Tskajxy.TSKAJXY_2;
4742 BY(ASM_MESON_TAC[IN;Bump.MCELL2]);
4743 TYPIFY `~NULLSET (mcell 3 V ul)` (C SUBGOAL_THEN ASSUME_TAC);
4744 BY(ASM_MESON_TAC[Bump.RIJRIED;NOT_IN_EMPTY]);
4745 MATCH_MP_TAC TSKAJXY_3;
4746 BY(ASM_MESON_TAC[IN;Bump.MCELL3])
4750 let RAD_PI_IMP_WEDGE4 = prove_by_refinement(
4753 packing V /\ saturated V /\
4754 ~collinear {u0, u1, w0 } /\
4755 leaf_rank V [u0;u1] w0 n f /\
4756 azim u0 u1 (f i) (f (SUC i)) < pi /\
4757 radV {u0,u1,f i,f (SUC i)} < sqrt(&2) ==>
4758 (?ul. mcell4 V ul SUBSET wedge_ge u0 u1 (f i) (f (SUC i)) /\
4760 {u0,u1} IN edgeX V (mcell4 V ul))`,
4763 REPEAT WEAKER_STRIP_TAC;
4764 TYPIFY `~coplanar {u0,u1,f i , f (SUC i)}` (C SUBGOAL_THEN ASSUME_TAC);
4765 REWRITE_TAC[ (GSYM Local_lemmas1.AZIM_COND_FOR_COPLANAR)];
4766 DISCH_THEN DISJ_CASES_TAC;
4767 INTRO_TAC LEAF_RANK_AZIM_INJ [`V`;`[u0;u1]`;`w0`;`n`;`f`;`i`;`SUC i`];
4768 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
4769 ASM_SIMP_TAC[arith `1 < n ==> ~(n = 0)`;arith `SUC i = i + 1`];
4770 BY(ASM_MESON_TAC[ MOD_INJ1_ALT;arith `1 < n ==> ~(n = 0) /\ ~(1 = 0)`]);
4771 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
4772 TYPIFY `!j. leaf V [u0; u1; f j]` (C SUBGOAL_THEN ASSUME_TAC);
4774 INTRO_TAC s_leaf_leaf[`V`;`[u0;u1]`;`f j`];
4775 REWRITE_TAC[Bump.EL_EXPLICIT];
4776 DISCH_THEN MATCH_MP_TAC;
4778 MATCH_MP_TAC LEAF_RANK_S_LEAF;
4779 BY(ASM_MESON_TAC[LEAF_RANK_TRUNCATE]);
4780 INTRO_TAC HL_IMP_BARV [`V`;`[u0;u1;f i;f (SUC i)]`];
4782 ASM_REWRITE_TAC[set_of_list];
4783 REWRITE_TAC[LENGTH;arith `SUC(SUC(SUC(SUC 0))) = 4`];
4784 TYPIFY `set_of_list [u0;u1;f i] SUBSET V` (C SUBGOAL_THEN MP_TAC);
4785 MATCH_MP_TAC Packing3.BARV_SUBSET;
4786 TYPIFY `2` EXISTS_TAC;
4787 FIRST_X_ASSUM (C INTRO_TAC [`i`]);
4788 REWRITE_TAC[Leaf_cell.leaf;IN];
4790 TYPIFY `set_of_list [u0;u1;f (SUC i)] SUBSET V` (C SUBGOAL_THEN MP_TAC);
4791 MATCH_MP_TAC Packing3.BARV_SUBSET;
4792 TYPIFY `2` EXISTS_TAC;
4793 FIRST_X_ASSUM (C INTRO_TAC [`SUC i`]);
4794 REWRITE_TAC[Leaf_cell.leaf;IN];
4796 REWRITE_TAC[set_of_list;SUBSET;IN_INSERT;NOT_IN_EMPTY];
4797 REPEAT WEAKER_STRIP_TAC;
4799 BY(ASM_MESON_TAC[]);
4801 BY(ASM_REWRITE_TAC[Pack_defs.HL;set_of_list]);
4802 REWRITE_TAC[Marchal_cells.TRUNCATE_SIMPLEX_EXPLICIT_2];
4803 FIRST_X_ASSUM (C INTRO_TAC [`i`]);
4804 REWRITE_TAC[Leaf_cell.leaf];
4807 COMMENT "now pick ul";
4808 TYPIFY `[u0;u1;f i;f(SUC i)]` EXISTS_TAC;
4809 TYPIFY `~NULLSET (mcell4 V [u0; u1; f i; f (SUC i)])` (C SUBGOAL_THEN ASSUME_TAC);
4810 ASM_REWRITE_TAC[Pack_defs.mcell4;Pack_defs.HL;set_of_list];
4811 FIRST_X_ASSUM (MP_TAC o (MATCH_MP Leaf_cell.ZWVCBMN));
4812 BY(MESON_TAC[Vol1.VOLUME_PROPS_NULLSET;arith `x = &0 ==> ~(&0 < x)`]);
4815 GMATCH_SIMP_TAC Bump.MCELL4_EDGE;
4817 BY(ASM_REWRITE_TAC[]);
4819 REWRITE_TAC[set_of_list];
4821 BY(ASM_MESON_TAC[Collect_geom.NOT_COLLINEAR_IMP_2_UNEQUAL]);
4822 (COMMENT "now place it in wedge");
4823 GMATCH_SIMP_TAC MCELL4_CONVEX_HULL;
4824 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
4825 GMATCH_SIMP_TAC Local_lemmas.WEDGE_GE_EQ_AFF_GE;
4827 INTRO_TAC LEAF_RANK_COLLINEAR [`V`;`[u0;u1]`;`w0`;`n`;`f`];
4828 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
4831 BY(REWRITE_TAC[Marchal_cells_2_new.CONVEX_HULL_4_SUBSET_AFF_GE_2_2])
4835 let LEAF_RANK_SUC_INJ = prove_by_refinement(
4839 leaf_rank V [u0;u1] w0 n f /\
4840 ~collinear {u0,u1,w0} /\
4842 ~(f i = f (SUC i))`,
4845 REPEAT WEAKER_STRIP_TAC;
4846 INTRO_TAC LEAF_RANK_AZIM_INJ [`V`;`[u0;u1]`;`w0`;`n`;`f`;`i`;`SUC i`];
4847 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
4848 ASM_SIMP_TAC[arith `1 < n ==> ~(n = 0)`;arith `SUC i = i + 1`];
4849 REWRITE_TAC[AZIM_REFL];
4850 BY(ASM_MESON_TAC[ MOD_INJ1_ALT;arith `1 < n ==> ~(n = 0) /\ ~(1 = 0)`])
4854 let DIST_I_SUCI = prove_by_refinement(
4855 `!V u0 u1 w0 n f i. pack_nonlinear_non_ox3q1h /\
4857 packing V /\ saturated V /\
4858 ~collinear {u0, u1, w0 } /\
4859 leaf_rank V [u0;u1] w0 n f ==>
4860 &2 <= dist (f i,f (SUC i))`,
4863 REPEAT WEAKER_STRIP_TAC;
4864 TYPIFY `!j. leaf V [u0; u1; f j]` (C SUBGOAL_THEN ASSUME_TAC);
4866 INTRO_TAC s_leaf_leaf[`V`;`[u0;u1]`;`f j`];
4867 REWRITE_TAC[Bump.EL_EXPLICIT];
4868 DISCH_THEN MATCH_MP_TAC;
4870 MATCH_MP_TAC LEAF_RANK_S_LEAF;
4871 BY(ASM_MESON_TAC[LEAF_RANK_TRUNCATE]);
4872 INTRO_TAC Packing3.BARV_SUBSET [`V`;`2`;`[u0;u1;f i]`];
4874 BY(ASM_MESON_TAC[Leaf_cell.leaf;IN]);
4875 INTRO_TAC Packing3.BARV_SUBSET [`V`;`2`;`[u0;u1;f (SUC i)]`];
4877 BY(ASM_MESON_TAC[Leaf_cell.leaf;IN]);
4878 REWRITE_TAC[set_of_list];
4879 REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY];
4880 REPEAT WEAKER_STRIP_TAC;
4881 TYPIFY `~(f i = f (SUC i))` (C SUBGOAL_THEN ASSUME_TAC);
4882 ASM_MESON_TAC[LEAF_RANK_SUC_INJ];
4883 FIRST_X_ASSUM_ST `packing` MP_TAC;
4884 REWRITE_TAC[Sphere.packing];
4885 BY(ASM_MESON_TAC[IN])
4889 let WEDGE3_Y4 = prove_by_refinement(
4890 `!V f w0 n i u0 u1 y1 y2 y3 y5 y6.
4891 pack_nonlinear_non_ox3q1h /\
4893 packing V /\ saturated V /\
4894 ~collinear {u0, u1, w0 } /\
4895 leaf_rank V [u0;u1] w0 n f /\
4896 critical_edge_y (dist(u0,u1)) /\
4897 ~(?vl. barV V 3 vl /\ {u0,u1} IN edgeX V (mcell4 V vl) /\
4898 mcell4 V vl SUBSET wedge_ge u0 u1 (f i) (f (SUC i)) ) /\
4900 y2 = dist(u0,f i) /\
4901 y3 = dist(u0,f (SUC i)) /\
4902 y5 = dist(u1,f (SUC i)) /\
4905 &2 <= y4 /\ y4 <= &2 * sqrt(&2) /\
4906 &0 < delta_y y1 y2 y3 y4 y5 y6 /\
4907 dih_y y1 y2 y3 y4 y5 y6 <= azim u0 u1 (f i) (f (SUC i)) /\
4908 &2 <= rad2_y y1 y2 y3 y4 y5 y6 /\
4909 (azim u0 u1 (f i) (f (SUC i)) < pi /\ dist(f i,f (SUC i)) <= &2 * sqrt(&2) ==> y4 = dist(f i,f(SUC i))))`,
4912 REWRITE_TAC[Pack_defs.critical_edge_y];
4913 REPEAT WEAKER_STRIP_TAC;
4914 TYPIFY `!j. leaf V [u0; u1; f j]` (C SUBGOAL_THEN ASSUME_TAC);
4916 INTRO_TAC s_leaf_leaf[`V`;`[u0;u1]`;`f j`];
4917 REWRITE_TAC[Bump.EL_EXPLICIT];
4918 DISCH_THEN MATCH_MP_TAC;
4920 MATCH_MP_TAC LEAF_RANK_S_LEAF;
4921 BY(ASM_MESON_TAC[LEAF_RANK_TRUNCATE]);
4922 INTRO_TAC LEAF_DOMAIN [`V`;`[u0;u1;f i]`];
4923 INTRO_TAC LEAF_DOMAIN [`V`;`[u0;u1;f (SUC i)]`];
4924 REWRITE_TAC[Bump.EL_EXPLICIT];
4926 REPEAT WEAKER_STRIP_TAC;
4927 COMMENT "delta with delta";
4928 TYPIFY `!y4. &2 <= y4 /\ y4 <= &2 * sqrt(&2) ==> &0 < delta_y (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i))) y4 (dist (u1,f (SUC i))) (dist (u1,f i))` (C SUBGOAL_THEN ASSUME_TAC);
4929 REPEAT WEAKER_STRIP_TAC;
4930 MP_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "FWGKMBZ");
4931 REWRITE_TAC[Sphere.y_of_x;GSYM Sphere.delta_y];
4932 REWRITE_TAC[Sphere.ineq];
4933 DISCH_THEN (C INTRO_TAC [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`]);
4934 REWRITE_TAC[arith `x > &0 <=> &0 < x`];
4935 ASM_REWRITE_TAC[TAUT `x ==> b ==> c <=> x /\ b ==> c`];
4936 DISCH_THEN MATCH_MP_TAC;
4937 REWRITE_TAC[Nonlinear_lemma.sqrt8_sqrt2;Sphere.sqrt2];
4938 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
4939 TYPIFY `&2 <= &2 * sqrt(&2)` (C SUBGOAL_THEN ASSUME_TAC);
4940 REWRITE_TAC[GSYM Sphere.sqrt2];
4941 MP_TAC Flyspeck_constants.bounds;
4943 COMMENT "first case";
4944 TYPIFY `pi <= azim u0 u1 (f i) (f (SUC i))` ASM_CASES_TAC;
4945 TYPIFY `&2 * sqrt(&2)` EXISTS_TAC;
4946 ASM_SIMP_TAC[arith `pi <= x ==> ~(x < pi)`;arith `x <= x`];
4948 MATCH_MP_TAC REAL_LE_TRANS;
4949 TYPIFY `pi` EXISTS_TAC;
4951 MATCH_MP_TAC (arith `x < y ==> x <= y`);
4952 MATCH_MP_TAC DIH_Y_LT_PI;
4954 FIRST_X_ASSUM MATCH_MP_TAC;
4955 BY(ASM_REWRITE_TAC[arith `x <= x`]);
4956 FIRST_X_ASSUM_ST `hminus` MP_TAC;
4957 BY(MP_TAC Nonlinear_lemma.hminus_gt THEN REAL_ARITH_TAC);
4958 REWRITE_TAC[GSYM Sphere.sqrt2;GSYM Nonlinear_lemma.sqrt8_sqrt2];
4959 MATCH_MP_TAC RAD2_Y_SQRT8;
4961 TYPIFY `!y. y < &2 * sqrt(&2) ==> y < &4` (C SUBGOAL_THEN ASSUME_TAC);
4962 REWRITE_TAC[GSYM Sphere.sqrt2];
4963 MP_TAC Flyspeck_constants.bounds;
4966 FIRST_X_ASSUM MATCH_MP_TAC;
4967 BY(ASM_REWRITE_TAC[arith `x <= x`;Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2]);
4968 FIRST_X_ASSUM MP_TAC;
4969 REWRITE_TAC[arith `~(pi <= x) <=> x < pi`];
4971 COMMENT "second case";
4972 TYPIFY `&2 * sqrt(&2) < dist(f i,f (SUC i))` ASM_CASES_TAC;
4973 TYPIFY `&2 * sqrt(&2)` EXISTS_TAC;
4974 ASM_SIMP_TAC[arith `x <= x`;arith `s < d ==> ~(d <= s)`];
4976 REWRITE_TAC[GSYM Sphere.sqrt2;GSYM Nonlinear_lemma.sqrt8_sqrt2];
4977 MATCH_MP_TAC RAD2_Y_SQRT8;
4979 TYPIFY `!y. y < &2 * sqrt(&2) ==> y < &4` (C SUBGOAL_THEN ASSUME_TAC);
4980 REWRITE_TAC[GSYM Sphere.sqrt2];
4981 MP_TAC Flyspeck_constants.bounds;
4984 FIRST_X_ASSUM MATCH_MP_TAC;
4985 BY(ASM_REWRITE_TAC[arith `x <= x`;Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2]);
4986 MATCH_MP_TAC REAL_LE_TRANS;
4987 TYPIFY `dihV u0 u1 (f i) (f (SUC i))` EXISTS_TAC;
4989 MATCH_MP_TAC Rogers.DIHV_LE_AZIM;
4990 BY(ASM_REWRITE_TAC[]);
4991 INTRO_TAC Merge_ineq.DIHV_EQ_DIH_Y [`u0`;`u1`;`f i`;`f(SUC i)`];
4992 ASM_SIMP_TAC[LET_DEF;LET_END_DEF];
4993 DISCH_THEN SUBST1_TAC;
4994 REWRITE_TAC[Sphere.dih_y;LET_DEF;LET_END_DEF];
4995 MATCH_MP_TAC (arith `x < y ==> x <= y`);
4996 MATCH_MP_TAC Tame_inequalities.DIH_X_MONO_LT_4;
4997 REWRITE_TAC[GSYM Sphere.delta_y];
4999 GMATCH_SIMP_TAC Misc_defs_and_lemmas.ABS_SQUARE;
5000 BY(ASM_SIMP_TAC [arith `&2 <= x ==> abs(x ) = x`]);
5002 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
5003 FIRST_X_ASSUM_ST `hminus` MP_TAC;
5004 BY(MP_TAC Nonlinear_lemma.hminus_gt THEN REAL_ARITH_TAC);
5006 FIRST_X_ASSUM MATCH_MP_TAC;
5007 BY(ASM_REWRITE_TAC[arith `x <= x`]);
5008 TYPIFY `~coplanar {u0,u1,f i , f (SUC i)}` (C SUBGOAL_THEN ASSUME_TAC);
5009 REWRITE_TAC[ (GSYM Local_lemmas1.AZIM_COND_FOR_COPLANAR)];
5010 DISCH_THEN DISJ_CASES_TAC;
5011 INTRO_TAC LEAF_RANK_AZIM_INJ [`V`;`[u0;u1]`;`w0`;`n`;`f`;`i`;`SUC i`];
5012 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
5013 ASM_SIMP_TAC[arith `1 < n ==> ~(n = 0)`;arith `SUC i = i + 1`];
5014 BY(ASM_MESON_TAC[ MOD_INJ1_ALT;arith `1 < n ==> ~(n = 0) /\ ~(1 = 0)`]);
5015 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
5016 BY(ASM_REWRITE_TAC[GSYM coplanar_delta_y]);
5017 COMMENT "last case";
5018 FIRST_X_ASSUM MP_TAC;
5019 REWRITE_TAC[arith `~(x < d) <=> (d <= x)`];
5021 TYPIFY `dist(f i,f (SUC i))` EXISTS_TAC;
5023 TYPIFY `~(f i = f (SUC i))` (C SUBGOAL_THEN ASSUME_TAC);
5025 INTRO_TAC LEAF_RANK_AZIM_INJ [`V`;`[u0;u1]`;`w0`;`n`;`f`;`i`;`SUC i`];
5026 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
5027 ASM_SIMP_TAC[arith `1 < n ==> ~(n = 0)`;arith `SUC i = i + 1`];
5028 REWRITE_TAC[AZIM_REFL];
5029 BY(ASM_MESON_TAC[ MOD_INJ1_ALT;arith `1 < n ==> ~(n = 0) /\ ~(1 = 0)`]);
5030 TYPIFY `!i. V (f i)` (C SUBGOAL_THEN ASSUME_TAC);
5032 FIRST_X_ASSUM_ST `leaf` MP_TAC;
5033 REWRITE_TAC[Leaf_cell.leaf;IN];
5034 DISCH_THEN (C INTRO_TAC [`i'`]);
5035 REPEAT WEAKER_STRIP_TAC;
5036 INTRO_TAC Packing3.BARV_SUBSET [`V`;`2`;`[u0;u1;f i']`];
5037 ASM_REWRITE_TAC[set_of_list;SUBSET;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
5040 FIRST_X_ASSUM_ST `packing` MP_TAC;
5041 REWRITE_TAC[Sphere.packing];
5042 DISCH_THEN MATCH_MP_TAC;
5043 BY(ASM_MESON_TAC[]);
5046 FIRST_X_ASSUM MATCH_MP_TAC;
5047 BY(ASM_REWRITE_TAC[]);
5049 COMMENT "azim on last case";
5051 INTRO_TAC Rogers.DIHV_LE_AZIM [`u0`;`u1`;`f i`;`f(SUC i)`];
5053 BY(ASM_REWRITE_TAC[]);
5054 MATCH_MP_TAC (arith `x = y ==> (x <= a ==> y <= a)`);
5055 INTRO_TAC Merge_ineq.DIHV_EQ_DIH_Y [`u0`;`u1`;`f i`;`f(SUC i)`];
5057 BY(ASM_REWRITE_TAC[]);
5058 BY(REWRITE_TAC[LET_DEF;LET_END_DEF]);
5059 COMMENT "deal with rad";
5060 MATCH_MP_TAC (arith `~(x < y) ==> y <= x`);
5061 REWRITE_TAC[Sphere.rad2_y;Sphere.y_of_x;arith `x * x = x pow 2`];
5062 INTRO_TAC (GSYM GDRQXLGv3) [`u0`;`u1`;`f i`;`f (SUC i)`];
5063 REWRITE_TAC[LET_DEF;LET_END_DEF];
5065 FIRST_X_ASSUM MP_TAC;
5066 BY(MESON_TAC[coplanar_delta_y]);
5067 DISCH_THEN SUBST1_TAC;
5069 TYPIFY `radV {u0,u1,f i, f(SUC i)} < sqrt(&2)` ENOUGH_TO_SHOW_TAC;
5070 REPEAT WEAKER_STRIP_TAC;
5071 INTRO_TAC RAD_PI_IMP_WEDGE4 [`V`;`f`;`w0`;`n`;`i`;`u0`;`u1`];
5073 FIRST_X_ASSUM_ST `edgeX` MP_TAC;
5075 FIRST_X_ASSUM MP_TAC;
5076 REWRITE_TAC[arith `x < y <=> ~(y <= x)`];
5077 REPEAT WEAKER_STRIP_TAC;
5078 FIRST_X_ASSUM_ST `~` MP_TAC;
5080 ONCE_REWRITE_TAC[GSYM Nonlin_def.sqrt2_sqrt2];
5081 REWRITE_TAC[Sphere.sqrt2;arith `x pow 2 = x * x`];
5082 GMATCH_SIMP_TAC Misc_defs_and_lemmas.ABS_SQUARE_LE;
5083 GMATCH_SIMP_TAC Trigonometry2.LT_IMP_ABS_REFL;
5085 GMATCH_SIMP_TAC REAL_LT_RSQRT;
5090 let cc_4_cc_ke4 = prove_by_refinement(
5092 packing V /\ saturated V /\
5093 leaf_rank V [u0;u1] w0 n f /\
5094 ~collinear {u0,u1,w0} /\
5097 leaf V [u0;u1;f i] /\
5098 cc_4 V u0 u1 f i ==>
5099 cc_ke V [u0;u1;f i] = 4`,
5103 REPEAT WEAKER_STRIP_TAC;
5104 INTRO_TAC Leaf_cell.MCELL4_EDGE_FIRST [`V`;`ul`;`u0`;`u1`];
5106 BY(ASM_MESON_TAC[IN]);
5107 REPEAT WEAKER_STRIP_TAC;
5108 INTRO_TAC Leaf_cell.CC_KE_34 [`V`;`[u0;u1;f i]`];
5109 DISCH_THEN (MP_TAC o (MATCH_MP (TAUT `a \/ b ==> b \/ a`)));
5110 DISCH_THEN DISJ_CASES_TAC;
5111 BY(ASM_REWRITE_TAC[]);
5112 INTRO_TAC K3_CC_WI_ALT [`V`;`[u0;u1]`;`w0`;`n`;`f`;`i`];
5113 ASM_SIMP_TAC[Bump.EL_EXPLICIT];
5115 BY(ASM_MESON_TAC[]);
5117 TYPIFY `?j. j< n /\ (f i) = (f j) /\ (f (SUC j) = f (SUC i))` (C SUBGOAL_THEN MP_TAC);
5118 TYPIFY `i MOD n` EXISTS_TAC;
5119 INTRO_TAC F_DEMOD [`f`;`n`;`i`];
5120 BY(ASM_MESON_TAC[DIVISION;arith `1 < n ==> ~(n = 0)`]);
5121 REPEAT WEAKER_STRIP_TAC;
5122 INTRO_TAC Leaf_cell.STEM_EDGEX [`V`;`[u0;u1;f i]`];
5123 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
5125 INTRO_TAC MCELL4_FULL_WEDGE [`V`;`cc_cell V [u0;u1;f i]`;`vl`;`w0`;`n`;`f`;`j`];
5128 BY(ASM_MESON_TAC[Bump.RIJRIED;NOT_IN_EMPTY;Bump.MCELL4;Leaf_cell.CC_CELL_IN_MCELL_SET;IN]);
5130 INTRO_TAC Ajripqn.AJRIPQN [`V`;`vl`;`cc_uh V [u0;u1;f i]`;`4`;`3`];
5131 ASM_REWRITE_TAC[arith `~(4 = 3) /\ ~(3 = 4)`;IN_INSERT];
5133 BY(ASM_MESON_TAC[IN]);
5135 BY(ASM_MESON_TAC[Leaf_cell.cc_uh;IN]);
5136 REWRITE_TAC[GSYM Bump.MCELL4];
5137 TYPIFY `mcell 3 V (cc_uh V [EL 0 vl; EL 1 vl; f j]) = mcell4 V vl` (C SUBGOAL_THEN SUBST1_TAC);
5138 FIRST_X_ASSUM (SUBST1_TAC o GSYM);
5139 REWRITE_TAC[Leaf_cell.cc_cell];
5140 BY(ASM_MESON_TAC[]);
5141 REWRITE_TAC[INTER_IDEMPOT];
5142 BY(ASM_MESON_TAC[Bump.RIJRIED;NOT_IN_EMPTY;IN;Bump.MCELL4])
5146 let cc_4_cc_cell = prove_by_refinement(
5151 leaf V [u0;u1;f i] /\
5152 leaf_rank V [u0;u1] w0 n f /\
5153 ~collinear {u0,u1,w0} /\
5155 cc_4 V u0 u1 f i ==>
5156 gg_mcell V f u0 u1 i =
5157 gammaX V (cc_cell V [u0;u1;f i]) lmfun * critical_weight V (cc_cell V [u0;u1;f i]) +
5158 beta_bump_v1 V {u0,u1} (cc_cell V [u0;u1;f i])`,
5161 REPEAT WEAKER_STRIP_TAC;
5162 INTRO_TAC cc_4_cc_ke4 [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
5164 BY(ASM_REWRITE_TAC[]);
5166 INTRO_TAC Leaf_cell.EL_CC_UH [`V`;`[u0;u1;f i]`];
5167 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
5168 REPEAT WEAKER_STRIP_TAC;
5169 TYPED_ABBREV_TAC `j = (i:num)`;
5170 TYPIFY `mcell4 V (cc_uh V [u0;u1;f j]) = cc_cell V [u0;u1;f j]` (C SUBGOAL_THEN ASSUME_TAC);
5171 BY(ASM_REWRITE_TAC[Leaf_cell.cc_cell;Bump.MCELL4]);
5172 INTRO_TAC MCELL4_GG [`V`;`cc_cell V [u0;u1;f i]`;`cc_uh V [u0;u1;f i]`;`w0`;`n`;`f`;`j`];
5176 BY(ASM_MESON_TAC[Leaf_cell.cc_uh;IN]);
5178 MATCH_MP_TAC Leaf_cell.CC_CELL_NOT_NULLSET;
5179 BY(ASM_MESON_TAC[]);
5180 INTRO_TAC K4_CC_WI_ALT [`V`;`[u0;u1]`;`w0`;`n`;`f`;`i`];
5181 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT]);
5182 DISCH_THEN (SUBST1_TAC o GSYM);
5187 let LEAF_RANK_PROPS = prove_by_refinement(
5188 `!V. packing V /\ saturated V /\ ~cell_cluster_estimate_v1 V /\ pack_nonlinear_non_ox3q1h
5191 s_leaf V [u0;u1] HAS_SIZE n /\
5193 hminus <= hl [u0;u1] /\ hl [u0;u1] <= hplus /\
5194 ~collinear {u0, u1, w0 } /\
5195 leaf_rank V [u0;u1] w0 n f /\
5196 u0 IN V /\ u1 IN V /\
5198 (!j. leaf V [u0; u1; f j]) /\
5199 critical_edge_y (dist(u0,u1)) /\
5200 sum {i | i < n} (gg_mcell V f (u0) (u1)) < &0 /\
5201 sum {i | i < n} (azim_mcell V f (u0) (u1)) = &2 * pi /\
5202 (!i. azim_mcell V f u0 u1 i = azim (u0) (u1) (f i) (f (SUC i))) /\
5203 cc_bool_model_v11 (cc_data_v8 V f u0 u1) /\
5204 cc_bool_prep_v11 (cc_data_v8 V f u0 u1)
5208 REPEAT WEAKER_STRIP_TAC;
5209 INTRO_TAC CELL_CLUSTER_ESTIMATE_REDUCE [`V`];
5210 ASM_REWRITE_TAC[NOT_FORALL_THM];
5211 REPEAT WEAKER_STRIP_TAC;
5212 FIRST_X_ASSUM (MP_TAC o (MATCH_MP (TAUT `~(a /\ b /\ d ==>c) ==> a /\ b /\ d /\ ~c`)));
5213 REWRITE_TAC[arith `~(a <= b) <=> b < a`];
5214 REPEAT WEAKER_STRIP_TAC;
5215 GEXISTL_TAC [`u0`;`u1`];
5216 TYPED_ABBREV_TAC `(n:num) = CARD(s_leaf V [u0;u1])`;
5218 TYPIFY `?w0. ~collinear {u0,u1,w0}` (C SUBGOAL_THEN MP_TAC);
5219 MATCH_MP_TAC Trigonometry2.TOW_DISTINCT_POINTS_EXISTS_RD_NOT_COLLINEAR;
5220 BY(ASM_REWRITE_TAC[]);
5221 REPEAT WEAKER_STRIP_TAC;
5222 TYPIFY `w0` EXISTS_TAC;
5223 INTRO_TAC CELL_CLUSTER_N_LE_1 [`V`;`u0`;`u1`];
5224 ASM_REWRITE_TAC[arith `&0 <= x <=> ~(x < &0)`;arith `~(n <= 1) <=> 1 < n`];
5226 TYPIFY `s_leaf V [u0;u1] HAS_SIZE n` (C SUBGOAL_THEN ASSUME_TAC);
5227 ASM_REWRITE_TAC[ HAS_SIZE];
5228 MATCH_MP_TAC S_LEAF_FINITE;
5229 BY(ASM_REWRITE_TAC[]);
5230 INTRO_TAC LEAF_RANKING_LEMMA [`V`;`[u0;u1]`;`w0`;`n`];
5231 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
5232 ASM_SIMP_TAC[arith `1 < n ==> 0 < n`];
5233 REPEAT WEAKER_STRIP_TAC;
5234 TYPIFY `f` EXISTS_TAC;
5236 BY(ASM_REWRITE_TAC[leaf_rank;Bump.EL_EXPLICIT]);
5238 TYPIFY `!j. leaf V [u0; u1; f j]` (C SUBGOAL_THEN ASSUME_TAC);
5240 INTRO_TAC s_leaf_leaf[`V`;`[u0;u1]`;`f j`];
5241 REWRITE_TAC[Bump.EL_EXPLICIT];
5242 DISCH_THEN MATCH_MP_TAC;
5244 MATCH_MP_TAC LEAF_RANK_S_LEAF;
5245 BY(ASM_MESON_TAC[LEAF_RANK_TRUNCATE]);
5246 TYPIFY `critical_edge_y (dist(u0,u1))` (C SUBGOAL_THEN ASSUME_TAC);
5247 REWRITE_TAC[Pack_defs.critical_edge_y];
5248 REPEAT (FIRST_X_ASSUM_ST `hl` MP_TAC);
5249 REWRITE_TAC[Marchal_cells_3.HL_2];
5251 TYPIFY `u0 IN V /\ u1 IN V` (C SUBGOAL_THEN ASSUME_TAC);
5252 TYPIFY `u0 IN V /\ u1 IN V` (C SUBGOAL_THEN (unlist ASM_REWRITE_TAC));
5253 INTRO_TAC Packing3.BARV_SUBSET [`V`;`2`;`[u0;u1;f 0]`];
5255 BY(ASM_MESON_TAC[Leaf_cell.leaf;IN;Sphere.BARV]);
5256 REWRITE_TAC[Bump.set_of_list3_explicit];
5259 INTRO_TAC LEAF_RANK_GG_SUM [`V`;`[u0;u1]`;`w0`;`n`;`f`];
5260 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
5261 DISCH_THEN SUBST1_TAC;
5264 BY(ASM_MESON_TAC[ LEAF_RANK_PERIODIC]);
5266 ONCE_REWRITE_TAC[TAUT `!a b. a /\ b <=> b /\ a`];
5267 BY(ASM_REWRITE_TAC[]);
5269 INTRO_TAC LEAF_RANK_GRUTOTI [`V`;`[u0;u1]`;`w0`;`n`;`f`];
5270 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
5271 DISCH_THEN MATCH_MP_TAC;
5272 MATCH_MP_TAC REAL_LET_TRANS;
5273 TYPIFY `hplus` EXISTS_TAC;
5275 MP_TAC Flyspeck_constants.bounds;
5279 INTRO_TAC LEAF_RANK_REUHADY [`V`;`[u0;u1]`;`w0`;`n`;`f`;`i`];
5280 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT]);
5282 MATCH_MP_TAC cc_bool_model_data;
5283 GEXISTL_TAC [`w0`;`n`];
5284 BY(ASM_REWRITE_TAC[]);
5285 MATCH_MP_TAC cc_prep_model_data;
5290 let cc_real_dat_def = prove_by_refinement(
5292 cc_qx_v11 (cc_data_v8 V f u0 u1) =
5293 (\i. cc_4 V u0 u1 f i /\
5294 ~(dist (u0,f i) < &2 * hminus /\
5295 dist (u1,f i) < &2 * hminus /\
5296 dist (u0,f (i + 1)) < &2 * hminus /\
5297 dist (u1,f (i + 1)) < &2 * hminus /\
5298 dist (f i,f (SUC i)) < &2 * hminus)) /\
5299 cc_qy_v11 (cc_data_v8 V f u0 u1) = (\i. ~cc_4 V u0 u1 f i) /\
5300 cc_qu_v11 (cc_data_v8 V f u0 u1) =
5301 (\i. cc_4 V u0 u1 f i /\
5302 (dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
5303 dist (u0,f (i + 1)) < &2 * hminus /\
5304 dist (u1,f (i + 1)) < &2 * hminus /\
5305 dist (f i,f (SUC i)) < &2 * hminus) /\
5306 cc_hassmall_v11 (cc_data_v8 V f u0 u1) =
5307 (\i. (dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
5308 dist (u0,f (i + 1)) < &2 * hminus /\
5309 dist (u1,f (i + 1)) < &2 * hminus)`,
5312 REWRITE_TAC[FUN_EQ_THM;Oxl_def.cc_subcrit_v11;Oxl_def.cc_crit_v11;Oxl_def.cc_supercrit_v11;Oxl_def.cc_small_v11;Oxl_def.cc_small_eta_v11;Oxl_def.cc_4cell_v11;Oxl_def.cc_bool_v11;cc_data_v8;Oxl_def.cc_v11;Bump.EL_EXPLICIT;Oxl_def.cc_qx_v11;Oxl_def.cc_qy_v11;Oxl_def.cc_hassmall_v11;Oxl_def.cc_qu_v11;GSYM cc_4];
5313 REPEAT WEAKER_STRIP_TAC;
5318 let real_periodic_data = prove_by_refinement(
5321 periodic (azim_mcell V f u0 u1) n /\
5322 periodic (gg_mcell V f u0 u1) n /\
5323 periodic (\i. gammaX V (cc_cell V [u0; u1; f i]) lmfun) n /\
5324 periodic (\i. gammaX V (cc_cell V [u1; u0; f (SUC i)]) lmfun) n /\
5325 periodic (\i. gammaX V (cc_cell V [u0; u1; f i]) lmfun * critical_weight V (cc_cell V [u0; u1; f i])) n /\
5326 periodic (\i. gammaX V (cc_cell V [u1; u0; f (SUC i)]) lmfun * critical_weight V (cc_cell V [u1; u0; f (SUC i)])) n
5330 REWRITE_TAC[Oxl_def.periodic;azim_mcell;gg_mcell;Pack_defs.critical_weight];
5331 REPEAT WEAKER_STRIP_TAC;
5332 REWRITE_TAC[arith `!i. SUC (i+n) = SUC i + n`];
5333 BY(ASM_REWRITE_TAC[])
5337 let LEAF_RANK_LEAF = prove_by_refinement(
5339 leaf_rank V [u0;u1] w0 n f
5341 leaf V [u0;u1;f i]`,
5344 REPEAT WEAKER_STRIP_TAC;
5345 INTRO_TAC s_leaf_leaf[`V`;`[u0;u1]`;`f i`];
5346 REWRITE_TAC[Bump.EL_EXPLICIT];
5347 DISCH_THEN MATCH_MP_TAC;
5349 MATCH_MP_TAC LEAF_RANK_S_LEAF;
5350 BY(ASM_MESON_TAC[LEAF_RANK_TRUNCATE])
5355 let cc_4_UL = prove_by_refinement(
5359 leaf_rank V [u0;u1] w0 n f /\
5360 ~collinear {u0,u1,w0} /\
5364 cc_cell V [u0;u1;f i] = mcell4 V [u0;u1;f i; f (SUC i)]
5368 REPEAT WEAKER_STRIP_TAC;
5369 INTRO_TAC cc_4_cc_ke4 [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
5372 BY(ASM_MESON_TAC[LEAF_RANK_PERIODIC;LEAF_RANK_LEAF]);
5374 INTRO_TAC CC_CELL_WEDGE_MATCH_UH [`V`;`[u0;u1;f i]`;`u0`;`u1`;`w0`;`n`;`f`;`i`;`i`];
5376 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
5377 INTRO_TAC K4_CC_WI_ALT [`V`;`[u0;u1]`;`w0`;`n`;`f`;`i`];
5378 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT]);
5379 ASM_SIMP_TAC[Geomdetail.PAIR_EQ_EXPAND];
5380 DISCH_THEN DISJ_CASES_TAC;
5381 INTRO_TAC Leaf_cell.LIST_OF_CC_UH [`V`;`[u0;u1;f i]`];
5382 ASM_REWRITE_TAC[Leaf_cell.cc_cell];
5384 MATCH_MP_TAC LEAF_RANK_LEAF;
5385 BY(ASM_MESON_TAC[]);
5386 DISCH_THEN SUBST1_TAC;
5387 BY(REWRITE_TAC[Bump.MCELL4;Bump.EL_EXPLICIT]);
5388 BY(ASM_MESON_TAC[LEAF_RANK_SUC_INJ])
5392 let EDGEX_PAIR = prove_by_refinement(
5393 `!V X e. e IN edgeX V X ==> (?u v. e = {u,v} /\ ~(u = v))`,
5396 REWRITE_TAC[Pack_defs.edgeX;IN_ELIM_THM];
5401 let MCELL4_EDGE_EXPLICIT = prove_by_refinement(
5403 packing V /\ saturated V /\ ~NULLSET (mcell4 V [u0;u1;u2;u3]) /\ barV V 3 [u0;u1;u2;u3] ==>
5404 edgeX V (mcell4 V [u0;u1;u2;u3]) = {{u0,u1},{u0,u2},{u0,u3},{u1,u2},{u1,u3},{u2,u3}}`,
5407 REPEAT WEAKER_STRIP_TAC;
5408 REWRITE_TAC[EXTENSION];
5410 TYPIFY `~(?u v. x = {u,v})` ASM_CASES_TAC;
5411 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
5412 BY(ASM_MESON_TAC[EDGEX_PAIR]);
5413 FIRST_X_ASSUM MP_TAC;
5415 REPEAT WEAKER_STRIP_TAC;
5417 INTRO_TAC Bump.MCELL4_EDGE [`V`;`[u0;u1;u2;u3]`;`u`;`v`];
5419 BY(ASM_REWRITE_TAC[]);
5420 DISCH_THEN SUBST1_TAC;
5421 REWRITE_TAC[set_of_list];
5422 INTRO_TAC MCELL4_CARD4 [`V`;`[u0;u1;u2;u3]`];
5423 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
5424 DISCH_THEN (MP_TAC o (MATCH_MP Leaf_cell.CARD4_ALL_DISTINCT));
5425 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
5426 REPEAT WEAKER_STRIP_TAC;
5427 REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
5428 REWRITE_TAC[IN_INSERT;SUBSET;NOT_IN_EMPTY];
5429 TYPIFY `(u = u0)` ASM_CASES_TAC;
5431 BY(ASM_MESON_TAC[]);
5432 TYPIFY `(u = u1)` ASM_CASES_TAC;
5434 BY(ASM_MESON_TAC[]);
5435 TYPIFY `(u = u2)` ASM_CASES_TAC;
5437 BY(ASM_MESON_TAC[]);
5438 TYPIFY `(u= u3)` ASM_CASES_TAC;
5440 BY(ASM_MESON_TAC[]);
5446 let CC_4_PROPS = prove_by_refinement(
5450 leaf_rank V [u0;u1] w0 n f /\
5451 ~collinear {u0,u1,w0} /\
5453 cc_4 V u0 u1 f i ==>
5454 cc_ke V [u0; u1; f i] = 4 /\
5455 hl [u0;u1;f i;f (SUC i)] < sqrt(&2) /\
5456 convex hull {u0,u1,f i,f (SUC i)} = cc_cell V [u0;u1;f i] /\
5457 ~coplanar {u0,u1,f i, f (SUC i)} /\
5458 cc_cell V [u0; u1; f i] SUBSET wedge_ge u0 u1 (f i) (f (SUC i)) /\
5459 cc_cell V [u0; u1; f i] = mcell4 V [u0; u1; f i; f (SUC i)] /\
5460 ~collinear {u0,u1,f i} /\
5461 ~collinear {u0,u1,f (SUC i)} /\
5462 leaf V [u0; u1; f i] /\
5463 leaf V [u0; u1; f (SUC i)] /\
5464 ~NULLSET (cc_cell V [u0; u1; f i]) /\
5465 barV V 3 [u0;u1;f i;f (SUC i)]`,
5468 REPEAT WEAKER_STRIP_TAC;
5470 INTRO_TAC LEAF_RANK_LEAF [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
5472 BY(ASM_REWRITE_TAC[]);
5474 INTRO_TAC LEAF_RANK_LEAF [`V`;`u0`;`u1`;`w0`;`n`;`f`;`SUC i`];
5476 BY(ASM_REWRITE_TAC[]);
5478 INTRO_TAC cc_4_cc_ke4 [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
5480 DISCH_THEN MP_TAC THEN ANTS_TAC;
5481 BY(ASM_MESON_TAC[LEAF_RANK_PERIODIC]);
5483 INTRO_TAC K4_CC_WI_ALT [`V`;`[u0;u1]`;`w0`;`n`;`f`;`i`];
5485 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT]);
5486 REWRITE_TAC[Bump.EL_EXPLICIT];
5488 INTRO_TAC cc_4_UL [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
5491 INTRO_TAC Leaf_cell.EL_CC_UH [`V`;`[u0;u1;f i]`];
5492 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
5493 REPEAT WEAKER_STRIP_TAC;
5494 INTRO_TAC Leaf_cell.CC_CELL_NOT_NULLSET [`V`;`[u0;u1;f i]`];
5496 BY(ASM_REWRITE_TAC[]);
5498 TYPIFY `hl [u0;u1;f i;f (SUC i)] < sqrt(&2)` (C SUBGOAL_THEN ASSUME_TAC);
5500 FIRST_X_ASSUM_ST `NULLSET` MP_TAC;
5502 BY(ASM_REWRITE_TAC[Pack_defs.mcell4;NEGLIGIBLE_EMPTY]);
5503 TYPIFY `convex hull {u0,u1,f i,f (SUC i)} = cc_cell V [u0;u1;f i]` (C SUBGOAL_THEN ASSUME_TAC);
5505 BY(ASM_REWRITE_TAC[Pack_defs.mcell4;set_of_list]);
5506 TYPIFY `~coplanar {u0,u1,f i,f (SUC i)}` (C SUBGOAL_THEN ASSUME_TAC);
5507 ONCE_REWRITE_TAC[GSYM COPLANAR_CONVEX_HULL_COPLANAR];
5508 DISCH_THEN (MP_TAC o (MATCH_MP COPLANAR_IMP_NEGLIGIBLE));
5509 BY(ASM_MESON_TAC[COPLANAR_IMP_NEGLIGIBLE]);
5510 INTRO_TAC Leaf_cell.GBEWYFX [`V`;`[u0;u1;f (SUC i)]`];
5511 ASM_REWRITE_TAC[set_of_list];
5513 INTRO_TAC Leaf_cell.GBEWYFX [`V`;`[u0;u1;f i]`];
5514 ASM_REWRITE_TAC[set_of_list];
5517 INTRO_TAC MCELL4_BARV_FI [`V`;`cc_uh V [u0;u1;f i]`;`w0`;`n`;`f`;`i`];
5518 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
5519 DISCH_THEN MP_TAC THEN ANTS_TAC;
5521 BY(ASM_MESON_TAC[Leaf_cell.cc_uh;IN]);
5522 TYPIFY `mcell4 V (cc_uh V [u0; u1; f i]) = cc_cell V [u0;u1;f i]` (C SUBGOAL_THEN ASSUME_TAC);
5523 BY(ASM_MESON_TAC[Leaf_cell.cc_cell;Bump.MCELL4]);
5526 BY(ASM_MESON_TAC[]);
5527 BY(ASM_MESON_TAC[]);
5532 let CC_4_BETA_BUMP_EXPLICIT = prove_by_refinement(
5536 leaf_rank V [u0;u1] w0 n f /\
5537 ~collinear {u0,u1,w0} /\
5540 critical_edge_y (dist(u0,u1)) /\
5541 critical_edge_y (dist(f i, f (SUC i))) /\
5542 dist(u0,f i) < &2 * hminus /\
5543 dist(u0,f(SUC i)) < &2 * hminus /\
5544 dist(u1,f i) < &2 * hminus /\
5545 dist(u1,f(SUC i)) < &2 * hminus ==>
5546 beta_bump_v1 V {u0,u1} (cc_cell V [u0;u1;f i]) =
5547 bump (dist(u0,u1)/ &2) - bump (dist(f i,f (SUC i))/ &2)
5551 REPEAT WEAKER_STRIP_TAC;
5553 INTRO_TAC CC_4_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
5555 BY(ASM_REWRITE_TAC[]);
5556 REPEAT WEAKER_STRIP_TAC;
5557 FIRST_X_ASSUM_ST `beta_bump_v1` MP_TAC;
5559 INTRO_TAC Bump.BETA_BUMP_ALT [`V`;`cc_cell V [u0;u1;f i]`;`(\e. VX V (cc_cell V [u0;u1;f i]) DIFF e)`;`{u0,u1}`];
5562 TYPIFY `packing V /\ saturated V` (C SUBGOAL_THEN (unlist REWRITE_TAC));
5563 BY(ASM_REWRITE_TAC[]);
5564 ONCE_REWRITE_TAC[GSYM IN];
5565 MATCH_MP_TAC Leaf_cell.CC_CELL_IN_MCELL_SET;
5566 BY(ASM_REWRITE_TAC[]);
5567 DISCH_THEN SUBST1_TAC;
5569 INTRO_TAC Bump.MCELL4_EDGE_OPP [`V`;`[u0;u1;f i;f (SUC i)]`];
5570 REWRITE_TAC[Bump.EL_EXPLICIT];
5573 BY(ASM_MESON_TAC[]);
5574 DISCH_THEN SUBST1_TAC;
5576 BY(REWRITE_TAC[RADV2;arith `inv (&2) *x = x/ &2`]);
5578 FIRST_X_ASSUM_ST `subcritical_edgeX` MP_TAC;
5580 REWRITE_TAC[Bump.CRITICAL_EDGEX_ALT];
5581 REWRITE_TAC[Bump.SUBCRITICAL_EDGEX_ALT];
5582 REWRITE_TAC[RADV2;arith `inv (&2) *x <= y <=> x <= &2 * y`;arith `y <= inv(&2) * x <=> &2 * y <= x`];
5583 INTRO_TAC MCELL4_EDGE_EXPLICIT [`V`;`u0`;`u1`;`f i`;`f(SUC i)`];
5586 BY(ASM_MESON_TAC[]);
5587 DISCH_THEN SUBST1_TAC;
5588 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
5589 REPEAT (FIRST_X_ASSUM_ST `critical_edge_y` MP_TAC);
5590 REWRITE_TAC[Sphere.critical_edge_y];
5591 REPEAT (DISCH_THEN (unlist REWRITE_TAC));
5592 REPEAT WEAKER_STRIP_TAC;
5594 BY(REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC THEN ASM_REWRITE_TAC[RADV2;arith `inv (&2) *x < hminus <=> x < &2 * hminus`]))
5598 let CC_4_BETA_BUMP_0 = prove_by_refinement(
5602 leaf_rank V [u0;u1] w0 n f /\
5603 ~collinear {u0,u1,w0} /\
5606 ~(critical_edge_y (dist(u0,u1)) /\
5607 critical_edge_y (dist(f i, f (SUC i))) /\
5608 dist(u0,f i) < &2 * hminus /\
5609 dist(u0,f(SUC i)) < &2 * hminus /\
5610 dist(u1,f i) < &2 * hminus /\
5611 dist(u1,f(SUC i)) < &2 * hminus) ==>
5612 beta_bump_v1 V {u0,u1} (cc_cell V [u0;u1;f i]) = &0
5616 REPEAT WEAKER_STRIP_TAC;
5618 INTRO_TAC CC_4_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
5620 BY(ASM_REWRITE_TAC[]);
5621 REPEAT WEAKER_STRIP_TAC;
5622 FIRST_X_ASSUM_ST `beta_bump_v1` MP_TAC;
5624 INTRO_TAC Bump.BETA_BUMP_ALT [`V`;`cc_cell V [u0;u1;f i]`;`(\e. VX V (cc_cell V [u0;u1;f i]) DIFF e)`;`{u0,u1}`];
5627 TYPIFY `packing V /\ saturated V` (C SUBGOAL_THEN (unlist REWRITE_TAC));
5628 BY(ASM_REWRITE_TAC[]);
5629 ONCE_REWRITE_TAC[GSYM IN];
5630 MATCH_MP_TAC Leaf_cell.CC_CELL_IN_MCELL_SET;
5631 BY(ASM_REWRITE_TAC[]);
5632 DISCH_THEN SUBST1_TAC;
5634 INTRO_TAC Bump.MCELL4_EDGE_OPP [`V`;`[u0;u1;f i;f (SUC i)]`];
5635 REWRITE_TAC[Bump.EL_EXPLICIT];
5638 BY(ASM_MESON_TAC[]);
5639 DISCH_THEN SUBST1_TAC;
5642 FIRST_X_ASSUM_ST `subcritical_edgeX` MP_TAC;
5643 REWRITE_TAC[Bump.CRITICAL_EDGEX_ALT;Bump.SUBCRITICAL_EDGEX_ALT];
5644 REWRITE_TAC[RADV2;arith `inv (&2) *x <= y <=> x <= &2 * y`;arith `y <= inv(&2) * x <=> &2 * y <= x`];
5645 INTRO_TAC MCELL4_EDGE_EXPLICIT [`V`;`u0`;`u1`;`f i`;`f(SUC i)`];
5648 BY(ASM_MESON_TAC[]);
5649 DISCH_THEN SUBST1_TAC;
5650 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
5651 REPEAT WEAKER_STRIP_TAC;
5652 REPEAT (FIRST_X_ASSUM_ST `critical_edge_y` MP_TAC);
5653 ASM_REWRITE_TAC[Sphere.critical_edge_y];
5654 FIRST_X_ASSUM MP_TAC;
5655 REWRITE_TAC[GSYM RADV2;arith ` x < &2 * hminus <=> inv (&2) *x < hminus`];
5656 INTRO_TAC MCELL4_CARD4 [`V`;`[u0;u1;f i;f (SUC i)]`];
5658 BY(ASM_MESON_TAC[]);
5659 REWRITE_TAC[Bump.EL_EXPLICIT];
5660 DISCH_THEN (MP_TAC o (MATCH_MP Leaf_cell.CARD4_ALL_DISTINCT));
5661 REPEAT WEAKER_STRIP_TAC;
5662 TYPIFY `!g. (g = {u0, f i} \/ g = {u0, f (SUC i)} \/ g = {u1, f i} \/ g = {u1 , f(SUC i)}) /\ ~(g = {u0,u1}) /\ ~(g = {f i,f(SUC i)}) ==> radV g < hminus` (C SUBGOAL_THEN ASSUME_TAC);
5663 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[]);
5664 BY(REPEAT (CONJ_TAC THEN TRY( (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[] THEN ASM_REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND])));
5670 let critical_edgeX_critical_edge_y = prove_by_refinement(
5671 `!V X u v. {u,v} IN critical_edgeX V X <=> {u,v} IN edgeX V X /\ critical_edge_y (dist(u,v))`,
5674 REWRITE_TAC[Pack_defs.critical_edgeX;IN_ELIM_THM;Marchal_cells_3.HL_2;Sphere.critical_edge_y];
5675 REPEAT WEAKER_STRIP_TAC;
5676 MATCH_MP_TAC (TAUT `((a==> b) /\ (b ==> a)) ==> (a = b)`);
5678 REWRITE_TAC[arith `!x y. inv(&2) * x <= y <=> x <= &2 * y`; arith `!x y. y <= inv (&2) * x <=> &2 * y <= x`];
5680 REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
5681 REWRITE_TAC[arith `!x y. inv(&2) * x <= y <=> x <= &2 * y`; arith `!x y. y <= inv (&2) * x <=> &2 * y <= x`];
5682 REPEAT WEAKER_STRIP_TAC;
5683 FIRST_X_ASSUM DISJ_CASES_TAC;
5684 BY(ASM_REWRITE_TAC[]);
5685 TYPIFY `{u,v} = {u',v'}` (C SUBGOAL_THEN SUBST1_TAC);
5688 BY(ASM_MESON_TAC[DIST_SYM])
5692 let critical_weight_wtcount6_y = prove_by_refinement(
5696 leaf_rank V [u0;u1] w0 n f /\
5697 ~collinear {u0,u1,w0} /\
5700 critical_edge_y (dist(u0,u1)) ==>
5701 critical_weight V (cc_cell V [u0;u1;f i]) =
5702 &1 / & (wtcount6_y (dist(u0,u1)) (dist(u0,f i)) (dist (u0,f (SUC i))) (dist (f i, f (SUC i)))
5703 (dist(u1, f (SUC i))) (dist (u1, f i)))`,
5706 REWRITE_TAC[Pack_defs.critical_edge_y;Pack_defs.critical_weight;arith `&1/ x = inv(x)`;REAL_EQ_INV2;REAL_OF_NUM_EQ];
5707 REPEAT WEAKER_STRIP_TAC;
5708 INTRO_TAC Upfzbzm_support_lemmas.FINITE_critical_edgeX [`V`;`cc_cell V [u0;u1;f i]`];
5710 INTRO_TAC CC_4_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
5712 BY(ASM_REWRITE_TAC[]);
5713 REPEAT WEAKER_STRIP_TAC;
5714 TYPED_ABBREV_TAC `ee = critical_edgeX V (cc_cell V [u0; u1; f i])` ;
5715 INTRO_TAC MCELL4_EDGE_EXPLICIT [`V`;`u0`;`u1`;`f i`;`f (SUC i)`];
5717 BY(ASM_MESON_TAC[]);
5718 REPEAT WEAKER_STRIP_TAC;
5719 TYPIFY `ee = {{u0, u1}, {u0, f i}, {u0, f (SUC i)}, {u1, f i}, {u1, f (SUC i)}, { f i, f (SUC i)}} INTER ee` (C SUBGOAL_THEN SUBST1_TAC);
5720 MATCH_MP_TAC (SET_RULE `!a b. b SUBSET a ==> b = a INTER b`);
5722 REWRITE_TAC[Pack_defs.critical_edgeX;SUBSET;IN_ELIM_THM];
5723 REPEAT WEAKER_STRIP_TAC;
5724 BY(ASM_MESON_TAC[]);
5725 TYPED_ABBREV_TAC `ex = edgeX V (cc_cell V [u0;u1;f i])` ;
5726 TYPIFY `!u v. {u,v} IN ee <=> {u,v} IN ex /\ critical_edge_y (dist(u,v))` (C SUBGOAL_THEN ASSUME_TAC);
5729 BY(REWRITE_TAC[critical_edgeX_critical_edge_y]);
5730 TYPIFY `{u0,u1} IN ex /\ {u0, f i} IN ex /\ {u0, f (SUC i)} IN ex /\ {u1, f i} IN ex /\ {u1, f (SUC i)} IN ex /\ {f i, f (SUC i)} IN ex` (C SUBGOAL_THEN ASSUME_TAC);
5732 FIRST_X_ASSUM_ST `edgeX` kill;
5733 BY(ASM_REWRITE_TAC[IN_INSERT]);
5734 INTRO_TAC MCELL4_CARD4 [`V`;`[u0;u1;f i;f (SUC i)]`];
5736 BY(ASM_MESON_TAC[]);
5737 REWRITE_TAC[Bump.EL_EXPLICIT];
5738 DISCH_THEN (ASSUME_TAC o (MATCH_MP Leaf_cell.CARD4_ALL_DISTINCT));
5739 REPLICATE_TAC 6 (ONCE_ASM_SIMP_TAC[CARD_INSERT_INTER_ALT] THEN ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY;Geomdetail.PAIR_EQ_EXPAND]);
5740 REWRITE_TAC[Pack_defs.wtcount6_y;INTER_EMPTY;Pack_defs.wtcount3_y;CARD_CLAUSES;arith `x + 0 = x`];
5748 let ox3q1h_data = prove_by_refinement(
5749 `!V f w0 n u0 u1. ox3q1h /\
5753 s_leaf V [u0; u1] HAS_SIZE n /\
5757 ~collinear {u0, u1, w0} /\
5758 critical_edge_y (dist (u0,u1)) /\
5759 leaf_rank V [u0; u1] w0 n f /\ CARD (s_leaf V [u0; u1]) = 4 /\
5760 (?i. cc_4 V u0 u1 f i /\
5761 (hminus <= dist (f i,f (SUC i)) /\ dist (f i,f (SUC i)) <= hplus) /\
5762 (cc_4 V u0 u1 f (i + 1) /\
5763 (dist (u0,f (i + 1)) < &2 * hminus /\
5764 dist (u1,f (i + 1)) < &2 * hminus) /\
5765 dist (u0,f ((i + 1) + 1)) < &2 * hminus /\
5766 dist (u1,f ((i + 1) + 1)) < &2 * hminus /\
5767 dist (f (i + 1),f (SUC (i + 1))) < hminus) /\
5768 (cc_4 V u0 u1 f (i + 2) /\
5769 (dist (u0,f (i + 2)) < &2 * hminus /\
5770 dist (u1,f (i + 2)) < &2 * hminus) /\
5771 dist (u0,f ((i + 2) + 1)) < &2 * hminus /\
5772 dist (u1,f ((i + 2) + 1)) < &2 * hminus /\
5773 dist (f (i + 2),f (SUC (i + 2))) < hminus) /\
5774 cc_4 V u0 u1 f (i + 3) /\
5775 (dist (u0,f (i + 3)) < &2 * hminus /\
5776 dist (u1,f (i + 3)) < &2 * hminus) /\
5777 dist (u0,f ((i + 3) + 1)) < &2 * hminus /\
5778 dist (u1,f ((i + 3) + 1)) < &2 * hminus /\
5779 dist (f (i + 3),f (SUC (i + 3))) < hminus)
5780 ==> &0 <= sum {i | i < n} (gg_mcell V f u0 u1) `,
5788 let c_4_azim_mcell_dih_y = prove_by_refinement(
5793 s_leaf V [u0; u1] HAS_SIZE n /\
5797 ~collinear {u0, u1, w0} /\
5798 critical_edge_y (dist (u0,u1)) /\
5799 leaf_rank V [u0; u1] w0 n f /\
5800 cc_4 V u0 u1 f i ==>
5801 azim_mcell V f u0 u1 i = dih_y (dist(u0,u1)) (dist(u0,f i)) (dist (u0, f(SUC i)))
5802 (dist(f i, f (SUC i))) (dist (u1,f (SUC i))) (dist (u1, f i))`,
5805 REPEAT WEAKER_STRIP_TAC;
5806 INTRO_TAC LEAF_RANK_REUHADY [`V`;`[u0;u1]`;`w0`;`n`;`f`;`i`];
5807 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
5808 DISCH_THEN SUBST1_TAC;
5809 INTRO_TAC CC_4_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
5811 REPEAT WEAKER_STRIP_TAC;
5812 INTRO_TAC MCELL4_AZIM_LT_PI [`V`;`[u0;u1;f i;f(SUC i)]`;`w0`;`n`;`f`;`i`];
5813 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
5815 BY(ASM_MESON_TAC[]);
5817 INTRO_TAC Leaf_cell.GBEWYFX [`V`;`[u0;u1;f i]`];
5818 ASM_REWRITE_TAC[set_of_list];
5819 INTRO_TAC Leaf_cell.GBEWYFX [`V`;`[u0;u1;f (SUC i)]`];
5820 ASM_REWRITE_TAC[set_of_list];
5821 REPEAT WEAKER_STRIP_TAC;
5822 INTRO_TAC AZIM_DIHV_SAME [`u0`;`u1`;`f i`;`f(SUC i)`];
5824 DISCH_THEN SUBST1_TAC;
5825 INTRO_TAC Merge_ineq.DIHV_EQ_DIH_Y [`u0`;`u1`;`f i`;`f (SUC i)`];
5826 BY(ASM_REWRITE_TAC[LET_DEF;LET_END_DEF])
5830 let NOT_COPLANAR_IMP_CARD4_ALT = prove_by_refinement(
5831 `!(u0:real^3) u1 u2 u3. ~coplanar {u0,u1,u2,u3} ==> CARD {u0,u1,u2,u3} = 4`,
5834 REPEAT WEAKER_STRIP_TAC;
5835 MATCH_MP_TAC Collect_geom2.NOT_COPLANAR_IMP_CARD4;
5836 BY(ASM_MESON_TAC[Leaf_cell.coplanar_eq_coplanar_alt;DIMINDEX_3;arith `2 <= 3`])
5840 let radius_le_circumradius = prove_by_refinement(
5841 `!(u0:real^3) u1 u2 u3. ~coplanar {u0,u1,u2,u3} ==>
5842 dist(u0,u1) <= &2 * radV {u0,u1,u2,u3}`,
5845 REPEAT WEAKER_STRIP_TAC;
5846 INTRO_TAC NOT_COPLANAR_IMP_CARD4_ALT [`u0`;`u1`;`u2`;`u3`];
5849 INTRO_TAC Rogers.AFFINE_HULL_RADV [`{u0,u1,u2,u3}`;`{u0,u1}`];
5852 BY(ASM_MESON_TAC[AFF_DEP_COPLANAR]);
5855 REPEAT WEAKER_STRIP_TAC;
5856 REWRITE_TAC[arith `x <= &2 * y <=> inv (&2) * x <= y`];
5857 TYPED_ABBREV_TAC `d = inv(&2) * dist(u0,u1)` ;
5858 TYPED_ABBREV_TAC `r = radV {u0,u1,u2,u3}` ;
5859 TYPIFY `d pow 2 <= r pow 2` (C SUBGOAL_THEN ASSUME_TAC);
5861 REWRITE_TAC[arith `x <= x + y <=> &0 <= y`];
5862 BY(REWRITE_TAC[ REAL_LE_POW_2]);
5863 GMATCH_SIMP_TAC Collect_geom.POW2_COND;
5864 BY(ASM_REWRITE_TAC[])
5868 let radius_le_circumradius_all = prove_by_refinement(
5869 `!(u0:real^3) u1 u2 u3. ~coplanar {u0,u1,u2,u3} ==>
5870 dist(u0,u1) <= &2 * radV {u0,u1,u2,u3} /\
5871 dist(u0,u2) <= &2 * radV {u0,u1,u2,u3} /\
5872 dist(u0,u3) <= &2 * radV {u0,u1,u2,u3} /\
5873 dist(u1,u2) <= &2 * radV {u0,u1,u2,u3} /\
5874 dist(u1,u3) <= &2 * radV {u0,u1,u2,u3} /\
5875 dist(u2,u3) <= &2 * radV {u0,u1,u2,u3}
5879 REPEAT WEAKER_STRIP_TAC;
5880 FIRST_ASSUM (ASSUME_TAC o (MATCH_MP NOT_COPLANAR_IMP_CARD4_ALT ));
5881 TYPIFY `!u v. ~(u= v) /\ {u,v} SUBSET {u0,u1,u2,u3} ==> dist(u,v) <= &2 * radV {u0,u1,u2,u3}` (C SUBGOAL_THEN ASSUME_TAC);
5882 REPEAT WEAKER_STRIP_TAC;
5883 INTRO_TAC Leaf_cell.SET2_INSERT2 [`u`;`v`;`u0`;`u1`;`u2`;`u3`];
5885 REPEAT WEAKER_STRIP_TAC;
5887 MATCH_MP_TAC radius_le_circumradius;
5888 BY(ASM_MESON_TAC[]);
5889 FIRST_X_ASSUM (ASSUME_TAC o (MATCH_MP Leaf_cell.CARD4_ALL_DISTINCT));
5890 BY(REPLICATE_TAC 6 (TRY CONJ_TAC THEN TRY (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[] THEN TRY (SET_TAC[])))
5894 let MCELL4_DOMAIN = prove_by_refinement(
5895 `!V u0 u1 w0 n f i. pack_nonlinear_non_ox3q1h /\
5899 s_leaf V [u0; u1] HAS_SIZE n /\
5903 ~collinear {u0, u1, w0} /\
5904 critical_edge_y (dist (u0,u1)) /\
5905 leaf_rank V [u0; u1] w0 n f /\
5908 &2 * hminus <= dist(u0,u1) /\ dist(u0,u1) <= &2 * hplus /\
5909 &2 <= dist(u0,f i) /\ dist(u0,f i) < &2 * sqrt(&2) /\
5910 &2 <= dist(u0,f (SUC i)) /\ dist(u0,f (SUC i)) < &2 * sqrt(&2) /\
5911 &2 <= dist(f i, f (SUC i)) /\ dist(f i,f (SUC i)) < &2 * sqrt(&2) /\
5912 &2 <= dist(u1,f i) /\ dist(u1,f i) < &2 * sqrt(&2) /\
5913 &2 <= dist(u1,f (SUC i)) /\ dist(u1,f (SUC i)) < &2 * sqrt(&2) /\
5914 rad2_y (dist(u0,u1)) (dist(u0,f i)) (dist (u0, f(SUC i)))
5915 (dist(f i, f (SUC i))) (dist (u1,f (SUC i))) (dist (u1, f i)) < &2 /\
5916 &0 < delta_y (dist(u0,u1)) (dist(u0,f i)) (dist (u0, f(SUC i)))
5917 (dist(f i, f (SUC i))) (dist (u1,f (SUC i))) (dist (u1, f i))
5921 REPEAT WEAKER_STRIP_TAC;
5922 INTRO_TAC CC_4_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
5924 BY(ASM_REWRITE_TAC[]);
5925 REPEAT WEAKER_STRIP_TAC;
5926 INTRO_TAC GDRQXLGv3 [`u0`;`u1`;`f i`;`f (SUC i)`];
5927 ASM_REWRITE_TAC[LET_DEF;LET_END_DEF];
5929 INTRO_TAC coplanar_delta_y [`u0`;`u1`;`f i`;`f (SUC i)`];
5933 INTRO_TAC NOT_COPLANAR_NOT_COLLINEAR [`u0`;`f i`;`f (SUC i)`;`u1`];
5935 TYPIFY `{u0, f i, f (SUC i), u1} = {u0,u1,f i,f (SUC i)}` (C SUBGOAL_THEN SUBST1_TAC);
5937 BY(ASM_REWRITE_TAC[]);
5938 REWRITE_TAC[Collect_geom2.NOT_COL_EQ_UPS_X_POS];
5940 INTRO_TAC Packing3.BARV_SUBSET [`V`;`3`;`[u0;u1;f i;f (SUC i)]`];
5941 ASM_REWRITE_TAC[set_of_list];
5942 REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY];
5943 REPEAT WEAKER_STRIP_TAC;
5944 INTRO_TAC MCELL4_CARD4 [`V`;`[u0;u1;f i;f (SUC i)]`];
5946 BY(ASM_MESON_TAC[]);
5947 REWRITE_TAC[Bump.EL_EXPLICIT];
5948 DISCH_THEN (ASSUME_TAC o (MATCH_MP Leaf_cell.CARD4_ALL_DISTINCT));
5949 TYPIFY `&2 <= dist(u0,u1) /\ &2 <= dist (u0,f i) /\ &2 <= dist(u0,f(SUC i)) /\ &2 <= dist(u1, f i) /\ &2 <= dist(u1,f(SUC i)) /\ &2 <= dist (f i, f (SUC i))` (C SUBGOAL_THEN ASSUME_TAC);
5950 TYPIFY `!u v. u IN V /\ v IN V /\ ~(u = v) ==> &2 <= dist(u,v)` ENOUGH_TO_SHOW_TAC;
5952 BY(ASM_MESON_TAC[]);
5954 REPEAT WEAKER_STRIP_TAC;
5955 FIRST_X_ASSUM_ST `packing` MP_TAC;
5956 REWRITE_TAC[Sphere.packing];
5957 DISCH_THEN MATCH_MP_TAC;
5958 BY(ASM_REWRITE_TAC[]);
5960 TYPIFY `&2 * hminus <= dist (u0,u1) /\ dist (u0,u1) <= &2 * hplus` (C SUBGOAL_THEN ASSUME_TAC);
5961 FIRST_X_ASSUM_ST `critical_edge_y` MP_TAC;
5962 BY(MESON_TAC[Sphere.critical_edge_y]);
5964 REWRITE_TAC[Sphere.rad2_y;Sphere.y_of_x];
5965 FIRST_ASSUM (MP_TAC o (MATCH_MP radius_le_circumradius_all));
5966 REPEAT WEAKER_STRIP_TAC;
5967 REWRITE_TAC[arith `x * x = x pow 2`];
5968 FIRST_X_ASSUM_ST `rad2_x` (SUBST1_TAC o GSYM);
5969 TYPIFY `radV {u0,u1,f i,f (SUC i)} < sqrt(&2)` (C SUBGOAL_THEN ASSUME_TAC);
5970 FIRST_X_ASSUM_ST `hl` MP_TAC;
5971 BY(REWRITE_TAC[Pack_defs.HL;set_of_list]);
5972 TYPED_ABBREV_TAC `r = radV {u0,u1,f i,f (SUC i)}` ;
5973 TYPIFY `!x. x <= &2 * r /\ r < sqrt(&2) ==> x < &2 * sqrt(&2)` (C SUBGOAL_THEN ASSUME_TAC);
5976 REWRITE_TAC[GSYM Nonlin_def.sqrt2_sqrt2;GSYM Sphere.sqrt2;arith `x * x = x pow 2`];
5977 GMATCH_SIMP_TAC (GSYM Collect_geom2.LT_POW2_COND);
5978 ASM_REWRITE_TAC[Sphere.sqrt2];
5979 GMATCH_SIMP_TAC SQRT_POS_LE;
5980 FIRST_X_ASSUM_ST `dist(u0,u1) <= &2 * r` MP_TAC;
5981 BY(MESON_TAC[arith `&0 <= d /\ d <= &2 * r ==> &0 <= r`;arith `&0 <= &2`;DIST_POS_LE])
5985 let real_model_azim_c4 = prove_by_refinement(
5986 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
5990 s_leaf V [u0; u1] HAS_SIZE n /\
5994 ~collinear {u0, u1, w0} /\
5995 critical_edge_y (dist (u0,u1)) /\
5996 leaf_rank V [u0; u1] w0 n f
5997 ==> (!i. cc_4 V u0 u1 f i ==> azim_mcell V f u0 u1 i < #2.8)`,
6000 REPEAT WEAKER_STRIP_TAC;
6001 INTRO_TAC c_4_azim_mcell_dih_y [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6003 DISCH_THEN SUBST1_TAC;
6004 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6006 REPEAT WEAKER_STRIP_TAC;
6007 INTRO_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "BIXPCGW 6652007036 a2") [];
6008 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
6009 DISCH_THEN MATCH_MP_TAC;
6010 REWRITE_TAC[Nonlinear_lemma.sqrt8_sqrt2;Sphere.sqrt2];
6011 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`])
6015 (* renamed from gammaX_gamm4fgcy_ALT *)
6017 let gammaX_gamma4fgcy_ALT = prove_by_refinement(
6021 barV V 3 [u0;u1;u2;u3] /\
6022 X = mcell4 V [u0;u1;u2;u3] /\
6024 ==> gammaX V X lmfun =
6025 gamma4fgcy (dist(u0,u1)) (dist(u0,u2)) (dist(u0,u3)) (dist(u2,u3)) (dist(u1,u3)) (dist(u1,u2)) lmfun`,
6028 REPEAT WEAKER_STRIP_TAC;
6029 BY(ASM_MESON_TAC[arith `4 >= 4`;Bump.MCELL4;Tskajxy_lemmas.gammaX_gamm4fgcy])
6033 let GG_MCELL_QUARTER = prove_by_refinement(
6034 `!V u0 u1 w0 n f i. pack_nonlinear_non_ox3q1h /\
6038 s_leaf V [u0; u1] HAS_SIZE n /\
6042 ~collinear {u0, u1, w0} /\
6043 critical_edge_y (dist (u0,u1)) /\
6045 (dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
6046 dist (u0,f (SUC i)) < &2 * hminus /\
6047 dist (u1,f (SUC i)) < &2 * hminus /\
6048 dist (f i,f (SUC i)) < &2 * hminus /\
6049 leaf_rank V [u0; u1] w0 n f ==>
6050 gg_mcell V f u0 u1 i = gamma4fgcy (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i)))
6051 (dist (f i,f (SUC i)))
6052 (dist (u1,f (SUC i)))
6057 REPEAT WEAKER_STRIP_TAC;
6058 INTRO_TAC CC_4_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6060 BY(ASM_REWRITE_TAC[]);
6061 REPEAT WEAKER_STRIP_TAC;
6062 GMATCH_SIMP_TAC cc_4_cc_cell;
6064 BY(ASM_MESON_TAC[]);
6065 GMATCH_SIMP_TAC gammaX_gamma4fgcy_ALT;
6066 GEXISTL_TAC [`u0`;`f (SUC i)`;`u1`;`f i`];
6068 BY(ASM_MESON_TAC[]);
6069 GMATCH_SIMP_TAC critical_weight_wtcount6_y;
6071 BY(ASM_MESON_TAC[]);
6072 GMATCH_SIMP_TAC CC_4_BETA_BUMP_0;
6074 GEXISTL_TAC [`w0`;`n`];
6075 ASM_REWRITE_TAC[Sphere.critical_edge_y];
6076 BY(ASM_MESON_TAC[arith `d < t ==> ~(t <= d)`]);
6077 TYPIFY `(wtcount6_y (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i))) (dist (f i,f (SUC i))) (dist (u1,f (SUC i))) (dist (u1,f i))) = 1` (C SUBGOAL_THEN SUBST1_TAC);
6078 ASM_REWRITE_TAC[Sphere.wtcount6_y;Sphere.wtcount3_y];
6079 ASM_REWRITE_TAC[arith `x <= y <=> ~(y < x)`;Sphere.critical_edge_y];
6085 let GG_MCELL_BETA = prove_by_refinement(
6086 `!V u0 u1 w0 n f i. pack_nonlinear_non_ox3q1h /\
6090 s_leaf V [u0; u1] HAS_SIZE n /\
6094 ~collinear {u0, u1, w0} /\
6095 critical_edge_y (dist (u0,u1)) /\
6097 (dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
6098 dist (u0,f (SUC i)) < &2 * hminus /\
6099 dist (u1,f (SUC i)) < &2 * hminus /\
6100 critical_edge_y (dist(f i, f (SUC i))) /\
6101 leaf_rank V [u0; u1] w0 n f ==>
6102 gg_mcell V f u0 u1 i = (gamma4fgcy (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i)))
6103 (dist (f i,f (SUC i)))
6104 (dist (u1,f (SUC i)))
6107 bump (dist (u0,u1) / &2) - bump (dist (f i,f (SUC i)) / &2)
6111 REPEAT WEAKER_STRIP_TAC;
6112 INTRO_TAC CC_4_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6114 BY(ASM_REWRITE_TAC[]);
6115 REPEAT WEAKER_STRIP_TAC;
6116 GMATCH_SIMP_TAC cc_4_cc_cell;
6118 BY(ASM_MESON_TAC[]);
6119 GMATCH_SIMP_TAC gammaX_gamma4fgcy_ALT;
6120 GEXISTL_TAC [`u0`;`f (SUC i)`;`u1`;`f i`];
6122 BY(ASM_MESON_TAC[]);
6123 GMATCH_SIMP_TAC critical_weight_wtcount6_y;
6125 BY(ASM_MESON_TAC[]);
6126 GMATCH_SIMP_TAC CC_4_BETA_BUMP_EXPLICIT;
6128 GEXISTL_TAC [`w0`;`n`];
6129 BY(ASM_REWRITE_TAC[]);
6130 TYPIFY `(wtcount6_y (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i))) (dist (f i,f (SUC i))) (dist (u1,f (SUC i))) (dist (u1,f i))) = 2` (C SUBGOAL_THEN SUBST1_TAC);
6131 ASM_REWRITE_TAC[Sphere.wtcount6_y;Sphere.wtcount3_y];
6132 ASM_REWRITE_TAC[arith `x <= y <=> ~(y < x)`;Sphere.critical_edge_y];
6138 let beta_bumpA_y_NONBETA = prove_by_refinement(
6139 `!y1 y2 y3 y4 y5 y6. ~(critical_edge_y y1 /\ critical_edge_y y4 /\ y2 < &2 * hminus /\ y3 < &2 * hminus /\ y5 < &2 * hminus /\ y6 < &2 * hminus)
6140 ==> beta_bumpA_y y1 y2 y3 y4 y5 y6 = &0`,
6143 REWRITE_TAC[Sphere.beta_bumpA_y];
6144 REWRITE_TAC[Sphere.beta_bumpA_y;DE_MORGAN_THM];
6145 REPEAT WEAKER_STRIP_TAC;
6146 BY(REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC THEN ASM_REWRITE_TAC[] THEN TRY REAL_ARITH_TAC))
6150 let GG_MCELL_NONBETA = prove_by_refinement(
6151 `!V u0 u1 w0 n f i. pack_nonlinear_non_ox3q1h /\
6155 s_leaf V [u0; u1] HAS_SIZE n /\
6159 ~collinear {u0, u1, w0} /\
6160 critical_edge_y (dist (u0,u1)) /\
6162 ~((dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
6163 dist (u0,f (SUC i)) < &2 * hminus /\
6164 dist (u1,f (SUC i)) < &2 * hminus /\
6165 critical_edge_y (dist(f i, f (SUC i)))) /\
6166 leaf_rank V [u0; u1] w0 n f ==>
6167 gg_mcell V f u0 u1 i = (gamma4fgcy (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i)))
6168 (dist (f i,f (SUC i)))
6169 (dist (u1,f (SUC i)))
6172 &(wtcount6_y (dist(u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i)))
6173 (dist (f i,f (SUC i))) (dist (u1,f (SUC i))) (dist (u1,f i)))
6177 REPEAT WEAKER_STRIP_TAC;
6178 INTRO_TAC CC_4_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6180 BY(ASM_REWRITE_TAC[]);
6181 REPEAT WEAKER_STRIP_TAC;
6182 GMATCH_SIMP_TAC cc_4_cc_cell;
6184 BY(ASM_MESON_TAC[]);
6185 GMATCH_SIMP_TAC gammaX_gamma4fgcy_ALT;
6186 GEXISTL_TAC [`u0`;`f (SUC i)`;`u1`;`f i`];
6188 BY(ASM_MESON_TAC[]);
6189 GMATCH_SIMP_TAC critical_weight_wtcount6_y;
6191 BY(ASM_MESON_TAC[]);
6192 REWRITE_TAC[arith `g * &1/ w + b = g / w <=> b = &0`];
6193 GMATCH_SIMP_TAC CC_4_BETA_BUMP_0;
6194 GEXISTL_TAC [`w0`;`n`];
6196 REPEAT WEAKER_STRIP_TAC;
6197 FIRST_X_ASSUM_ST `/\` MP_TAC;
6198 BY(ASM_REWRITE_TAC[])
6202 let GG_MCELL_GENERAL = prove_by_refinement(
6203 `!V u0 u1 w0 n f i. pack_nonlinear_non_ox3q1h /\
6207 s_leaf V [u0; u1] HAS_SIZE n /\
6211 ~collinear {u0, u1, w0} /\
6212 critical_edge_y (dist (u0,u1)) /\
6214 leaf_rank V [u0; u1] w0 n f ==>
6215 gg_mcell V f u0 u1 i =
6216 gamma4fgcy (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i)))
6217 (dist (f i,f (SUC i)))
6218 (dist (u1,f (SUC i)))
6221 &(wtcount6_y (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i)))
6222 (dist (f i,f (SUC i)))
6223 (dist (u1,f (SUC i)))
6225 beta_bumpA_y (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i)))
6226 (dist (f i,f (SUC i)))
6227 (dist (u1,f (SUC i)))
6231 REPEAT WEAKER_STRIP_TAC;
6232 INTRO_TAC CC_4_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6234 BY(ASM_REWRITE_TAC[]);
6235 REPEAT WEAKER_STRIP_TAC;
6236 GMATCH_SIMP_TAC cc_4_cc_cell;
6238 BY(ASM_MESON_TAC[]);
6239 GMATCH_SIMP_TAC gammaX_gamma4fgcy_ALT;
6240 GEXISTL_TAC [`u0`;`f (SUC i)`;`u1`;`f i`];
6242 BY(ASM_MESON_TAC[]);
6243 GMATCH_SIMP_TAC critical_weight_wtcount6_y;
6245 BY(ASM_MESON_TAC[]);
6246 REWRITE_TAC[arith `x * &1 / w = x / w`;arith `g + b = g + b' <=> b = b'`];
6247 REWRITE_TAC[Sphere.beta_bumpA_y];
6248 TYPIFY`critical_edge_y (dist (u0,u1)) /\ (dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\ dist (u0,f (SUC i)) < &2 * hminus /\ dist (u1,f (SUC i)) < &2 * hminus /\ critical_edge_y (dist(f i, f (SUC i)))` ASM_CASES_TAC;
6250 FIRST_X_ASSUM_ST `mcell4` (SUBST1_TAC o GSYM);
6251 GMATCH_SIMP_TAC CC_4_BETA_BUMP_EXPLICIT;
6253 GEXISTL_TAC [`w0`;`n`];
6254 BY(ASM_REWRITE_TAC[]);
6257 FIRST_X_ASSUM_ST `mcell4` (SUBST1_TAC o GSYM);
6258 GMATCH_SIMP_TAC CC_4_BETA_BUMP_0;
6260 GEXISTL_TAC [`w0`;`n`];
6261 ASM_REWRITE_TAC[Sphere.critical_edge_y];
6262 BY(ASM_MESON_TAC[Sphere.critical_edge_y;arith `d < t ==> ~(t <= d)`]);
6263 FIRST_X_ASSUM (ASSUME_TAC o (REWRITE_RULE[DE_MORGAN_THM;Sphere.critical_edge_y]));
6264 FIRST_X_ASSUM_ST `critical_edge_y` MP_TAC;
6265 REWRITE_TAC[Sphere.critical_edge_y];
6266 BY(REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC THEN ASM_REWRITE_TAC[] THEN TRY REAL_ARITH_TAC))
6270 let real_model_gamma_qu = prove_by_refinement(
6271 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
6275 s_leaf V [u0; u1] HAS_SIZE n /\
6279 ~collinear {u0, u1, w0} /\
6280 critical_edge_y (dist (u0,u1)) /\
6281 leaf_rank V [u0; u1] w0 n f
6283 (!i. cc_4 V u0 u1 f i /\
6284 (dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
6285 dist (u0,f (SUC i)) < &2 * hminus /\
6286 dist (u1,f (SUC i)) < &2 * hminus /\
6287 dist (f i,f (SUC i)) < &2 * hminus
6288 ==> -- #0.0057 <= gg_mcell V f u0 u1 i)
6292 REPEAT WEAKER_STRIP_TAC;
6293 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6295 REPEAT WEAKER_STRIP_TAC;
6296 REWRITE_TAC[Oxl_def.cc_eps];
6297 MATCH_MP_TAC (arith `y > -- #0.00569 ==> -- #0.0057 <= y`);
6298 INTRO_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "BIXPCGW 9455898160") [];
6299 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
6300 GMATCH_SIMP_TAC GG_MCELL_QUARTER;
6302 BY(ASM_MESON_TAC[]);
6303 DISCH_THEN MATCH_MP_TAC;
6305 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`])
6309 let ETA_Y_POS_LE_ALT = prove_by_refinement(
6310 `!u0 u1 (u2:real^3). &0 <= eta_y (dist (u0,u1)) (dist (u0,u2)) (dist (u1,u2)) `,
6313 BY(MESON_TAC[Collect_geom2.ETA_Y_POS_LE;Geomdetail.dist3])
6317 let ETA_Y_LEMMA = prove_by_refinement(
6318 `!u0 u1 (u2:real^3) r. ~collinear {u0,u1,u2} /\ &0 < r /\ r <= hl[u0;u1;u2] ==>
6319 r pow 2 <= eta_y (dist (u0,u1)) (dist (u0,u2)) (dist (u1,u2)) pow 2 `,
6322 REPEAT WEAKER_STRIP_TAC;
6323 GMATCH_SIMP_TAC (GSYM Collect_geom.POW2_COND_LT);
6324 MATCH_MP_TAC (TAUT `a /\ b ==> b /\ a`);
6326 GMATCH_SIMP_TAC (GSYM RADV_ETAY);
6328 FIRST_X_ASSUM_ST `hl` MP_TAC;
6329 BY(REWRITE_TAC[Pack_defs.HL;set_of_list]);
6330 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC)
6334 let ETA_Y_LEMMA_ALT = prove_by_refinement(
6335 `!u0 u1 (u2:real^3) r. ~collinear {u0,u1,u2} /\ hl[u0;u1;u2] <= r ==>
6336 eta_y (dist (u0,u1)) (dist (u0,u2)) (dist (u1,u2)) pow 2 <= r pow 2`,
6339 REPEAT WEAKER_STRIP_TAC;
6340 GMATCH_SIMP_TAC (GSYM Collect_geom.POW2_COND);
6341 MATCH_MP_TAC (TAUT `a /\ b ==> b /\ a`);
6343 GMATCH_SIMP_TAC (GSYM RADV_ETAY);
6345 FIRST_X_ASSUM_ST `hl` MP_TAC;
6346 BY(REWRITE_TAC[Pack_defs.HL;set_of_list]);
6349 BY(ASM_REWRITE_TAC[ETA_Y_POS_LE_ALT]);
6350 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC)
6354 let real_model_fhbv2 = prove_by_refinement(
6355 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
6359 s_leaf V [u0; u1] HAS_SIZE n /\
6363 ~collinear {u0, u1, w0} /\
6364 critical_edge_y (dist (u0,u1)) /\
6365 leaf_rank V [u0; u1] w0 n f
6367 (!i. (cc_4 V u0 u1 f i /\
6368 (dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
6369 dist (u0,f (SUC i)) < &2 * hminus /\
6370 dist (u1,f (SUC i)) < &2 * hminus /\
6371 dist (f i,f (SUC i)) < &2 * hminus) /\
6372 ~(hl [u0; u1; f (SUC i)] < #1.34)
6373 ==> #0.0057 <= gg_mcell V f u0 u1 i)
6377 REPEAT WEAKER_STRIP_TAC;
6378 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6380 REPEAT WEAKER_STRIP_TAC;
6381 MATCH_MP_TAC (arith `y > #0.0057 ==> #0.0057 <= y`);
6382 INTRO_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "FHBVYXZv2 a") [];
6383 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
6384 REWRITE_TAC[GSYM Sphere.rad2_y];
6385 ONCE_REWRITE_TAC[TAUT `(r ==> a \/ b \/ c) <=> ((r /\ ~b /\ ~c) ==> a)`];
6386 GMATCH_SIMP_TAC GG_MCELL_QUARTER;
6388 BY(ASM_MESON_TAC[]);
6389 DISCH_THEN MATCH_MP_TAC;
6391 (ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
6393 MATCH_MP_TAC (arith `r < &2 ==> ~( r > &2)`);
6394 BY(ASM_REWRITE_TAC[]);
6395 REWRITE_TAC[arith `~(x < y ) <=> y <= x`];
6396 MATCH_MP_TAC ETA_Y_LEMMA;
6397 INTRO_TAC CC_4_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6399 BY(ASM_REWRITE_TAC[]);
6400 REPEAT WEAKER_STRIP_TAC;
6402 FIRST_X_ASSUM_ST `#1.34` MP_TAC;
6407 let real_model_fhbv2_sym = prove_by_refinement(
6408 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
6412 s_leaf V [u0; u1] HAS_SIZE n /\
6416 ~collinear {u0, u1, w0} /\
6417 critical_edge_y (dist (u0,u1)) /\
6418 leaf_rank V [u0; u1] w0 n f
6420 (!i. (cc_4 V u0 u1 f i /\
6421 (dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
6422 dist (u0,f (SUC i)) < &2 * hminus /\
6423 dist (u1,f (SUC i)) < &2 * hminus /\
6424 dist (f i,f (SUC i)) < &2 * hminus) /\
6425 ~(hl [u0; u1; f i] < #1.34)
6426 ==> #0.0057 <= gg_mcell V f u0 u1 i)`,
6429 REPEAT WEAKER_STRIP_TAC;
6430 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6432 REPEAT WEAKER_STRIP_TAC;
6433 MATCH_MP_TAC (arith `y > #0.0057 ==> #0.0057 <= y`);
6434 INTRO_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "FHBVYXZv2 a") [];
6435 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
6436 REWRITE_TAC[GSYM Sphere.rad2_y];
6437 ONCE_REWRITE_TAC[TAUT `(r ==> a \/ b \/ c) <=> ((r /\ ~b /\ ~c) ==> a)`];
6438 GMATCH_SIMP_TAC GG_MCELL_QUARTER;
6440 BY(ASM_MESON_TAC[]);
6442 ONCE_REWRITE_TAC[Merge_ineq.gamma4fgcy_sym23];
6443 FIRST_X_ASSUM MATCH_MP_TAC;
6445 (ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
6447 MATCH_MP_TAC (arith `r < &2 ==> ~( r > &2)`);
6448 FIRST_X_ASSUM_ST `rad2_y` MP_TAC;
6449 BY(MESON_TAC[Merge_ineq.rad2_y_sym]);
6450 REWRITE_TAC[arith `~(x < y ) <=> y <= x`];
6451 MATCH_MP_TAC ETA_Y_LEMMA;
6452 INTRO_TAC CC_4_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6454 BY(ASM_REWRITE_TAC[]);
6455 REPEAT WEAKER_STRIP_TAC;
6457 FIRST_X_ASSUM_ST `#1.34` MP_TAC;
6462 let CC_3_PROPS = prove_by_refinement(
6464 pack_nonlinear_non_ox3q1h /\
6467 leaf_rank V [u0;u1] w0 n f /\
6468 ~collinear {u0,u1,w0} /\
6469 critical_edge_y (dist(u0,u1)) /\
6470 s_leaf V [u0;u1] HAS_SIZE n /\
6472 ~cc_4 V u0 u1 f i ==>
6473 cc_ke V [u0; u1; f i] = 3 /\
6474 barV V 3 (cc_uh V ([u0;u1;f i])) /\
6475 barV V 3 (cc_uh V ([u1;u0;f (SUC i)])) /\
6476 beta_bump_v1 V {u0,u1} (cc_cell V [u0;u1;f i]) = &0 /\
6477 beta_bump_v1 V {u0,u1} (cc_cell V [u1;u0;f (SUC i)]) = &0 /\
6478 cc_ke V [u1;u0;f (SUC i)] = 3 /\
6479 cc_cell V [u0;u1;f i] SUBSET wedge_ge u0 u1 (f i) (f (SUC i)) /\
6480 cc_cell V [u1;u0;f(SUC i)] SUBSET wedge_ge u0 u1 (f i) (f (SUC i)) /\
6481 ~(cc_cell V [u0;u1;f i] = cc_cell V [u1;u0;f (SUC i)]) /\
6482 cc_cell V [u0; u1; f i] SUBSET wedge_ge u0 u1 (f i) (f (SUC i)) /\
6483 ~collinear {u0,u1,f i} /\
6484 ~collinear {u0,u1,f (SUC i)} /\
6485 hl [u0;u1;f i] < sqrt(&2) /\
6486 hl [u0;u1; f(SUC i)] < sqrt(&2) /\
6487 hl [u1;u0; f(SUC i)] < sqrt(&2) /\
6488 leaf V [u0; u1; f i] /\
6489 leaf V [u0; u1; f (SUC i)] /\
6490 leaf V [u1; u0; f (SUC i)] /\
6491 &2 <= dist(u0,u1) /\
6492 &2 <= dist(u0,f i) /\
6493 &2 <= dist(u0,f(SUC i)) /\
6494 &2 <= dist(u1,f i) /\
6495 &2 <= dist(u1,f(SUC i)) /\
6496 dist(u0,u1) <= &2 * sqrt(&2) /\
6497 dist(u0,f i) <= &2 * sqrt(&2) /\
6498 dist(u0,f (SUC i)) <= &2 * sqrt(&2) /\
6499 dist(u1,f i) <= &2 * sqrt(&2) /\
6500 dist(u1,f (SUC i)) <= &2 * sqrt(&2) /\
6501 eta_y (dist (u0,u1)) (dist(u0,f i)) (dist (u1,f i)) < sqrt(&2) /\
6502 eta_y (dist (u0,u1)) (dist(u0,f (SUC i))) (dist (u1,f (SUC i))) < sqrt(&2) /\
6503 ~NULLSET (cc_cell V [u0; u1; f i]) /\
6504 ~NULLSET (cc_cell V [u1; u0; f (SUC i)]) /\
6505 azim_mcell V f u0 u1 i = azim u0 u1 (f i) (f (SUC i)) /\
6507 y4 <= &2 * sqrt (&2) /\
6508 &0 < delta_y (dist(u0,u1)) (dist(u0,f i)) (dist(u0, f(SUC i))) y4 (dist(u1,f(SUC i))) (dist(u1,f i)) /\
6509 dih_y (dist(u0,u1)) (dist(u0,f i)) (dist(u0, f(SUC i))) y4 (dist(u1,f(SUC i))) (dist(u1,f i)) <= azim u0 u1 (f i) (f (SUC i)) /\
6510 &2 <= rad2_y (dist(u0,u1)) (dist(u0,f i)) (dist(u0, f(SUC i))) y4 (dist(u1,f(SUC i))) (dist(u1,f i)) /\
6511 (azim u0 u1 (f i) (f (SUC i)) < pi /\
6512 dist (f i,f (SUC i)) <= &2 * sqrt (&2)
6513 ==> y4 = dist (f i,f (SUC i))))
6518 REPEAT WEAKER_STRIP_TAC;
6519 INTRO_TAC NO_4CELL_IMP_K3 [`V`;`wedge_ge u0 u1 (f i) (f (SUC i))`;`[u0;u1]`;`w0`;`n`;`f`;`i`];
6520 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
6521 REPEAT WEAKER_STRIP_TAC;
6523 REWRITE_TAC[TAUT `a /\ b /\ c <=> (a /\ b) /\ c`];
6525 REWRITE_TAC[TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
6526 MATCH_MP_TAC WEDGE3_Y4;
6527 GEXISTL_TAC [`V`;`w0`;`n`];
6528 BY(ASM_REWRITE_TAC[]);
6530 INTRO_TAC LEAF_RANK_REUHADY [`V`;`[u0;u1]`;`w0`;`n`;`f`;`i`];
6531 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT]);
6532 TYPIFY `leaf V [u0;u1;f i] /\ leaf V [u0;u1;f (SUC i)]` (C SUBGOAL_THEN ASSUME_TAC);
6533 BY(ASM_MESON_TAC[ LEAF_RANK_LEAF]);
6534 TYPIFY ` s_leaf V [u0;u1] (f (SUC i) )` (C SUBGOAL_THEN ASSUME_TAC);
6535 MATCH_MP_TAC LEAF_RANK_S_LEAF;
6536 BY(ASM_MESON_TAC[]);
6537 TYPIFY `leaf V [u1;u0;f (SUC i)]` (C SUBGOAL_THEN ASSUME_TAC);
6538 INTRO_TAC s_leaf_leaf [`V`;`[u1;u0]`;`f(SUC i)`];
6539 REWRITE_TAC[IN;Bump.EL_EXPLICIT];
6540 DISCH_THEN MATCH_MP_TAC;
6541 BY(ASM_MESON_TAC[S_LEAF_SYM]);
6543 BY(ASM_MESON_TAC[Leaf_cell.CC_CELL_NOT_NULLSET]);
6546 BY(ASM_MESON_TAC[Leaf_cell.CC_CELL_NOT_NULLSET]);
6548 INTRO_TAC Leaf_cell.GBEWYFX [`V`;`[u0;u1;f i]`];
6550 INTRO_TAC Leaf_cell.GBEWYFX [`V`;`[u0;u1;f (SUC i)]`];
6551 ASM_REWRITE_TAC[set_of_list];
6552 REPEAT WEAKER_STRIP_TAC THEN ASM_REWRITE_TAC[];
6553 INTRO_TAC LEAF_DOMAIN [`V`;`[u0;u1;f i]`];
6554 INTRO_TAC LEAF_DOMAIN [`V`;`[u1;u0;f (SUC i)]`];
6555 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
6556 REPEAT WEAKER_STRIP_TAC;
6558 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
6560 REPEAT (FIRST_X_ASSUM_ST `eta_y` MP_TAC);
6561 BY(MESON_TAC[DIST_SYM;Collect_geom.ETA_Y_SYYM]);
6562 REWRITE_TAC[TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
6564 BY(ASM_MESON_TAC[ Leaf_cell.cc_uh;IN]);
6567 BY(ASM_MESON_TAC[Leaf_cell.cc_uh;IN]);
6569 REPEAT (FIRST_X_ASSUM_ST `NULLSET` MP_TAC);
6570 ASM_REWRITE_TAC[Leaf_cell.cc_cell];
6571 REPEAT WEAKER_STRIP_TAC;
6572 REPEAT (GMATCH_SIMP_TAC Bump.MCELL_BUMP_0);
6573 ASM_REWRITE_TAC[arith `3 < 4`];
6574 REPEAT (FIRST_X_ASSUM_ST `leaf` MP_TAC);
6575 REWRITE_TAC[Leaf_cell.leaf];
6576 BY(MESON_TAC[Sphere.sqrt2])
6580 let real_model_gckb = prove_by_refinement(
6581 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
6585 s_leaf V [u0; u1] HAS_SIZE n /\
6589 ~collinear {u0, u1, w0} /\
6590 critical_edge_y (dist (u0,u1)) /\
6591 leaf_rank V [u0; u1] w0 n f
6592 ==> (!i. #0.606 <= azim_mcell V f u0 u1 i)`,
6595 REPEAT WEAKER_STRIP_TAC;
6596 MATCH_MP_TAC (arith `y > x ==> x <= y`);
6597 INTRO_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "GCKBQEA") [];
6598 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
6600 TYPIFY `cc_4 V u0 u1 f i` ASM_CASES_TAC;
6601 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6603 REPEAT WEAKER_STRIP_TAC;
6604 INTRO_TAC c_4_azim_mcell_dih_y [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6606 DISCH_THEN SUBST1_TAC;
6607 FIRST_X_ASSUM MATCH_MP_TAC;
6608 ASM_REWRITE_TAC[Nonlinear_lemma.sqrt8_sqrt2;Sphere.sqrt2];
6609 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
6610 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6612 BY(ASM_REWRITE_TAC[]);
6613 REPEAT WEAKER_STRIP_TAC;
6614 FIRST_X_ASSUM_ST `dih_y` MP_TAC;
6616 MATCH_MP_TAC (arith `d > c ==> (d <= a ==> a > c)`);
6617 FIRST_X_ASSUM MATCH_MP_TAC;
6618 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2];
6619 FIRST_X_ASSUM_ST `critical_edge_y` MP_TAC;
6620 BY(MESON_TAC[Sphere.critical_edge_y])
6624 let real_model_sum_azim = prove_by_refinement(
6625 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
6629 s_leaf V [u0; u1] HAS_SIZE n /\
6633 ~collinear {u0, u1, w0} /\
6634 critical_edge_y (dist (u0,u1)) /\
6635 leaf_rank V [u0; u1] w0 n f
6636 ==> sum {i | i < n} (azim_mcell V f u0 u1) = &2 * pi`,
6639 REPEAT WEAKER_STRIP_TAC;
6640 INTRO_TAC LEAF_RANK_GRUTOTI [`V`;`[u0;u1]`;`w0`;`n`;`f`];
6641 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
6642 DISCH_THEN MATCH_MP_TAC;
6643 REWRITE_TAC[Marchal_cells_3.HL_2];
6644 REWRITE_TAC[arith `inv(&2) * x < y <=> x < &2 * y`];
6645 FIRST_X_ASSUM_ST `critical_edge_y` MP_TAC;
6646 REWRITE_TAC[Sphere.critical_edge_y];
6647 TYPIFY `&0 < sqrt(&2) - hplus` ENOUGH_TO_SHOW_TAC;
6649 BY(REWRITE_TAC[Flyspeck_constants.bounds])
6653 let real_model_ox3q1h_merge = prove_by_refinement(
6654 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\ ox3q1h /\
6658 s_leaf V [u0; u1] HAS_SIZE n /\
6662 ~collinear {u0, u1, w0} /\
6663 critical_edge_y (dist (u0,u1)) /\
6664 leaf_rank V [u0; u1] w0 n f
6666 (CARD (s_leaf V [u0; u1]) = 4 /\
6667 (?i. cc_4 V u0 u1 f i /\
6668 (&2 * hminus <= dist (f i,f (SUC i)) /\
6669 dist (f i,f (SUC i)) <= &2 * hplus) /\
6670 (cc_4 V u0 u1 f (SUC i) /\
6671 (dist (u0,f (SUC i)) < &2 * hminus /\
6672 dist (u1,f (SUC i)) < &2 * hminus) /\
6673 dist (u0,f (SUC (SUC i))) < &2 * hminus /\
6674 dist (u1,f (SUC (SUC i))) < &2 * hminus /\
6675 dist (f (SUC i),f (SUC (SUC i))) < &2 * hminus) /\
6676 (cc_4 V u0 u1 f (i + 2) /\
6677 (dist (u0,f (i + 2)) < &2 * hminus /\
6678 dist (u1,f (i + 2)) < &2 * hminus) /\
6679 dist (u0,f (SUC (i + 2))) < &2 * hminus /\
6680 dist (u1,f (SUC (i + 2))) < &2 * hminus /\
6681 dist (f (i + 2),f (SUC (i + 2))) < &2 * hminus) /\
6682 cc_4 V u0 u1 f (i + 3) /\
6683 (dist (u0,f (i + 3)) < &2 * hminus /\
6684 dist (u1,f (i + 3)) < &2 * hminus) /\
6685 dist (u0,f (SUC (i + 3))) < &2 * hminus /\
6686 dist (u1,f (SUC (i + 3))) < &2 * hminus /\
6687 dist (f (i + 3),f (SUC (i + 3))) < &2 * hminus)
6688 ==> &0 <= sum {i | i < n} (gg_mcell V f u0 u1))
6692 REWRITE_TAC[arith `i + 2 = SUC (i + 1) /\ i + 3 = SUC (i + 2) /\ i + 1 = SUC i`];
6693 REPEAT WEAKER_STRIP_TAC;
6694 INTRO_TAC real_model_sum_azim [`V`;`u0`;`u1`;`w0`;`n`;`f`];
6696 BY(ASM_REWRITE_TAC[]);
6697 TYPIFY `{i | i < n} = ( 0..n - 1)` (C SUBGOAL_THEN SUBST1_TAC);
6698 BY(ASM_MESON_TAC[NUMSEG_LT;arith `1 < n==> ~(n = 0)`;HAS_SIZE]);
6699 COMMENT "periodicity";
6700 INTRO_TAC Oxl_def.periodic_sum [`gg_mcell V f u0 u1`;`n`];
6703 BY(ASM_SIMP_TAC[arith `1 < n ==> ~(n = 0)`]);
6704 BY(ASM_MESON_TAC[real_periodic_data;LEAF_RANK_PERIODIC]);
6705 DISCH_THEN (C INTRO_TAC [`i`]);
6706 DISCH_THEN (SUBST1_TAC o GSYM);
6707 INTRO_TAC Oxl_def.periodic_sum [`azim_mcell V f u0 u1`;`n`];
6710 BY(ASM_SIMP_TAC[arith `1 < n ==> ~(n = 0)`]);
6711 BY(ASM_MESON_TAC[real_periodic_data;LEAF_RANK_PERIODIC]);
6712 DISCH_THEN (C INTRO_TAC [`i`]);
6713 DISCH_THEN (SUBST1_TAC o GSYM);
6715 TYPIFY `n = 4` (C SUBGOAL_THEN ASSUME_TAC);
6716 BY(ASM_MESON_TAC[HAS_SIZE]);
6717 ASM_REWRITE_TAC[arith `4 - 1 + i = SUC (SUC (SUC i))`];
6718 REWRITE_TAC[SUM_SING_NUMSEG;SUM_CLAUSES_NUMSEG;arith `i <= SUC(SUC(SUC i)) /\ i <= SUC (SUC i) /\ i <= SUC i`];
6719 REPEAT (FIRST_X_ASSUM_ST `SUC(SUC(SUC(SUC i)))` MP_TAC);
6720 ASM_REWRITE_TAC[arith `SUC(SUC(SUC (SUC i))) = i + 4`];
6721 TYPIFY `f(i) = f (i+4)` (C SUBGOAL_THEN ASSUME_TAC);
6722 BY(ASM_MESON_TAC[Oxl_def.periodic]);
6723 REPEAT WEAKER_STRIP_TAC;
6724 COMMENT "1st piece";
6725 INTRO_TAC GG_MCELL_BETA [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6728 BY(ASM_MESON_TAC[Sphere.critical_edge_y]);
6729 DISCH_THEN SUBST1_TAC;
6730 COMMENT "second piece";
6731 INTRO_TAC GG_MCELL_QUARTER [`V`;`u0`;`u1`;`w0`;`n`;`f`;`SUC i`];
6733 BY(ASM_REWRITE_TAC[]);
6734 DISCH_THEN SUBST1_TAC;
6735 COMMENT "third piece";
6736 INTRO_TAC GG_MCELL_QUARTER [`V`;`u0`;`u1`;`w0`;`n`;`f`;`SUC(SUC i)`];
6738 BY(ASM_REWRITE_TAC[]);
6739 DISCH_THEN SUBST1_TAC;
6740 COMMENT "fourth piece";
6741 INTRO_TAC GG_MCELL_QUARTER [`V`;`u0`;`u1`;`w0`;`n`;`f`;`SUC(SUC(SUC i))`];
6743 BY(ASM_REWRITE_TAC[arith `SUC(SUC(SUC(SUC i))) = i+4`]);
6744 DISCH_THEN SUBST1_TAC;
6745 MATCH_MP_TAC (arith `g > &0 ==> &0 <= g`);
6746 ASM_REWRITE_TAC[arith `SUC(SUC(SUC(SUC i))) = i+4`];
6747 ONCE_REWRITE_TAC[arith `((a + b) +c) + d = a + d + c + b`];
6748 COMMENT "intro ineq";
6749 INTRO_TAC Merge_ineq.ox3q1h_merge [];
6750 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
6751 TYPIFY `bump (dist (u0,u1) / &2) - bump (dist (f (i + 4),f (SUC i)) / &2) = beta_bump_force_y (dist (u0,u1)) (dist (u0,f (i + 4))) (dist (u0,f (SUC i))) (dist (f (i + 4),f (SUC i))) (dist (u1,f (SUC i))) (dist (u1,f (i + 4)))` (C SUBGOAL_THEN SUBST1_TAC);
6752 BY(REWRITE_TAC[Sphere.beta_bump_force_y]);
6753 REWRITE_TAC[arith `(a+b)+c = a+b+c`];
6754 DISCH_THEN MATCH_MP_TAC;
6756 COMMENT "intro domain";
6757 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6759 BY(ASM_REWRITE_TAC[]);
6760 REPEAT WEAKER_STRIP_TAC;
6762 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`SUC i`];
6764 BY(ASM_REWRITE_TAC[]);
6765 REPEAT WEAKER_STRIP_TAC;
6767 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`SUC(SUC i)`];
6769 BY(ASM_REWRITE_TAC[]);
6770 REPEAT WEAKER_STRIP_TAC;
6772 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`SUC(SUC(SUC i))`];
6774 BY(ASM_REWRITE_TAC[]);
6775 REPEAT WEAKER_STRIP_TAC;
6777 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
6778 RULE_ASSUM_TAC (REWRITE_RULE[arith `SUC(SUC(SUC(SUC i))) = i+4`]);
6779 FIRST_X_ASSUM_ST `f i = f (i + 4)` (fun t -> (REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[GSYM t]) THEN ASSUME_TAC t);
6780 REPEAT WEAKER_STRIP_TAC;
6781 ASM_REWRITE_TAC[arith `x< y ==> x<= y`];
6782 COMMENT "deal with angle sum";
6783 FIRST_X_ASSUM_ST `azim_mcell` MP_TAC;
6784 REPEAT (GMATCH_SIMP_TAC c_4_azim_mcell_dih_y);
6787 BY(ASM_MESON_TAC[]);
6789 ASM_REWRITE_TAC[arith `SUC(SUC(SUC(SUC i))) = i + 4`];
6790 FIRST_X_ASSUM_ST `f i = f (i + 4)` ((unlist REWRITE_TAC) o GSYM);
6796 let mcell3_gammaX_gamma3f = prove_by_refinement(
6798 pack_nonlinear_non_ox3q1h /\
6801 leaf_rank V [u0; u1] w0 n f /\
6802 ~collinear {u0, u1, w0} /\
6803 critical_edge_y (dist (u0,u1)) /\
6804 s_leaf V [u0; u1] HAS_SIZE n /\
6808 gammaX V (cc_cell V [u0;u1;f i]) lmfun =
6809 gamma3f (dist(u0,u1)) (dist(u0,f i)) (dist(u1,f i)) sqrt2 lmfun
6813 REPEAT WEAKER_STRIP_TAC;
6814 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6816 BY(ASM_REWRITE_TAC[]);
6817 REPEAT WEAKER_STRIP_TAC;
6818 INTRO_TAC Tskajxy_lemmas.gammaX_gamma3f [`V`;`cc_cell V [u0;u1;f i]`;`cc_uh V [u0;u1;f i]`;`u0`;`u1`;`f i`;`EL 3 (cc_uh V [u0;u1;f i])`;`dist(u1,f i)`;`dist(u0,f i)`;`dist(u0,u1)`];
6821 TYPIFY ` [u0; u1; f i; EL 3 (cc_uh V [u0; u1; f i])] = cc_uh V [u0; u1; f i]` (C SUBGOAL_THEN ASSUME_TAC);
6822 GMATCH_SIMP_TAC Leaf_cell.LIST_OF_CC_UH;
6823 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT]);
6824 BY(ASM_REWRITE_TAC[Leaf_cell.cc_cell]);
6825 DISCH_THEN (unlist REWRITE_TAC);
6826 BY(MESON_TAC[Merge_ineq.gamma3f_sym])
6830 let mcell3_dihX_dih_y = prove_by_refinement(
6832 pack_nonlinear_non_ox3q1h /\
6835 leaf_rank V [u0; u1] w0 n f /\
6836 ~collinear {u0, u1, w0} /\
6837 critical_edge_y (dist (u0,u1)) /\
6838 s_leaf V [u0; u1] HAS_SIZE n /\
6842 dihX V (cc_cell V [u0;u1;f i]) (u0,u1) =
6843 dih_y (dist(u0,u1)) (dist(u0,f i)) sqrt2 sqrt2 sqrt2 (dist(u1,f i))
6847 REPEAT WEAKER_STRIP_TAC;
6848 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6850 BY(ASM_REWRITE_TAC[]);
6851 REPEAT WEAKER_STRIP_TAC;
6852 INTRO_TAC Tskajxy_lemmas.gammaX_gamma3f [`V`;`cc_cell V [u0;u1;f i]`;`cc_uh V [u0;u1;f i]`;`u0`;`u1`;`f i`;`EL 3 (cc_uh V [u0;u1;f i])`;`dist(u1,f i)`;`dist(u0,f i)`;`dist(u0,u1)`];
6855 TYPIFY ` [u0; u1; f i; EL 3 (cc_uh V [u0; u1; f i])] = cc_uh V [u0; u1; f i]` (C SUBGOAL_THEN ASSUME_TAC);
6856 GMATCH_SIMP_TAC Leaf_cell.LIST_OF_CC_UH;
6857 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT]);
6858 BY(ASM_REWRITE_TAC[Leaf_cell.cc_cell]);
6859 DISCH_THEN (unlist REWRITE_TAC);
6860 BY(MESON_TAC[Nonlinear_lemma.dih_y_sym;Nonlinear_lemma.dih_y_sym2])
6864 let mcell3_gammaXb_gamma3f = prove_by_refinement(
6866 pack_nonlinear_non_ox3q1h /\
6869 leaf_rank V [u0; u1] w0 n f /\
6870 ~collinear {u0, u1, w0} /\
6871 critical_edge_y (dist (u0,u1)) /\
6872 s_leaf V [u0; u1] HAS_SIZE n /\
6876 gammaX V (cc_cell V [u1;u0;f (SUC i)]) lmfun =
6877 gamma3f (dist(u0,u1)) (dist(u0,f (SUC i))) (dist(u1,f (SUC i))) sqrt2 lmfun
6881 REPEAT WEAKER_STRIP_TAC;
6882 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6884 BY(ASM_REWRITE_TAC[]);
6885 REPEAT WEAKER_STRIP_TAC;
6886 INTRO_TAC Tskajxy_lemmas.gammaX_gamma3f [`V`;`cc_cell V [u1;u0;f (SUC i)]`;`cc_uh V [u1;u0;f (SUC i)]`;`u1`;`u0`;`f (SUC i)`;`EL 3 (cc_uh V [u1;u0;f (SUC i)])`;`dist(u0,f (SUC i))`;`dist(u1,f (SUC i))`;`dist(u0,u1)`];
6889 TYPIFY ` [u1; u0; f (SUC i); EL 3 (cc_uh V [u1; u0; f (SUC i)])] = cc_uh V [u1; u0; f (SUC i)]` (C SUBGOAL_THEN ASSUME_TAC);
6890 GMATCH_SIMP_TAC Leaf_cell.LIST_OF_CC_UH;
6891 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT]);
6893 BY(ASM_REWRITE_TAC[Leaf_cell.cc_cell]);
6895 BY(MESON_TAC[DIST_SYM]);
6896 DISCH_THEN (unlist REWRITE_TAC);
6897 BY(MESON_TAC[Merge_ineq.gamma3f_sym])
6901 let mcell3_dihXb_dih_y = prove_by_refinement(
6903 pack_nonlinear_non_ox3q1h /\
6906 leaf_rank V [u0; u1] w0 n f /\
6907 ~collinear {u0, u1, w0} /\
6908 critical_edge_y (dist (u0,u1)) /\
6909 s_leaf V [u0; u1] HAS_SIZE n /\
6913 dihX V (cc_cell V [u1;u0;f (SUC i)]) (u0,u1) =
6914 dih_y (dist(u0,u1)) (dist(u0,f (SUC i))) sqrt2 sqrt2 sqrt2 (dist(u1,f (SUC i)))
6918 REPEAT WEAKER_STRIP_TAC;
6919 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
6921 BY(ASM_REWRITE_TAC[]);
6922 REPEAT WEAKER_STRIP_TAC;
6923 INTRO_TAC Tskajxy_lemmas.gammaX_gamma3f [`V`;`cc_cell V [u1;u0;f (SUC i)]`;`cc_uh V [u1;u0;f (SUC i)]`;`u1`;`u0`;`f (SUC i)`;`EL 3 (cc_uh V [u1;u0;f (SUC i)])`;`dist(u0,f (SUC i))`;`dist(u1,f (SUC i))`;`dist(u0,u1)`];
6926 TYPIFY ` [u1; u0; f (SUC i); EL 3 (cc_uh V [u1; u0; f (SUC i)])] = cc_uh V [u1; u0; f (SUC i)]` (C SUBGOAL_THEN ASSUME_TAC);
6927 GMATCH_SIMP_TAC Leaf_cell.LIST_OF_CC_UH;
6928 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT]);
6930 BY(ASM_REWRITE_TAC[Leaf_cell.cc_cell]);
6932 BY(MESON_TAC[DIST_SYM]);
6933 REPEAT WEAKER_STRIP_TAC;
6934 GMATCH_SIMP_TAC Marchal_cells_3.DIHX_SYM;
6937 ONCE_REWRITE_TAC[GSYM IN];
6938 MATCH_MP_TAC Leaf_cell.CC_CELL_IN_MCELL_SET;
6939 BY(ASM_REWRITE_TAC[]);
6940 INTRO_TAC Leaf_cell.STEM_EDGEX [`V`;`[u1;u0;f (SUC i)]`];
6941 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
6942 TYPIFY `{u0,u1} = {u1,u0}` (C SUBGOAL_THEN SUBST1_TAC);
6948 (* Moved to Merge_ineq
6949 let cell3_from_ineq_thm_ALT = prove_by_refinement(
6950 `pack_nonlinear_non_ox3q1h ==> (!y4 y5 y6.
6954 y4 <= &2 * sqrt (&2) /\
6955 y5 <= &2 * sqrt (&2) /\
6956 y6 <= &2 * sqrt (&2) /\
6957 eta_y y4 y5 y6 < sqrt (&2)
6958 ==> &0 <= gamma3f y4 y5 y6 sqrt2 lmfun)
6963 INTRO_TAC Merge_ineq.cell3_from_ineq_thm [];
6965 BY((REWRITE_TAC (map Merge_ineq.get_pack_nonlinear_non_ox3q1h ["QZECFIC wt0";"QZECFIC wt0 corner";"QZECFIC wt0 sqrt8";"QZECFIC wt1";"QZECFIC wt2 A";"CIHTIUM";"CJFZZDW";])));
6972 let MCELL3_EDGE_EXPLICIT = prove_by_refinement(
6976 ~NULLSET (mcell3 V [u0; u1; u2; u3]) /\
6977 barV V 3 [u0; u1; u2; u3]
6978 ==> edgeX V (mcell3 V [u0; u1; u2; u3]) =
6979 {{u0, u1}, {u0, u2}, {u1, u2}}`,
6982 REPEAT WEAKER_STRIP_TAC;
6983 REWRITE_TAC[EXTENSION];
6985 TYPIFY `~(?u v. x = {u,v})` ASM_CASES_TAC;
6986 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
6987 BY(ASM_MESON_TAC[EDGEX_PAIR]);
6988 FIRST_X_ASSUM MP_TAC;
6990 REPEAT WEAKER_STRIP_TAC;
6992 INTRO_TAC Bump.MCELL3_EDGE [`V`;`[u0;u1;u2;u3]`;`u`;`v`];
6994 BY(ASM_REWRITE_TAC[]);
6995 DISCH_THEN SUBST1_TAC;
6996 REWRITE_TAC[set_of_list];
6997 INTRO_TAC MCELL3_EXTREME_CARD [`V`;`[u0;u1;u2;u3]`];
6999 BY(ASM_MESON_TAC[IN]);
7000 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
7001 DISCH_THEN (MP_TAC o (MATCH_MP Leaf_cell.CARD4_ALL_DISTINCT));
7002 REWRITE_TAC[Basics.TRUNCATE_SIMPLEX_EXPLICIT;set_of_list];
7003 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
7004 REPEAT WEAKER_STRIP_TAC;
7005 REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
7006 REWRITE_TAC[IN_INSERT;SUBSET;NOT_IN_EMPTY];
7007 TYPIFY `(u = u0)` ASM_CASES_TAC;
7009 BY(ASM_MESON_TAC[]);
7010 TYPIFY `(u = u1)` ASM_CASES_TAC;
7012 BY(ASM_MESON_TAC[]);
7013 TYPIFY `(u = u2)` ASM_CASES_TAC;
7015 BY(ASM_MESON_TAC[]);
7021 let critical_weight1 = prove_by_refinement(
7022 `!V u0 u1 u2. critical_edge_y (dist(u0,u1)) /\ dist(u0,u2) < &2 * hminus /\ dist(u1,u2) < &2 * hminus /\
7023 cc_ke V [u0;u1;u2] = 3 /\
7026 barV V 3 (cc_uh V [u0;u1;u2]) /\
7027 leaf V [u0;u1;u2] /\
7028 ~(NULLSET (cc_cell V [u0;u1;u2]))
7030 critical_weight V (cc_cell V [u0;u1;u2]) = &1`,
7033 REWRITE_TAC[Pack_defs.critical_weight];
7034 REPEAT WEAKER_STRIP_TAC;
7035 TYPIFY `CARD (critical_edgeX V (cc_cell V [u0; u1; u2])) = 1` ENOUGH_TO_SHOW_TAC;
7036 DISCH_THEN SUBST1_TAC;
7038 MATCH_MP_TAC Misc_defs_and_lemmas.CARD_SING;
7040 TYPIFY `{u0,u1}` EXISTS_TAC;
7041 ONCE_REWRITE_TAC[EXTENSION];
7042 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
7045 TYPIFY `~(?u v. x = {u,v})` ENOUGH_TO_SHOW_TAC;
7047 FIRST_X_ASSUM_ST `IN` MP_TAC;
7048 ASM_REWRITE_TAC[Pack_defs.critical_edgeX;IN_ELIM_THM];
7049 BY(ASM_MESON_TAC[]);
7050 DISCH_THEN MP_TAC THEN STRIP_TAC;
7051 FIRST_X_ASSUM_ST `IN` MP_TAC;
7052 ASM_REWRITE_TAC[critical_edgeX_critical_edge_y];
7053 TYPIFY `cc_cell V [u0;u1;u2] = mcell3 V (cc_uh V [u0;u1;u2])` (C SUBGOAL_THEN ASSUME_TAC);
7054 BY(ASM_MESON_TAC[Leaf_cell.cc_cell;GSYM Bump.MCELL3]);
7056 INTRO_TAC Leaf_cell.LIST_OF_CC_UH [`V`;`[u0;u1;u2]`];
7057 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
7059 ONCE_ASM_REWRITE_TAC[];
7060 GMATCH_SIMP_TAC MCELL3_EDGE_EXPLICIT;
7062 BY(ASM_MESON_TAC[]);
7063 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
7064 TYPIFY `{u,v} = {u0,u1}` ASM_CASES_TAC;
7066 BY(ASM_MESON_TAC[Geomdetail.DIST_PAIR_LEMMA]);
7067 REWRITE_TAC[Sphere.critical_edge_y];
7068 REWRITE_TAC[arith `x <= d <=> ~(d < x)`];
7069 TYPIFY `{u,v} = {u0,u2}` ASM_CASES_TAC;
7071 BY(ASM_MESON_TAC[Geomdetail.DIST_PAIR_LEMMA]);
7072 TYPIFY `{u,v} = {u1,u2}` ASM_CASES_TAC;
7074 BY(ASM_MESON_TAC[Geomdetail.DIST_PAIR_LEMMA]);
7075 BY(ASM_REWRITE_TAC[])
7079 let critical_weight1a = prove_by_refinement(
7080 `!V u0 u1 w0 n f i . pack_nonlinear_non_ox3q1h /\
7084 s_leaf V [u0; u1] HAS_SIZE n /\
7088 ~collinear {u0, u1, w0} /\
7089 critical_edge_y (dist (u0,u1)) /\
7090 leaf_rank V [u0; u1] w0 n f /\
7091 ~cc_4 V u0 u1 f (i) /\
7092 dist(u0,f i) < &2 * hminus /\ dist(u1,f i) < &2 * hminus
7094 critical_weight V (cc_cell V [u0; u1; f (i)]) = &1`,
7097 REPEAT WEAKER_STRIP_TAC;
7098 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7100 BY(ASM_REWRITE_TAC[]);
7101 REPEAT WEAKER_STRIP_TAC;
7102 INTRO_TAC critical_weight1 [`V`;`u0`;`u1`;`f i`];
7104 BY(ASM_REWRITE_TAC[]);
7105 BY(DISCH_THEN (unlist REWRITE_TAC))
7109 let critical_weight1b = prove_by_refinement(
7110 `!V u0 u1 w0 n f i . pack_nonlinear_non_ox3q1h /\
7114 s_leaf V [u0; u1] HAS_SIZE n /\
7118 ~collinear {u0, u1, w0} /\
7119 critical_edge_y (dist (u0,u1)) /\
7120 leaf_rank V [u0; u1] w0 n f /\
7121 ~cc_4 V u0 u1 f (i) /\
7122 dist(u0,f (SUC i)) < &2 * hminus /\ dist(u1,f (SUC i)) < &2 * hminus
7124 critical_weight V (cc_cell V [u1; u0; f (SUC i)]) = &1`,
7127 REPEAT WEAKER_STRIP_TAC;
7128 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7130 BY(ASM_REWRITE_TAC[]);
7131 REPEAT WEAKER_STRIP_TAC;
7132 INTRO_TAC critical_weight1 [`V`;`u1`;`u0`;`f (SUC i)`];
7134 (ASM_REWRITE_TAC[]);
7135 ONCE_REWRITE_TAC[DIST_SYM];
7136 BY(ASM_REWRITE_TAC[]);
7137 BY(DISCH_THEN (unlist REWRITE_TAC))
7142 let real_model_quqy = prove_by_refinement(
7143 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
7147 s_leaf V [u0; u1] HAS_SIZE n /\
7151 ~collinear {u0, u1, w0} /\
7152 critical_edge_y (dist (u0,u1)) /\
7153 leaf_rank V [u0; u1] w0 n f
7155 (!i. (cc_4 V u0 u1 f i /\
7156 (dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
7157 dist (u0,f (SUC i)) < &2 * hminus /\
7158 dist (u1,f (SUC i)) < &2 * hminus /\
7159 dist (f i,f (SUC i)) < &2 * hminus) /\
7160 ~cc_4 V u0 u1 f (SUC i)
7162 gg_mcell V f u0 u1 i +
7163 gammaX V (cc_cell V [u0; u1; f (SUC i)]) lmfun *
7164 critical_weight V (cc_cell V [u0; u1; f (SUC i)]) )`,
7167 REPEAT WEAKER_STRIP_TAC;
7168 GMATCH_SIMP_TAC critical_weight1a;
7170 BY(ASM_MESON_TAC[]);
7171 REWRITE_TAC[arith `x * &1 = x`];
7172 INTRO_TAC mcell3_gammaX_gamma3f [`V`;`u0`;`u1`;`w0`;`n`;`f`;`SUC i`];
7174 DISCH_THEN SUBST1_TAC;
7175 INTRO_TAC GG_MCELL_QUARTER [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7177 DISCH_THEN SUBST1_TAC;
7178 MP_TAC (Merge_ineq.g_quqya_g_quqyb_ALT);
7179 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
7181 ONCE_REWRITE_TAC[Merge_ineq.gamma4fgcy_sym23];
7182 FIRST_X_ASSUM MATCH_MP_TAC;
7183 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7185 BY(ASM_REWRITE_TAC[]);
7186 REPEAT WEAKER_STRIP_TAC;
7188 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
7189 FIRST_X_ASSUM_ST `rad2_y` MP_TAC;
7190 BY(MESON_TAC[Merge_ineq.rad2_y_sym])
7195 let real_model_quqy = prove_by_refinement(
7196 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
7200 s_leaf V [u0; u1] HAS_SIZE n /\
7204 ~collinear {u0, u1, w0} /\
7205 critical_edge_y (dist (u0,u1)) /\
7206 leaf_rank V [u0; u1] w0 n f
7208 (!i. (cc_4 V u0 u1 f i /\
7209 (dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
7210 dist (u0,f (SUC i)) < &2 * hminus /\
7211 dist (u1,f (SUC i)) < &2 * hminus /\
7212 dist (f i,f (SUC i)) < &2 * hminus) /\
7213 ~cc_4 V u0 u1 f (SUC i)
7215 gg_mcell V f u0 u1 i +
7216 gammaX V (cc_cell V [u0; u1; f (SUC i)]) lmfun)`,
7219 REPEAT WEAKER_STRIP_TAC;
7220 INTRO_TAC mcell3_gammaX_gamma3f [`V`;`u0`;`u1`;`w0`;`n`;`f`;`SUC i`];
7222 DISCH_THEN SUBST1_TAC;
7223 INTRO_TAC GG_MCELL_QUARTER [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7225 DISCH_THEN SUBST1_TAC;
7226 MP_TAC (Merge_ineq.g_quqya_g_quqyb_ALT);
7227 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
7229 ONCE_REWRITE_TAC[Merge_ineq.gamma4fgcy_sym23];
7230 FIRST_X_ASSUM MATCH_MP_TAC;
7231 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7233 BY(ASM_REWRITE_TAC[]);
7234 REPEAT WEAKER_STRIP_TAC;
7236 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
7237 FIRST_X_ASSUM_ST `rad2_y` MP_TAC;
7238 BY(MESON_TAC[Merge_ineq.rad2_y_sym])
7244 let real_model_quqy_sym = prove_by_refinement(
7245 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
7249 s_leaf V [u0; u1] HAS_SIZE n /\
7253 ~collinear {u0, u1, w0} /\
7254 critical_edge_y (dist (u0,u1)) /\
7255 leaf_rank V [u0; u1] w0 n f
7257 (!i. (cc_4 V u0 u1 f (SUC i) /\
7258 (dist (u0,f (SUC i)) < &2 * hminus /\
7259 dist (u1,f (SUC i)) < &2 * hminus) /\
7260 dist (u0,f (SUC (SUC i))) < &2 * hminus /\
7261 dist (u1,f (SUC (SUC i))) < &2 * hminus /\
7262 dist (f (SUC i),f (SUC (SUC i))) < &2 * hminus) /\
7265 gammaX V (cc_cell V [u1; u0; f (SUC i)]) lmfun *
7266 critical_weight V (cc_cell V [u1; u0; f (SUC i)]) +
7267 gg_mcell V f u0 u1 (SUC i))`,
7270 REPEAT WEAKER_STRIP_TAC;
7271 GMATCH_SIMP_TAC critical_weight1b;
7273 BY(ASM_MESON_TAC[]);
7274 REWRITE_TAC[arith `x * &1 = x`];
7275 INTRO_TAC mcell3_gammaXb_gamma3f [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7277 DISCH_THEN SUBST1_TAC;
7278 INTRO_TAC GG_MCELL_QUARTER [`V`;`u0`;`u1`;`w0`;`n`;`f`;`SUC i`];
7280 DISCH_THEN SUBST1_TAC;
7281 ONCE_REWRITE_TAC[arith `a + b = b + a`];
7282 MP_TAC (Merge_ineq.g_quqya_g_quqyb_ALT);
7283 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
7284 DISCH_THEN MATCH_MP_TAC;
7285 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`SUC i`];
7287 BY(ASM_REWRITE_TAC[]);
7288 REPEAT WEAKER_STRIP_TAC;
7290 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`])
7295 let real_model_quqy_sym = prove_by_refinement(
7296 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
7300 s_leaf V [u0; u1] HAS_SIZE n /\
7304 ~collinear {u0, u1, w0} /\
7305 critical_edge_y (dist (u0,u1)) /\
7306 leaf_rank V [u0; u1] w0 n f
7308 (!i. (cc_4 V u0 u1 f (SUC i) /\
7309 (dist (u0,f (SUC i)) < &2 * hminus /\
7310 dist (u1,f (SUC i)) < &2 * hminus) /\
7311 dist (u0,f (SUC (SUC i))) < &2 * hminus /\
7312 dist (u1,f (SUC (SUC i))) < &2 * hminus /\
7313 dist (f (SUC i),f (SUC (SUC i))) < &2 * hminus) /\
7316 gammaX V (cc_cell V [u1; u0; f (SUC i)]) lmfun +
7317 gg_mcell V f u0 u1 (SUC i))`,
7320 REPEAT WEAKER_STRIP_TAC;
7321 INTRO_TAC mcell3_gammaXb_gamma3f [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7323 DISCH_THEN SUBST1_TAC;
7324 INTRO_TAC GG_MCELL_QUARTER [`V`;`u0`;`u1`;`w0`;`n`;`f`;`SUC i`];
7326 DISCH_THEN SUBST1_TAC;
7327 ONCE_REWRITE_TAC[arith `a + b = b + a`];
7328 MP_TAC (Merge_ineq.g_quqya_g_quqyb_ALT);
7329 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
7330 DISCH_THEN MATCH_MP_TAC;
7331 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`SUC i`];
7333 BY(ASM_REWRITE_TAC[]);
7334 REPEAT WEAKER_STRIP_TAC;
7336 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`])
7341 let real_model_ztg4 = prove_by_refinement(
7342 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
7346 s_leaf V [u0; u1] HAS_SIZE n /\
7350 ~collinear {u0, u1, w0} /\
7351 critical_edge_y (dist (u0,u1)) /\
7352 leaf_rank V [u0; u1] w0 n f
7354 (!i. cc_4 V u0 u1 f i
7355 ==> a_spine5 + b_spine5 * azim_mcell V f u0 u1 i <=
7356 gg_mcell V f u0 u1 i)`,
7359 REPEAT WEAKER_STRIP_TAC;
7360 GMATCH_SIMP_TAC GG_MCELL_GENERAL;
7362 BY(ASM_MESON_TAC[]);
7363 GMATCH_SIMP_TAC c_4_azim_mcell_dih_y;
7365 BY(ASM_MESON_TAC[]);
7366 MATCH_MP_TAC (arith `g > a ==> a <= g`);
7367 INTRO_TAC Merge_ineq.ztg4_ALT [];
7369 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
7370 DISCH_THEN MATCH_MP_TAC;
7371 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7373 BY(ASM_REWRITE_TAC[]);
7374 REPEAT WEAKER_STRIP_TAC;
7375 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2];
7376 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`])
7380 let real_model_azim1 = prove_by_refinement(
7381 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
7385 s_leaf V [u0; u1] HAS_SIZE n /\
7389 ~collinear {u0, u1, w0} /\
7390 critical_edge_y (dist (u0,u1)) /\
7391 leaf_rank V [u0; u1] w0 n f
7393 (!i. cc_4 V u0 u1 f i /\
7394 (dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
7395 dist (u0,f (SUC i)) < &2 * hminus /\
7396 dist (u1,f (SUC i)) < &2 * hminus /\
7397 dist (f i,f (SUC i)) < &2 * hminus
7398 ==> -- #0.0659 + #0.042 * azim_mcell V f u0 u1 i <=
7399 gg_mcell V f u0 u1 i)
7403 REPEAT WEAKER_STRIP_TAC;
7404 GMATCH_SIMP_TAC GG_MCELL_QUARTER;
7406 BY(ASM_MESON_TAC[]);
7407 GMATCH_SIMP_TAC c_4_azim_mcell_dih_y;
7409 BY(ASM_MESON_TAC[]);
7410 MATCH_MP_TAC (arith `g +c - d > &0 ==> --c +d <= g`);
7411 MP_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "QITNPEA 5653753305");
7412 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`;arith `#0.0 = &0`];
7413 DISCH_THEN MATCH_MP_TAC;
7414 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7416 BY(ASM_REWRITE_TAC[]);
7417 REPEAT WEAKER_STRIP_TAC;
7418 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2];
7419 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`])
7423 let real_model_gaz4 = prove_by_refinement(
7424 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
7428 s_leaf V [u0; u1] HAS_SIZE n /\
7432 ~collinear {u0, u1, w0} /\
7433 critical_edge_y (dist (u0,u1)) /\
7434 leaf_rank V [u0; u1] w0 n f
7436 (!i. cc_4 V u0 u1 f i /\
7437 (dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
7438 dist (u0,f (SUC i)) < &2 * hminus /\
7439 dist (u1,f (SUC i)) < &2 * hminus /\
7440 dist (f i,f (SUC i)) < &2 * hminus
7441 ==> -- #0.0142852 + #0.00609451 * azim_mcell V f u0 u1 i <=
7442 gg_mcell V f u0 u1 i)`,
7445 REPEAT WEAKER_STRIP_TAC;
7446 GMATCH_SIMP_TAC GG_MCELL_QUARTER;
7448 BY(ASM_MESON_TAC[]);
7449 GMATCH_SIMP_TAC c_4_azim_mcell_dih_y;
7451 BY(ASM_MESON_TAC[]);
7452 MATCH_MP_TAC (arith `g +c - d > #0.0 ==> --c +d <= g`);
7453 MP_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "QITNPEA 6206775865");
7454 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
7455 DISCH_THEN MATCH_MP_TAC;
7456 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7458 BY(ASM_REWRITE_TAC[]);
7459 REPEAT WEAKER_STRIP_TAC;
7460 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2;arith `#2 = &2`];
7461 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`])
7465 let real_model_gaz6 = prove_by_refinement(
7466 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
7470 s_leaf V [u0; u1] HAS_SIZE n /\
7474 ~collinear {u0, u1, w0} /\
7475 critical_edge_y (dist (u0,u1)) /\
7476 leaf_rank V [u0; u1] w0 n f
7478 (!i. cc_4 V u0 u1 f i /\
7479 (dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
7480 dist (u0,f (SUC i)) < &2 * hminus /\
7481 dist (u1,f (SUC i)) < &2 * hminus /\
7482 dist (f i,f (SUC i)) < &2 * hminus
7483 ==> #0.161517 - #0.119482 * azim_mcell V f u0 u1 i <=
7484 gg_mcell V f u0 u1 i) `,
7487 REPEAT WEAKER_STRIP_TAC;
7488 GMATCH_SIMP_TAC GG_MCELL_QUARTER;
7490 BY(ASM_MESON_TAC[]);
7491 GMATCH_SIMP_TAC c_4_azim_mcell_dih_y;
7493 BY(ASM_MESON_TAC[]);
7494 MATCH_MP_TAC (arith `g - c + d > #0.0 ==> c - d <= g`);
7495 MP_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "QITNPEA 3848804089");
7496 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
7497 DISCH_THEN MATCH_MP_TAC;
7498 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7500 BY(ASM_REWRITE_TAC[]);
7501 REPEAT WEAKER_STRIP_TAC;
7502 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2;arith `#2 = &2`];
7503 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`])
7507 let real_model_gamma_qx = prove_by_refinement(
7508 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
7512 s_leaf V [u0; u1] HAS_SIZE n /\
7516 ~collinear {u0, u1, w0} /\
7517 critical_edge_y (dist (u0,u1)) /\
7518 leaf_rank V [u0; u1] w0 n f
7520 (!i. cc_4 V u0 u1 f i /\
7521 ~(dist (u0,f i) < &2 * hminus /\
7522 dist (u1,f i) < &2 * hminus /\
7523 dist (u0,f (SUC i)) < &2 * hminus /\
7524 dist (u1,f (SUC i)) < &2 * hminus /\
7525 dist (f i,f (SUC i)) < &2 * hminus)
7526 ==> #0.0 <= gg_mcell V f u0 u1 i)`,
7529 REPEAT WEAKER_STRIP_TAC;
7530 GMATCH_SIMP_TAC GG_MCELL_GENERAL;
7532 BY(ASM_MESON_TAC[]);
7533 MATCH_MP_TAC (arith `&0 < x ==> #0.0 <= x`);
7534 MP_TAC Merge_ineq.gamma_qx_ALT;
7535 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
7536 DISCH_THEN MATCH_MP_TAC;
7537 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7539 BY(ASM_REWRITE_TAC[]);
7540 REPEAT WEAKER_STRIP_TAC;
7541 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2;arith `#2 = &2`];
7542 (ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
7547 let real_model_g_qxd = prove_by_refinement(
7548 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
7552 s_leaf V [u0; u1] HAS_SIZE n /\
7556 ~collinear {u0, u1, w0} /\
7557 critical_edge_y (dist (u0,u1)) /\
7558 leaf_rank V [u0; u1] w0 n f
7560 (!i. (cc_4 V u0 u1 f i /\
7561 ~(dist (u0,f i) < &2 * hminus /\
7562 dist (u1,f i) < &2 * hminus /\
7563 dist (u0,f (SUC i)) < &2 * hminus /\
7564 dist (u1,f (SUC i)) < &2 * hminus /\
7565 dist (f i,f (SUC i)) < &2 * hminus)) /\
7566 #2.3 < azim_mcell V f u0 u1 i
7567 ==> #0.0057 <= gg_mcell V f u0 u1 i)
7571 REPEAT WEAKER_STRIP_TAC;
7572 GMATCH_SIMP_TAC GG_MCELL_GENERAL;
7574 BY(ASM_MESON_TAC[]);
7575 MATCH_MP_TAC (arith `y < x ==> y <= x`);
7576 MP_TAC Merge_ineq.g_qxd_ALT;
7577 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
7578 DISCH_THEN MATCH_MP_TAC;
7579 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7581 BY(ASM_REWRITE_TAC[]);
7582 REPEAT WEAKER_STRIP_TAC;
7583 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2;arith `#2 = &2`];
7584 (ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
7585 FIRST_X_ASSUM_ST `azim_mcell` MP_TAC;
7586 MATCH_MP_TAC (arith `a = d ==> (x < a ==> x < d)`);
7587 GMATCH_SIMP_TAC c_4_azim_mcell_dih_y;
7592 let wtcount6_y_sym23 = prove_by_refinement(
7593 `!y1 y2 y3 y4 y5 y6.
7594 wtcount6_y y1 y2 y3 y4 y5 y6 = wtcount6_y y1 y3 y2 y4 y6 y5 `,
7597 REWRITE_TAC[Sphere.wtcount6_y;Sphere.wtcount3_y];
7602 let wtcount6_y_sym26 = prove_by_refinement(
7603 `!y1 y2 y3 y4 y5 y6.
7604 wtcount6_y y1 y2 y3 y4 y5 y6 = wtcount6_y y1 y6 y5 y4 y3 y2 `,
7607 REWRITE_TAC[Sphere.wtcount6_y;Sphere.wtcount3_y];
7612 let beta_bumpA_y_sym23 = prove_by_refinement(
7613 `!y1 y2 y3 y4 y5 y6.
7614 beta_bumpA_y y1 y2 y3 y4 y5 y6 = beta_bumpA_y y1 y3 y2 y4 y6 y5 `,
7617 REWRITE_TAC[Sphere.beta_bumpA_y;Sphere.beta_bumpA_y];
7622 let real_model_gamma10 = prove_by_refinement(
7623 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
7627 s_leaf V [u0; u1] HAS_SIZE n /\
7631 ~collinear {u0, u1, w0} /\
7632 critical_edge_y (dist (u0,u1)) /\
7633 leaf_rank V [u0; u1] w0 n f
7635 (!i. (cc_4 V u0 u1 f i /\
7636 ~(dist (u0,f i) < &2 * hminus /\
7637 dist (u1,f i) < &2 * hminus /\
7638 dist (u0,f (SUC i)) < &2 * hminus /\
7639 dist (u1,f (SUC i)) < &2 * hminus /\
7640 dist (f i,f (SUC i)) < &2 * hminus)) /\
7641 ((dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
7642 dist (u0,f (SUC i)) < &2 * hminus /\
7643 dist (u1,f (SUC i)) < &2 * hminus) /\
7644 ~cc_4 V u0 u1 f (SUC i)
7646 gg_mcell V f u0 u1 i +
7647 gammaX V (cc_cell V [u0; u1; f (SUC i)]) lmfun *
7648 critical_weight V (cc_cell V [u0; u1; f (SUC i)]))
7652 REPEAT WEAKER_STRIP_TAC;
7653 GMATCH_SIMP_TAC critical_weight1a;
7655 BY(ASM_MESON_TAC[]);
7656 REWRITE_TAC[arith `x * &1 = x`];
7657 GMATCH_SIMP_TAC GG_MCELL_GENERAL;
7659 BY(ASM_MESON_TAC[]);
7660 GMATCH_SIMP_TAC mcell3_gammaX_gamma3f;
7662 BY(ASM_MESON_TAC[]);
7663 ONCE_REWRITE_TAC[Merge_ineq.gamma4fgcy_sym23];
7664 ONCE_REWRITE_TAC[wtcount6_y_sym23];
7665 ONCE_REWRITE_TAC[beta_bumpA_y_sym23];
7666 MP_TAC Merge_ineq.gamma10_gamma11_ALT;
7667 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`;arith `(a + b) + c = a + b + c`];
7668 DISCH_THEN MATCH_MP_TAC;
7669 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7671 BY(ASM_REWRITE_TAC[]);
7672 REPEAT WEAKER_STRIP_TAC;
7673 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2;arith `#2 = &2`];
7674 (ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
7676 BY(ASM_MESON_TAC[Merge_ineq.rad2_y_sym]);
7677 REPEAT (FIRST_X_ASSUM_ST `~` MP_TAC);
7683 let real_model_gamma11 = prove_by_refinement(
7684 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
7688 s_leaf V [u0; u1] HAS_SIZE n /\
7692 ~collinear {u0, u1, w0} /\
7693 critical_edge_y (dist (u0,u1)) /\
7694 leaf_rank V [u0; u1] w0 n f
7696 (!i. (cc_4 V u0 u1 f (SUC i) /\
7697 ~(dist (u0,f (SUC i)) < &2 * hminus /\
7698 dist (u1,f (SUC i)) < &2 * hminus /\
7699 dist (u0,f (SUC (SUC i))) < &2 * hminus /\
7700 dist (u1,f (SUC (SUC i))) < &2 * hminus /\
7701 dist (f (SUC i),f (SUC (SUC i))) < &2 * hminus)) /\
7702 ((dist (u0,f (SUC i)) < &2 * hminus /\
7703 dist (u1,f (SUC i)) < &2 * hminus) /\
7704 dist (u0,f (SUC (SUC i))) < &2 * hminus /\
7705 dist (u1,f (SUC (SUC i))) < &2 * hminus) /\
7708 gammaX V (cc_cell V [u1; u0; f (SUC i)]) lmfun *
7709 critical_weight V (cc_cell V [u1; u0; f (SUC i)]) +
7710 gg_mcell V f u0 u1 (SUC i))
7714 REPEAT WEAKER_STRIP_TAC;
7715 GMATCH_SIMP_TAC critical_weight1b;
7717 BY(ASM_MESON_TAC[]);
7718 REWRITE_TAC[arith `x * &1 = x`];
7719 GMATCH_SIMP_TAC GG_MCELL_GENERAL;
7721 BY(ASM_MESON_TAC[]);
7722 GMATCH_SIMP_TAC mcell3_gammaXb_gamma3f;
7724 BY(ASM_MESON_TAC[]);
7725 ONCE_REWRITE_TAC[arith `g3 + g4 + b = g4 + b + g3`];
7726 MP_TAC Merge_ineq.gamma10_gamma11_ALT;
7727 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`;arith `(a + b) + c = a + b + c`];
7728 DISCH_THEN MATCH_MP_TAC;
7729 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`SUC i`];
7731 BY(ASM_REWRITE_TAC[]);
7732 REPEAT WEAKER_STRIP_TAC;
7733 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2;arith `#2 = &2`];
7734 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC)
7738 let leaf_CIHTIUM = prove_by_refinement(
7739 `!V u0 u1 u2. pack_nonlinear_non_ox3q1h /\ packing V /\ saturated V /\
7740 leaf V [u0;u1;u2] /\ critical_edge_y (dist(u0,u1)) /\
7741 (&2 * hminus <= dist(u0,u2)) /\ (&2 * hminus <= dist(u1,u2)) ==> F`,
7744 REPEAT WEAKER_STRIP_TAC;
7745 INTRO_TAC Leaf_cell.GBEWYFX [`V`;`[u0;u1;u2]`];
7746 ASM_REWRITE_TAC[set_of_list];
7747 INTRO_TAC LEAF_DOMAIN [`V`;`[u0;u1;u2]`];
7748 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
7749 REPEAT (FIRST_X_ASSUM MP_TAC);
7750 REWRITE_TAC[Leaf_cell.leaf;Pack_defs.HL;set_of_list];
7751 REPEAT WEAKER_STRIP_TAC;
7753 MP_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "CIHTIUM");
7754 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
7756 FIRST_X_ASSUM_ST `sqrt2` MP_TAC;
7757 MATCH_MP_TAC (arith `s < r ==> (r < s ==> F)`);
7758 GMATCH_SIMP_TAC RADV_ETAY;
7760 GMATCH_SIMP_TAC (GSYM Tactics_jordan.REAL_POW_2_LT);
7761 REWRITE_TAC[Nonlinear_lemma.sqrt2_nn;ETA_Y_POS_LE_ALT;Nonlin_def.sqrt2_sqrt2;arith `sqrt2 pow 2 = sqrt2 * sqrt2`];
7762 REWRITE_TAC[arith `x < y <=> y > x`];
7763 FIRST_X_ASSUM MATCH_MP_TAC;
7764 GEXISTL_TAC [`&1`;`&1`;`&1`];
7765 ASM_REWRITE_TAC[REAL_LE_REFL];
7766 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2];
7767 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
7768 BY(ASM_MESON_TAC[Sphere.critical_edge_y])
7772 let gamma4fgcy_sym26 = prove_by_refinement(
7773 `!y1 y2 y3 y4 y5 y6 f. gamma4fgcy y1 y2 y3 y4 y5 y6 f = gamma4fgcy y1 y6 y5 y4 y3 y2 f`,
7776 BY(MESON_TAC[Merge_ineq.gamma4fgcy_sym03;Merge_ineq.gamma4fgcy_sym23;Merge_ineq.gamma4fgcy_sym12])
7780 let gamma4fgcy_POS = prove_by_refinement(
7781 `!y1 y2 y3 y4 y5 y6. pack_nonlinear_non_ox3q1h /\ rad2_y y1 y2 y3 y4 y5 y6 < &2 /\ critical_edge_y y1 /\
7782 ~(y2 < &2 * hminus /\
7786 y6 < &2 * hminus ) /\
7787 &2 <= y2 /\ y2 <= sqrt8 /\ &2 <= y3 /\ y3 <= sqrt8 /\
7788 &2 <= y4 /\ y4 <= sqrt8 /\
7789 &2 <= y5 /\ y5 <= sqrt8 /\
7790 &2 <= y6 /\ y6 <= sqrt8 ==>
7791 &0 < gamma4fgcy y1 y2 y3 y4 y5 y6 lmfun
7795 REPEAT WEAKER_STRIP_TAC;
7796 MP_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "GLFVCVK4 2477216213");
7797 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
7798 REWRITE_TAC[TAUT `a ==> b \/ c \/ d <=> a /\ ~c /\ ~d ==> b`];
7799 REWRITE_TAC[arith `g > &0 <=> &0 < g`];
7800 DISCH_THEN MATCH_MP_TAC;
7802 REWRITE_TAC[GSYM Sphere.rad2_y];
7804 BY(ASM_MESON_TAC[Sphere.critical_edge_y]);
7807 BY(FIRST_X_ASSUM_ST `rad2_y` MP_TAC THEN REAL_ARITH_TAC);
7808 DISCH_THEN (MP_TAC o (MATCH_MP Merge_ineq.quarter_norm2hh));
7809 BY(ASM_REWRITE_TAC[])
7813 let real_model_gamma8 = prove_by_refinement(
7814 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
7818 s_leaf V [u0; u1] HAS_SIZE n /\
7822 ~collinear {u0, u1, w0} /\
7823 critical_edge_y (dist (u0,u1)) /\
7824 leaf_rank V [u0; u1] w0 n f
7826 (!i. (cc_4 V u0 u1 f i /\
7827 ~(dist (u0,f i) < &2 * hminus /\
7828 dist (u1,f i) < &2 * hminus /\
7829 dist (u0,f (SUC i)) < &2 * hminus /\
7830 dist (u1,f (SUC i)) < &2 * hminus /\
7831 dist (f i,f (SUC i)) < &2 * hminus)) /\
7832 (dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
7833 ~(dist (u0,f (SUC i)) < &2 * hminus /\
7834 dist (u1,f (SUC i)) < &2 * hminus)
7835 ==> #0.0057 <= gg_mcell V f u0 u1 i)
7839 REPEAT WEAKER_STRIP_TAC;
7840 GMATCH_SIMP_TAC GG_MCELL_NONBETA;
7842 BY(ASM_MESON_TAC[]);
7843 MP_TAC Merge_ineq.QITNPEA4_9063653052_weak_ALT;
7844 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
7846 MATCH_MP_TAC (arith `gw > c ==> c <= gw`);
7847 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7849 BY(ASM_REWRITE_TAC[]);
7850 REPEAT WEAKER_STRIP_TAC;
7851 INTRO_TAC CC_4_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7853 BY(ASM_MESON_TAC[]);
7854 REPEAT WEAKER_STRIP_TAC;
7855 INTRO_TAC leaf_CIHTIUM [`V`;`u0`;`u1`;`f (SUC i)`];
7857 REWRITE_TAC[DE_MORGAN_THM ;arith `~(x <= y) <=> y < x`];
7858 COMMENT "case split";
7859 DISCH_THEN DISJ_CASES_TAC;
7860 FIRST_X_ASSUM_ST `~(a /\ b)` MP_TAC;
7861 ASM_REWRITE_TAC[arith `~(a < b) <=> b <= a`];
7863 ONCE_REWRITE_TAC[wtcount6_y_sym26];
7864 ONCE_REWRITE_TAC[gamma4fgcy_sym26];
7865 FIRST_X_ASSUM MATCH_MP_TAC;
7866 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2];
7867 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
7869 FIRST_X_ASSUM_ST `rad2_y` MP_TAC;
7870 BY(MESON_TAC[Merge_ineq.rad2_y_sym]);
7872 MATCH_MP_TAC (arith `x < y ==> x <= y`);
7873 MATCH_MP_TAC gamma4fgcy_POS;
7875 ASM_SIMP_TAC[arith `x <= y ==> ~(y < x)`];
7876 ASM_SIMP_TAC[Merge_ineq.y_bounds];
7877 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2];
7878 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
7879 COMMENT "second case";
7880 FIRST_X_ASSUM_ST `~(a /\ b)` MP_TAC;
7881 ASM_REWRITE_TAC[arith `~(a < b) <=> b <= a`];
7883 FIRST_X_ASSUM MATCH_MP_TAC;
7884 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2];
7885 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
7886 MATCH_MP_TAC (arith `x < y ==> x <= y`);
7887 MATCH_MP_TAC gamma4fgcy_POS;
7889 ASM_SIMP_TAC[arith `x <= y ==> ~(y < x)`];
7890 ASM_SIMP_TAC[Merge_ineq.y_bounds];
7891 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2];
7892 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`])
7896 let real_model_gamma8b = prove_by_refinement(
7897 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
7901 s_leaf V [u0; u1] HAS_SIZE n /\
7905 ~collinear {u0, u1, w0} /\
7906 critical_edge_y (dist (u0,u1)) /\
7907 leaf_rank V [u0; u1] w0 n f
7909 (!i. (cc_4 V u0 u1 f i /\
7910 ~(dist (u0,f i) < &2 * hminus /\
7911 dist (u1,f i) < &2 * hminus /\
7912 dist (u0,f (SUC i)) < &2 * hminus /\
7913 dist (u1,f (SUC i)) < &2 * hminus /\
7914 dist (f i,f (SUC i)) < &2 * hminus)) /\
7915 (dist (u0,f (SUC i)) < &2 * hminus /\
7916 dist (u1,f (SUC i)) < &2 * hminus) /\
7917 ~(dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus)
7918 ==> #0.0057 <= gg_mcell V f u0 u1 i)
7922 REPEAT WEAKER_STRIP_TAC;
7923 GMATCH_SIMP_TAC GG_MCELL_NONBETA;
7925 BY(ASM_MESON_TAC[]);
7926 ONCE_REWRITE_TAC[Merge_ineq.gamma4fgcy_sym23];
7927 ONCE_REWRITE_TAC[wtcount6_y_sym23];
7928 MP_TAC Merge_ineq.QITNPEA4_9063653052_weak_ALT;
7929 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
7931 MATCH_MP_TAC (arith `gw > c ==> c <= gw`);
7932 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7934 BY(ASM_REWRITE_TAC[]);
7935 REPEAT WEAKER_STRIP_TAC;
7936 INTRO_TAC CC_4_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
7938 BY(ASM_MESON_TAC[]);
7939 REPEAT WEAKER_STRIP_TAC;
7940 INTRO_TAC leaf_CIHTIUM [`V`;`u0`;`u1`;`f i`];
7942 REWRITE_TAC[DE_MORGAN_THM ;arith `~(x <= y) <=> y < x`];
7943 COMMENT "case split";
7944 DISCH_THEN DISJ_CASES_TAC;
7945 FIRST_X_ASSUM_ST `~(a /\ b)` MP_TAC;
7946 ASM_REWRITE_TAC[arith `~(a < b) <=> b <= a`];
7948 ONCE_REWRITE_TAC[wtcount6_y_sym26];
7949 ONCE_REWRITE_TAC[gamma4fgcy_sym26];
7950 FIRST_X_ASSUM MATCH_MP_TAC;
7951 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2];
7952 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
7954 FIRST_X_ASSUM_ST `rad2_y` MP_TAC;
7955 BY(MESON_TAC[Merge_ineq.rad2_y_sym]);
7957 MATCH_MP_TAC (arith `x < y ==> x <= y`);
7958 MATCH_MP_TAC gamma4fgcy_POS;
7960 ASM_SIMP_TAC[arith `x <= y ==> ~(y < x)`];
7961 ASM_SIMP_TAC[Merge_ineq.y_bounds];
7962 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2];
7963 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
7964 COMMENT "second case";
7965 FIRST_X_ASSUM_ST `~(a /\ b)` MP_TAC;
7966 ASM_REWRITE_TAC[arith `~(a < b) <=> b <= a`];
7968 FIRST_X_ASSUM MATCH_MP_TAC;
7969 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2];
7970 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
7972 FIRST_X_ASSUM_ST `rad2_y` MP_TAC;
7973 BY(MESON_TAC[Merge_ineq.rad2_y_sym]);
7975 MATCH_MP_TAC (arith `x < y ==> x <= y`);
7976 MATCH_MP_TAC gamma4fgcy_POS;
7978 ASM_SIMP_TAC[arith `x <= y ==> ~(y < x)`];
7979 ASM_SIMP_TAC[Merge_ineq.y_bounds];
7980 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2];
7981 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`])
7985 let real_model_gaz9 = prove_by_refinement(
7986 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
7990 s_leaf V [u0; u1] HAS_SIZE n /\
7994 ~collinear {u0, u1, w0} /\
7995 critical_edge_y (dist (u0,u1)) /\
7996 leaf_rank V [u0; u1] w0 n f
7998 (!i. (cc_4 V u0 u1 f i /\
7999 ~(dist (u0,f i) < &2 * hminus /\
8000 dist (u1,f i) < &2 * hminus /\
8001 dist (u0,f (SUC i)) < &2 * hminus /\
8002 dist (u1,f (SUC i)) < &2 * hminus /\
8003 dist (f i,f (SUC i)) < &2 * hminus)) /\
8004 (dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
8005 dist (u0,f (SUC i)) < &2 * hminus /\
8006 dist (u1,f (SUC i)) < &2 * hminus
8007 ==> #0.213849 - #0.119482 * azim_mcell V f u0 u1 i <=
8008 gg_mcell V f u0 u1 i)
8012 REPEAT WEAKER_STRIP_TAC;
8013 GMATCH_SIMP_TAC c_4_azim_mcell_dih_y;
8015 BY(ASM_MESON_TAC[]);
8016 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
8018 BY(ASM_REWRITE_TAC[]);
8019 REPEAT WEAKER_STRIP_TAC;
8020 FIRST_X_ASSUM_ST `~` MP_TAC;
8023 GMATCH_SIMP_TAC GG_MCELL_GENERAL;
8025 BY(ASM_MESON_TAC[]);
8026 MATCH_MP_TAC (arith `(?t. x <= g + t /\ &1 * t <= b) ==> x <= g + b`);
8027 TYPIFY`beta_bump_lb` EXISTS_TAC;
8028 REWRITE_TAC[ Merge_ineq.beta_bumpA_lb1 ];
8029 MATCH_MP_TAC (arith `(?w. x <= g / w + t /\ g / w <= g / w') ==> (x <= g / w' + t)`);
8030 TYPIFY `&2` EXISTS_TAC;
8032 MATCH_MP_TAC Merge_ineq.gamma_wt;
8033 ONCE_REWRITE_TAC[TAUT `a /\ b /\ c <=> b /\ a /\ c`];
8035 REWRITE_TAC[arith `x > &0 <=> &0 < x`];
8036 MATCH_MP_TAC gamma4fgcy_POS;
8038 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2];
8039 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
8040 ASM_REWRITE_TAC[Sphere.wtcount6_y;Sphere.wtcount3_y];
8041 ASM_REWRITE_TAC[Sphere.critical_edge_y];
8042 ASM_SIMP_TAC[arith `x < y ==> ~(y<= x)`];
8044 MP_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "QITNPEA 2134082733");
8045 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
8046 ASM_REWRITE_TAC[GSYM Sphere.rad2_y];
8047 REWRITE_TAC[TAUT ` (a ==> b \/ c) <=> (a /\ ~c ==> b)`];
8048 REWRITE_TAC[arith `g + b - c + d > #0.0 <=> c - d < g + b`];
8050 MATCH_MP_TAC (arith `x < y ==> x <= y`);
8051 FIRST_X_ASSUM MATCH_MP_TAC;
8054 BY(FIRST_X_ASSUM_ST `rad2_y` MP_TAC THEN REAL_ARITH_TAC);
8055 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2];
8056 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
8057 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC)
8061 let real_model_azim2 = prove_by_refinement(
8062 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
8066 s_leaf V [u0; u1] HAS_SIZE n /\
8070 ~collinear {u0, u1, w0} /\
8071 critical_edge_y (dist (u0,u1)) /\
8072 leaf_rank V [u0; u1] w0 n f
8074 (!i. (cc_4 V u0 u1 f i /\
8075 ~(dist (u0,f i) < &2 * hminus /\
8076 dist (u1,f i) < &2 * hminus /\
8077 dist (u0,f (SUC i)) < &2 * hminus /\
8078 dist (u1,f (SUC i)) < &2 * hminus /\
8079 dist (f i,f (SUC i)) < &2 * hminus)) /\
8080 ((dist (u0,f i) < &2 * hminus /\ dist (u1,f i) < &2 * hminus) /\
8081 dist (u0,f (SUC i)) < &2 * hminus /\
8082 dist (u1,f (SUC i)) < &2 * hminus) /\
8083 &2 * hplus < dist (f i,f (SUC i))
8084 ==> #0.00457511 + #0.00609451 * azim_mcell V f u0 u1 i <=
8085 gg_mcell V f u0 u1 i)
8089 REPEAT WEAKER_STRIP_TAC;
8090 GMATCH_SIMP_TAC c_4_azim_mcell_dih_y;
8092 BY(ASM_MESON_TAC[]);
8093 INTRO_TAC MCELL4_DOMAIN [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
8095 BY(ASM_REWRITE_TAC[]);
8096 REPEAT WEAKER_STRIP_TAC;
8097 TYPIFY `~critical_edge_y (dist(f i,f (SUC i)))` (C SUBGOAL_THEN ASSUME_TAC);
8098 BY(ASM_SIMP_TAC[Sphere.critical_edge_y;arith `h < x ==> ~(x<= h)`]);
8099 GMATCH_SIMP_TAC GG_MCELL_NONBETA;
8101 BY(ASM_MESON_TAC[]);
8102 TYPIFY `wtcount6_y (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i))) (dist (f i,f (SUC i))) (dist (u1,f (SUC i))) (dist (u1,f i)) = 1` (C SUBGOAL_THEN SUBST1_TAC);
8103 ASM_REWRITE_TAC[Sphere.wtcount6_y;Sphere.wtcount3_y];
8104 ASM_REWRITE_TAC[Sphere.critical_edge_y];
8105 ASM_SIMP_TAC[arith `x < y ==> ~(y<= x)`];
8107 MATCH_MP_TAC (arith `g - c - d > #0.0 ==> c + d <= g / &1`);
8108 MP_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "QITNPEA 9939613598");
8109 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
8110 ASM_REWRITE_TAC[GSYM Sphere.rad2_y];
8111 REWRITE_TAC[TAUT ` (a ==> b \/ c) <=> (a /\ ~c ==> b)`];
8112 DISCH_THEN MATCH_MP_TAC;
8115 BY(FIRST_X_ASSUM_ST `rad2_y` MP_TAC THEN REAL_ARITH_TAC);
8116 ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2];
8117 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`])
8121 let CC_3_SUM_SET = prove_by_refinement(
8122 `!V u0 u1 w0 n f i. pack_nonlinear_non_ox3q1h /\ 1 < n /\
8125 s_leaf V [u0; u1] HAS_SIZE n /\
8129 ~cc_4 V u0 u1 f i /\
8130 ~collinear {u0, u1, w0} /\
8131 critical_edge_y (dist (u0,u1)) /\
8132 leaf_rank V [u0; u1] w0 n f ==> {X | mcell_set V X /\
8133 {u0, u1} IN edgeX V X /\
8134 X SUBSET wedge_ge u0 u1 (f i) (f (SUC i))} =
8135 {cc_cell V [u0;u1;f i],cc_cell V [u1;u0;f (SUC i)]} UNION
8136 {X | mcell_set V X /\ {u0,u1} IN edgeX V X /\
8137 X SUBSET wedge_ge u0 u1 (f i) (f (SUC i)) /\
8138 ~(X = cc_cell V [u0;u1;f i]) /\ ~(X = cc_cell V [u1;u0;f (SUC i)])}`,
8141 REPEAT WEAKER_STRIP_TAC;
8142 ONCE_REWRITE_TAC[EXTENSION];
8143 REWRITE_TAC[IN_UNION;IN_INSERT;NOT_IN_EMPTY];
8144 REWRITE_TAC[IN_ELIM_THM];
8146 MATCH_MP_TAC (TAUT `((a==> b) /\ (b ==> a)) ==> (a = b)`);
8149 REPEAT WEAKER_STRIP_TAC;
8150 INTRO_TAC NO_4CELL_IMP_K3 [`V`;`wedge_ge u0 u1 (f i) (f (SUC i))`;`[u0;u1]`;`w0`;`n`;`f`;`i`];
8151 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
8153 BY(ASM_MESON_TAC[cc_4]);
8154 REPEAT WEAKER_STRIP_TAC;
8155 INTRO_TAC Leaf_cell.STEM_EDGEX [`V`];
8158 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
8160 BY(ASM_REWRITE_TAC[]);
8161 REPEAT WEAKER_STRIP_TAC;
8162 FIRST_ASSUM (C INTRO_TAC [`[u0;u1;f i]`]);
8163 FIRST_X_ASSUM (C INTRO_TAC [`[u1;u0;f(SUC i)]`]);
8164 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
8165 TYPIFY `{u1,u0} = {u0,u1}` (C SUBGOAL_THEN ASSUME_TAC);
8167 REPEAT WEAKER_STRIP_TAC;
8168 FIRST_X_ASSUM_ST `\/` DISJ_CASES_TAC;
8169 BY(ASM_MESON_TAC[Leaf_cell.CC_CELL_IN_MCELL_SET;IN]);
8170 BY(ASM_REWRITE_TAC[])
8174 let CC_3_SUM_fn = prove_by_refinement(
8175 `!V u0 u1 w0 n f i fn. pack_nonlinear_non_ox3q1h /\ 1 < n /\
8178 s_leaf V [u0; u1] HAS_SIZE n /\
8182 ~cc_4 V u0 u1 f i /\
8183 ~collinear {u0, u1, w0} /\
8184 critical_edge_y (dist (u0,u1)) /\
8185 leaf_rank V [u0; u1] w0 n f ==>
8186 sum {X | mcell_set V X /\
8187 {u0, u1} IN edgeX V X /\
8188 X SUBSET wedge_ge u0 u1 (f i) (f (SUC i))} fn =
8189 fn (cc_cell V [u0;u1;f i]) + fn (cc_cell V [u1;u0;f (SUC i)]) +
8191 {X | mcell_set V X /\ {u0,u1} IN edgeX V X /\
8192 X SUBSET wedge_ge u0 u1 (f i) (f (SUC i)) /\
8193 ~(X = cc_cell V [u0;u1;f i]) /\ ~(X = cc_cell V [u1;u0;f (SUC i)])} fn`,
8196 REPEAT WEAKER_STRIP_TAC;
8197 GMATCH_SIMP_TAC CC_3_SUM_SET;
8199 BY(ASM_MESON_TAC[]);
8200 INTRO_TAC Marchal_cells_3.FINITE_EDGE_X2 [`V`;`{u0,u1}`;`u0`;`u1`];
8203 GMATCH_SIMP_TAC SUM_UNION;
8204 REWRITE_TAC[FINITE_INSERT;FINITE_EMPTY];
8207 MATCH_MP_TAC FINITE_SUBSET;
8208 TYPIFY `{X | mcell_set V X /\ edgeX V X {u0, u1}}` EXISTS_TAC;
8210 REWRITE_TAC[SUBSET;IN_ELIM_THM];
8212 REWRITE_TAC[DISJOINT];
8214 MATCH_MP_TAC (arith `s = s'+s'' ==> (s + a = s'+s'' + a)`);
8215 MATCH_MP_TAC Geomdetail.SUM_DIS2;
8216 INTRO_TAC NO_4CELL_IMP_K3 [`V`;`wedge_ge u0 u1 (f i) (f (SUC i))`;`[u0;u1]`;`w0`;`n`;`f`;`i`];
8217 ASM_REWRITE_TAC[Bump.EL_EXPLICIT];
8219 BY(ASM_MESON_TAC[cc_4]);
8220 BY(DISCH_THEN (unlist REWRITE_TAC))
8224 let EDGE_IMP_K23 = prove_by_refinement(
8225 `!V X u0 u1 w0 n f i. pack_nonlinear_non_ox3q1h /\ 1 < n /\
8228 s_leaf V [u0; u1] HAS_SIZE n /\
8232 ~cc_4 V u0 u1 f i /\
8233 ~collinear {u0, u1, w0} /\
8234 critical_edge_y (dist (u0,u1)) /\
8235 leaf_rank V [u0; u1] w0 n f /\
8237 {u0, u1} IN edgeX V X /\
8238 X SUBSET wedge_ge u0 u1 (f i) (f (SUC i))
8239 ==> (?k v1 v2. barV V 3 [u0;u1;v1;v2] /\ ((k = 2)\/ (k = 3)) /\ X = mcell k V [u0;u1;v1;v2])
8243 REWRITE_TAC[Qzyzmjc.mcell_set_2;IN_ELIM_THM];
8244 REPEAT WEAKER_STRIP_TAC;
8245 TYPIFY `i'` EXISTS_TAC;
8246 FIRST_X_ASSUM (ASSUME_TAC o (MATCH_MP (arith `i' <= 4 ==> (i' <= 1 \/ i' = 4 \/ i' = 2 \/ i' = 3)`)));
8247 FIRST_X_ASSUM DISJ_CASES_TAC;
8248 INTRO_TAC Bump.EDGE_IMP_K2 [`V`;`ul`;`i'`];
8250 BY(ASM_MESON_TAC[IN]);
8251 BY(ASM_MESON_TAC[NOT_IN_EMPTY;IN]);
8252 FIRST_X_ASSUM DISJ_CASES_TAC;
8253 BY(ASM_MESON_TAC[cc_4;IN;Bump.MCELL4]);
8255 INTRO_TAC Leaf_cell.MCELL_EDGE_FIRST [`V`;`ul`;`i'`;`u0`;`u1`];
8257 BY(ASM_MESON_TAC[IN]);
8258 REPEAT WEAKER_STRIP_TAC;
8259 GEXISTL_TAC [ `EL 2 vl`;`EL 3 vl`];
8260 TYPIFY `[u0; u1; EL 2 vl; EL 3 vl] = vl` (C SUBGOAL_THEN SUBST1_TAC);
8261 MATCH_MP_TAC EQ_SYM;
8263 MATCH_MP_TAC Bump.LENGTH4;
8264 REWRITE_TAC[arith `4 = 3 + 1`] THEN MATCH_MP_TAC Marchal_cells_3.BARV_LENGTH_LEMMA;
8265 BY(ASM_MESON_TAC[IN]);
8266 BY(ASM_MESON_TAC[IN])
8270 let CC_2_PROPS = prove_by_refinement(
8272 pack_nonlinear_non_ox3q1h /\
8275 critical_edge_y (dist(u0,u1)) /\
8277 {u0,u1} IN edgeX V X /\
8281 gammaX V X lmfun = gamma2_x_div_azim_v2 (h0cut (dist(u0,u1))) (dist(u0,u1) * dist(u0,u1)) * dihX V X (u0,u1) /\
8282 &0 < dihX V X (u0,u1) /\
8283 #0.008 * dihX V X (u0,u1) < gammaX V X lmfun`,
8286 REPEAT WEAKER_STRIP_TAC;
8289 REWRITE_TAC[Bump.MCELL2];
8290 DISCH_THEN (MP_TAC o (MATCH_MP Bump.RIJRIED));
8291 BY(ASM_MESON_TAC[NOT_IN_EMPTY;IN;Bump.MCELL2]);
8293 INTRO_TAC Leaf_cell.MCELL2_EDGE_FIRST [`V`;`vl`;`u0`;`u1`];
8295 BY(ASM_MESON_TAC[IN]);
8296 REPEAT WEAKER_STRIP_TAC;
8297 INTRO_TAC MCELL2_DIHX_POS [`V`;`X`;`vl'`];
8300 BY(ASM_MESON_TAC[IN]);
8303 MATCH_MP_TAC (TAUT `((a ==> b) /\ a) ==> (a /\ b)`);
8305 DISCH_THEN SUBST1_TAC;
8306 MATCH_MP_TAC REAL_LT_RMUL;
8308 MP_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "GRKIBMP A V2");
8309 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
8310 REWRITE_TAC[Sphere.y_of_x;Functional_equation.nonf_gamma2_x1_div_a_v2];
8311 REWRITE_TAC[arith `x > y <=> y < x`];
8312 DISCH_THEN MATCH_MP_TAC;
8313 GEXISTL_TAC [`&1`;`&1`;`&1`;`&1`;`&1`];
8314 REWRITE_TAC[REAL_LE_REFL];
8315 FIRST_X_ASSUM_ST `critical_edge_y` MP_TAC;
8316 ASM_REWRITE_TAC[Sphere.critical_edge_y];
8317 MP_TAC Nonlinear_lemma.hminus_prop;
8319 COMMENT "gammaX formula";
8320 INTRO_TAC Tskajxy.GAMMAX_GAMMA2_X [`V`;`X`;`vl'`;`dist(u0,u1)`;`dist(u0,mxi V vl')`;`dist(u0,omega_list_n V vl' 3)`;`dist(mxi V vl',omega_list_n V vl' 3)`;`dist(u1,omega_list_n V vl' 3)`;`dist(u1,mxi V vl')`];
8324 BY(ASM_MESON_TAC[IN]);
8325 BY(ASM_MESON_TAC[]);
8327 REPEAT WEAKER_STRIP_TAC;
8329 MATCH_MP_TAC (arith `x = y ==> a * x = a * y`);
8330 GMATCH_SIMP_TAC Tskajxy.MCELL2_DIHX;
8332 BY(ASM_MESON_TAC[IN]);
8333 GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] Merge_ineq.DIHV_EQ_DIH_Y);
8334 INTRO_TAC Tskajxy.NOT_COPLANAR_EXTREME_MCELL2 [`V`;`vl'`];
8336 BY(ASM_MESON_TAC[IN]);
8338 FIRST_ASSUM (ASSUME_TAC o (MATCH_MP NOT_COPLANAR_NOT_COLLINEAR));
8340 FIRST_X_ASSUM_ST `coplanar` MP_TAC;
8341 TYPIFY `{EL 0 vl', EL 1 vl', mxi V vl', omega_list_n V vl' 3} = {EL 0 vl', EL 1 vl', omega_list_n V vl' 3, mxi V vl'}` (C SUBGOAL_THEN SUBST1_TAC);
8343 BY(MESON_TAC[NOT_COPLANAR_NOT_COLLINEAR])
8347 let MCELL2_CRITICAL_WEIGHT1 = prove_by_refinement(
8349 pack_nonlinear_non_ox3q1h /\
8352 critical_edge_y (dist(u0,u1)) /\
8354 {u0,u1} IN edgeX V X /\
8356 critical_weight V X = &1`,
8359 REPEAT WEAKER_STRIP_TAC;
8360 REWRITE_TAC[Pack_defs.critical_edge_y;Pack_defs.critical_weight];
8361 MATCH_MP_TAC (arith `x = &1 ==> &1 / x = &1`);
8362 REWRITE_TAC[REAL_OF_NUM_EQ];
8363 MATCH_MP_TAC Misc_defs_and_lemmas.CARD_SING;
8365 TYPIFY `{u0,u1}` EXISTS_TAC;
8366 ONCE_REWRITE_TAC[EXTENSION];
8368 INTRO_TAC Bump.MCELL2_EDGE [`V`;`vl`;`{u0,u1}`];
8370 BY(ASM_MESON_TAC[IN]);
8372 INTRO_TAC Tskajxy.MCELL2_VX_PROPS [`V`;`X`;`vl`];
8375 REWRITE_TAC[ Bump.MCELL2];
8376 DISCH_THEN (MP_TAC o (MATCH_MP Bump.RIJRIED));
8377 BY(ASM_MESON_TAC[NOT_IN_EMPTY;Bump.MCELL2]);
8378 REPEAT WEAKER_STRIP_TAC;
8380 TYPIFY `~(?u v. x = {u,v})` ENOUGH_TO_SHOW_TAC;
8382 FIRST_X_ASSUM_ST `IN` MP_TAC;
8383 ASM_REWRITE_TAC[Pack_defs.critical_edgeX;IN_ELIM_THM];
8384 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
8385 BY(ASM_MESON_TAC[]);
8386 REPEAT WEAKER_STRIP_TAC;
8387 FIRST_X_ASSUM_ST `IN` MP_TAC;
8388 ASM_REWRITE_TAC[critical_edgeX_critical_edge_y;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
8389 FIRST_X_ASSUM_ST `mcell2` (SUBST1_TAC o GSYM);
8390 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
8391 BY(ASM_MESON_TAC[Geomdetail.DIST_PAIR_LEMMA])
8395 let MCELL3_CRITICAL_WEIGHT = prove_by_refinement(
8397 pack_nonlinear_non_ox3q1h /\
8400 critical_edge_y (dist(u0,u1)) /\
8401 X = mcell3 V [u0;u1;v1;v2] /\
8402 {u0,u1} IN edgeX V X /\
8403 barV V 3 [u0;u1;v1;v2] ==>
8404 critical_weight V X = &1 / &(wtcount3_y (dist(u0,u1)) (dist(u0,v1)) (dist(u1,v1)))`,
8407 REWRITE_TAC[Pack_defs.critical_weight];
8408 REPEAT WEAKER_STRIP_TAC;
8409 REWRITE_TAC[Pack_defs.critical_edge_y;Pack_defs.critical_weight;arith `&1 /x = inv x`];
8410 REWRITE_TAC[REAL_EQ_INV2;REAL_OF_NUM_EQ];
8411 TYPIFY `~NULLSET X` (C SUBGOAL_THEN ASSUME_TAC);
8412 ASM_REWRITE_TAC[Bump.MCELL3];
8413 DISCH_THEN (MP_TAC o (MATCH_MP Bump.RIJRIED));
8414 BY(ASM_MESON_TAC[NOT_IN_EMPTY;Bump.MCELL3]);
8415 INTRO_TAC MCELL3_EDGE_EXPLICIT [`V`;`u0`;`u1`;`v1`;`v2`];
8418 BY(ASM_MESON_TAC[]);
8420 TYPIFY `critical_edgeX V X SUBSET edgeX V X` (C SUBGOAL_THEN MP_TAC);
8421 REWRITE_TAC[SUBSET;Bump.CRITICAL_EDGEX_ALT];
8425 TYPIFY `critical_edgeX V (mcell3 V [u0; u1; v1; v2]) = {{u0, u1}, {u0, v1}, {u1, v1}} INTER critical_edgeX V (mcell3 V [u0; u1; v1; v2])` (C SUBGOAL_THEN SUBST1_TAC);
8426 FIRST_X_ASSUM MP_TAC;
8428 INTRO_TAC Upfzbzm_support_lemmas.FINITE_critical_edgeX [`V`;`X`];
8431 ASM_SIMP_TAC[CARD_INSERT_INTER_ALT];
8432 ASM_REWRITE_TAC[INTER_EMPTY;CARD_CLAUSES;NOT_IN_EMPTY;IN_INSERT;critical_edgeX_critical_edge_y];
8433 INTRO_TAC MCELL3_EXTREME_CARD [`V`;`[u0; u1; v1; v2]`];
8435 BY(ASM_MESON_TAC[IN]);
8436 REWRITE_TAC[Bump.EL_EXPLICIT];
8437 DISCH_THEN (ASSUME_TAC o (MATCH_MP Leaf_cell.CARD4_ALL_DISTINCT));
8438 ASM_REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
8439 REWRITE_TAC[Sphere.wtcount3_y];
8445 let MCELL3_008 = prove_by_refinement(
8447 pack_nonlinear_non_ox3q1h /\
8451 critical_edge_y (dist(u0,u1)) /\
8452 {u0,u1} IN edgeX V (X) /\
8454 #0.008 * dihX V (X) (u0,u1) <=
8455 gammaX V (X) lmfun *
8456 critical_weight V (X) +
8457 beta_bump_v1 V {u0, u1} (X)
8461 REPEAT WEAKER_STRIP_TAC;
8462 COMMENT "now 3 cell";
8463 INTRO_TAC Leaf_cell.MCELL3_EDGE_FIRST [`V`;`ul`;`u0`;`u1`];
8465 BY(ASM_MESON_TAC[IN]);
8467 REPEAT WEAKER_STRIP_TAC;
8468 FIRST_X_ASSUM (fun t -> REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[t]);
8469 REPEAT WEAKER_STRIP_TAC;
8470 TYPIFY `~NULLSET X` (C SUBGOAL_THEN ASSUME_TAC);
8471 ASM_REWRITE_TAC[Bump.MCELL3];
8472 DISCH_THEN (MP_TAC o (MATCH_MP Bump.RIJRIED));
8473 BY(ASM_MESON_TAC[NOT_IN_EMPTY;Bump.MCELL3]);
8474 TYPIFY `vl = [EL 0 vl; EL 1 vl; EL 2 vl; EL 3 vl]` (C SUBGOAL_THEN ASSUME_TAC);
8475 MATCH_MP_TAC Bump.LENGTH4;
8476 BY(REWRITE_TAC[arith `4 = 3+1`] THEN ASM_MESON_TAC[Sphere.BARV;IN]);
8477 INTRO_TAC Tskajxy_lemmas.gammaX_gamma3f [`V`;`mcell3 V vl`;`vl`;`EL 0 vl`;`EL 1 vl`;`EL 2 vl`;`EL 3 vl`;`dist(EL 1 vl,EL 2 vl)`;`dist(EL 0 vl,EL 2 vl)`;`dist(EL 0 vl,EL 1 vl)`];
8479 ASM_REWRITE_TAC[Bump.MCELL3];
8480 BY(ASM_MESON_TAC[Bump.MCELL3]);
8481 ASM_REWRITE_TAC[Bump.MCELL3];
8482 FIRST_ASSUM SUBST1_TAC;
8483 REWRITE_TAC[Bump.EL_EXPLICIT];
8484 DISCH_THEN (unlist REWRITE_TAC);
8485 INTRO_TAC Merge_ineq.cell3_008_from_ineq_ALT [];
8488 REWRITE_TAC[GSYM Bump.MCELL3];
8489 GMATCH_SIMP_TAC MCELL3_CRITICAL_WEIGHT;
8490 GEXISTL_TAC [`EL 0 vl`;`EL 1 vl`;`EL 2 vl`];
8492 TYPIFY `EL 3 vl` EXISTS_TAC;
8494 BY(ASM_MESON_TAC[Bump.MCELL3]);
8495 TYPIFY `gamma3f (dist (EL 1 vl,EL 2 vl)) (dist (EL 0 vl,EL 2 vl)) (dist (EL 0 vl,EL 1 vl)) sqrt2 lmfun = gamma3f (dist (EL 0 vl,EL 1 vl)) (dist (EL 1 vl,EL 2 vl)) (dist (EL 0 vl,EL 2 vl)) sqrt2 lmfun` (C SUBGOAL_THEN SUBST1_TAC);
8496 BY(MESON_TAC[Merge_ineq.gamma3f_sym]);
8497 TYPIFY `wtcount3_y (dist (EL 0 vl,EL 1 vl)) (dist (EL 0 vl,EL 2 vl)) (dist (EL 1 vl,EL 2 vl)) = wtcount3_y (dist (EL 0 vl,EL 1 vl)) (dist (EL 1 vl,EL 2 vl)) (dist (EL 0 vl,EL 2 vl))` (C SUBGOAL_THEN SUBST1_TAC);
8498 REWRITE_TAC[Sphere.wtcount3_y];
8500 REWRITE_TAC[arith `x * &1 / y = x / y`];
8501 REWRITE_TAC[arith `#0.008 * d = d * #0.008`];
8502 REWRITE_TAC[Bump.MCELL3];
8503 REPEAT (GMATCH_SIMP_TAC Bump.MCELL_BUMP_0);
8505 BY(ASM_MESON_TAC[arith `3 < 4`;Bump.MCELL3]);
8506 REWRITE_TAC[arith `x + &0 = x`];
8507 FIRST_X_ASSUM MATCH_MP_TAC;
8508 INTRO_TAC MCELL3_DOMAIN [`V`;`[EL 0 vl;EL 1 vl;EL 2 vl;EL 3 vl]`];
8509 REWRITE_TAC[Bump.EL_EXPLICIT];
8511 BY(ASM_MESON_TAC[Bump.MCELL3]);
8512 REPEAT WEAKER_STRIP_TAC;
8514 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
8515 FIRST_X_ASSUM_ST `critical_edge_y` MP_TAC;
8516 ASM_REWRITE_TAC[Sphere.critical_edge_y];
8517 DISCH_THEN (unlist REWRITE_TAC);
8518 FIRST_X_ASSUM MP_TAC;
8519 MATCH_MP_TAC (arith `e = e' ==> (e < s ==> e'< s)`);
8520 BY(MESON_TAC[Collect_geom.ETA_Y_SYYM])
8524 let real_model_008 = prove_by_refinement(
8525 `!V u0 u1 w0 n f i. pack_nonlinear_non_ox3q1h /\
8529 s_leaf V [u0; u1] HAS_SIZE n /\
8533 ~collinear {u0, u1, w0} /\
8534 critical_edge_y (dist (u0,u1)) /\
8535 leaf_rank V [u0; u1] w0 n f /\
8538 sum {X | mcell_set V X /\
8539 {u0, u1} IN edgeX V X /\
8540 X SUBSET wedge_ge u0 u1 (f i) (f (SUC i)) /\
8541 ~(X = cc_cell V [u0; u1; f i]) /\
8542 ~(X = cc_cell V [u1; u0; f (SUC i)])} (\X. #0.008 * dihX V X (u0,u1)) <=
8543 sum {X | mcell_set V X /\
8544 {u0, u1} IN edgeX V X /\
8545 X SUBSET wedge_ge u0 u1 (f i) (f (SUC i)) /\
8546 ~(X = cc_cell V [u0; u1; f i]) /\
8547 ~(X = cc_cell V [u1; u0; f (SUC i)])}
8548 (\X. gammaX V X lmfun * critical_weight V X + beta_bump_v1 V {u0, u1} X)
8552 REPEAT WEAKER_STRIP_TAC;
8553 MATCH_MP_TAC SUM_LE;
8555 INTRO_TAC Marchal_cells_3.FINITE_EDGE_X2 [`V`;`{u0,u1}`;`u0`;`u1`];
8558 MATCH_MP_TAC FINITE_SUBSET;
8559 TYPIFY `{X | mcell_set V X /\ edgeX V X {u0, u1}}` EXISTS_TAC;
8561 REWRITE_TAC[SUBSET;IN_ELIM_THM];
8564 REWRITE_TAC[IN_ELIM_THM];
8565 REPEAT WEAKER_STRIP_TAC;
8566 INTRO_TAC EDGE_IMP_K23 [`V`;`x`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
8568 BY(ASM_REWRITE_TAC[]);
8569 REPEAT WEAKER_STRIP_TAC;
8571 FIRST_X_ASSUM DISJ_CASES_TAC;
8572 REPEAT (GMATCH_SIMP_TAC Bump.MCELL_BUMP_0);
8576 BY(ASM_SIMP_TAC[arith `(k = 2) ==> (k < 4)`]);
8577 FIRST_X_ASSUM_ST `edgeX` MP_TAC;
8579 BY(MESON_TAC[Bump.RIJRIED;NOT_IN_EMPTY]);
8580 REWRITE_TAC[arith `x + &0 = x`];
8581 GMATCH_SIMP_TAC MCELL2_CRITICAL_WEIGHT1;
8583 GEXISTL_TAC [`u0`;`u1`;`[u0;u1;v1;v2]`];
8585 BY(ASM_MESON_TAC[Bump.MCELL2]);
8586 REWRITE_TAC[arith `x * &1 = x`];
8587 INTRO_TAC CC_2_PROPS [`V`;`x`;`u0`;`u1`;`[u0;u1;v1;v2]`];
8589 BY(ASM_REWRITE_TAC[Bump.MCELL2]);
8590 BY(ASM_MESON_TAC[arith `x < y ==> x <= y`]);
8591 COMMENT "now 3 cell";
8592 INTRO_TAC MCELL3_008 [`V`;`x`;`u0`;`u1`;`[u0;u1;v1;v2]`];
8594 BY(ASM_REWRITE_TAC[Bump.MCELL3]);
8595 BY(ASM_REWRITE_TAC[])
8599 let real_model_cell23 = prove_by_refinement(
8600 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
8604 s_leaf V [u0; u1] HAS_SIZE n /\
8608 ~collinear {u0, u1, w0} /\
8609 critical_edge_y (dist (u0,u1)) /\
8610 leaf_rank V [u0; u1] w0 n f
8612 (!i. ~cc_4 V u0 u1 f i
8613 ==> gammaX V (cc_cell V [u0; u1; f i]) lmfun *
8614 critical_weight V (cc_cell V [u0; u1; f i]) +
8615 gammaX V (cc_cell V [u1; u0; f (SUC i)]) lmfun *
8616 critical_weight V (cc_cell V [u1; u0; f (SUC i)]) <=
8617 gg_mcell V f u0 u1 i)
8621 REPEAT WEAKER_STRIP_TAC;
8622 REWRITE_TAC[gg_mcell];
8623 GMATCH_SIMP_TAC CC_3_SUM_fn;
8625 BY(ASM_MESON_TAC[]);
8626 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
8628 BY(ASM_REWRITE_TAC[]);
8629 REPEAT WEAKER_STRIP_TAC;
8630 ASM_REWRITE_TAC[arith `x + &0 = x`];
8631 REWRITE_TAC[arith `g1 + g2 <= g1 + g2 + s <=> &0 <= s`];
8632 INTRO_TAC real_model_008 [`V`; `u0`; `u1`; `w0`; `n`; `f`; `i`];
8634 BY(ASM_REWRITE_TAC[]);
8636 TYPIFY `&0 <= sum {X | mcell_set V X /\ {u0, u1} IN edgeX V X /\ X SUBSET wedge_ge u0 u1 (f i) (f (SUC i)) /\ ~(X = cc_cell V [u0; u1; f i]) /\ ~(X = cc_cell V [u1; u0; f (SUC i)])} (\X. #0.008 * dihX V X (u0,u1))` ENOUGH_TO_SHOW_TAC;
8637 FIRST_X_ASSUM MP_TAC;
8638 TYPED_ABBREV_TAC `s = {X | mcell_set V X /\ {u0, u1} IN edgeX V X /\ X SUBSET wedge_ge u0 u1 (f i) (f (SUC i)) /\ ~(X = cc_cell V [u0; u1; f i]) /\ ~(X = cc_cell V [u1; u0; f (SUC i)])}` ;
8640 MATCH_MP_TAC SUM_POS_LE;
8642 MATCH_MP_TAC FINITE_SUBSET;
8643 TYPIFY `{X | mcell_set V X /\ edgeX V X {u0,u1} }` EXISTS_TAC;
8645 MATCH_MP_TAC Marchal_cells_3.FINITE_EDGE_X2;
8646 BY(ASM_MESON_TAC[]);
8648 REWRITE_TAC[IN_ELIM_THM];
8649 REPEAT WEAKER_STRIP_TAC;
8650 GMATCH_SIMP_TAC REAL_LE_MUL;
8653 BY(REWRITE_TAC[Upfzbzm_support_lemmas.DIHX_POS])
8657 let real_model_cell23_008 = prove_by_refinement(
8658 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
8662 s_leaf V [u0; u1] HAS_SIZE n /\
8666 ~collinear {u0, u1, w0} /\
8667 critical_edge_y (dist (u0,u1)) /\
8668 leaf_rank V [u0; u1] w0 n f
8670 (!i. ~cc_4 V u0 u1 f i
8671 ==> (gammaX V (cc_cell V [u0; u1; f i]) lmfun *
8672 critical_weight V (cc_cell V [u0; u1; f i]) - #0.008 * dihX V (cc_cell V [u0;u1;f i]) (u0,u1)) +
8673 (gammaX V (cc_cell V [u1; u0; f (SUC i)]) lmfun *
8674 critical_weight V (cc_cell V [u1; u0; f (SUC i)]) - #0.008 * dihX V (cc_cell V [u1;u0;f (SUC i)]) (u0,u1)) +
8675 #0.008 * azim_mcell V f u0 u1 i <=
8676 gg_mcell V f u0 u1 i)
8680 REPEAT WEAKER_STRIP_TAC;
8681 REWRITE_TAC[gg_mcell;azim_mcell];
8682 GMATCH_SIMP_TAC CC_3_SUM_fn;
8684 BY(ASM_MESON_TAC[]);
8685 GMATCH_SIMP_TAC CC_3_SUM_fn;
8687 BY(ASM_MESON_TAC[]);
8688 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
8690 BY(ASM_MESON_TAC[]);
8691 REPEAT WEAKER_STRIP_TAC;
8692 ASM_REWRITE_TAC[arith `x + &0 = x`];
8693 TYPED_ABBREV_TAC `s = {X | mcell_set V X /\ {u0, u1} IN edgeX V X /\ X SUBSET wedge_ge u0 u1 (f i) (f (SUC i)) /\ ~(X = cc_cell V [u0; u1; f i]) /\ ~(X = cc_cell V [u1; u0; f (SUC i)])}` ;
8694 TYPIFY `!X. X IN s ==> (?k v1 v2. barV V 3 [u0; u1; v1; v2] /\ (k = 2 \/ k = 3) /\ X = mcell k V [u0; u1; v1; v2])` (C SUBGOAL_THEN ASSUME_TAC);
8696 REWRITE_TAC[IN_ELIM_THM];
8697 REPEAT WEAKER_STRIP_TAC;
8698 MATCH_MP_TAC EDGE_IMP_K23;
8699 BY(ASM_MESON_TAC[]);
8700 TYPIFY `sum s (\X. gammaX V X lmfun * critical_weight V X + beta_bump_v1 V {u0, u1} X) = sum s (\X. gammaX V X lmfun * critical_weight V X )` (C SUBGOAL_THEN ASSUME_TAC);
8701 MATCH_MP_TAC SUM_EQ;
8702 REWRITE_TAC[arith `g + b = g <=> b = &0`];
8703 REPEAT WEAKER_STRIP_TAC;
8704 FIRST_X_ASSUM (C INTRO_TAC [`x`]);
8706 REPEAT WEAKER_STRIP_TAC;
8708 MATCH_MP_TAC Bump.MCELL_BUMP_0;
8711 FIRST_X_ASSUM_ST `\/` MP_TAC;
8713 DISCH_THEN (ASSUME_TAC o (MATCH_MP Bump.RIJRIED));
8714 FIRST_X_ASSUM_ST `IN` MP_TAC;
8716 BY(ASM_REWRITE_TAC[IN_ELIM_THM;NOT_IN_EMPTY]);
8718 COMMENT "reduce to 008 bound";
8719 TYPIFY `#0.008 * sum s (\X. dihX V X (u0,u1)) <= sum s (\X. gammaX V X lmfun * critical_weight V X)` ENOUGH_TO_SHOW_TAC;
8721 REWRITE_TAC[GSYM SUM_LMUL];
8722 FIRST_X_ASSUM (SUBST1_TAC o GSYM);
8724 MATCH_MP_TAC real_model_008;
8729 let GAMMAX_008a = prove_by_refinement(
8731 pack_nonlinear_non_ox3q1h /\
8735 s_leaf V [u0; u1] HAS_SIZE n /\
8739 ~collinear {u0, u1, w0} /\
8740 critical_edge_y (dist (u0,u1)) /\
8741 leaf_rank V [u0; u1] w0 n f /\
8743 ==> #0.008 * dihX V (cc_cell V [u0; u1; f i]) (u0,u1) <=
8744 gammaX V (cc_cell V [u0; u1; f i]) lmfun *
8745 critical_weight V (cc_cell V [u0; u1; f i]) `,
8748 REPEAT WEAKER_STRIP_TAC;
8749 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
8751 BY(ASM_MESON_TAC[]);
8752 REPEAT WEAKER_STRIP_TAC;
8753 INTRO_TAC MCELL3_008 [`V`;`cc_cell V [u0;u1; f i]`;`u0`;`u1`;`cc_uh V [u0;u1;f i]`];
8757 BY(ASM_REWRITE_TAC[Leaf_cell.cc_cell;Bump.MCELL3]);
8758 INTRO_TAC Leaf_cell.STEM_EDGEX [`V`;` [u0;u1;f i]`];
8759 BY(ASM_REWRITE_TAC[Bump.EL_EXPLICIT]);
8760 BY(ASM_REWRITE_TAC[arith `x + &0 = x`])
8764 let GAMMAX_008b = prove_by_refinement(
8766 pack_nonlinear_non_ox3q1h /\
8770 s_leaf V [u0; u1] HAS_SIZE n /\
8774 ~collinear {u0, u1, w0} /\
8775 critical_edge_y (dist (u0,u1)) /\
8776 leaf_rank V [u0; u1] w0 n f /\
8778 ==> #0.008 * dihX V (cc_cell V [u1; u0; f (SUC i)]) (u0,u1) <=
8779 gammaX V (cc_cell V [u1; u0; f (SUC i)]) lmfun *
8780 critical_weight V (cc_cell V [u1; u0; f (SUC i)])`,
8783 REPEAT WEAKER_STRIP_TAC;
8784 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
8786 BY(ASM_MESON_TAC[]);
8787 REPEAT WEAKER_STRIP_TAC;
8788 INTRO_TAC Leaf_cell.STEM_EDGEX [`V`;` [u1;u0;f (SUC i)]`];
8789 (ASM_REWRITE_TAC[Bump.EL_EXPLICIT]);
8791 GMATCH_SIMP_TAC (GSYM Marchal_cells_3.DIHX_SYM);
8794 ONCE_REWRITE_TAC[GSYM IN] THEN MATCH_MP_TAC Leaf_cell.CC_CELL_IN_MCELL_SET;
8795 BY(ASM_REWRITE_TAC[]);
8796 INTRO_TAC MCELL3_008 [`V`;`cc_cell V [u1;u0; f (SUC i)]`;`u1`;`u0`;`cc_uh V [u1;u0;f (SUC i)]`];
8800 BY(ASM_REWRITE_TAC[Leaf_cell.cc_cell;Bump.MCELL3]);
8801 ONCE_REWRITE_TAC[DIST_SYM];
8802 BY(ASM_REWRITE_TAC[]);
8803 TYPIFY `{u1,u0} = {u0,u1}` (C SUBGOAL_THEN SUBST1_TAC);
8805 BY((ASM_REWRITE_TAC[arith `x + &0 = x`]))
8809 let real_model_3a = prove_by_refinement(
8810 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
8814 s_leaf V [u0; u1] HAS_SIZE n /\
8818 ~collinear {u0, u1, w0} /\
8819 critical_edge_y (dist (u0,u1)) /\
8820 leaf_rank V [u0; u1] w0 n f
8822 (!i. ~cc_4 V u0 u1 f i
8824 gammaX V (cc_cell V [u0; u1; f i]) lmfun *
8825 critical_weight V (cc_cell V [u0; u1; f i]))
8829 REPEAT WEAKER_STRIP_TAC;
8830 GMATCH_SIMP_TAC REAL_LE_MUL;
8831 REWRITE_TAC[CRITICAL_WEIGHT_POS_LE];
8832 INTRO_TAC TSKAJXY_3 [`V`;`cc_cell V [u0;u1;f i]`;`cc_uh V [u0;u1;f i]`];
8833 REWRITE_TAC[arith `g >= &0 <=> &0 <= g`];
8834 DISCH_THEN MATCH_MP_TAC;
8835 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
8837 BY(ASM_MESON_TAC[]);
8838 REPEAT WEAKER_STRIP_TAC;
8840 BY(ASM_REWRITE_TAC[Leaf_cell.cc_cell;Bump.MCELL3])
8844 let real_model_3b = prove_by_refinement(
8845 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
8849 s_leaf V [u0; u1] HAS_SIZE n /\
8853 ~collinear {u0, u1, w0} /\
8854 critical_edge_y (dist (u0,u1)) /\
8855 leaf_rank V [u0; u1] w0 n f
8857 (!i. ~cc_4 V u0 u1 f i
8859 gammaX V (cc_cell V [u1; u0; f (SUC i)]) lmfun *
8860 critical_weight V (cc_cell V [u1; u0; f (SUC i)]))
8864 REPEAT WEAKER_STRIP_TAC;
8865 GMATCH_SIMP_TAC REAL_LE_MUL;
8866 REWRITE_TAC[CRITICAL_WEIGHT_POS_LE];
8867 INTRO_TAC TSKAJXY_3 [`V`;`cc_cell V [u1;u0;f (SUC i)]`;`cc_uh V [u1;u0;f (SUC i)]`];
8868 REWRITE_TAC[arith `g >= &0 <=> &0 <= g`];
8869 DISCH_THEN MATCH_MP_TAC;
8870 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
8872 BY(ASM_MESON_TAC[]);
8873 REPEAT WEAKER_STRIP_TAC;
8875 BY(ASM_REWRITE_TAC[Leaf_cell.cc_cell;Bump.MCELL3])
8879 let real_model_gr = prove_by_refinement(
8880 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
8884 s_leaf V [u0; u1] HAS_SIZE n /\
8888 ~collinear {u0, u1, w0} /\
8889 critical_edge_y (dist (u0,u1)) /\
8890 leaf_rank V [u0; u1] w0 n f
8892 (!i. ~cc_4 V u0 u1 f i
8893 ==> #0.008 * azim_mcell V f u0 u1 i <= gg_mcell V f u0 u1 i) `,
8896 REPEAT WEAKER_STRIP_TAC;
8897 INTRO_TAC real_model_cell23_008 [`V`;`u0`;`u1`;`w0`;`n`;`f`];
8899 BY(ASM_REWRITE_TAC[]);
8900 DISCH_THEN (C INTRO_TAC [`i`]);
8902 MATCH_MP_TAC (arith `&0 <= t1 /\ &0 <= t2 ==> (t1 + t2 + a <= g ==> a <= g)`);
8903 REWRITE_TAC[arith `&0 <= g - d <=> d <= g`];
8905 MATCH_MP_TAC GAMMAX_008a;
8906 BY(ASM_MESON_TAC[]);
8907 MATCH_MP_TAC GAMMAX_008b;
8912 let JSP_BOUNDS = prove_by_refinement(
8913 `!(u0:real^3) u1 u2. pack_nonlinear_non_ox3q1h /\
8914 ~collinear {u0, u1, u2} /\
8915 hl [u0; u1; u2] <= #1.34 /\
8916 &2 * hminus <= dist (u0,u1) /\
8917 &2 <= dist (u0,u2) /\
8920 dist(u0,u2) < &2 * hminus /\ dist(u1,u2) < &2 * hminus`,
8923 REPEAT WEAKER_STRIP_TAC;
8924 INTRO_TAC JSPEVYT_EXPLICIT [`u0`;`u1`;`u2`];
8926 DISCH_THEN (unlist REWRITE_TAC);
8927 INTRO_TAC JSPEVYT_EXPLICIT [`u1`;`u0`;`u2`];
8929 TYPIFY `{u1,u0,u2 } = {u0,u1,u2}` (C SUBGOAL_THEN ASSUME_TAC);
8931 TYPIFY `hl [u1;u0;u2] = hl[u0;u1;u2]` (C SUBGOAL_THEN SUBST1_TAC);
8932 BY(ASM_REWRITE_TAC[Pack_defs.HL;set_of_list]);
8934 ONCE_REWRITE_TAC[DIST_SYM];
8935 BY(ASM_REWRITE_TAC[]);
8940 let real_model_pema = prove_by_refinement(
8941 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
8945 s_leaf V [u0; u1] HAS_SIZE n /\
8949 ~collinear {u0, u1, w0} /\
8950 critical_edge_y (dist (u0,u1)) /\
8951 leaf_rank V [u0; u1] w0 n f
8953 (!i. ~cc_4 V u0 u1 f i /\
8954 hl [u0; u1; f i] < #1.34 /\
8955 ~(hl [u0; u1; f (SUC i)] < #1.34) /\
8956 azim_mcell V f u0 u1 i < #1.074
8957 ==> a_spine5 + b_spine5 * azim_mcell V f u0 u1 i <=
8958 gg_mcell V f u0 u1 i)
8962 REPEAT WEAKER_STRIP_TAC;
8963 INTRO_TAC real_model_cell23_008 [`V`;`u0`;`u1`;`w0`;`n`;`f`];
8965 BY(ASM_REWRITE_TAC[]);
8966 TYPIFY `&2 * hminus <= dist (u0,u1) /\ dist(u0,u1) <= &2 * hplus` (C SUBGOAL_THEN ASSUME_TAC);
8967 FIRST_X_ASSUM_ST `critical_edge_y` MP_TAC;
8968 BY((REWRITE_TAC[Sphere.critical_edge_y]) THEN REAL_ARITH_TAC);
8969 DISCH_THEN (C INTRO_TAC [`i`]);
8971 MATCH_MP_TAC (arith `&0 <= t /\ a <= t'+ a' ==> (t' + t + a' <= g ==> a <= g)`);
8973 REWRITE_TAC[arith `&0 <= g - d <=> d <= g`];
8974 MATCH_MP_TAC GAMMAX_008b;
8975 BY(ASM_MESON_TAC[]);
8976 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
8978 BY(ASM_REWRITE_TAC[]);
8979 REPEAT WEAKER_STRIP_TAC;
8981 COMMENT "bound edges 3,5";
8982 INTRO_TAC JSP_BOUNDS [`u0`;`u1`;`f i`];
8984 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
8985 REPEAT WEAKER_STRIP_TAC;
8986 COMMENT "simplify goal";
8987 TYPIFY `a_spine5 + b_spine5 * dih_y (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i))) y4 (dist (u1,f (SUC i))) (dist (u1,f i)) <= gammaX V (cc_cell V [u0; u1; f i]) lmfun * critical_weight V (cc_cell V [u0; u1; f i]) - #0.008 * dihX V (cc_cell V [u0; u1; f i]) (u0,u1) + #0.008 * dih_y (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i))) y4 (dist (u1,f (SUC i))) (dist (u1,f i))` ENOUGH_TO_SHOW_TAC;
8988 REWRITE_TAC[Sphere.b_spine5];
8989 FIRST_X_ASSUM_ST `dih_y` MP_TAC;
8991 COMMENT "import inequality";
8992 MP_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "PEMKWKU");
8993 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
8994 REWRITE_TAC[GSYM Sphere.rad2_y];
8995 REWRITE_TAC[ (TAUT ` (p ==> a \/ b) <=> (p /\ ~b ==> a)`)];
8996 REWRITE_TAC[DE_MORGAN_THM];
8997 REWRITE_TAC[Functional_equation.nonf_gamma23_keep135_x;Sphere.y_of_x];
8998 REWRITE_TAC[GSYM (REWRITE_RULE[LET_DEF;LET_END_DEF] Sphere.dih_y)];
9000 FIRST_X_ASSUM (C INTRO_TAC [`(dist (u0,u1))`;` (dist (u0,f (SUC i)))`;` (dist (u0,f i))`;` y4`; ` (dist (u1,f i))`;`(dist (u1,f (SUC i)))`]);
9002 REWRITE_TAC[arith `~(x < y) <=> y<= x`;arith`~(x > y) <=> x <= y`];
9003 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
9004 GMATCH_SIMP_TAC ETA_Y_LEMMA;
9007 BY(REPEAT (FIRST_X_ASSUM_ST `#1.34` MP_TAC) THEN REAL_ARITH_TAC);
9008 TYPIFY `!x. x <= &2 <=> x <= (sqrt(&2) pow 2)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
9009 BY(REWRITE_TAC[GSYM Sphere.sqrt2;arith `x pow 2 = x * x`;Nonlin_def.sqrt2_sqrt2]);
9010 REPEAT (GMATCH_SIMP_TAC ETA_Y_LEMMA_ALT);
9011 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
9014 FIRST_X_ASSUM_ST `rad2_y` MP_TAC;
9015 BY(MESON_TAC[Merge_ineq.rad2_y_sym]);
9016 PURE_ONCE_REWRITE_TAC[Nonlinear_lemma.dih_y_sym];
9017 FIRST_X_ASSUM_ST `dih_y` MP_TAC;
9018 FIRST_X_ASSUM_ST `#1.074` MP_TAC;
9021 BY(ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2]);
9022 COMMENT "handle gamma3_f";
9023 GMATCH_SIMP_TAC (GSYM Merge_ineq.gamma3_x_gamma3f);
9025 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
9026 GMATCH_SIMP_TAC critical_weight1;
9028 BY(ASM_REWRITE_TAC[]);
9029 GMATCH_SIMP_TAC mcell3_gammaX_gamma3f;
9031 GEXISTL_TAC [`w0`;`n`];
9032 BY(ASM_REWRITE_TAC[]);
9033 REWRITE_TAC[arith `g + dd * #0.008 > r <=> g > r - dd * #0.008`];
9034 MATCH_MP_TAC(arith `r = s + a - b ==> (g > r ==> s <= g * &1 - a + b)`);
9035 REWRITE_TAC[arith `(a+b) - c = a + b - c`;arith `(a+b) + c = a + b + c`];
9037 MATCH_MP_TAC (arith `(d = d' /\ e' = -- e) ==> (b * d - e = b * d' + e')`);
9039 BY(MESON_TAC[Nonlinear_lemma.dih_y_sym]);
9040 MATCH_MP_TAC (arith `d3' = d3'' /\ d6 = d6' ==> (#0.008 * d3' - #0.008 * d6 = --( ( d6' - d3'')* #0.008))`);
9042 BY(MESON_TAC[Nonlinear_lemma.dih_y_sym]);
9043 GMATCH_SIMP_TAC mcell3_dihX_dih_y;
9045 BY(ASM_MESON_TAC[]);
9046 REWRITE_TAC[Sphere.dih_y;LET_DEF;LET_END_DEF;Nonlin_def.sqrt2_sqrt2];
9047 BY(MESON_TAC[Nonlinear_lemma.dih_x_sym])
9051 let real_model_pemb = prove_by_refinement(
9052 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
9056 s_leaf V [u0; u1] HAS_SIZE n /\
9060 ~collinear {u0, u1, w0} /\
9061 critical_edge_y (dist (u0,u1)) /\
9062 leaf_rank V [u0; u1] w0 n f
9064 (!i. ~cc_4 V u0 u1 f i /\
9065 ~(hl [u0; u1; f i] < #1.34) /\
9066 hl [u0; u1; f (SUC i)] < #1.34 /\
9067 azim_mcell V f u0 u1 i < #1.074
9068 ==> a_spine5 + b_spine5 * azim_mcell V f u0 u1 i <=
9069 gg_mcell V f u0 u1 i)
9073 REPEAT WEAKER_STRIP_TAC;
9074 INTRO_TAC real_model_cell23_008 [`V`;`u0`;`u1`;`w0`;`n`;`f`];
9076 BY(ASM_REWRITE_TAC[]);
9077 TYPIFY `&2 * hminus <= dist (u0,u1) /\ dist(u0,u1) <= &2 * hplus` (C SUBGOAL_THEN ASSUME_TAC);
9078 FIRST_X_ASSUM_ST `critical_edge_y` MP_TAC;
9079 BY((REWRITE_TAC[Sphere.critical_edge_y]) THEN REAL_ARITH_TAC);
9080 DISCH_THEN (C INTRO_TAC [`i`]);
9082 MATCH_MP_TAC (arith `&0 <= t' /\ a <= t+ a' ==> (t' + t + a' <= g ==> a <= g)`);
9084 REWRITE_TAC[arith `&0 <= g - d <=> d <= g`];
9085 MATCH_MP_TAC GAMMAX_008a;
9086 BY(ASM_MESON_TAC[]);
9087 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
9089 BY(ASM_REWRITE_TAC[]);
9090 REPEAT WEAKER_STRIP_TAC;
9092 COMMENT "bound edges 2,6";
9093 INTRO_TAC JSP_BOUNDS [`u0`;`u1`;`f (SUC i)`];
9095 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
9096 REPEAT WEAKER_STRIP_TAC;
9097 COMMENT "simplify goal+";
9098 TYPIFY `a_spine5 + b_spine5 * dih_y (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i))) y4 (dist (u1,f (SUC i))) (dist (u1,f i)) <= gammaX V (cc_cell V [u1; u0; f (SUC i)]) lmfun * critical_weight V (cc_cell V [u1; u0; f (SUC i)]) - #0.008 * dihX V (cc_cell V [u1; u0; f (SUC i)]) (u0,u1) + #0.008 * dih_y (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i))) y4 (dist (u1,f (SUC i))) (dist (u1,f i)) ` ENOUGH_TO_SHOW_TAC;
9099 REWRITE_TAC[Sphere.b_spine5];
9100 FIRST_X_ASSUM_ST `dih_y` MP_TAC;
9102 COMMENT "import inequality";
9103 MP_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "PEMKWKU");
9104 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> (a /\ b) ==> c`];
9105 REWRITE_TAC[GSYM Sphere.rad2_y];
9106 REWRITE_TAC[ (TAUT ` (p ==> a \/ b) <=> (p /\ ~b ==> a)`)];
9107 REWRITE_TAC[DE_MORGAN_THM];
9108 REWRITE_TAC[Functional_equation.nonf_gamma23_keep135_x;Sphere.y_of_x];
9109 REWRITE_TAC[GSYM (REWRITE_RULE[LET_DEF;LET_END_DEF] Sphere.dih_y)];
9111 COMMENT "instantiate pem";
9112 FIRST_X_ASSUM (C INTRO_TAC [`(dist (u0,u1))`;` (dist (u0,f ( i)))`;` (dist (u0,f (SUC i)))`;` y4`; ` (dist (u1,f (SUC i)))`;`(dist (u1,f ( i)))`]);
9114 REWRITE_TAC[arith `~(x < y) <=> y<= x`;arith`~(x > y) <=> x <= y`];
9115 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
9116 GMATCH_SIMP_TAC ETA_Y_LEMMA;
9119 BY(REPEAT (FIRST_X_ASSUM_ST `#1.34` MP_TAC) THEN REAL_ARITH_TAC);
9120 TYPIFY `!x. x <= &2 <=> x <= (sqrt(&2) pow 2)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
9121 BY(REWRITE_TAC[GSYM Sphere.sqrt2;arith `x pow 2 = x * x`;Nonlin_def.sqrt2_sqrt2]);
9122 REPEAT (GMATCH_SIMP_TAC ETA_Y_LEMMA_ALT);
9123 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
9125 FIRST_X_ASSUM_ST `dih_y` MP_TAC;
9126 FIRST_X_ASSUM_ST `#1.074` MP_TAC;
9129 BY(ASM_REWRITE_TAC[Sphere.sqrt2;Nonlinear_lemma.sqrt8_sqrt2]);
9130 COMMENT "handle gamma3_f";
9131 GMATCH_SIMP_TAC (GSYM Merge_ineq.gamma3_x_gamma3f);
9133 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
9134 GMATCH_SIMP_TAC critical_weight1;
9136 (ASM_REWRITE_TAC[]);
9137 ONCE_REWRITE_TAC[DIST_SYM];
9138 BY(ASM_REWRITE_TAC[]);
9139 GMATCH_SIMP_TAC mcell3_gammaXb_gamma3f;
9141 GEXISTL_TAC [`w0`;`n`];
9142 BY(ASM_REWRITE_TAC[]);
9143 REWRITE_TAC[arith `g + dd * #0.008 > r <=> g > r - dd * #0.008`];
9144 MATCH_MP_TAC(arith `r = s + a - b ==> (g > r ==> s <= g * &1 - a + b)`);
9145 REWRITE_TAC[arith `(a+b) - c = a + b - c`;arith `(a+b) + c = a + b + c`];
9147 MATCH_MP_TAC (arith `(d = d' /\ e' = -- e) ==> (b * d - e = b * d' + e')`);
9150 MATCH_MP_TAC (arith `d3' = d3'' /\ d6 = d6' ==> (#0.008 * d3' - #0.008 * d6 = --( ( d6' - d3'')* #0.008))`);
9152 GMATCH_SIMP_TAC mcell3_dihXb_dih_y;
9154 BY(ASM_MESON_TAC[]);
9155 REWRITE_TAC[Sphere.dih_y;LET_DEF;LET_END_DEF;Nonlin_def.sqrt2_sqrt2];
9156 BY(MESON_TAC[Nonlinear_lemma.dih_x_sym])
9160 let c2089 = Flyspeck_constants.calc `atn (sqrt (#3.07)) < pi - #2.089`;;
9161 let c1946 = Flyspeck_constants.calc `pi - #1.946 < atn (sqrt (#6.45))`;;
9163 let IXPOTPA_MERGED = prove_by_refinement(
9164 `!y1 y2 y3 y4 y5 y6.
9165 pack_nonlinear_non_ox3q1h /\
9166 critical_edge_y y1 /\
9167 &2 <= y2 /\ y2 <= &2 * hminus /\
9168 &2 <= y3 /\ y3 <= &2 * hminus /\
9169 sqrt8 <= y4 /\ y4 <= y5 + y6 /\
9170 &2 <= y5 /\ y5 <= &2 * hminus /\
9171 &2 <= y6 /\ y6 <= &2 * hminus /\
9172 &0 < delta_y y1 y2 y3 y4 y5 y6 /\
9173 dih_y y1 y2 y3 y4 y5 y6 <= #2.089 /\
9174 #1.946 <= dih_y y1 y2 y3 y4 y5 y6 /\
9175 eta_y y1 y2 y6 pow 2 <= #1.34 pow 2/\
9176 eta_y y1 y3 y5 pow 2 <= #1.34 pow 2
9178 &3 * #0.0057 <= gamma3f y1 y2 y6 sqrt2 lmfun +
9179 gamma3f y1 y3 y5 sqrt2 lmfun +
9180 (dih_y y1 y2 y3 y4 y5 y6 -
9181 (dih_y y1 y2 sqrt2 sqrt2 sqrt2 y6 + dih_y y1 sqrt2 y3 sqrt2 y5 sqrt2)) *
9186 REPEAT WEAKER_STRIP_TAC;
9187 TYPIFY `y4 <= &4 * hminus ` (C SUBGOAL_THEN ASSUME_TAC);
9188 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
9189 TYPIFY `&2 * hminus <= y1 /\ y1 <= &2 * hplus` (C SUBGOAL_THEN ASSUME_TAC);
9190 BY(ASM_MESON_TAC[Sphere.critical_edge_y]);
9191 TYPIFY `&0 < y1` (C SUBGOAL_THEN ASSUME_TAC);
9192 MP_TAC Nonlinear_lemma.hminus_gt;
9193 FIRST_X_ASSUM MP_TAC;
9195 TYPIFY `&0 < y1 * y1` (C SUBGOAL_THEN ASSUME_TAC);
9196 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
9197 BY(ASM_REWRITE_TAC[]);
9198 TYPIFY `delta4_y y1 y2 y3 y4 y5 y6 < &0` (C SUBGOAL_THEN ASSUME_TAC);
9199 REWRITE_TAC[Sphere.delta4_y;Sphere.y_of_x];
9200 MATCH_MP_TAC Merge_ineq.dih_gt_pi2;
9202 REPEAT (FIRST_X_ASSUM MP_TAC);
9203 REWRITE_TAC[Sphere.dih_y;Sphere.delta_y;LET_DEF;LET_END_DEF];
9204 MP_TAC Flyspeck_constants.bounds;
9206 COMMENT "add nonlinear";
9207 MATCH_MP_TAC (arith `x > y ==> y <= x`);
9208 INTRO_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "IXPOTPA") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
9209 ASM_REWRITE_TAC[Sphere.ineq;LET_DEF;LET_END_DEF];
9210 REWRITE_TAC[TAUT `a \/ b \/ c <=> (a \/ b) \/ c`];
9211 ONCE_REWRITE_TAC[TAUT `a \/ b <=> (~a ==> b)`];
9212 REWRITE_TAC[DE_MORGAN_THM];
9213 REWRITE_TAC[TAUT `(a /\ b) /\c <=> a /\ b /\ c`];
9214 ASM_REWRITE_TAC[Functional_equation.nonf_gamma23_full8_x;Sphere.y_of_x];
9215 REPEAT (GMATCH_SIMP_TAC (GSYM Merge_ineq.gamma3_x_gamma3f));
9216 ASM_SIMP_TAC[Merge_ineq.y_bounds];
9217 REWRITE_TAC[REWRITE_RULE[LET_DEF;LET_END_DEF] (GSYM Sphere.dih_y);GSYM Nonlinear_lemma.sqrt2_sqrt2];
9218 DISCH_THEN MATCH_MP_TAC;
9219 COMMENT "remove hypotheses";
9220 ASM_SIMP_TAC [arith `&0 < x ==> ~(x < &0)`];
9221 ASM_SIMP_TAC [arith `x <= y ==> ~(x > y)`];
9222 ASM_SIMP_TAC [arith `x < &0 ==> ~(x > &0)`];
9224 MATCH_MP_TAC (arith `b < a ==> ~(a < b)`);
9225 TYPIFY `#3.07 = sqrt (#3.07) pow 2 ` (C SUBGOAL_THEN SUBST1_TAC);
9226 GMATCH_SIMP_TAC SQRT_POW_2;
9228 GMATCH_SIMP_TAC (GSYM Merge_ineq.lindihpi_lt_y);
9231 GMATCH_SIMP_TAC REAL_LT_RSQRT;
9233 FIRST_X_ASSUM_ST `#2.089` MP_TAC;
9236 MATCH_MP_TAC (arith `a < b ==> ~(a > b)`);
9237 TYPIFY `#6.45 = sqrt (#6.45) pow 2 ` (C SUBGOAL_THEN SUBST1_TAC);
9238 GMATCH_SIMP_TAC SQRT_POW_2;
9240 GMATCH_SIMP_TAC (GSYM Merge_ineq.lindihpi_gt_y);
9243 GMATCH_SIMP_TAC REAL_LT_RSQRT;
9245 FIRST_X_ASSUM_ST `#1.946` MP_TAC;
9251 let TXQTPVC_MERGED = prove_by_refinement(
9252 `!y1 y2 y3 y4 y5 y6.
9253 pack_nonlinear_non_ox3q1h /\
9254 critical_edge_y y1 /\
9255 &2 <= y2 /\ y2 <= &2 * hminus /\
9256 &2 <= y3 /\ y3 <= &2 * hminus /\
9257 &2 <= y4 /\ y4 <= y5 + y6 /\
9258 &2 <= rad2_y y1 y2 y3 y4 y5 y6 /\
9259 &2 <= y5 /\ y5 <= &2 * hminus /\
9260 &2 <= y6 /\ y6 <= &2 * hminus /\
9261 &0 < delta_y y1 y2 y3 y4 y5 y6 /\
9262 dih_y y1 y2 y3 y4 y5 y6 <= #2.089 /\
9263 #1.946 <= dih_y y1 y2 y3 y4 y5 y6 /\
9264 eta_y y1 y2 y6 pow 2 <= #1.34 pow 2/\
9265 eta_y y1 y3 y5 pow 2 <= #1.34 pow 2
9267 &3 * #0.0057 <= gamma3f y1 y2 y6 sqrt2 lmfun +
9268 gamma3f y1 y3 y5 sqrt2 lmfun +
9269 (dih_y y1 y2 y3 y4 y5 y6 -
9270 (dih_y y1 y2 sqrt2 sqrt2 sqrt2 y6 + dih_y y1 sqrt2 y3 sqrt2 y5 sqrt2)) *
9274 REPEAT WEAKER_STRIP_TAC;
9275 TYPIFY `&2 * hminus <= y1 /\ y1 <= &2 * hplus` (C SUBGOAL_THEN ASSUME_TAC);
9276 BY(ASM_MESON_TAC[Sphere.critical_edge_y]);
9277 TYPIFY `sqrt8 <= y4` ASM_CASES_TAC;
9278 MATCH_MP_TAC IXPOTPA_MERGED;
9279 BY(ASM_REWRITE_TAC[]);
9280 TYPIFY `y4 <= sqrt8` (C SUBGOAL_THEN ASSUME_TAC);
9281 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC);
9282 MATCH_MP_TAC (arith `y > x ==> x<= y`);
9283 INTRO_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "TXQTPVC") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
9284 ASM_REWRITE_TAC[Sphere.ineq;LET_DEF;LET_END_DEF];
9285 ONCE_REWRITE_TAC[TAUT `a \/ b <=> ~b ==> a`];
9286 REWRITE_TAC[DE_MORGAN_THM];
9287 ASM_REWRITE_TAC[Functional_equation.nonf_gamma23_full8_x;Sphere.y_of_x];
9288 REPEAT (GMATCH_SIMP_TAC (GSYM Merge_ineq.gamma3_x_gamma3f));
9289 ASM_SIMP_TAC[Merge_ineq.y_bounds];
9290 REWRITE_TAC[REWRITE_RULE[LET_DEF;LET_END_DEF] (GSYM Sphere.dih_y);GSYM Nonlinear_lemma.sqrt2_sqrt2];
9291 DISCH_THEN MATCH_MP_TAC;
9292 COMMENT "deal with assumptions";
9293 ASM_SIMP_TAC [arith `x <= y ==> ~(x > y)`];
9294 ASM_SIMP_TAC [arith `c <= d ==> ~(d < c)`];
9295 FIRST_X_ASSUM_ST `rad2_y` MP_TAC;
9296 REWRITE_TAC[Nonlin_def.sqrt2_sqrt2];
9297 REWRITE_TAC[Sphere.rad2_y;Sphere.y_of_x];
9302 let TEWNSCJ_MERGED = prove_by_refinement(
9303 `!y1 y2 y3 y4 y5 y6.
9304 pack_nonlinear_non_ox3q1h /\
9305 critical_edge_y y1 /\
9306 &2 <= y2 /\ y2 <= &2 * hminus /\
9307 &2 <= y3 /\ y3 <= &2 * hminus /\
9308 &2 <= y4 /\ y4 <= sqrt8 /\
9309 &2 <= rad2_y y1 y2 y3 y4 y5 y6 /\
9310 &2 <= y5 /\ y5 <= &2 * hminus /\
9311 &2 <= y6 /\ y6 <= &2 * hminus /\
9312 eta_y y1 y2 y6 pow 2 <= #1.34 pow 2 /\
9313 eta_y y1 y3 y5 pow 2 <= #1.34 pow 2
9315 a_spine5 + b_spine5 * dih_y y1 y2 y3 y4 y5 y6 <=
9316 gamma3f y1 y2 y6 sqrt2 lmfun +
9317 gamma3f y1 y3 y5 sqrt2 lmfun +
9318 (dih_y y1 y2 y3 y4 y5 y6 -
9319 (dih_y y1 y2 sqrt2 sqrt2 sqrt2 y6 + dih_y y1 sqrt2 y3 sqrt2 y5 sqrt2)) *
9323 REPEAT WEAKER_STRIP_TAC;
9324 TYPIFY `&2 * hminus <= y1 /\ y1 <= &2 * hplus` (C SUBGOAL_THEN ASSUME_TAC);
9325 BY(ASM_MESON_TAC[Sphere.critical_edge_y]);
9326 MATCH_MP_TAC (arith `y > x ==> x<= y`);
9327 INTRO_TAC (Merge_ineq.get_pack_nonlinear_non_ox3q1h "TEWNSCJ") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
9328 ASM_REWRITE_TAC[Sphere.ineq;LET_DEF;LET_END_DEF];
9329 ONCE_REWRITE_TAC[TAUT `a \/ b <=> ~b ==> a`];
9330 REWRITE_TAC[DE_MORGAN_THM];
9331 ASM_REWRITE_TAC[Functional_equation.nonf_gamma23_full8_x;Sphere.y_of_x];
9332 REPEAT (GMATCH_SIMP_TAC (GSYM Merge_ineq.gamma3_x_gamma3f));
9333 ASM_SIMP_TAC[Merge_ineq.y_bounds];
9334 REWRITE_TAC[REWRITE_RULE[LET_DEF;LET_END_DEF] (GSYM Sphere.dih_y);GSYM Nonlinear_lemma.sqrt2_sqrt2];
9335 DISCH_THEN MATCH_MP_TAC;
9336 COMMENT "deal with assumptions";
9337 ASM_SIMP_TAC [arith `x <= y ==> ~(x > y)`];
9338 ASM_SIMP_TAC [arith `c <= d ==> ~(d < c)`];
9339 FIRST_X_ASSUM_ST `rad2_y` MP_TAC;
9340 REWRITE_TAC[Nonlin_def.sqrt2_sqrt2];
9341 REWRITE_TAC[Sphere.rad2_y;Sphere.y_of_x];
9346 let CC_3_AZIM_LT_PI_COPLANAR = prove_by_refinement(
9347 `!V u0 u1 w0 n f i . pack_nonlinear_non_ox3q1h /\
9351 s_leaf V [u0; u1] HAS_SIZE n /\
9355 ~collinear {u0, u1, w0} /\
9356 critical_edge_y (dist (u0,u1)) /\
9357 ~cc_4 V u0 u1 f i /\
9358 leaf_rank V [u0; u1] w0 n f /\ azim u0 u1 (f i) (f (SUC i)) < pi ==>
9359 ~(coplanar {u0,u1,f i,f (SUC i)})`,
9362 REPEAT WEAKER_STRIP_TAC;
9363 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
9365 BY((ASM_REWRITE_TAC[]));
9366 REPEAT WEAKER_STRIP_TAC;
9367 FIRST_X_ASSUM_ST `coplanar` MP_TAC;
9368 REWRITE_TAC[GSYM Local_lemmas1.AZIM_COND_FOR_COPLANAR];
9369 ASM_SIMP_TAC[arith `x < y ==> ~(x = y)`];
9370 ASM_SIMP_TAC[Local_lemmas.AZIM_EQ_0_GE_ALT2];
9371 GMATCH_SIMP_TAC Local_lemmas1.DIJ_AFF_GE_PARTITION;
9372 REWRITE_TAC[IN_UNION];
9373 ASM_SIMP_TAC[Fan.th3a];
9374 REWRITE_TAC[DE_MORGAN_THM];
9376 MATCH_MP_TAC Fan.th3c;
9377 BY(ASM_MESON_TAC[]);
9379 TYPIFY `cc_A0 [u0;u1;f i] = cc_A0 [u0;u1;f (SUC i)]` (C SUBGOAL_THEN ASSUME_TAC);
9380 REWRITE_TAC[Leaf_cell.cc_A0;Bump.EL_EXPLICIT];
9381 MATCH_MP_TAC Local_lemmas.COLL_IN_AFF_GT_AFF_GT_EQ;
9382 BY(ASM_REWRITE_TAC[]);
9383 INTRO_TAC Leaf_cell.FCHKUGT [`V`;`u0`;`u1`;`f i`;`f (SUC i)`];
9386 INTRO_TAC DIST_I_SUCI [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
9387 ASM_REWRITE_TAC[DIST_REFL];
9392 let real_model_txq = prove_by_refinement(
9393 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
9397 s_leaf V [u0; u1] HAS_SIZE n /\
9401 ~collinear {u0, u1, w0} /\
9402 critical_edge_y (dist (u0,u1)) /\
9403 leaf_rank V [u0; u1] w0 n f
9405 (!i. ~cc_4 V u0 u1 f i /\
9406 hl [u0; u1; f i] < #1.34 /\
9407 hl [u0; u1; f (SUC i)] < #1.34 /\
9408 #1.946 <= azim_mcell V f u0 u1 i /\
9409 azim_mcell V f u0 u1 i <= #2.089
9410 ==> #3.0 * #0.0057 <= gg_mcell V f u0 u1 i)
9414 REPEAT WEAKER_STRIP_TAC;
9415 INTRO_TAC real_model_cell23_008 [`V`;`u0`;`u1`;`w0`;`n`;`f`];
9417 BY(ASM_REWRITE_TAC[]);
9418 TYPIFY `&2 * hminus <= dist (u0,u1) /\ dist(u0,u1) <= &2 * hplus` (C SUBGOAL_THEN ASSUME_TAC);
9419 FIRST_X_ASSUM_ST `critical_edge_y` MP_TAC;
9420 BY((REWRITE_TAC[Sphere.critical_edge_y]) THEN REAL_ARITH_TAC);
9421 DISCH_THEN (C INTRO_TAC [`i`]);
9423 MATCH_MP_TAC (arith `a <= l ==> (l <= g ==> a <= g)`);
9424 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
9426 BY(ASM_REWRITE_TAC[]);
9427 REPEAT WEAKER_STRIP_TAC;
9429 COMMENT "build asm list";
9430 INTRO_TAC JSP_BOUNDS [`u0`;`u1`;`f i`];
9431 INTRO_TAC JSP_BOUNDS [`u0`;`u1`;`f (SUC i)`];
9432 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
9433 REPEAT WEAKER_STRIP_TAC;
9434 TYPIFY `azim u0 u1 (f i) (f (SUC i)) < pi` (C SUBGOAL_THEN ASSUME_TAC);
9435 FIRST_X_ASSUM_ST `#2.089` MP_TAC;
9437 MP_TAC Flyspeck_constants.bounds;
9439 INTRO_TAC CC_3_AZIM_LT_PI_COPLANAR [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
9441 BY(ASM_REWRITE_TAC[]);
9443 TYPIFY `&0 < delta_y (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i))) (dist(f i,f (SUC i))) (dist (u1,f (SUC i))) (dist (u1,f i))` (C SUBGOAL_THEN ASSUME_TAC);
9444 BY(ASM_REWRITE_TAC[GSYM coplanar_delta_y]);
9445 COMMENT "simplify goal+";
9446 REPEAT (GMATCH_SIMP_TAC critical_weight1);
9448 ONCE_REWRITE_TAC[DIST_SYM];
9449 ASM_REWRITE_TAC[arith `x * &1 = x`];
9450 TYPIFY `azim u0 u1 (f i) (f (SUC i)) = dih_y (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i))) (dist(f i,f (SUC i))) (dist (u1,f (SUC i))) (dist (u1,f i))` (C SUBGOAL_THEN ASSUME_TAC);
9451 GMATCH_SIMP_TAC AZIM_DIHV_SAME;
9453 BY(ASM_REWRITE_TAC[]);
9454 GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] Merge_ineq.DIHV_EQ_DIH_Y);
9455 BY(ASM_REWRITE_TAC[]);
9457 REPEAT (FIRST_X_ASSUM_ST `DECIMAL` MP_TAC);
9459 REPEAT WEAKER_STRIP_TAC;
9460 COMMENT "import inequality";
9461 INTRO_TAC TXQTPVC_MERGED [`(dist (u0,u1))`;` (dist (u0,f ( i)))`;` (dist (u0,f (SUC i)))`;`dist(f i,f (SUC i))`; ` (dist (u1,f (SUC i)))`;`(dist (u1,f ( i)))`];
9463 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
9465 MATCH_MP_TAC DIST_I_SUCI;
9466 BY(ASM_MESON_TAC[]);
9468 BY(MESON_TAC[DIST_TRIANGLE;DIST_SYM;arith `x + y = y + x`]);
9470 INTRO_TAC RAD_PI_IMP_WEDGE4 [`V`;`f`;`w0`;`n`;`i`;`u0`;`u1`];
9472 FIRST_X_ASSUM_ST `cc_4` MP_TAC;
9475 DISCH_THEN (MP_TAC o (MATCH_MP (TAUT `(b ==> a) ==> (~a ==> ~b)`)));
9477 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[]);
9478 REWRITE_TAC[arith `~(r < s) <=> s <= r`];
9479 REWRITE_TAC[Sphere.rad2_y;Sphere.y_of_x;arith `x * x = x pow 2`];
9480 GMATCH_SIMP_TAC (GSYM (REWRITE_RULE[LET_DEF;LET_END_DEF] GDRQXLGv3));
9483 REWRITE_TAC[GSYM Nonlin_def.sqrt2_sqrt2;arith `x * x = x pow 2`];
9484 MATCH_MP_TAC Collect_geom2.POS_IMP_POW2;
9485 ASM_REWRITE_TAC[Sphere.sqrt2];
9486 GMATCH_SIMP_TAC SQRT_POS_LE;
9489 MATCH_MP_TAC ETA_Y_LEMMA_ALT;
9490 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
9491 MATCH_MP_TAC ETA_Y_LEMMA_ALT;
9492 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
9493 COMMENT "match ineq with goal";
9494 MATCH_MP_TAC (arith `(r = r') ==> (&3 * a <= r ==> #3.0 * a <= r')`);
9495 MATCH_MP_TAC (arith `(g1 = g1' /\ g2 = g2' /\ d1 = d1' /\ d2 = d2') ==> (g1 + g2 + (d - (d1 + d2))* #0.008 = g1' - #0.008 * d1' + g2' - #0.008 * d2' + #0.008 * d)`);
9496 GMATCH_SIMP_TAC mcell3_gammaXb_gamma3f;
9498 GEXISTL_TAC [`w0`;`n`];
9499 BY(ASM_REWRITE_TAC[]);
9500 GMATCH_SIMP_TAC mcell3_gammaX_gamma3f;
9502 GEXISTL_TAC [`w0`;`n`];
9503 BY(ASM_REWRITE_TAC[]);
9504 GMATCH_SIMP_TAC mcell3_dihXb_dih_y;
9506 BY(ASM_MESON_TAC[]);
9507 REWRITE_TAC[Sphere.dih_y;LET_DEF;LET_END_DEF;Nonlin_def.sqrt2_sqrt2];
9508 GMATCH_SIMP_TAC mcell3_dihX_dih_y;
9510 BY(ASM_MESON_TAC[]);
9511 REWRITE_TAC[Sphere.dih_y;LET_DEF;LET_END_DEF;Nonlin_def.sqrt2_sqrt2];
9512 BY(MESON_TAC[Nonlinear_lemma.dih_x_sym])
9516 let real_model_tew = prove_by_refinement(
9517 `!V u0 u1 w0 n f. pack_nonlinear_non_ox3q1h /\
9521 s_leaf V [u0; u1] HAS_SIZE n /\
9525 ~collinear {u0, u1, w0} /\
9526 critical_edge_y (dist (u0,u1)) /\
9527 leaf_rank V [u0; u1] w0 n f
9529 (!i. ~cc_4 V u0 u1 f i /\
9530 hl [u0; u1; f i] < #1.34 /\
9531 hl [u0; u1; f (SUC i)] < #1.34
9532 ==> a_spine5 + b_spine5 * azim_mcell V f u0 u1 i <=
9533 gg_mcell V f u0 u1 i)`,
9536 REPEAT WEAKER_STRIP_TAC;
9537 INTRO_TAC real_model_cell23_008 [`V`;`u0`;`u1`;`w0`;`n`;`f`];
9539 BY(ASM_REWRITE_TAC[]);
9540 TYPIFY `&2 * hminus <= dist (u0,u1) /\ dist(u0,u1) <= &2 * hplus` (C SUBGOAL_THEN ASSUME_TAC);
9541 FIRST_X_ASSUM_ST `critical_edge_y` MP_TAC;
9542 BY((REWRITE_TAC[Sphere.critical_edge_y]) THEN REAL_ARITH_TAC);
9543 DISCH_THEN (C INTRO_TAC [`i`]);
9545 MATCH_MP_TAC (arith `a <= l ==> (l <= g ==> a <= g)`);
9546 INTRO_TAC CC_3_PROPS [`V`;`u0`;`u1`;`w0`;`n`;`f`;`i`];
9548 BY(ASM_REWRITE_TAC[]);
9549 REPEAT WEAKER_STRIP_TAC;
9551 COMMENT "build asm list";
9552 INTRO_TAC JSP_BOUNDS [`u0`;`u1`;`f i`];
9553 INTRO_TAC JSP_BOUNDS [`u0`;`u1`;`f (SUC i)`];
9554 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
9555 REPEAT WEAKER_STRIP_TAC;
9556 COMMENT "simplify goal+";
9557 REPEAT (GMATCH_SIMP_TAC critical_weight1);
9559 ONCE_REWRITE_TAC[DIST_SYM];
9560 ASM_REWRITE_TAC[arith `x * &1 = x`];
9561 TYPIFY `a_spine5 + b_spine5 * dih_y (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i))) y4 (dist (u1,f (SUC i))) (dist (u1,f i)) <= gammaX V (cc_cell V [u0; u1; f i]) lmfun - #0.008 * dihX V (cc_cell V [u0; u1; f i]) (u0,u1) + gammaX V (cc_cell V [u1; u0; f (SUC i)]) lmfun - #0.008 * dihX V (cc_cell V [u1; u0; f (SUC i)]) (u0,u1) + #0.008 * dih_y (dist (u0,u1)) (dist (u0,f i)) (dist (u0,f (SUC i))) y4 (dist (u1,f (SUC i))) (dist (u1,f i))` ENOUGH_TO_SHOW_TAC;
9562 REWRITE_TAC[Sphere.b_spine5];
9563 REPEAT (FIRST_X_ASSUM_ST `dih_y` MP_TAC);
9565 COMMENT "import inequality";
9566 INTRO_TAC TEWNSCJ_MERGED [`(dist (u0,u1))`;` (dist (u0,f ( i)))`;` (dist (u0,f (SUC i)))`;`y4`; ` (dist (u1,f (SUC i)))`;`(dist (u1,f ( i)))`];
9568 ASM_SIMP_TAC[arith `x < y ==> x <= y`];
9569 ASM_REWRITE_TAC[Nonlinear_lemma.sqrt8_sqrt2;Sphere.sqrt2];
9571 MATCH_MP_TAC ETA_Y_LEMMA_ALT;
9572 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
9573 MATCH_MP_TAC ETA_Y_LEMMA_ALT;
9574 BY(ASM_SIMP_TAC[arith `x < y ==> x <= y`]);
9575 COMMENT "match ineq with goal";
9576 MATCH_MP_TAC (arith `(r = r') ==> (a <= r ==> a <= r')`);
9577 MATCH_MP_TAC (arith `(g1 = g1' /\ g2 = g2' /\ d1 = d1' /\ d2 = d2') ==> (g1 + g2 + (d - (d1 + d2))* #0.008 = g1' - #0.008 * d1' + g2' - #0.008 * d2' + #0.008 * d)`);
9578 GMATCH_SIMP_TAC mcell3_gammaXb_gamma3f;
9580 GEXISTL_TAC [`w0`;`n`];
9581 BY(ASM_REWRITE_TAC[]);
9582 GMATCH_SIMP_TAC mcell3_gammaX_gamma3f;
9584 GEXISTL_TAC [`w0`;`n`];
9585 BY(ASM_REWRITE_TAC[]);
9586 GMATCH_SIMP_TAC mcell3_dihXb_dih_y;
9588 BY(ASM_MESON_TAC[]);
9589 REWRITE_TAC[Sphere.dih_y;LET_DEF;LET_END_DEF;Nonlin_def.sqrt2_sqrt2];
9590 GMATCH_SIMP_TAC mcell3_dihX_dih_y;
9592 BY(ASM_MESON_TAC[]);
9593 REWRITE_TAC[Sphere.dih_y;LET_DEF;LET_END_DEF;Nonlin_def.sqrt2_sqrt2];
9594 BY(MESON_TAC[Nonlinear_lemma.dih_x_sym])
9598 let intro_real_model th =
9599 INTRO_TAC th [`V:real^3->bool`;`u0:real^3`;`u1:real^3`;`w0:real^3`;`n:num`;`f:num->real^3`] THEN
9600 ANTS_TAC THEN ASM_REWRITE_TAC[] THEN (DISCH_THEN (unlist REWRITE_TAC));;
9602 let cc_real_model_data = prove_by_refinement(
9604 pack_nonlinear_non_ox3q1h /\ ox3q1h /\
9608 s_leaf V [u0; u1] HAS_SIZE n /\
9612 ~collinear {u0, u1, w0} /\
9613 critical_edge_y (dist (u0,u1)) /\
9614 leaf_rank V [u0; u1] w0 n f
9615 ==> cc_real_model_v11 (cc_data_v8 V f u0 u1)`,
9618 REPEAT WEAKER_STRIP_TAC;
9619 REWRITE_TAC[Oxl_def.cc_real_model_v11;cc_real_data;cc_bool_data;cc_card_data;GSYM cc_4;cc_real_dat_def;Oxl_def.cc_eps];
9620 TYPIFY `periodic (azim_mcell V f u0 u1) (CARD (s_leaf V [u0; u1])) /\ periodic (gg_mcell V f u0 u1) (CARD (s_leaf V [u0; u1])) /\ periodic (\i. gammaX V (cc_cell V [u0; u1; f i]) lmfun * critical_weight V (cc_cell V [u0; u1; f i])) (CARD (s_leaf V [u0; u1])) /\ periodic (\i. gammaX V (cc_cell V [u1; u0; f (SUC i)]) lmfun * critical_weight V (cc_cell V [u1; u0; f (SUC i)])) (CARD (s_leaf V [u0; u1]))` (C SUBGOAL_THEN (unlist REWRITE_TAC));
9621 BY(ASM_MESON_TAC[real_periodic_data;HAS_SIZE]);
9622 TYPIFY `( 0..CARD (s_leaf V [u0;u1]) - 1) = {i | i < n}` (C SUBGOAL_THEN SUBST1_TAC);
9623 BY(ASM_MESON_TAC[NUMSEG_LT;arith `1 < n==> ~(n = 0)`;HAS_SIZE]);
9624 REWRITE_TAC[arith `!i. i + 1 = SUC i`];
9625 intro_real_model real_model_ox3q1h_merge;
9626 intro_real_model real_model_azim_c4;
9627 intro_real_model real_model_gamma_qu;
9628 intro_real_model real_model_fhbv2;
9629 intro_real_model real_model_fhbv2_sym;
9630 intro_real_model real_model_gckb;
9631 intro_real_model real_model_sum_azim;
9632 intro_real_model real_model_quqy;
9633 intro_real_model real_model_quqy_sym;
9634 intro_real_model real_model_ztg4;
9635 intro_real_model real_model_azim1;
9636 intro_real_model real_model_gaz4;
9637 intro_real_model real_model_gaz6;
9638 intro_real_model real_model_gamma_qx;
9639 intro_real_model real_model_g_qxd;
9640 intro_real_model real_model_gamma10;
9641 intro_real_model real_model_gamma11;
9642 intro_real_model real_model_gamma8;
9643 intro_real_model real_model_gamma8b;
9644 intro_real_model real_model_gaz9;
9645 intro_real_model real_model_azim2;
9646 intro_real_model real_model_cell23;
9647 intro_real_model real_model_3a;
9648 intro_real_model real_model_3b;
9649 intro_real_model real_model_gr;
9650 intro_real_model real_model_pema;
9651 intro_real_model real_model_pemb;
9652 intro_real_model real_model_tew;
9653 BY(intro_real_model real_model_txq)
9657 let CELL_CLUSTER_ESTIMATE_PROPS = prove_by_refinement(
9658 `!V. packing V /\ saturated V /\ ~cell_cluster_estimate_v1 V /\ pack_nonlinear_non_ox3q1h /\ ox3q1h
9661 sum {i | i < n} (gg_mcell V f (u0) (u1)) < &0 /\
9662 n = cc_card_v11 (cc_data_v8 V f u0 u1) /\
9663 cc_bool_model_v11 (cc_data_v8 V f u0 u1) /\
9664 cc_bool_prep_v11 (cc_data_v8 V f u0 u1) /\
9665 cc_real_model_v11 (cc_data_v8 V f u0 u1))`,
9668 REPEAT WEAKER_STRIP_TAC;
9669 INTRO_TAC (* Oxlzlez. *)LEAF_RANK_PROPS [`V`];
9670 ASM_REWRITE_TAC[HAS_SIZE;(* Oxlzlez. *)cc_card_data];
9671 REPEAT WEAKER_STRIP_TAC;
9672 GEXISTL_TAC [`u0`;`u1`;`n`;`f`];
9674 MATCH_MP_TAC (* Oxlzlez. *)cc_real_model_data;
9675 GEXISTL_TAC [`w0`;`n`];
9676 BY((ASM_REWRITE_TAC[HAS_SIZE]))
9680 let OXLZLEZ = prove_by_refinement(
9681 `!V. pack_nonlinear_non_ox3q1h /\ ox3q1h /\ packing V /\ saturated V ==>
9682 cell_cluster_estimate_v1 V`,
9685 REPEAT WEAKER_STRIP_TAC;
9687 INTRO_TAC CELL_CLUSTER_ESTIMATE_PROPS [`V`];
9689 REPEAT WEAKER_STRIP_TAC;
9690 INTRO_TAC Oxl_2012.GRHIDFA [`cc_data_v8 V f u0 u1`];
9691 ASM_REWRITE_TAC[(* Oxlzlez. *)cc_real_data];
9692 TYPIFY_GOAL_THEN `(0..(n-1)) = {i | i < n}` (unlist ASM_MESON_TAC);
9693 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_NUMSEG];
9694 BY(ASM_TAC THEN ARITH_TAC)
9698 let PACKING_CHAPTER_MAIN_CONCLUSION = prove_by_refinement(
9699 `~kepler_conjecture /\ pack_nonlinear_non_ox3q1h /\ ox3q1h ==>
9700 (?V. packing V /\ V SUBSET ball_annulus /\ ~lmfun_ineq_center V)`,
9703 REPEAT WEAKER_STRIP_TAC;
9704 MATCH_MP_TAC Rdwkarc.RDWKARC;
9707 REPEAT WEAKER_STRIP_TAC;
9708 MATCH_MP_TAC OXLZLEZ;
9709 BY(ASM_REWRITE_TAC[]);
9710 REWRITE_TAC[Pack_concl.TSKAJXY_statement];
9711 REPEAT WEAKER_STRIP_TAC;
9712 MATCH_MP_TAC Tskajxy.TSKAJXY;
9713 BY(ASM_REWRITE_TAC[])