1 (* ========================================================================== *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
3 (* Section: Conclusions *)
4 (* Chapter: Local Fan *)
5 (* Author: Thomas C. Hales *)
7 (* ========================================================================== *)
10 Terminal cases of main estimate.
13 flyspeck_needs "local/appendix_main_estimate.hl";;
15 module Terminal = struct
21 let filter_flypaper tl =
22 List.flatten (map (function
26 let has_flypaper_tag sl ind =
28 List.length (intersect (filter_flypaper tl) sl) > 0;;
32 has_flypaper_tag ["UPONLFY";"SAUZWSD";"EDZEPIH";"OMKYNLT";"FHOLLLW";"TNNOPSI"] ind) (!Ineq.ineqs);;
35 let ineql = map (fun idv -> idv.ineq) main_ineq_data in
36 let main_ineq_conj = end_itlist (curry mk_conj) ineql in
37 let _ = new_definition (mk_eq (`main_nonlinear_v39:bool`,main_ineq_conj)) in
40 let is_main = function
41 | Main_estimate -> true
45 exists (is_main) ind.tags;;
48 filter has_main (!Ineq.ineqs);;
50 let get_main_nonlinear =
51 let ineql = map (fun ind -> ind.ineq) main_ineq_data in
52 let sl = map (fun ind -> ind.idv) main_ineq_data in
53 let main_ineq_conj = end_itlist (curry mk_conj) ineql in
54 let th = new_definition (mk_eq (`main_nonlinear_v39:bool`,main_ineq_conj)) in
55 let th1 = UNDISCH (MATCH_MP (TAUT `(a <=> b) ==> (a ==> b)`) th) in
56 let co1 thm = if (is_conj (concl thm)) then CONJUNCT1 thm else thm in
59 let th2 = funpow i CONJUNCT2 th1 in
65 let get_main_nonlinear =
66 let is_main = function
67 | Main_estimate -> true
70 exists (is_main) ind.tags in
72 filter has_main (!Ineq.ineqs) in
73 let id = map (fun t-> t.idv) main_ineq_data1 in
74 let main_ineq_data = map (fun t -> hd(Ineq.getexact t)) id in
75 let ineql = map (fun ind -> ind.ineq) main_ineq_data in
76 let sl = map (fun ind -> ind.idv) main_ineq_data in
77 let main_ineq_conj = end_itlist (curry mk_conj) ineql in
78 let th = new_definition (mk_eq (`main_nonlinear_terminal_v11:bool`,main_ineq_conj)) in
79 let th1 = UNDISCH (MATCH_MP (TAUT `(a <=> b) ==> (a ==> b)`) th) in
80 let co1 thm = if (is_conj (concl thm)) then CONJUNCT1 thm else thm in
81 let tryindex s sl = try index s sl with _ -> report s; failwith s in
83 let i = tryindex s sl in
84 let th2 = funpow i CONJUNCT2 th1 in
88 (* Start with OWZLKVY. *)
89 let LET_THM = CONJ LET_DEF LET_END_DEF;;
91 let sqrt8_flyspeck = prove_by_refinement(
96 BY(REWRITE_TAC[Flyspeck_constants.bounds])
100 let SOL_SOLID_TRIANGLE_ALT = prove_by_refinement(
102 ~coplanar {v0, v1, v2, v3}
103 ==> sol v0 (convex hull {v0, v1, v2, v3}) = dihV v0 v1 v2 v3 + dihV v0 v2 v3 v1 + dihV v0 v3 v1 v2 - pi`,
106 BY(MESON_TAC[Tskajxy_lemmas.SOL_SOLID_TRIANGLE])
110 let sol_x_nn = prove_by_refinement(
112 &0 < x1 /\ &0 < x2 /\ &0 < x3 /\
113 &0 < ups_x x1 x2 x6 /\
114 &0 < ups_x x2 x3 x4 /\
115 &0 < ups_x x1 x3 x5 /\
116 &0 < eulerA_x x1 x2 x3 x4 x5 x6 /\
117 &0 < delta_x x1 x2 x3 x4 x5 x6 ==>
118 &0 < sol_x x1 x2 x3 x4 x5 x6`,
121 REPEAT WEAKER_STRIP_TAC;
122 GMATCH_SIMP_TAC Merge_ineq.sol_x_sol_euler_x;
123 ASM_REWRITE_TAC[Sphere.sol_euler_x;LET_DEF;LET_END_DEF];
124 REPEAT (GMATCH_SIMP_TAC SQRT_MUL);
125 REWRITE_TAC[GSYM Sphere.eulerA_x];
126 GMATCH_SIMP_TAC REAL_LE_MUL;
127 ASM_SIMP_TAC[arith `&0 < x ==> &0 <= x`];
128 MATCH_MP_TAC (arith `&0 < x ==> &0 < &2 * x `);
129 GMATCH_SIMP_TAC Merge_ineq.ATN2_POS;
131 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
132 GMATCH_SIMP_TAC REAL_LT_RSQRT;
133 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC)
138 let DIH_X_NN = prove_by_refinement(
139 `!x1 x2 x3 x4 x5 x6. &0 < x1 /\ &0 <= delta_x x1 x2 x3 x4 x5 x6
140 ==> &0 <= dih_x x1 x2 x3 x4 x5 x6`,
143 REPEAT WEAKER_STRIP_TAC;
144 ASM_CASES_TAC `&0 < delta_x x1 x2 x3 x4 x5 x6`;
145 MATCH_MP_TAC Merge_ineq.dih_x_nn;
146 BY(ASM_REWRITE_TAC[]);
147 TYPIFY `delta_x x1 x2 x3 x4 x5 x6 = &0` (C SUBGOAL_THEN ASSUME_TAC);
148 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
149 ASM_REWRITE_TAC[Sphere.dih_x;LET_DEF;LET_END_DEF];
150 REWRITE_TAC[arith `x * &0 = &0`;SQRT_0];
151 TYPED_ABBREV_TAC `d4 = -- delta_x4 x1 x2 x3 x4 x5 x6`;
152 INTRO_TAC Merge_ineq.atn2_0 [`d4`];
153 REPEAT WEAKER_STRIP_TAC;
155 MP_TAC (arith `&0 < d4 \/ d4 < &0 \/ d4 = &0`);
156 DISCH_THEN DISJ_CASES_TAC;
158 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
159 FIRST_X_ASSUM DISJ_CASES_TAC;
163 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC)
167 let DIH_Y_NN = prove_by_refinement(
169 &0 < y1 /\ &0 <= delta_y y1 y2 y3 y4 y5 y6 ==>
170 &0 <= dih_y y1 y2 y3 y4 y5 y6`,
173 REPEAT WEAKER_STRIP_TAC;
174 REWRITE_TAC[Sphere.dih_y;LET_DEF;LET_END_DEF];
175 MATCH_MP_TAC DIH_X_NN;
176 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
178 FIRST_X_ASSUM MP_TAC;
179 BY(REWRITE_TAC[Sphere.delta_y])
183 let RHO_LB = prove_by_refinement(
184 `!y. &2 <= y ==> &1 <= rho y`,
187 REPEAT WEAKER_STRIP_TAC;
188 REWRITE_TAC[Nonlinear_lemma.rho_alt];
189 MATCH_MP_TAC (arith `&0 <= x ==> &1 <= &1 + x `);
190 GMATCH_SIMP_TAC REAL_LE_MUL;
191 REWRITE_TAC[GSYM Nonlinear_lemma.sol0_over_pi_EQ_const1];
192 GMATCH_SIMP_TAC REAL_LE_RDIV_EQ;
193 GMATCH_SIMP_TAC REAL_LE_RDIV_EQ;
194 REWRITE_TAC[arith `&0 * x = &0`];
196 INTRO_TAC Flyspeck_constants.bounds [];
197 FIRST_X_ASSUM MP_TAC;
202 let DIH_Y_LT_RHAZIM = prove_by_refinement(
204 &2 <= y1 /\ &0 <= delta_y y1 y2 y3 y4 y5 y6 ==>
205 dih_y y1 y2 y3 y4 y5 y6 <= rhazim y1 y2 y3 y4 y5 y6`,
208 REPEAT WEAKER_STRIP_TAC;
209 REWRITE_TAC[Sphere.rhazim];
210 MATCH_MP_TAC (arith `&0 <= (r - &1) * d ==> d <= r * d`);
211 GMATCH_SIMP_TAC REAL_LE_MUL;
213 MATCH_MP_TAC DIH_Y_NN;
215 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
216 MATCH_MP_TAC (arith `&1 <= r ==> &0 <= r - &1`);
218 BY(ASM_REWRITE_TAC[])
222 let taum_taum_x = prove_by_refinement(
224 &0 <= y1 /\ &0 <= y2 /\ &0 <= y3 /\ &0 <= y4 /\ &0 <= y5 /\ &0 <= y6 ==>
225 taum y1 y2 y3 y4 y5 y6 = y_of_x taum_x y1 y2 y3 y4 y5 y6`,
228 REWRITE_TAC[Sphere.y_of_x;Sphere.taum_x;Sphere.rhazim_x;Sphere.rhazim2_x;Sphere.rhazim3_x];
229 REWRITE_TAC[Nonlinear_lemma.taum_123];
230 REPEAT WEAKER_STRIP_TAC;
231 BY(ASM_SIMP_TAC[Nonlinear_lemma.sqrtxx])
237 let BBs_terminal = `!s vv. MEM s scs_terminal_v116 /\ BBs_v39 s vv ==> &0 <= taustar_v39 s vv`;;
239 let scs_unadorned_explicit = prove_by_refinement(
241 scs_k_v39 (mk_unadorned_v39 k d a b) = k) /\
243 scs_d_v39 (mk_unadorned_v39 k d a b) = d) /\
245 scs_a_v39 (mk_unadorned_v39 k d a b) = a) /\
247 scs_am_v39 (mk_unadorned_v39 k d a b) = a) /\
249 scs_b_v39 (mk_unadorned_v39 k d a b) = b) /\
251 scs_bm_v39 (mk_unadorned_v39 k d a b) = b) /\
253 scs_J_v39 (mk_unadorned_v39 k d a b) = (\ i j. F)) /\
255 scs_lo_v39 (mk_unadorned_v39 k d a b) = {}) /\
257 scs_hi_v39 (mk_unadorned_v39 k d a b) = {}) /\
259 scs_str_v39 (mk_unadorned_v39 k d a b) = {})`,
262 BY(REWRITE_TAC[Appendix.scs_v39_explicit;Appendix.mk_unadorned_v39])
266 let UNADORNED_NOT_EAR = prove_by_refinement(
268 ~(is_ear_v39 (mk_unadorned_v39 k d a b))`,
271 REWRITE_TAC[Appendix.is_ear_v39;scs_unadorned_explicit;EMPTY_GSPEC];
272 BY(MESON_TAC[NOT_IN_EMPTY;IN_SING])
276 let dsv_unadorned = prove_by_refinement(
278 dsv_v39 (mk_unadorned_v39 k d a b) vv = d `,
281 REWRITE_TAC[Appendix.dsv_v39;UNADORNED_NOT_EAR;scs_unadorned_explicit;EMPTY_GSPEC;SUM_CLAUSES];
286 let dsv_F = prove_by_refinement(
287 `!k d a a' b' b s s' s'' vv.
288 dsv_v39 (scs_v39 (k, d, a, a', b', b, (\i j. F), s, s',s'')) vv = d `,
291 ASM_REWRITE_TAC[Appendix.dsv_v39;Appendix.scs_v39_explicit;EMPTY_GSPEC;SUM_CLAUSES];
296 let SUM_INTER = prove_by_refinement(
297 `!(A:A->bool) B f. sum (A INTER B) f = sum A (\i. if (i IN B) then f i else &0)`,
300 REPEAT WEAKER_STRIP_TAC;
301 INTRO_TAC SUM_SUPERSET [`(\i. if (i IN B) then f i else &0)`;`A INTER B`;`A`];
306 DISCH_THEN SUBST1_TAC;
308 REWRITE_TAC[IN_INTER];
313 let dsv_fun3 = prove_by_refinement(
314 `! d a a' b' b f s s' s'' vv.
315 dsv_v39 (scs_v39 (3, d, a, a', b', b, f , s, s',s'')) vv =
318 (if is_ear_v39 (scs_v39 (3,d,a,a',b',b,f ,s,s',s''))
321 ((if f 0 1 then cstab - dist (vv 0,vv 1) else &0) +
322 (if f 1 2 then cstab - dist (vv 1,vv 2) else &0) +
323 (if f 2 3 then cstab - dist (vv 2,vv 3) else &0) +
327 REPEAT WEAKER_STRIP_TAC;
328 ASM_REWRITE_TAC[Appendix.dsv_v39;Appendix.scs_v39_explicit;EMPTY_GSPEC;SUM_CLAUSES];
329 TYPIFY `{i | i < 3 /\ f i (SUC i) } = {0,1,2} INTER {i | f i (SUC i) }` (C SUBGOAL_THEN SUBST1_TAC);
330 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INTER;IN_INSERT;NOT_IN_EMPTY];
331 BY(REWRITE_TAC[arith `x < 3 <=> (x = 0 \/ x = 1 \/ x = 2)`]);
332 REWRITE_TAC[SUM_INTER;IN_ELIM_THM];
333 REPEAT (GMATCH_SIMP_TAC (CONJUNCT2 SUM_CLAUSES));
334 REWRITE_TAC[NOT_IN_EMPTY;IN_INSERT;FINITE_EMPTY;FINITE_INSERT;arith `~(0 = 1) /\ ~(0=2) /\ ~(1 = 2)`;SUM_CLAUSES];
335 BY(REWRITE_TAC[arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3`])
339 let dsv_fun4 = prove_by_refinement(
340 `! d a a' b' b f s s' s'' vv.
341 dsv_v39 (scs_v39 (4, d, a, a', b', b, f , s, s',s'')) vv =
344 ((if f 0 1 then cstab - dist (vv 0,vv 1) else &0) +
345 (if f 1 2 then cstab - dist (vv 1,vv 2) else &0) +
346 (if f 2 3 then cstab - dist (vv 2,vv 3) else &0) +
347 (if f 3 4 then cstab - dist (vv 3,vv 4) else &0) +
351 REPEAT WEAKER_STRIP_TAC;
352 ASM_REWRITE_TAC[Appendix.dsv_v39;Appendix.scs_v39_explicit;EMPTY_GSPEC;SUM_CLAUSES];
353 REWRITE_TAC[Appendix.is_ear_v39;Appendix.scs_v39_explicit;arith `~(4 = 3)`];
354 MATCH_MP_TAC (arith `(s = s') ==> d + a * -- &1 * s = d - a * s'`);
355 TYPIFY `{i | i < 4 /\ f i (SUC i) } = {0,1,2,3} INTER {i | f i (SUC i) }` (C SUBGOAL_THEN SUBST1_TAC);
356 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INTER;IN_INSERT;NOT_IN_EMPTY];
357 BY(REWRITE_TAC[arith `x < 4 <=> (x = 0 \/ x = 1 \/ x = 2 \/ x = 3)`]);
358 REWRITE_TAC[SUM_INTER;IN_ELIM_THM];
359 REPEAT (GMATCH_SIMP_TAC (CONJUNCT2 SUM_CLAUSES));
360 REWRITE_TAC[NOT_IN_EMPTY;IN_INSERT;FINITE_EMPTY;FINITE_INSERT;arith `~(0 = 1) /\ ~(0=2) /\ ~(1 = 2) /\ ~(2 = 3) /\ ~(0=3) /\ ~(1 = 3)`;SUM_CLAUSES];
361 BY(REWRITE_TAC[arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3 /\ SUC 3 = 4`])
365 let IMAGE_SUBSET_IN = prove_by_refinement(
366 `!(f:A->B) A B. IMAGE f A SUBSET B <=> (!a. a IN A ==> f a IN B)`,
373 let taustar3 = prove_by_refinement(
375 (let s = mk_unadorned_v39 3 d a b in
377 &2 <= norm v0 /\ norm v0 <= &2 * h0 /\
378 &2 <= norm v1 /\ norm v1 <= &2 * h0 /\
379 &2 <= norm v2 /\ norm v2 <= &2 * h0 /\
380 a 0 1 <= dist(v0,v1) /\ dist(v0,v1) <= b 0 1 /\
381 a 1 2 <= dist(v1,v2) /\ dist(v1,v2) <= b 1 2 /\
382 a 0 2 <= dist(v0,v2) /\ dist(v0,v2) <= b 0 2 ==>
383 d <= tau3 v0 v1 v2) ==>
384 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv)))`,
387 REWRITE_TAC[LET_DEF;LET_END_DEF];
388 REPEAT WEAKER_STRIP_TAC;
389 REWRITE_TAC[Appendix.taustar_v39;scs_unadorned_explicit;arith `3 <= 3`];
390 REWRITE_TAC[LET_DEF;LET_END_DEF];
391 REWRITE_TAC[dsv_unadorned];
392 REWRITE_TAC[arith `&0 <= t - d <=> d <= t`];
393 FIRST_X_ASSUM MATCH_MP_TAC;
394 FIRST_X_ASSUM MP_TAC;
395 REWRITE_TAC[Appendix.BBs_v39;scs_unadorned_explicit;arith `3 <= 3`];
396 REWRITE_TAC[LET_DEF;LET_END_DEF];
397 REWRITE_TAC[IMAGE_SUBSET_IN;IN_UNIV;Fnjlbxs.in_ball_annulus];
402 let taustar3_fun = prove_by_refinement(
404 (let s = scs_v39 (3,d,a,a,b,b,f,{},{},{}) in
406 &2 <= norm v0 /\ norm v0 <= &2 * h0 /\
407 &2 <= norm v1 /\ norm v1 <= &2 * h0 /\
408 &2 <= norm v2 /\ norm v2 <= &2 * h0 /\
409 a 0 1 <= dist(v0,v1) /\ dist(v0,v1) <= b 0 1 /\
410 a 1 2 <= dist(v1,v2) /\ dist(v1,v2) <= b 1 2 /\
411 a 0 2 <= dist(v0,v2) /\ dist(v0,v2) <= b 0 2 ==>
417 ((if f 0 1 then cstab - dist (v0,v1) else &0) +
418 (if f 1 2 then cstab - dist (v1,v2) else &0) +
419 (if f 2 3 then cstab - dist (v2,v0) else &0) +
420 &0) <= tau3 v0 v1 v2) ==>
421 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))) `,
424 REWRITE_TAC[LET_DEF;LET_END_DEF];
425 REPEAT WEAKER_STRIP_TAC;
426 REWRITE_TAC[Appendix.taustar_v39;Appendix.scs_v39_explicit;arith `3 <= 3`];
427 REWRITE_TAC[LET_DEF;LET_END_DEF];
428 REWRITE_TAC[dsv_fun3];
429 REWRITE_TAC[arith `&0 <= t - d <=> d <= t`];
430 TYPIFY `vv 3 = vv 0` (C SUBGOAL_THEN SUBST1_TAC);
431 FIRST_X_ASSUM MP_TAC;
432 REWRITE_TAC[Appendix.BBs_v39];
433 REWRITE_TAC[Appendix.scs_v39_explicit];
434 REWRITE_TAC[LET_DEF;LET_END_DEF];
435 REWRITE_TAC[Oxl_def.periodic];
436 BY(MESON_TAC[arith `0 + 3 = 3`]);
437 FIRST_X_ASSUM MATCH_MP_TAC;
438 FIRST_X_ASSUM MP_TAC;
439 REWRITE_TAC[Appendix.BBs_v39;Appendix.scs_v39_explicit;arith `3 <= 3`];
440 REWRITE_TAC[LET_DEF;LET_END_DEF];
441 REWRITE_TAC[IMAGE_SUBSET_IN;IN_UNIV;Fnjlbxs.in_ball_annulus];
446 let NONPARALLEL_BALL_ANNULUS40 =prove_by_refinement(`!v w. &2<= norm(v-w) /\ norm(v-w)< &4 /\ v IN ball_annulus /\ w IN ball_annulus
447 ==> ~(collinear ({vec 0} UNION {v,w}))`,
450 REWRITE_TAC[SET_RULE`{A} UNION {B,C}={A,B,C}`;GSYM NORM_CAUCHY_SCHWARZ_EQUAL;NORM_LE_SQUARE;NORM_LT_SQUARE;];
451 ONCE_REWRITE_TAC[REAL_ARITH`A<=B <=> B >= A`];
452 REWRITE_TAC[NORM_GE_SQUARE;REAL_ARITH`~(&2<= &0) /\ &0 < &2`];
453 ONCE_REWRITE_TAC[REAL_ARITH`A>=B <=> B <= A`];
454 REWRITE_TAC[DOT_RSUB;DOT_LSUB;DOT_SQUARE_NORM];
455 DISJ_CASES_TAC(REAL_ARITH`&0<= v dot w \/ &0<= --(v dot (w:real^3))`);
457 REWRITE_TAC[GSYM REAL_ABS_REFL];
460 POP_ASSUM(fun t-> ASM_TAC THEN REWRITE_TAC[t] THEN REPEAT STRIP_TAC THEN MP_TAC t);
462 ONCE_REWRITE_TAC[DOT_SYM];
464 POP_ASSUM(fun t-> ASM_TAC THEN REWRITE_TAC[t] );
465 REWRITE_TAC[REAL_ARITH`A pow 2 -A*B-(A*B-B pow 2)=(A-B) pow 2`;GSYM REAL_LE_SQUARE_ABS;Pack_defs.ball_annulus;IN_ELIM_THM;DIFF;ball;cball;dist;VECTOR_ARITH`vec 0 -A= --A`;NORM_NEG;REAL_ARITH`~(a<b)<=> b<=a`];
466 DISJ_CASES_TAC(REAL_ARITH`&0<= norm (v:real^3) -norm w \/ &0<= --(norm v -norm (w:real^3))`);
468 REWRITE_TAC[GSYM REAL_ABS_REFL];
471 MP_TAC(REAL_ARITH`norm (v:real^3) <= &2 * h0 /\ &2 <= norm (w:real^3) ==> norm v - norm w <= &2*(h0 - &1)`);
472 ASM_REWRITE_TAC[Sphere.h0];
476 REWRITE_TAC[GSYM REAL_ABS_REFL;REAL_ABS_NEG];
478 ONCE_REWRITE_TAC[REAL_ARITH`--(A-B)=B-A`];
480 MP_TAC(REAL_ARITH`norm (w:real^3) <= &2 * h0 /\ &2 <= norm (v:real^3) ==> norm w - norm v <= &2*(h0 - &1)`);
481 ASM_REWRITE_TAC[Sphere.h0];
485 REWRITE_TAC[GSYM REAL_ABS_REFL;REAL_ABS_NEG];
487 ONCE_REWRITE_TAC[REAL_ARITH`--A=B<=> A= --B`];
489 POP_ASSUM(fun t-> ASM_TAC THEN REWRITE_TAC[t] THEN REPEAT STRIP_TAC THEN MP_TAC t);
491 ONCE_REWRITE_TAC[DOT_SYM];
493 POP_ASSUM(fun t-> ASM_TAC THEN REWRITE_TAC[t] );
494 REWRITE_TAC[REAL_ARITH`A pow 2 -(--(A*B))-(--(A*B)-B pow 2)=(A+B) pow 2`;GSYM REAL_LE_SQUARE_ABS;Pack_defs.ball_annulus;IN_ELIM_THM;DIFF;ball;cball;dist;VECTOR_ARITH`vec 0 -A= --A`;NORM_NEG;REAL_ARITH`~(a<b)<=> b<=a`];
497 MP_TAC(REAL_ARITH`&0<= norm (v:real^3) /\ &0<= norm (w:real^3)==> &0<= norm v + norm w`);
498 SIMP_TAC[NORM_POS_LE];
499 REWRITE_TAC[GSYM REAL_ABS_REFL];
502 MP_TAC(REAL_ARITH`&2<=norm (w:real^3) /\ &2 <= norm (v:real^3) ==> &4<= norm v + norm w `);
505 FIRST_X_ASSUM_ST `pow` MP_TAC;
507 REWRITE_TAC[arith `~(x2 < y2) <=> y2 <= x2`];
508 MATCH_MP_TAC Collect_geom2.POS_IMP_POW2;
514 let NONPARALLEL_BALL_ANNULUS_ALT = prove_by_refinement(
515 `!v w. &2 <= dist(v,w) /\
516 dist(v,w) <= #3.62 /\ // was cstab.
519 ==> ~collinear ({vec 0,v, w})`,
522 REPEAT WEAKER_STRIP_TAC;
523 FIRST_X_ASSUM MP_TAC;
524 TYPIFY `{vec 0,v,w} = {vec 0} UNION {v,w}` (C SUBGOAL_THEN SUBST1_TAC);
527 MATCH_MP_TAC Dih2k_hypermap.NONPARALLEL_BALL_ANNULUS362;
528 REWRITE_TAC[GSYM dist];
529 BY(ASM_REWRITE_TAC[])
533 let NONPARALLEL_BALL_ANNULUS40_ALT = prove_by_refinement(
534 `!v w. &2 <= dist(v,w) /\
538 ==> ~collinear ({vec 0,v, w})`,
541 REPEAT WEAKER_STRIP_TAC;
542 FIRST_X_ASSUM MP_TAC;
543 TYPIFY `{vec 0,v,w} = {vec 0} UNION {v,w}` (C SUBGOAL_THEN SUBST1_TAC);
546 MATCH_MP_TAC NONPARALLEL_BALL_ANNULUS40;
547 REWRITE_TAC[GSYM dist];
548 BY(ASM_REWRITE_TAC[])
552 let tau3_taum = prove_by_refinement(
554 v0 IN ball_annulus /\ v1 IN ball_annulus /\ v2 IN ball_annulus /\
555 &2 <= dist(v0,v1) /\ &2 <= dist(v0,v2) /\ &2 <= dist(v1,v2) /\
556 dist(v0,v1) <= #3.62 /\ dist(v0,v2) <= #3.62 /\ dist(v1,v2) <= #3.62 ==>
557 tau3 v0 v1 v2 = taum (norm v0) (norm v1) (norm v2) (dist(v1,v2)) (dist(v0,v2)) (dist(v0,v1))`,
560 REWRITE_TAC[Appendix.tau3;Nonlinear_lemma.taum_123;Sphere.rhazim2;Sphere.rhazim3;Sphere.node2_y;Sphere.node3_y];
561 REWRITE_TAC[Sphere.rhazim;Nonlinear_lemma.sol0_const1];
562 REPEAT WEAKER_STRIP_TAC;
563 TYPIFY `dihV (vec 0) v0 v1 v2 = dih_y (norm v0) (norm v1) (norm v2) (dist (v1,v2)) (dist (v0,v2)) (dist (v0,v1)) /\ dihV (vec 0) v1 v2 v0 = dih_y (norm v1) (norm v2) (norm v0) (dist (v0,v2)) (dist (v0,v1)) (dist (v1,v2)) /\ dihV (vec 0) v2 v0 v1 = dih_y (norm v2) (norm v0) (norm v1) (dist (v0,v1)) (dist (v1,v2)) (dist (v0,v2))` ENOUGH_TO_SHOW_TAC;
564 DISCH_THEN (unlist REWRITE_TAC);
566 REPEAT (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] Merge_ineq.DIHV_EQ_DIH_Y));
568 TYPIFY `dist(v2,v0) = dist(v0,v2) /\ dist(v2,v1) = dist(v1,v2) /\ dist(v1,v0) = dist(v0,v1)` (C SUBGOAL_THEN ASSUME_TAC);
569 BY(MESON_TAC[DIST_SYM]);
571 REPEAT (GMATCH_SIMP_TAC NONPARALLEL_BALL_ANNULUS_ALT);
572 BY(ASM_REWRITE_TAC[])
576 let tau3_taum_40 = prove_by_refinement(
578 v0 IN ball_annulus /\ v1 IN ball_annulus /\ v2 IN ball_annulus /\
579 &2 <= dist(v0,v1) /\ &2 <= dist(v0,v2) /\ &2 <= dist(v1,v2) /\
580 dist(v0,v1) < &4 /\ dist(v0,v2) < &4 /\ dist(v1,v2) < &4 ==>
581 tau3 v0 v1 v2 = taum (norm v0) (norm v1) (norm v2) (dist(v1,v2)) (dist(v0,v2)) (dist(v0,v1))`,
584 REWRITE_TAC[Appendix.tau3;Nonlinear_lemma.taum_123;Sphere.rhazim2;Sphere.rhazim3;Sphere.node2_y;Sphere.node3_y];
585 REWRITE_TAC[Sphere.rhazim;Nonlinear_lemma.sol0_const1];
586 REPEAT WEAKER_STRIP_TAC;
587 TYPIFY `dihV (vec 0) v0 v1 v2 = dih_y (norm v0) (norm v1) (norm v2) (dist (v1,v2)) (dist (v0,v2)) (dist (v0,v1)) /\ dihV (vec 0) v1 v2 v0 = dih_y (norm v1) (norm v2) (norm v0) (dist (v0,v2)) (dist (v0,v1)) (dist (v1,v2)) /\ dihV (vec 0) v2 v0 v1 = dih_y (norm v2) (norm v0) (norm v1) (dist (v0,v1)) (dist (v1,v2)) (dist (v0,v2))` ENOUGH_TO_SHOW_TAC;
588 DISCH_THEN (unlist REWRITE_TAC);
590 REPEAT (GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] Merge_ineq.DIHV_EQ_DIH_Y));
592 TYPIFY `dist(v2,v0) = dist(v0,v2) /\ dist(v2,v1) = dist(v1,v2) /\ dist(v1,v0) = dist(v0,v1)` (C SUBGOAL_THEN ASSUME_TAC);
593 BY(MESON_TAC[DIST_SYM]);
595 REPEAT (GMATCH_SIMP_TAC NONPARALLEL_BALL_ANNULUS40_ALT);
596 BY(ASM_REWRITE_TAC[])
600 let DELTA_Y_POS_4POINTS = prove_by_refinement(
601 `!v0 v1 v2 (v3:real^3).
602 &0 <= delta_y (dist(v0,v1)) (dist(v0,v2)) (dist(v0,v3)) (dist(v2,v3)) (dist(v1,v3)) (dist(v1,v2))`,
605 REWRITE_TAC[Sphere.delta_y;arith `x * x = x pow 2`];
606 REWRITE_TAC[GSYM Merge_ineq.delta_delta_x];
607 BY(REWRITE_TAC[Collect_geom.DELTA_POS_4POINTS])
611 let tau3_taum_d = prove_by_refinement(
612 `!d a01 a12 a02 b01 b12 b02.
613 (&2 <= a01 /\ &2 <= a12 /\ &2 <= a02 /\ b01 <= #3.62 /\ b12 <= #3.62 /\ b02 <= #3.62 /\
615 &2 <= y1 /\ y1 <= &2 * h0 /\
616 &2 <= y2 /\ y2 <= &2 * h0 /\
617 &2 <= y3 /\ y3 <= &2 * h0 /\
618 a01 <= y6 /\ y6 <= b01 /\
619 a12 <= y4 /\ y4 <= b12 /\
620 a02 <= y5 /\ y5 <= b02 /\
621 &0 <= delta_y y1 y2 y3 y4 y5 y6 ==>
622 d <= taum y1 y2 y3 y4 y5 y6) ==>
624 &2 <= norm v0 /\ norm v0 <= &2 * h0 /\
625 &2 <= norm v1 /\ norm v1 <= &2 * h0 /\
626 &2 <= norm v2 /\ norm v2 <= &2 * h0 /\
627 a01 <= dist(v0,v1) /\ dist(v0,v1) <= b01 /\
628 a12 <= dist(v1,v2) /\ dist(v1,v2) <= b12 /\
629 a02 <= dist(v0,v2) /\ dist(v0,v2) <= b02 ==>
630 d <= tau3 v0 v1 v2))`,
633 REPEAT WEAKER_STRIP_TAC;
634 GMATCH_SIMP_TAC tau3_taum;
636 REWRITE_TAC[Fnjlbxs.in_ball_annulus];
637 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
638 FIRST_X_ASSUM MATCH_MP_TAC;
639 TYPIFY `&0 <= delta_y (norm v0) (norm v1) (norm v2) (dist (v1,v2)) (dist (v0,v2)) (dist (v0,v1))` (C SUBGOAL_THEN (unlist REWRITE_TAC));
640 REWRITE_TAC[GSYM Trigonometry1.DIST_L_ZERO];
641 BY(REWRITE_TAC[DELTA_Y_POS_4POINTS]);
642 BY(ASM_REWRITE_TAC[])
646 let tau3_taum_dfun = prove_by_refinement(
647 `!d a01 a12 a02 b01 b12 b02 f.
648 (&2 <= a01 /\ &2 <= a12 /\ &2 <= a02 /\ b01 <= #3.62 /\ b12 <= #3.62 /\ b02 <= #3.62 /\
650 &2 <= y1 /\ y1 <= &2 * h0 /\
651 &2 <= y2 /\ y2 <= &2 * h0 /\
652 &2 <= y3 /\ y3 <= &2 * h0 /\
653 a01 <= y6 /\ y6 <= b01 /\
654 a12 <= y4 /\ y4 <= b12 /\
655 a02 <= y5 /\ y5 <= b02 /\
656 &0 <= delta_y y1 y2 y3 y4 y5 y6 ==>
657 d + f y4 y5 y6 <= taum y1 y2 y3 y4 y5 y6) ==>
659 &2 <= norm v0 /\ norm v0 <= &2 * h0 /\
660 &2 <= norm v1 /\ norm v1 <= &2 * h0 /\
661 &2 <= norm v2 /\ norm v2 <= &2 * h0 /\
662 a01 <= dist(v0,v1) /\ dist(v0,v1) <= b01 /\
663 a12 <= dist(v1,v2) /\ dist(v1,v2) <= b12 /\
664 a02 <= dist(v0,v2) /\ dist(v0,v2) <= b02 ==>
665 d + f (dist(v1,v2)) (dist(v0,v2)) (dist(v0,v1)) <= tau3 v0 v1 v2))`,
668 REPEAT WEAKER_STRIP_TAC;
669 GMATCH_SIMP_TAC tau3_taum;
671 REWRITE_TAC[Fnjlbxs.in_ball_annulus];
672 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
673 FIRST_X_ASSUM MATCH_MP_TAC;
674 TYPIFY `&0 <= delta_y (norm v0) (norm v1) (norm v2) (dist (v1,v2)) (dist (v0,v2)) (dist (v0,v1))` (C SUBGOAL_THEN (unlist REWRITE_TAC));
675 REWRITE_TAC[GSYM Trigonometry1.DIST_L_ZERO];
676 BY(REWRITE_TAC[DELTA_Y_POS_4POINTS]);
677 BY(ASM_REWRITE_TAC[])
681 let taustar_taum = prove_by_refinement(
683 (&2 <= a 0 1 /\ &2 <= a 1 2 /\ &2 <= a 0 2 /\ b 0 1 <= #3.62 /\ b 1 2 <= #3.62 /\ b 0 2 <= #3.62 /\
685 &2 <= y1 /\ y1 <= &2 * h0 /\
686 &2 <= y2 /\ y2 <= &2 * h0 /\
687 &2 <= y3 /\ y3 <= &2 * h0 /\
688 a 0 1 <= y6 /\ y6 <= b 0 1 /\
689 a 1 2 <= y4 /\ y4 <= b 1 2 /\
690 a 0 2 <= y5 /\ y5 <= b 0 2 /\
691 &0 <= delta_y y1 y2 y3 y4 y5 y6 ==>
692 d <= taum y1 y2 y3 y4 y5 y6) ==>
693 (let s = mk_unadorned_v39 3 d a b in (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv)))
697 REPEAT WEAKER_STRIP_TAC;
698 REWRITE_TAC[LET_DEF;LET_END_DEF];
699 MATCH_MP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] taustar3);
700 MATCH_MP_TAC tau3_taum_d;
701 BY(ASM_REWRITE_TAC[])
705 let taustar_taum_dfun = prove_by_refinement(
706 `!d a b f. (let s = scs_v39 (3,d,a,a,b,b,f,{},{},{}) in
707 (&2 <= a 0 1 /\ &2 <= a 1 2 /\ &2 <= a 0 2 /\ b 0 1 <= #3.62 /\ b 1 2 <= #3.62 /\ b 0 2 <= #3.62 /\
709 &2 <= y1 /\ y1 <= &2 * h0 /\
710 &2 <= y2 /\ y2 <= &2 * h0 /\
711 &2 <= y3 /\ y3 <= &2 * h0 /\
712 a 0 1 <= y6 /\ y6 <= b 0 1 /\
713 a 1 2 <= y4 /\ y4 <= b 1 2 /\
714 a 0 2 <= y5 /\ y5 <= b 0 2 /\
715 &0 <= delta_y y1 y2 y3 y4 y5 y6 ==>
720 ((if f 0 1 then cstab - y6 else &0) +
721 (if f 1 2 then cstab - y4 else &0) +
722 (if f 2 3 then cstab - y5 else &0) +
723 &0) <= taum y1 y2 y3 y4 y5 y6) ==>
724 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv)))
728 REWRITE_TAC[LET_DEF;LET_END_DEF];
731 MATCH_MP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] taustar3_fun);
733 TYPIFY `dist(v2,(v0:real^3)) = dist(v0,v2)` (C SUBGOAL_THEN SUBST1_TAC);
734 BY(MESON_TAC[DIST_SYM]);
735 REPEAT WEAKER_STRIP_TAC;
736 REPLICATE_TAC 12 (FIRST_X_ASSUM MP_TAC);
737 REWRITE_TAC[TAUT `(a ==> b ==> c) <=> (a /\ b) ==> c` ];
738 REWRITE_TAC[TAUT `(a /\ b) /\ c <=> (a /\ b /\ c)`];
739 SPEC_TAC (`v2:real^3`,`v2:real^3`);
740 SPEC_TAC (`v1:real^3`,`v1:real^3`);
741 SPEC_TAC (`v0:real^3`,`v0:real^3`);
742 MATCH_MP_TAC tau3_taum_dfun;
743 BY(ASM_REWRITE_TAC[])
747 let taum_sym = prove_by_refinement(
748 `!y1 y2 y3 y4 y5 y6. taum y1 y2 y3 y4 y5 y6 = taum y2 y1 y3 y5 y4 y6 /\
749 taum y1 y2 y3 y4 y5 y6 = taum y1 y3 y2 y4 y6 y5`,
752 REWRITE_TAC[Nonlinear_lemma.taum_123;Sphere.rhazim2;Sphere.rhazim3;Sphere.node2_y;Sphere.node3_y];
753 REWRITE_TAC[Sphere.rhazim];
754 REPEAT WEAKER_STRIP_TAC;
755 MATCH_MP_TAC (REAL_RING `((e1:real) = e1' /\ e2 = e2' /\ e3 = e3' /\ e1 = e1'' /\ e2 = e2'' /\ e3 = e3'') ==> ((r1 * e1 + r2 * e2 + r3 * e3 - c = r2 * e2' + r1 * e1' + r3 * e3' - c) /\ (r1 * e1 + r2 * e2 + r3 * e3 - c = r1 * e1'' + r3 * e3'' + r2 * e2'' - c))`);
756 BY(MESON_TAC[Nonlinear_lemma.dih_y_sym;Nonlinear_lemma.dih_y_sym2])
760 let MOD_4_EXPLICIT = prove_by_refinement(
761 `0 MOD 4 = 0 /\ 1 MOD 4 = 1 /\ 2 MOD 4 = 2 /\ 3 MOD 4 = 3 /\ 4 MOD 4 = 0 /\
762 5 MOD 4 = 1 /\ 6 MOD 4 = 2`,
765 ASM_SIMP_TAC[MOD_LT;MOD_MULT_ADD;arith `0 < 4 /\ 1 < 4 /\ 2 < 4 /\ 3 < 4 /\ 5 = 1*4 + 1 /\ 6 = 1*4 + 2`];
766 BY(ASM_SIMP_TAC[Oxlzlez.MOD_REFL_ALT;arith `~(4 =0)`])
770 let FUNLIST_EXPLICIT = prove_by_refinement(
772 funlist_v39 data d k i j =
773 (if i MOD k = j MOD k
775 else ASSOCD_v39 (psort k (i,j)) (MAP (\ (u,d). psort k u,d) data) d)) /\
776 (!data u u' k i j. funlistA_v39 data (u:A) u' k i j = (if i MOD k = j MOD k
778 else ASSOCD_v39 (psort k (i,j)) (MAP (\ (u,d). psort k u,d) data) u')) /\
783 (! (x:real) . x = x) /\
790 psort 3 (0,1) = 0,1 /\
791 psort 3 (0,2) = 0,2 /\
792 psort 3 (1,2) = 1,2 /\
793 psort 3 (2,3) = 0,2 /\
794 psort 4 (0,1) = 0,1 /\
795 psort 4 (0,2) = 0,2 /\
796 psort 4 (0,3) = 0,3 /\
797 psort 4 (1,2) = (1,2) /\
798 psort 4 (1,3) = (1,3) /\
799 psort 4 (2,3) = (2,3) /\
800 psort 4 (1,0) = (0,1) /\
801 psort 4 (2,0) = (0,2) /\
802 psort 4 (3,0) = (0,3) /\
803 psort 4 (2,1) = (1,2) /\
804 psort 4 (3,1) = (1,3) /\
805 psort 4 (3,2) = (2,3) /\
806 (!(a:A) (b:B) c d. (a,b) = (c,d) <=> (a = c) /\ (b = d)) /\
807 (!(a:A) (d:B). ASSOCD_v39 a [] d = d) /\
808 (!(a:A) (d:B) h t. ASSOCD_v39 a (CONS h t) d =
809 (if a = FST h then SND h else ASSOCD_v39 a t d)) /\
810 (!k. MAP (\ (u,(d:B)). psort k u,d) [] = []) /\
811 (!p d. ASSOCD_v39 (p:A) [] (d:B) = d) /\
813 MAP (\ (u,(d:B)). psort k u,d) (CONS ((i,j),r) t) =
814 CONS (psort k (i,j),r) (MAP (\ (u,d). psort k u,d) t))
818 REPEAT WEAKER_STRIP_TAC;
819 REWRITE_TAC[Appendix.funlist_v39;Appendix.funlistA_v39;Appendix.ASSOCD_v39;PAIR_EQ];
820 REWRITE_TAC[LET_DEF;LET_END_DEF];
821 REWRITE_TAC[arith `~(0 = 1) /\ ~(0=2) /\ ~(1=2) /\ ~(0 = 3) /\ ~(1 = 3) /\ ~(2 = 3)`];
823 REWRITE_TAC[Appendix.psort;LET_DEF;LET_END_DEF];
824 REWRITE_TAC[MOD_4_EXPLICIT;PAIR_EQ];
825 TYPIFY `0 MOD 3 = 0 /\ 1 MOD 3 = 1 /\ 2 MOD 3 = 2` (C SUBGOAL_THEN ASSUME_TAC);
826 REPEAT (GMATCH_SIMP_TAC MOD_LT);
829 TYPIFY `3 MOD 3 = 0` (C SUBGOAL_THEN SUBST1_TAC);
830 BY(ASM_SIMP_TAC[Oxlzlez.MOD_REFL_ALT;arith `~(3 = 0)`]);
835 let periodic2_funlist = prove_by_refinement(
836 `!a a0 k. periodic2 (funlist_v39 a a0 k) k`,
839 REWRITE_TAC[Appendix.periodic2;Appendix.funlist_v39];
840 REPEAT WEAKER_STRIP_TAC;
841 REWRITE_TAC[LET_DEF;LET_END_DEF];
842 TYPIFY `!i. (i + k) MOD k = i MOD k` (C SUBGOAL_THEN ASSUME_TAC);
844 ONCE_REWRITE_TAC[arith `i + (k:num) = 1 * k + i`];
845 BY(REWRITE_TAC[MOD_MULT_ADD]);
846 TYPIFY `psort k (i + k,j) = psort k (i,j) /\ psort k (i,j+k) = psort k (i,j)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
847 BY(ASM_REWRITE_TAC[Appendix.psort]);
848 BY(ASM_REWRITE_TAC[])
852 let periodic2_funlistA = prove_by_refinement(
853 `!j1 j' j'' k. periodic2 (funlistA_v39 j1 j' (j'':A) k) k`,
856 REWRITE_TAC[Appendix.periodic2;Appendix.funlistA_v39];
857 REPEAT WEAKER_STRIP_TAC;
858 REWRITE_TAC[LET_DEF;LET_END_DEF];
859 TYPIFY `!i. (i + k) MOD k = i MOD k` (C SUBGOAL_THEN ASSUME_TAC);
861 ONCE_REWRITE_TAC[arith `i + (k:num) = 1 * k + i`];
862 BY(REWRITE_TAC[MOD_MULT_ADD]);
863 TYPIFY `psort k (i + k,j) = psort k (i,j) /\ psort k (i,j+k) = psort k (i,j)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
864 BY(ASM_REWRITE_TAC[Appendix.psort]);
865 BY(ASM_REWRITE_TAC[])
869 let psort_sym = prove_by_refinement(
870 `!k i j. psort k (i,j) = psort k (j,i)`,
873 REPEAT WEAKER_STRIP_TAC;
874 REWRITE_TAC[Appendix.psort];
875 REWRITE_TAC[LET_DEF;LET_END_DEF];
876 BY(REPEAT COND_CASES_TAC THEN REWRITE_TAC[PAIR_EQ] THEN (REPEAT (FIRST_X_ASSUM MP_TAC)) THEN ARITH_TAC)
880 let funlist_sym = prove_by_refinement(
881 `!k a a0 i j. funlist_v39 a a0 k i j = funlist_v39 a a0 k j i`,
884 REWRITE_TAC[Appendix.funlist_v39];
885 REPEAT WEAKER_STRIP_TAC;
886 TYPIFY `psort k (i,j) = psort k (j,i)` (C SUBGOAL_THEN SUBST1_TAC);
887 BY(MESON_TAC[psort_sym]);
888 REWRITE_TAC[LET_DEF;LET_END_DEF];
889 BY(COND_CASES_TAC THEN ASM_REWRITE_TAC[])
893 let funlistA_sym = prove_by_refinement(
894 `!k a (a0:A) a1 i j. funlistA_v39 a a0 a1 k i j = funlistA_v39 a a0 a1 k j i`,
897 REWRITE_TAC[Appendix.funlistA_v39];
898 REPEAT WEAKER_STRIP_TAC;
899 TYPIFY `psort k (i,j) = psort k (j,i)` (C SUBGOAL_THEN SUBST1_TAC);
900 BY(MESON_TAC[psort_sym]);
901 REWRITE_TAC[LET_DEF;LET_END_DEF];
902 BY(COND_CASES_TAC THEN ASM_REWRITE_TAC[])
906 let funlist_diag = prove_by_refinement(
907 `!a (a0) k i. funlist_v39 a a0 k i i = &0`,
910 BY(REWRITE_TAC[Appendix.funlist_v39;LET_DEF;LET_END_DEF])
914 let funlistA_diag = prove_by_refinement(
915 `!j1 j2 j3 k i. funlistA_v39 j1 j2 j3 k i i = (j2:A)`,
918 BY(REWRITE_TAC[Appendix.funlistA_v39;LET_DEF;LET_END_DEF])
922 let funlistA_empty = prove_by_refinement(
923 `!k. funlistA_v39 [] F F k = ( \ i j. F) `,
926 REWRITE_TAC[Appendix.funlistA_v39;FUN_EQ_THM;MAP;LET_DEF;LET_END_DEF;Appendix.ASSOCD_v39];
931 let funlist_kik = prove_by_refinement(
932 `!b b0 k i. funlist_v39 b b0 k i k = funlist_v39 b b0 k 0 i`,
935 REPEAT WEAKER_STRIP_TAC;
936 TYPIFY `k MOD k = 0 MOD k` (C SUBGOAL_THEN ASSUME_TAC);
937 BY(MESON_TAC[arith `k = 1*k + 0`;MOD_MULT_ADD]);
938 REWRITE_TAC[Appendix.funlist_v39;LET_DEF;LET_END_DEF];
939 TYPIFY `psort k (i,k) = psort k (0,i)` (C SUBGOAL_THEN SUBST1_TAC);
940 ASM_REWRITE_TAC[Appendix.psort;LET_DEF;LET_END_DEF];
941 BY(COND_CASES_TAC THEN COND_CASES_TAC THEN REWRITE_TAC[PAIR_EQ] THEN (REPEAT (FIRST_X_ASSUM MP_TAC)) THEN ARITH_TAC);
943 BY(COND_CASES_TAC THEN ASM_REWRITE_TAC[])
947 let periodic_mod_reduce = prove_by_refinement(
948 `!P k. ~(k = 0) /\ periodic P k /\ (!i. i < k ==> P i) ==> (!i. P i)`,
951 REPEAT WEAKER_STRIP_TAC;
952 GMATCH_SIMP_TAC Oxl_def.periodic_mod;
953 TYPIFY `k` EXISTS_TAC;
955 FIRST_X_ASSUM MATCH_MP_TAC;
956 BY(ASM_MESON_TAC[DIVISION])
960 let periodic2_mod_reduce = prove_by_refinement(
961 `!P k. ~(k = 0) /\ periodic2 P k /\ (!i j. i < k /\ j < k ==> P i j) ==> (!i j. P i j)`,
964 REWRITE_TAC[Appendix.periodic2];
965 REPEAT WEAKER_STRIP_TAC;
966 TYPIFY `!i. periodic (P i) k` (C SUBGOAL_THEN ASSUME_TAC);
967 REWRITE_TAC[Oxl_def.periodic];
968 BY(ASM_REWRITE_TAC[]);
969 TYPIFY `!j. periodic (\i. P i j) k` (C SUBGOAL_THEN ASSUME_TAC);
970 REWRITE_TAC[Oxl_def.periodic];
971 BY(ASM_REWRITE_TAC[]);
972 TYPIFY `(\ i. P i j) i = (\ i. P i j) (i MOD k)` ((C SUBGOAL_THEN MP_TAC));
973 MATCH_MP_TAC Oxl_def.periodic_mod;
974 BY(ASM_REWRITE_TAC[]);
976 DISCH_THEN SUBST1_TAC;
977 TYPIFY `P (i MOD k) j = P (i MOD k) (j MOD k)` (C SUBGOAL_THEN MP_TAC);
978 MATCH_MP_TAC Oxl_def.periodic_mod;
979 BY(ASM_REWRITE_TAC[]);
980 DISCH_THEN SUBST1_TAC;
981 FIRST_X_ASSUM MATCH_MP_TAC;
982 BY(ASM_MESON_TAC[DIVISION])
986 let periodic2_mod_sym_reduce = prove_by_refinement(
987 `!P k. ~(k = 0) /\ periodic2 P k /\ (!i. P i i) /\
988 (!i j. P i j = P j i) /\ (!i j. i < j /\ j < k ==> P i j) ==> (!i j. P i j)`,
991 REPEAT WEAKER_STRIP_TAC;
992 GMATCH_SIMP_TAC periodic2_mod_reduce;
993 TYPIFY `k` EXISTS_TAC;
995 REPEAT WEAKER_STRIP_TAC;
996 TYPIFY `(i:num) < j` ASM_CASES_TAC;
997 FIRST_X_ASSUM MATCH_MP_TAC;
998 BY(ASM_REWRITE_TAC[]);
999 TYPIFY `(j:num) < i \/ (j = i)` (C SUBGOAL_THEN MP_TAC);
1000 BY(FIRST_X_ASSUM MP_TAC THEN ARITH_TAC);
1001 DISCH_THEN DISJ_CASES_TAC;
1002 BY(ASM_MESON_TAC[]);
1007 let periodic2_SUC_periodic = prove_by_refinement(
1008 `!f i. periodic2 (f:num->num->A) k ==> periodic (\i. f i (SUC i)) k`,
1011 REWRITE_TAC[Appendix.periodic2;Oxl_def.periodic];
1012 REPEAT WEAKER_STRIP_TAC;
1014 TYPIFY `SUC (i + k) = SUC i + k` (C SUBGOAL_THEN SUBST1_TAC);
1016 BY(ASM_REWRITE_TAC[])
1020 let periodic_vv_inj = prove_by_refinement(
1021 `!vv k. periodic (vv:num->A) k /\ ~(k = 0) /\
1022 (!i j. i < k /\ j < k /\ vv i = vv j ==> (i = j)) ==>
1023 (!i j. (vv i = vv j) <=> (i MOD k = j MOD k))
1027 REPEAT WEAKER_STRIP_TAC;
1028 REWRITE_TAC[Geomdetail.EQ_EXPAND];
1030 BY(ASM_MESON_TAC[Oxl_def.periodic_mod]);
1031 INTRO_TAC Oxl_def.periodic_mod [`vv`;`k`];
1033 DISCH_THEN (unlist ONCE_REWRITE_TAC);
1034 BY(ASM_MESON_TAC[DIVISION])
1038 let I_LT_J_LT_3_EXPLICIT = prove_by_refinement(
1039 `!i j. (i < j /\ j < 3) <=> ((i = 0 /\ j = 1) \/ (i = 0 /\ j = 2) \/ (i = 1 /\ j = 2))`,
1046 let I_LT_J_LT_4_EXPLICIT = prove_by_refinement(
1047 `!i j. (i < j /\ j < 4) <=> ((i = 0 /\ j = 1) \/ (i = 0 /\ j = 2) \/ (i = 0 /\ j = 3) \/ (i = 1 /\ j = 2) \/
1048 (i = 1 /\ j = 3) \/ (i = 2 /\ j = 3))`,
1051 REPEAT WEAKER_STRIP_TAC;
1052 REWRITE_TAC[Geomdetail.EQ_EXPAND];
1055 REPEAT WEAKER_STRIP_TAC;
1056 TYPIFY `j = 1 \/ j = 2 \/ j = 3` (C SUBGOAL_THEN ASSUME_TAC);
1057 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
1058 REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[] THEN REPEAT (FIRST_X_ASSUM MP_TAC);
1065 let is_scs_funlist = prove_by_refinement(
1066 `!k d a0 b0 j0 a b j1 u u' u''. d < #0.9 /\ 3 <= k /\ k <= 6 /\
1067 periodic u k /\ periodic u' k /\ periodic u'' k /\
1068 (!i j. i < j /\ j < k ==> funlist_v39 a a0 k i j <= funlist_v39 b b0 k i j) /\
1069 (!i j. i < j /\ j < k ==> &2 <= funlist_v39 a a0 k i j) /\
1070 (!i. i < 3 /\ k = 3 ==> funlist_v39 b b0 k i (SUC i) < &4) /\
1071 (!i. i < k /\ 3 < k ==> funlist_v39 b b0 k i (SUC i) <= cstab) /\
1072 (!i j. i < j /\ j < k /\
1073 funlistA_v39 j1 F j0 k i j
1074 ==> funlist_v39 a a0 k i j = sqrt8 /\ funlist_v39 b b0 k i j = cstab) /\
1075 (!i j. i < j /\ j < k /\
1076 funlistA_v39 j1 F j0 k i j
1077 ==> j = SUC i \/ (i = 0 /\ SUC j = k)) /\
1080 (&2 * h0 < funlist_v39 b b0 k i (SUC i) \/
1081 &2 < funlist_v39 a a0 k i (SUC i))} +
1083 is_scs_v39 (scs_v39 (k,d,
1084 funlist_v39 a a0 k,funlist_v39 a a0 k,
1085 funlist_v39 b b0 k,funlist_v39 b b0 k,
1086 funlistA_v39 j1 F j0 k,u,u',u''))`,
1089 REPEAT WEAKER_STRIP_TAC;
1090 ASM_REWRITE_TAC[Appendix.is_scs_v39;Appendix.scs_v39_explicit;arith `x <= x`;Appendix.periodic_empty];
1091 REWRITE_TAC[periodic2_funlist;periodic2_funlistA];
1092 REWRITE_TAC[funlist_sym;funlistA_sym;funlist_diag];
1094 MATCH_MP_TAC periodic2_mod_sym_reduce;
1095 TYPIFY `k` EXISTS_TAC;
1096 ASM_REWRITE_TAC[TAUT `(a /\ a' ==> b ==> c) <=> (a /\ a' /\ b ==> c)` ];
1097 ASM_SIMP_TAC[arith `3 <= k ==> ~(k=0)`];
1098 REWRITE_TAC[funlist_diag;arith `&0 <= &0`];
1100 REWRITE_TAC[Appendix.periodic2];
1101 BY(MESON_TAC[periodic2_funlist;Appendix.periodic2]);
1102 BY(MESON_TAC[funlist_sym]);
1103 COMMENT "next goal";
1105 REPEAT WEAKER_STRIP_TAC;
1106 TYPIFY `i < (j:num)` ASM_CASES_TAC;
1107 BY(ASM_MESON_TAC[]);
1108 ONCE_REWRITE_TAC[funlist_sym];
1109 FIRST_X_ASSUM MATCH_MP_TAC;
1110 BY(ASM_SIMP_TAC[arith `~(i = j) /\ ~(i < j) ==> (j < (i:num))`]);
1111 COMMENT "next goal again";
1113 REWRITE_TAC[RIGHT_FORALL_IMP_THM];
1115 MATCH_MP_TAC periodic_mod_reduce;
1116 TYPIFY `k` EXISTS_TAC;
1117 ASM_SIMP_TAC [arith `k=3 ==> ~(k=0)`];
1118 REWRITE_TAC[Oxl_def.periodic];
1119 BY(ASM_MESON_TAC[periodic2_funlist;periodic2_SUC_periodic;Oxl_def.periodic]);
1122 REWRITE_TAC[RIGHT_FORALL_IMP_THM];
1124 MATCH_MP_TAC periodic_mod_reduce;
1125 TYPIFY `k` EXISTS_TAC;
1126 ASM_SIMP_TAC [arith `3 < k ==> ~(k=0)`];
1127 REWRITE_TAC[Oxl_def.periodic];
1128 BY(ASM_MESON_TAC[periodic2_funlist;periodic2_SUC_periodic;Oxl_def.periodic]);
1129 COMMENT "pentultimate";
1131 MATCH_MP_TAC periodic2_mod_sym_reduce;
1132 TYPIFY `k` EXISTS_TAC;
1133 ASM_SIMP_TAC [arith `3 <= k ==> ~(k=0)`];
1135 REWRITE_TAC[Appendix.periodic2];
1136 BY(REWRITE_TAC[ (REWRITE_RULE[Appendix.periodic2] periodic2_funlist); (REWRITE_RULE[Appendix.periodic2] periodic2_funlistA)]);
1137 REWRITE_TAC[funlistA_diag];
1138 BY(MESON_TAC[funlistA_sym;funlist_sym]);
1140 MATCH_MP_TAC periodic2_mod_sym_reduce;
1141 TYPIFY `k` EXISTS_TAC;
1142 ASM_SIMP_TAC [arith `3 <= k ==> ~(k=0)`];
1144 REWRITE_TAC[Appendix.periodic2];
1145 (REWRITE_TAC[ (REWRITE_RULE[Appendix.periodic2] periodic2_funlist); (REWRITE_RULE[Appendix.periodic2] periodic2_funlistA)]);
1146 REWRITE_TAC[arith `SUC (i + k) = SUC i + k`];
1147 ONCE_REWRITE_TAC[arith `(i + k) = (1 * k + i)`];
1148 BY(REWRITE_TAC[MOD_MULT_ADD]);
1149 REWRITE_TAC[funlistA_diag];
1151 BY(MESON_TAC[funlistA_sym;funlist_sym]);
1152 REPEAT WEAKER_STRIP_TAC;
1153 FIRST_X_ASSUM (C INTRO_TAC [`i`;`j`]);
1155 DISCH_THEN DISJ_CASES_TAC;
1156 BY(ASM_REWRITE_TAC[]);
1158 TYPIFY `k MOD k = (1 * k + 0) MOD k` (C SUBGOAL_THEN SUBST1_TAC);
1162 BY(REWRITE_TAC[MOD_MULT_ADD])
1166 let is_ear_scs3 = prove_by_refinement(
1167 `!a b jf. is_ear_v39 (scs_v39 (3, #0.11, a, a, b, b, jf, {}, {},{})) <=>
1168 is_scs_v39 (scs_v39 (3, #0.11, a,a,b,b,jf, {},{},{})) /\
1170 (?i. {i | i < 3 /\ jf i (SUC i)} = {i} /\
1171 a i (SUC i) = sqrt8 /\ b i (SUC i) = cstab /\
1172 (!j. j < 3 /\ ~(j = i) ==> a j (SUC j) = &2 /\ b j (SUC j) = &2 * h0))`,
1175 REPEAT WEAKER_STRIP_TAC;
1176 REWRITE_TAC[Appendix.is_ear_v39;Appendix.scs_v39_explicit];
1177 ASM_CASES_TAC `~is_scs_v39 (scs_v39 (3, #0.11,a,a,b,b,jf,{},{},{}))`;
1178 BY(ASM_REWRITE_TAC[]);
1179 RULE_ASSUM_TAC (REWRITE_RULE[ (TAUT `~ ~ x = x`)]);
1181 ASM_CASES_TAC `~(?i. {i | i < 3 /\ jf i (SUC i)} = {i} /\ a i (SUC i) = sqrt8 /\ b i (SUC i) = cstab /\ (!j. j < 3 /\ ~(j = i) ==> a j (SUC j) = &2 /\ b j (SUC j) = &2 * h0))`;
1182 BY(ASM_REWRITE_TAC[]);
1183 RULE_ASSUM_TAC (REWRITE_RULE[ (TAUT `~ ~ x = x`)]);
1185 BY(REWRITE_TAC[Appendix.unadorned_v39;Appendix.scs_v39_explicit])
1189 let is_scs_scs3 = prove_by_refinement(
1190 `! d a a0 b b0 jf j0 . d < #0.9 /\
1191 funlist_v39 a a0 3 0 1 <= funlist_v39 b b0 3 0 1 /\
1192 funlist_v39 a a0 3 0 2 <= funlist_v39 b b0 3 0 2 /\
1193 funlist_v39 a a0 3 1 2 <= funlist_v39 b b0 3 1 2 /\
1194 &2 <= funlist_v39 a a0 3 0 1 /\
1195 &2 <= funlist_v39 a a0 3 1 2 /\
1196 &2 <= funlist_v39 a a0 3 0 2 /\
1197 funlist_v39 b b0 3 0 1 < &4 /\
1198 funlist_v39 b b0 3 0 2 < &4 /\
1199 funlist_v39 b b0 3 1 2 < &4 /\
1201 i < j /\ j < 3 /\ funlistA_v39 jf F j0 3 i j
1202 ==> funlist_v39 a a0 3 i j = sqrt8 /\ funlist_v39 b b0 3 i j = cstab)
1212 funlistA_v39 jf F j0 3,
1217 REPEAT WEAKER_STRIP_TAC;
1218 MATCH_MP_TAC is_scs_funlist;
1219 ASM_REWRITE_TAC[Appendix.periodic_empty;arith `3 <= 3 /\ 3 <= 6 /\ ~(3 < 3)`];
1220 REWRITE_TAC[arith `x + 3 <= 6 <=> x <= 3`];
1221 TYPIFY `CARD {i | i < 3 /\ (&2 * h0 < funlist_v39 b b0 3 i (SUC i) \/ &2 < funlist_v39 a a0 3 i (SUC i))} <= 3` (C SUBGOAL_THEN (unlist REWRITE_TAC));
1222 ENOUGH_TO_SHOW_TAC `CARD {i | i < 3 /\ (&2 * h0 < funlist_v39 b b0 3 i (SUC i) \/ &2 < funlist_v39 a a0 3 i (SUC i))} <= CARD {i | i < 3}`;
1223 TYPIFY `{i | i < 3} = (0..2)` (C SUBGOAL_THEN SUBST1_TAC);
1224 REWRITE_TAC[IN_NUMSEG;EXTENSION;IN_ELIM_THM];
1226 BY(REWRITE_TAC[CARD_NUMSEG;arith `2 + 1 = 3 /\ 3 - 0 = 3`]);
1227 MATCH_MP_TAC CARD_SUBSET;
1230 BY(REWRITE_TAC[FINITE_NUMSEG_LT]);
1231 REWRITE_TAC[I_LT_J_LT_3_EXPLICIT];
1233 REPEAT WEAKER_STRIP_TAC;
1234 BY(REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[]);
1236 REPEAT WEAKER_STRIP_TAC;
1237 BY(REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[]);
1239 REWRITE_TAC[arith `i < 3 <=> (i = 0 \/ i = 1 \/ i = 2)`];
1240 REPEAT WEAKER_STRIP_TAC;
1241 BY(REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3`;funlist_kik]);
1242 REWRITE_TAC[TAUT `(a /\ b /\ c ==> d) <=> (a /\ b ==> (c ==> d))`];
1243 REWRITE_TAC[I_LT_J_LT_3_EXPLICIT];
1244 REPEAT WEAKER_STRIP_TAC;
1245 BY(REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3`])
1249 let is_scs_ear_3603097872 = prove_by_refinement(
1250 `is_scs_v39 (scs_v39
1253 funlist_v39 [(0,1),sqrt8] (&2) 3,
1254 funlist_v39 [(0,1),sqrt8] (&2) 3,
1255 funlist_v39 [(0,1),cstab] (&2 * h0) 3,
1256 funlist_v39 [(0,1),cstab] (&2 * h0) 3,
1257 funlistA_v39 [(0,1),T] F F 3,
1262 MATCH_MP_TAC is_scs_scs3;
1263 TYPIFY `(!i j. i < j /\ j < 3 /\ funlistA_v39 [(0,1),T] F F 3 i j ==> funlist_v39 [(0,1),sqrt8] (&2) 3 i j = sqrt8 /\ funlist_v39 [(0,1),cstab] (&2 * h0) 3 i j = cstab)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
1264 REWRITE_TAC[TAUT `(a /\ b /\ c ==> d) <=> (a /\ b ==> (c ==> d))`];
1265 REWRITE_TAC[I_LT_J_LT_3_EXPLICIT];
1266 REPEAT WEAKER_STRIP_TAC;
1267 FIRST_X_ASSUM MP_TAC;
1268 BY((REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[FUNLIST_EXPLICIT]));
1269 REWRITE_TAC[FUNLIST_EXPLICIT;arith `#0.11 < #0.9`];
1270 REWRITE_TAC[Appendix.cstab;Sphere.h0];
1271 INTRO_TAC Flyspeck_constants.bounds [];
1276 let is_ear_3603097872 = prove_by_refinement(
1277 `is_ear_v39 (scs_v39
1280 funlist_v39 [(0,1),sqrt8] (&2) 3,
1281 funlist_v39 [(0,1),sqrt8] (&2) 3,
1282 funlist_v39 [(0,1),cstab] (&2 * h0) 3,
1283 funlist_v39 [(0,1),cstab] (&2 * h0) 3,
1284 funlistA_v39 [(0,1),T] F F 3,
1289 REWRITE_TAC[ is_ear_scs3;is_scs_ear_3603097872;funlist_diag];
1291 REWRITE_TAC[arith `SUC 0 = 1`;arith `!j. (j < 3 /\ ~(j = 0) <=> (j = 1 \/ j = 2))`];
1293 REWRITE_TAC[EXTENSION;IN_SING;IN_ELIM_THM];
1295 MP_TAC (arith `x = 0 \/ x = 1 \/ x = 2 \/ ~(x < 3)`);
1297 BY(REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_SIMP_TAC[arith `0 < 3 /\ 1 < 3 /\ 2 < 3 /\ (~(x < 3 ) ==> ~(x = 0))`;FUNLIST_EXPLICIT;arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3`]);
1298 TYPIFY `(!j. j = 1 \/ j = 2 ==> funlist_v39 [(0,1),sqrt8] (&2) 3 j (SUC j) = &2 /\ funlist_v39 [(0,1),cstab] (&2 * h0) 3 j (SUC j) = &2 * h0)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
1299 REPEAT WEAKER_STRIP_TAC;
1300 BY(REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_SIMP_TAC[arith `SUC 1 = 2 /\ SUC 2 = 3`;FUNLIST_EXPLICIT;funlist_kik]);
1301 BY(REWRITE_TAC[FUNLIST_EXPLICIT])
1305 let REAL_FINITE_MIN_EXISTS =
1306 prove(`!S:real->bool. FINITE S /\ ~(S = {}) ==> ?m. m IN S /\ (!x. x IN S ==> m <= x)`,
1307 MESON_TAC[INF_FINITE]);;
1309 let REAL_WLOG_SQUARE_LEMMA = prove_by_refinement(
1310 `!P. (!y1 y2 y3 y4 y5 y6. P y1 y2 y3 y4 y5 y6 = P y2 y3 y4 y1 y6 y5) /\
1311 (!y1 y2 y3 y4 y5 y6. (y2 <= y1) /\ (y3 <= y1) /\ (y4 <= y1)
1313 P y1 y2 y3 y4 y5 y6) ==>
1314 (!y1 y2 y3 y4 y5 y6. P y1 y2 y3 y4 y5 y6)`,
1317 REPEAT WEAK_STRIP_TAC;
1318 SUBGOAL_THEN `?a. a IN {y1,y2,y3,y4} /\ (!x. x IN {y1,y2,y3,y4} ==> x <= a)` MP_TAC;
1319 MATCH_MP_TAC Merge_ineq.REAL_FINITE_MAX_EXISTS;
1320 BY(REWRITE_TAC[ FINITE_INSERT ; FINITE_EMPTY;NOT_INSERT_EMPTY]);
1321 REPEAT WEAK_STRIP_TAC;
1322 REPEAT (FIRST_X_ASSUM_ST `IN` MP_TAC);
1323 REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
1324 REWRITE_TAC[MESON[] `(!x. x = y1 \/ x = y2 \/ x = y3 \/ x = y4 ==> x <= a) = (y1 <= a /\ y2 <= a /\ y3 <= a /\ y4 <= a)`];
1325 BY(DISCH_THEN STRIP_ASSUME_TAC THEN ASM_MESON_TAC[])
1329 let REAL_WLOG_SQUARE2_LEMMA = prove_by_refinement(
1330 `!P. (!y1 y2 y3 y4 y5 y6. P y1 y2 y3 y4 y5 y6 = P y2 y3 y4 y1 y6 y5
1331 /\ P y1 y2 y3 y4 y5 y6 = P y1 y4 y3 y2 y6 y5) /\
1332 (!y1 y2 y3 y4 y5 y6. (y2 <= y1) /\ (y3 <= y1) /\ (y4 <= y1) /\ (y4 <= y2)
1334 P y1 y2 y3 y4 y5 y6) ==>
1335 (!y1 y2 y3 y4 y5 y6. P y1 y2 y3 y4 y5 y6)`,
1340 MATCH_MP_TAC REAL_WLOG_SQUARE_LEMMA;
1342 BY(ASM_MESON_TAC[arith `y2 <= y4 \/ y4 <= y2`])
1346 let EE_vv = prove_by_refinement(
1348 periodic (vv:num->A) k /\ 3 <= k /\
1349 (!i (j:num). i < k /\ j < k /\ vv i = vv j ==> i = j) ==>
1350 (EE (vv i) (IMAGE (\i. {vv i, vv (SUC i)}) (:num))) = { vv (SUC i) , vv (i + (k -1)) }`,
1353 REPEAT WEAKER_STRIP_TAC;
1354 TYPIFY `~(k=0)` (C SUBGOAL_THEN ASSUME_TAC);
1355 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
1356 REWRITE_TAC[Lvducxu.IN_EE_IFF_IN_E;EXTENSION;IN_INSERT;NOT_IN_EMPTY];
1358 REWRITE_TAC[IN_IMAGE;IN_UNIV];
1359 REWRITE_TAC[Geomdetail.EQ_EXPAND];
1361 DISCH_THEN DISJ_CASES_TAC;
1362 BY(ASM_MESON_TAC[]);
1363 TYPIFY `i + k - 1` EXISTS_TAC;
1365 REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
1367 ASM_SIMP_TAC[arith `3 <= k ==> SUC(i + k - 1) = i +k`];
1368 BY(ASM_MESON_TAC[Oxl_def.periodic]);
1369 REPEAT WEAKER_STRIP_TAC;
1370 FIRST_X_ASSUM MP_TAC;
1371 REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
1372 DISCH_THEN DISJ_CASES_TAC;
1375 FIRST_X_ASSUM MP_TAC;
1376 INTRO_TAC Oxl_def.periodic_mod [`vv`;`k`];
1377 REWRITE_TAC[GSYM RIGHT_IMP_FORALL_THM];
1379 BY(ASM_REWRITE_TAC[]);
1380 DISCH_THEN (unlist ONCE_REWRITE_TAC);
1381 REPEAT WEAKER_STRIP_TAC;
1382 TYPIFY `i MOD k = x MOD k` (C SUBGOAL_THEN ASSUME_TAC);
1383 BY(ASM_MESON_TAC[DIVISION]);
1385 REWRITE_TAC[arith `SUC x = x + 1`];
1386 GMATCH_SIMP_TAC (GSYM MOD_ADD_MOD);
1387 FIRST_X_ASSUM (SUBST1_TAC o GSYM);
1388 GMATCH_SIMP_TAC MOD_ADD_MOD;
1389 BY(ASM_REWRITE_TAC[]);
1390 COMMENT "last case";
1393 FIRST_X_ASSUM MP_TAC;
1394 INTRO_TAC Oxl_def.periodic_mod [`vv`;`k`];
1396 DISCH_THEN (unlist ONCE_REWRITE_TAC);
1397 REPEAT WEAKER_STRIP_TAC;
1398 TYPIFY `i MOD k = SUC x MOD k` (C SUBGOAL_THEN ASSUME_TAC);
1399 BY(ASM_MESON_TAC[DIVISION]);
1401 GMATCH_SIMP_TAC (GSYM MOD_ADD_MOD);
1403 GMATCH_SIMP_TAC MOD_ADD_MOD;
1404 ASM_SIMP_TAC[arith `3 <= k ==> (SUC x + k - 1 = 1 * k + x)`];
1405 BY(REWRITE_TAC[MOD_MULT_ADD])
1409 let tau_fun_azim = prove_by_refinement(
1411 (let V = IMAGE vv (:num) in
1412 let E = IMAGE (\i. {vv i, vv (SUC i)}) (:num) in
1413 let f = IMAGE (\i. vv i,vv (SUC i)) (:num) in
1414 (periodic vv k /\ 3 <= k /\
1415 (!i j. i < k /\ j < k /\ vv i = vv j ==> (i = j)) ==>
1416 tau_fun V E f = sum {i | i < k} (\i. rho_fun (norm (vv i)) *
1417 azim (vec 0) (vv i) (vv (i+1)) (vv (i + (k-1)))) - (pi + sol0) * (&k - &2)))`,
1420 REWRITE_TAC[LET_DEF;LET_END_DEF;Appendix.tau_fun];
1421 REPEAT WEAKER_STRIP_TAC;
1422 GMATCH_SIMP_TAC (GSYM Oxlzlez.PERIODIC_IMAGE);
1423 TYPIFY `k` EXISTS_TAC;
1425 ASM_SIMP_TAC[arith `3 <= k ==> ~(0 = k)`];
1426 FIRST_X_ASSUM_ST `periodic` MP_TAC;
1427 REWRITE_TAC[Oxl_def.periodic;PAIR_EQ];
1428 BY(MESON_TAC[arith `SUC (i + k) = SUC i + k`]);
1429 MATCH_MP_TAC (arith `s = s' /\ b = b' ==> s - (pi+sol0) * b = s' - (pi+sol0) * b'`);
1430 GMATCH_SIMP_TAC CARD_IMAGE_INJ;
1431 ASM_REWRITE_TAC[IN_ELIM_THM;PAIR_EQ;FINITE_NUMSEG_LT;CARD_NUMSEG_LT];
1433 BY(ASM_MESON_TAC[]);
1435 GMATCH_SIMP_TAC REAL_OF_NUM_SUB;
1436 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
1437 GMATCH_SIMP_TAC SUM_IMAGE;
1438 ASM_REWRITE_TAC[IN_ELIM_THM;PAIR_EQ;FINITE_NUMSEG_LT;CARD_NUMSEG_LT];
1440 BY(ASM_MESON_TAC[]);
1441 MATCH_MP_TAC SUM_EQ;
1442 REWRITE_TAC[IN_ELIM_THM;o_THM];
1443 REPEAT WEAKER_STRIP_TAC;
1445 REWRITE_TAC[Localization.azim_in_fan;LET_DEF;LET_END_DEF];
1446 GMATCH_SIMP_TAC EE_vv;
1447 TYPIFY `k` EXISTS_TAC;
1450 REWRITE_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET];
1451 BY(REWRITE_TAC[arith `SUC x = x + 1`]);
1453 FIRST_X_ASSUM_ST `CARD` MP_TAC;
1454 TYPIFY `~(k = 0)` (C SUBGOAL_THEN ASSUME_TAC);
1455 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
1457 MATCH_MP_TAC (arith `c = 2 ==> c > 1`);
1458 MATCH_MP_TAC Hypermap.CARD_TWO_ELEMENTS;
1459 INTRO_TAC Oxl_def.periodic_mod [`vv`;`k`];
1461 DISCH_THEN (unlist ONCE_REWRITE_TAC);
1463 TYPIFY `SUC x MOD k = (x + k - 1) MOD k` (C SUBGOAL_THEN ASSUME_TAC);
1464 BY(ASM_MESON_TAC[DIVISION]);
1465 INTRO_TAC Oxlzlez.MOD_INJ1_ALT [`k-2`;`k`];
1467 BY(REPEAT (FIRST_X_ASSUM_ST `3 <= k` MP_TAC) THEN ARITH_TAC);
1469 FIRST_X_ASSUM (C INTRO_TAC [`SUC x`]);
1471 BY(ASM_SIMP_TAC[arith `3 <= k ==> SUC x + k - 2 = x + k - 1`])
1475 let vv_rho_node1 = prove_by_refinement(
1477 (let V = IMAGE vv (:num) in
1478 let f = IMAGE (\i. vv i,vv (SUC i)) (:num) in
1479 (periodic vv k /\ 3 <= k /\
1480 (!i j. i < k /\ j < k /\ vv i = vv j ==> (i = j)) ==>
1481 (!i. rho_node1 f (vv i) = vv (SUC i))))`,
1484 REWRITE_TAC[LET_DEF;LET_END_DEF];
1485 REPEAT WEAKER_STRIP_TAC;
1486 REWRITE_TAC[Local_lemmas.rho_node1];
1487 TYPIFY `~( k = 0)` (C SUBGOAL_THEN ASSUME_TAC);
1488 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
1490 RULE_ASSUM_TAC(REWRITE_RULE[IN_IMAGE;IN_UNIV;PAIR_EQ]);
1491 REPEAT (FIRST_X_ASSUM MP_TAC) THEN REPEAT WEAKER_STRIP_TAC;
1493 REPLICATE_TAC 4 (FIRST_X_ASSUM MP_TAC);
1494 INTRO_TAC periodic_vv_inj [`vv`;`k`];
1496 DISCH_THEN (unlist ONCE_REWRITE_TAC);
1497 REWRITE_TAC[arith `SUC u = u + 1`];
1498 REPEAT WEAKER_STRIP_TAC;
1499 ONCE_REWRITE_TAC [GSYM MOD_ADD_MOD];
1500 GMATCH_SIMP_TAC (GSYM MOD_ADD_MOD);
1501 TYPIFY `x' MOD k = i MOD k` (C SUBGOAL_THEN SUBST1_TAC);
1502 BY(ASM_MESON_TAC[]);
1503 GMATCH_SIMP_TAC MOD_ADD_MOD;
1504 BY(ASM_REWRITE_TAC[]);
1506 FIRST_X_ASSUM_ST `IMAGE` MP_TAC;
1508 TYPIFY `vv(SUC i)` EXISTS_TAC;
1513 let ITER_vv_rho_node1 = prove_by_refinement(
1514 `!vv k j. (let V = IMAGE vv (:num) in
1515 let f = IMAGE (\i. vv i,vv (SUC i)) (:num) in
1516 (periodic vv k /\ 3 <= k /\
1517 (!i j. i < k /\ j < k /\ vv i = vv j ==> (i = j)) ==>
1518 (!i. ITER j (rho_node1 f) (vv i) = vv (i+j))))`,
1521 REWRITE_TAC[LET_DEF;LET_END_DEF];
1522 REPEAT WEAKER_STRIP_TAC;
1523 SPEC_TAC (`j:num`,`j:num`);
1525 BY(REWRITE_TAC[ITER;arith `i + 0 = i`]);
1527 INTRO_TAC vv_rho_node1 [`vv`;`k`];
1528 ASM_REWRITE_TAC[LET_DEF;LET_END_DEF];
1529 DISCH_THEN (unlist REWRITE_TAC);
1535 let PRIOR_TO_LESS_THAN_PI_LEMMA_ALT = prove_by_refinement(
1536 `!V E FF v. convex_local_fan (V,E,FF) /\ v IN V
1538 ==> azim (vec 0) v (rho_node1 FF v) w <=
1539 azim (vec 0) v (rho_node1 FF v)
1540 (azim_cycle (EE v E) (vec 0) v (rho_node1 FF v)))`,
1543 MESON_TAC[Local_lemmas.PRIOR_TO_LESS_THAN_PI_LEMMA]
1547 let vv_azim_le = prove_by_refinement(
1549 (let V = IMAGE vv (:num) in
1550 let E = IMAGE (\i. {vv i, vv (SUC i)}) (:num) in
1551 let f = IMAGE (\i. vv i,vv (SUC i)) (:num) in
1552 (periodic vv k /\ 3 <= k /\
1553 V SUBSET ball_annulus /\
1554 dist(vv i, vv (SUC i)) < &4 /\
1555 dist(vv i, vv (i+k - 1)) < &4 /\
1556 dist(vv i, vv j) < &4 /\
1557 ~(i MOD k = j MOD k) /\
1558 (!i j. ~(vv i = vv j) ==> &2 <= dist(vv i,vv j) ) /\
1559 convex_local_fan (V,E,f) /\
1560 (!i j. i < k /\ j < k /\ vv i = vv j ==> (i = j))
1561 ==> azim (vec 0) (vv i) (vv (SUC i)) (vv j) <= azim (vec 0) (vv i) (vv (SUC i)) (vv (i + k - 1))))`,
1564 REWRITE_TAC[LET_DEF;LET_END_DEF];
1565 REPEAT WEAKER_STRIP_TAC;
1566 TYPIFY `~(k=0)` (C SUBGOAL_THEN ASSUME_TAC);
1567 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
1568 INTRO_TAC PRIOR_TO_LESS_THAN_PI_LEMMA_ALT [`IMAGE vv (:num)`; `IMAGE (\i. {vv i, vv (SUC i)}) (:num)`; `IMAGE (\i. vv i,vv (SUC i)) (:num)`;`vv i`];
1572 DISCH_THEN (C INTRO_TAC [`vv j`]);
1575 INTRO_TAC vv_rho_node1 [`vv`;`k`];
1576 REWRITE_TAC[LET_DEF;LET_END_DEF];
1578 BY(ASM_REWRITE_TAC[]);
1579 DISCH_THEN (unlist REWRITE_TAC);
1580 GMATCH_SIMP_TAC EE_vv;
1581 TYPIFY `k` EXISTS_TAC;
1583 REWRITE_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET];
1587 let vv_split_azim = prove_by_refinement(
1589 (let V = IMAGE vv (:num) in
1590 let E = IMAGE (\i. {vv i, vv (SUC i)}) (:num) in
1591 let f = IMAGE (\i. vv i,vv (SUC i)) (:num) in
1592 (periodic vv k /\ 3 <= k /\
1593 V SUBSET ball_annulus /\
1594 dist(vv i, vv (SUC i)) < &4 /\
1595 dist(vv i, vv (i+k - 1)) < &4 /\
1596 dist(vv i, vv j) < &4 /\
1597 ~(i MOD k = j MOD k) /\
1598 (!i j. ~(vv i = vv j) ==> &2 <= dist(vv i,vv j) ) /\
1599 convex_local_fan (V,E,f) /\
1600 (!i j. i < k /\ j < k /\ vv i = vv j ==> (i = j))
1601 ==> azim (vec 0) (vv i) (vv (SUC i)) (vv (i + k - 1)) =
1602 azim (vec 0) (vv i) (vv (SUC i)) (vv j) +
1603 azim (vec 0) (vv i) (vv j) (vv (i + k - 1))))`,
1606 REWRITE_TAC[LET_DEF;LET_END_DEF];
1607 REPEAT WEAKER_STRIP_TAC;
1608 TYPIFY `~(k=0)` (C SUBGOAL_THEN ASSUME_TAC);
1609 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
1610 INTRO_TAC vv_azim_le [`vv`;`k`;`i`;`j`];
1611 REWRITE_TAC[LET_DEF;LET_END_DEF];
1613 BY(ASM_REWRITE_TAC[]);
1615 MATCH_MP_TAC Fan.sum4_azim_fan;
1617 REPEAT (GMATCH_SIMP_TAC NONPARALLEL_BALL_ANNULUS40_ALT);
1619 RULE_ASSUM_TAC (REWRITE_RULE[IMAGE_SUBSET_IN;IN_UNIV]);
1621 REPEAT (FIRST_ASSUM_ST `dist` GMATCH_SIMP_TAC);
1622 INTRO_TAC periodic_vv_inj [`vv`;`k`];
1624 BY(ASM_REWRITE_TAC[]);
1625 DISCH_THEN (unlist ASM_REWRITE_TAC);
1626 REWRITE_TAC[arith `SUC i = (i +1)`];
1627 BY(ASM_MESON_TAC[Oxlzlez.MOD_INJ1_ALT;arith `3 <= k ==> (k - 1 < k)`;arith `3 <=k ==> 1 < k`;arith `3 <=k ==> ~(k- 1=0)`;arith `~(1 = 0)`])
1631 let EGHNAVX1_ALT = prove_by_refinement(
1632 `!V E FF bta v0 ww k. convex_local_fan (V,E,FF) /\
1635 (!v. v IN V /\ ~(v = v0) ==> ~collinear {vec 0, v0, v}) /\
1636 (!i. ITER i (rho_node1 FF) v0 = ww i) /\
1637 (!i. azim (vec 0) v0 (ww 1) (ww i) = bta i)
1638 ==> (!i j. i < j /\ j < k ==> bta i <= bta j)`,
1642 DISCH_THEN (MP_TAC o (MATCH_MP Local_lemmas.EGHNAVX));
1643 BY(DISCH_THEN (unlist REWRITE_TAC))
1647 let vv_split_azim_generic = prove_by_refinement(
1649 (let V = IMAGE vv (:num) in
1650 let E = IMAGE (\i. {vv i, vv (SUC i)}) (:num) in
1651 let f = IMAGE (\i. vv i,vv (SUC i)) (:num) in
1652 (periodic vv k /\ 3 <= k /\
1653 (0< j) /\ (j < j') /\ (j' < k) /\
1655 convex_local_fan (V,E,f) /\
1656 (!i j. i < k /\ j < k /\ vv i = vv j ==> (i = j))
1657 ==> azim (vec 0) (vv i) (vv (SUC i)) (vv (i+j')) =
1658 azim (vec 0) (vv i) (vv (SUC i)) (vv (i+j)) +
1659 azim (vec 0) (vv i) (vv (i+j)) (vv (i+j'))))`,
1662 REWRITE_TAC[LET_DEF;LET_END_DEF];
1663 REPEAT WEAKER_STRIP_TAC;
1664 TYPIFY `~(k=0)` (C SUBGOAL_THEN ASSUME_TAC);
1665 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
1666 TYPIFY `!i. vv i IN IMAGE vv (:num)` (C SUBGOAL_THEN ASSUME_TAC);
1667 REWRITE_TAC[IN_IMAGE;IN_UNIV];
1668 BY(ASM_MESON_TAC[]);
1669 INTRO_TAC EGHNAVX1_ALT [`IMAGE vv (:num)`; `IMAGE (\i. {vv i, vv (SUC i)}) (:num)`; `IMAGE (\i. vv i,vv (SUC i)) (:num)`;`\j. azim (vec 0) (vv i) (vv (SUC i)) (vv (i + j))`;`vv i`;`\j. ITER j (rho_node1 (IMAGE (\i. vv i,vv (SUC i)) (:num))) (vv i)`;`k`];
1671 INTRO_TAC ITER_vv_rho_node1 [`vv`;`k`];
1672 REWRITE_TAC[LET_DEF;LET_END_DEF];
1674 DISCH_THEN (unlist REWRITE_TAC);
1675 REWRITE_TAC[arith `i + 1 = SUC i`];
1676 INTRO_TAC Nkezbfc_local.PROPERTIES_GENERIC_LOCAL_FAN [`IMAGE vv (:num)`;`IMAGE (\i. {vv i, vv (SUC i)}) (:num)`;`IMAGE (\i. vv i,vv (SUC i)) (:num)`;`vv i`];
1679 MATCH_MP_TAC Local_lemmas.CVX_LO_IMP_LO;
1680 BY(ASM_REWRITE_TAC[]);
1684 GMATCH_SIMP_TAC (GSYM Oxlzlez.PERIODIC_IMAGE);
1685 TYPIFY `k` EXISTS_TAC;
1687 GMATCH_SIMP_TAC CARD_IMAGE_INJ;
1688 BY(ASM_REWRITE_TAC[IN_ELIM_THM;CARD_NUMSEG_LT;FINITE_NUMSEG_LT ]);
1689 DISCH_THEN (C INTRO_TAC [`j`;`j'`]);
1692 MATCH_MP_TAC Fan.sum4_azim_fan;
1694 FIRST_X_ASSUM_ST `IMAGE` (REPEAT o GMATCH_SIMP_TAC);
1696 INTRO_TAC periodic_vv_inj [`vv`;`k`];
1698 BY(ASM_REWRITE_TAC[]);
1699 DISCH_THEN (unlist REWRITE_TAC);
1700 REWRITE_TAC[arith `SUC i = i + 1`];
1701 BY(REPEAT CONJ_TAC THEN MATCH_MP_TAC (REWRITE_RULE[GSYM RIGHT_FORALL_IMP_THM] (GSYM Oxlzlez.MOD_INJ1_ALT)) THEN ASM_REWRITE_TAC[] THEN REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC)
1705 let muR_ALT = prove_by_refinement(
1706 `!y1 y2 y3 y4 y5 y6 y7 y8 y9. muR y1 y2 y3 y4 y5 y6 y7 y8 y9 =
1707 cayleyR (y6 * y6) (y5 * y5) (y1 * y1) (y7 * y7) (y4 * y4) (y2 * y2)
1714 BY(REWRITE_TAC[FUN_EQ_THM;Mur.muR])
1718 let enclosed4_lemma = prove_by_refinement(
1719 `!(v0:real^3) v1 v2 v3.
1720 (let y1 = norm (v1) in
1721 let y2 = norm (v2) in
1722 let y3 = norm (v0) in
1723 let y4 = dist(v0, v2) in
1724 let y5 = dist(v0, v1) in
1725 let y6 = dist(v1, v2) in
1726 let y7 = norm (v3) in
1727 let y8 = dist(v0,v3) in
1728 let y9 = dist(v2,v3) in
1730 &0 < ups_x (norm (v0) * norm (v0)) (norm (v2) * norm (v2)) (dist(v0,v2) * dist(v0,v2)) /\
1731 chi_msb [(vec 0);v0;v2] v1 * chi_msb [(vec 0);v0;v2] v3 <= &0
1733 enclosed y1 y5 y6 y4 y2 y3 y7 y8 y9))`,
1736 REWRITE_TAC[LET_DEF;LET_END_DEF];
1737 REPEAT WEAKER_STRIP_TAC;
1738 REWRITE_TAC[Enclosed.enclosed];
1739 INTRO_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] Collect_geom2.CAYLEYR_5POINTS) [`(vec 0):real^3`;`v0`;`v2`;`v1`;`v3`];
1740 REWRITE_TAC[DIST_0];
1741 TYPIFY `dist(v2,v1) = dist(v1,v2)` (C SUBGOAL_THEN SUBST1_TAC);
1742 BY(MESON_TAC[DIST_SYM]);
1744 TYPED_ABBREV_TAC `p = muR (norm (v1:real^3)) (dist (v0,v1)) (dist (v1,v2)) (dist (v0,v2)) (norm v2) (norm v0) (norm v3) (dist (v0,v3)) (dist (v2,v3))`;
1745 TYPIFY `quadratic_root_plus (abc_of_quadratic p) = dist (v1,v3) pow 2` ENOUGH_TO_SHOW_TAC;
1746 DISCH_THEN SUBST1_TAC;
1747 GMATCH_SIMP_TAC POW_2_SQRT;
1748 BY(REWRITE_TAC[DIST_POS_LE]);
1749 FIRST_X_ASSUM_ST `muR` MP_TAC;
1750 REWRITE_TAC[muR_ALT];
1751 DISCH_THEN (SUBST1_TAC o GSYM);
1752 TYPED_ABBREV_TAC `a = ups_x (norm (v0) * norm (v0)) (norm (v2) * norm (v2)) (dist(v0,v2) * dist(v0,v2))` ;
1753 TYPED_ABBREV_TAC `b = cayleytr (norm v0 * norm v0) (norm v2 * norm v2) (norm v1 * norm v1) (norm v3 * norm v3) (dist (v0,v2) * dist (v0,v2)) (dist (v0,v1) * dist (v0,v1)) (dist (v0,v3) * dist (v0,v3)) (dist (v1,v2) * dist (v1,v2)) (dist (v2,v3) * dist (v2,v3)) (&0)` ;
1754 TYPED_ABBREV_TAC `c = cayleyR (norm v0 * norm v0) (norm v2 * norm v2) (norm v1 * norm v1) (norm v3 * norm v3) (dist (v0,v2) * dist (v0,v2)) (dist (v0,v1) * dist (v0,v1)) (dist (v0,v3) * dist (v0,v3)) (dist (v1,v2) * dist (v1,v2)) (dist (v2,v3) * dist (v2,v3)) (&0)` ;
1755 TYPIFY ` cayleyR (norm v0 * norm v0) (norm v2 * norm v2) (norm v1 * norm v1) (norm v3 * norm v3) (dist (v0,v2) * dist (v0,v2)) (dist (v0,v1) * dist (v0,v1)) (dist (v0,v3) * dist (v0,v3)) (dist (v1,v2) * dist (v1,v2)) (dist (v2,v3) * dist (v2,v3)) = (\x. a * x pow 2 + b * x + c)` (C SUBGOAL_THEN ASSUME_TAC);
1756 REWRITE_TAC[FUN_EQ_THM];
1757 ONCE_REWRITE_TAC[Collect_geom.LTCTBAN];
1758 BY(ASM_REWRITE_TAC[]);
1759 ASM_REWRITE_TAC[Nonlinear_lemma.abc_quadratic];
1760 TYPIFY `b pow 2 - &4 * a * c = &16 * delta_y (norm v0) (norm v2) (norm v1) (dist (v2,v1)) (dist (v0,v1)) (dist (v0,v2)) * delta_y (norm v0) (norm v2) (norm v3) (dist (v2,v3)) (dist (v0,v3)) (dist (v0,v2))` (C SUBGOAL_THEN ASSUME_TAC);
1764 REWRITE_TAC[Collect_geom.DISCRIMINANT_OF_CAY];
1765 REWRITE_TAC[Merge_ineq.delta_delta_x;GSYM Sphere.delta_y];
1766 BY(MESON_TAC[DIST_SYM]);
1767 TYPIFY `&0 <= delta_y (norm v0) (norm v2) (norm v1) (dist (v2,v1)) (dist (v0,v1)) (dist (v0,v2))` (C SUBGOAL_THEN ASSUME_TAC);
1768 BY(MESON_TAC[REWRITE_RULE[LET_DEF;LET_END_DEF] Tame_lemmas.delta_y_pos]);
1769 TYPIFY `&0 <= delta_y (norm v0) (norm v2) (norm v3) (dist (v2,v3)) (dist (v0,v3)) (dist (v0,v2))` (C SUBGOAL_THEN ASSUME_TAC);
1770 BY(MESON_TAC[REWRITE_RULE[LET_DEF;LET_END_DEF] Tame_lemmas.delta_y_pos]);
1771 TYPIFY `&0 <= b pow 2 - &4 * a * c` (C SUBGOAL_THEN ASSUME_TAC);
1773 GMATCH_SIMP_TAC REAL_LE_MUL;
1776 GMATCH_SIMP_TAC REAL_LE_MUL;
1777 BY(ASM_REWRITE_TAC[]);
1778 TYPED_ABBREV_TAC `(x:real) = dist(v1,v3) pow 2` ;
1779 TYPIFY `a * x pow 2 + b * x + c = &0` (C SUBGOAL_THEN ASSUME_TAC);
1780 FIRST_X_ASSUM_ST `cayleyR` MP_TAC;
1781 REWRITE_TAC[FUN_EQ_THM];
1782 DISCH_THEN (C INTRO_TAC [`x`]);
1783 DISCH_THEN (SUBST1_TAC o GSYM);
1785 BY(ASM_REWRITE_TAC[arith ` x * x = x pow 2`]);
1786 ASM_CASES_TAC `b pow 2 - &4 * a * c = &0`;
1787 MATCH_MP_TAC Tame_lemmas.quadratic_root_plus_disc0_eq;
1788 FIRST_X_ASSUM_ST `&0 < a` MP_TAC;
1789 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC);
1791 COMMENT "pos discr. case";
1792 MATCH_MP_TAC Tame_lemmas.quadratic_root_plus_gt_eq;
1793 TYPED_ABBREV_TAC `(n:real^3) = v0 cross v2`;
1794 TYPED_ABBREV_TAC `(v1':real^3) = reflection n v1` ;
1795 TYPED_ABBREV_TAC `(y:real) = dist(v1',v3) pow 2` ;
1796 TYPIFY `y` EXISTS_TAC;
1798 BY(ASM_MESON_TAC[]);
1801 FIRST_X_ASSUM_ST `&0 <= x` MP_TAC;
1803 FIRST_X_ASSUM_ST `a * x pow 2` MP_TAC;
1804 DISCH_THEN (SUBST1_TAC);
1806 COMMENT "cayleyR again";
1807 INTRO_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] Collect_geom2.CAYLEYR_5POINTS) [`(vec 0):real^3`;`v0`;`v2`;`v1'`;`v3`];
1810 TYPIFY `!v. dist(v,reflection n v1) =dist(reflection n v1,v)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
1811 BY(MESON_TAC[DIST_SYM]);
1812 REPEAT (GMATCH_SIMP_TAC Tame_lemmas.dist_reflection_special);
1814 REWRITE_TAC[DOT_LZERO];
1815 REWRITE_TAC[Collect_geom2.ORTHOGONAL_CROSS_PRODUCT];
1816 REWRITE_TAC[DIST_0];
1817 TYPIFY `dist(v1,v0) = dist(v0,v1)` (C SUBGOAL_THEN SUBST1_TAC);
1818 BY(MESON_TAC[DIST_SYM]);
1819 ASM_REWRITE_TAC[arith `x pow 2 = x * x`];
1820 DISCH_THEN SUBST1_TAC;
1826 REWRITE_TAC[Tame_lemmas.dist_reflection_lemma];
1827 MATCH_MP_TAC (arith `&0 < ( --r )/ nn ==> d + &4 * r / nn < d`);
1828 GMATCH_SIMP_TAC REAL_LT_DIV;
1829 TYPIFY `~(n = vec 0)` (C SUBGOAL_THEN ASSUME_TAC);
1831 FIRST_X_ASSUM_ST `&0 < a` MP_TAC;
1833 REWRITE_TAC[GSYM DIST_0;arith `x * x = x pow 2`];
1834 REWRITE_TAC[GSYM Collect_geom2.NORM_CROSS_PRODUCT_UPS_X];
1835 REWRITE_TAC[arith `&0 < &4 * x <=> &0 < x`;arith `(v0:real^3) - vec 0 = v0`];
1836 REWRITE_TAC[GSYM NORM_POS_LT];
1837 REWRITE_TAC[GSYM Trigonometry2.NOT_ZERO_EQ_POW2_LT];
1838 BY(MESON_TAC[NORM_POS_LE;arith `&0 <= x /\ ~(x = &0) ==> &0 < x`]);
1840 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[DOT_POS_LT]);
1841 REWRITE_TAC[arith `&0 < -- r <=> r < &0`];
1843 TYPIFY `!v. v dot (v0 cross v2) = chi_msb [vec 0;v0;v2] v` (C SUBGOAL_THEN (unlist REWRITE_TAC));
1844 REWRITE_TAC[Leaf_cell.chi_msb;Basics.EL_EXPLICIT];
1845 REWRITE_TAC[arith `(v:real^3) - vec 0 = v`];
1846 BY(MESON_TAC[DOT_SYM]);
1847 FIRST_X_ASSUM_ST `chi_msb` MP_TAC;
1848 TYPIFY `~(chi_msb [vec 0;v0;v2] v1 * chi_msb [vec 0;v0;v2] v3 = &0)` ENOUGH_TO_SHOW_TAC;
1850 REWRITE_TAC[REAL_ENTIRE;DE_MORGAN_THM];
1851 REWRITE_TAC[GSYM Leaf_cell.CHI_MSB_COPLANAR];
1852 REWRITE_TAC[Oxlzlez.coplanar_delta_y;DIST_0];
1853 REWRITE_TAC[arith `&0 < x <=> (&0 <= x /\ ~(x = &0))`];
1855 REWRITE_TAC[GSYM DE_MORGAN_THM;GSYM REAL_ENTIRE];
1857 REPEAT (FIRST_X_ASSUM_ST `b pow 2 - &4 * a *c` MP_TAC);
1863 let IN_V_IMP_AZIM_LESS_PI_ALT = prove_by_refinement(
1864 `!V E FF v. (convex_local_fan (V,E,FF) /\ v IN V
1865 ==> (!w. w IN V ==> azim (vec 0) v (rho_node1 FF v) w <= pi))`,
1868 BY(MESON_TAC[Local_lemmas.IN_V_IMP_AZIM_LESS_PI])
1872 let vv_enclosed4 = prove_by_refinement(
1874 (let V = IMAGE vv (:num) in
1875 let E = IMAGE (\i. {vv i, vv (SUC i)}) (:num) in
1876 let f = IMAGE (\i. vv i,vv (SUC i)) (:num) in
1877 let y1 = norm (vv (i+1)) in
1878 let y2 = norm (vv (i+2)) in
1879 let y3 = norm (vv (i)) in
1880 let y4 = dist(vv (i), vv (i+2)) in
1881 let y5 = dist(vv (i), vv (i+1)) in
1882 let y6 = dist(vv (i+1), vv (i+2)) in
1883 let y7 = norm (vv (i+3)) in
1884 let y8 = dist(vv (i),vv (i+3)) in
1885 let y9 = dist(vv (i+2),vv (i+3)) in
1887 dist (vv i,vv ( i+1)) < &4 /\
1888 dist (vv i,vv (i + 3)) < &4 /\
1889 (!i j. ~(vv i = vv j) ==> &2 <= dist (vv i,vv j)) /\
1890 V SUBSET ball_annulus /\
1891 dist (vv i,vv (i+2)) < &4 /\
1892 convex_local_fan (V,E,f) /\
1893 (!i j. i < 4 /\ j < 4 /\ vv i = vv j ==> i = j)
1894 ==> dist (vv (i+1), vv(i+3)) = enclosed y1 y5 y6 y4 y2 y3 y7 y8 y9))`,
1897 REWRITE_TAC[LET_THM];
1898 REPEAT WEAKER_STRIP_TAC;
1899 MATCH_MP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] enclosed4_lemma);
1900 TYPIFY `!i. vv i IN ball_annulus` (C SUBGOAL_THEN ASSUME_TAC);
1901 FIRST_X_ASSUM_ST `ball_annulus` MP_TAC;
1902 BY(SET_TAC[IN_UNIV]);
1903 TYPIFY `!i. vv i IN IMAGE vv (:num)` (C SUBGOAL_THEN ASSUME_TAC);
1904 REWRITE_TAC[IN_IMAGE;IN_UNIV];
1907 REWRITE_TAC[GSYM DIST_0];
1908 REWRITE_TAC[GSYM Collect_geom2.NOT_COL_EQ_UPS_X_POS;arith `x * x = x pow 2`];
1909 MATCH_MP_TAC NONPARALLEL_BALL_ANNULUS40_ALT;
1911 FIRST_X_ASSUM MATCH_MP_TAC;
1912 GMATCH_SIMP_TAC periodic_vv_inj;
1913 TYPIFY `4` EXISTS_TAC;
1914 ASM_REWRITE_TAC[arith `~(4 = 0)`];
1915 BY(ASM_MESON_TAC[ Oxlzlez.MOD_INJ1_ALT;arith `~(4 = 0) /\ ~(2 = 0) /\ (2 < 4)`]);
1917 COMMENT "case delta=0";
1918 TYPIFY `chi_msb [vec 0; vv i; vv (i + 2)] (vv (i + 1)) = &0` ASM_CASES_TAC;
1919 BY(ASM_REWRITE_TAC[arith `&0 * x <= &0`]);
1920 TYPIFY `chi_msb [vec 0; vv i; vv (i + 2)] (vv (i + 3)) = &0` ASM_CASES_TAC;
1921 BY(ASM_REWRITE_TAC[arith ` x * &0 <= &0`]);
1922 TYPIFY `~coplanar {vec 0, vv i, vv (i + 2), vv (i + 1)} /\ ~coplanar {vec 0, vv i, vv (i + 2), vv (i + 3)}` (C SUBGOAL_THEN ASSUME_TAC);
1923 BY(ASM_REWRITE_TAC[ Leaf_cell.CHI_MSB_COPLANAR]);
1924 TYPIFY `~collinear {vec 0, vv i, vv (i+1)} /\ ~collinear {vec 0,vv i, vv (i+3)} /\ ~collinear {vec 0,vv i, vv(i+2)}` (C SUBGOAL_THEN ASSUME_TAC);
1925 BY(ASM_MESON_TAC[Planarity.notcoplanar_imp_notcollinear_fan]);
1927 INTRO_TAC IN_V_IMP_AZIM_LESS_PI_ALT [ `IMAGE vv (:num)`;`IMAGE (\i. {vv i, vv (SUC i)}) (:num)`;`IMAGE (\i. vv i,vv (SUC i)) (:num)`;`vv i`];
1929 DISCH_THEN (C INTRO_TAC [`vv (i +3)`]);
1931 GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] vv_rho_node1);
1933 TYPIFY `4` EXISTS_TAC;
1934 BY(ASM_REWRITE_TAC[arith `3 <= 4`]);
1936 COMMENT "v2 in wedge";
1937 TYPIFY `vv (i +2) IN wedge_ge (vec 0) (vv i) (vv ( i+1)) (vv (i + 3))` (C SUBGOAL_THEN ASSUME_TAC);
1938 REWRITE_TAC[Local_lemmas.WEDGE_GE_AZIM_LE];
1939 REWRITE_TAC[arith `i + 1 = SUC i /\ i + 3 = i + 4 -1`];
1940 INTRO_TAC (REWRITE_RULE[LET_THM] vv_azim_le) [`vv`;`4`;`i`;`i + 2`];
1942 ASM_REWRITE_TAC[arith `3 <= 4`];
1943 REWRITE_TAC[arith `SUC i = i + 1 /\ i + 4 -1 = i + 3`];
1945 BY(MESON_TAC[ Oxlzlez.MOD_INJ1_ALT;arith `~(4 = 0) /\ ~(2 = 0) /\ (2 < 4)`]);
1948 TYPIFY `azim (vec 0) (vv i) (vv (SUC i)) (vv (i + 3)) < pi` ASM_CASES_TAC;
1949 FIRST_X_ASSUM_ST `wedge_ge` MP_TAC;
1950 GMATCH_SIMP_TAC Local_lemmas.WEDGE_GE_EQ_AFF_GE;
1951 ASM_REWRITE_TAC[arith `i + 1 = SUC i`];
1952 GMATCH_SIMP_TAC Marchal_cells_2_new.AFF_GE_2_2;
1954 TYPIFY `DISJOINT {vec 0, vv i} {vv (SUC i)} /\ DISJOINT {vec 0, vv i} {vv (i + 3)}` ENOUGH_TO_SHOW_TAC;
1955 REWRITE_TAC[DISJOINT];
1957 BY(ASM_MESON_TAC[Fan.th3a;arith `SUC i = i + 1`]);
1958 REWRITE_TAC[IN_ELIM_THM];
1959 REPEAT WEAKER_STRIP_TAC;
1961 ONCE_REWRITE_TAC[Leaf_cell.chi_msb_swap_23];
1962 GMATCH_SIMP_TAC Leaf_cell.chi_msb_additive_d;
1963 TYPIFY `t3 % vv (SUC i) + t4 % vv (i + 3) = t4 % vv (i + 3) + t3 % vv (SUC i)` (C SUBGOAL_THEN SUBST1_TAC);
1964 BY(VECTOR_ARITH_TAC);
1965 GMATCH_SIMP_TAC Leaf_cell.chi_msb_additive_d;
1967 BY(FIRST_X_ASSUM_ST `&1` MP_TAC THEN REAL_ARITH_TAC);
1969 BY(FIRST_X_ASSUM_ST `&1` MP_TAC THEN REAL_ARITH_TAC);
1970 TYPIFY `chi_msb [vec 0; vv i; vv (SUC i)] (vv (i + 3)) = -- chi_msb [vec 0; vv i; vv (i + 3)] (vv (SUC i))` (C SUBGOAL_THEN SUBST1_TAC);
1971 BY(MESON_TAC[Leaf_cell.chi_msb_swap_23]);
1972 REWRITE_TAC[arith `-- (t4 * -- c) * -- (t3 * c) <= &0 <=> &0 <= t4 * t3 * c pow 2`];
1973 GMATCH_SIMP_TAC REAL_LE_MUL;
1975 GMATCH_SIMP_TAC REAL_LE_MUL;
1977 BY(REWRITE_TAC[ REAL_LE_POW_2]);
1978 COMMENT "azim = pi";
1979 TYPIFY `azim (vec 0) (vv i) (vv (SUC i)) (vv (i + 3)) = pi` (C SUBGOAL_THEN ASSUME_TAC);
1980 BY(REPLICATE_TAC 2 (FIRST_X_ASSUM_ST `azim` MP_TAC) THEN REAL_ARITH_TAC);
1981 FIRST_X_ASSUM MP_TAC;
1982 GMATCH_SIMP_TAC Ldurdpn.LDURDPN;
1983 ASM_REWRITE_TAC[arith `SUC i = i + 1`];
1984 REWRITE_TAC[EXTENSION;NOT_IN_EMPTY;NOT_FORALL_THM];
1985 REWRITE_TAC[IN_INTER;Geomdetail.CONV0_SET2;IN_ELIM_THM];
1986 REPEAT WEAKER_STRIP_TAC;
1987 INTRO_TAC Leaf_cell.AFFINE_IMP_CHI_MSB_0 [`[vec 0;vv i; vv (i+2)]`;`x`];
1988 REWRITE_TAC[LENGTH;arith `SUC(SUC(SUC 0)) = 3`];
1989 REWRITE_TAC[Bump.set_of_list3_explicit];
1991 TYPIFY `aff {vec 0, vv i} SUBSET affine hull {vec 0, vv i, vv (i + 2)}` ENOUGH_TO_SHOW_TAC;
1992 BY(FIRST_X_ASSUM_ST `aff` MP_TAC THEN SET_TAC[]);
1993 MATCH_MP_TAC Collect_geom.AFFINE_CONTAIN_LINE;
1994 REWRITE_TAC[AFFINE_AFFINE_HULL];
1995 MATCH_MP_TAC SUBSET_TRANS;
1996 TYPIFY `{vec 0, vv i, vv (i + 2)}` EXISTS_TAC;
1999 BY(REWRITE_TAC[HULL_SUBSET]);
2001 GMATCH_SIMP_TAC Leaf_cell.CHI_MSB_ADDITIVE;
2004 TYPIFY `!c c'. ((c':real) = (-- a/b) * c) ==> c * c' <= &0` (C SUBGOAL_THEN MATCH_MP_TAC);
2005 REPEAT WEAKER_STRIP_TAC;
2007 REWRITE_TAC[ (arith `c * -- a /b * c <= &0 <=> &0 <= (a / b) * c pow 2`) ];
2008 GMATCH_SIMP_TAC REAL_LE_MUL;
2009 GMATCH_SIMP_TAC REAL_LE_RDIV_EQ;
2011 REWRITE_TAC[ REAL_LE_POW_2];
2012 BY(REPEAT (FIRST_X_ASSUM_ST `&0 < x` MP_TAC) THEN REAL_ARITH_TAC);
2013 MATCH_MP_TAC REAL_EQ_LCANCEL_IMP;
2014 TYPIFY `b` EXISTS_TAC;
2015 FIRST_X_ASSUM MP_TAC;
2016 REWRITE_TAC[arith `a + b = &0 <=> b = --a`];
2017 DISCH_THEN SUBST1_TAC;
2019 BY(FIRST_X_ASSUM_ST `&0 < b` MP_TAC THEN REAL_ARITH_TAC);
2020 Calc_derivative.CALC_ID_TAC;
2021 BY(FIRST_X_ASSUM_ST `&0 < b` MP_TAC THEN REAL_ARITH_TAC)
2025 let enclosed_sym = prove_by_refinement(
2026 `!y1 y2 y3 y4 y5 y6 y7 y8 y0. enclosed y1 y5 y6 y4 y2 y3 y7 y8 y9 =
2027 enclosed y1 y6 y5 y4 y3 y2 y7 y9 y8`,
2030 REPEAT WEAKER_STRIP_TAC;
2031 REWRITE_TAC[Enclosed.enclosed];
2032 REPLICATE_TAC 3 AP_TERM_TAC;
2033 REWRITE_TAC[muR_ALT];
2034 REWRITE_TAC[FUN_EQ_THM];
2036 REWRITE_TAC[Collect_geom2.cayleyR];
2041 let enclosed_sym2 = prove_by_refinement(
2042 `!y1 y2 y3 y4 y5 y6 y7 y8 y0. enclosed y1 y5 y6 y4 y2 y3 y7 y8 y9 =
2043 enclosed y7 y8 y9 y4 y2 y3 y1 y5 y6`,
2046 REPEAT WEAKER_STRIP_TAC;
2047 REWRITE_TAC[Enclosed.enclosed];
2048 REPLICATE_TAC 3 AP_TERM_TAC;
2049 REWRITE_TAC[muR_ALT];
2050 REWRITE_TAC[FUN_EQ_THM];
2052 REWRITE_TAC[Collect_geom2.cayleyR];
2057 let convex_local_fan_azim_le_pi = prove_by_refinement(
2058 `!vv k i. (let V = IMAGE vv (:num) in
2059 let E = IMAGE (\i. {vv i, vv (SUC i)}) (:num) in
2060 let f = IMAGE (\i. vv i,vv (SUC i)) (:num) in
2062 3 <= k /\ (!i j. i < k /\ j < k /\ vv i = vv j ==> i = j) /\
2063 convex_local_fan (V,E,f) /\
2064 V SUBSET ball_annulus
2066 (azim (vec 0) (vv i) (vv (SUC i)) (vv (i + k - 1)) <= pi)))`,
2069 REWRITE_TAC[LET_THM];
2070 REPEAT WEAKER_STRIP_TAC;
2071 INTRO_TAC Localization.convex_local_fan [`IMAGE (\i. vv i,vv (SUC i)) (:num)`;`IMAGE vv (:num)`;`IMAGE (\i. {vv i, vv (SUC i)}) (:num)`;];
2072 ASM_REWRITE_TAC[IN_IMAGE;IN_UNIV];
2073 REPEAT WEAKER_STRIP_TAC;
2074 FIRST_X_ASSUM (C INTRO_TAC [ `vv i, vv (SUC i)`]);
2077 GMATCH_SIMP_TAC Local_lemmas.LOFA_DETERMINE_AZIM_IN_FA;
2079 GEXISTL_TAC [`IMAGE vv (:num)`;`IMAGE (\i. vv i,vv (SUC i)) (:num)`];
2081 BY(MESON_TAC[IN_IMAGE;IN_UNIV]);
2082 GMATCH_SIMP_TAC EE_vv;
2083 TYPIFY `k` EXISTS_TAC;
2085 BY(ASM_REWRITE_TAC[]);
2086 REWRITE_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET];
2091 let vv_quad_split012 = prove_by_refinement(
2093 (let V = IMAGE vv (:num) in
2094 let E = IMAGE (\i. {vv i, vv (SUC i)}) (:num) in
2095 let f = IMAGE (\i. vv i,vv (SUC i)) (:num) in
2097 V SUBSET ball_annulus /\
2098 dist(vv 0, vv 1) < &4 /\
2099 dist(vv 0, vv 2) < &4 /\
2100 dist(vv 0, vv 3) < &4 /\
2101 dist(vv 1,vv 2) < &4 /\
2102 dist(vv 2,vv 3) < &4 /\
2103 (!i j. ~(vv i = vv j) ==> &2 <= dist(vv i,vv j) ) /\
2104 convex_local_fan (V,E,f) /\
2105 (!i j. i < 4 /\ j < 4 /\ vv i = vv j ==> (i = j))
2106 ==> (rho_fun (norm (vv 0)) * azim (vec 0) (vv 0) (vv 1) (vv 3) +
2107 rho_fun (norm (vv 1)) * azim (vec 0) (vv 1) (vv 2) (vv 0) +
2108 rho_fun (norm (vv 2)) * azim (vec 0) (vv 2) (vv 3) (vv 1) +
2109 rho_fun (norm (vv 3)) * azim (vec 0) (vv 3) (vv 0) (vv 2)) -
2111 tau3 (vv 0) (vv 1) (vv 2) + tau3 (vv 2) (vv 3) (vv 0)))`,
2114 REWRITE_TAC[LET_THM];
2115 REPEAT WEAKER_STRIP_TAC;
2116 TYPIFY ` azim (vec 0) (vv 0) (vv (SUC 0)) (vv (0 + 4 - 1)) <= pi /\ azim (vec 0) (vv 1) (vv (SUC 1)) (vv (1 + 4 - 1)) <= pi /\ azim (vec 0) (vv 2) (vv (SUC 2)) (vv (2 + 4 - 1)) <= pi /\ azim (vec 0) (vv 3) (vv (SUC 3)) (vv (3 + 4 -1)) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
2117 BY(REPEAT CONJ_TAC THEN MATCH_MP_TAC (REWRITE_RULE[LET_THM] convex_local_fan_azim_le_pi) THEN ASM_REWRITE_TAC[arith `3 <= 4`]);
2118 REWRITE_TAC[Appendix.tau3];
2119 TYPIFY `vv 6 = vv 2 /\ vv 5 = vv 1 /\ vv 4 = vv 0` (C SUBGOAL_THEN ASSUME_TAC);
2120 BY(REPEAT (CONJ_TAC) THEN GMATCH_SIMP_TAC periodic_vv_inj THEN TYPIFY `4` EXISTS_TAC THEN ASM_REWRITE_TAC[MOD_4_EXPLICIT;arith `~(4 = 0)`]);
2121 TYPIFY `azim (vec 0) ((vv 0)) ((vv (SUC 0))) ((vv (0 + 4 - 1))) = azim (vec 0) ((vv 0)) ((vv (SUC 0))) ((vv 2)) + azim(vec 0) ((vv 0)) ((vv 2)) ((vv (0 + 4 - 1))) /\ (azim (vec 0) ((vv 2)) ((vv (SUC 2))) ((vv (2 + 4 - 1))) = azim (vec 0) ((vv 2)) ((vv (SUC 2))) ((vv 0)) + azim(vec 0) ((vv 2)) ((vv 0)) ((vv (2 + 4 -1))))` (C SUBGOAL_THEN ASSUME_TAC);
2122 CONJ_TAC THEN MATCH_MP_TAC (REWRITE_RULE[LET_THM] vv_split_azim) THEN ASM_REWRITE_TAC[arith `3 <= 4 /\ ~( 0 = 2)`;MOD_4_EXPLICIT;arith `SUC 0 = 1 /\ 0 + 4 - 1 = 3`;arith `SUC 2 = 3 /\ 2 + 4 - 1 = 5`];
2123 BY(ASM_MESON_TAC[DIST_SYM]);
2124 RULE_ASSUM_TAC (REWRITE_RULE[arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3 /\ SUC 3 = 4 /\ 0+4-1 = 3 /\ 1+4-1=4 /\ 2+4-1=5 /\ 3+4-1=6`]);
2125 FIRST_X_ASSUM_ST `6` (RULE_ASSUM_TAC o (unlist REWRITE_RULE));
2127 TYPIFY `azim (vec 0) (vv 0) (vv 1) (vv 2) <= pi /\ azim (vec 0) (vv 0) (vv 2) (vv 3) <= pi /\ azim (vec 0) (vv 2 ) (vv 3) (vv 0) <= pi /\ azim (vec 0) (vv 2) (vv 0) (vv 1) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
2128 BY(ASM_MESON_TAC[Counting_spheres.AZIM_NN;arith `&0 <= x /\ &0 <= y /\ x + y <= pi ==> (x <= pi /\ y <= pi)`]);
2129 COMMENT "azim to dih";
2130 TYPIFY `~collinear {vec 0,vv 0,vv 1} /\ ~collinear {vec 0,vv 0, vv 2} /\ ~collinear {vec 0,vv 0,vv 3} /\ ~collinear {vec 0,vv 1,vv 2} /\ ~collinear {vec 0,vv 2, vv 3}` (C SUBGOAL_THEN ASSUME_TAC);
2131 REPEAT (GMATCH_SIMP_TAC NONPARALLEL_BALL_ANNULUS40_ALT);
2132 RULE_ASSUM_TAC (REWRITE_RULE[IMAGE_SUBSET_IN;IN_UNIV]);
2134 BY(REPEAT CONJ_TAC THEN (FIRST_X_ASSUM_ST `dist` MATCH_MP_TAC) THEN GMATCH_SIMP_TAC periodic_vv_inj THEN (TYPIFY `4` EXISTS_TAC) THEN ASM_REWRITE_TAC[arith `~(4 = 0)`;MOD_4_EXPLICIT;arith `~(2 = 3) /\ ~(1 = 2) /\ ~(0=3) /\ ~(0=1) /\ ~(0=2)`]);
2135 COMMENT "azim to dih";
2136 TYPIFY `azim (vec 0) (vv 0) (vv 1) (vv 2) = dihV (vec 0) (vv 0) (vv 1) (vv 2) /\ azim (vec 0) (vv 0) (vv 2) (vv 3) = dihV (vec 0) (vv 0) (vv 2) (vv 3) /\ azim (vec 0) (vv 1) (vv 2) (vv 0) = dihV (vec 0) (vv 1) (vv 2) (vv 0) /\ azim (vec 0) (vv 2) (vv 3) (vv 0) = dihV (vec 0) (vv 2) (vv 3) (vv 0) /\ azim (vec 0) (vv 2) (vv 0) (vv 1) = dihV (vec 0) (vv 2) (vv 0) (vv 1) /\ azim (vec 0) (vv 3) (vv 0) (vv 2) = dihV (vec 0) (vv 3) (vv 0) (vv 2)` ENOUGH_TO_SHOW_TAC;
2137 DISCH_THEN (unlist REWRITE_TAC);
2138 REWRITE_TAC[Appendix.rho_rho_fun];
2140 BY(REPEAT CONJ_TAC THEN MATCH_MP_TAC (REWRITE_RULE[TAUT `(a ==> b ==> c) <=> (a /\ b ==> c)`] Local_lemmas.AZIM_LE_PI_EQ_DIHV) THEN ASM_REWRITE_TAC[] THEN ONCE_REWRITE_TAC[SET_RULE `{a,b,c}={a,c,b}`] THEN ASM_REWRITE_TAC[])
2144 let vv_quad_split123 = prove_by_refinement(
2146 (let V = IMAGE vv (:num) in
2147 let E = IMAGE (\i. {vv i, vv (SUC i)}) (:num) in
2148 let f = IMAGE (\i. vv i,vv (SUC i)) (:num) in
2150 V SUBSET ball_annulus /\
2151 dist(vv 0, vv 1) < &4 /\
2152 dist(vv 0, vv 3) < &4 /\
2153 dist(vv 1,vv 2) < &4 /\
2154 dist(vv 1,vv 3) < &4 /\
2155 dist(vv 2,vv 3) < &4 /\
2156 (!i j. ~(vv i = vv j) ==> &2 <= dist(vv i,vv j) ) /\
2157 convex_local_fan (V,E,f) /\
2158 (!i j. i < 4 /\ j < 4 /\ vv i = vv j ==> (i = j))
2159 ==> (rho_fun (norm (vv 0)) * azim (vec 0) (vv 0) (vv 1) (vv 3) +
2160 rho_fun (norm (vv 1)) * azim (vec 0) (vv 1) (vv 2) (vv 0) +
2161 rho_fun (norm (vv 2)) * azim (vec 0) (vv 2) (vv 3) (vv 1) +
2162 rho_fun (norm (vv 3)) * azim (vec 0) (vv 3) (vv 0) (vv 2)) -
2164 tau3 (vv 1) (vv 2) (vv 3) + tau3 (vv 3) (vv 0) (vv 1)))`,
2167 REWRITE_TAC[LET_THM];
2168 REPEAT WEAKER_STRIP_TAC;
2169 TYPIFY ` azim (vec 0) (vv 0) (vv (SUC 0)) (vv (0 + 4 - 1)) <= pi /\ azim (vec 0) (vv 1) (vv (SUC 1)) (vv (1 + 4 - 1)) <= pi /\ azim (vec 0) (vv 2) (vv (SUC 2)) (vv (2 + 4 - 1)) <= pi /\ azim (vec 0) (vv 3) (vv (SUC 3)) (vv (3 + 4 -1)) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
2170 BY(REPEAT CONJ_TAC THEN MATCH_MP_TAC (REWRITE_RULE[LET_THM] convex_local_fan_azim_le_pi) THEN ASM_REWRITE_TAC[arith `3 <= 4`]);
2171 REWRITE_TAC[Appendix.tau3];
2172 TYPIFY `vv 6 = vv 2 /\ vv 5 = vv 1 /\ vv 4 = vv 0` (C SUBGOAL_THEN ASSUME_TAC);
2173 BY(REPEAT (CONJ_TAC) THEN GMATCH_SIMP_TAC periodic_vv_inj THEN TYPIFY `4` EXISTS_TAC THEN ASM_REWRITE_TAC[MOD_4_EXPLICIT;arith `~(4 = 0)`]);
2174 TYPIFY `azim (vec 0) ((vv 1)) ((vv (SUC 1))) ((vv (1 + 4 - 1))) = azim (vec 0) ((vv 1)) ((vv (SUC 1))) ((vv 3)) + azim(vec 0) ((vv 1)) ((vv 3)) ((vv (1 + 4 - 1))) /\ (azim (vec 0) ((vv 3)) ((vv (SUC 3))) ((vv (3 + 4 - 1))) = azim (vec 0) ((vv 3)) ((vv (SUC 3))) ((vv 1)) + azim(vec 0) ((vv 3)) ((vv 1)) ((vv (3 + 4 -1))))` (C SUBGOAL_THEN ASSUME_TAC);
2175 CONJ_TAC THEN MATCH_MP_TAC (REWRITE_RULE[LET_THM] vv_split_azim) THEN ASM_REWRITE_TAC[arith `3 <= 4 /\ ~( 1 = 3)`;MOD_4_EXPLICIT;arith `SUC 1 = 2 /\ 1 + 4 - 1 = 4`;arith `SUC 3 = 4 /\ 3 + 4 - 1 = 6`];
2176 BY(ASM_MESON_TAC[DIST_SYM]);
2177 BY(ASM_MESON_TAC[DIST_SYM]);
2178 RULE_ASSUM_TAC (REWRITE_RULE[arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3 /\ SUC 3 = 4 /\ 0+4-1 = 3 /\ 1+4-1=4 /\ 2+4-1=5 /\ 3+4-1=6`]);
2179 FIRST_X_ASSUM_ST `vv 6 = vv 2` (RULE_ASSUM_TAC o (unlist REWRITE_RULE));
2181 TYPIFY `azim (vec 0) (vv 1) (vv 2) (vv 3) <= pi /\ azim (vec 0) (vv 1) (vv 3) (vv 0) <= pi /\ azim (vec 0) (vv 3 ) (vv 0) (vv 1) <= pi /\ azim (vec 0) (vv 3) (vv 1) (vv 2) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
2182 BY(ASM_MESON_TAC[Counting_spheres.AZIM_NN;arith `&0 <= x /\ &0 <= y /\ x + y <= pi ==> (x <= pi /\ y <= pi)`]);
2183 COMMENT "collinearity";
2184 TYPIFY `~collinear {vec 0,vv 0,vv 1} /\ ~collinear {vec 0,vv 0, vv 3} /\ ~collinear {vec 0,vv 1,vv 3} /\ ~collinear {vec 0,vv 1,vv 2} /\ ~collinear {vec 0,vv 2, vv 3}` (C SUBGOAL_THEN ASSUME_TAC);
2185 REPEAT (GMATCH_SIMP_TAC NONPARALLEL_BALL_ANNULUS40_ALT);
2186 RULE_ASSUM_TAC (REWRITE_RULE[IMAGE_SUBSET_IN;IN_UNIV]);
2188 BY(REPEAT CONJ_TAC THEN (FIRST_X_ASSUM_ST `dist` MATCH_MP_TAC) THEN GMATCH_SIMP_TAC periodic_vv_inj THEN (TYPIFY `4` EXISTS_TAC) THEN ASM_REWRITE_TAC[arith `~(4 = 0)`;MOD_4_EXPLICIT;arith `~(2 = 3) /\ ~(1 = 2) /\ ~(0=3) /\ ~(0=1) /\ ~(1=3)`]);
2189 COMMENT "azim to dih";
2190 TYPIFY `azim (vec 0) (vv 0) (vv 1) (vv 3) = dihV (vec 0) (vv 0) (vv 1) (vv 3) /\ azim (vec 0) (vv 1) (vv 2) (vv 3) = dihV (vec 0) (vv 1) (vv 2) (vv 3) /\ azim (vec 0) (vv 1) (vv 3) (vv 0) = dihV (vec 0) (vv 1) (vv 3) (vv 0) /\ azim (vec 0) (vv 2) (vv 3) (vv 1) = dihV (vec 0) (vv 2) (vv 3) (vv 1) /\ azim (vec 0) (vv 3) (vv 0) (vv 1) = dihV (vec 0) (vv 3) (vv 0) (vv 1) /\ azim (vec 0) (vv 3) (vv 1) (vv 2) = dihV (vec 0) (vv 3) (vv 1) (vv 2)` ENOUGH_TO_SHOW_TAC;
2191 DISCH_THEN (unlist REWRITE_TAC);
2192 REWRITE_TAC[Appendix.rho_rho_fun];
2194 BY(REPEAT CONJ_TAC THEN MATCH_MP_TAC (REWRITE_RULE[TAUT `(a ==> b ==> c) <=> (a /\ b ==> c)`] Local_lemmas.AZIM_LE_PI_EQ_DIHV) THEN ASM_REWRITE_TAC[] THEN ONCE_REWRITE_TAC[SET_RULE `{a,b,c}={a,c,b}`] THEN ASM_REWRITE_TAC[])
2198 let vv_quad_split_short = prove_by_refinement(
2199 `!vv. (let V = IMAGE vv (:num) in
2200 let E = IMAGE (\i. {vv i, vv (SUC i)}) (:num) in
2201 let f = IMAGE (\i. vv i,vv (SUC i)) (:num) in
2203 V SUBSET ball_annulus /\
2204 dist (vv 0,vv 1) < &4 /\
2205 dist (vv 0,vv 3) < &4 /\
2206 dist (vv 0,vv 2) < &4 /\
2207 dist (vv 1,vv 2) < &4 /\
2208 dist (vv 1,vv 3) < &4 /\
2209 dist (vv 2,vv 3) < &4 /\
2210 (!i j. ~(vv i = vv j) ==> &2 <= dist (vv i,vv j)) /\
2211 convex_local_fan (V,E,f) /\
2212 (!i j. i < 4 /\ j < 4 /\ vv i = vv j ==> i = j)
2213 ==> (?i. i < 2 /\ (dist(vv i,vv (i+2)) <= dist(vv (i+1),vv(i+3))) /\
2214 (rho_fun (norm (vv 0)) * azim (vec 0) (vv 0) (vv 1) (vv 3) +
2215 rho_fun (norm (vv 1)) * azim (vec 0) (vv 1) (vv 2) (vv 0) +
2216 rho_fun (norm (vv 2)) * azim (vec 0) (vv 2) (vv 3) (vv 1) +
2217 rho_fun (norm (vv 3)) * azim (vec 0) (vv 3) (vv 0) (vv 2)) -
2219 tau3 (vv i) (vv (i+1)) (vv (i+2)) + tau3 (vv (i+2)) (vv (i+3)) (vv i))))`,
2222 REWRITE_TAC[LET_THM];
2223 REPEAT WEAKER_STRIP_TAC;
2224 TYPIFY `dist(vv 0,vv 2) <= dist(vv 1,vv 3)` ASM_CASES_TAC;
2225 TYPIFY `0` EXISTS_TAC;
2226 ASM_REWRITE_TAC[arith `0+x = x /\ 0 < 2`];
2227 MATCH_MP_TAC (REWRITE_RULE[LET_THM] vv_quad_split012);
2228 BY(ASM_REWRITE_TAC[]);
2229 TYPIFY `1` EXISTS_TAC;
2230 REWRITE_TAC[arith `1+2 = 3 /\ 1+1 = 2 /\ 1 + 3 = 4 /\ 1 < 2`];
2231 TYPIFY `vv 4 = vv 0` (C SUBGOAL_THEN SUBST1_TAC);
2232 BY( GMATCH_SIMP_TAC periodic_vv_inj THEN TYPIFY `4` EXISTS_TAC THEN ASM_REWRITE_TAC[MOD_4_EXPLICIT;arith `~(4 = 0)`]);
2234 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[DIST_SYM;arith `~(x <= y) ==> y <= x`]);
2235 MATCH_MP_TAC (REWRITE_RULE[LET_THM] vv_quad_split123);
2236 BY(ASM_REWRITE_TAC[])
2240 let SUC_EXPLICIT = prove_by_refinement(
2241 `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3 /\ SUC 3 = 4 /\ SUC 4 = 5 /\ SUC 5 = 6 /\ SUC 6 = 7 /\ SUC 7 = 8 /\ SUC 8 = 9`,
2248 let cs_adj4_EXPLICIT = prove_by_refinement(
2250 cs_adj 4 a b 0 0 = &0 /\
2251 cs_adj 4 a b 0 1 = a /\
2252 cs_adj 4 a b 0 2 = b /\
2253 cs_adj 4 a b 0 3 = a /\
2254 cs_adj 4 a b 1 0 = a /\
2255 cs_adj 4 a b 1 1 = &0 /\
2256 cs_adj 4 a b 1 2 = a /\
2257 cs_adj 4 a b 1 3 = b /\
2258 cs_adj 4 a b 2 0 = b /\
2259 cs_adj 4 a b 2 1 = a /\
2260 cs_adj 4 a b 2 2 = &0 /\
2261 cs_adj 4 a b 2 3 = a /\
2262 cs_adj 4 a b 3 0 = a /\
2263 cs_adj 4 a b 3 1 = b /\
2264 cs_adj 4 a b 3 2 = a /\
2265 cs_adj 4 a b 3 3 = &0
2269 REWRITE_TAC[Appendix.cs_adj;MOD_4_EXPLICIT;SUC_EXPLICIT];
2274 let delta_4680581274 = prove_by_refinement(
2275 `!y1 y4. cstab <= y1 /\ &4 <= y4 ==>
2276 delta_y y1 (&2) (&2) y4 (&2) cstab < &0`,
2279 REWRITE_TAC[Sphere.delta_y;Sphere.delta_x;arith `&2 * &2 = &4`];
2280 REPEAT WEAKER_STRIP_TAC;
2281 TYPED_ABBREV_TAC `y = y1 * y1` ;
2282 TYPED_ABBREV_TAC `z = y4 * y4` ;
2283 TYPED_ABBREV_TAC `c = cstab * cstab` ;
2284 TYPIFY `y * z * (--y + &4 + &4 - z + &4 + c) + &4 * &4 * (y - &4 + &4 + z - &4 + c) + &4 * c * (y + &4 - &4 + z + &4 - c) - &4 * &4 * z - y * &4 * &4 - y * &4 * c - z * &4 * c = (-- &64 + &32 * c - &4 * c pow 2) - y * z * (-- &12 - c + y + z)` (C SUBGOAL_THEN SUBST1_TAC);
2286 REWRITE_TAC[arith `x - y < &0 <=> x < y`];
2287 MATCH_MP_TAC REAL_LT_TRANS;
2288 TYPIFY ` &0` EXISTS_TAC;
2291 REWRITE_TAC[Appendix.cstab];
2295 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
2296 REPEAT (GMATCH_SIMP_TAC REAL_LT_MUL_EQ);
2297 TYPIFY `&0 < y1 /\ &0 < y4` (C SUBGOAL_THEN (unlist REWRITE_TAC));
2298 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab] THEN REAL_ARITH_TAC);
2299 TYPIFY `&9 <= y1 * y1` (C SUBGOAL_THEN ASSUME_TAC);
2300 REWRITE_TAC[arith `&9 = &3 * &3`];
2301 GMATCH_SIMP_TAC Misc_defs_and_lemmas.ABS_SQUARE_LE;
2302 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab] THEN REAL_ARITH_TAC);
2303 TYPIFY `&16 <= y4 * y4` (C SUBGOAL_THEN ASSUME_TAC);
2304 REWRITE_TAC[arith `&16 = &4 * &4`];
2305 GMATCH_SIMP_TAC Misc_defs_and_lemmas.ABS_SQUARE_LE;
2306 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab] THEN REAL_ARITH_TAC);
2308 REWRITE_TAC[Appendix.cstab];
2309 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC)
2313 let delta_7697147739 = prove_by_refinement(
2314 `!y1 y4. cstab <= y1 /\ &4 <= y4 ==>
2315 delta_y y1 (&2) (&2) y4 (&2) sqrt8 < &0`,
2318 REWRITE_TAC[Sphere.delta_y;Sphere.delta_x;arith `&2 * &2 = &4`;Nonlinear_lemma.sqrt8_2;arith `#8.0 = &8`];
2319 REPEAT WEAKER_STRIP_TAC;
2320 TYPED_ABBREV_TAC `y = y1 * y1` ;
2321 TYPED_ABBREV_TAC `z = y4 * y4` ;
2322 TYPIFY `y * z * (--y + &4 + &4 - z + &4 + &8) + &4 * &4 * (y - &4 + &4 + z - &4 + &8) + &4 * &8 * (y + &4 - &4 + z + &4 - &8) - &4 * &4 * z - y * &4 * &4 - y * &4 * &8 - z * &4 * &8 = -- &64 - y * z * (-- &20 + y + z)` (C SUBGOAL_THEN SUBST1_TAC);
2324 REWRITE_TAC[arith `x - y < &0 <=> x < y`];
2325 MATCH_MP_TAC REAL_LT_TRANS;
2326 TYPIFY ` &0` EXISTS_TAC;
2331 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
2332 REPEAT (GMATCH_SIMP_TAC REAL_LT_MUL_EQ);
2333 TYPIFY `&0 < y1 /\ &0 < y4` (C SUBGOAL_THEN (unlist REWRITE_TAC));
2334 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab] THEN REAL_ARITH_TAC);
2335 TYPIFY `&9 <= y1 * y1` (C SUBGOAL_THEN ASSUME_TAC);
2336 REWRITE_TAC[arith `&9 = &3 * &3`];
2337 GMATCH_SIMP_TAC Misc_defs_and_lemmas.ABS_SQUARE_LE;
2338 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab] THEN REAL_ARITH_TAC);
2339 TYPIFY `&16 <= y4 * y4` (C SUBGOAL_THEN ASSUME_TAC);
2340 REWRITE_TAC[arith `&16 = &4 * &4`];
2341 GMATCH_SIMP_TAC Misc_defs_and_lemmas.ABS_SQUARE_LE;
2342 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab] THEN REAL_ARITH_TAC);
2343 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC)
2347 let tau3_sym = prove_by_refinement(
2348 `!v0 v1 v2. tau3 v0 v1 v2 = tau3 v0 v2 v1 /\ tau3 v0 v1 v2 = tau3 v1 v0 v2`,
2351 REWRITE_TAC[Appendix.tau3];
2352 REPEAT WEAKER_STRIP_TAC;
2353 REWRITE_TAC[DIHV_SYM];
2358 let INSERT_SUBSET = prove_by_refinement(
2359 `!(a:A) A S. a INSERT A SUBSET S <=> (a IN S) /\ A SUBSET S`,
2366 (* INEQUALITY MATERIAL STARTS HERE *)
2368 let OWZLKVY0 = prove_by_refinement(
2369 `main_nonlinear_terminal_v11 ==>
2370 (!y1 y2 y3 y4 y5 y6.
2371 &2 <= y1 /\ y1 <= &2 * h0 /\
2372 &2 <= y1 /\ y2 <= &2 * h0 /\
2373 &2 <= y2 /\ y2 <= &2 * h0 /\
2374 &2 <= y3 /\ y3 <= &2 * h0 /\
2375 cstab <= y4 /\ y4 <= #3.915 /\
2377 y6 = &2 /\ &200 <= delta_y y1 y2 y3 y4 y5 y6 ==>
2378 &0 <= taum y1 y2 y3 y4 y5 y6)`,
2381 REWRITE_TAC[Appendix.cstab];
2382 REPEAT WEAKER_STRIP_TAC;
2383 INTRO_TAC ((* Appendix. *) get_main_nonlinear "6762190381") [];
2384 DISCH_THEN (C INTRO_TAC [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`]);
2385 REWRITE_TAC[Sphere.ineq];
2386 REPEAT (FIRST_X_ASSUM MP_TAC);
2391 (* was EAR_ANGLE_ACUTE *)
2393 let EAR_DELTA_X4 = prove_by_refinement(
2394 `main_nonlinear_terminal_v11 ==> (!y1 y2 y3 y4 y5 y6. &2 <= y1 /\ y1 <= &2 * h0 /\
2395 &2 <= y2 /\ y2 <= &2 * h0 /\
2396 &2 <= y3 /\ y3 <= &2 * h0 /\
2397 cstab <= y4 /\ y4 <= #3.915 /\
2400 delta_y y1 y2 y3 y4 y5 y6 <= &200 ==>
2401 (delta_x4 (y1 * y1) (y2 * y2) (y3 * y3) (y4 * y4) (y5 * y5) (y6 * y6) <
2403 &0 < delta_x4 (y2 * y2) (y3 * y3) (y1 * y1) (y5 * y5) (y6 * y6) (y4 * y4)
2405 &0 < delta_x4 (y3 * y3) (y1 * y1) (y2 * y2) (y6 * y6) (y4 * y4) (y5 * y5)
2409 REPEAT WEAKER_STRIP_TAC;
2411 INTRO_TAC ((* Appendix. *) get_main_nonlinear "8346775862") [];
2412 DISCH_THEN (C INTRO_TAC [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`]);
2413 REWRITE_TAC[Sphere.ineq;Sphere.delta_y;Sphere.y_of_x];
2414 REWRITE_TAC[TAUT `a ==> b ==> c <=> a /\ b ==> c`];
2416 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab] THEN REAL_ARITH_TAC);
2417 BY(FIRST_X_ASSUM MP_TAC THEN REWRITE_TAC[Sphere.delta_y] THEN REAL_ARITH_TAC);
2419 TYPIFY `delta_x4 (y2 * y2) (y3 * y3) (y1 * y1) (y5 * y5) (y6 * y6) (y4 * y4) = delta_x4 (y2 * y2) (y1 * y1) (y3 * y3) (y5 * y5) (y4 * y4) (y6 * y6)` (C SUBGOAL_THEN SUBST1_TAC);
2420 REWRITE_TAC[Sphere.delta_x4];
2422 INTRO_TAC ((* Appendix. *) get_main_nonlinear "8631418063") [];
2423 DISCH_THEN (C INTRO_TAC [`y2`;`y1`;`y3`;`y5`;`y4`;`y6`]);
2424 REWRITE_TAC[Sphere.ineq;Sphere.delta_y;Sphere.y_of_x];
2425 REWRITE_TAC[arith `x > &0 <=> &0 < x`];
2426 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab] THEN REAL_ARITH_TAC);
2427 INTRO_TAC ((* Appendix. *) get_main_nonlinear "8631418063") [];
2428 DISCH_THEN (C INTRO_TAC [`y3`;`y1`;`y2`;`y6`;`y4`;`y5`]);
2429 REWRITE_TAC[Sphere.ineq;Sphere.delta_y;Sphere.y_of_x];
2430 REWRITE_TAC[arith `x > &0 <=> &0 < x`];
2431 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab] THEN REAL_ARITH_TAC)
2435 let EAR_DIH1_DELTA_0 = prove_by_refinement(
2436 `main_nonlinear_terminal_v11 ==> (!y1 y2 y3 y4 y5 y6. &2 <= y1 /\ y1 <= &2 * h0 /\
2437 &2 <= y2 /\ y2 <= &2 * h0 /\
2438 &2 <= y3 /\ y3 <= &2 * h0 /\
2439 cstab <= y4 /\ y4 <= #3.915 /\
2442 delta_y y1 y2 y3 y4 y5 y6 = &0 ==>
2443 dih_y y1 y2 y3 y4 y5 y6 = pi)`,
2446 REPEAT WEAKER_STRIP_TAC;
2447 INTRO_TAC (UNDISCH EAR_DELTA_X4) [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
2449 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab] THEN REAL_ARITH_TAC);
2451 FIRST_X_ASSUM_ST `delta_y` MP_TAC;
2452 REWRITE_TAC[Sphere.dih_y;Sphere.dih_x;LET_DEF;LET_END_DEF;Sphere.delta_y];
2453 DISCH_THEN (unlist REWRITE_TAC);
2454 REWRITE_TAC[arith `x * &0 = &0`;SQRT_0];
2455 TYPED_ABBREV_TAC `d = delta_x4 (y1 * y1) (y2 * y2) (y3 * y3) (y4 * y4) (y5 * y5) (y6 * y6)`;
2456 INTRO_TAC Merge_ineq.atn2_0 [`-- d`];
2457 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC);
2462 let OWZLKVY3 = prove_by_refinement(
2463 `main_nonlinear_terminal_v11 ==> ( !y1 y2 y3 y4 y5 y6.
2464 &2 <= y1 /\ y1 <= &2 * h0 /\
2465 &2 <= y2 /\ y2 <= &2 * h0 /\
2466 &2 <= y3 /\ y3 <= &2 * h0 /\
2467 cstab <= y4 /\ y4 <= #3.915 /\
2470 &0 <= delta_y y1 y2 y3 y4 y5 y6 /\
2471 dih_y y1 y2 y3 y4 y5 y6 = pi ==>
2472 sol0 * (y1 - &2 * h0) / (&2 * h0 - &2) <= taum y1 y2 y3 y4 y5 y6)`,
2475 REPEAT WEAKER_STRIP_TAC;
2476 ASM_CASES_TAC `&200 <= delta_y y1 y2 y3 y4 y5 y6`;
2477 INTRO_TAC OWZLKVY0 [];
2479 DISCH_THEN (C INTRO_TAC [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`]);
2481 MATCH_MP_TAC (arith `&0 <= s * (-- u) /v ==> (&0 <= t ==> s * u / v <= t)`);
2482 GMATCH_SIMP_TAC REAL_LE_MUL;
2484 INTRO_TAC Flyspeck_constants.bounds [];
2486 GMATCH_SIMP_TAC REAL_LE_RDIV_EQ;
2487 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2488 RULE_ASSUM_TAC (REWRITE_RULE[arith `~(x <= y) <=> y < x`]);
2489 REWRITE_TAC[Nonlinear_lemma.taum_123;Sphere.rhazim2;Sphere.rhazim3;Sphere.node2_y;Sphere.node3_y];
2490 REWRITE_TAC[Sphere.rhazim];
2491 TYPIFY `delta_y y1 y2 y3 y4 y5 y6 = &0` (C SUBGOAL_THEN ASSUME_TAC);
2493 INTRO_TAC Oxlzlez.DIH_X_LT_PI [`y1 * y1`;`y2*y2`;`y3*y3`;`y4*y4`;`y5*y5`;`y6*y6`];
2495 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
2496 REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.delta_y];
2497 MP_TAC (arith `&2 <= y1 ==> &0 < y1`);
2499 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.dih_y;LET_DEF;LET_END_DEF] THEN REAL_ARITH_TAC);
2501 INTRO_TAC (UNDISCH EAR_DELTA_X4) [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
2503 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2504 REPEAT WEAKER_STRIP_TAC;
2505 TYPIFY `dih_y y2 y3 y1 y5 y6 y4 = &0` (C SUBGOAL_THEN SUBST1_TAC);
2506 REWRITE_TAC[Sphere.dih_y;Sphere.dih_x;LET_DEF;LET_END_DEF];
2507 REPEAT (FIRST_X_ASSUM_ST `x = &2` kill);
2508 RULE_ASSUM_TAC (REWRITE_RULE[Sphere.delta_y]);
2509 TYPIFY `delta_x (y2 * y2) (y3 * y3) (y1 * y1) (y5 * y5) (y6 * y6) (y4 * y4) = &0` (C SUBGOAL_THEN SUBST1_TAC);
2510 FIRST_X_ASSUM_ST `x = &0` MP_TAC;
2511 BY(MESON_TAC[Merge_ineq.delta_x_sym]);
2512 REWRITE_TAC[arith `x * &0 = &0`;SQRT_0];
2513 TYPED_ABBREV_TAC `d = delta_x4 (y2 * y2) (y3 * y3) (y1 * y1) (y5 * y5) (y6 * y6) (y4 * y4)`;
2514 INTRO_TAC Merge_ineq.atn2_0 [`-- d`];
2515 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2517 TYPIFY `dih_y y3 y1 y2 y6 y4 y5 = &0` (C SUBGOAL_THEN SUBST1_TAC);
2518 REWRITE_TAC[Sphere.dih_y;Sphere.dih_x;LET_DEF;LET_END_DEF];
2519 REPEAT (FIRST_X_ASSUM_ST `x = &2` kill);
2520 RULE_ASSUM_TAC (REWRITE_RULE[Sphere.delta_y]);
2521 TYPIFY `delta_x (y3 * y3) (y1 * y1) (y2 * y2) (y6 * y6) (y4 * y4) (y5 * y5) = &0` (C SUBGOAL_THEN SUBST1_TAC);
2522 FIRST_X_ASSUM_ST `x = &0` MP_TAC;
2523 BY(MESON_TAC[Merge_ineq.delta_x_sym]);
2524 REWRITE_TAC[arith `x * &0 = &0`;SQRT_0];
2525 TYPED_ABBREV_TAC `d = delta_x4 (y3 * y3) (y1 * y1) (y2 * y2) (y6 * y6) (y4 * y4) (y5 * y5)`;
2526 INTRO_TAC Merge_ineq.atn2_0 [`-- d`];
2527 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2529 TYPIFY `dih_y y1 y2 y3 y4 y5 y6 = pi` (C SUBGOAL_THEN SUBST1_TAC);
2530 REWRITE_TAC[Sphere.dih_y;Sphere.dih_x;LET_DEF;LET_END_DEF];
2531 REPEAT (FIRST_X_ASSUM_ST `x = &2` kill);
2532 RULE_ASSUM_TAC (REWRITE_RULE[Sphere.delta_y]);
2533 TYPIFY `delta_x (y1 * y1) (y2 * y2) (y3 * y3) (y4 * y4) (y5 * y5) (y6 * y6) = &0` (C SUBGOAL_THEN SUBST1_TAC);
2534 FIRST_X_ASSUM_ST `x = &0` MP_TAC;
2535 BY(MESON_TAC[Merge_ineq.delta_x_sym]);
2536 REWRITE_TAC[arith `x * &0 = &0`;SQRT_0];
2537 TYPED_ABBREV_TAC `d = delta_x4 (y1 * y1) (y2 * y2) (y3 * y3) (y4 * y4) (y5 * y5) (y6 * y6)`;
2538 INTRO_TAC Merge_ineq.atn2_0 [`-- d`];
2539 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2540 REWRITE_TAC[arith `x * &0 = &0 /\ x + &0 = x`];
2541 REWRITE_TAC[Nonlinear_lemma.rho_alt;Nonlinear_lemma.sol0_const1];
2542 MATCH_MP_TAC (arith `x = y ==> x <= y`);
2543 Calc_derivative.CALC_ID_TAC;
2544 REWRITE_TAC[Sphere.h0];
2549 let OWZLKVY1 = prove_by_refinement(
2550 `main_nonlinear_terminal_v11 ==> ( !y1 y2 y3 y4 y5 y6.
2551 &2 <= y1 /\ y1 <= &2 * h0 /\
2552 &2 <= y2 /\ y2 <= &2 * h0 /\
2553 &2 <= y3 /\ y3 <= &2 * h0 /\
2554 cstab <= y4 /\ y4 <= #3.915 /\
2557 &0 <= delta_y y1 y2 y3 y4 y5 y6 ==>
2558 -- sol0 <= taum y1 y2 y3 y4 y5 y6)`,
2561 REPEAT WEAKER_STRIP_TAC;
2562 ASM_CASES_TAC `&200 <= delta_y y1 y2 y3 y4 y5 y6`;
2563 INTRO_TAC OWZLKVY0 [];
2565 DISCH_THEN (C INTRO_TAC [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`]);
2567 MATCH_MP_TAC (arith `&0 <= s ==> (&0 <= t ==> -- s <= t)`);
2568 INTRO_TAC Flyspeck_constants.bounds [];
2571 ASM_CASES_TAC `delta_y y1 y2 y3 y4 y5 y6 = &0`;
2572 INTRO_TAC (UNDISCH EAR_DIH1_DELTA_0) [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
2574 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2576 MATCH_MP_TAC REAL_LE_TRANS;
2577 EXISTS_TAC `sol0 * (y1 - &2 * h0) / (&2 * h0 - &2)`;
2579 MATCH_MP_TAC (arith `&0 <= s * (&1 + y /z) ==> --s <= s * y /z`);
2580 GMATCH_SIMP_TAC REAL_LE_MUL;
2582 INTRO_TAC Flyspeck_constants.bounds [];
2584 TYPIFY `&1 + (y1 - &2 * h0) / (&2 * h0 - &2) = (y1 - &2) / (&2 * h0 - &2)` (C SUBGOAL_THEN SUBST1_TAC);
2585 Calc_derivative.CALC_ID_TAC;
2586 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2587 GMATCH_SIMP_TAC REAL_LE_RDIV_EQ;
2588 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2589 MATCH_MP_TAC (UNDISCH OWZLKVY3);
2590 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2591 COMMENT "replace taum with solid angle";
2592 TYPIFY `&0 < delta_y y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN MP_TAC);
2593 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2595 REWRITE_TAC[Nonlinear_lemma.taum_123;Sphere.rhazim2;Sphere.rhazim3;Sphere.node2_y;Sphere.node3_y];
2596 REWRITE_TAC[arith `-- sol0 <= r1 + r2 + r3 - (&1 + c)*pi <=> (-- sol0 + c * pi) + pi <= (r1 + r2 + r3)`];
2597 MATCH_MP_TAC REAL_LE_TRANS;
2598 EXISTS_TAC `dih_y y1 y2 y3 y4 y5 y6 + dih_y y2 y3 y1 y5 y6 y4 + dih_y y3 y1 y2 y6 y4 y5`;
2600 MATCH_MP_TAC (arith `d1 <= r1 /\ d2 <= r2 /\ d3x <= r3 ==> d1 + d2 + d3x <= r1 + r2 + r3`);
2601 REPEAT (GMATCH_SIMP_TAC DIH_Y_LT_RHAZIM);
2603 BY(ASM_MESON_TAC[Merge_ineq.delta_y_sym]);
2604 REWRITE_TAC[Nonlinear_lemma.sol0_const1;arith `(-- (pi * c) + c * pi) + pi = pi`];
2605 RULE_ASSUM_TAC(REWRITE_RULE[arith `~(x <= d) <=> (d < x)`]);
2606 ENOUGH_TO_SHOW_TAC `&0 < sol_y y1 y2 y3 y4 y5 y6`;
2607 REWRITE_TAC[Sphere.sol_y];
2609 REWRITE_TAC[Merge_ineq.sol_y_sol_x];
2610 MATCH_MP_TAC sol_x_nn;
2611 REPEAT (GMATCH_SIMP_TAC REAL_LT_MUL_EQ);
2612 REWRITE_TAC[Trigonometry1.UPS_X_SQUARES];
2613 REPEAT (GMATCH_SIMP_TAC REAL_LT_MUL_EQ);
2614 TYPIFY `&0 < eulerA_x (y1 * y1) (y2 * y2) (y3 * y3) (y4 * y4) (y5 * y5) (y6 * y6)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
2615 INTRO_TAC ((* Appendix. *) get_main_nonlinear "4821120729") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
2616 REWRITE_TAC[Sphere.ineq;Sphere.y_of_x;arith `x > &0 <=> &0 < x`];
2617 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab] THEN REAL_ARITH_TAC);
2618 TYPIFY `&0 < delta_x (y1 * y1) (y2 * y2) (y3 * y3) (y4 * y4) (y5 * y5) (y6 * y6)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
2619 FIRST_X_ASSUM MP_TAC;
2620 BY(REWRITE_TAC[Sphere.delta_y]);
2621 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN (REWRITE_TAC[Appendix.cstab;Sphere.h0]) THEN REAL_ARITH_TAC)
2625 let OWZLKVY2 = prove_by_refinement(
2626 `main_nonlinear_terminal_v11 ==> ( !y1 y2 y3 y4 y5 y6.
2628 &2 <= y2 /\ y2 <= &2 * h0 /\
2629 &2 <= y3 /\ y3 <= &2 * h0 /\
2630 cstab <= y4 /\ y4 <= #3.915 /\
2633 &0 <= delta_y y1 y2 y3 y4 y5 y6 ==>
2634 &0 <= taum y1 y2 y3 y4 y5 y6)`,
2637 REPEAT WEAKER_STRIP_TAC;
2638 ASM_CASES_TAC `&200 <= delta_y y1 y2 y3 y4 y5 y6`;
2639 INTRO_TAC OWZLKVY0 [];
2641 DISCH_THEN (C INTRO_TAC [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`]);
2643 DISCH_THEN MATCH_MP_TAC;
2644 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2645 TYPIFY `&0 <= delta_x (y1 * y1) (y2 * y2) (y3 * y3) (y4 * y4) (y5 * y5) (y6 * y6)` (C SUBGOAL_THEN ASSUME_TAC);
2646 FIRST_X_ASSUM_ST `&0 <= d` MP_TAC;
2647 BY(REWRITE_TAC[Sphere.delta_y] THEN REAL_ARITH_TAC);
2648 GMATCH_SIMP_TAC taum_taum_x;
2650 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab] THEN REAL_ARITH_TAC);
2651 REWRITE_TAC[Sphere.y_of_x];
2652 GMATCH_SIMP_TAC Merge_ineq.tau_x_tau_residual_x;
2653 COMMENT "residue hypotheses";
2655 GMATCH_SIMP_TAC Nonlinear_lemma.sqrtxx;
2656 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
2657 REPEAT (GMATCH_SIMP_TAC REAL_LT_MUL_EQ);
2658 INTRO_TAC (UNDISCH EAR_DELTA_X4) [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
2660 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2661 DISCH_THEN (unlist REWRITE_TAC);
2662 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.delta_y;Sphere.h0;Appendix.cstab] THEN REAL_ARITH_TAC);
2663 GMATCH_SIMP_TAC REAL_LE_MUL;
2665 GMATCH_SIMP_TAC SQRT_POS_LE;
2666 BY(FIRST_X_ASSUM (unlist REWRITE_TAC));
2667 INTRO_TAC ((* Appendix. *) get_main_nonlinear "5202826650 a") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
2668 REWRITE_TAC[Sphere.ineq;Sphere.y_of_x];
2669 REWRITE_TAC[TAUT `a ==> b ==> c <=> (a /\ b ==> c)`];
2671 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab;Sphere.h0] THEN REAL_ARITH_TAC);
2672 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC)
2676 (* was sqrt2_bounds *)
2678 let sqrt8_bounds = prove_by_refinement(
2679 `sqrt8 <= #3.01 /\ &2 <= sqrt8 /\ sqrt8 <= #3.62`,
2682 INTRO_TAC Flyspeck_constants.bounds [];
2687 (* renamed from terminal_std_tri_OMKYNLT_3336871894_empty *)
2690 let empty_3T2 = prove_by_refinement(
2691 `main_nonlinear_terminal_v11 ==>
2692 (let s = mk_unadorned_v39 3 (&0) (funlist_v39 [] (&2) 3) (funlist_v39 [] (&2) 3) in
2693 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
2696 REPEAT WEAKER_STRIP_TAC;
2697 MATCH_MP_TAC taustar_taum;
2698 REWRITE_TAC[FUNLIST_EXPLICIT];
2699 REWRITE_TAC[Appendix.cstab;arith `&2 <= &2 /\ &2 <= #3.01 /\ &2 <= #3.62`];
2700 REPEAT WEAKER_STRIP_TAC;
2701 INTRO_TAC ((* Appendix. *) get_main_nonlinear "OMKYNLT 3336871894") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
2702 REWRITE_TAC[Sphere.ineq;arith `x >= #0.0 <=> &0 <= x`];
2703 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2708 let empty_3T2 = prove_by_refinement(
2709 `main_nonlinear_terminal_v11 ==>
2710 (let s = scs_3T2 in (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
2713 REWRITE_TAC[Appendix.scs_3T2];
2714 REPEAT WEAKER_STRIP_TAC;
2715 MATCH_MP_TAC taustar_taum;
2716 REWRITE_TAC[FUNLIST_EXPLICIT];
2717 REWRITE_TAC[Appendix.cstab;arith `&2 <= &2 /\ &2 <= #3.01 /\ &2 <= #3.62`];
2718 REPEAT WEAKER_STRIP_TAC;
2719 INTRO_TAC ( get_main_nonlinear "OMKYNLT 3336871894") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
2720 REWRITE_TAC[Sphere.ineq;arith `x >= #0.0 <=> &0 <= x`];
2721 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2726 (* renamed from terminal_std_tri_4010906068_empty *)
2727 let empty_3T3 = prove_by_refinement(
2728 `main_nonlinear_terminal_v11 ==>
2729 (let s = mk_unadorned_v39 3
2731 (funlist_v39 [] (&2*h0) 3)
2732 (funlist_v39 [] (cstab) 3) in
2733 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
2736 REPEAT WEAKER_STRIP_TAC;
2737 MATCH_MP_TAC taustar_taum;
2738 REWRITE_TAC[FUNLIST_EXPLICIT];
2739 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
2740 REWRITE_TAC[sqrt8_bounds];
2741 REPEAT WEAKER_STRIP_TAC;
2742 INTRO_TAC ((* Appendix. *) get_main_nonlinear "4010906068") [`y1`;`y3`;`y2`;`y4`;`y6`;`y5`];
2743 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
2744 TYPIFY `taum y1 y3 y2 y4 y6 y5 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
2745 BY(MESON_TAC[taum_sym]);
2746 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2750 let empty_3T3 = prove_by_refinement(
2751 `main_nonlinear_terminal_v11 ==>
2752 (let s = scs_3T3 in (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
2755 REWRITE_TAC[Appendix.scs_3T3];
2756 REPEAT WEAKER_STRIP_TAC;
2757 MATCH_MP_TAC taustar_taum;
2758 REWRITE_TAC[FUNLIST_EXPLICIT];
2759 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
2760 REWRITE_TAC[sqrt8_bounds];
2761 REPEAT WEAKER_STRIP_TAC;
2762 INTRO_TAC ((* Appendix. *) get_main_nonlinear "4010906068") [`y1`;`y3`;`y2`;`y4`;`y6`;`y5`];
2763 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
2764 TYPIFY `taum y1 y3 y2 y4 y6 y5 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
2765 BY(MESON_TAC[taum_sym]);
2766 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2770 (* renamed from terminal_std_tri_6833979866_empty *)
2771 let empty_3T4 = prove_by_refinement(
2772 `main_nonlinear_terminal_v11 ==>
2777 //(funlist_v39 [(0,1),(&2)] (&2*h0) 3)
2778 //(funlist_v39 [(0,1),(&2 * h0)] (cstab) 3) in
2779 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
2782 REWRITE_TAC[Appendix.scs_3T4];
2783 REPEAT WEAKER_STRIP_TAC;
2784 MATCH_MP_TAC taustar_taum;
2785 REWRITE_TAC[FUNLIST_EXPLICIT];
2786 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
2787 REWRITE_TAC[sqrt8_bounds];
2788 REPEAT WEAKER_STRIP_TAC;
2789 INTRO_TAC ((* Appendix. *) get_main_nonlinear "6833979866") [`y3`;`y1`;`y2`;`y6`;`y4`;`y5`];
2790 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
2791 TYPIFY `taum y3 y1 y2 y6 y4 y5 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
2792 BY(MESON_TAC[taum_sym]);
2793 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2797 (* renamed from terminal_std_tri_5541487347_empty *)
2798 let empty_3T5 = prove_by_refinement(
2799 `main_nonlinear_terminal_v11 ==>
2804 //(funlist_v39 [(0,1),(&2 * h0)] (&2) 3)
2805 //(funlist_v39 [(0,1),(sqrt8)] (&2 * h0) 3) in
2806 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
2809 REWRITE_TAC[Appendix.scs_3T5];
2810 REPEAT WEAKER_STRIP_TAC;
2811 MATCH_MP_TAC taustar_taum;
2812 REWRITE_TAC[FUNLIST_EXPLICIT];
2813 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
2814 REWRITE_TAC[sqrt8_bounds];
2815 REPEAT WEAKER_STRIP_TAC;
2816 INTRO_TAC ((* Appendix. *) get_main_nonlinear "5541487347") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
2817 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
2818 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2823 let terminal_std_tri_4528012043_empty = prove_by_refinement(
2824 `main_nonlinear_terminal_v11 ==>
2825 (let s = mk_unadorned_v39 3 (tame_table_d 0 3 + #3.0 * (tame_table_d 2 1 - #0.11))
2826 (funlist_v39 [] cstab 3)
2827 (funlist_v39 [] cstab 3) in
2828 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
2831 REPEAT WEAKER_STRIP_TAC;
2832 MATCH_MP_TAC taustar_taum;
2833 REWRITE_TAC[FUNLIST_EXPLICIT];
2834 REWRITE_TAC[Appendix.cstab;arith `x <= x /\ &2 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62`];
2835 REPEAT WEAKER_STRIP_TAC;
2836 INTRO_TAC ((* Appendix. *) get_main_nonlinear "4528012043") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
2837 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
2838 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2842 let terminal_std_tri_7459553847_empty = prove_by_refinement(
2843 `main_nonlinear_terminal_v11 ==>
2844 (let s = mk_unadorned_v39 3
2845 (tame_table_d 0 3 + #3.0 * (tame_table_d 2 1 - #0.11))
2846 (funlist_v39 [(0,1),&2 * h0] cstab 3)
2847 (funlist_v39 [(0,1),&2 * h0] cstab 3) in
2848 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
2851 REPEAT WEAKER_STRIP_TAC;
2852 MATCH_MP_TAC taustar_taum;
2853 REWRITE_TAC[FUNLIST_EXPLICIT];
2854 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
2855 REPEAT WEAKER_STRIP_TAC;
2856 INTRO_TAC ((* Appendix. *) get_main_nonlinear "7459553847") [`y3`;`y2`;`y1`;`y6`;`y5`;`y4`];
2857 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
2858 TYPIFY `taum y3 y2 y1 y6 y5 y4 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
2859 BY(MESON_TAC[taum_sym]);
2860 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2864 let terminal_std_tri_4143829594_empty = prove_by_refinement(
2865 `main_nonlinear_terminal_v11 ==>
2866 (let s = mk_unadorned_v39 3
2867 (tame_table_d 0 3 + #3.0 * (tame_table_d 2 1 - #0.11))
2868 (funlist_v39 [(0,1),cstab] (&2 * h0) 3)
2869 (funlist_v39 [(0,1),cstab] (&2 * h0) 3) in
2870 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
2873 REPEAT WEAKER_STRIP_TAC;
2874 MATCH_MP_TAC taustar_taum;
2875 REWRITE_TAC[FUNLIST_EXPLICIT];
2876 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
2877 REPEAT WEAKER_STRIP_TAC;
2878 INTRO_TAC ((* Appendix. *) get_main_nonlinear "4143829594") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
2879 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
2880 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2884 let terminal_std_tri_1080462150_empty = prove_by_refinement(
2885 `main_nonlinear_terminal_v11 ==>
2886 (let s = mk_unadorned_v39 3
2887 (tame_table_d 0 3 + #3.0 * (tame_table_d 2 1 - #0.11))
2888 (funlist_v39 [] (&2 * h0) 3)
2889 (funlist_v39 [] (&2 * h0) 3) in
2890 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
2893 REPEAT WEAKER_STRIP_TAC;
2894 MATCH_MP_TAC taustar_taum;
2895 REWRITE_TAC[FUNLIST_EXPLICIT];
2896 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
2897 REPEAT WEAKER_STRIP_TAC;
2898 INTRO_TAC ((* Appendix. *) get_main_nonlinear "1080462150") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
2899 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
2900 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2904 let terminal_std_tri_9816718044_empty = prove_by_refinement(
2905 `main_nonlinear_terminal_v11 ==>
2906 (let s = mk_unadorned_v39 3
2907 (tame_table_d 1 2 + #2.0 * (tame_table_d 2 1 - #0.11))
2908 (funlist_v39 [(0,1),&2] cstab 3)
2909 (funlist_v39 [(0,1),&2] cstab 3) in
2910 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
2913 REPEAT WEAKER_STRIP_TAC;
2914 MATCH_MP_TAC taustar_taum;
2915 REWRITE_TAC[FUNLIST_EXPLICIT];
2916 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
2917 REPEAT WEAKER_STRIP_TAC;
2918 INTRO_TAC ((* Appendix. *) get_main_nonlinear "9816718044") [`y3`;`y2`;`y1`;`y6`;`y5`;`y4`];
2919 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
2920 TYPIFY `taum y3 y2 y1 y6 y5 y4 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
2921 BY(MESON_TAC[taum_sym]);
2922 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2926 let terminal_std_tri_3106201101_empty = prove_by_refinement(
2927 `main_nonlinear_terminal_v11 ==>
2928 (let s = mk_unadorned_v39 3
2929 (tame_table_d 1 2 + #2.0 * (tame_table_d 2 1 - #0.11))
2930 (funlist_v39 [(0,1),&2; (0,2),cstab] sqrt8 3)
2931 (funlist_v39 [(0,1),&2; (0,2),cstab] sqrt8 3) in
2932 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
2935 REPEAT WEAKER_STRIP_TAC;
2936 MATCH_MP_TAC taustar_taum;
2937 REWRITE_TAC[FUNLIST_EXPLICIT];
2938 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
2939 REWRITE_TAC[sqrt8_bounds];
2940 REPEAT WEAKER_STRIP_TAC;
2941 INTRO_TAC ((* Appendix. *) get_main_nonlinear "3106201101") [`y3`;`y1`;`y2`;`y6`;`y4`;`y5`];
2942 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
2943 TYPIFY `taum y3 y1 y2 y6 y4 y5 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
2944 BY(MESON_TAC[taum_sym]);
2945 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2949 let terminal_std_tri_2200527225_empty = prove_by_refinement(
2950 `main_nonlinear_terminal_v11 ==>
2951 (let s = mk_unadorned_v39 3
2952 (tame_table_d 1 2 + #2.0 * (tame_table_d 2 1 - #0.11))
2953 (funlist_v39 [(0,1),&2] sqrt8 3)
2954 (funlist_v39 [(0,1),&2] sqrt8 3) in
2955 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
2958 REPEAT WEAKER_STRIP_TAC;
2959 MATCH_MP_TAC taustar_taum;
2960 REWRITE_TAC[FUNLIST_EXPLICIT];
2961 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
2962 REWRITE_TAC[sqrt8_bounds];
2963 REPEAT WEAKER_STRIP_TAC;
2964 INTRO_TAC ((* Appendix. *) get_main_nonlinear "2200527225") [`y3`;`y1`;`y2`;`y6`;`y4`;`y5`];
2965 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
2966 TYPIFY `taum y3 y1 y2 y6 y4 y5 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
2967 BY(MESON_TAC[taum_sym]);
2968 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2972 let terminal_std_tri_2900061606_empty = prove_by_refinement(
2973 `main_nonlinear_terminal_v11 ==>
2974 (let s = mk_unadorned_v39 3 (tame_table_d 1 2 + tame_table_d 2 1 - #0.11)
2975 (funlist_v39 [(0,1),&2 * h0; (0,2),cstab] (&2) 3)
2976 (funlist_v39 [(0,1),&2 * h0; (0,2),cstab] (&2) 3) in
2977 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
2980 REPEAT WEAKER_STRIP_TAC;
2981 MATCH_MP_TAC taustar_taum;
2982 REWRITE_TAC[FUNLIST_EXPLICIT];
2983 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
2984 REPEAT WEAKER_STRIP_TAC;
2985 INTRO_TAC ((* Appendix. *) get_main_nonlinear "2900061606") [`y1`;`y3`;`y2`;`y4`;`y6`;`y5`];
2986 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
2987 TYPIFY `taum y1 y3 y2 y4 y6 y5 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
2988 BY(MESON_TAC[taum_sym]);
2989 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2993 let terminal_std_tri_7097350062a_empty = prove_by_refinement(
2994 `main_nonlinear_terminal_v11 ==>
2995 (let s = mk_unadorned_v39 3 (tame_table_d 1 2)
2996 (funlist_v39 [(0,1),&2 * h0; (0,2),sqrt8] (&2) 3)
2997 (funlist_v39 [(0,1),&2 * h0; (0,2),sqrt8] (&2) 3) in
2998 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3001 REPEAT WEAKER_STRIP_TAC;
3002 MATCH_MP_TAC taustar_taum;
3003 REWRITE_TAC[FUNLIST_EXPLICIT];
3004 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
3005 REWRITE_TAC[sqrt8_bounds];
3006 REPEAT WEAKER_STRIP_TAC;
3007 INTRO_TAC ((* Appendix. *) get_main_nonlinear "7097350062a") [`y1`;`y3`;`y2`;`y4`;`y6`;`y5`];
3008 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
3009 TYPIFY `taum y1 y3 y2 y4 y6 y5 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3010 BY(MESON_TAC[taum_sym]);
3011 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3015 let terminal_std_tri_OMKYNLT_1_2_empty = prove_by_refinement(
3016 `main_nonlinear_terminal_v11 ==>
3017 (let s = mk_unadorned_v39 3 (tame_table_d 1 2) (funlist_v39 [(0,1),&2] (&2 * h0) 3)
3018 (funlist_v39 [(0,1),&2] (&2 * h0) 3) in
3019 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3022 REPEAT WEAKER_STRIP_TAC;
3023 MATCH_MP_TAC taustar_taum;
3024 REWRITE_TAC[FUNLIST_EXPLICIT];
3025 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
3026 REWRITE_TAC[sqrt8_bounds];
3027 REPEAT WEAKER_STRIP_TAC;
3028 INTRO_TAC ((* Appendix. *) get_main_nonlinear "OMKYNLT 1 2") [`y3`;`y2`;`y1`;`y6`;`y5`;`y4`];
3029 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
3030 TYPIFY `taum y3 y2 y1 y6 y5 y4 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3031 BY(MESON_TAC[taum_sym]);
3032 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3036 let terminal_std_tri_7645170609_empty = prove_by_refinement(
3037 `main_nonlinear_terminal_v11 ==>
3038 (let s = mk_unadorned_v39 3 (tame_table_d 2 1) (funlist_v39 [(0,1),sqrt8] (&2) 3)
3039 (funlist_v39 [(0,1),sqrt8] (&2) 3) in
3040 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3043 REPEAT WEAKER_STRIP_TAC;
3044 MATCH_MP_TAC taustar_taum;
3045 REWRITE_TAC[FUNLIST_EXPLICIT];
3046 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
3047 REWRITE_TAC[sqrt8_bounds];
3048 REPEAT WEAKER_STRIP_TAC;
3049 INTRO_TAC ((* Appendix. *) get_main_nonlinear "7645170609") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
3050 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
3051 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3055 let terminal_std_tri_OMKYNLT_2_1_empty = prove_by_refinement(
3056 `main_nonlinear_terminal_v11 ==>
3057 (let s = mk_unadorned_v39 3 (tame_table_d 2 1) (funlist_v39 [(0,1),&2 * h0] (&2) 3)
3058 (funlist_v39 [(0,1),&2 * h0] (&2) 3) in
3059 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3062 REPEAT WEAKER_STRIP_TAC;
3063 MATCH_MP_TAC taustar_taum;
3064 REWRITE_TAC[FUNLIST_EXPLICIT];
3065 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
3066 REWRITE_TAC[sqrt8_bounds];
3067 REPEAT WEAKER_STRIP_TAC;
3068 INTRO_TAC ((* Appendix. *) get_main_nonlinear "OMKYNLT 2 1") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
3069 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
3070 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3075 let terminal_std_tri_7881254908_empty = prove_by_refinement(
3076 `main_nonlinear_terminal_v11 ==>
3077 (let s = mk_unadorned_v39 3 ( #0.696 - #2.0 * #0.11)
3078 (funlist_v39 [(0,1),sqrt8; (1,2),sqrt8] (&2 * h0) 3)
3079 (funlist_v39 [(0,1),cstab; (1,2),cstab] (&2 * h0) 3) in
3080 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3083 REPEAT WEAKER_STRIP_TAC;
3084 MATCH_MP_TAC taustar_taum;
3085 REWRITE_TAC[FUNLIST_EXPLICIT];
3086 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
3087 REWRITE_TAC[sqrt8_bounds];
3088 REPEAT WEAKER_STRIP_TAC;
3089 INTRO_TAC ((* Appendix. *) get_main_nonlinear "7881254908") [`y2`;`y1`;`y3`;`y5`;`y4`;`y6`];
3090 TYPIFY `taum y2 y1 y3 y5 y4 y6 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3091 BY(MESON_TAC[taum_sym]);
3092 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`];
3093 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3097 (* renamed from terminal_std_tri_5026777310a_empty *)
3098 let empty_3T6 = prove_by_refinement(
3099 `main_nonlinear_terminal_v11 ==>
3100 (let s = scs_3T6' in
3101 //mk_unadorned_v39 3 ( #0.6548 - #2.0 * #0.11)
3102 //(funlist_v39 [(0,1),sqrt8; (1,2),sqrt8] (&2) 3)
3103 //(funlist_v39 [(0,1),cstab; (1,2),cstab] (&2 * h0) 3) in
3104 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3107 REWRITE_TAC[Appendix.scs_3T6];
3108 REPEAT WEAKER_STRIP_TAC;
3109 MATCH_MP_TAC taustar_taum;
3110 REWRITE_TAC[FUNLIST_EXPLICIT];
3111 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62`];
3112 REWRITE_TAC[sqrt8_bounds];
3113 REPEAT WEAKER_STRIP_TAC;
3114 INTRO_TAC ((* Appendix. *) get_main_nonlinear "5026777310a") [`y3`;`y1`;`y2`;`y6`;`y4`;`y5`];
3115 TYPIFY `taum y3 y1 y2 y6 y4 y5 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3116 BY(MESON_TAC[taum_sym]);
3117 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`;Sphere.tame_table_d];
3118 REWRITE_TAC[arith `4 + 2 * 1 > 3`];
3119 TYPIFY `delta_y y3 y1 y2 y6 y4 y5 = delta_y y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN ASSUME_TAC);
3120 BY(MESON_TAC[Merge_ineq.delta_y_sym]);
3121 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3125 (* deprecated 2013-06-17
3126 let terminal_std_tri_7720405539_empty = prove_by_refinement(
3127 `main_nonlinear_terminal_v11 ==>
3128 (let s = mk_unadorned_v39 3 ( #0.5518 / #2.0 - #0.2)
3129 (funlist_v39 [(0,1),cstab; (0,2),&2 * h0; (1,2),&2] (&2) 3)
3130 (funlist_v39 [(0,1), #3.41; (0,2),&2 * h0; (1,2),&2] (&2) 3) in
3131 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3134 REPEAT WEAKER_STRIP_TAC;
3135 MATCH_MP_TAC taustar_taum;
3136 REWRITE_TAC[FUNLIST_EXPLICIT];
3137 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62 /\ #3.41 <= #3.62`];
3138 REWRITE_TAC[sqrt8_bounds];
3139 REPEAT WEAKER_STRIP_TAC;
3140 INTRO_TAC ((* Appendix. *) get_main_nonlinear "7720405539") [`y3`;`y2`;`y1`;`y6`;`y5`;`y4`];
3141 TYPIFY `taum y3 y2 y1 y6 y5 y4 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3142 BY(MESON_TAC[taum_sym]);
3143 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`;Sphere.tame_table_d];
3144 REWRITE_TAC[arith `2 + 2 * 2 > 3`];
3145 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3149 let terminal_std_tri_2739661360_empty = prove_by_refinement(
3150 `main_nonlinear_terminal_v11 ==>
3151 (let s = mk_unadorned_v39 3 ( #0.5518 / #2.0 + #0.2)
3152 (funlist_v39 [(0,1),cstab; (0,2),cstab; (1,2),&2] (&2) 3)
3153 (funlist_v39 [(0,1), #3.41; (0,2),cstab; (1,2),&2] (&2) 3) in
3154 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3157 REPEAT WEAKER_STRIP_TAC;
3158 MATCH_MP_TAC taustar_taum;
3159 REWRITE_TAC[FUNLIST_EXPLICIT];
3160 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62 /\ #3.41 <= #3.62`];
3161 REWRITE_TAC[sqrt8_bounds];
3162 REPEAT WEAKER_STRIP_TAC;
3163 INTRO_TAC ((* Appendix. *) get_main_nonlinear "2739661360") [`y3`;`y2`;`y1`;`y6`;`y5`;`y4`];
3164 TYPIFY `taum y3 y2 y1 y6 y5 y4 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3165 BY(MESON_TAC[taum_sym]);
3166 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`;Sphere.tame_table_d];
3167 REWRITE_TAC[arith `2 + 2 * 2 > 3`];
3168 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3172 let terminal_std_tri_4922521904_empty = prove_by_refinement(
3173 `main_nonlinear_terminal_v11 ==>
3174 (let s = mk_unadorned_v39 3 ( #0.5518 / #2.0)
3175 (funlist_v39 [(0,1),cstab; (0,2),&2 * h0; (1,2),&2] (&2) 3)
3176 (funlist_v39 [(0,1), #3.339; (0,2),&2 * h0; (1,2),&2] (&2) 3) in
3177 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3180 REPEAT WEAKER_STRIP_TAC;
3181 MATCH_MP_TAC taustar_taum;
3182 REWRITE_TAC[FUNLIST_EXPLICIT];
3183 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62 /\ #3.41 <= #3.62 /\ #3.339 <= #3.62`];
3184 REWRITE_TAC[sqrt8_bounds];
3185 REPEAT WEAKER_STRIP_TAC;
3186 INTRO_TAC ((* Appendix. *) get_main_nonlinear "4922521904") [`y3`;`y2`;`y1`;`y6`;`y5`;`y4`];
3187 TYPIFY `taum y3 y2 y1 y6 y5 y4 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3188 BY(MESON_TAC[taum_sym]);
3189 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`;Sphere.tame_table_d];
3190 REWRITE_TAC[arith `2 + 2 * 2 > 3`];
3191 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3196 (* renamed from terminal_std_tri_2468307358_empty *)
3197 let empty_3T7 = prove_by_refinement(
3198 `main_nonlinear_terminal_v11 ==>
3200 // mk_unadorned_v39 3 ( #0.2565)
3201 // (funlist_v39 [(0,1),cstab; (0,2),cstab; (1,2),&2] (&2) 3)
3202 // (funlist_v39 [(0,1), #3.62; (0,2),cstab; (1,2),&2] (&2) 3) in
3203 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3206 REWRITE_TAC[Appendix.scs_3T7];
3207 REPEAT WEAKER_STRIP_TAC;
3208 MATCH_MP_TAC taustar_taum;
3209 REWRITE_TAC[FUNLIST_EXPLICIT];
3210 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62 /\ #3.41 <= #3.62`];
3211 REWRITE_TAC[sqrt8_bounds];
3212 REPEAT WEAKER_STRIP_TAC;
3213 INTRO_TAC ((* Appendix. *) get_main_nonlinear "2468307358") [`y3`;`y2`;`y1`;`y6`;`y5`;`y4`];
3214 (* INTRO_TAC ((* Appendix. *) get_main_nonlinear "2739661360") [`y3`;`y2`;`y1`;`y6`;`y5`;`y4`]; edited 2013-06-17. *)
3215 TYPIFY `taum y3 y2 y1 y6 y5 y4 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3216 BY(MESON_TAC[taum_sym]);
3217 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`;Sphere.tame_table_d];
3218 REWRITE_TAC[arith `2 + 2 * 2 > 3`];
3219 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3223 let terminal_std_tri_ear_stab_empty = prove_by_refinement(
3224 `main_nonlinear_terminal_v11 ==>
3226 mk_unadorned_v39 3 #0.11 (funlist_v39 [(0,2),cstab] (&2) 3)
3227 (funlist_v39 [(0,2),cstab] (&2 * h0) 3) in
3228 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3231 REPEAT WEAKER_STRIP_TAC;
3232 MATCH_MP_TAC taustar_taum;
3233 REWRITE_TAC[FUNLIST_EXPLICIT];
3234 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62 /\ #3.41 <= #3.62 /\ #3.339 <= #3.62`];
3235 REWRITE_TAC[sqrt8_bounds];
3236 REPEAT WEAKER_STRIP_TAC;
3237 INTRO_TAC ((* Appendix. *) get_main_nonlinear "3603097872") [`y2`;`y1`;`y3`;`y5`;`y4`;`y6`];
3238 TYPIFY `taum y2 y1 y3 y5 y4 y6 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3239 BY(MESON_TAC[taum_sym]);
3240 TYPIFY `delta_y y2 y1 y3 y5 y4 y6 = delta_y y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN ASSUME_TAC);
3241 BY(MESON_TAC[Merge_ineq.delta_y_sym]);
3242 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`;Sphere.tame_table_d];
3243 MP_TAC sqrt8_bounds;
3244 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3250 let terminal_std_ear_3603097872_empty = prove_by_refinement(
3251 `main_nonlinear_terminal_v11 ==>
3255 funlist_v39 [(0,1),sqrt8] (&2) 3,
3256 funlist_v39 [(0,1),sqrt8] (&2) 3,
3257 funlist_v39 [(0,1),cstab] (&2 * h0) 3,
3258 funlist_v39 [(0,1),cstab] (&2 * h0) 3,
3259 funlistA_v39 [(0,1),T] F F 3,
3262 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3266 REWRITE_TAC[LET_DEF;LET_END_DEF];
3267 MATCH_MP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] taustar_taum_dfun);
3268 REWRITE_TAC[FUNLIST_EXPLICIT];
3269 REWRITE_TAC[is_ear_3603097872];
3270 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62 /\ #3.41 <= #3.62 /\ #3.339 <= #3.62`];
3271 REWRITE_TAC[sqrt8_bounds];
3272 REPEAT WEAKER_STRIP_TAC;
3273 INTRO_TAC ((* Appendix. *) get_main_nonlinear "3603097872") [`y3`;`y2`;`y1`;`y6`;`y5`;`y4`];
3274 TYPIFY `taum y3 y2 y1 y6 y5 y4 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3275 BY(MESON_TAC[taum_sym]);
3276 TYPIFY `delta_y y3 y2 y1 y6 y5 y4 = delta_y y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN ASSUME_TAC);
3277 BY(MESON_TAC[Merge_ineq.delta_y_sym]);
3278 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`;Sphere.tame_table_d];
3279 MP_TAC sqrt8_bounds;
3280 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3285 let terminal_std_ear_jnull_empty = prove_by_refinement(
3286 `main_nonlinear_terminal_v11 ==>
3290 funlist_v39 [(0,1),sqrt8] (&2) 3,
3291 funlist_v39 [(0,1),sqrt8] (&2) 3,
3292 funlist_v39 [(0,1),cstab] (&2 * h0) 3,
3293 funlist_v39 [(0,1),cstab] (&2 * h0) 3,
3297 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3301 REWRITE_TAC[LET_DEF;LET_END_DEF];
3302 MATCH_MP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] taustar_taum_dfun);
3303 REWRITE_TAC[FUNLIST_EXPLICIT];
3304 REWRITE_TAC[Appendix.is_ear_v39;Appendix.scs_v39_explicit;EMPTY_GSPEC;NOT_INSERT_EMPTY];
3305 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62 /\ #3.41 <= #3.62 /\ #3.339 <= #3.62`];
3306 REWRITE_TAC[sqrt8_bounds];
3307 REPEAT WEAKER_STRIP_TAC;
3308 INTRO_TAC ((* Appendix. *) get_main_nonlinear "3603097872") [`y3`;`y2`;`y1`;`y6`;`y5`;`y4`];
3309 TYPIFY `taum y3 y2 y1 y6 y5 y4 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3310 BY(MESON_TAC[taum_sym]);
3311 TYPIFY `delta_y y3 y2 y1 y6 y5 y4 = delta_y y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN ASSUME_TAC);
3312 BY(MESON_TAC[Merge_ineq.delta_y_sym]);
3313 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`;Sphere.tame_table_d];
3314 MP_TAC sqrt8_bounds;
3315 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3321 let empty_3T1 = prove_by_refinement(
3322 `main_nonlinear_terminal_v11 ==>
3324 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3327 REWRITE_TAC[Appendix.scs_3T1;Appendix.mk_unadorned_v39];
3329 REWRITE_TAC[LET_DEF;LET_END_DEF];
3330 MATCH_MP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] taustar_taum_dfun);
3331 REWRITE_TAC[FUNLIST_EXPLICIT];
3332 REWRITE_TAC[Appendix.is_ear_v39;Appendix.scs_v39_explicit;EMPTY_GSPEC;NOT_INSERT_EMPTY];
3333 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62 /\ #3.41 <= #3.62 /\ #3.339 <= #3.62`];
3334 REWRITE_TAC[sqrt8_bounds];
3335 REPEAT WEAKER_STRIP_TAC;
3336 INTRO_TAC ((* Appendix. *) get_main_nonlinear "3603097872") [`y3`;`y2`;`y1`;`y6`;`y5`;`y4`];
3337 TYPIFY `taum y3 y2 y1 y6 y5 y4 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3338 BY(MESON_TAC[taum_sym]);
3339 TYPIFY `delta_y y3 y2 y1 y6 y5 y4 = delta_y y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN ASSUME_TAC);
3340 BY(MESON_TAC[Merge_ineq.delta_y_sym]);
3341 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`;Sphere.tame_table_d];
3342 MP_TAC sqrt8_bounds;
3343 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3347 let terminal_tri_5405130650_empty = prove_by_refinement(
3348 `main_nonlinear_terminal_v11 ==>
3349 (let s = scs_v39 (3,
3351 funlist_v39 [(0,1),sqrt8; (0,2),&2 * h0; (1,2),&2] (&2) 3,
3352 funlist_v39 [(0,1),sqrt8; (0,2),&2 * h0; (1,2),&2] (&2) 3,
3353 funlist_v39 [(0,1),cstab; (0,2),sqrt8; (1,2),&2 * h0] (&2 * h0) 3,
3354 funlist_v39 [(0,1),cstab; (0,2),sqrt8; (1,2),&2 * h0] (&2 * h0) 3,
3355 funlistA_v39 [(0,1),T] F F 3,
3358 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3362 REWRITE_TAC[LET_DEF;LET_END_DEF];
3363 MATCH_MP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] taustar_taum_dfun);
3364 REWRITE_TAC[FUNLIST_EXPLICIT];
3365 REWRITE_TAC[Appendix.is_ear_v39;Appendix.scs_v39_explicit;arith `~(#0.477 - #0.11 = #0.11)`];
3366 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62 /\ #3.41 <= #3.62 /\ #3.339 <= #3.62`];
3367 REWRITE_TAC[sqrt8_bounds];
3368 REPEAT WEAKER_STRIP_TAC;
3369 INTRO_TAC ((* Appendix. *) get_main_nonlinear "5405130650") [`y3`;`y2`;`y1`;`y6`;`y5`;`y4`];
3370 TYPIFY `taum y3 y2 y1 y6 y5 y4 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3371 BY(MESON_TAC[taum_sym]);
3372 TYPIFY `delta_y y3 y2 y1 y6 y5 y4 = delta_y y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN ASSUME_TAC);
3373 BY(MESON_TAC[Merge_ineq.delta_y_sym]);
3374 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`;Sphere.tame_table_d];
3375 MP_TAC sqrt8_bounds;
3376 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3381 let terminal_tri_5766053833_empty = prove_by_refinement(
3382 `main_nonlinear_terminal_v11 ==>
3383 (let s = scs_v39 (3,
3384 #0.696 - #2.0 * #0.11,
3385 funlist_v39 [(0,1),sqrt8; (1,2),sqrt8] (&2) 3,
3386 funlist_v39 [(0,1),sqrt8; (1,2),sqrt8] (&2) 3,
3387 funlist_v39 [(0,1),cstab; (1,2),cstab] (&2) 3,
3388 funlist_v39 [(0,1),cstab; (1,2),cstab] (&2) 3,
3389 funlistA_v39 [(0,1),T; (1,2),T] F F 3,
3392 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3396 REWRITE_TAC[LET_DEF;LET_END_DEF];
3397 MATCH_MP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] taustar_taum_dfun);
3398 REWRITE_TAC[FUNLIST_EXPLICIT];
3399 REWRITE_TAC[Appendix.is_ear_v39;Appendix.scs_v39_explicit;arith `~(#0.696 - #2.0* #0.11 = #0.11)`];
3400 REWRITE_TAC[Appendix.cstab;Sphere.h0;arith `x <= x /\ &2 <= #3.01 /\ &2 <= &2 * #1.26 /\ &2 * #1.26 <= #3.01 /\ &2 <= #3.62 /\ #3.01 <= #3.62 /\ &2 * #1.26 <= #3.62 /\ #3.41 <= #3.62 /\ #3.339 <= #3.62`];
3401 REWRITE_TAC[sqrt8_bounds];
3402 REPEAT WEAKER_STRIP_TAC;
3403 INTRO_TAC ((* Appendix. *) get_main_nonlinear "5766053833") [`y2`;`y1`;`y3`;`y5`;`y4`;`y6`];
3404 TYPIFY `taum y2 y1 y3 y5 y4 y6 = taum y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3405 BY(MESON_TAC[taum_sym]);
3406 TYPIFY `delta_y y2 y1 y3 y5 y4 y6 = delta_y y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN ASSUME_TAC);
3407 BY(MESON_TAC[Merge_ineq.delta_y_sym]);
3408 REWRITE_TAC[Sphere.ineq;arith `x >= y <=> y <= x`;arith `x > y <=> y < x`;Sphere.tame_table_d];
3409 MP_TAC sqrt8_bounds;
3410 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3415 (* ************************************************************************** *)
3416 (* START OF QUAD CASES *)
3417 (* ************************************************************************** *)
3419 (* renamed from terminal__adhoc_quad_5691615370_empty *)
3420 let empty_4T1 = prove_by_refinement(
3421 `main_nonlinear_terminal_v11 ==>
3423 //mk_unadorned_v39 4 #0.467 (cs_adj 4 (&2) (&3)) (cs_adj 4 (&2) (&6)) in
3424 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))` ,
3427 REWRITE_TAC[Appendix.scs_4T1];
3429 REWRITE_TAC[LET_DEF;LET_END_DEF];
3430 REWRITE_TAC[Appendix.BBs_v39;Appendix.mk_unadorned_v39;Appendix.cs_adj;Appendix.scs_v39_explicit];
3431 REWRITE_TAC[LET_DEF;LET_END_DEF;arith `~(4 <= 3)`];
3432 REPEAT WEAKER_STRIP_TAC;
3434 REPLICATE_TAC 2 (FIRST_X_ASSUM kill);
3435 ASSUME_TAC MOD_4_EXPLICIT;
3436 ASSUME_TAC (arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3 /\ SUC 3 = 4`);
3437 FIRST_ASSUM (C INTRO_TAC [`0`;`1`]);
3438 FIRST_ASSUM (C INTRO_TAC [`0`;`2`]);
3439 FIRST_ASSUM (C INTRO_TAC [`0`;`3`]);
3440 FIRST_ASSUM (C INTRO_TAC [`1`;`2`]);
3441 FIRST_ASSUM (C INTRO_TAC [`1`;`3`]);
3442 FIRST_X_ASSUM (C INTRO_TAC [`2`;`3`]);
3443 ASM_REWRITE_TAC[arith `~(1 = 3) /\ ~(2 = 3) /\ ~(1 = 2) /\ ~(0 = 1) /\ ~(0=2) /\ ~(0=3)`];
3444 REPEAT WEAKER_STRIP_TAC;
3445 TYPIFY `dist(vv 2,vv 3) = &2 /\ dist(vv 1,vv 2) = &2 /\ dist(vv 0, vv 3) = &2 /\ dist(vv 0,vv 1) = &2` (C SUBGOAL_THEN ASSUME_TAC);
3446 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
3447 INTRO_TAC DELTA_Y_POS_4POINTS [`vv 0 `;`vv 1`;`vv 2`;`vv 3`];
3448 ASM_REWRITE_TAC[Sphere.delta_y;Sphere.delta_x];
3449 TYPIFY `&9 <= dist(vv 1, vv 3) * dist(vv 1, vv 3) /\ &9 <= dist(vv 0 , vv 2) * dist(vv 0,vv 2)` (C SUBGOAL_THEN ASSUME_TAC);
3450 REWRITE_TAC[arith `&9 = &3 * &3`];
3451 GMATCH_SIMP_TAC Misc_defs_and_lemmas.ABS_SQUARE_LE;
3452 GMATCH_SIMP_TAC Misc_defs_and_lemmas.ABS_SQUARE_LE;
3453 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
3454 TYPED_ABBREV_TAC `y2 = dist(vv 1,vv 3) * dist(vv 1,vv 3)` ;
3455 TYPED_ABBREV_TAC `z2 = dist(vv 0,vv 2) * dist(vv 0,vv 2)` ;
3456 REWRITE_TAC[arith `&2 * &2 = &4`];
3457 REWRITE_TAC[arith `&4 * &4 * (-- &4 + z2 + &4 - &4 + y2 + &4) + z2 * y2 * (&4 - z2 + &4 + &4 - y2 + &4) + &4 * &4 * (&4 + z2 - &4 + &4 + y2 - &4) - z2 * &4 * &4 - &4 * &4 * y2 - &4 * z2 * &4 - &4 * y2 * &4 = -- ( y2 *z2 *( y2 + z2 - &16))`];
3458 REWRITE_TAC[arith `~(&0 <= -- x ) <=> (&0 < x)`];
3459 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
3460 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
3461 BY(REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC)
3465 let ineq_5691615370_asym = prove_by_refinement(
3466 `main_nonlinear_terminal_v11 ==> (!y1 y2 y3 y4 y5 y6. ineq
3475 ((delta_y y1 y2 y3 y4 y5 y6 < &0) \/ (y2 + y3 + y5 + y6 > #8.472)))`,
3479 ONCE_REWRITE_TAC[MESON[] `(!y1 y2 y3 y4 y5 y6. P y1 y2 y3 y4 y5 y6) <=> (! y2 y3 y5 y6 y1 y4. P y1 y2 y3 y4 y5 y6)`];
3480 MATCH_MP_TAC REAL_WLOG_SQUARE2_LEMMA;
3482 REWRITE_TAC[Sphere.ineq];
3483 REPEAT WEAKER_STRIP_TAC;
3484 TYPIFY `y2' + y5 + y6 + y2 = y2 + y2' + y5 + y6` (C SUBGOAL_THEN SUBST1_TAC);
3486 TYPIFY `y2 + y6 + y5 + y2' = y2 + y2' + y5 + y6` (C SUBGOAL_THEN SUBST1_TAC);
3488 TYPIFY `delta_y y4 y2' y5 y1 y6 y2 = delta_y y1 y2 y2' y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3489 BY(REWRITE_TAC[Sphere.delta_y;Sphere.delta_x] THEN REAL_ARITH_TAC);
3491 BY(REWRITE_TAC[Sphere.delta_y;Sphere.delta_x] THEN REAL_ARITH_TAC);
3492 BY(REWRITE_TAC[Sphere.delta_y;Sphere.delta_x] THEN REAL_ARITH_TAC);
3493 REPEAT WEAKER_STRIP_TAC;
3494 REWRITE_TAC[Sphere.ineq];
3495 REPEAT WEAKER_STRIP_TAC;
3496 INTRO_TAC ((* Appendix. *) get_main_nonlinear "5691615370") [`y1`;`y2`;`y2'`;`y4`;`y5`;`y6`];
3497 REWRITE_TAC[Sphere.ineq];
3498 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC)
3502 let terminal_quad_lemma = prove_by_refinement(
3503 `main_nonlinear_terminal_v11 ==>
3505 (let s = mk_unadorned_v39 4 d a b in
3506 (!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> &0 < a i j) /\
3507 (!vv. IMAGE vv (:num) SUBSET ball_annulus /\
3509 (!i j. a i j <= dist (vv i,vv j) /\ dist (vv i,vv j) <= b i j) /\
3512 IMAGE (\i. {vv i, vv (SUC i)}) (:num),
3513 IMAGE (\i. vv i,vv (SUC i)) (:num))) ==>
3515 (rho_fun (norm (vv 0)) * azim (vec 0) (vv 0) (vv 1) (vv 3) +
3516 rho_fun (norm (vv 1)) * azim (vec 0) (vv 1) (vv 2) (vv 4) +
3517 rho_fun (norm (vv 2)) * azim (vec 0) (vv 2) (vv 3) (vv 5) +
3518 rho_fun (norm (vv 3)) * azim (vec 0) (vv 3) (vv 4) (vv 6) +
3520 (pi + sol0) * (&4 - &2)
3522 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv)))` ,
3526 REWRITE_TAC[LET_THM];
3527 REWRITE_TAC[Appendix.BBs_v39;Appendix.mk_unadorned_v39;Appendix.scs_v39_explicit;Appendix.taustar_v39];
3528 REWRITE_TAC[LET_THM;arith `~(4 <= 3)`;dsv_fun4];
3529 REWRITE_TAC[arith `d - #0.1 * (&0 + &0 + &0 + &0 + &0) = d`];
3530 REPEAT WEAKER_STRIP_TAC;
3531 COMMENT "expand tau_fun";
3532 GMATCH_SIMP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] tau_fun_azim);
3533 TYPIFY `4` EXISTS_TAC;
3534 ASM_SIMP_TAC[arith `3 <= 4`];
3536 REPEAT WEAKER_STRIP_TAC;
3538 FIRST_X_ASSUM (C INTRO_TAC [`i`;`j`]);
3539 ASM_REWRITE_TAC[DIST_REFL];
3540 REWRITE_TAC[DE_MORGAN_THM;arith `~(a <= &0) <=> &0 < a`];
3541 BY(ASM_MESON_TAC[]);
3542 TYPIFY `{i | i < 4 } = {0,1,2,3}` (C SUBGOAL_THEN SUBST1_TAC);
3543 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
3545 REPEAT (GMATCH_SIMP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt);
3546 REWRITE_TAC[SUM_CLAUSES;IN_INSERT;NOT_IN_EMPTY;arith `~(2 = 3) /\ ~(0 = 1) /\ ~(0 = 2) /\ ~(0 = 3) /\ ~(1 = 2) /\ ~(1 = 3) /\ ~(1 = 2) /\ ~(1 = 3)`;FINITE_INSERT;FINITE_EMPTY];
3547 REWRITE_TAC[arith `0 + 1 = 1 /\ 1 + 1 = 2 /\ 2 + 1 = 3 /\ 3 + 1 = 4 /\ 0 + 4 -1 = 3 /\ 1 + 4 -1 = 4 /\ 2 + 4 - 1 = 5 /\ 3 + 4 - 1 = 6`];
3549 REWRITE_TAC[arith `&0 <= r - d <=> d <= r`];
3550 FIRST_X_ASSUM MATCH_MP_TAC;
3551 BY(ASM_REWRITE_TAC[])
3555 (* renamed from terminal_adhoc_quad_9563139965B_empty *)
3556 let empty_4T2 = prove_by_refinement(
3557 `main_nonlinear_terminal_v11 ==>
3558 (let s = scs_4T2 in // mk_unadorned_v39 4 #0.467 (cs_adj 4 (&2) (&3)) (cs_adj 4 (&2 * h0) (&3)) in
3559 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))`,
3562 REWRITE_TAC[Appendix.scs_4T2];
3563 REPEAT WEAKER_STRIP_TAC;
3564 REWRITE_TAC[LET_THM];
3565 MATCH_MP_TAC (REWRITE_RULE[LET_THM] (UNDISCH terminal_quad_lemma));
3566 COMMENT "digression";
3567 TYPIFY `(!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> &2 <= cs_adj 4 (&2) (&3) i j) ` (C SUBGOAL_THEN ASSUME_TAC);
3568 REWRITE_TAC[arith `i < 4 <=> (i = 0 \/ i = 1 \/ i = 2 \/ i = 3)`];
3569 REWRITE_TAC[TAUT `(a \/ b) /\ c <=> a /\ c \/ b /\ c`;TAUT `a /\ (b \/ c) <=> (a /\ b) \/ a /\ c`];
3570 REWRITE_TAC[Appendix.cs_adj];
3571 REPEAT WEAKER_STRIP_TAC;
3572 BY(REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3 /\ SUC 3 = 4`;MOD_4_EXPLICIT;arith `&2 <= &2 /\ &2 <= &3`;arith `~(0=1) /\ ~(0=2) /\ ~(0=3) /\ ~(1 =2) /\ ~(1 = 3) /\ ~(2 = 3)`] THEN ASM_MESON_TAC[]);
3574 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> cs_adj 4 (&2 * h0) (&3) i j < &4` (C SUBGOAL_THEN ASSUME_TAC);
3575 REWRITE_TAC[arith `i < 4 <=> (i = 0 \/ i = 1 \/ i = 2 \/ i = 3)`];
3576 REWRITE_TAC[TAUT `(a \/ b) /\ c <=> a /\ c \/ b /\ c`;TAUT `a /\ (b \/ c) <=> (a /\ b) \/ a /\ c`];
3577 REWRITE_TAC[Appendix.cs_adj;Sphere.h0];
3578 REPEAT WEAKER_STRIP_TAC;
3579 BY(REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3 /\ SUC 3 = 4`;MOD_4_EXPLICIT;arith `&2 * #1.26 < &4 /\ &3 < &4`;arith `~(0=1) /\ ~(0=2) /\ ~(0=3) /\ ~(1 =2) /\ ~(1 = 3) /\ ~(2 = 3)`] THEN ASM_MESON_TAC[]);
3581 BY(ASM_MESON_TAC[arith `&2 <= x ==> &0 < x`]);
3582 REPEAT WEAKER_STRIP_TAC;
3583 REWRITE_TAC[arith `x + &0 = x /\ &4 - &2 = &2`];
3584 TYPIFY `(!i j. i < 4 /\ j < 4 /\ vv i = vv j ==> i = j)` (C SUBGOAL_THEN ASSUME_TAC);
3585 REPEAT WEAKER_STRIP_TAC;
3587 BY(ASM_MESON_TAC[DIST_REFL;REAL_LE_TRANS;arith `~(&2 <= &0)`]);
3589 TYPIFY `vv 4 = vv 0 /\ vv 5 = vv 1 /\ vv 6 = vv 2` (C SUBGOAL_THEN ASSUME_TAC);
3590 BY((REPEAT CONJ_TAC) THEN GMATCH_SIMP_TAC periodic_vv_inj THEN TYPIFY `4` EXISTS_TAC THEN ASM_REWRITE_TAC[MOD_4_EXPLICIT;arith `~(4 = 0)`]);
3592 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] vv_quad_split012);
3596 TYPIFY `(!i j. ~(vv i = vv j) ==> &2 <= dist (vv i,vv j))` (C SUBGOAL_THEN ASSUME_TAC);
3597 MATCH_MP_TAC periodic2_mod_reduce;
3598 TYPIFY `4` EXISTS_TAC;
3599 REWRITE_TAC[Appendix.periodic2;arith `~(4 = 0)`];
3600 TYPIFY `!i. vv (i + 4) = vv i` (C SUBGOAL_THEN (unlist REWRITE_TAC));
3601 BY(ASM_MESON_TAC[Oxl_def.periodic;arith `~(4 = 0)`]);
3602 REPEAT WEAKER_STRIP_TAC;
3603 BY(ASM_MESON_TAC[REAL_LE_TRANS]);
3605 BY(ASM_MESON_TAC[REAL_LET_TRANS;arith `0 < 4 /\ 1 < 4 /\ 2 < 4 /\ 3 < 4 /\ ~(0=1) /\ ~(0=2) /\ ~(0=3) /\ ~(1=2) /\ ~(2 =3)`]);
3607 REPEAT WEAKER_STRIP_TAC;
3608 REPEAT (GMATCH_SIMP_TAC tau3_taum_40);
3610 RULE_ASSUM_TAC(REWRITE_RULE[IMAGE_SUBSET_IN;IN_UNIV]);
3612 TYPIFY `dist (vv 2,vv 0) < &4 /\ dist (vv 3,vv 0) < &4 ` (C SUBGOAL_THEN (unlist REWRITE_TAC));
3613 ONCE_REWRITE_TAC[DIST_SYM];
3614 BY(ASM_REWRITE_TAC[]);
3615 REWRITE_TAC[TAUT `a /\ b /\ c <=> (a /\ b) /\ c`];
3617 BY(ASM_MESON_TAC[REAL_LE_TRANS;arith `1 < 4 /\ 2 < 4 /\ 3 < 4 /\ 0 < 4 /\ ~(2=3) /\ ~(2 =0) /\ ~(3 =0) /\ ~(0 = 1) /\ ~(0=2) /\ ~(1 = 2)`]);
3618 TYPIFY `dist(vv 3,vv 0) = dist(vv 0,vv 3) /\ dist(vv 2, vv 0) = dist(vv 0,vv 2)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
3619 BY(MESON_TAC[DIST_SYM]);
3620 COMMENT "prep dist";
3621 TYPIFY `(!i j d. d <= cs_adj 4 (&2) (&3) i j ==> d <= dist (vv i,vv j)) /\ (!i j d. cs_adj 4 (&2 * h0) (&3) i j <= d ==> dist (vv i,vv j) <= d)` (C SUBGOAL_THEN MP_TAC);
3622 BY(ASM_MESON_TAC[REAL_LE_TRANS]);
3623 REPEAT WEAKER_STRIP_TAC;
3624 INTRO_TAC cs_adj4_EXPLICIT [`&2`;`&3`];
3625 INTRO_TAC cs_adj4_EXPLICIT [`&2 * h0`;`&3`];
3626 REPEAT WEAKER_STRIP_TAC;
3628 INTRO_TAC (UNDISCH ineq_5691615370_asym) [`dist (vv 0,vv 2)`;`dist(vv 0, vv 1)`;`dist(vv 0, vv 3)`;`dist(vv 1,vv 3)`;`dist(vv 2,vv 3)`;`dist(vv 2,vv 1)`];
3629 TYPIFY `~(delta_y (dist (vv 0,vv 2)) (dist (vv 0,vv 1)) (dist (vv 0,vv 3)) (dist (vv 1,vv 3)) (dist (vv 2,vv 3)) (dist (vv 2,vv 1)) < &0)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
3630 MATCH_MP_TAC (arith `&0 <= d ==> ~(d < &0)`);
3631 BY(REWRITE_TAC[DELTA_Y_POS_4POINTS]);
3633 TYPIFY `dist(vv 2,vv 1) = dist(vv 1, vv 2)` (C SUBGOAL_THEN SUBST1_TAC);
3634 BY(MESON_TAC[DIST_SYM]);
3635 REWRITE_TAC[Sphere.ineq];
3636 REWRITE_TAC[TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3638 BY(REPEAT CONJ_TAC THEN (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[] THEN REWRITE_TAC[Sphere.h0] THEN TRY REAL_ARITH_TAC);
3641 RULE_ASSUM_TAC(REWRITE_RULE[Fnjlbxs.in_ball_annulus]);
3642 COMMENT "second get";
3643 TYPIFY `dist (vv 0,vv 1) <= #2.472 /\ dist(vv 1,vv 2) <= #2.472 /\ dist(vv 2,vv 3) <= #2.472 /\ dist(vv 0,vv 3) <= #2.472` ASM_CASES_TAC;
3644 INTRO_TAC ((* Appendix. *) get_main_nonlinear "9563139965 d") [`norm(vv 1)`;`norm (vv 2)`;`norm (vv 0)`;`dist(vv 0,vv 2)`;`dist(vv 0,vv 1)`;`dist(vv 1,vv 2)`];
3645 REWRITE_TAC[Sphere.ineq];
3646 REWRITE_TAC[TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3649 BY(REPEAT CONJ_TAC THEN (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[] THEN REWRITE_TAC[Sphere.h0] THEN TRY REAL_ARITH_TAC);
3651 INTRO_TAC ((* Appendix. *) get_main_nonlinear "9563139965 d") [`norm(vv 3)`;`norm (vv 2)`;`norm (vv 0)`;`dist(vv 0,vv 2)`;`dist(vv 0,vv 3)`;`dist(vv 2,vv 3)`];
3652 REWRITE_TAC[Sphere.ineq];
3653 REWRITE_TAC[TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3656 BY(REPEAT CONJ_TAC THEN (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[] THEN REWRITE_TAC[Sphere.h0] THEN TRY REAL_ARITH_TAC);
3658 TYPIFY `taum (norm (vv 0)) (norm (vv 1)) (norm (vv 2)) (dist (vv 1,vv 2)) (dist (vv 0,vv 2)) (dist (vv 0,vv 1)) = taum (norm (vv 1)) (norm (vv 2)) (norm (vv 0)) (dist (vv 0,vv 2)) (dist (vv 0,vv 1)) (dist (vv 1,vv 2)) /\ taum (norm (vv 2)) (norm (vv 3)) (norm (vv 0)) (dist (vv 0,vv 3)) (dist (vv 0,vv 2)) (dist (vv 2,vv 3)) = taum (norm (vv 3)) (norm (vv 2)) (norm (vv 0)) (dist (vv 0,vv 2)) (dist (vv 0,vv 3)) (dist (vv 2,vv 3))` ENOUGH_TO_SHOW_TAC;
3659 DISCH_THEN (unlist REWRITE_TAC);
3660 BY(REPLICATE_TAC 4 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
3661 BY(MESON_TAC[taum_sym]);
3662 COMMENT "third get";
3663 INTRO_TAC ((* Appendix. *) get_main_nonlinear "9563139965 f") [`norm(vv 1)`;`norm (vv 2)`;`norm (vv 0)`;`dist(vv 0,vv 2)`;`dist(vv 0,vv 1)`;`dist(vv 1,vv 2)`];
3664 REWRITE_TAC[Sphere.ineq];
3665 REWRITE_TAC[TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3668 BY(REPEAT CONJ_TAC THEN (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[] THEN REWRITE_TAC[Sphere.h0] THEN TRY REAL_ARITH_TAC);
3669 TYPIFY `taum (norm (vv 1)) (norm (vv 2)) (norm (vv 0)) (dist (vv 0,vv 2)) (dist (vv 0,vv 1)) (dist (vv 1,vv 2)) = taum (norm (vv 0)) (norm (vv 1)) (norm (vv 2)) (dist (vv 1,vv 2)) (dist (vv 0,vv 2)) (dist (vv 0,vv 1))` (C SUBGOAL_THEN SUBST1_TAC);
3670 BY(MESON_TAC[taum_sym]);
3672 INTRO_TAC ((* Appendix. *) get_main_nonlinear "9563139965 f") [`norm(vv 3)`;`norm (vv 2)`;`norm (vv 0)`;`dist(vv 0,vv 2)`;`dist(vv 0,vv 3)`;`dist(vv 2,vv 3)`];
3673 REWRITE_TAC[Sphere.ineq];
3674 REWRITE_TAC[TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3677 BY(REPEAT CONJ_TAC THEN (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[] THEN REWRITE_TAC[Sphere.h0] THEN TRY REAL_ARITH_TAC);
3678 TYPIFY `taum (norm (vv 3)) (norm (vv 2)) (norm (vv 0)) (dist (vv 0,vv 2)) (dist (vv 0,vv 3)) (dist (vv 2,vv 3)) = taum (norm (vv 2)) (norm (vv 3)) (norm (vv 0)) (dist (vv 0,vv 3)) (dist (vv 0,vv 2)) (dist (vv 2,vv 3))` (C SUBGOAL_THEN SUBST1_TAC);
3679 BY(MESON_TAC[taum_sym]);
3681 FIRST_X_ASSUM_ST `~` MP_TAC;
3682 REWRITE_TAC[DE_MORGAN_THM];
3683 COMMENT "four cases on top edge";
3684 DISCH_TAC THEN REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC);
3685 INTRO_TAC ((* Appendix. *) get_main_nonlinear "9563139965 e") [`norm(vv 1)`;`norm (vv 2)`;`norm (vv 0)`;`dist(vv 0,vv 2)`;`dist(vv 0,vv 1)`;`dist(vv 1,vv 2)`];
3686 REWRITE_TAC[Sphere.ineq];
3687 REWRITE_TAC[TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3690 TYPIFY `#2.467 <= dist(vv 0,vv 1)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
3691 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC);
3692 BY(REPEAT CONJ_TAC THEN (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[] THEN REWRITE_TAC[Sphere.h0] THEN FIRST_X_ASSUM MP_TAC THEN TRY REAL_ARITH_TAC);
3693 TYPIFY `taum (norm (vv 1)) (norm (vv 2)) (norm (vv 0)) (dist (vv 0,vv 2)) (dist (vv 0,vv 1)) (dist (vv 1,vv 2)) = taum (norm (vv 0)) (norm (vv 1)) (norm (vv 2)) (dist (vv 1,vv 2)) (dist (vv 0,vv 2)) (dist (vv 0,vv 1))` (C SUBGOAL_THEN SUBST1_TAC);
3694 BY(MESON_TAC[taum_sym]);
3695 BY(REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
3697 INTRO_TAC ((* Appendix. *) get_main_nonlinear "9563139965 e") [`norm(vv 1)`;`norm (vv 0)`;`norm (vv 2)`;`dist(vv 0,vv 2)`;`dist(vv 1,vv 2)`;`dist(vv 0,vv 1)`];
3698 REWRITE_TAC[Sphere.ineq];
3699 REWRITE_TAC[TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3702 TYPIFY `#2.467 <= dist(vv 1,vv 2)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
3703 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC);
3704 BY(REPEAT CONJ_TAC THEN (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[] THEN REWRITE_TAC[Sphere.h0] THEN FIRST_X_ASSUM MP_TAC THEN TRY REAL_ARITH_TAC);
3705 TYPIFY `taum (norm (vv 1)) (norm (vv 0)) (norm (vv 2)) (dist (vv 0,vv 2)) (dist (vv 1,vv 2)) (dist (vv 0,vv 1)) = taum (norm (vv 0)) (norm (vv 1)) (norm (vv 2)) (dist (vv 1,vv 2)) (dist (vv 0,vv 2)) (dist (vv 0,vv 1))` (C SUBGOAL_THEN SUBST1_TAC);
3706 BY(MESON_TAC[taum_sym]);
3707 BY(REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
3709 INTRO_TAC ((* Appendix. *) get_main_nonlinear "9563139965 e") [`norm(vv 3)`;`norm (vv 0)`;`norm (vv 2)`;`dist(vv 0,vv 2)`;`dist(vv 2,vv 3)`;`dist(vv 0,vv 3)`];
3710 REWRITE_TAC[Sphere.ineq];
3711 REWRITE_TAC[TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3714 TYPIFY `#2.467 <= dist(vv 2,vv 3)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
3715 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC);
3716 BY(REPEAT CONJ_TAC THEN (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[] THEN REWRITE_TAC[Sphere.h0] THEN FIRST_X_ASSUM MP_TAC THEN TRY REAL_ARITH_TAC);
3717 TYPIFY `taum (norm (vv 3)) (norm (vv 0)) (norm (vv 2)) (dist (vv 0,vv 2)) (dist (vv 2,vv 3)) (dist (vv 0,vv 3)) = taum (norm (vv 2)) (norm (vv 3)) (norm (vv 0)) (dist (vv 0,vv 3)) (dist (vv 0,vv 2)) (dist (vv 2,vv 3))` (C SUBGOAL_THEN SUBST1_TAC);
3718 BY(MESON_TAC[taum_sym]);
3719 BY(REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
3721 INTRO_TAC ((* Appendix. *) get_main_nonlinear "9563139965 e") [`norm(vv 3)`;`norm (vv 2)`;`norm (vv 0)`;`dist(vv 0,vv 2)`;`dist(vv 0,vv 3)`;`dist(vv 2,vv 3)`];
3722 REWRITE_TAC[Sphere.ineq];
3723 REWRITE_TAC[TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3726 TYPIFY `#2.467 <= dist(vv 0,vv 3)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
3727 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC);
3728 BY(REPEAT CONJ_TAC THEN (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[] THEN REWRITE_TAC[Sphere.h0] THEN FIRST_X_ASSUM MP_TAC THEN TRY REAL_ARITH_TAC);
3729 TYPIFY `taum (norm (vv 3)) (norm (vv 2)) (norm (vv 0)) (dist (vv 0,vv 2)) (dist (vv 0,vv 3)) (dist (vv 2,vv 3)) = taum (norm (vv 2)) (norm (vv 3)) (norm (vv 0)) (dist (vv 0,vv 3)) (dist (vv 0,vv 2)) (dist (vv 2,vv 3))` (C SUBGOAL_THEN SUBST1_TAC);
3730 BY(MESON_TAC[taum_sym]);
3731 BY(REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC)
3735 let quad_4680581274_derived = prove_by_refinement(
3736 `main_nonlinear_terminal_v11 ==> (!y0 y1 y2 y3 y4 y5 y6 y7 y8 y9. ineq [
3748 (enclosed y1 y5 y6 y4 y2 y3 y7 y8 y9 = y0) /\
3749 ( y4 <= y0 ) /\ &0 <= delta_y y0 y9 y8 y4 y5 y6 ==>
3752 < tauq y1 y2 y3 y4 y5 y6 y7 y8 y9 ))
3756 REWRITE_TAC[Sphere.ineq;TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3757 REPEAT WEAKER_STRIP_TAC;
3758 TYPIFY `y4 <= #3.166` (C SUBGOAL_THEN ASSUME_TAC);
3760 INTRO_TAC ((* Appendix. *) get_main_nonlinear "4680581274 delta top issue") [`y0`;`y9`;`y8`;`y4`;`y5`;`y6`];
3761 REWRITE_TAC[Sphere.ineq;TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3762 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
3763 INTRO_TAC ((* Appendix. *) get_main_nonlinear "4559601669") [`y1`;`y5`;`y6`;`y4`;`y2`;`y3`];
3764 REWRITE_TAC[Sphere.ineq;TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3766 BY(REPEAT CONJ_TAC THEN REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN TRY REAL_ARITH_TAC);
3767 TYPIFY `delta4_y y1 y5 y6 y4 y2 y3 = delta4_y y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3768 REWRITE_TAC[Sphere.delta4_y;Sphere.y_of_x;Sphere.delta_x4];
3771 INTRO_TAC ((* Appendix. *) get_main_nonlinear "4680581274 delta issue") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`;`y7`;`y8`;`y9`];
3772 REWRITE_TAC[Sphere.ineq;TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3774 BY(REPEAT CONJ_TAC THEN REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN TRY REAL_ARITH_TAC);
3775 ASM_SIMP_TAC[arith `d4 < &0 ==> ~(d4 > &0)`;arith `c <= y0 ==> ~(y0 < c)`];
3776 REWRITE_TAC[arith `x > y <=> y < x`];
3778 INTRO_TAC ((* Appendix. *) get_main_nonlinear "4680581274 a") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`;`y7`;`y8`;`y9`];
3779 REWRITE_TAC[Sphere.ineq;TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3781 BY(REPEAT CONJ_TAC THEN REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN TRY REAL_ARITH_TAC);
3782 ASM_SIMP_TAC[arith `d4 < &0 ==> ~(d4 > &0)`;arith `c <= y0 ==> ~(y0 < c)`;arith `c < d ==> ~(d < c)`];
3787 (* deprecated 2013-06-17
3788 let quad_7697147739_derived = prove_by_refinement(
3789 `main_nonlinear_terminal_v11 ==> (!y0 y1 y2 y3 y4 y5 y6 y7 y8 y9. ineq [
3801 (enclosed y1 y5 y6 y4 y2 y3 y7 y8 y9 = y0) /\
3802 ( y4 <= y0 ) /\ &0 <= delta_y y0 y9 y8 y4 y5 y6 ==>
3803 #0.616 - #0.11 < tauq y1 y2 y3 y4 y5 y6 y7 y8 y9 ))
3807 REWRITE_TAC[Sphere.ineq;TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3808 REPEAT WEAKER_STRIP_TAC;
3809 TYPIFY `y4 <= #3.108` (C SUBGOAL_THEN ASSUME_TAC);
3811 INTRO_TAC ((* Appendix. *) get_main_nonlinear "7697147739 delta top issue") [`y0`;`y9`;`y8`;`y4`;`y5`;`y6`];
3812 REWRITE_TAC[Sphere.ineq;TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3813 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
3814 INTRO_TAC ((* Appendix. *) get_main_nonlinear "4559601669") [`y1`;`y5`;`y6`;`y4`;`y2`;`y3`];
3815 REWRITE_TAC[Sphere.ineq;TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3817 BY(REPEAT CONJ_TAC THEN REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN TRY REAL_ARITH_TAC);
3818 TYPIFY `delta4_y y1 y5 y6 y4 y2 y3 = delta4_y y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
3819 REWRITE_TAC[Sphere.delta4_y;Sphere.y_of_x;Sphere.delta_x4];
3822 INTRO_TAC ((* Appendix. *) get_main_nonlinear "7697147739 delta issue") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`;`y7`;`y8`;`y9`];
3823 REWRITE_TAC[Sphere.ineq;TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3825 BY(REPEAT CONJ_TAC THEN REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN TRY REAL_ARITH_TAC);
3826 ASM_SIMP_TAC[arith `d4 < &0 ==> ~(d4 > &0)`;arith `c <= y0 ==> ~(y0 < c)`];
3827 REWRITE_TAC[arith `x > y <=> y < x`];
3829 INTRO_TAC ((* Appendix. *) get_main_nonlinear "7697147739 a") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`;`y7`;`y8`;`y9`];
3830 REWRITE_TAC[Sphere.ineq;TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3832 BY(REPEAT CONJ_TAC THEN REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.h0] THEN TRY REAL_ARITH_TAC);
3833 ASM_SIMP_TAC[arith `d4 < &0 ==> ~(d4 > &0)`;arith `c <= y0 ==> ~(y0 < c)`;arith `c < d ==> ~(d < c)`];
3840 (* renamed from terminal_adhoc_quad_4680581274_empty, 2013-06-26, constant #0.616- #0.11 -> #0.513 *)
3841 let empty_4T3 = prove_by_refinement(
3842 `main_nonlinear_terminal_v11 ==>
3844 //mk_unadorned_v39 4 ( #0.616 - #0.11)
3845 // (funlist_v39 [(0,1),cstab; (0,2),cstab; (1,3),cstab] (&2) 4)
3846 // (funlist_v39 [(0,1),cstab; (0,2),&6; (1,3),&6] (&2) 4) in
3847 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))`,
3850 REWRITE_TAC[Appendix.scs_4T3];
3851 REPEAT WEAKER_STRIP_TAC;
3852 REWRITE_TAC[LET_THM];
3853 MATCH_MP_TAC (REWRITE_RULE[LET_THM] (UNDISCH terminal_quad_lemma));
3854 COMMENT "digression";
3855 TYPIFY `(!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> &2 <= funlist_v39 [(0,1),cstab; (0,2),cstab; (1,3),cstab] (&2) 4 i j) ` (C SUBGOAL_THEN ASSUME_TAC);
3856 REWRITE_TAC[arith `i < 4 <=> (i = 0 \/ i = 1 \/ i = 2 \/ i = 3)`];
3857 REWRITE_TAC[TAUT `(a \/ b) /\ c <=> a /\ c \/ b /\ c`;TAUT `a /\ (b \/ c) <=> (a /\ b) \/ a /\ c`];
3858 REPEAT WEAKER_STRIP_TAC;
3859 BY((REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3 /\ SUC 3 = 4`;MOD_4_EXPLICIT;FUNLIST_EXPLICIT;arith `&2 <= &2 /\ &2 <= &3`;arith `~(0=1) /\ ~(0=2) /\ ~(0=3) /\ ~(1 =2) /\ ~(1 = 3) /\ ~(2 = 3)`;Appendix.cstab;arith `&2 <= #3.01`]) THEN ASM_MESON_TAC[]);
3862 BY(ASM_MESON_TAC[arith `&2 <= x ==> &0 < x`]);
3863 REPEAT WEAKER_STRIP_TAC;
3864 COMMENT "prep dist";
3865 TYPIFY `(!i j d. d <= funlist_v39 [(0,1),cstab; (0,2),cstab; (1,3),cstab] (&2) 4 i j ==> d <= dist (vv i,vv j)) /\ (!i j d. funlist_v39 [(0,1),cstab; (0,2),&6; (1,3),&6] (&2) 4 i j <= d ==> dist (vv i,vv j) <= d)` ((C SUBGOAL_THEN MP_TAC));
3866 BY(ASM_MESON_TAC[REAL_LE_TRANS]);
3867 REPEAT WEAKER_STRIP_TAC;
3868 REWRITE_TAC[arith `x + &0 = x /\ &4 - &2 = &2`];
3869 TYPIFY `(!i j. i < 4 /\ j < 4 /\ vv i = vv j ==> i = j)` (C SUBGOAL_THEN ASSUME_TAC);
3870 REPEAT WEAKER_STRIP_TAC;
3872 BY(ASM_MESON_TAC[DIST_REFL;REAL_LE_TRANS;arith `~(&2 <= &0)`]);
3874 TYPIFY `vv 4 = vv 0 /\ vv 5 = vv 1 /\ vv 6 = vv 2` (C SUBGOAL_THEN ASSUME_TAC);
3875 BY((REPEAT CONJ_TAC) THEN GMATCH_SIMP_TAC periodic_vv_inj THEN TYPIFY `4` EXISTS_TAC THEN ASM_REWRITE_TAC[MOD_4_EXPLICIT;arith `~(4 = 0)`]);
3877 INTRO_TAC vv_quad_split_short [`vv`];
3878 ASM_REWRITE_TAC[LET_THM];
3880 TYPIFY `(!i j. ~(vv i = vv j) ==> &2 <= dist (vv i,vv j))` (C SUBGOAL_THEN ASSUME_TAC);
3881 MATCH_MP_TAC periodic2_mod_reduce;
3882 TYPIFY `4` EXISTS_TAC;
3883 REWRITE_TAC[Appendix.periodic2;arith `~(4 = 0)`];
3884 TYPIFY `!i. vv (i + 4) = vv i` (C SUBGOAL_THEN (unlist REWRITE_TAC));
3885 BY(ASM_MESON_TAC[Oxl_def.periodic;arith `~(4 = 0)`]);
3886 REPEAT WEAKER_STRIP_TAC;
3887 BY(ASM_MESON_TAC[REAL_LE_TRANS]);
3889 COMMENT "edge lengths";
3890 TYPIFY `I(dist(vv 0,vv 1) = cstab /\ dist(vv 1,vv 2) = &2 /\ dist(vv 2, vv 3) = &2 /\ dist(vv 0,vv 3) = &2)` (C SUBGOAL_THEN ASSUME_TAC);
3892 REWRITE_TAC[arith `d = c <=> d <= c /\ c <= d`];
3894 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN REWRITE_TAC[FUNLIST_EXPLICIT;MOD_4_EXPLICIT;Appendix.cstab] THEN TRY REAL_ARITH_TAC);
3895 TYPIFY `dist(vv 1,vv 0) = dist(vv 0,vv 1) /\ dist (vv 2, vv 0) = dist(vv 0,vv 2) /\ dist(vv 3,vv 0) = dist (vv 0, vv 3) /\ dist (vv 2,vv 1) = dist (vv 1, vv 2) /\ dist (vv 3,vv 2) = dist (vv 2, vv 3) /\ dist(vv 3,vv 1)=dist(vv 1,vv 3)` (C SUBGOAL_THEN ASSUME_TAC);
3896 BY(MESON_TAC[DIST_SYM]);
3899 TYPIFY `dist(vv 0,vv 2) < &4` (C SUBGOAL_THEN ASSUME_TAC);
3901 INTRO_TAC delta_4680581274 [`dist(vv 1,vv 3)`;`dist(vv 0,vv 2)`];
3904 (FIRST_X_ASSUM MATCH_MP_TAC) THEN REWRITE_TAC[FUNLIST_EXPLICIT;Appendix.cstab;MOD_4_EXPLICIT;arith `~(1 = 3)`];
3906 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC);
3907 REWRITE_TAC[arith `~(d < &0) <=> &0 <= d`];
3908 TYPIFY `delta_y (dist (vv 1,vv 3)) (&2) (&2) (dist (vv 0,vv 2)) (&2) cstab = delta_y (dist(vv 3,vv 1)) (dist(vv 3,vv 0)) (dist(vv 3,vv 2)) (dist(vv 0,vv 2)) (dist (vv 1, vv 2)) (dist (vv 1, vv 0))` ENOUGH_TO_SHOW_TAC;
3909 DISCH_THEN SUBST1_TAC;
3910 BY(REWRITE_TAC[ DELTA_Y_POS_4POINTS]);
3911 RULE_ASSUM_TAC (REWRITE_RULE[I_THM]);
3912 BY(ASM_REWRITE_TAC[]);
3913 COMMENT "second diag";
3914 TYPIFY `dist(vv 1,vv 3) < &4` (C SUBGOAL_THEN ASSUME_TAC);
3916 INTRO_TAC delta_4680581274 [`dist(vv 2,vv 0)`;`dist(vv 1,vv 3)`];
3919 (FIRST_X_ASSUM MATCH_MP_TAC) THEN REWRITE_TAC[FUNLIST_EXPLICIT;Appendix.cstab;MOD_4_EXPLICIT;arith `~(0=2)`];
3921 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC);
3922 REWRITE_TAC[arith `~(d < &0) <=> &0 <= d`];
3923 TYPIFY `delta_y (dist (vv 2,vv 0)) (&2) (&2) (dist (vv 1,vv 3)) (&2) cstab = delta_y (dist(vv 2,vv 0)) (dist(vv 2,vv 1)) (dist(vv 2,vv 3)) (dist(vv 1,vv 3)) (dist (vv 0, vv 3)) (dist (vv 0, vv 1))` ENOUGH_TO_SHOW_TAC;
3924 DISCH_THEN SUBST1_TAC;
3925 BY(REWRITE_TAC[ DELTA_Y_POS_4POINTS]);
3926 RULE_ASSUM_TAC (REWRITE_RULE[I_THM]);
3927 BY(ASM_REWRITE_TAC[]);
3928 FIRST_X_ASSUM_ST `rho_fun` MP_TAC;
3930 RULE_ASSUM_TAC (REWRITE_RULE[I_THM]) THEN ASM_REWRITE_TAC[];
3931 BY(REWRITE_TAC[Appendix.cstab] THEN REAL_ARITH_TAC);
3932 REPEAT WEAKER_STRIP_TAC;
3935 INTRO_TAC vv_enclosed4 [`vv`;`i`];
3936 REWRITE_TAC[LET_THM];
3938 RULE_ASSUM_TAC(REWRITE_RULE[arith `i < 2 <=> i = 0 \/ i = 1`]);
3940 FIRST_X_ASSUM DISJ_CASES_TAC;
3941 RULE_ASSUM_TAC(REWRITE_RULE[I_THM]);
3942 ASM_REWRITE_TAC[arith `0+x = x`;Appendix.cstab];
3944 RULE_ASSUM_TAC(REWRITE_RULE[I_THM]);
3945 ASM_REWRITE_TAC[arith `1+x = SUC x`;Appendix.cstab;SUC_EXPLICIT];
3947 DISCH_THEN (ASSUME_TAC o GSYM);
3948 COMMENT "relabel vars";
3949 TYPIFY `?v1 v2 v3 v4. ( let y1 = norm v1 in let y2 = norm v2 in let y3 = norm v3 in let y4 = dist(v2,v3) in let y5 = dist(v1,v3) in let y6 = dist(v1,v2) in let y7 = norm v4 in let y8 = dist(v3,v4) in let y9 = dist(v2,v4) in let y0 = enclosed y1 y5 y6 y4 y2 y3 y7 y8 y9 in ({v1,v2,v3,v4} SUBSET ball_annulus /\ tau3 (vv i) (vv (i + 1)) (vv (i + 2)) + tau3 (vv (i + 2)) (vv (i + 3)) (vv i) = tau3 v1 v2 v3 + tau3 v4 v2 v3 /\ y4 <= y0 /\ cstab <= y4 /\ y0 < &4 /\ y9 = cstab /\ y8 = &2 /\ y5 = &2 /\ y6 = &2 /\ y0 = dist(v1,v4)))` (C SUBGOAL_THEN MP_TAC);
3950 FIRST_X_ASSUM DISJ_CASES_TAC;
3951 ASM_REWRITE_TAC[LET_THM;arith `0+x = x`];
3952 FIRST_X_ASSUM (RULE_ASSUM_TAC o (unlist REWRITE_RULE));
3953 RULE_ASSUM_TAC (REWRITE_RULE[arith `0 + x = x`]);
3954 GEXISTL_TAC [`vv 3`;`vv 0`;`vv 2`;`vv 1`];
3956 ONCE_REWRITE_TAC[enclosed_sym2];
3957 ONCE_REWRITE_TAC[enclosed_sym];
3960 RULE_ASSUM_TAC(REWRITE_RULE[IMAGE_SUBSET_IN;IN_UNIV]);
3961 ASM_REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY];
3962 BY(FIRST_X_ASSUM_ST `ball_annulus` MP_TAC THEN MESON_TAC[]);
3964 BY(ASM_MESON_TAC[tau3_sym;arith `a + b = b + a`]);
3965 RULE_ASSUM_TAC(REWRITE_RULE[I_THM]);
3967 FIRST_X_ASSUM MATCH_MP_TAC;
3968 REWRITE_TAC[FUNLIST_EXPLICIT;MOD_4_EXPLICIT];
3970 COMMENT "second case relabel";
3971 ASM_REWRITE_TAC[LET_THM;arith `1+x = SUC x`;SUC_EXPLICIT];
3972 FIRST_X_ASSUM (RULE_ASSUM_TAC o (unlist REWRITE_RULE));
3973 RULE_ASSUM_TAC (REWRITE_RULE[arith `1 + x = SUC x`;SUC_EXPLICIT]);
3974 FIRST_X_ASSUM_ST `vv 4 = vv 0` (RULE_ASSUM_TAC o (unlist REWRITE_RULE));
3975 GEXISTL_TAC [`vv 2`;`vv 1`;`vv 3`;`vv 0`];
3977 ONCE_REWRITE_TAC[enclosed_sym];
3978 FIRST_X_ASSUM_ST `enclosed` MP_TAC;
3980 DISCH_THEN SUBST1_TAC;
3982 RULE_ASSUM_TAC(REWRITE_RULE[IMAGE_SUBSET_IN;IN_UNIV]);
3983 ASM_REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY];
3984 BY(FIRST_X_ASSUM_ST `ball_annulus` MP_TAC THEN MESON_TAC[]);
3986 BY(MESON_TAC[tau3_sym]);
3987 FIRST_X_ASSUM_ST `<=` MP_TAC;
3988 RULE_ASSUM_TAC(REWRITE_RULE[I_THM]);
3990 DISCH_THEN (unlist REWRITE_TAC);
3991 FIRST_X_ASSUM MATCH_MP_TAC;
3992 REWRITE_TAC[FUNLIST_EXPLICIT;MOD_4_EXPLICIT];
3994 COMMENT "final kill";
3995 FIRST_X_ASSUM_ST `main_nonlinear_terminal_v11` MP_TAC;
3996 REPEAT (FIRST_X_ASSUM kill);
3997 REWRITE_TAC[LET_THM];
3998 REPEAT WEAKER_STRIP_TAC;
4000 RULE_ASSUM_TAC(ONCE_REWRITE_RULE[ISPEC `(a:real) = b` (GSYM I_THM)]);
4001 REPEAT (GMATCH_SIMP_TAC tau3_taum_40);
4002 RULE_ASSUM_TAC(REWRITE_RULE[INSERT_SUBSET]) THEN ASM_REWRITE_TAC[DIST_SYM];
4004 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab;I_THM] THEN REAL_ARITH_TAC);
4006 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab;I_THM] THEN REAL_ARITH_TAC);
4007 MATCH_MP_TAC (arith `x < y ==> x <= y`);
4009 MP_TAC (UNDISCH quad_4680581274_derived);
4010 REWRITE_TAC[Sphere.ineq;TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
4011 REWRITE_TAC[Sphere.tauq];
4012 DISCH_THEN MATCH_MP_TAC;
4013 TYPIFY `dist(v1,v4)` EXISTS_TAC;
4014 FIRST_X_ASSUM MP_TAC;
4015 REWRITE_TAC[I_THM] THEN DISCH_THEN (fun t -> RULE_ASSUM_TAC(REWRITE_RULE[t]) THEN SUBST1_TAC t);
4016 TYPIFY `&0 <= delta_y (dist (v1,v4)) (dist (v2,v4)) (dist (v3,v4)) (dist (v2,v3)) (dist (v1,v3)) (dist (v1,v2))` (C SUBGOAL_THEN (unlist REWRITE_TAC));
4017 TYPIFY `dist (v1,v4) = dist(v4,v1) /\ dist(v2,v4) = dist(v4,v2) /\ dist(v3,v4) = dist(v4,v3)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
4018 BY(MESON_TAC[DIST_SYM]);
4019 BY(REWRITE_TAC[DELTA_Y_POS_4POINTS]);
4020 RULE_ASSUM_TAC(REWRITE_RULE[I_THM;Appendix.cstab;Fnjlbxs.in_ball_annulus]) THEN ASM_REWRITE_TAC[Appendix.cstab;arith `#2.0= &2`];
4021 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC)
4025 (* deprecated 2013-06-17:
4026 let terminal_adhoc_quad_7697147739_empty = prove_by_refinement(
4027 `main_nonlinear_terminal_v11 ==>
4028 (let s = mk_unadorned_v39 4 ( #0.616 - #0.11)
4029 (funlist_v39 [(0,1),sqrt8; (0,2),cstab; (1,3),cstab] (&2) 4)
4030 (funlist_v39 [(0,1),sqrt8; (0,2),&6; (1,3),&6] (&2) 4) in
4031 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))`,
4034 REPEAT WEAKER_STRIP_TAC;
4035 REWRITE_TAC[LET_THM];
4036 MATCH_MP_TAC (REWRITE_RULE[LET_THM] (UNDISCH terminal_quad_lemma));
4037 COMMENT "sqrt8 bounds";
4038 TYPIFY `#2.828427 < sqrt8 /\ sqrt8 < #2.828428` (C SUBGOAL_THEN ASSUME_TAC);
4039 BY(REWRITE_TAC[Flyspeck_constants.bounds]);
4040 TYPIFY `&2 <= sqrt8` (C SUBGOAL_THEN ASSUME_TAC);
4041 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
4042 COMMENT "digression";
4043 TYPIFY `(!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> &2 <= funlist_v39 [(0,1),sqrt8; (0,2),cstab; (1,3),cstab] (&2) 4 i j) ` (C SUBGOAL_THEN ASSUME_TAC);
4044 REWRITE_TAC[arith `i < 4 <=> (i = 0 \/ i = 1 \/ i = 2 \/ i = 3)`];
4045 REWRITE_TAC[TAUT `(a \/ b) /\ c <=> a /\ c \/ b /\ c`;TAUT `a /\ (b \/ c) <=> (a /\ b) \/ a /\ c`];
4046 REPEAT WEAKER_STRIP_TAC;
4047 BY(((REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3 /\ SUC 3 = 4`;MOD_4_EXPLICIT;FUNLIST_EXPLICIT;arith `&2 <= &2 /\ &2 <= &3`;arith `~(0=1) /\ ~(0=2) /\ ~(0=3) /\ ~(1 =2) /\ ~(1 = 3) /\ ~(2 = 3)`;Appendix.cstab;arith `&2 <= #3.01`])) THEN TRY (ASM_MESON_TAC[]));
4050 BY(ASM_MESON_TAC[arith `&2 <= x ==> &0 < x`]);
4051 REPEAT WEAKER_STRIP_TAC;
4052 COMMENT "prep dist";
4053 TYPIFY `(!i j d. d <= funlist_v39 [(0,1),sqrt8; (0,2),cstab; (1,3),cstab] (&2) 4 i j ==> d <= dist (vv i,vv j)) /\ (!i j d. funlist_v39 [(0,1),sqrt8; (0,2),&6; (1,3),&6] (&2) 4 i j <= d ==> dist (vv i,vv j) <= d)` ((C SUBGOAL_THEN MP_TAC));
4054 BY(ASM_MESON_TAC[REAL_LE_TRANS]);
4055 REPEAT WEAKER_STRIP_TAC;
4056 REWRITE_TAC[arith `x + &0 = x /\ &4 - &2 = &2`];
4057 TYPIFY `(!i j. i < 4 /\ j < 4 /\ vv i = vv j ==> i = j)` (C SUBGOAL_THEN ASSUME_TAC);
4058 REPEAT WEAKER_STRIP_TAC;
4060 BY(ASM_MESON_TAC[DIST_REFL;REAL_LE_TRANS;arith `~(&2 <= &0)`]);
4062 TYPIFY `vv 4 = vv 0 /\ vv 5 = vv 1 /\ vv 6 = vv 2` (C SUBGOAL_THEN ASSUME_TAC);
4063 BY((REPEAT CONJ_TAC) THEN GMATCH_SIMP_TAC periodic_vv_inj THEN TYPIFY `4` EXISTS_TAC THEN ASM_REWRITE_TAC[MOD_4_EXPLICIT;arith `~(4 = 0)`]);
4065 INTRO_TAC vv_quad_split_short [`vv`];
4066 ASM_REWRITE_TAC[LET_THM];
4068 TYPIFY `(!i j. ~(vv i = vv j) ==> &2 <= dist (vv i,vv j))` (C SUBGOAL_THEN ASSUME_TAC);
4069 MATCH_MP_TAC periodic2_mod_reduce;
4070 TYPIFY `4` EXISTS_TAC;
4071 REWRITE_TAC[Appendix.periodic2;arith `~(4 = 0)`];
4072 TYPIFY `!i. vv (i + 4) = vv i` (C SUBGOAL_THEN (unlist REWRITE_TAC));
4073 BY(ASM_MESON_TAC[Oxl_def.periodic;arith `~(4 = 0)`]);
4074 REPEAT WEAKER_STRIP_TAC;
4075 BY(ASM_MESON_TAC[REAL_LE_TRANS]);
4077 COMMENT "edge lengths";
4078 TYPIFY `I(dist(vv 0,vv 1) = sqrt8 /\ dist(vv 1,vv 2) = &2 /\ dist(vv 2, vv 3) = &2 /\ dist(vv 0,vv 3) = &2)` (C SUBGOAL_THEN ASSUME_TAC);
4080 REWRITE_TAC[arith `d = c <=> d <= c /\ c <= d`];
4082 BY((REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN REWRITE_TAC[FUNLIST_EXPLICIT;MOD_4_EXPLICIT;Appendix.cstab] THEN TRY REAL_ARITH_TAC));
4083 TYPIFY `dist(vv 1,vv 0) = dist(vv 0,vv 1) /\ dist (vv 2, vv 0) = dist(vv 0,vv 2) /\ dist(vv 3,vv 0) = dist (vv 0, vv 3) /\ dist (vv 2,vv 1) = dist (vv 1, vv 2) /\ dist (vv 3,vv 2) = dist (vv 2, vv 3) /\ dist(vv 3,vv 1)=dist(vv 1,vv 3)` (C SUBGOAL_THEN ASSUME_TAC);
4084 BY(MESON_TAC[DIST_SYM]);
4087 TYPIFY `dist(vv 0,vv 2) < &4` (C SUBGOAL_THEN ASSUME_TAC);
4089 INTRO_TAC delta_7697147739 [`dist(vv 1,vv 3)`;`dist(vv 0,vv 2)`];
4092 (FIRST_X_ASSUM MATCH_MP_TAC) THEN REWRITE_TAC[FUNLIST_EXPLICIT;Appendix.cstab;MOD_4_EXPLICIT;arith `~(1 = 3)`];
4094 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC);
4095 REWRITE_TAC[arith `~(d < &0) <=> &0 <= d`];
4096 TYPIFY `delta_y (dist (vv 1,vv 3)) (&2) (&2) (dist (vv 0,vv 2)) (&2) sqrt8 = delta_y (dist(vv 3,vv 1)) (dist(vv 3,vv 0)) (dist(vv 3,vv 2)) (dist(vv 0,vv 2)) (dist (vv 1, vv 2)) (dist (vv 1, vv 0))` ENOUGH_TO_SHOW_TAC;
4097 DISCH_THEN SUBST1_TAC;
4098 BY(REWRITE_TAC[ DELTA_Y_POS_4POINTS]);
4099 RULE_ASSUM_TAC (REWRITE_RULE[I_THM]);
4100 BY(ASM_REWRITE_TAC[]);
4101 COMMENT "second diag";
4102 TYPIFY `dist(vv 1,vv 3) < &4` (C SUBGOAL_THEN ASSUME_TAC);
4104 INTRO_TAC delta_7697147739 [`dist(vv 2,vv 0)`;`dist(vv 1,vv 3)`];
4107 (FIRST_X_ASSUM MATCH_MP_TAC) THEN REWRITE_TAC[FUNLIST_EXPLICIT;Appendix.cstab;MOD_4_EXPLICIT;arith `~(0=2)`];
4109 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC);
4110 REWRITE_TAC[arith `~(d < &0) <=> &0 <= d`];
4111 TYPIFY `delta_y (dist (vv 2,vv 0)) (&2) (&2) (dist (vv 1,vv 3)) (&2) sqrt8 = delta_y (dist(vv 2,vv 0)) (dist(vv 2,vv 1)) (dist(vv 2,vv 3)) (dist(vv 1,vv 3)) (dist (vv 0, vv 3)) (dist (vv 0, vv 1))` ENOUGH_TO_SHOW_TAC;
4112 DISCH_THEN SUBST1_TAC;
4113 BY(REWRITE_TAC[ DELTA_Y_POS_4POINTS]);
4114 RULE_ASSUM_TAC (REWRITE_RULE[I_THM]);
4115 BY(ASM_REWRITE_TAC[]);
4116 FIRST_X_ASSUM_ST `rho_fun` MP_TAC;
4118 RULE_ASSUM_TAC (REWRITE_RULE[I_THM]) THEN ASM_REWRITE_TAC[];
4119 BY(REPEAT (FIRST_X_ASSUM_ST `sqrt8 < c` MP_TAC) THEN REAL_ARITH_TAC);
4120 REPEAT WEAKER_STRIP_TAC;
4123 INTRO_TAC vv_enclosed4 [`vv`;`i`];
4124 REWRITE_TAC[LET_THM];
4126 RULE_ASSUM_TAC(REWRITE_RULE[arith `i < 2 <=> i = 0 \/ i = 1`]);
4128 FIRST_X_ASSUM DISJ_CASES_TAC;
4129 RULE_ASSUM_TAC(REWRITE_RULE[I_THM]);
4130 ASM_REWRITE_TAC[arith `0+x = x`;Appendix.cstab];
4131 BY(REPEAT (FIRST_X_ASSUM_ST `sqrt8 < c` MP_TAC) THEN REAL_ARITH_TAC);
4132 RULE_ASSUM_TAC(REWRITE_RULE[I_THM]);
4133 ASM_REWRITE_TAC[arith `1+x = SUC x`;Appendix.cstab;SUC_EXPLICIT];
4134 BY(REPEAT (FIRST_X_ASSUM_ST `sqrt8 < c` MP_TAC) THEN REAL_ARITH_TAC);
4135 DISCH_THEN (ASSUME_TAC o GSYM);
4136 COMMENT "relabel vars";
4137 TYPIFY `?v1 v2 v3 v4. ( let y1 = norm v1 in let y2 = norm v2 in let y3 = norm v3 in let y4 = dist(v2,v3) in let y5 = dist(v1,v3) in let y6 = dist(v1,v2) in let y7 = norm v4 in let y8 = dist(v3,v4) in let y9 = dist(v2,v4) in let y0 = enclosed y1 y5 y6 y4 y2 y3 y7 y8 y9 in ({v1,v2,v3,v4} SUBSET ball_annulus /\ tau3 (vv i) (vv (i + 1)) (vv (i + 2)) + tau3 (vv (i + 2)) (vv (i + 3)) (vv i) = tau3 v1 v2 v3 + tau3 v4 v2 v3 /\ y4 <= y0 /\ cstab <= y4 /\ y0 < &4 /\ y9 = sqrt8 /\ y8 = &2 /\ y5 = &2 /\ y6 = &2 /\ y0 = dist(v1,v4)))` (C SUBGOAL_THEN MP_TAC);
4138 FIRST_X_ASSUM DISJ_CASES_TAC;
4139 ASM_REWRITE_TAC[LET_THM;arith `0+x = x`];
4140 FIRST_X_ASSUM (RULE_ASSUM_TAC o (unlist REWRITE_RULE));
4141 RULE_ASSUM_TAC (REWRITE_RULE[arith `0 + x = x`]);
4142 GEXISTL_TAC [`vv 3`;`vv 0`;`vv 2`;`vv 1`];
4144 ONCE_REWRITE_TAC[enclosed_sym2];
4145 ONCE_REWRITE_TAC[enclosed_sym];
4148 RULE_ASSUM_TAC(REWRITE_RULE[IMAGE_SUBSET_IN;IN_UNIV]);
4149 ASM_REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY];
4150 BY(FIRST_X_ASSUM_ST `ball_annulus` MP_TAC THEN MESON_TAC[]);
4152 BY(ASM_MESON_TAC[tau3_sym;arith `a + b = b + a`]);
4153 RULE_ASSUM_TAC(REWRITE_RULE[I_THM]);
4155 FIRST_X_ASSUM MATCH_MP_TAC;
4156 REWRITE_TAC[FUNLIST_EXPLICIT;MOD_4_EXPLICIT];
4158 COMMENT "second case relabel";
4159 ASM_REWRITE_TAC[LET_THM;arith `1+x = SUC x`;SUC_EXPLICIT];
4160 FIRST_X_ASSUM (RULE_ASSUM_TAC o (unlist REWRITE_RULE));
4161 RULE_ASSUM_TAC (REWRITE_RULE[arith `1 + x = SUC x`;SUC_EXPLICIT]);
4162 FIRST_X_ASSUM_ST `vv 4 = vv 0` (RULE_ASSUM_TAC o (unlist REWRITE_RULE));
4163 GEXISTL_TAC [`vv 2`;`vv 1`;`vv 3`;`vv 0`];
4165 ONCE_REWRITE_TAC[enclosed_sym];
4166 FIRST_X_ASSUM_ST `enclosed` MP_TAC;
4168 DISCH_THEN SUBST1_TAC;
4170 RULE_ASSUM_TAC(REWRITE_RULE[IMAGE_SUBSET_IN;IN_UNIV]);
4171 ASM_REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY];
4172 BY(FIRST_X_ASSUM_ST `ball_annulus` MP_TAC THEN MESON_TAC[]);
4174 BY(MESON_TAC[tau3_sym]);
4175 FIRST_X_ASSUM_ST `<=` MP_TAC;
4176 RULE_ASSUM_TAC(REWRITE_RULE[I_THM]);
4178 DISCH_THEN (unlist REWRITE_TAC);
4179 FIRST_X_ASSUM MATCH_MP_TAC;
4180 REWRITE_TAC[FUNLIST_EXPLICIT;MOD_4_EXPLICIT];
4182 COMMENT "final kill";
4183 FIRST_X_ASSUM_ST `main_nonlinear_terminal_v11` MP_TAC;
4184 FIRST_X_ASSUM_ST `sqrt8 < c` MP_TAC;
4185 REPEAT (FIRST_X_ASSUM kill);
4186 REWRITE_TAC[LET_THM];
4187 REPEAT WEAKER_STRIP_TAC;
4189 RULE_ASSUM_TAC(ONCE_REWRITE_RULE[ISPEC `(a:real) = b` (GSYM I_THM)]);
4190 REPEAT (GMATCH_SIMP_TAC tau3_taum_40);
4191 RULE_ASSUM_TAC(REWRITE_RULE[INSERT_SUBSET]) THEN ASM_REWRITE_TAC[DIST_SYM];
4193 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab;I_THM] THEN REAL_ARITH_TAC);
4195 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab;I_THM] THEN REAL_ARITH_TAC);
4196 MATCH_MP_TAC (arith `x < y ==> x <= y`);
4198 MP_TAC (UNDISCH quad_7697147739_derived);
4199 REWRITE_TAC[Sphere.ineq;TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
4200 REWRITE_TAC[Sphere.tauq];
4201 DISCH_THEN MATCH_MP_TAC;
4202 TYPIFY `dist(v1,v4)` EXISTS_TAC;
4203 FIRST_X_ASSUM MP_TAC;
4204 REWRITE_TAC[I_THM] THEN DISCH_THEN (fun t -> RULE_ASSUM_TAC(REWRITE_RULE[t]) THEN SUBST1_TAC t);
4205 TYPIFY `&0 <= delta_y (dist (v1,v4)) (dist (v2,v4)) (dist (v3,v4)) (dist (v2,v3)) (dist (v1,v3)) (dist (v1,v2))` (C SUBGOAL_THEN (unlist REWRITE_TAC));
4206 TYPIFY `dist (v1,v4) = dist(v4,v1) /\ dist(v2,v4) = dist(v4,v2) /\ dist(v3,v4) = dist(v4,v3)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
4207 BY(MESON_TAC[DIST_SYM]);
4208 BY(REWRITE_TAC[DELTA_Y_POS_4POINTS]);
4209 RULE_ASSUM_TAC(REWRITE_RULE[I_THM;Appendix.cstab;Fnjlbxs.in_ball_annulus]) THEN ASM_REWRITE_TAC[Appendix.cstab;arith `#2.0= &2`];
4210 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC)
4215 let empty_4T4 = prove_by_refinement(
4216 `main_nonlinear_terminal_v11 ==>
4218 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))`,
4221 REWRITE_TAC[Appendix.scs_4T4];
4222 REPEAT WEAKER_STRIP_TAC;
4223 REWRITE_TAC[LET_THM];
4224 MATCH_MP_TAC (REWRITE_RULE[LET_THM] (UNDISCH terminal_quad_lemma));
4225 COMMENT "digression";
4226 TYPIFY `(!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> &2 <= funlist_v39 [(0,1),&2 * h0; (0,2),sqrt8; (1,3),sqrt8] (&2) 4 i j)` (C SUBGOAL_THEN ASSUME_TAC);
4227 REWRITE_TAC[arith `i < 4 <=> (i = 0 \/ i = 1 \/ i = 2 \/ i = 3)`];
4228 REWRITE_TAC[TAUT `(a \/ b) /\ c <=> a /\ c \/ b /\ c`;TAUT `a /\ (b \/ c) <=> (a /\ b) \/ a /\ c`];
4229 REWRITE_TAC[TAUT `(a \/ b) \/ c <=> a \/ b \/ c`;arith `~(i = k /\ j = k /\ ~(i = (j:num)))`];
4230 REPEAT WEAKER_STRIP_TAC;
4231 BY((REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[FUNLIST_EXPLICIT;arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3 /\ SUC 3 = 4`;MOD_4_EXPLICIT;arith `&2 <= &2 /\ &2 <= &3`;arith `~(0=1) /\ ~(0=2) /\ ~(0=3) /\ ~(1 =2) /\ ~(1 = 3) /\ ~(2 = 3)`;Sphere.h0] THEN MP_TAC sqrt8_flyspeck THEN TRY REAL_ARITH_TAC));
4233 TYPIFY `!i j. (i=0 /\ j=1) \/ (i=0 /\ j=3) \/ (i=1 /\ j=2) \/ (i=1 /\ j=3) \/ (i=2 /\ j=3) ==> funlist_v39 [(0,1),sqrt8; (0,2),&6; (1,3),cstab] (&2 * h0) 4 i j < &4` (C SUBGOAL_THEN ASSUME_TAC);
4234 REWRITE_TAC[arith `i < 4 <=> (i = 0 \/ i = 1 \/ i = 2 \/ i = 3)`];
4235 REWRITE_TAC[TAUT `(a \/ b) /\ c <=> a /\ c \/ b /\ c`;TAUT `a /\ (b \/ c) <=> (a /\ b) \/ a /\ c`];
4236 REWRITE_TAC[TAUT `(a \/ b) \/ c <=> a \/ b \/ c`;arith `~(i = k /\ j = k /\ ~(i = (j:num)))`];
4237 REWRITE_TAC[Appendix.cs_adj;Sphere.h0];
4238 REPEAT WEAKER_STRIP_TAC;
4239 BY((REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[FUNLIST_EXPLICIT;arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3 /\ SUC 3 = 4`;MOD_4_EXPLICIT;arith `&2 * #1.26 < &4 /\ &3 < &4`;arith `~(0=1) /\ ~(0=2) /\ ~(0=3) /\ ~(1 =2) /\ ~(1 = 3) /\ ~(2 = 3)`;Sphere.cstab] THEN MP_TAC sqrt8_flyspeck THEN TRY REAL_ARITH_TAC));
4241 BY(ASM_MESON_TAC[arith `&2 <= x ==> &0 < x`]);
4242 REPEAT WEAKER_STRIP_TAC;
4243 REWRITE_TAC[arith `x + &0 = x /\ &4 - &2 = &2`];
4244 TYPIFY `(!i j. i < 4 /\ j < 4 /\ vv i = vv j ==> i = j)` (C SUBGOAL_THEN ASSUME_TAC);
4245 REPEAT WEAKER_STRIP_TAC;
4247 BY(ASM_MESON_TAC[DIST_REFL;REAL_LE_TRANS;arith `~(&2 <= &0)`]);
4249 TYPIFY `vv 4 = vv 0 /\ vv 5 = vv 1 /\ vv 6 = vv 2` (C SUBGOAL_THEN ASSUME_TAC);
4250 BY((REPEAT CONJ_TAC) THEN GMATCH_SIMP_TAC periodic_vv_inj THEN TYPIFY `4` EXISTS_TAC THEN ASM_REWRITE_TAC[MOD_4_EXPLICIT;arith `~(4 = 0)`]);
4252 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] vv_quad_split123);
4256 TYPIFY `(!i j. ~(vv i = vv j) ==> &2 <= dist (vv i,vv j))` (C SUBGOAL_THEN ASSUME_TAC);
4257 MATCH_MP_TAC periodic2_mod_reduce;
4258 TYPIFY `4` EXISTS_TAC;
4259 REWRITE_TAC[Appendix.periodic2;arith `~(4 = 0)`];
4260 TYPIFY `!i. vv (i + 4) = vv i` (C SUBGOAL_THEN (unlist REWRITE_TAC));
4261 BY(ASM_MESON_TAC[Oxl_def.periodic;arith `~(4 = 0)`]);
4262 REPEAT WEAKER_STRIP_TAC;
4263 BY(ASM_MESON_TAC[REAL_LE_TRANS]);
4265 BY(ASM_MESON_TAC[REAL_LET_TRANS]);
4266 REPEAT WEAKER_STRIP_TAC;
4268 REPEAT (GMATCH_SIMP_TAC tau3_taum_40);
4270 RULE_ASSUM_TAC(REWRITE_RULE[IMAGE_SUBSET_IN;IN_UNIV]);
4271 ASM_REWRITE_TAC[DIST_SYM];
4272 TYPIFY `dist (vv 3,vv 0) < &4 ` (C SUBGOAL_THEN (unlist REWRITE_TAC));
4273 ONCE_REWRITE_TAC[DIST_SYM];
4274 BY(ASM_REWRITE_TAC[]);
4275 REWRITE_TAC[TAUT `a /\ b /\ c <=> (a /\ b) /\ c`];
4277 FIRST_X_ASSUM (REPEAT o GMATCH_SIMP_TAC);
4278 FIRST_X_ASSUM_ST `i < 4` MP_TAC;
4279 BY(MESON_TAC[arith `1 < 4 /\ 2 < 4 /\ 3 < 4 /\ 0 < 4 /\ ~(2=3) /\ ~(2 =1) /\ ~(1 =0) /\ ~(1 = 3) /\ ~(3=0 ) /\ ~(1 = 2)`]);
4280 COMMENT "prep dist";
4281 TYPED_ABBREV_TAC `a = funlist_v39 [(0,1),&2 * h0; (0,2),sqrt8; (1,3),sqrt8] (&2) 4`;
4282 TYPED_ABBREV_TAC `b = funlist_v39 [(0,1),sqrt8; (0,2),&6; (1,3),cstab] (&2 * h0) 4`;
4283 TYPIFY `(!i j d. d <= a i j ==> d <= dist (vv i,vv j)) /\ (!i j d. b i j <= d ==> dist (vv i,vv j) <= d)` (C SUBGOAL_THEN MP_TAC);
4284 BY(ASM_MESON_TAC[REAL_LE_TRANS]);
4285 REPEAT WEAKER_STRIP_TAC;
4286 TYPIFY `a 1 0 = &2 * h0 /\ a 2 1 = &2 /\ a 2 3 = &2 /\ a 3 0 = &2 /\ a 1 3 = sqrt8 /\ b 1 0 = sqrt8 /\ b 2 1 = &2 * h0 /\ b 2 3 = &2 * h0 /\ b 3 0 = &2 * h0 /\ b 1 3 = cstab` (C SUBGOAL_THEN ASSUME_TAC);
4289 BY(REWRITE_TAC[FUNLIST_EXPLICIT;MOD_4_EXPLICIT]);
4290 RULE_ASSUM_TAC(REWRITE_RULE[Fnjlbxs.in_ball_annulus]);
4291 TYPIFY `#2.52 = &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
4292 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
4294 INTRO_TAC (get_main_nonlinear "5405130650") [`norm (vv 0)`;`norm (vv 3)`;`norm (vv 1)`;`dist(vv 3,vv 1)`;`dist(vv 0,vv 1)`;`dist(vv 0,vv 3)`];
4295 REWRITE_TAC[Sphere.ineq];
4296 REWRITE_TAC[TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
4297 REWRITE_TAC[arith `(d < &0) <=> ~(&0 <= d)`];
4298 REWRITE_TAC[REWRITE_RULE[LET_THM] Tame_lemmas.delta_y_pos];
4299 ASM_REWRITE_TAC[DIST_SYM;arith `#2.0 = &2`];
4301 BY((REPEAT CONJ_TAC THEN (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[] THEN REWRITE_TAC[Sphere.h0;Sphere.cstab] THEN TRY REAL_ARITH_TAC));
4303 COMMENT "second get";
4304 INTRO_TAC (get_main_nonlinear "3603097872") [`norm (vv 2)`;`norm (vv 3)`;`norm (vv 1)`;`dist(vv 3,vv 1)`;`dist(vv 2,vv 1)`;`dist(vv 2,vv 3)`];
4305 REWRITE_TAC[Sphere.ineq];
4306 REWRITE_TAC[TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
4307 REWRITE_TAC[arith `(d < &0) <=> ~(&0 <= d)`];
4308 REWRITE_TAC[REWRITE_RULE[LET_THM] Tame_lemmas.delta_y_pos];
4309 ASM_REWRITE_TAC[DIST_SYM;arith `#2.0 = &2`];
4311 BY((REPEAT CONJ_TAC THEN (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[] THEN REWRITE_TAC[Sphere.h0;Sphere.cstab] THEN TRY REAL_ARITH_TAC));
4312 COMMENT "final kill";
4313 FIRST_X_ASSUM MP_TAC;
4314 REWRITE_TAC[DIST_SYM];
4315 TYPIFY `taum (norm (vv 0)) (norm (vv 3)) (norm (vv 1)) (dist (vv 1,vv 3)) (dist (vv 1,vv 0)) (dist (vv 3,vv 0)) = taum (norm (vv 3)) (norm (vv 0)) (norm (vv 1)) (dist (vv 1,vv 0)) (dist (vv 1,vv 3)) (dist (vv 3,vv 0)) /\ taum (norm (vv 2)) (norm (vv 3)) (norm (vv 1)) (dist (vv 1,vv 3)) (dist (vv 2,vv 1)) (dist (vv 2,vv 3)) = taum (norm (vv 1)) (norm (vv 2)) (norm (vv 3)) (dist (vv 2,vv 3)) (dist (vv 1,vv 3)) (dist (vv 2,vv 1))` ENOUGH_TO_SHOW_TAC;
4316 DISCH_THEN (unlist REWRITE_TAC);
4318 BY(REWRITE_TAC[(* Terminal. *) taum_sym])
4322 let empty_4T5 = prove_by_refinement(
4323 `main_nonlinear_terminal_v11 ==>
4325 (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv))`,
4328 REWRITE_TAC[Appendix.scs_4T5];
4329 REPEAT WEAKER_STRIP_TAC;
4330 REWRITE_TAC[LET_THM];
4331 MATCH_MP_TAC (REWRITE_RULE[LET_THM] (UNDISCH terminal_quad_lemma));
4332 COMMENT "digression";
4333 TYPED_ABBREV_TAC `a = funlist_v39 [(0,1),&2 * h0; (0,2),cstab; (1,3),cstab] (&2) 4`;
4334 TYPED_ABBREV_TAC `b = funlist_v39 [(0,1),cstab; (0,2),&6; (1,3),cstab] (&2 * h0) 4`;
4335 TYPIFY `(!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> &2 <= a i j)` (C SUBGOAL_THEN ASSUME_TAC);
4336 REWRITE_TAC[arith `i < 4 <=> (i = 0 \/ i = 1 \/ i = 2 \/ i = 3)`];
4337 REWRITE_TAC[TAUT `(a \/ b) /\ c <=> a /\ c \/ b /\ c`;TAUT `a /\ (b \/ c) <=> (a /\ b) \/ a /\ c`];
4338 REWRITE_TAC[TAUT `(a \/ b) \/ c <=> a \/ b \/ c`;arith `~(i = k /\ j = k /\ ~(i = (j:num)))`];
4339 REPEAT WEAKER_STRIP_TAC;
4341 BY((REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[FUNLIST_EXPLICIT;arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3 /\ SUC 3 = 4`;MOD_4_EXPLICIT;arith `&2 <= &2 /\ &2 <= &3`;arith `~(0=1) /\ ~(0=2) /\ ~(0=3) /\ ~(1 =2) /\ ~(1 = 3) /\ ~(2 = 3)`;Sphere.h0;Sphere.cstab] THEN MP_TAC sqrt8_flyspeck THEN TRY REAL_ARITH_TAC));
4343 TYPIFY `!i j. (i=0 /\ j=1) \/ (i=0 /\ j=3) \/ (i=1 /\ j=2) \/ (i=1 /\ j=3) \/ (i=2 /\ j=3) ==> b i j < &4` (C SUBGOAL_THEN ASSUME_TAC);
4344 REWRITE_TAC[arith `i < 4 <=> (i = 0 \/ i = 1 \/ i = 2 \/ i = 3)`];
4345 REWRITE_TAC[TAUT `(a \/ b) /\ c <=> a /\ c \/ b /\ c`;TAUT `a /\ (b \/ c) <=> (a /\ b) \/ a /\ c`];
4346 REWRITE_TAC[TAUT `(a \/ b) \/ c <=> a \/ b \/ c`;arith `~(i = k /\ j = k /\ ~(i = (j:num)))`];
4348 REPEAT WEAKER_STRIP_TAC;
4349 BY((REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[FUNLIST_EXPLICIT;arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3 /\ SUC 3 = 4`;MOD_4_EXPLICIT;arith `&2 * #1.26 < &4 /\ &3 < &4`;arith `~(0=1) /\ ~(0=2) /\ ~(0=3) /\ ~(1 =2) /\ ~(1 = 3) /\ ~(2 = 3)`;Sphere.cstab;Sphere.h0] THEN MP_TAC sqrt8_flyspeck THEN TRY REAL_ARITH_TAC));
4351 BY(ASM_MESON_TAC[arith `&2 <= x ==> &0 < x`]);
4352 REPEAT WEAKER_STRIP_TAC;
4353 REWRITE_TAC[arith `x + &0 = x /\ &4 - &2 = &2`];
4354 TYPIFY `(!i j. i < 4 /\ j < 4 /\ vv i = vv j ==> i = j)` (C SUBGOAL_THEN ASSUME_TAC);
4355 REPEAT WEAKER_STRIP_TAC;
4357 BY(ASM_MESON_TAC[DIST_REFL;REAL_LE_TRANS;arith `~(&2 <= &0)`]);
4359 TYPIFY `vv 4 = vv 0 /\ vv 5 = vv 1 /\ vv 6 = vv 2` (C SUBGOAL_THEN ASSUME_TAC);
4360 BY((REPEAT CONJ_TAC) THEN GMATCH_SIMP_TAC periodic_vv_inj THEN TYPIFY `4` EXISTS_TAC THEN ASM_REWRITE_TAC[MOD_4_EXPLICIT;arith `~(4 = 0)`]);
4362 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] vv_quad_split123);
4366 TYPIFY `(!i j. ~(vv i = vv j) ==> &2 <= dist (vv i,vv j))` (C SUBGOAL_THEN ASSUME_TAC);
4367 MATCH_MP_TAC periodic2_mod_reduce;
4368 TYPIFY `4` EXISTS_TAC;
4369 REWRITE_TAC[Appendix.periodic2;arith `~(4 = 0)`];
4370 TYPIFY `!i. vv (i + 4) = vv i` (C SUBGOAL_THEN (unlist REWRITE_TAC));
4371 BY(ASM_MESON_TAC[Oxl_def.periodic;arith `~(4 = 0)`]);
4372 REPEAT WEAKER_STRIP_TAC;
4373 BY(ASM_MESON_TAC[REAL_LE_TRANS]);
4375 BY(ASM_MESON_TAC[REAL_LET_TRANS]);
4376 REPEAT WEAKER_STRIP_TAC;
4378 REPEAT (GMATCH_SIMP_TAC tau3_taum_40);
4380 RULE_ASSUM_TAC(REWRITE_RULE[IMAGE_SUBSET_IN;IN_UNIV]);
4381 ASM_REWRITE_TAC[DIST_SYM];
4382 TYPIFY `dist (vv 3,vv 0) < &4 ` (C SUBGOAL_THEN (unlist REWRITE_TAC));
4383 ONCE_REWRITE_TAC[DIST_SYM];
4384 BY(ASM_REWRITE_TAC[]);
4385 REWRITE_TAC[TAUT `a /\ b /\ c <=> (a /\ b) /\ c`];
4387 FIRST_X_ASSUM (REPEAT o GMATCH_SIMP_TAC);
4388 FIRST_X_ASSUM_ST `i < 4` MP_TAC;
4389 BY(MESON_TAC[arith `1 < 4 /\ 2 < 4 /\ 3 < 4 /\ 0 < 4 /\ ~(2=3) /\ ~(2 =1) /\ ~(1 =0) /\ ~(1 = 3) /\ ~(3=0 ) /\ ~(1 = 2)`]);
4390 COMMENT "prep dist";
4391 TYPIFY `(!i j d. d <= a i j ==> d <= dist (vv i,vv j)) /\ (!i j d. b i j <= d ==> dist (vv i,vv j) <= d)` (C SUBGOAL_THEN MP_TAC);
4392 BY(ASM_MESON_TAC[REAL_LE_TRANS]);
4393 REPEAT WEAKER_STRIP_TAC;
4394 TYPIFY `a 1 0 = &2 * h0 /\ a 2 1 = &2 /\ a 2 3 = &2 /\ a 3 0 = &2 /\ a 1 3 = cstab /\ b 1 0 = cstab /\ b 2 1 = &2 * h0 /\ b 2 3 = &2 * h0 /\ b 3 0 = &2 * h0 /\ b 1 3 = cstab` (C SUBGOAL_THEN ASSUME_TAC);
4397 BY(REWRITE_TAC[FUNLIST_EXPLICIT;MOD_4_EXPLICIT]);
4398 RULE_ASSUM_TAC(REWRITE_RULE[Fnjlbxs.in_ball_annulus]);
4399 TYPIFY `#2.52 = &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
4400 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
4401 INTRO_TAC (get_main_nonlinear "9096461391") [`norm (vv 1)`;`norm (vv 3)`;`norm (vv 0)`;`dist(vv 3,vv 0)`;`dist(vv 1,vv 0)`;`dist(vv 1,vv 3)`];
4402 REWRITE_TAC[Sphere.ineq];
4403 REWRITE_TAC[TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
4404 ASM_REWRITE_TAC[DIST_SYM;arith `#2.0 = &2`];
4406 BY((REPEAT CONJ_TAC THEN (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[] THEN REWRITE_TAC[Sphere.h0;Sphere.cstab] THEN TRY REAL_ARITH_TAC));
4408 COMMENT "second get";
4409 INTRO_TAC (get_main_nonlinear "2445657182") [`norm (vv 1)`;`norm (vv 3)`;`norm (vv 2)`;`dist(vv 3,vv 2)`;`dist(vv 1,vv 2)`;`dist(vv 1,vv 3)`];
4410 REWRITE_TAC[Sphere.ineq];
4411 REWRITE_TAC[TAUT `(a ==> b==> c) <=> (a /\ b) ==> c `;TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
4412 ASM_REWRITE_TAC[DIST_SYM;arith `#2.0 = &2`];
4414 BY((REPEAT CONJ_TAC THEN (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[] THEN REWRITE_TAC[Sphere.h0;Sphere.cstab] THEN TRY REAL_ARITH_TAC));
4415 COMMENT "final kill";
4416 FIRST_X_ASSUM MP_TAC;
4417 REWRITE_TAC[DIST_SYM];
4418 TYPIFY `taum (norm (vv 1)) (norm (vv 3)) (norm (vv 0)) (dist (vv 3,vv 0)) (dist (vv 1,vv 0)) (dist (vv 1,vv 3)) = taum (norm (vv 3)) (norm (vv 0)) (norm (vv 1)) (dist (vv 1,vv 0)) (dist (vv 1,vv 3)) (dist (vv 3,vv 0)) /\ taum (norm (vv 1)) (norm (vv 3)) (norm (vv 2)) (dist (vv 2,vv 3)) (dist (vv 2,vv 1)) (dist (vv 1,vv 3)) = taum (norm (vv 1)) (norm (vv 2)) (norm (vv 3)) (dist (vv 2,vv 3)) (dist (vv 1,vv 3)) (dist (vv 2,vv 1))` ENOUGH_TO_SHOW_TAC;
4419 DISCH_THEN (unlist REWRITE_TAC);
4421 BY(REWRITE_TAC[(* Terminal. *)taum_sym])