1 (* ========================================================================== *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
3 (* Section: Conclusions *)
4 (* Chapter: Local Fan *)
6 (* Author: Thomas C. Hales *)
8 (* ========================================================================== *)
12 module Ocbicby = struct
16 let LET_THM = CONJ LET_DEF LET_END_DEF;;
18 let diff = Pent_hex.diff;;
19 let DERIVED_TAC = Pent_hex.DERIVED_TAC;;
21 Functional_equation.functional_overload();;
24 let sqrt8_flyspeck = prove_by_refinement(
29 BY(REWRITE_TAC[Flyspeck_constants.bounds])
33 let DOT_LSUB = prove_by_refinement(
34 `!x y (z:real^A). (x - y) dot z = x dot z - y dot z`,
37 REPEAT WEAKER_STRIP_TAC;
42 let DOT_RSUB = prove_by_refinement(
43 `!x y (z:real^A). x dot (y - z) = x dot y - x dot z `,
46 REPEAT WEAKER_STRIP_TAC;
51 let euler_p_eulerA_x = prove_by_refinement(
52 `!(v0:real^A) v1 v2 v3.
53 (let x1 = dist(v0,v1) pow 2 in
54 let x2 = dist(v0,v2) pow 2 in
55 let x3 = dist(v0,v3) pow 2 in
56 let x4 = dist(v2,v3) pow 2 in
57 let x5 = dist(v1,v3) pow 2 in
58 let x6 = dist(v1,v2) pow 2 in
59 (euler_p v0 v1 v2 v3 = eulerA_x x1 x2 x3 x4 x5 x6))`,
62 REWRITE_TAC[LET_DEF;LET_END_DEF;Sphere.euler_p;Sphere.eulerA_x;Sphere.ylist];
63 REPEAT WEAKER_STRIP_TAC;
64 REPEAT (GMATCH_SIMP_TAC POW_2_SQRT);
65 REWRITE_TAC[DIST_POS_LE];
66 MATCH_MP_TAC (arith `b = b' ==> a + b = a + b'`);
67 MATCH_MP_TAC (arith `a = a' /\ b = b' /\ c = c' ==> ra * a + rb * b + rc * c = ra * a' + rb * b' + rc * c'`);
68 REWRITE_TAC[Collect_geom2.DIST_POW2_DOT];
69 REWRITE_TAC[DOT_LSUB;DOT_RSUB];
75 (* was DELTA_IMP_DIH_PI *)
77 let COPLANAR_IMP_DIH_PI = prove_by_refinement(
78 `!(v0:real^3) v1 v2 v3. (let y1 = dist(v0,v1) in
79 let y2 = dist(v0,v2) in
80 let y3 = dist(v0,v3) in
81 let y4 = dist(v2,v3) in
82 let y5 = dist(v1,v3) in
83 let y6 = dist(v1,v2) in
84 (~collinear {v0, v1, v2} /\ ~collinear {v0, v1, v3} /\ coplanar {v0,v1,v2,v3} /\
85 y_of_x delta_x4 y1 y2 y3 y4 y5 y6 < &0 ==>
86 dihV v0 v1 v2 v3 = pi))`,
89 REWRITE_TAC[LET_DEF;LET_END_DEF];
90 REPEAT WEAKER_STRIP_TAC;
91 FIRST_X_ASSUM_ST `coplanar` MP_TAC;
92 GMATCH_SIMP_TAC (GSYM DIHV_EQ_0_PI_EQ_COPLANAR);
94 TYPIFY `(&0 < dihV v0 v1 v2 v3 )` ENOUGH_TO_SHOW_TAC;
96 INTRO_TAC Euler_complement.OJEKOJF2 [`v0`;`v1`;`v2`;`v3`];
97 REWRITE_TAC[LET_DEF;LET_END_DEF];
99 DISCH_THEN SUBST1_TAC;
100 FIRST_X_ASSUM MP_TAC;
101 REWRITE_TAC[Sphere.y_of_x;arith `x*x = x pow 2`];
102 TYPED_ABBREV_TAC `d4 = delta_x4 (dist (v0,v1) pow 2) (dist (v0,v2) pow 2) (dist (v0,v3) pow 2) (dist (v2,v3) pow 2) (dist (v1,v3) pow 2) (dist (v1,v2) pow 2)` ;
104 TYPIFY `!x y. (y < &0 ==> atn2 (x,y) = --(pi / &2) - atn (x / y))` (C SUBGOAL_THEN ASSUME_TAC);
105 BY(MESON_TAC[Trigonometry1.ATN2_BREAKDOWN]);
106 FIRST_X_ASSUM (unlist ASM_SIMP_TAC);
107 MATCH_MP_TAC (arith `&0 < pi /\ -- (pi / &2) < a ==> &0 < pi/ &2 - ( -- (pi/ &2) - a)`);
109 BY(REWRITE_TAC[ATN_BOUNDS])
113 let DIH_IMP_EULER_A_POS = prove_by_refinement(
114 `main_nonlinear_terminal_v11 ==> (!(v0:real^3) v1 v2 v3. (let y1 = dist(v0,v1) in
115 let y2 = dist(v0,v2) in
116 let y3 = dist(v0,v3) in
117 let y4 = dist(v2,v3) in
118 let y5 = dist(v1,v3) in
119 let y6 = dist(v1,v2) in
120 (~collinear {v0,v1,v2} /\ ~collinear {v0,v2,v3} /\ ~collinear{v0,v1,v3} /\
121 dihV v0 v1 v2 v3 + dihV v0 v2 v3 v1 + dihV v0 v3 v1 v2 < &2 * pi /\
122 &2 <= y1 /\ y1 <= &2 * h0 /\
123 &2 <= y2 /\ y2 <= &2 * h0 /\
124 &2 <= y3 /\ y3 <= &2 * h0 /\
125 #3.01 <= y4 /\ y4 <= #3.915 /\
126 #3.01 <= y5 /\ y5 <= #3.915 /\
127 #3.01 <= y6 /\ y6 <= #3.915 ==>
128 y_of_x eulerA_x y1 y2 y3 y4 y5 y6 > &0)))`,
131 REWRITE_TAC[LET_DEF;LET_END_DEF];
132 REPEAT WEAKER_STRIP_TAC;
133 TYPIFY `&0 < delta_y (dist(v0,v1)) (dist(v0,v2)) (dist(v0,v3)) (dist(v2,v3)) (dist(v1,v3)) (dist(v1,v2))` ASM_CASES_TAC;
134 INTRO_TAC Euler_main_theorem.EULER_TRIANGLE [`v0`;`v1`;`v2`;`v3`];
135 REWRITE_TAC[LET_DEF;LET_END_DEF;Sphere.xlist;Sphere.ylist];
137 BY(ASM_REWRITE_TAC[arith `x pow 2 = x * x`;GSYM Sphere.delta_y]);
139 FIRST_X_ASSUM_ST `&2 * pi` MP_TAC;
140 REWRITE_TAC[arith `dd < &2 * pi <=> dd - pi < pi`];
141 ASM_REWRITE_TAC[arith `(a + b+c) -pi = a + b + c - pi`];
142 ASM_REWRITE_TAC[arith `x pow 2 = x * x`;GSYM Sphere.delta_y;arith `pi - u < pi <=> &0 < u`];
143 REWRITE_TAC[ (REWRITE_RULE[LET_DEF;LET_END_DEF] euler_p_eulerA_x)];
144 REWRITE_TAC[arith `x pow 2 = x * x`;GSYM Sphere.y_of_x];
145 TYPED_ABBREV_TAC `p = y_of_x eulerA_x (dist (v0,v1)) (dist (v0,v2)) (dist (v0,v3)) (dist (v2,v3)) (dist (v1,v3)) (dist (v1,v2))` ;
146 REWRITE_TAC[arith `&0 < &2 * x <=> &0 < x`];
147 GMATCH_SIMP_TAC Merge_ineq.ATN2_POS;
149 GMATCH_SIMP_TAC REAL_LT_RSQRT;
150 BY(ASM_TAC THEN REAL_ARITH_TAC);
152 COMMENT "case delta=0";
153 TYPIFY `delta_y (dist (v0,v1)) (dist (v0,v2)) (dist (v0,v3)) (dist (v2,v3)) (dist (v1,v3)) (dist (v1,v2)) = &0` (C SUBGOAL_THEN ASSUME_TAC);
154 INTRO_TAC Terminal.DELTA_Y_POS_4POINTS [`v0`;`v1`;`v2`;`v3`];
155 BY(ASM_TAC THEN REAL_ARITH_TAC);
157 TYPIFY `coplanar {v0,v1,v2,v3}` (C SUBGOAL_THEN ASSUME_TAC);
158 REWRITE_TAC[ONCE_REWRITE_RULE[TAUT `(~a <=> b) <=> (a <=> ~b)`] Oxlzlez.coplanar_delta_y];
159 BY(ASM_TAC THEN REAL_ARITH_TAC);
160 TYPIFY `{v0,v2,v3,v1} = {v0,v1,v2,v3} /\ {v0,v3,v1,v2} = {v0,v1,v2,v3}` (C SUBGOAL_THEN ASSUME_TAC);
162 TYPIFY `{v0,v2,v1} = {v0,v1,v2} /\ {v0,v3,v2} = {v0,v2,v3} /\ {v0,v3,v1} = {v0,v1,v3}` (C SUBGOAL_THEN ASSUME_TAC);
164 INTRO_TAC (Terminal.get_main_nonlinear "7439076204") [`dist(v0,v1)`;`dist(v0,v2)`;`dist(v0,v3)`;`dist(v2,v3)`;`dist(v1,v3)`;`dist(v1,v2)`];
165 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
166 DISCH_THEN MP_TAC THEN ANTS_TAC;
167 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
169 TYPIFY `dihV v0 v1 v2 v3 = pi` (C SUBGOAL_THEN ASSUME_TAC);
170 MATCH_MP_TAC (REWRITE_RULE[LET_THM] COPLANAR_IMP_DIH_PI);
171 BY(ASM_REWRITE_TAC[]);
172 INTRO_TAC (Terminal.get_main_nonlinear "7439076204") [`dist(v0,v2)`;`dist(v0,v3)`;`dist(v0,v1)`;`dist(v3,v1)`;`dist(v2,v1)`;`dist(v2,v3)`];
173 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
174 DISCH_THEN MP_TAC THEN ANTS_TAC;
175 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0;DIST_SYM] THEN REAL_ARITH_TAC);
176 TYPIFY_GOAL_THEN `y_of_x eulerA_x (dist (v0,v2)) (dist (v0,v3)) (dist (v0,v1)) (dist (v3,v1)) (dist (v2,v1)) (dist (v2,v3)) = y_of_x eulerA_x (dist (v0,v1)) (dist (v0,v2)) (dist (v0,v3)) (dist (v2,v3)) (dist (v1,v3)) (dist (v1,v2))` (unlist ASM_REWRITE_TAC);
177 REWRITE_TAC[DIST_SYM;Sphere.y_of_x];
178 BY(MESON_TAC[Merge_ineq.eulerA_x_sym]);
180 TYPIFY `dihV v0 v2 v3 v1 = pi` (C SUBGOAL_THEN ASSUME_TAC);
181 MATCH_MP_TAC (REWRITE_RULE[LET_THM] COPLANAR_IMP_DIH_PI);
182 BY(ASM_REWRITE_TAC[]);
183 INTRO_TAC (Terminal.get_main_nonlinear "7439076204") [`dist(v0,v3)`;`dist(v0,v1)`;`dist(v0,v2)`;`dist(v1,v2)`;`dist(v3,v2)`;`dist(v3,v1)`];
184 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
185 DISCH_THEN MP_TAC THEN ANTS_TAC;
186 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0;DIST_SYM] THEN REAL_ARITH_TAC);
187 TYPIFY_GOAL_THEN `y_of_x eulerA_x (dist (v0,v3)) (dist (v0,v1)) (dist (v0,v2)) (dist (v1,v2)) (dist (v3,v2)) (dist (v3,v1)) = y_of_x eulerA_x (dist (v0,v1)) (dist (v0,v2)) (dist (v0,v3)) (dist (v2,v3)) (dist (v1,v3)) (dist (v1,v2))` (unlist ASM_REWRITE_TAC);
188 REWRITE_TAC[DIST_SYM;Sphere.y_of_x];
189 BY(MESON_TAC[Merge_ineq.eulerA_x_sym]);
191 TYPIFY `dihV v0 v3 v1 v2 = pi` (C SUBGOAL_THEN ASSUME_TAC);
192 MATCH_MP_TAC (REWRITE_RULE[LET_THM] COPLANAR_IMP_DIH_PI);
193 BY(ASM_REWRITE_TAC[]);
194 REPEAT (FIRST_X_ASSUM_ST `dihV` MP_TAC);
200 let ups_x_delta_x = prove_by_refinement(
202 delta_x4 x1 x2 x3 x4 x5 x6 pow 2 + &4 * x1 * delta_x x1 x2 x3 x4 x5 x6 = ups_x x1 x3 x5 * ups_x x1 x2 x6`,
205 REWRITE_TAC[Sphere.delta_x4;Sphere.delta_x;Sphere.ups_x];
212 let derived_form_b = prove_by_refinement(
213 `!b f f' x s. derived_form b f f' x s <=> (b ==> derived_form T f f' x s)`,
216 BY(REWRITE_TAC[Calc_derivative.derived_form])
220 let derived_form_delta_x_wrt_x4 = prove_by_refinement(
222 derived_form T (\q. delta_x x1 x2 x3 q x5 x6) (delta_x4 x1 x2 x3 x4 x5 x6) (x4) (:real)`,
225 REPEAT WEAKER_STRIP_TAC;
226 REWRITE_TAC[Sphere.delta_x4;Sphere.delta_x];
227 DERIVED_TAC (MP_TAC);
228 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
229 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
234 let derived_form_delta_x_wrt_x5 = prove_by_refinement(
236 derived_form T (\q. delta_x x1 x2 x3 x4 q x6) (delta_x5 x1 x2 x3 x4 x5 x6) (x5) (:real)`,
239 REPEAT WEAKER_STRIP_TAC;
240 REWRITE_TAC[Nonlin_def.delta_x5;Sphere.delta_x];
241 DERIVED_TAC (MP_TAC);
242 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
243 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
248 let derived_form_delta_x_wrt_x6 = prove_by_refinement(
250 derived_form T (\q. delta_x x1 x2 x3 x4 x5 q) (delta_x6 x1 x2 x3 x4 x5 x6) (x6) (:real)`,
253 REPEAT WEAKER_STRIP_TAC;
254 REWRITE_TAC[Nonlin_def.delta_x6;Sphere.delta_x];
255 DERIVED_TAC (MP_TAC);
256 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
257 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
262 let derived_form_delta_x4_wrt_x4 = prove_by_refinement(
264 derived_form T (\q. delta_x4 x1 x2 x3 q x5 x6) (-- &2 * x1) (x4) (:real)`,
267 REPEAT WEAKER_STRIP_TAC;
268 REWRITE_TAC[Sphere.delta_x4];
269 DERIVED_TAC (MP_TAC);
270 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
271 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
276 let derived_form_delta_x4_wrt_x5 = prove_by_refinement(
278 derived_form T (\q. delta_x4 x1 x2 x3 x4 q x6) (x1 + x2 - x6) (x5) (:real)`,
281 REPEAT WEAKER_STRIP_TAC;
282 REWRITE_TAC[Sphere.delta_x4];
283 DERIVED_TAC (MP_TAC);
284 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
285 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
290 let derived_form_delta_x4_wrt_x6 = prove_by_refinement(
292 derived_form T (\q. delta_x4 x1 x2 x3 x4 x5 q) (x1 + x3 - x5) (x6) (:real)`,
295 REPEAT WEAKER_STRIP_TAC;
296 REWRITE_TAC[Sphere.delta_x4];
297 DERIVED_TAC (MP_TAC);
298 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
299 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
304 let derived_form_dih_x_wrt_x4 = prove_by_refinement(
307 &0 < delta_x x1 x2 x3 x4 x5 x6 /\
308 &0 < ups_x x1 x2 x6 /\
309 &0 < ups_x x1 x3 x5 ==>
310 derived_form T (\q. dih_x x1 x2 x3 q x5 x6) (sqrt x1 / sqrt (delta_x x1 x2 x3 x4 x5 x6)) (x4) (:real)`,
313 REPEAT WEAKER_STRIP_TAC;
314 TYPED_ABBREV_TAC `w = (sqrt x1 / sqrt (delta_x x1 x2 x3 x4 x5 x6))`;
315 REWRITE_TAC[Sphere.dih_x;LET_THM];
316 DERIVED_TAC (MP_TAC o GEN_ALL o (GENL [`x1:real`;`x2:real`;`x3:real`;`x4:real`;`x5:real`;`x6:real`]));
317 DISCH_THEN (C INTRO_TAC [`(-- &2 * x1)`;`(delta_x4 x1 x2 x3 x4 x5 x6)`;`x1`;`x2`;`x3`;`x4`;`x5`;`x6`]);
318 TYPIFY `&0 < &4 * x1 * delta_x x1 x2 x3 x4 x5 x6` (C SUBGOAL_THEN ASSUME_TAC);
319 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
320 REWRITE_TAC[arith `&0 < &4`];
321 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
322 BY(ASM_REWRITE_TAC[]);
323 TYPIFY `&0 < sqrt(&4 * x1 * delta_x x1 x2 x3 x4 x5 x6)` (C SUBGOAL_THEN ASSUME_TAC);
324 GMATCH_SIMP_TAC REAL_LT_RSQRT;
325 BY(ASM_TAC THEN REAL_ARITH_TAC);
326 ONCE_REWRITE_TAC[derived_form_b];
328 ASM_REWRITE_TAC[derived_form_delta_x4_wrt_x4;derived_form_delta_x_wrt_x4;IN_UNIV;DE_MORGAN_THM];
329 BY(ASM_TAC THEN REAL_ARITH_TAC);
331 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
332 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
333 TYPIFY `(sqrt (&4 * x1 * delta_x x1 x2 x3 x4 x5 x6) pow 2 + --delta_x4 x1 x2 x3 x4 x5 x6 pow 2) = ups_x x1 x3 x5 * ups_x x1 x2 x6 ` (C SUBGOAL_THEN ASSUME_TAC);
334 GMATCH_SIMP_TAC SQRT_POW_2;
335 ASM_SIMP_TAC[arith `&0 < x ==> &0 <= x`];
336 REWRITE_TAC[arith `(-- x) pow 2 = x pow 2`;GSYM ups_x_delta_x];
339 TYPIFY `(((-- &2 * x1) * -- &1) * sqrt (&4 * x1 * delta_x x1 x2 x3 x4 x5 x6) - --delta_x4 x1 x2 x3 x4 x5 x6 * (&4 * x1 * delta_x4 x1 x2 x3 x4 x5 x6) * inv (&2 * sqrt (&4 * x1 * delta_x x1 x2 x3 x4 x5 x6))) = (&2 * x1) * (ups_x x1 x3 x5 * ups_x x1 x2 x6) / sqrt(&4 * x1 * delta_x x1 x2 x3 x4 x5 x6)` (C SUBGOAL_THEN SUBST1_TAC);
340 FIRST_ASSUM ( SUBST1_TAC o GSYM);
341 Calc_derivative.CALC_ID_TAC;
342 BY(ASM_TAC THEN REAL_ARITH_TAC);
343 TYPIFY `((&2 * x1) * (ups_x x1 x3 x5 * ups_x x1 x2 x6) / sqrt (&4 * x1 * delta_x x1 x2 x3 x4 x5 x6)) / (ups_x x1 x3 x5 * ups_x x1 x2 x6) = sqrt(x1) / sqrt(delta_x x1 x2 x3 x4 x5 x6)` (C SUBGOAL_THEN SUBST1_TAC);
344 Calc_derivative.CALC_ID_TAC;
345 TYPIFY `&0 < sqrt(delta_x x1 x2 x3 x4 x5 x6)` (C SUBGOAL_THEN ASSUME_TAC);
346 GMATCH_SIMP_TAC REAL_LT_RSQRT;
347 BY(ASM_TAC THEN REAL_ARITH_TAC);
349 BY(ASM_TAC THEN REAL_ARITH_TAC);
350 TYPIFY `sqrt(&4 * x1 * delta_x x1 x2 x3 x4 x5 x6) = &2 * sqrt(x1) * sqrt(delta_x x1 x2 x3 x4 x5 x6)` (C SUBGOAL_THEN SUBST1_TAC);
351 GMATCH_SIMP_TAC (GSYM SQRT_MUL);
352 TYPIFY `&2 = sqrt(&4)` (C SUBGOAL_THEN SUBST1_TAC);
353 MATCH_MP_TAC Upfzbzm_support_lemmas.SQRT_RULE_Euler_lemma;
356 BY(ASM_TAC THEN REAL_ARITH_TAC);
357 GMATCH_SIMP_TAC (GSYM SQRT_MUL);
358 REWRITE_TAC[arith `&0 <= &4`];
359 GMATCH_SIMP_TAC REAL_LE_MUL;
360 BY(ASM_TAC THEN REAL_ARITH_TAC);
361 TYPIFY `sqrt x1 * sqrt x1 = x1` (C SUBGOAL_THEN MP_TAC);
362 GMATCH_SIMP_TAC (GSYM SQRT_MUL);
363 GMATCH_SIMP_TAC Nonlinear_lemma.sqrtxx;
364 BY(ASM_TAC THEN REAL_ARITH_TAC);
365 TYPED_ABBREV_TAC `s = sqrt(delta_x x1 x2 x3 x4 x5 x6)` ;
366 REWRITE_TAC[arith `((&2 * sx * s) * u) * sx = &2 * (sx * sx) * s * u`];
367 DISCH_THEN SUBST1_TAC;
374 let derived_form_dih_x_wrt_x5 = prove_by_refinement(
377 &0 < delta_x x1 x2 x3 x4 x5 x6 /\
378 &0 < ups_x x1 x2 x6 /\
379 &0 < ups_x x1 x3 x5 ==>
380 derived_form T (\q. dih_x x1 x2 x3 x4 q x6) (--sqrt x1 *
381 delta_x6 x1 x2 x3 x4 x5 x6 /
382 (ups_x x1 x3 x5 * sqrt (delta_x x1 x2 x3 x4 x5 x6))) (x5) (:real)`,
385 REPEAT WEAKER_STRIP_TAC;
386 TYPED_ABBREV_TAC `w = (--sqrt x1 * delta_x6 x1 x2 x3 x4 x5 x6 / (ups_x x1 x3 x5 * sqrt (delta_x x1 x2 x3 x4 x5 x6)))`;
387 REWRITE_TAC[Sphere.dih_x;LET_THM];
388 DERIVED_TAC (MP_TAC o GEN_ALL o (GENL [`x1:real`;`x2:real`;`x3:real`;`x4:real`;`x5:real`;`x6:real`]));
389 DISCH_THEN (C INTRO_TAC [`x1 + x2 - x6`;`(delta_x5 x1 x2 x3 x4 x5 x6)`;`x1`;`x2`;`x3`;`x4`;`x5`;`x6`]);
390 TYPIFY `&0 < &4 * x1 * delta_x x1 x2 x3 x4 x5 x6` (C SUBGOAL_THEN ASSUME_TAC);
391 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
392 REWRITE_TAC[arith `&0 < &4`];
393 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
394 BY(ASM_REWRITE_TAC[]);
395 TYPIFY `&0 < sqrt(&4 * x1 * delta_x x1 x2 x3 x4 x5 x6)` (C SUBGOAL_THEN ASSUME_TAC);
396 GMATCH_SIMP_TAC REAL_LT_RSQRT;
397 BY(ASM_TAC THEN REAL_ARITH_TAC);
398 ONCE_REWRITE_TAC[derived_form_b];
400 ASM_REWRITE_TAC[derived_form_delta_x4_wrt_x5;derived_form_delta_x_wrt_x5;IN_UNIV;DE_MORGAN_THM];
401 BY(ASM_TAC THEN REAL_ARITH_TAC);
403 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
404 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
405 TYPIFY `(sqrt (&4 * x1 * delta_x x1 x2 x3 x4 x5 x6) pow 2 + --delta_x4 x1 x2 x3 x4 x5 x6 pow 2) = ups_x x1 x3 x5 * ups_x x1 x2 x6 ` (C SUBGOAL_THEN ASSUME_TAC);
406 GMATCH_SIMP_TAC SQRT_POW_2;
407 ASM_SIMP_TAC[arith `&0 < x ==> &0 <= x`];
408 REWRITE_TAC[arith `(-- x) pow 2 = x pow 2`;GSYM ups_x_delta_x];
411 TYPIFY `(((x1 + x2 - x6) * -- &1) * sqrt (&4 * x1 * delta_x x1 x2 x3 x4 x5 x6) - --delta_x4 x1 x2 x3 x4 x5 x6 * (&4 * x1 * delta_x5 x1 x2 x3 x4 x5 x6) * inv (&2 * sqrt (&4 * x1 * delta_x x1 x2 x3 x4 x5 x6))) = (-- &4 * x1 * ups_x x1 x2 x6 * delta_x6 x1 x2 x3 x4 x5 x6) / (&2 * sqrt(&4 * x1 * delta_x x1 x2 x3 x4 x5 x6))` (C SUBGOAL_THEN SUBST1_TAC);
412 Calc_derivative.CALC_ID_TAC;
414 BY(ASM_TAC THEN REAL_ARITH_TAC);
415 REWRITE_TAC[arith `(xx * s) * &2 * s = (s * s) * xx * &2`];
416 GMATCH_SIMP_TAC (GSYM SQRT_MUL);
417 ASM_SIMP_TAC[arith `&0 <x ==> &0 <= x`];
418 GMATCH_SIMP_TAC Nonlinear_lemma.sqrtxx;
419 ASM_SIMP_TAC[arith `&0 <x ==> &0 <= x`];
420 TYPED_ABBREV_TAC `sq = sqrt (&4 * x1 * delta_x x1 x2 x3 x4 x5 x6)`;
421 REWRITE_TAC[Sphere.delta_x;Nonlin_def.delta_x4;Nonlin_def.delta_x5;Nonlin_def.delta_x6;Sphere.ups_x];
423 TYPIFY `(-- &4 * x1 * ups_x x1 x2 x6 * delta_x6 x1 x2 x3 x4 x5 x6) / (&2 * sqrt (&4 * x1 * delta_x x1 x2 x3 x4 x5 x6)) / (ups_x x1 x3 x5 * ups_x x1 x2 x6) = -- sqrt x1 * delta_x6 x1 x2 x3 x4 x5 x6 / (ups_x x1 x3 x5 * sqrt(delta_x x1 x2 x3 x4 x5 x6))` (C SUBGOAL_THEN SUBST1_TAC);
424 Calc_derivative.CALC_ID_TAC;
425 TYPIFY `&0 < sqrt(delta_x x1 x2 x3 x4 x5 x6)` (C SUBGOAL_THEN ASSUME_TAC);
426 GMATCH_SIMP_TAC REAL_LT_RSQRT;
427 BY(ASM_TAC THEN REAL_ARITH_TAC);
429 BY(ASM_TAC THEN REAL_ARITH_TAC);
430 TYPIFY `sqrt(&4 * x1 * delta_x x1 x2 x3 x4 x5 x6) = &2 * sqrt(x1) * sqrt(delta_x x1 x2 x3 x4 x5 x6)` (C SUBGOAL_THEN SUBST1_TAC);
431 GMATCH_SIMP_TAC (GSYM SQRT_MUL);
432 TYPIFY `&2 = sqrt(&4)` (C SUBGOAL_THEN SUBST1_TAC);
433 MATCH_MP_TAC Upfzbzm_support_lemmas.SQRT_RULE_Euler_lemma;
436 BY(ASM_TAC THEN REAL_ARITH_TAC);
437 GMATCH_SIMP_TAC (GSYM SQRT_MUL);
438 REWRITE_TAC[arith `&0 <= &4`];
439 GMATCH_SIMP_TAC REAL_LE_MUL;
440 BY(ASM_TAC THEN REAL_ARITH_TAC);
441 TYPIFY `sqrt x1 * sqrt x1 = x1` (C SUBGOAL_THEN MP_TAC);
442 GMATCH_SIMP_TAC (GSYM SQRT_MUL);
443 GMATCH_SIMP_TAC Nonlinear_lemma.sqrtxx;
444 BY(ASM_TAC THEN REAL_ARITH_TAC);
445 TYPED_ABBREV_TAC `s = sqrt(delta_x x1 x2 x3 x4 x5 x6)` ;
446 REWRITE_TAC[arith `((&2 * sx * s) * u) * sx = &2 * (sx * sx) * s * u`];
447 BY(CONV_TAC REAL_RING);
453 let derived_form_dih_x_wrt_x6 = prove_by_refinement(
456 &0 < delta_x x1 x2 x3 x4 x5 x6 /\
457 &0 < ups_x x1 x2 x6 /\
458 &0 < ups_x x1 x3 x5 ==>
459 derived_form T (\q. dih_x x1 x2 x3 x4 x5 q) (--sqrt x1 *
460 delta_x5 x1 x2 x3 x4 x5 x6 /
461 (ups_x x1 x2 x6 * sqrt (delta_x x1 x2 x3 x4 x5 x6))) (x6) (:real)`,
464 REPEAT WEAKER_STRIP_TAC;
465 TYPIFY_GOAL_THEN `!q. dih_x x1 x2 x3 x4 x5 q = dih_x x1 x3 x2 x4 q x5` (unlist REWRITE_TAC);
466 BY(REWRITE_TAC[Nonlinear_lemma.dih_x_sym]);
467 INTRO_TAC derived_form_dih_x_wrt_x5 [`x1`;`x3`;`x2`;`x4`;`x6`;`x5`];
468 TYPIFY `delta_x x1 x3 x2 x4 x6 x5 = delta_x x1 x2 x3 x4 x5 x6` (C SUBGOAL_THEN SUBST1_TAC);
469 BY(ASM_TAC THEN MESON_TAC[Merge_ineq.delta_x_sym]);
471 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
472 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
473 REWRITE_TAC[Nonlin_def.delta_x6;Nonlin_def.delta_x5];
478 let derived_form_num1 = prove_by_refinement(
480 derived_form T (\q. num1 e1 e2 e3 q x5 x6) (&4 * ((&16 - &2 * x4) * e1 + (x5 - &8) * e2 + (x6 - &8) * e3))
484 REPEAT WEAKER_STRIP_TAC;
485 REWRITE_TAC[Sphere.num1];
487 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
488 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
493 let derived_form_dnum1 = prove_by_refinement(
495 derived_form T (\q. num1 e1 e2 e3 q x5 x6) (&4 * dnum1 e1 e2 e3 x4 x5 x6)
499 BY(REWRITE_TAC[Nonlin_def.dnum1;derived_form_num1])
503 let derived_form_sum_dih = prove_by_refinement(
504 `!x1 x2 x3 x4 x5 x6 e1 e2 e3.
505 &0 < x1 /\ &0 < x2 /\ &0 < x3 /\
506 &0 < delta_x x1 x2 x3 x4 x5 x6 /\
507 &0 < ups_x x1 x2 x6 /\
508 &0 < ups_x x1 x3 x5 /\
509 &0 < ups_x x2 x3 x4 ==>
510 derived_form T (\q. e1 * dih_x x1 x2 x3 q x5 x6
511 + e2 * dih_x x2 x3 x1 x5 x6 q
512 + e3 * dih_x x3 x1 x2 x6 q x5) ((e1 * sqrt x1 * ups_x x2 x3 x4 -
513 e2 * sqrt x2 * delta_x6 x1 x2 x3 x4 x5 x6 -
514 e3 * sqrt x3 * delta_x5 x1 x2 x3 x4 x5 x6) /
515 (ups_x x2 x3 x4 * sqrt (delta_x x1 x2 x3 x4 x5 x6))) (x4) (:real)`,
518 REPEAT WEAKER_STRIP_TAC;
519 TYPED_ABBREV_TAC `w = (e1 * sqrt x1 * ups_x x2 x3 x4 - e2 * sqrt x2 * delta_x6 x1 x2 x3 x4 x5 x6 - e3 * sqrt x3 * delta_x5 x1 x2 x3 x4 x5 x6) / (ups_x x2 x3 x4 * sqrt (delta_x x1 x2 x3 x4 x5 x6))`;
520 TYPIFY_GOAL_THEN `!q. e1 * dih_x x1 x2 x3 q x5 x6 + e2 * dih_x x2 x3 x1 x5 x6 q + e3 * dih_x x3 x1 x2 x6 q x5 = e1 * (\q. dih_x x1 x2 x3 q x5 x6) q + e2 * (\q. dih_x x2 x3 x1 x5 x6 q) q + e3 * (\q. dih_x x3 x1 x2 x6 q x5) q` (unlist PURE_REWRITE_TAC);
522 TYPED_ABBREV_TAC `f1 = (\q. dih_x x1 x2 x3 q x5 x6)` ;
523 TYPED_ABBREV_TAC `f2 = (\q. dih_x x2 x3 x1 x5 x6 q)` ;
524 TYPED_ABBREV_TAC `f3 = (\q. dih_x x3 x1 x2 x6 q x5)` ;
525 DERIVED_TAC (MP_TAC o GEN_ALL o (GENL [`x1:real`;`x2:real`;`x3:real`;`x4:real`;`x5:real`;`x6:real`;`e1:real`;`e2:real`;`e3:real`]));
526 DISCH_THEN (C INTRO_TAC [`f1`;`f2`;`f3`]);
528 DISCH_THEN (C INTRO_TAC [`(sqrt x1 / sqrt (delta_x x1 x2 x3 x4 x5 x6))`;`(--sqrt x2 * delta_x5 x2 x3 x1 x5 x6 x4 / (ups_x x2 x3 x4 * sqrt (delta_x x2 x3 x1 x5 x6 x4)))`;` (--sqrt x3 * delta_x6 x3 x1 x2 x6 x4 x5 / (ups_x x3 x2 x4 * sqrt (delta_x x3 x1 x2 x6 x4 x5)))`;`x1`;`x2`;`x3`;`x4`;`x5`;`x6`;`e1`;`e2`;`e3`]);
529 ASM_SIMP_TAC[derived_form_dih_x_wrt_x4];
530 TYPIFY `delta_x x2 x3 x1 x5 x6 x4 = delta_x x1 x2 x3 x4 x5 x6 /\ delta_x x3 x1 x2 x6 x4 x5 = delta_x x1 x2 x3 x4 x5 x6` (C SUBGOAL_THEN ASSUME_TAC);
531 BY(REWRITE_TAC[Merge_ineq.delta_x_sym]);
532 TYPIFY `ups_x x2 x1 x6 = ups_x x1 x2 x6 /\ ups_x x3 x1 x5 = ups_x x1 x3 x5 /\ ups_x x3 x2 x4 = ups_x x2 x3 x4` (C SUBGOAL_THEN ASSUME_TAC);
533 BY(REWRITE_TAC[Merge_ineq.ups_x_sym]);
534 ONCE_REWRITE_TAC[derived_form_b];
539 MATCH_MP_TAC derived_form_dih_x_wrt_x6;
540 BY(ASM_REWRITE_TAC[]);
541 MATCH_MP_TAC derived_form_dih_x_wrt_x5;
542 BY(ASM_REWRITE_TAC[]);
544 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
545 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
547 TYPIFY `delta_x5 x2 x3 x1 x5 x6 x4 = delta_x6 x1 x2 x3 x4 x5 x6` (C SUBGOAL_THEN SUBST1_TAC);
548 REWRITE_TAC[Nonlin_def.delta_x5;Nonlin_def.delta_x6];
550 TYPIFY `delta_x6 x3 x1 x2 x6 x4 x5 = delta_x5 x1 x2 x3 x4 x5 x6` (C SUBGOAL_THEN SUBST1_TAC);
551 REWRITE_TAC[Nonlin_def.delta_x5;Nonlin_def.delta_x6];
553 TYPIFY `&0 < sqrt(delta_x x1 x2 x3 x4 x5 x6)` (C SUBGOAL_THEN ASSUME_TAC);
554 GMATCH_SIMP_TAC REAL_LT_RSQRT;
555 BY(ASM_TAC THEN REAL_ARITH_TAC);
556 TYPIFY `e1 * sqrt x1 / sqrt (delta_x x1 x2 x3 x4 x5 x6) + e2 * --sqrt x2 * delta_x6 x1 x2 x3 x4 x5 x6 / (ups_x x2 x3 x4 * sqrt (delta_x x1 x2 x3 x4 x5 x6)) + e3 * --sqrt x3 * delta_x5 x1 x2 x3 x4 x5 x6 / (ups_x x2 x3 x4 * sqrt (delta_x x1 x2 x3 x4 x5 x6)) = (e1 * sqrt x1 * ups_x x2 x3 x4 - e2 * sqrt x2 * delta_x6 x1 x2 x3 x4 x5 x6 - e3 * sqrt x3 * delta_x5 x1 x2 x3 x4 x5 x6) / (ups_x x2 x3 x4 * sqrt(delta_x x1 x2 x3 x4 x5 x6))` (C SUBGOAL_THEN SUBST1_TAC);
557 Calc_derivative.CALC_ID_TAC;
558 BY(ASM_TAC THEN REAL_ARITH_TAC);
564 let derived_form_sum_dih444 = prove_by_refinement(
566 &0 < x4 /\ x4 < &16 /\
567 &0 < x5 /\ x5 < &16 /\
568 &0 < x6 /\ x6 < &16 /\
569 &0 < delta_x (&4) (&4) (&4) x4 x5 x6 ==>
570 derived_form T (\q. e1 * dih_x (&4) (&4) (&4) q x5 x6
571 + e2 * dih_x (&4) (&4) (&4) x5 x6 q
572 + e3 * dih_x (&4) (&4) (&4) x6 q x5)
573 (( num1 e1 e2 e3 x4 x5 x6 ) / (&2 * x4 * (&16 - x4) * sqrt(delta_x (&4) (&4) (&4) x4 x5 x6))) (x4) (:real)`,
576 REPEAT WEAKER_STRIP_TAC;
577 ONCE_REWRITE_TAC[arith `a / (&2 * b) = (a/ &2) / b`];
578 INTRO_TAC derived_form_sum_dih [`&4`;`&4`;`&4`;`x4`;`x5`;`x6`;`e1`;`e2`;`e3`];
579 TYPIFY_GOAL_THEN `!x. ups_x (&4) (&4) (x) = x * (&16 - x)` (unlist REWRITE_TAC);
580 ASM_REWRITE_TAC[Sphere.ups_x;arith `&0 < &4`];
581 TYPIFY_GOAL_THEN `!x6. -- &4 * &4 - &4 * &4 - x6 * x6 + &2 * &4 * x6 + &2 * &4 * &4 + &2 * &4 * x6 = x6 * (&16- x6)` (unlist REWRITE_TAC);
584 REPEAT (GMATCH_SIMP_TAC REAL_LT_MUL_EQ);
585 BY(ASM_TAC THEN REAL_ARITH_TAC);
586 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
587 REWRITE_TAC[REAL_MUL_AC;Collect_geom2.SQRT4_EQ2];
588 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
589 REWRITE_TAC[Sphere.num1;Nonlin_def.delta_x6;Nonlin_def.delta_x5];
594 let derived_form_sum_dih444sub = prove_by_refinement(
596 &0 < x4 /\ x4 < &16 /\
597 &0 < x5 /\ x5 < &16 /\
598 &0 < x6 /\ x6 < &16 /\
599 &0 < delta_x (&4) (&4) (&4) x4 x5 x6 ==>
600 derived_form T (\q. e1 * dih_x (&4) (&4) (&4) q x5 x6
601 + e2 * dih_x (&4) (&4) (&4) x5 x6 q
602 + e3 * dih_x (&4) (&4) (&4) x6 q x5 - (&1 + const1) * pi)
603 (( num1 e1 e2 e3 x4 x5 x6 ) / (&2 * x4 * (&16 - x4) * sqrt(delta_x (&4) (&4) (&4) x4 x5 x6))) (x4) (:real)`,
606 REPEAT WEAKER_STRIP_TAC;
607 TYPED_ABBREV_TAC `f' = (num1 e1 e2 e3 x4 x5 x6 / (&2 * x4 * (&16 - x4) * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)))`;
608 INTRO_TAC (GEN_ALL Calc_derivative.derived_form_sub) [`T`;`T`;`(\q. e1 * dih_x (&4) (&4) (&4) q x5 x6 + e2 * dih_x (&4) (&4) (&4) x5 x6 q + e3 * dih_x (&4) (&4) (&4) x6 q x5)`;`\ (q:real). (&1 + const1)*pi`;`f'`;`&0`;`x4`;`(:real)`];
609 ASM_REWRITE_TAC[arith `f' - &0 = f'`;arith `(a + b) - c = a + b - c`];
610 DISCH_THEN MATCH_MP_TAC;
612 ASM_SIMP_TAC[derived_form_sum_dih444];
618 let derived_form_tau2D = prove_by_refinement(
620 &0 < x4 /\ x4 < &16 /\
621 &0 < x5 /\ x5 < &16 /\
622 &0 < x6 /\ x6 < &16 /\
623 &0 < delta_x (&4) (&4) (&4) x4 x5 x6 /\
624 num1 e1 e2 e3 x4 x5 x6 = &0 ==>
626 (\q. ( num1 e1 e2 e3 q x5 x6) / (&2 * q * (&16 - q) * sqrt(delta_x (&4) (&4) (&4) q x5 x6)))
627 ((&4 * dnum1 e1 e2 e3 x4 x5 x6) /
628 (&2 * x4 * (&16 - x4) * sqrt(delta_x (&4) (&4) (&4) x4 x5 x6)))
632 REPEAT WEAKER_STRIP_TAC;
633 TYPIFY ` (\q. ( num1 e1 e2 e3 q x5 x6) / (&2 * q * (&16 - q) * sqrt(delta_x (&4) (&4) (&4) q x5 x6))) = (\q. (\q. num1 e1 e2 e3 q x5 x6) q / (\q. &2 * q * (&16 - q) * sqrt(delta_x (&4) (&4) (&4) q x5 x6)) q) ` (C SUBGOAL_THEN SUBST1_TAC);
634 BY(REWRITE_TAC[FUN_EQ_THM]);
635 TYPED_ABBREV_TAC `(f:real->real) = (\q. num1 e1 e2 e3 q x5 x6 )` ;
636 TYPED_ABBREV_TAC `(g:real->real) = (\q. &2 * q * (&16 - q) * sqrt (delta_x (&4) (&4) (&4) q x5 x6))` ;
637 DERIVED_TAC (MP_TAC o GEN_ALL);
638 MP_TAC (diff `(\q. &2 * q * (&16 - q) * sqrt (delta_x (&4) (&4) (&4) q x5 x6))` [Sphere.delta_x] `x4:real` `(:real)`);
641 TYPED_ABBREV_TAC `(g':real) = (&2 * (x4 * ((&16 - x4) * (&4 * (x4 * -- &1 + -- &4 + &4 + &4 - x4 + x5 + x6) + &4 * x5 + &4 * x6 - &4 * &4 - x5 * x6) * inv (&2 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) + -- &1 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) + (&16 - x4) * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)))` ;
642 DISCH_THEN (C INTRO_TAC [`&4 * dnum1 e1 e2 e3 x4 x5 x6`;`f`;`g'`;`g`;`x4`]);
645 REWRITE_TAC[derived_form_dnum1];
647 ASM_REWRITE_TAC[arith `&0 * x = &0 /\ &0 / x = &0 /\ x - &0 = x`];
648 ONCE_REWRITE_TAC[derived_form_b];
649 TYPIFY `~(&2 * x4 * (&16 - x4) * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6) = &0)` (C SUBGOAL_THEN ASSUME_TAC);
650 REWRITE_TAC[REAL_ENTIRE;DE_MORGAN_THM];
651 TYPIFY_GOAL_THEN `~(sqrt(delta_x (&4) (&4) (&4) x4 x5 x6) = &0)` (unlist REWRITE_TAC);
652 GMATCH_SIMP_TAC SQRT_EQ_0;
653 BY(ASM_TAC THEN REAL_ARITH_TAC);
654 BY(ASM_TAC THEN REAL_ARITH_TAC);
656 TYPED_ABBREV_TAC `d = (&2 * x4 * (&16 - x4) * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6))` ;
657 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
658 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
659 Calc_derivative.CALC_ID_TAC;
660 BY(ASM_REWRITE_TAC[])
664 let derived_form_taum_d3_exists = prove_by_refinement(
665 `!x4 x5 x6 e1 e2 e3. ?f'' f'''.
666 &0 < x4 /\ x4 < &16 /\
667 &0 < x5 /\ x5 < &16 /\
668 &0 < x6 /\ x6 < &16 /\
669 &0 < delta_x (&4) (&4) (&4) x4 x5 x6 ==>
670 (!x4. &0 < x4 /\ x4 < &16 /\ &0 < delta_x (&4) (&4) (&4) x4 x5 x6 ==>
672 (\q. ( num1 e1 e2 e3 q x5 x6 ) / (&2 * q * (&16 - q) * sqrt(delta_x (&4) (&4) (&4) q x5 x6))) (f'' x4) (x4) (:real)) /\
673 (derived_form T f'' f''' x4 (:real))`,
677 REPEAT WEAKER_STRIP_TAC;
678 TYPIFY `\q. (((&4 * dnum1 e1 e2 e3 q x5 x6) * &2 * q * (&16 - q) * sqrt (delta_x (&4) (&4) (&4) q x5 x6) - num1 e1 e2 e3 q x5 x6 * &2 * (q * ((&16 - q) * delta_x4 (&4) (&4) (&4) q x5 x6 * inv (&2 * sqrt (delta_x (&4) (&4) (&4) q x5 x6)) + -- &1 * sqrt (delta_x (&4) (&4) (&4) q x5 x6)) + (&16 - q) * sqrt (delta_x (&4) (&4) (&4) q x5 x6))) / (&2 * q * (&16 - q) * sqrt (delta_x (&4) (&4) (&4) q x5 x6)) pow 2)` EXISTS_TAC;
679 TYPIFY `(((((&4 * ((&16 - &2 * x4) * e1 + (x5 - &8) * e2 + (x6 - &8) * e3)) * &2 * (x4 * ((&16 - x4) * delta_x4 (&4) (&4) (&4) x4 x5 x6 * inv (&2 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) + -- &1 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) + (&16 - x4) * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) + (&4 * -- &2 * e1) * &2 * x4 * (&16 - x4) * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) - (num1 e1 e2 e3 x4 x5 x6 * &2 * ((x4 * (((&16 - x4) * (delta_x4 (&4) (&4) (&4) x4 x5 x6 * (&2 * delta_x4 (&4) (&4) (&4) x4 x5 x6 * inv (&2 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6))) * --inv ((&2 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) pow 2) + (-- &2 * &4) * inv (&2 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6))) + -- &1 * delta_x4 (&4) (&4) (&4) x4 x5 x6 * inv (&2 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6))) + -- &1 * delta_x4 (&4) (&4) (&4) x4 x5 x6 * inv (&2 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6))) + (&16 - x4) * delta_x4 (&4) (&4) (&4) x4 x5 x6 * inv (&2 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) + -- &1 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) + (&16 - x4) * delta_x4 (&4) (&4) (&4) x4 x5 x6 * inv (&2 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) + -- &1 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) + (&4 * dnum1 e1 e2 e3 x4 x5 x6) * &2 * (x4 * ((&16 - x4) * delta_x4 (&4) (&4) (&4) x4 x5 x6 * inv (&2 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) + -- &1 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) + (&16 - x4) * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)))) * (&2 * x4 * (&16 - x4) * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) pow 2 - ((&4 * ((&16 - &2 * x4) * e1 + (x5 - &8) * e2 + (x6 - &8) * e3)) * &2 * x4 * (&16 - x4) * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6) - num1 e1 e2 e3 x4 x5 x6 * &2 * (x4 * ((&16 - x4) * delta_x4 (&4) (&4) (&4) x4 x5 x6 * inv (&2 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) + -- &1 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) + (&16 - x4) * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6))) * &2 * (&2 * x4 * (&16 - x4) * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) pow 1 * &2 * (x4 * ((&16 - x4) * delta_x4 (&4) (&4) (&4) x4 x5 x6 * inv (&2 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) + -- &1 * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) + (&16 - x4) * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6))) / (&2 * x4 * (&16 - x4) * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)) pow 4)` EXISTS_TAC;
680 REPEAT WEAKER_STRIP_TAC;
682 REPEAT WEAKER_STRIP_TAC;
684 DERIVED_TAC (MP_TAC o GEN_ALL);
685 DISCH_THEN (C INTRO_TAC [`(&4 * dnum1 e1 e2 e3 x4' x5 x6)`;`e1`;`e2`;`e3`;`delta_x4 (&4) (&4) (&4) x4' x5 x6`;`x5`;`x6`;`x4'`]);
686 REWRITE_TAC[derived_form_dnum1;derived_form_delta_x_wrt_x4];
687 ONCE_REWRITE_TAC[derived_form_b];
689 GMATCH_SIMP_TAC SQRT_EQ_0;
690 BY(ASM_TAC THEN REAL_ARITH_TAC);
692 REWRITE_TAC[Nonlin_def.dnum1];
693 DERIVED_TAC (MP_TAC o GEN_ALL);
694 DISCH_THEN (C INTRO_TAC [`delta_x4 (&4) (&4) (&4) x4 x5 x6`;`delta_x4 (&4) (&4) (&4) x4 x5 x6`;`-- &2 * &4`;`delta_x4 (&4) (&4) (&4) x4 x5 x6`;`delta_x4 (&4) (&4) (&4) x4 x5 x6`;`(&4 * dnum1 e1 e2 e3 x4 x5 x6)`;`e1`;`e2`;`e3`;`delta_x4 (&4) (&4) (&4) x4 x5 x6`;`x5`;`x6`;`x4`]);
695 REWRITE_TAC[derived_form_dnum1;derived_form_delta_x_wrt_x4;derived_form_delta_x4_wrt_x4];
696 ONCE_REWRITE_TAC[derived_form_b];
698 GMATCH_SIMP_TAC SQRT_EQ_0;
699 BY(ASM_TAC THEN REAL_ARITH_TAC);
701 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
702 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
703 BY(REWRITE_TAC[Nonlin_def.dnum1])
707 let delta_y_dim_reduction = prove_by_refinement(
709 (let x6' = &8 * (&1 - (y1 * y1 + y2*y2 - y6*y6)/(&2* y1 * y2)) in
710 let x5' = &8 * (&1 - (y1*y1 + y3*y3 - y5*y5)/(&2 * y1 * y3)) in
711 let x4' = &8 * (&1 - (y2*y2 + y3*y3 - y4*y4)/(&2*y2*y3)) in
712 (~(y1 = &0) /\ ~(y2 = &0) /\ ~(y3 = &0) ==>
713 delta_x (&4) (&4) (&4) x4' x5' x6' = &64 * delta_y y1 y2 y3 y4 y5 y6 / ((y1 * y2 * y3) pow 2)))
717 REWRITE_TAC[LET_THM];
718 REWRITE_TAC[Sphere.delta_x;Sphere.delta_y];
719 BY(CONV_TAC REAL_FIELD)
723 let delta_x_xrr = prove_by_refinement(
725 (~(y1 = &0) /\ ~(y2 = &0) /\ ~(y3 = &0) ==>
726 delta_x (&4) (&4) (&4) (xrr y2 y3 y4) (xrr y1 y3 y5) (xrr y1 y2 y6) =
727 &64 * delta_y y1 y2 y3 y4 y5 y6 / ((y1 *y2 * y3) pow 2))`,
730 REWRITE_TAC[Appendix.xrr];
731 REPEAT WEAKER_STRIP_TAC;
732 BY(ASM_SIMP_TAC[GSYM (REWRITE_RULE[LET_THM] delta_y_dim_reduction)])
736 let delta_x4_dim_reduction = prove_by_refinement(
738 (let x6' = &8 * (&1 - (y1 * y1 + y2*y2 - y6*y6)/(&2* y1 * y2)) in
739 let x5' = &8 * (&1 - (y1*y1 + y3*y3 - y5*y5)/(&2 * y1 * y3)) in
740 let x4' = &8 * (&1 - (y2*y2 + y3*y3 - y4*y4)/(&2*y2*y3)) in
741 (~(y1 = &0) /\ ~(y2 = &0) /\ ~(y3 = &0) ==>
742 delta_x4 (&4) (&4) (&4) x4' x5' x6' = &16 * y_of_x delta_x4 y1 y2 y3 y4 y5 y6 / (y1 * y1 * y2 * y3)))
746 REWRITE_TAC[LET_THM];
747 REWRITE_TAC[Sphere.delta_x4;Sphere.y_of_x];
748 BY(CONV_TAC REAL_FIELD)
752 let dih_x_dim_reduction = prove_by_refinement(
754 (let x6' = &8 * (&1 - (y1 * y1 + y2*y2 - y6*y6)/(&2* y1 * y2)) in
755 let x5' = &8 * (&1 - (y1*y1 + y3*y3 - y5*y5)/(&2 * y1 * y3)) in
756 let x4' = &8 * (&1 - (y2*y2 + y3*y3 - y4*y4)/(&2*y2*y3)) in
757 ((&0 < y1) /\ (&0 < y2) /\ (&0 < y3) /\ &0 < delta_y y1 y2 y3 y4 y5 y6 ==>
758 dih_x (&4) (&4) (&4) x4' x5' x6' = dih_y y1 y2 y3 y4 y5 y6))
762 REWRITE_TAC[Sphere.dih_x;Sphere.dih_y;LET_THM];
763 REPEAT WEAKER_STRIP_TAC;
764 TYPIFY `~(y1 = &0) /\ ~(y2 = &0) /\ ~(y3 = &0)` (C SUBGOAL_THEN ASSUME_TAC);
765 BY(ASM_TAC THEN REAL_ARITH_TAC);
766 ASM_SIMP_TAC[REWRITE_RULE[LET_THM] delta_x4_dim_reduction;REWRITE_RULE[LET_THM] delta_y_dim_reduction];
767 REWRITE_TAC[GSYM Sphere.y_of_x];
768 TYPIFY `sqrt (&4 * &4 * &64 * delta_y y1 y2 y3 y4 y5 y6 / (y1 * y2 * y3) pow 2) = &16 * sqrt (&4 * (y1 * y1) * y_of_x delta_x y1 y2 y3 y4 y5 y6) / (y1 * y1 * y2 * y3)` (C SUBGOAL_THEN SUBST1_TAC);
769 Calc_derivative.CALC_ID_TAC;
771 TYPIFY `&0 < y1 * y1 * y2 * y3` (C SUBGOAL_THEN ASSUME_TAC);
772 REPEAT (GMATCH_SIMP_TAC REAL_LT_MUL);
773 BY(ASM_TAC THEN REAL_ARITH_TAC);
774 TYPIFY `y1 * y1 * y2 * y3 = sqrt((y1 * y1 * y2 * y3) pow 2)` (C SUBGOAL_THEN SUBST1_TAC);
775 GMATCH_SIMP_TAC POW_2_SQRT;
776 BY(ASM_SIMP_TAC[arith `&0 < x ==> &0 <= x`]);
777 GMATCH_SIMP_TAC (GSYM SQRT_MUL);
778 REWRITE_TAC[ REAL_LE_POW_2];
779 GMATCH_SIMP_TAC (arith `&0 <= d/ y ==> &0 <= &4 * &4 * &64 * d / y`);
780 GMATCH_SIMP_TAC REAL_LE_RDIV_EQ;
782 REPEAT (GMATCH_SIMP_TAC REAL_LT_MUL);
783 REWRITE_TAC[GSYM Trigonometry2.NOT_ZERO_EQ_POW2_LT];
784 REWRITE_TAC[REAL_ENTIRE];
785 BY(ASM_TAC THEN REAL_ARITH_TAC);
787 BY(ASM_TAC THEN REAL_ARITH_TAC);
788 TYPIFY `&16 * sqrt (&4 * (y1 * y1) * y_of_x delta_x y1 y2 y3 y4 y5 y6) = sqrt (&16 pow 2 * &4 * (y1 * y1) * y_of_x delta_x y1 y2 y3 y4 y5 y6)` (C SUBGOAL_THEN SUBST1_TAC);
789 TYPIFY `&16 = sqrt(&16 pow 2)` (C SUBGOAL_THEN SUBST1_TAC);
790 REWRITE_TAC[POW_2_SQRT_ABS];
792 GMATCH_SIMP_TAC (GSYM SQRT_MUL);
796 GMATCH_SIMP_TAC (arith `&0 <= x ==> &0 <= &4 * x`);
797 GMATCH_SIMP_TAC REAL_LE_MUL;
798 REWRITE_TAC[ REAL_LE_SQUARE];
799 REWRITE_TAC[Sphere.y_of_x;Sphere.delta_x;GSYM Sphere.delta_y];
800 BY(ASM_TAC THEN REAL_ARITH_TAC);
802 REWRITE_TAC[POW_2_SQRT_ABS];
804 REWRITE_TAC[arith `s - s' = &0 <=> s = s'`];
806 REWRITE_TAC[Sphere.y_of_x;Sphere.delta_x;GSYM Sphere.delta_y];
807 Calc_derivative.CALC_ID_TAC;
808 BY(ASM_REWRITE_TAC[]);
809 TYPED_ABBREV_TAC `dx = y_of_x delta_x y1 y2 y3 y4 y5 y6` ;
810 TYPED_ABBREV_TAC `d4 = y_of_x delta_x4 y1 y2 y3 y4 y5 y6 ` ;
811 TYPED_ABBREV_TAC `s = sqrt(&4 * (y1 * y1) * dx)` ;
812 REWRITE_TAC[arith `&16 * s / y = (&16 / y) * s`];
813 REWRITE_TAC[arith `-- (a * d4) = a * -- d4`];
814 GMATCH_SIMP_TAC Trigonometry1.ATN2_LMUL_EQ;
815 GMATCH_SIMP_TAC REAL_LT_DIV;
816 REPEAT (GMATCH_SIMP_TAC REAL_LT_MUL);
817 BY(ASM_TAC THEN REAL_ARITH_TAC)
821 let KPIDBQH = dih_x_dim_reduction;;
823 let derived_form_xrr = prove_by_refinement(
825 derived_form (&0 < y1 /\ &0 < y2)
826 (\q. xrr y1 y2 q) ((&8 * y6) / (y1 * y2)) y6 (:real)`,
829 REPEAT WEAKER_STRIP_TAC;
830 ASM_CASES_TAC `~(&0 < y1 /\ &0 < y2)`;
831 BY(ASM_REWRITE_TAC[Pent_hex.derived_form_F]);
832 RULE_ASSUM_TAC (REWRITE_RULE[]);
833 ASM_REWRITE_TAC[Appendix.xrr];
835 TYPIFY `~(y1 = &0) /\ ~(y2 = &0) /\ ~(&2 = &0)` (C SUBGOAL_THEN ASSUME_TAC);
836 BY(ASM_TAC THEN REAL_ARITH_TAC);
838 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
839 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
840 Calc_derivative.CALC_ID_TAC;
841 BY(ASM_REWRITE_TAC[])
845 let derived_form_xrr_wrt_y1 = prove_by_refinement(
847 derived_form (&0 < y1 /\ &0 < y2)
848 (\q. xrr q y2 y6) ( -- &4 * ((y1*y1 + y6*y6 - y2*y2)/ (y1 pow 2 * y2))) y1 (:real)`,
851 REPEAT WEAKER_STRIP_TAC;
852 ASM_CASES_TAC `~(&0 < y1 /\ &0 < y2)`;
853 BY(ASM_REWRITE_TAC[Pent_hex.derived_form_F]);
854 RULE_ASSUM_TAC (REWRITE_RULE[]);
855 ASM_REWRITE_TAC[Appendix.xrr];
857 TYPIFY `~(y1 = &0) /\ ~(y2 = &0) /\ ~(&2 = &0)` (C SUBGOAL_THEN ASSUME_TAC);
858 BY(ASM_TAC THEN REAL_ARITH_TAC);
860 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
861 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
862 Calc_derivative.CALC_ID_TAC;
867 let derived_form_xrr_D2 = prove_by_refinement(
869 derived_form (&0 < y1 /\ &0 < y2)
870 (\q. (&8* q) / (y1 *y2)) (&8 / (y1 * y2)) y6 (:real)`,
873 REPEAT WEAKER_STRIP_TAC;
874 ASM_CASES_TAC `~(&0 < y1 /\ &0 < y2)`;
875 BY(ASM_REWRITE_TAC[Pent_hex.derived_form_F]);
876 RULE_ASSUM_TAC (REWRITE_RULE[]);
879 ONCE_REWRITE_TAC[derived_form_b];
881 BY(ASM_TAC THEN REAL_ARITH_TAC);
883 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
884 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
885 Calc_derivative.CALC_ID_TAC;
886 BY(ASM_TAC THEN REAL_ARITH_TAC)
890 let derived_form_xrr_D3 = prove_by_refinement(
892 derived_form (&0 < y1 /\ &0 < y2)
893 (\q. (&8) / (y1 *y2)) (&0) y6 (:real)`,
896 REPEAT WEAKER_STRIP_TAC;
897 ASM_CASES_TAC `~(&0 < y1 /\ &0 < y2)`;
898 BY(ASM_REWRITE_TAC[Pent_hex.derived_form_F]);
899 RULE_ASSUM_TAC (REWRITE_RULE[]);
906 let DRNDRDV = derived_form_xrr;;
908 let derived_form_unique = prove_by_refinement(
910 derived_form T f f' x (:real) /\ derived_form T f f'' x (:real) ==>
914 REWRITE_TAC[Calc_derivative.derived_form;WITHINREAL_UNIV];
915 BY(MESON_TAC[REAL_DERIVATIVE_UNIQUE_ATREAL])
919 let derived_form_chain = prove_by_refinement(
922 derived_form T f f' x (:real) /\
923 derived_form T g g' y (:real) ==>
924 derived_form T (g o f) (g' * f') x (:real)
929 TYPIFY `g o f = \q. g(f(q))` (C SUBGOAL_THEN SUBST1_TAC);
930 BY(REWRITE_TAC[FUN_EQ_THM;o_THM]);
931 REPEAT WEAKER_STRIP_TAC;
932 MP_TAC (GEN_ALL (Calc_derivative.differentiate `(\(q:real). (g:real->real) (f q))` `x:real` `(:real)`));
933 DISCH_THEN (C INTRO_TAC [`g`;`f`;`f'`;`g'`;`x`]);
935 BY(REWRITE_TAC[REAL_MUL_AC])
939 let derived_form_chain_old = prove_by_refinement(
942 derived_form T f f' x (:real) /\
943 derived_form T g g' y (:real) /\
944 derived_form T (g o f) h' x (:real) ==>
950 TYPIFY `g o f = \q. g(f(q))` (C SUBGOAL_THEN SUBST1_TAC);
951 BY(REWRITE_TAC[FUN_EQ_THM;o_THM]);
952 REPEAT WEAKER_STRIP_TAC;
953 MP_TAC (GEN_ALL (Calc_derivative.differentiate `(\(q:real). (g:real->real) (f q))` `x:real` `(:real)`));
954 DISCH_THEN (C INTRO_TAC [`g`;`f`;`f'`;`g'`;`x`]);
957 TYPIFY `h' = f' * g'` (C SUBGOAL_THEN SUBST1_TAC);
958 INTRO_TAC derived_form_unique [`(\q. g (f q))`;`h'`;`f'*g'`;`x`];
959 DISCH_THEN MATCH_MP_TAC;
960 BY(ASM_REWRITE_TAC[]);
965 let xrr_sym = prove_by_refinement(
966 `!y1 y2 y6. xrr y1 y2 y6 = xrr y2 y1 y6`,
969 REWRITE_TAC[Appendix.xrr];
970 REPEAT WEAKER_STRIP_TAC;
971 REWRITE_TAC[REAL_MUL_AC];
972 BY(REWRITE_TAC[arith `x + y -z = (x + y) -z`;REAL_ADD_AC])
976 let taum_compose_xrr = prove_by_refinement(
981 let x5 = xrr y1 y3 y5 in
982 let x6 = xrr y1 y2 y6 in
983 ( &0 < y1 /\ &0 < y2 /\ &0 < y3 /\ &0 < delta_y y1 y2 y3 y4 y5 y6 ==>
984 (\q. taum y1 y2 y3 q y5 y6) y4 =
985 ((\q. e1 * dih_x (&4) (&4) (&4) q x5 x6
986 + e2 * dih_x (&4) (&4) (&4) x5 x6 q
987 + e3 * dih_x (&4) (&4) (&4) x6 q x5 - (&1 + const1) * pi) o
988 (\q. xrr y2 y3 q)) y4))`,
991 REWRITE_TAC[LET_DEF;LET_END_DEF];
992 REWRITE_TAC[o_THM;Nonlinear_lemma.taum_123];
993 REWRITE_TAC[Sphere.rhazim;Sphere.rhazim2;Sphere.rhazim3;Sphere.node2_y;Sphere.node3_y];
994 REPEAT WEAKER_STRIP_TAC;
995 TYPIFY `dih_x (&4) (&4) (&4) (xrr y1 y3 y5) (xrr y1 y2 y6) (xrr y2 y3 y4) = dih_x (&4) (&4) (&4) (xrr y1 y3 y5) (xrr y2 y3 y4) (xrr y2 y1 y6)` (C SUBGOAL_THEN SUBST1_TAC);
996 BY(MESON_TAC[xrr_sym;Nonlinear_lemma.dih_x_sym]);
997 TYPIFY `dih_x (&4) (&4) (&4) (xrr y1 y2 y6) (xrr y2 y3 y4) (xrr y1 y3 y5) = dih_x (&4) (&4) (&4) (xrr y1 y2 y6) (xrr y3 y2 y4) (xrr y3 y1 y5)` (C SUBGOAL_THEN SUBST1_TAC);
998 BY(MESON_TAC[xrr_sym]);
999 REWRITE_TAC[Appendix.xrr];
1000 REPEAT (GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] dih_x_dim_reduction));
1002 REWRITE_TAC[Nonlinear_lemma.dih_y_sym];
1003 FIRST_X_ASSUM MP_TAC;
1004 BY(REWRITE_TAC[Merge_ineq.delta_y_sym;])
1008 let real_open_univ = prove_by_refinement(
1009 `real_open (:real)`,
1012 REWRITE_TAC[real_open;IN_UNIV];
1013 TYPIFY `&1` EXISTS_TAC;
1018 let real_open_empty = prove_by_refinement(
1022 BY(REWRITE_TAC[real_open;NOT_IN_EMPTY])
1026 let real_open_delta_y = prove_by_refinement(
1027 `!y1 y2 y3 y5 y6. real_open {y4 | &0 < y4 /\ &0 < delta_y y1 y2 y3 y4 y5 y6}`,
1030 REPEAT WEAKER_STRIP_TAC;
1031 INTRO_TAC Pent_hex.continuous_preimage_open [`(\q. delta_y y1 y2 y3 q y5 y6)`; `{y4 | &0 < y4}`;`{y | &0 < y}`];
1032 REWRITE_TAC[IN_ELIM_THM;];
1033 DISCH_THEN MATCH_MP_TAC;
1034 TYPIFY_GOAL_THEN `real_open {u | &0 < u}` (unlist REWRITE_TAC);
1035 BY(REWRITE_TAC[arith `a < b <=> b > a`;REAL_OPEN_HALFSPACE_GT]);
1036 REWRITE_TAC[REAL_CONTINUOUS_ON_EQ_CONTINUOUS_WITHIN;IN_ELIM_THM];
1037 REPEAT WEAKER_STRIP_TAC;
1038 MATCH_MP_TAC REAL_CONTINUOUS_ATREAL_WITHINREAL;
1039 MATCH_MP_TAC HAS_REAL_DERIVATIVE_IMP_CONTINUOUS_ATREAL;
1040 TYPIFY `?f. derived_form T (\q. delta_y y1 y2 y3 q y5 y6) f x (:real)` (C SUBGOAL_THEN MP_TAC);
1041 REWRITE_TAC[Sphere.delta_y;Sphere.delta_x];
1042 TYPIFY `((y1 * y1) * ((x * x) * --(x + x) + (x + x) * (--(y1 * y1) + y2 * y2 + y3 * y3 - x * x + y5 * y5 + y6 * y6)) + (y2 * y2) * (y5 * y5) * (x + x) + (y3 * y3) * (y6 * y6) * (x + x) - (y2 * y2) * (y3 * y3) * (x + x) - (x + x) * (y5 * y5) * y6 * y6)` EXISTS_TAC;
1045 BY(REWRITE_TAC[Calc_derivative.derived_form;WITHINREAL_UNIV])
1049 let real_open_ups_y = prove_by_refinement(
1050 `!y1 y2. real_open {y6 | &0 < ups_x (y1*y1) (y2*y2) (y6*y6) }`,
1053 REPEAT WEAKER_STRIP_TAC;
1054 INTRO_TAC Pent_hex.continuous_preimage_open [`(\q. ups_x (y1*y1) (y2*y2) (q*q))`; `(:real)`;`{y | &0 < y}`];
1055 REWRITE_TAC[IN_ELIM_THM;IN_UNIV];
1056 DISCH_THEN MATCH_MP_TAC;
1057 TYPIFY_GOAL_THEN `real_open {u | &0 < u}` (unlist REWRITE_TAC);
1058 BY(REWRITE_TAC[arith `a < b <=> b > a`;REAL_OPEN_HALFSPACE_GT]);
1059 REWRITE_TAC[real_open_univ];
1060 REWRITE_TAC[REAL_CONTINUOUS_ON_EQ_CONTINUOUS_WITHIN;IN_ELIM_THM];
1061 REPEAT WEAKER_STRIP_TAC;
1062 MATCH_MP_TAC REAL_CONTINUOUS_ATREAL_WITHINREAL;
1063 MATCH_MP_TAC HAS_REAL_DERIVATIVE_IMP_CONTINUOUS_ATREAL;
1064 TYPIFY `derived_form T ((\q. ups_x (y1 * y1) (y2 * y2) (q * q))) ((--((x * x) * (x + x) + (x + x) * x * x) + &2 * (y1 * y1) * (x + x) + &2 * (y2 * y2) * (x + x))) x (:real)` (C SUBGOAL_THEN MP_TAC);
1065 REWRITE_TAC[Sphere.ups_x];
1066 DERIVED_TAC (MP_TAC);
1068 (REWRITE_TAC[Calc_derivative.derived_form;WITHINREAL_UNIV]);
1073 let derived_form_local = prove_by_refinement(
1075 derived_form b g g' x (:real) /\
1076 real_open s /\ x IN s /\
1077 (!y. y IN s ==> f y = g y) ==>
1078 derived_form b f g' x (:real)
1082 REWRITE_TAC[Calc_derivative.derived_form;WITHINREAL_UNIV];
1083 REPEAT WEAKER_STRIP_TAC;
1084 MATCH_MP_TAC Arc_properties.HAS_REAL_DERIVATIVE_LOCAL;
1089 let xrr_factor = prove_by_refinement(
1091 &0 < y1 /\ &0 < y2 ==> (xrr y1 y2 y6 = &4 * ((y6 + y2 - y1) * (y6 - y2 + y1))/(y1 * y2))`,
1094 REPEAT WEAKER_STRIP_TAC;
1095 REWRITE_TAC[Appendix.xrr];
1096 Calc_derivative.CALC_ID_TAC;
1097 BY(ASM_TAC THEN REAL_ARITH_TAC)
1101 let xrr_factor_8 = prove_by_refinement(
1103 &0 < y1 /\ &0 < y2 ==> (&16 - xrr y1 y2 y6 = &4* ((y6 + y2 + y1) * ( y2 + y1- y6))/(y1 * y2))`,
1106 REPEAT WEAKER_STRIP_TAC;
1107 REWRITE_TAC[Appendix.xrr];
1108 Calc_derivative.CALC_ID_TAC;
1109 BY(ASM_TAC THEN REAL_ARITH_TAC)
1113 let xrr_pos = prove_by_refinement(
1115 &0 < y1 /\ &0 < y2 /\ y1 < y2 + y6 /\ y2 < y1 + y6 ==> &0 < xrr y1 y2 y6`,
1118 REPEAT WEAKER_STRIP_TAC;
1119 REWRITE_TAC[Appendix.xrr];
1120 MATCH_MP_TAC (arith `&0 < x ==> &0 < &8 * x`);
1121 TYPIFY `&1 - (y1 * y1 + y2 * y2 - y6 * y6) / (&2 * y1 * y2) = ((y6 + y2 - y1) * (y6 - y2 + y1))/(&2 * y1 * y2)` (C SUBGOAL_THEN SUBST1_TAC);
1122 Calc_derivative.CALC_ID_TAC;
1123 BY(ASM_TAC THEN REAL_ARITH_TAC);
1124 GMATCH_SIMP_TAC REAL_LT_RDIV_EQ;
1125 REWRITE_TAC[arith `&0 * x = &0`];
1126 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
1127 REPEAT (GMATCH_SIMP_TAC REAL_LT_MUL_EQ);
1128 BY(ASM_TAC THEN REAL_ARITH_TAC)
1132 let xrr_lt_16 = prove_by_refinement(
1133 `!y1 y2 y6. &0 < y1 /\ &0 < y2 /\ y6 < y1 + y2 /\ &0 < y6 ==> xrr y1 y2 y6 < &16`,
1136 REPEAT WEAKER_STRIP_TAC;
1137 REWRITE_TAC[Appendix.xrr];
1138 MATCH_MP_TAC (arith `&0 < &1 + u ==> &8 * (&1 - u) < &16`);
1139 TYPIFY `&1 + (y1 * y1 + y2 * y2 - y6 * y6) / (&2 * y1 * y2) = ((y6 + y2 + y1) * ( y2 + y1- y6))/(&2 * y1 * y2)` (C SUBGOAL_THEN SUBST1_TAC);
1140 Calc_derivative.CALC_ID_TAC;
1141 BY(ASM_TAC THEN REAL_ARITH_TAC);
1142 GMATCH_SIMP_TAC REAL_LT_RDIV_EQ;
1143 REWRITE_TAC[arith `&0 * x = &0`];
1144 REPEAT (GMATCH_SIMP_TAC REAL_LT_MUL_EQ);
1145 BY(ASM_TAC THEN REAL_ARITH_TAC)
1149 let ups_x_triangle_ineq = prove_by_refinement(
1150 `!y1 y2 y6. &0 < y1 /\ &0 < y2 /\ &0 < y6 ==> (&0 < ups_x (y1*y1) (y2*y2) (y6*y6) <=>
1151 (y1 < y2 + y6 /\ y2 < y1 + y6 /\ y6 < y1 + y2))`,
1154 REPEAT WEAKER_STRIP_TAC;
1155 TYPIFY `ups_x (y1*y1) (y2*y2) (y6*y6) = (y1 - y2 + y6) * (y1 + y2 - y6) * (-- y1 + y2 + y6) * (y1 + y2 + y6) ` (C SUBGOAL_THEN SUBST1_TAC);
1156 REWRITE_TAC[Sphere.ups_x];
1158 REPEAT WEAKER_STRIP_TAC;
1159 REWRITE_TAC[REAL_MUL_POS_LT;arith `x * y < &0 <=> &0 < (--x ) * y`];
1160 ASM_CASES_TAC `y2 < y1 + y6`;
1161 BY(ASM_TAC THEN REAL_ARITH_TAC);
1162 BY(ASM_TAC THEN REAL_ARITH_TAC)
1166 let xrr_bounds = prove_by_refinement(
1167 `!y1 y2 y6. &0 < y1 /\ &0 < y2 /\ &0 < y6 /\ &0 < ups_x (y1*y1) (y2*y2) (y6*y6) ==>
1168 (&0 < xrr y1 y2 y6 /\ xrr y1 y2 y6 < &16)`,
1171 REPEAT WEAKER_STRIP_TAC;
1172 INTRO_TAC ups_x_triangle_ineq [`y1`;`y2`;`y6`];
1174 BY(ASM_REWRITE_TAC[]);
1175 DISCH_THEN (RULE_ASSUM_TAC o (unlist REWRITE_RULE));
1177 MATCH_MP_TAC xrr_pos;
1178 BY(ASM_REWRITE_TAC[]);
1179 MATCH_MP_TAC xrr_lt_16;
1180 BY(ASM_REWRITE_TAC[])
1184 let xrr_bounds_2 = prove_by_refinement(
1185 `!y1 y2 y6. &0 < y1 /\ &0 < y2 /\ &0 < y6 ==> (&0 < ups_x (y1*y1) (y2*y2) (y6*y6) <=>
1186 &0 < xrr y1 y2 y6 /\ xrr y1 y2 y6 < &16)`,
1189 REPEAT WEAKER_STRIP_TAC;
1190 REWRITE_TAC[ (TAUT `(a <=>b) <=> ((a ==> b) /\ (b ==> a) )`)];
1192 BY(ASM_MESON_TAC[xrr_bounds]);
1193 ASM_SIMP_TAC[ups_x_triangle_ineq];
1194 ONCE_REWRITE_TAC[arith `x < &16 <=> &0 < &16- x`];
1195 ASM_SIMP_TAC[xrr_factor_8];
1196 ASM_SIMP_TAC[xrr_factor];
1197 ONCE_REWRITE_TAC[arith `&0 < &4 * x <=> &0 < x`];
1198 REPEAT (GMATCH_SIMP_TAC Trigonometry2.REAL_LT_DIV_0);
1199 TYPIFY_GOAL_THEN `&0 < y1 * y2` (unlist REWRITE_TAC);
1200 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
1201 BY(ASM_REWRITE_TAC[]);
1202 REWRITE_TAC[REAL_MUL_POS_LT];
1203 BY(ASM_TAC THEN REAL_ARITH_TAC)
1207 let xrr_le_16 = prove_by_refinement(
1208 `!y1 y2 y6. &0 < y1 /\ &0 < y2 /\ &0 < y6 /\ &0 < ups_x (y1*y1) (y2*y2) (y6*y6) ==>
1209 xrr y1 y2 y6 <= &16`,
1212 REPEAT WEAKER_STRIP_TAC;
1213 MATCH_MP_TAC (arith `x < y ==> x <= y`);
1214 BY(ASM_MESON_TAC[xrr_bounds_2])
1218 let arclength_xrr = prove_by_refinement(
1219 `!y1 y2 y6. &0 < y1 /\ &0 < y2 /\ &0 < y6 /\ &0 < ups_x (y1*y1) (y2*y2) (y6*y6) ==>
1220 arclength y1 y2 y6 = acs(&1 - xrr y1 y2 y6 / &8)`,
1223 REPEAT WEAKER_STRIP_TAC;
1224 INTRO_TAC ups_x_triangle_ineq [`y1`;`y2`;`y6`];
1226 BY(ASM_REWRITE_TAC[]);
1227 DISCH_THEN (RULE_ASSUM_TAC o (unlist REWRITE_RULE));
1228 REWRITE_TAC[Appendix.xrr];
1229 GMATCH_SIMP_TAC Trigonometry.PQQDENV;
1230 ASM_SIMP_TAC[arith `a < b ==> a <= b`];
1232 BY(ASM_TAC THEN REAL_ARITH_TAC);
1234 Calc_derivative.CALC_ID_TAC;
1235 BY(ASM_TAC THEN REAL_ARITH_TAC)
1239 let TBRMXRZ1 = prove_by_refinement(
1241 derived_form T f f' x (:real) /\
1242 derived_form T g g' y (:real) /\
1243 derived_form T (g o f) h' x (:real) /\
1245 f x = y ==> re_eqvl h' g'`,
1248 REPEAT WEAKER_STRIP_TAC;
1249 INTRO_TAC derived_form_chain_old [`f`;`f'`;`g`;`g'`;`h'`;`x`;`y`];
1251 DISCH_THEN SUBST1_TAC;
1252 REWRITE_TAC[Trigonometry2.re_eqvl];
1253 EXISTS_TAC `f':real`;
1259 let TBRMXRZ2 = prove_by_refinement(
1260 `!P Q f f' f'' g g' g'' h' h'' x y.
1261 (P x) /\ (Q (f x)) /\ (y = f x) /\ &0 < f' x /\ h' x = &0 /\
1262 real_open {x | P x /\ Q (f x) } /\
1263 (!x. derived_form (P x) f (f' x) x (:real)) /\
1264 (!y. derived_form (Q( y)) g (g' y) y (:real)) /\
1265 (!x. derived_form (P x /\ Q (f x)) (g o f) (h' x) x (:real)) /\
1266 derived_form T f' f'' x (:real) /\
1267 derived_form T g' g'' y (:real) /\
1268 derived_form T h' h'' x (:real) ==>
1272 REPEAT WEAKER_STRIP_TAC;
1273 TYPIFY `!x. P x /\ Q (f x) ==> h' x = g' (f x) * f' x` (C SUBGOAL_THEN ASSUME_TAC);
1274 REPEAT WEAKER_STRIP_TAC;
1275 INTRO_TAC derived_form_chain_old [`f`;`f' x'`;`g`;`g' (f x')`;`h' x'`;`x'`;`f x'`];
1276 DISCH_THEN MATCH_MP_TAC;
1278 RULE_ASSUM_TAC(ONCE_REWRITE_RULE[derived_form_b]);
1280 TYPIFY `derived_form T (\q. g' (f q) * f' q) h'' x (:real)` (C SUBGOAL_THEN ASSUME_TAC);
1281 REWRITE_TAC[Calc_derivative.derived_form;WITHINREAL_UNIV];
1282 MATCH_MP_TAC Arc_properties.HAS_REAL_DERIVATIVE_LOCAL;
1283 TYPIFY `h'` EXISTS_TAC;
1285 FIRST_X_ASSUM_ST `derived_form` MP_TAC;
1286 BY(REWRITE_TAC[Calc_derivative.derived_form;WITHINREAL_UNIV]);
1287 TYPIFY `{ x | P x /\ Q (f x)}` EXISTS_TAC;
1288 ASM_REWRITE_TAC[IN_ELIM_THM];
1289 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[]);
1290 MP_TAC (GEN_ALL (Calc_derivative.differentiate `(\(q:real). (g':real->real) (f q) * f' q)` `x:real` `(:real)`));
1291 DISCH_THEN (C INTRO_TAC [`g'`;`f`;`f''`;`f' x`;`g''`;`f'`;`x`]);
1293 TYPIFY_GOAL_THEN `(derived_form T g' g'' (f x) (:real) /\ derived_form T f (f' x) x (:real))` (unlist REWRITE_TAC);
1295 BY(ASM_MESON_TAC[]);
1296 RULE_ASSUM_TAC (ONCE_REWRITE_RULE[derived_form_b]);
1297 FIRST_X_ASSUM MATCH_MP_TAC;
1298 BY(ASM_REWRITE_TAC[]);
1300 INTRO_TAC derived_form_unique [`(\q. g' (f q) * f' q)`;`h''`;`(g' (f x) * f'' + (f' x * g'') * f' x)`;`x`];
1302 DISCH_THEN SUBST1_TAC;
1303 INTRO_TAC TBRMXRZ1 [`f`;`f' x`;`g`;`g' y`;`h' x`;`x`;`y`];
1305 RULE_ASSUM_TAC (ONCE_REWRITE_RULE[derived_form_b]);
1306 BY(ASM_MESON_TAC[]);
1308 RULE_ASSUM_TAC(ONCE_REWRITE_RULE[Leaf_cell.RE_EQVL_SYM]);
1309 FIRST_X_ASSUM MP_TAC;
1310 ASM_REWRITE_TAC[Trigonometry2.re_eqvl];
1311 REPEAT WEAKER_STRIP_TAC;
1313 TYPIFY `f' x * f' x` EXISTS_TAC;
1314 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
1320 let SECOND_CHAIN_GENERAL = prove_by_refinement(
1321 `!P Q f f' f'' g g' g'' x y.
1322 (P x) /\ (Q (f x)) /\ (f x = y) /\
1323 real_open {x | P x /\ Q (f x) } /\
1324 (!x. derived_form (P x) f (f' x) x (:real)) /\
1325 (!y. derived_form (Q( y)) g (g' y) y (:real)) /\
1326 derived_form T f' f'' x (:real) /\
1327 derived_form T g' g'' y (:real) ==>
1328 derived_form T (\q. g' (f q) * f' q) (g' y * f'' + g'' * f' x pow 2 ) x (:real)`,
1331 REPEAT WEAKER_STRIP_TAC;
1332 MP_TAC (GEN_ALL (Calc_derivative.differentiate `(\(q:real). (g':real->real) (f q) * f' q)` `x:real` `(:real)`));
1333 DISCH_THEN (C INTRO_TAC [`g'`;`f`;`f''`;`f' x`;`g''`;`f'`;`x`]);
1335 ONCE_REWRITE_TAC[derived_form_b];
1337 RULE_ASSUM_TAC (ONCE_REWRITE_RULE[derived_form_b]);
1338 BY(ASM_MESON_TAC[]);
1340 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
1341 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
1346 let SECOND_CHAIN_CRITICAL = prove_by_refinement(
1347 `!P Q f f' f'' g g' g'' x y.
1348 (P x) /\ (Q (f x)) /\ (f x = y) /\ g' y = &0 /\
1349 real_open {x | P x /\ Q (f x) } /\
1350 (!x. derived_form (P x) f (f' x) x (:real)) /\
1351 (!y. derived_form (Q( y)) g (g' y) y (:real)) /\
1352 derived_form T f' f'' x (:real) /\
1353 derived_form T g' g'' y (:real) ==>
1354 derived_form T (\q. g' (f q) * f' q) (g'' * (f' x) pow 2) x (:real)`,
1357 REPEAT WEAKER_STRIP_TAC;
1358 MP_TAC (GEN_ALL (Calc_derivative.differentiate `(\(q:real). (g':real->real) (f q) * f' q)` `x:real` `(:real)`));
1359 DISCH_THEN (C INTRO_TAC [`g'`;`f`;`f''`;`f' x`;`g''`;`f'`;`x`]);
1361 ONCE_REWRITE_TAC[derived_form_b];
1363 RULE_ASSUM_TAC (ONCE_REWRITE_RULE[derived_form_b]);
1364 BY(ASM_MESON_TAC[]);
1366 MATCH_MP_TAC (TAUT `(x <=> y) ==> (x ==> y)`);
1367 REPEAT (AP_THM_TAC ORELSE AP_TERM_TAC);
1372 let THIRD_CHAIN_GENERAL = prove_by_refinement(
1373 `!P Q f f' f'' f''' g g' g'' g''' x y.
1374 (P x) /\ (Q (f x)) /\ (f x = y) /\
1375 real_open {x | P x /\ Q (f x) } /\
1376 (!x. derived_form (P x) f (f' x) x (:real)) /\
1377 (!y. derived_form (Q( y)) g (g' y) y (:real)) /\
1378 (!x. derived_form (P x) f' (f'' x) x (:real)) /\
1379 (!y. derived_form (Q y) g' (g'' y) y (:real)) /\
1380 derived_form (P x) f'' f''' x (:real) /\
1381 derived_form (Q y) g'' g''' y (:real)
1383 (?h'''. derived_form T (\ (q:real). (g' (f q) * f'' q + g'' (f q) * f' q pow 2 )) h''' x (:real))`,
1386 REPEAT WEAKER_STRIP_TAC;
1387 TYPIFY `(g' y * f''' + (f' x * g'' y) * f'' x) + g'' y * &2 * f' x pow 1 * f'' x + (f' x * g''') * f' x pow 2` EXISTS_TAC;
1388 MP_TAC (GEN_ALL (Calc_derivative.differentiate `(\ (q:real). (g' ((f:real->real) q) * f'' q + g'' (f q) * f' q pow 2 ))` `x:real` `(:real)`));
1389 DISCH_THEN (C INTRO_TAC [`g'`; `f'''`;`f' x`;`g'' y`; `f''`;`g''`;`f`; `f'' x`;`f' x`;`g'''`;`f'`;`x`]);
1391 ONCE_REWRITE_TAC[derived_form_b];
1393 RULE_ASSUM_TAC (ONCE_REWRITE_RULE[derived_form_b]);
1394 BY(ASM_MESON_TAC[]);
1395 BY(ASM_REWRITE_TAC[])
1399 let SECOND_CHAIN_CONTINUOUS = prove_by_refinement(
1400 `!P Q f f' f'' f''' g g' g'' g''' x y.
1401 (P x) /\ (Q (f x)) /\ (f x = y) /\
1402 real_open {x | P x /\ Q (f x) } /\
1403 (!x. derived_form (P x) f (f' x) x (:real)) /\
1404 (!y. derived_form (Q( y)) g (g' y) y (:real)) /\
1405 (!x. derived_form (P x) f' (f'' x) x (:real)) /\
1406 (!y. derived_form (Q y) g' (g'' y) y (:real)) /\
1407 derived_form (P x) f'' f''' x (:real) /\
1408 derived_form (Q y) g'' g''' y (:real)
1410 (\ (q:real). (g' (f q) * f'' q + g'' (f q) * f' q pow 2 )) real_continuous atreal x`,
1413 REPEAT WEAKER_STRIP_TAC;
1414 MATCH_MP_TAC HAS_REAL_DERIVATIVE_IMP_CONTINUOUS_ATREAL;
1415 INTRO_TAC THIRD_CHAIN_GENERAL [`P`;`Q`;`f`;`f'`;`f''`;`f'''`;`g`;`g'`;`g''`;`g'''`;`x`;`y`];
1417 BY(REWRITE_TAC[Calc_derivative.derived_form;WITHINREAL_UNIV])
1421 let SECOND_DERIVATIVE_TEST_COMPOSE = prove_by_refinement(
1422 `!P Q x y s f f' f'' f''' g g' g'' g'''.
1423 P x /\ Q (f x) /\ (f x = y) /\ &0 < f' x /\
1424 s SUBSET {x | P x /\ Q (f x)} /\
1425 real_open {x | P x /\ Q (f x) } /\
1426 real_open s /\ x IN s /\
1427 (!x'. x' IN s ==> g(f x) <= g(f x') ) /\
1428 (!x. derived_form (P x) f (f' x) x (:real)) /\
1429 (!x. derived_form (P x) f' (f'' x) x (:real)) /\
1430 derived_form (P x) f'' f''' x (:real) /\
1431 (!y. derived_form (Q( y)) g (g' y) y (:real)) /\
1432 (!y. derived_form (Q y) g' (g'' y) y (:real)) /\
1433 derived_form (Q y) g'' g''' y (:real) ==>
1434 (g' y = &0 /\ &0 <= g'' y)
1438 REPEAT WEAKER_STRIP_TAC;
1439 INTRO_TAC Pent_hex.SECOND_DERIVATIVE_TEST [`g o f`;`(\q. g' (f q) * f' q)`;`(\ (q:real). (g' (f q) * f'' q + g'' (f q) * f' q pow 2 ))`;`x`;`s`];
1442 TYPIFY_GOAL_THEN `(\q. g' (f q) * f'' q + g'' (f q) * f' q pow 2) real_continuous atreal x` (unlist REWRITE_TAC);
1443 MATCH_MP_TAC SECOND_CHAIN_CONTINUOUS;
1444 BY(ASM_MESON_TAC[]);
1445 TYPIFY_GOAL_THEN `(!x'. x' IN s ==> (g o f) x <= (g o f) x')` (unlist REWRITE_TAC);
1446 BY(ASM_MESON_TAC[o_THM]);
1448 REPEAT WEAKER_STRIP_TAC;
1449 INTRO_TAC derived_form_chain [`f`;`f' x'`;`g`;`g' (f x')`;`x'`;`f x'`];
1450 RULE_ASSUM_TAC (ONCE_REWRITE_RULE[derived_form_b]);
1452 TYPIFY `P x' /\ Q(f x')` (C SUBGOAL_THEN ASSUME_TAC);
1453 BY(ASM_TAC THEN SET_TAC[]);
1454 BY(ASM_MESON_TAC[]);
1455 BY(REWRITE_TAC[Calc_derivative.derived_form;WITHINREAL_UNIV]);
1456 REPEAT WEAKER_STRIP_TAC;
1457 TYPIFY `P x' /\ Q(f x')` (C SUBGOAL_THEN ASSUME_TAC);
1458 BY(ASM_TAC THEN SET_TAC[]);
1459 INTRO_TAC SECOND_CHAIN_GENERAL [`P`;`Q`;`f`;`f'`;`f'' x'`;`g`;`g'`;`g'' (f x')`;`x'`;`f x'`];
1462 RULE_ASSUM_TAC(ONCE_REWRITE_RULE[derived_form_b]);
1463 BY(ASM_MESON_TAC[]);
1464 BY(ASM_REWRITE_TAC[Calc_derivative.derived_form;WITHINREAL_UNIV]);
1466 REPEAT WEAKER_STRIP_TAC;
1468 FIRST_X_ASSUM_ST `gf = &0` MP_TAC;
1469 REWRITE_TAC[REAL_ENTIRE];
1470 BY(ASM_SIMP_TAC[arith `&0 < f' ==> ~(f' = &0)`]);
1472 FIRST_X_ASSUM_ST `&0 <= stuff` MP_TAC;
1474 ASM_REWRITE_TAC[arith `&0 * x + u = u`];
1475 REPEAT WEAKER_STRIP_TAC;
1476 MATCH_MP_TAC Real_ext.REAL_PROP_NN_RCANCEL;
1477 TYPIFY `f' x pow 2` EXISTS_TAC;
1479 REWRITE_TAC[arith `x pow 2 = x * x`];
1480 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
1481 BY(ASM_REWRITE_TAC[])
1485 let REAL_OPEN_REAL_INTERVAL = prove_by_refinement(
1486 `!a b. real_open(real_interval(a,b))`,
1489 REWRITE_TAC[real_open;IN_REAL_INTERVAL];
1490 REPEAT WEAKER_STRIP_TAC;
1491 TYPIFY `real_min (x - a) (b - x)` EXISTS_TAC;
1492 REWRITE_TAC[real_min];
1494 BY(ASM_TAC THEN REAL_ARITH_TAC);
1495 BY(ASM_TAC THEN REAL_ARITH_TAC)
1499 let delta_y_pos_xrr = prove_by_refinement(
1500 `!y1 y2 y3 y4 y5 y6. &0 < y1 /\ &0 < y2 /\ &0 < y3 ==>
1501 (&0 < delta_y y1 y2 y3 y4 y5 y6 <=>
1502 &0 < delta_x (&4) (&4) (&4) (xrr y2 y3 y4) (xrr y1 y3 y5) (xrr y1 y2 y6)) `,
1505 REPEAT WEAKER_STRIP_TAC;
1506 GMATCH_SIMP_TAC delta_x_xrr;
1507 ASM_SIMP_TAC[arith `&0 < y ==> ~(y= &0)`];
1508 REWRITE_TAC[arith `&0 < &64 * x <=> &0 < x`];
1509 GMATCH_SIMP_TAC Trigonometry2.REAL_LT_DIV_0;
1510 REWRITE_TAC[GSYM Trigonometry2.NOT_ZERO_EQ_POW2_LT];
1511 REWRITE_TAC[REAL_ENTIRE];
1512 BY(ASM_TAC THEN REAL_ARITH_TAC)
1516 let xrr_convert = prove_by_refinement(
1517 `!y1 y2 y3 y5 y6. &0 < y1 /\ &0 < y2 /\ &0 < y3 /\ &0 < y5 /\ &0 < y6 /\
1518 &0 < ups_x (y1*y1) (y3*y3) (y5*y5) /\ &0 < ups_x (y1*y1) (y2*y2) (y6*y6) ==>
1519 { y | &0 < y /\ &0 < xrr y2 y3 y /\ xrr y2 y3 y < &16 /\
1520 &0 < delta_x (&4) (&4) (&4) (xrr y2 y3 y) (xrr y1 y3 y5) (xrr y1 y2 y6)} =
1521 { y | &0 < y /\ &0 < ups_x (y2*y2) (y3*y3) (y*y) /\ &0 < delta_y y1 y2 y3 y y5 y6 }`,
1524 REPEAT WEAKER_STRIP_TAC;
1525 REWRITE_TAC[FUN_EQ_THM;IN_ELIM_THM];
1527 ASM_CASES_TAC `~(&0<x)`;
1528 BY(ASM_REWRITE_TAC[]);
1529 RULE_ASSUM_TAC (REWRITE_RULE[]);
1531 GMATCH_SIMP_TAC (GSYM delta_y_pos_xrr);
1533 ASM_SIMP_TAC[xrr_bounds_2];
1538 let SECOND_DERIVATIVE_TEST_TAUM = prove_by_refinement(
1539 `!a b y1 y2 y3 y4 y5 y6.
1540 y4 IN real_interval (a,b) /\
1541 real_interval (a,b) SUBSET
1542 {y4 | &0 < delta_y y1 y2 y3 y4 y5 y6 /\ &0 < y4 /\ &0 < ups_x (y2*y2) (y3*y3) (y4*y4)} /\
1543 &0 < y1 /\ &0 < y2 /\ &0 < y3 /\ &0 < y5 /\ &0 < y6 /\
1544 &0 < ups_x (y1*y1) (y2*y2) (y6*y6) /\
1545 &0 < ups_x (y1*y1) (y3*y3) (y5*y5) /\
1546 (num1 (rho y1) (rho y2) (rho y3) (xrr y2 y3 y4) (xrr y1 y3 y5) (xrr y1 y2 y6) = &0 ==>
1547 dnum1 (rho y1) (rho y2) (rho y3) (xrr y2 y3 y4) (xrr y1 y3 y5) (xrr y1 y2 y6) < &0) ==>
1548 (?y4'. y4' IN real_interval(a,b) /\ taum y1 y2 y3 y4' y5 y6 < taum y1 y2 y3 y4 y5 y6)`,
1551 REPEAT WEAKER_STRIP_TAC;
1553 RULE_ASSUM_TAC (REWRITE_RULE[NOT_EXISTS_THM;TAUT `~(a /\ b) <=> (a ==> ~b)`]);
1554 RULE_ASSUM_TAC (REWRITE_RULE[arith `~(x < y) <=> y <= x`]);
1555 COMMENT "set up second derivative";
1556 TYPED_ABBREV_TAC `x4 = xrr y2 y3 y4` ;
1557 TYPED_ABBREV_TAC `x5 = xrr y1 y3 y5` ;
1558 TYPED_ABBREV_TAC `x6 = xrr y1 y2 y6` ;
1559 TYPED_ABBREV_TAC `e1 = rho y1` ;
1560 TYPED_ABBREV_TAC `e2 = rho y2` ;
1561 TYPED_ABBREV_TAC `e3 = rho y3` ;
1562 TYPIFY `&0 < y4 /\ &0 < ups_x (y2 * y2) (y3*y3) (y4*y4) /\ &0 < delta_y y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN ASSUME_TAC);
1563 RULE_ASSUM_TAC(REWRITE_RULE[SUBSET;IN_ELIM_THM]);
1564 BY(ASM_MESON_TAC[]);
1565 TYPIFY `&0 < x5 /\ x5 < &16 /\ &0 < x4 /\ x4 < &16 /\ &0 < x6 /\ x6 < &16` (C SUBGOAL_THEN ASSUME_TAC);
1566 BY(ASM_MESON_TAC[xrr_bounds]);
1567 TYPIFY `&0 < delta_x (&4) (&4) (&4) x4 x5 x6` (C SUBGOAL_THEN ASSUME_TAC);
1571 GMATCH_SIMP_TAC delta_x_xrr;
1572 ASM_SIMP_TAC[arith `&0 < y ==> ~(y = &0)`];
1573 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
1574 GMATCH_SIMP_TAC REAL_LT_DIV;
1575 ASM_REWRITE_TAC[arith `&0 < &64`];
1576 REWRITE_TAC[GSYM Trigonometry2.NOT_ZERO_EQ_POW2_LT];
1577 REWRITE_TAC[REAL_ENTIRE];
1578 BY(ASM_TAC THEN REAL_ARITH_TAC);
1579 INTRO_TAC derived_form_taum_d3_exists [`x4`;`x5`;`x6`;`e1`;`e2`;`e3`];
1580 DISCH_THEN (X_CHOOSE_TAC `g'':real->real`);
1581 FIRST_X_ASSUM (X_CHOOSE_TAC `g''':real`);
1582 FIRST_X_ASSUM MP_TAC THEN ANTS_TAC;
1583 BY(ASM_REWRITE_TAC[]);
1584 REPEAT WEAKER_STRIP_TAC;
1585 COMMENT "introduce second derivative test";
1586 INTRO_TAC SECOND_DERIVATIVE_TEST_COMPOSE [`\ (y4:real). &0 < y4` ;`\ (x:real). &0 < x /\ x < &16 /\ &0 < delta_x (&4) (&4) (&4) x x5 x6` ;`y4`;`xrr y2 y3 y4`;`real_interval(a,b)`;`(\q. xrr y2 y3 q)`;`\q. (&8 * q) / (y2*y3)`;`\ (q:real). (&8) / (y2 * y3)`;`&0`;`(\q. e1 * dih_x (&4) (&4) (&4) q x5 x6 + e2 * dih_x (&4) (&4) (&4) x5 x6 q + e3 * dih_x (&4) (&4) (&4) x6 q x5 - (&1 + const1) * pi) `;`(\q. ( num1 e1 e2 e3 q x5 x6) / (&2 * q * (&16 - q) * sqrt(delta_x (&4) (&4) (&4) q x5 x6))) `;`g''`;`g'''`];
1589 ASM_SIMP_TAC[ONCE_REWRITE_RULE[derived_form_b] derived_form_xrr_D3];
1590 ASM_SIMP_TAC[ONCE_REWRITE_RULE[derived_form_b] derived_form_xrr_D2];
1591 ASM_SIMP_TAC[ONCE_REWRITE_RULE[derived_form_b] derived_form_xrr];
1593 GMATCH_SIMP_TAC REAL_LT_DIV;
1594 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
1595 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
1598 REWRITE_TAC[REAL_OPEN_REAL_INTERVAL];
1602 ASM_SIMP_TAC[xrr_convert];
1603 FIRST_X_ASSUM_ST `SUBSET` MP_TAC;
1609 ASM_SIMP_TAC[xrr_convert];
1610 TYPIFY `{x | &0 < x /\ &0 < ups_x (y2 * y2) (y3 * y3) (x * x) /\ &0 < delta_y y1 y2 y3 x y5 y6} = {x | &0 < x /\ &0 < delta_y y1 y2 y3 x y5 y6} INTER {x | &0 < ups_x (y2 * y2) (y3 * y3) (x * x) }` (C SUBGOAL_THEN SUBST1_TAC);
1612 MATCH_MP_TAC REAL_OPEN_INTER;
1613 REWRITE_TAC[real_open_ups_y];
1614 BY(REWRITE_TAC[real_open_delta_y]);
1615 COMMENT "continue working on ants";
1617 REPEAT WEAKER_STRIP_TAC;
1618 FIRST_X_ASSUM_ST `taum` (C INTRO_TAC [`x'`]);
1620 REPEAT (GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] taum_compose_xrr));
1621 ASM_REWRITE_TAC[o_THM];
1622 BY(ASM_TAC THEN SET_TAC[]);
1623 COMMENT "next ants";
1625 ONCE_REWRITE_TAC[derived_form_b];
1626 REPEAT WEAKER_STRIP_TAC;
1627 INTRO_TAC derived_form_xrr [`y2`;`y3`;`x`];
1628 BY(ASM_REWRITE_TAC[]);
1630 ONCE_REWRITE_TAC[derived_form_b];
1631 REPEAT WEAKER_STRIP_TAC;
1632 INTRO_TAC derived_form_xrr_D2 [`y2`;`y3`;`x`];
1633 BY(ASM_REWRITE_TAC[]);
1635 ONCE_REWRITE_TAC[derived_form_b];
1636 REPEAT WEAKER_STRIP_TAC;
1637 BY(ASM_SIMP_TAC[derived_form_sum_dih444sub]);
1638 COMMENT "last conj of ants";
1639 ONCE_REWRITE_TAC[derived_form_b];
1640 REPEAT WEAKER_STRIP_TAC;
1641 FIRST_X_ASSUM MATCH_MP_TAC;
1642 BY(ASM_REWRITE_TAC[]);
1643 COMMENT "clear denominators";
1645 REWRITE_TAC[REAL_DIV_EQ_0];
1646 TYPIFY_GOAL_THEN `~(&2 * x4 * (&16 - x4) * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6) = &0)` (unlist REWRITE_TAC);
1647 REWRITE_TAC[REAL_ENTIRE];
1648 GMATCH_SIMP_TAC SQRT_EQ_0;
1649 BY(ASM_TAC THEN REAL_ARITH_TAC);
1650 REPEAT WEAKER_STRIP_TAC;
1651 FIRST_X_ASSUM_ST `dnum1` MP_TAC;
1653 REWRITE_TAC[arith `~(x < &0) <=> &0 <= x`];
1654 INTRO_TAC derived_form_tau2D [`x4`;`x5`;`x6`;`e1`;`e2`;`e3`];
1657 FIRST_X_ASSUM (C INTRO_TAC [`x4`]);
1660 INTRO_TAC derived_form_unique [`(\q. num1 e1 e2 e3 q x5 x6 / (&2 * q * (&16 - q) * sqrt (delta_x (&4) (&4) (&4) q x5 x6)))`;`g'' x4`;`((&4 * dnum1 e1 e2 e3 x4 x5 x6) / (&2 * x4 * (&16 - x4) * sqrt (delta_x (&4) (&4) (&4) x4 x5 x6)))`;`x4`];
1663 FIRST_X_ASSUM_ST `&0 <= g'' x4` MP_TAC;
1665 GMATCH_SIMP_TAC Trigonometry2.REAL_LE_RDIV_0;
1666 REWRITE_TAC[arith `&0 <= &4 * x <=> &0 <= x`];
1667 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
1668 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
1669 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
1670 GMATCH_SIMP_TAC SQRT_POS_LT;
1671 BY(ASM_TAC THEN REAL_ARITH_TAC)
1675 let FIRST_DERIV_POS_OPEN_COMPOSE = prove_by_refinement(
1676 `!P Q x y f f' f'' g g' g''.
1677 P x /\ Q (f x) /\ (f x = y) /\
1678 real_open {x | P x /\ Q (f x)} /\
1679 (!x. derived_form (P x) f (f' x) x (:real)) /\
1680 (!x. derived_form (P x) f' (f'' x) x (:real)) /\
1681 (!y. derived_form (Q( y)) g (g' y) y (:real)) /\
1682 (!y. derived_form (Q y) g' (g'' y) y (:real))
1684 real_open { x | (P x /\ Q (f x)) /\ &0 < g' (f x) * f' x }
1688 REPEAT WEAKER_STRIP_TAC;
1689 INTRO_TAC Pent_hex.continuous_preimage_open [`(\q. g' (f q) * f' q)`; `{x | P x /\ Q(f x)}`;`{y | &0 < y}`];
1690 ASM_REWRITE_TAC[IN_ELIM_THM];
1691 DISCH_THEN MATCH_MP_TAC;
1692 TYPIFY_GOAL_THEN `real_open {u | &0 < u}` (unlist REWRITE_TAC);
1693 BY(REWRITE_TAC[arith `a < b <=> b > a`;REAL_OPEN_HALFSPACE_GT]);
1694 GMATCH_SIMP_TAC REAL_CONTINUOUS_ON_EQ_REAL_CONTINUOUS_AT;
1695 ASM_REWRITE_TAC[IN_ELIM_THM];
1696 REPEAT WEAKER_STRIP_TAC;
1697 MATCH_MP_TAC HAS_REAL_DERIVATIVE_IMP_CONTINUOUS_ATREAL;
1698 INTRO_TAC SECOND_CHAIN_GENERAL [`P`;`Q`;`f`;`f'`;`f'' x'`;`g`;`g'`;`g'' (f x')`;`x'`;`f x'`];
1701 RULE_ASSUM_TAC (ONCE_REWRITE_RULE[derived_form_b]);
1702 BY(ASM_MESON_TAC[]);
1703 REWRITE_TAC[Calc_derivative.derived_form;WITHINREAL_UNIV];
1708 let real_open_contains_real_interval = prove_by_refinement(
1709 `!x s. x IN s /\ real_open s ==> ?a b. x IN real_interval (a,b) /\ real_interval(a,b) SUBSET s`,
1712 REWRITE_TAC[real_open];
1713 REPEAT WEAKER_STRIP_TAC;
1714 FIRST_X_ASSUM (C INTRO_TAC [`x`]);
1716 REPEAT WEAKER_STRIP_TAC;
1717 GEXISTL_TAC [`x - e`;`x + e`];
1718 REWRITE_TAC[IN_REAL_INTERVAL;SUBSET];
1720 BY(ASM_TAC THEN REAL_ARITH_TAC);
1721 REPEAT WEAKER_STRIP_TAC;
1722 FIRST_X_ASSUM MATCH_MP_TAC;
1723 BY(ASM_TAC THEN REAL_ARITH_TAC)
1727 let FIRST_DERIVATIVE_TEST_TAUM = prove_by_refinement(
1728 `!y1 y2 y3 y4 y5 y6.
1729 &0 < delta_y y1 y2 y3 y4 y5 y6 /\
1736 &0 < ups_x (y1 * y1) (y2 * y2) (y6 * y6) /\
1737 &0 < ups_x (y1 * y1) (y3 * y3) (y5 * y5) /\
1738 &0 < ups_x (y2 * y2) (y3 * y3) (y4* y4) /\
1739 &0 < num1 (rho y1) (rho y2) (rho y3) (xrr y2 y3 y4) (xrr y1 y3 y5) (xrr y1 y2 y6) ==>
1740 (?a b. y4 IN real_interval (a,b) /\
1741 (!y4' y4''. (y4' IN real_interval(a,b) /\ y4'' IN real_interval(a,b) /\ y4' < y4'' ==>
1742 taum y1 y2 y3 y4' y5 y6 < taum y1 y2 y3 y4'' y5 y6)))
1746 REPEAT WEAKER_STRIP_TAC;
1747 REPEAT WEAKER_STRIP_TAC;
1749 RULE_ASSUM_TAC (REWRITE_RULE[NOT_EXISTS_THM;TAUT `!a b. ~(a ==> b) <=> (a /\ ~b)`]);
1750 COMMENT "set up first derivative";
1751 TYPED_ABBREV_TAC `x4 = xrr y2 y3 y4` ;
1752 TYPED_ABBREV_TAC `x5 = xrr y1 y3 y5` ;
1753 TYPED_ABBREV_TAC `x6 = xrr y1 y2 y6` ;
1754 TYPED_ABBREV_TAC `e1 = rho y1` ;
1755 TYPED_ABBREV_TAC `e2 = rho y2` ;
1756 TYPED_ABBREV_TAC `e3 = rho y3` ;
1757 TYPIFY `&0 < x5 /\ x5 < &16 /\ &0 < x4 /\ x4 < &16 /\ &0 < x6 /\ x6 < &16` (C SUBGOAL_THEN ASSUME_TAC);
1758 BY(ASM_MESON_TAC[xrr_bounds]);
1759 TYPIFY `&0 < delta_x (&4) (&4) (&4) x4 x5 x6` (C SUBGOAL_THEN ASSUME_TAC);
1763 GMATCH_SIMP_TAC (GSYM delta_y_pos_xrr);
1764 BY(ASM_REWRITE_TAC[]);
1765 COMMENT "introduce positivity";
1766 INTRO_TAC derived_form_taum_d3_exists [`x4`;`x5`;`x6`;`e1`;`e2`;`e3`];
1767 DISCH_THEN (X_CHOOSE_TAC `g'':real->real`);
1768 FIRST_X_ASSUM (X_CHOOSE_TAC `g''':real`);
1769 FIRST_X_ASSUM MP_TAC THEN ANTS_TAC;
1770 BY(ASM_REWRITE_TAC[]);
1771 REPEAT WEAKER_STRIP_TAC;
1772 INTRO_TAC FIRST_DERIV_POS_OPEN_COMPOSE [`\ (y4:real). &0 < y4` ;`\ (x:real). &0 < x /\ x < &16 /\ &0 < delta_x (&4) (&4) (&4) x x5 x6` ;`y4`;`xrr y2 y3 y4`;`(\q. xrr y2 y3 q)`;`\q. (&8 * q) / (y2*y3)`;`\ (q:real). (&8) / (y2 * y3)`;`(\q. e1 * dih_x (&4) (&4) (&4) q x5 x6 + e2 * dih_x (&4) (&4) (&4) x5 x6 q + e3 * dih_x (&4) (&4) (&4) x6 q x5 - (&1 + const1) * pi) `;`(\q. ( num1 e1 e2 e3 q x5 x6) / (&2 * q * (&16 - q) * sqrt(delta_x (&4) (&4) (&4) q x5 x6))) `;`g''`];
1774 DISCH_THEN MP_TAC THEN ANTS_TAC;
1779 ASM_SIMP_TAC[xrr_convert];
1780 TYPIFY `{x | &0 < x /\ &0 < ups_x (y2 * y2) (y3 * y3) (x * x) /\ &0 < delta_y y1 y2 y3 x y5 y6} = {x | &0 < x /\ &0 < delta_y y1 y2 y3 x y5 y6} INTER {x | &0 < ups_x (y2 * y2) (y3 * y3) (x * x) }` (C SUBGOAL_THEN SUBST1_TAC);
1782 MATCH_MP_TAC REAL_OPEN_INTER;
1783 REWRITE_TAC[real_open_ups_y];
1784 BY(REWRITE_TAC[real_open_delta_y]);
1786 ONCE_REWRITE_TAC[derived_form_b];
1788 REPEAT WEAKER_STRIP_TAC;
1789 BY(ASM_SIMP_TAC[ONCE_REWRITE_RULE[derived_form_b] derived_form_xrr]);
1791 REPEAT WEAKER_STRIP_TAC;
1792 BY(ASM_SIMP_TAC[ONCE_REWRITE_RULE[derived_form_b] derived_form_xrr_D2]);
1794 BY(ASM_REWRITE_TAC[]);
1795 BY(ASM_SIMP_TAC[derived_form_sum_dih444sub]);
1797 TYPED_ABBREV_TAC `s = {x | (&0 < x /\ &0 < xrr y2 y3 x /\ xrr y2 y3 x < &16 /\ &0 < delta_x (&4) (&4) (&4) (xrr y2 y3 x) x5 x6) /\ &0 < num1 e1 e2 e3 (xrr y2 y3 x) x5 x6 / (&2 * xrr y2 y3 x * (&16 - xrr y2 y3 x) * sqrt (delta_x (&4) (&4) (&4) (xrr y2 y3 x) x5 x6)) * (&8 * x) / (y2 * y3)}` ;
1798 TYPIFY `y4 IN s` (C SUBGOAL_THEN ASSUME_TAC);
1800 ASM_REWRITE_TAC[IN_ELIM_THM];
1801 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
1802 GMATCH_SIMP_TAC REAL_LT_DIV;
1804 GMATCH_SIMP_TAC REAL_LT_DIV;
1805 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
1806 REPEAT (GMATCH_SIMP_TAC REAL_LT_MUL_EQ);
1807 GMATCH_SIMP_TAC SQRT_POS_LT;
1809 BY(REPLICATE_TAC 3 (FIRST_X_ASSUM_ST `x < &16` MP_TAC) THEN REAL_ARITH_TAC);
1810 INTRO_TAC real_open_contains_real_interval [`y4`;`s`];
1812 REPEAT WEAKER_STRIP_TAC;
1813 FIRST_X_ASSUM (C INTRO_TAC [`a`;`b`]);
1815 REPEAT WEAKER_STRIP_TAC;
1816 TYPIFY `y4' IN s /\ y4'' IN s` (C SUBGOAL_THEN ASSUME_TAC);
1817 BY(REPLICATE_TAC 10 (FIRST_X_ASSUM MP_TAC) THEN SET_TAC[]);
1818 TYPIFY `real_interval[y4',y4''] SUBSET s` (C SUBGOAL_THEN ASSUME_TAC);
1819 REPEAT (FIRST_X_ASSUM_ST `real_interval:(real#real)->(real->bool)` MP_TAC);
1820 REWRITE_TAC[real_interval;IN_ELIM_THM;SUBSET];
1821 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC);
1822 REPEAT WEAKER_STRIP_TAC;
1823 FIRST_X_ASSUM MATCH_MP_TAC;
1824 BY(REPLICATE_TAC 10 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
1825 COMMENT "introduce MVT";
1826 TYPED_ABBREV_TAC `f = (\q. xrr y2 y3 q)`;
1827 TYPED_ABBREV_TAC `g = (\q. e1 * dih_x (&4) (&4) (&4) q x5 x6 + e2 * dih_x (&4) (&4) (&4) x5 x6 q + e3 * dih_x (&4) (&4) (&4) x6 q x5 - (&1 + const1) * pi) `;
1828 INTRO_TAC REAL_MVT_SIMPLE [`g o f`;`(\x. num1 e1 e2 e3 (xrr y2 y3 x) x5 x6 / (&2 * xrr y2 y3 x * (&16 - xrr y2 y3 x) * sqrt (delta_x (&4) (&4) (&4) (xrr y2 y3 x) x5 x6)) * (&8 * x) / (y2 * y3))`;`y4'`;`y4''`];
1831 REPEAT WEAKER_STRIP_TAC;
1832 MATCH_MP_TAC HAS_REAL_DERIVATIVE_ATREAL_WITHIN;
1833 ONCE_REWRITE_TAC[GSYM WITHINREAL_UNIV];
1835 PURE_ONCE_REWRITE_TAC[GSYM Calc_derivative.derived_form];
1836 MATCH_MP_TAC derived_form_chain;
1837 TYPIFY `f x` EXISTS_TAC;
1841 BY(ASM_SIMP_TAC[ONCE_REWRITE_RULE[derived_form_b] derived_form_xrr]);
1844 MATCH_MP_TAC derived_form_sum_dih444sub;
1846 TYPIFY `x IN s` (C SUBGOAL_THEN MP_TAC);
1847 BY(REPLICATE_TAC 5 (FIRST_X_ASSUM MP_TAC) THEN SET_TAC[]);
1849 REWRITE_TAC[IN_ELIM_THM];
1850 BY(DISCH_THEN (unlist REWRITE_TAC));
1852 REPEAT WEAKER_STRIP_TAC;
1853 COMMENT "u positive";
1854 TYPED_ABBREV_TAC `u = (num1 e1 e2 e3 (xrr y2 y3 x) x5 x6 / (&2 * xrr y2 y3 x * (&16 - xrr y2 y3 x) * sqrt (delta_x (&4) (&4) (&4) (xrr y2 y3 x) x5 x6)) * (&8 * x) / (y2 * y3))`;
1855 TYPIFY `x IN s` (C SUBGOAL_THEN MP_TAC);
1856 (FIRST_X_ASSUM_ST `real_interval:(real#real)->(real->bool)` MP_TAC);
1857 FIRST_X_ASSUM_ST `SUBSET` MP_TAC;
1858 BY(SET_TAC[REAL_INTERVAL_OPEN_SUBSET_CLOSED]);
1860 REWRITE_TAC[IN_ELIM_THM];
1862 TYPIFY `&0 < u` (C SUBGOAL_THEN ASSUME_TAC);
1864 BY(ASM_REWRITE_TAC[]);
1865 REPEAT (GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] taum_compose_xrr));
1867 COMMENT "final kill";
1868 TYPIFY_GOAL_THEN ` (g o f) y4' < (g o f) y4''` (unlist REWRITE_TAC);
1869 ONCE_REWRITE_TAC[arith `g' < g'' <=> &0 < g'' - g'`];
1871 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
1873 BY(REPLICATE_TAC 15 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
1874 TYPIFY `!y. y IN s ==> &0 < delta_y y1 y2 y3 y y5 y6` ENOUGH_TO_SHOW_TAC;
1875 DISCH_THEN (REPEAT o GMATCH_SIMP_TAC);
1876 BY(ASM_REWRITE_TAC[]);
1878 REWRITE_TAC[IN_ELIM_THM];
1879 REPEAT WEAKER_STRIP_TAC;
1880 GMATCH_SIMP_TAC delta_y_pos_xrr;
1881 BY(ASM_REWRITE_TAC[])
1885 let const1_pos = prove_by_refinement(
1889 REWRITE_TAC[GSYM Nonlinear_lemma.sol0_over_pi_EQ_const1];
1890 GMATCH_SIMP_TAC REAL_LT_DIV;
1891 REWRITE_TAC[PI_POS];
1892 MP_TAC Flyspeck_constants.bounds;
1897 let rho_bounds = prove_by_refinement(
1898 `!y. &2 <= y /\ y <= &2 * h0 ==> &1 <= rho y /\ rho y <= &1 + sol0 / pi`,
1901 REWRITE_TAC[Nonlinear_lemma.rho_alt;Nonlinear_lemma.sol0_over_pi_EQ_const1];
1902 REPEAT WEAKER_STRIP_TAC;
1903 ASSUME_TAC const1_pos;
1904 REWRITE_TAC[arith `&1 <= &1 + x <=> &0 <= x`;arith `&1 + c* x <= &1 + c <=> &0 <= c *(&1 - x)`];
1905 GMATCH_SIMP_TAC REAL_LE_MUL;
1906 GMATCH_SIMP_TAC REAL_LE_MUL;
1907 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
1911 let LEMMA_1834976363 = prove_by_refinement(
1912 `main_nonlinear_terminal_v11 ==> (!y1 y2 y3 y4 y5 y6 a b.
1913 &2 <= y1 /\ y1 <= &2 * h0 /\
1914 &2 <= y2 /\ y2 <= &2 * h0 /\
1915 &2 <= y3 /\ y3 <= &2 * h0 /\
1916 (&2 / h0) pow 2 <= xrr y2 y3 y4 /\ xrr y2 y3 y4 <= #15.53 /\
1917 (&2 / h0) pow 2 <= xrr y1 y3 y5 /\
1918 (&2 / h0) pow 2 <= xrr y1 y2 y6 /\
1919 y4 IN real_interval (a,b) /\
1920 real_interval (a,b) SUBSET
1921 {y4 | &0 < delta_y y1 y2 y3 y4 y5 y6 /\ &0 < y4 /\ &0 < ups_x (y2*y2) (y3*y3) (y4*y4)} /\
1922 &0 < y5 /\ &0 < y6 /\
1923 &0 < ups_x (y1*y1) (y2*y2) (y6*y6) /\
1924 &0 < ups_x (y1*y1) (y3*y3) (y5*y5) ==>
1925 (?y4'. y4' IN real_interval(a,b) /\ taum y1 y2 y3 y4' y5 y6 < taum y1 y2 y3 y4 y5 y6))`,
1928 REPEAT WEAKER_STRIP_TAC;
1929 MATCH_MP_TAC SECOND_DERIVATIVE_TEST_TAUM;
1931 ASM_SIMP_TAC[arith `&2 <= y ==> &0 < y`];
1934 INTRO_TAC (Terminal.get_main_nonlinear "1834976363") [`rho y1`;`rho y2`;`rho y3`;`xrr y2 y3 y4`;`xrr y1 y3 y5`;`xrr y1 y2 y6`];
1935 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
1936 REWRITE_TAC[arith `~(&0 > &0) /\ ~(&0 < &0)`;arith `&4 pow 2 = &16`;rho_bounds];
1937 ASM_SIMP_TAC[rho_bounds];
1938 REPEAT (GMATCH_SIMP_TAC (arith `x < y ==> x <= y`));
1939 BY(ASM_MESON_TAC[arith `&2 <= y ==> &0 < y`;xrr_bounds])
1943 let xrr_increasing = prove_by_refinement(
1944 `!y1 y2 y6 y6'. &0 < y1 /\ &0 < y2 /\ &0 <= y6 /\ y6 < y6' ==> xrr y1 y2 y6 < xrr y1 y2 y6'`,
1947 REPEAT WEAKER_STRIP_TAC;
1948 ONCE_REWRITE_TAC[arith `x < y <=> &0 < y - x`];
1949 TYPIFY `xrr y1 y2 y6' - xrr y1 y2 y6 = (&4 / (y1 * y2)) * (y6' * y6' - y6 * y6)` (C SUBGOAL_THEN SUBST1_TAC);
1950 REWRITE_TAC[Appendix.xrr];
1951 Calc_derivative.CALC_ID_TAC;
1952 BY(ASM_TAC THEN REAL_ARITH_TAC);
1953 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
1954 GMATCH_SIMP_TAC REAL_LT_DIV;
1955 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
1956 ONCE_REWRITE_TAC[arith `&0 < y - x <=> x < y`];
1957 GMATCH_SIMP_TAC Misc_defs_and_lemmas.ABS_SQUARE;
1958 BY(ASM_TAC THEN REAL_ARITH_TAC)
1962 let xrr_decreasing = prove_by_refinement(
1963 `!y1 y1' y2 y6. &2 <= y1 /\ &2 <= y1' /\ &2 <= y2 /\ &2 <= y6 /\ y2 <= &2 * h0 /\ y1 <= y1' ==>
1964 xrr y1' y2 y6 <= xrr y1 y2 y6`,
1967 REPEAT WEAKER_STRIP_TAC;
1968 TYPIFY `y1 = y1'` ASM_CASES_TAC;
1969 BY(ASM_REWRITE_TAC[arith `x <= x`]);
1970 INTRO_TAC REAL_MVT_SIMPLE [`(\q. xrr q y2 y6)`;`\q. ( -- &4 * ((q*q + y6*y6 - y2*y2)/ (q pow 2 * y2)))`;`y1`;`y1'`];
1971 REWRITE_TAC[IN_REAL_INTERVAL];
1974 BY(ASM_TAC THEN REAL_ARITH_TAC);
1975 REPEAT WEAKER_STRIP_TAC;
1976 MATCH_MP_TAC HAS_REAL_DERIVATIVE_ATREAL_WITHIN;
1977 INTRO_TAC derived_form_xrr_wrt_y1 [`x`;`y2`;`y6`];
1978 REWRITE_TAC[Calc_derivative.derived_form;WITHINREAL_UNIV];
1979 DISCH_THEN MATCH_MP_TAC;
1980 BY(ASM_TAC THEN REAL_ARITH_TAC);
1981 REPEAT WEAKER_STRIP_TAC;
1982 ONCE_REWRITE_TAC [arith `x <= y <=> &0 <= y - x`];
1983 RULE_ASSUM_TAC(ONCE_REWRITE_RULE[arith `x' - x = (-- &4 * u/v) * z <=> x - x' = &4 * u/ v * z`]);
1985 GMATCH_SIMP_TAC REAL_LE_MUL;
1986 GMATCH_SIMP_TAC REAL_LE_MUL;
1987 GMATCH_SIMP_TAC REAL_LE_DIV;
1988 GMATCH_SIMP_TAC REAL_LE_MUL;
1989 REWRITE_TAC[ REAL_LE_POW_2];
1990 ENOUGH_TO_SHOW_TAC ` &0 <= x * x + y6 * y6 - y2 * y2`;
1991 BY(ASM_TAC THEN REAL_ARITH_TAC);
1992 MATCH_MP_TAC REAL_LE_TRANS;
1993 TYPIFY `&2 * &2 + &2 * &2 - (&2 * h0) * (&2 * h0)` EXISTS_TAC;
1995 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
1996 MATCH_MP_TAC (arith `x <= x' /\ y <= y' /\ z' <= z ==> x + y - z <= x' + y' - z'`);
1997 GMATCH_SIMP_TAC Misc_defs_and_lemmas.ABS_SQUARE_LE;
1998 GMATCH_SIMP_TAC Misc_defs_and_lemmas.ABS_SQUARE_LE;
1999 GMATCH_SIMP_TAC Misc_defs_and_lemmas.ABS_SQUARE_LE;
2000 BY(ASM_TAC THEN REAL_ARITH_TAC)
2004 let xrr_simple_lower_bound = prove_by_refinement(
2005 `!y1 y2 y6 y6inf. &2 <= y1 /\ y1 <= &2 * h0 /\ &2 <= y2 /\ y2 <= &2 * h0 /\
2006 &2 <= y6inf /\ y6inf <= y6 ==> (y6inf/ h0) pow 2 <= xrr y1 y2 y6`,
2009 REPEAT WEAKER_STRIP_TAC;
2010 MATCH_MP_TAC REAL_LE_TRANS;
2011 TYPIFY `xrr (&2 * h0) y2 y6` EXISTS_TAC;
2013 MATCH_MP_TAC xrr_decreasing;
2014 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2015 MATCH_MP_TAC REAL_LE_TRANS;
2016 TYPIFY `xrr (&2 * h0) (&2 * h0) y6` EXISTS_TAC;
2018 ONCE_REWRITE_TAC[xrr_sym];
2019 MATCH_MP_TAC xrr_decreasing;
2020 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2021 MATCH_MP_TAC REAL_LE_TRANS;
2022 TYPIFY `xrr (&2 * h0) (&2 * h0) y6inf` EXISTS_TAC;
2024 TYPIFY `y6inf = y6` ASM_CASES_TAC;
2025 BY(ASM_REWRITE_TAC[arith `x <= x`]);
2026 MATCH_MP_TAC (arith (`x < y ==> x <= y`));
2027 MATCH_MP_TAC xrr_increasing;
2028 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2029 REWRITE_TAC[Appendix.xrr];
2030 MATCH_MP_TAC (arith `x = y ==> x <= y`);
2031 Calc_derivative.CALC_ID_TAC;
2032 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2036 let xrr_simple_upper_bound = prove_by_refinement(
2037 `!y1 y2 y6 y6sup. &2 <= y1 /\ y1 <= &2 * h0 /\ &2 <= y2 /\ y2 <= &2 * h0 /\
2038 &2 <= y6 /\ y6 <= y6sup /\ y6sup < &4 ==> xrr y1 y2 y6 <= y6sup pow 2`,
2041 REPEAT WEAKER_STRIP_TAC;
2042 MATCH_MP_TAC REAL_LE_TRANS;
2043 TYPIFY `xrr (&2) y2 y6` EXISTS_TAC;
2045 MATCH_MP_TAC xrr_decreasing;
2046 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2047 MATCH_MP_TAC REAL_LE_TRANS;
2048 TYPIFY `xrr (&2) (&2) y6` EXISTS_TAC;
2050 ONCE_REWRITE_TAC[xrr_sym];
2051 MATCH_MP_TAC xrr_decreasing;
2052 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2053 MATCH_MP_TAC REAL_LE_TRANS;
2054 TYPIFY `xrr (&2) (&2) y6sup` EXISTS_TAC;
2056 TYPIFY `y6sup = y6` ASM_CASES_TAC;
2057 BY(ASM_REWRITE_TAC[arith `x <= x`]);
2058 MATCH_MP_TAC (arith (`x < y ==> x <= y`));
2059 MATCH_MP_TAC xrr_increasing;
2060 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2061 REWRITE_TAC[Appendix.xrr];
2062 MATCH_MP_TAC (arith `x = y ==> x <= y`);
2063 Calc_derivative.CALC_ID_TAC;
2068 let NUM1_GENERIC = prove_by_refinement(
2069 ` (!x4inf x4sup x5inf x5sup x6inf x6sup y1 y2 y3 y4 y5 y6.
2072 (&1 , rho y1, &1 + sol0/ pi);
2073 (&1 , rho y2, &1 + sol0/ pi);
2074 (&1 , rho y3, &1 + sol0/ pi);
2075 (x4inf, xrr y2 y3 y4, x4sup);
2076 (x5inf, xrr y1 y3 y5, x5sup);
2077 (x6inf, xrr y1 y2 y6, x6sup)
2079 ((num1 (rho y1) (rho y2) (rho y3) (xrr y2 y3 y4) (xrr y1 y3 y5) (xrr y1 y2 y6) ) > &0) /\
2080 &2 <= y1 /\ y1 <= &2 * h0 /\
2081 &2 <= y2 /\ y2 <= &2 * h0 /\
2082 &2 <= y3 /\ y3 <= &2 * h0 /\
2083 x4inf <= xrr y2 y3 y4 /\ xrr y2 y3 y4 <= x4sup /\
2084 x5inf <= xrr y1 y3 y5 /\ xrr y1 y3 y5 <= x5sup /\
2085 x6inf <= xrr y1 y2 y6 /\ xrr y1 y2 y6 <= x6sup /\
2086 &0 < y4 /\ &0 < y5 /\ &0 < y6 /\
2087 &0 < delta_y y1 y2 y3 y4 y5 y6 /\
2088 &0 < ups_x (y2 * y2) (y3 * y3) (y4* y4) /\
2089 &0 < ups_x (y1*y1) (y2*y2) (y6*y6) /\
2090 &0 < ups_x (y1*y1) (y3*y3) (y5*y5) ==>
2091 (?a b. y4 IN real_interval (a,b) /\
2092 (!y4' y4''. (y4' IN real_interval(a,b) /\ y4'' IN real_interval(a,b) /\ y4' < y4'' ==>
2093 taum y1 y2 y3 y4' y5 y6 < taum y1 y2 y3 y4'' y5 y6))))`,
2096 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
2097 REPEAT WEAKER_STRIP_TAC;
2098 FIRST_X_ASSUM_ST `num1` MP_TAC;
2101 BY(ASM_MESON_TAC[rho_bounds]);
2103 MATCH_MP_TAC FIRST_DERIVATIVE_TEST_TAUM;
2105 BY(ASM_SIMP_TAC[arith `n > &0 ==> &0 < n`;arith `&2 <= y ==> &0 < y`])
2109 let LEMMA_4828966562 = prove_by_refinement(
2110 `main_nonlinear_terminal_v11 ==>
2111 (!y1 y2 y3 y4 y5 y6.
2112 &2 <= y1 /\ y1 <= &2 * h0 /\
2113 &2 <= y2 /\ y2 <= &2 * h0 /\
2114 &2 <= y3 /\ y3 <= &2 * h0 /\
2115 &2 <= y4 /\ y4 <= &2 * h0 /\
2116 &2 <= y5 /\ y5 <= #3.01 /\
2118 &0 < delta_y y1 y2 y3 y4 y5 y6 /\
2119 // &0 < ups_x (y2 * y2) (y3 * y3) (y4* y4) /\
2120 // &0 < ups_x (y1*y1) (y3*y3) (y5*y5) /\
2121 &0 < ups_x (y1*y1) (y2*y2) (y6*y6) ==>
2122 (?a b. y4 IN real_interval (a,b) /\
2123 (!y4' y4''. (y4' IN real_interval(a,b) /\ y4'' IN real_interval(a,b) /\ y4' < y4'' ==>
2124 taum y1 y2 y3 y4' y5 y6 < taum y1 y2 y3 y4'' y5 y6))))`,
2127 REPEAT WEAKER_STRIP_TAC;
2128 MATCH_MP_TAC NUM1_GENERIC;
2129 GEXISTL_TAC [ `(&2/h0) pow 2`;`(&2 * h0) pow 2`;`(&2/h0) pow 2 `;`#3.01 pow 2`;`#2.38 pow 2`;`#16.0`];
2130 INTRO_TAC (Terminal.get_main_nonlinear "4828966562") [`xrr y2 y3 y4`;`xrr y1 y3 y5`;`xrr y1 y2 y6`;`rho y1`;`rho y2`;`rho y3`];
2131 DISCH_THEN (unlist REWRITE_TAC);
2133 TYPIFY `&0 < ups_x (y2 * y2) (y3 * y3) (y4 * y4) /\ &0 < ups_x (y1 * y1) (y3 * y3) (y5 * y5)` (C SUBGOAL_THEN ASSUME_TAC);
2134 REPEAT (GMATCH_SIMP_TAC Ysskqoy.TRI_UPS_X_STRICT_POS);
2135 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2137 REPEAT (GMATCH_SIMP_TAC xrr_simple_lower_bound);
2139 REPEAT (GMATCH_SIMP_TAC xrr_simple_upper_bound);
2140 ASM_REWRITE_TAC[arith `#16.0 = &16`];
2141 GMATCH_SIMP_TAC xrr_le_16;
2142 TYPIFY_GOAL_THEN `#2.38 pow 2 <= xrr y1 y2 y6` (unlist REWRITE_TAC);
2143 MATCH_MP_TAC REAL_LE_TRANS;
2144 TYPIFY `(&3 / h0) pow 2` EXISTS_TAC;
2146 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2147 GMATCH_SIMP_TAC xrr_simple_lower_bound;
2148 BY(ASM_TAC THEN REAL_ARITH_TAC);
2150 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2154 let LEMMA_6843920790 = prove_by_refinement(
2155 `main_nonlinear_terminal_v11 ==>
2156 (!y1 y2 y3 y4 y5 y6.
2157 &2 <= y1 /\ y1 <= &2 * h0 /\
2158 &2 <= y2 /\ y2 <= &2 * h0 /\
2159 &2 <= y3 /\ y3 <= &2 * h0 /\
2160 &2 <= y4 /\ y4 <= #3.01 /\
2161 &3 <= y5 /\ xrr y1 y3 y5 <= #15.53 /\
2162 &3 <= y6 /\ xrr y1 y2 y6 <= #15.53 /\
2163 &0 < delta_y y1 y2 y3 y4 y5 y6
2165 (?a b. y4 IN real_interval (a,b) /\
2166 (!y4' y4''. (y4' IN real_interval(a,b) /\ y4'' IN real_interval(a,b) /\ y4' < y4'' ==>
2167 taum y1 y2 y3 y4' y5 y6 < taum y1 y2 y3 y4'' y5 y6))))`,
2170 REPEAT WEAKER_STRIP_TAC;
2171 MATCH_MP_TAC NUM1_GENERIC;
2172 GEXISTL_TAC [ `(&2/h0) pow 2`;`#3.01 pow 2`;`(#2.38) pow 2 `;`#15.53`;`#2.38 pow 2`;`#15.53`];
2173 INTRO_TAC (Terminal.get_main_nonlinear "6843920790") [`xrr y2 y3 y4`;`xrr y1 y3 y5`;`xrr y1 y2 y6`;`rho y1`;`rho y2`;`rho y3`];
2174 DISCH_THEN (unlist REWRITE_TAC);
2176 REPEAT (GMATCH_SIMP_TAC xrr_simple_lower_bound);
2178 REPEAT (GMATCH_SIMP_TAC xrr_simple_upper_bound);
2180 TYPIFY_GOAL_THEN `#2.38 pow 2 <= xrr y1 y2 y6` (ASSUME_TAC);
2181 MATCH_MP_TAC REAL_LE_TRANS;
2182 TYPIFY `(&3 / h0) pow 2` EXISTS_TAC;
2184 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2185 GMATCH_SIMP_TAC xrr_simple_lower_bound;
2186 BY(ASM_TAC THEN REAL_ARITH_TAC);
2187 TYPIFY_GOAL_THEN `#2.38 pow 2 <= xrr y1 y3 y5` (ASSUME_TAC);
2188 MATCH_MP_TAC REAL_LE_TRANS;
2189 TYPIFY `(&3 / h0) pow 2` EXISTS_TAC;
2191 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2192 GMATCH_SIMP_TAC xrr_simple_lower_bound;
2193 BY(ASM_TAC THEN REAL_ARITH_TAC);
2194 TYPIFY `&0 < ups_x (y2 * y2) (y3 * y3) (y4 * y4) ` (C SUBGOAL_THEN ASSUME_TAC);
2195 REPEAT (GMATCH_SIMP_TAC Ysskqoy.TRI_UPS_X_STRICT_POS);
2196 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2198 REPEAT (GMATCH_SIMP_TAC xrr_bounds_2);
2199 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2204 (* RETURN TO PENT HEX CASES *)
2208 let is_scs_funlist_basic = prove_by_refinement(
2209 `!k d a0 b0 a b . d < #0.9 /\ 3 <= k /\ k <= 6 /\
2210 (!i j. i < j /\ j < k ==> funlist_v39 a a0 k i j <= funlist_v39 b b0 k i j) /\
2211 (!i j. i < j /\ j < k ==> &2 <= funlist_v39 a a0 k i j) /\
2212 (!i. i < 3 /\ k = 3 ==> funlist_v39 b b0 k i (SUC i) < &4) /\
2213 (!i. i < k /\ 3 < k ==> funlist_v39 b b0 k i (SUC i) <= cstab) /\
2216 (&2 * h0 < funlist_v39 b b0 k i (SUC i) \/
2217 &2 < funlist_v39 a a0 k i (SUC i))} +
2219 is_scs_v39 (scs_v39 (k,d,
2220 funlist_v39 a a0 k,funlist_v39 a a0 k,
2221 funlist_v39 b b0 k,funlist_v39 b b0 k,
2222 (\i j. F),{},{},{}))`,
2225 REPEAT WEAKER_STRIP_TAC;
2226 ONCE_REWRITE_TAC[GSYM Terminal.funlistA_empty];
2227 MATCH_MP_TAC Terminal.is_scs_funlist;
2228 ASM_REWRITE_TAC[Appendix.periodic_empty];
2229 BY(REWRITE_TAC[Terminal.funlistA_empty])
2233 let periodic2_cs_adj = prove_by_refinement(
2234 `!k r r'. periodic2(cs_adj k r r') k`,
2237 REPEAT WEAKER_STRIP_TAC;
2238 REWRITE_TAC[LET_DEF;LET_END_DEF;Appendix.periodic2;Appendix.cs_adj];
2239 TYPIFY `!i. (i + k) MOD k = i MOD k` (C SUBGOAL_THEN ASSUME_TAC);
2241 ONCE_REWRITE_TAC[arith `i + (k:num) = 1 * k + i`];
2242 BY(REWRITE_TAC[MOD_MULT_ADD]);
2243 REPEAT WEAKER_STRIP_TAC;
2244 BY(ASM_REWRITE_TAC[arith `SUC (i + k) = (SUC i + k)`])
2248 let is_scs_adj = prove_by_refinement(
2249 `!k d r r' s s'. d < #0.9 /\ 3 <= k /\ k <= 6 /\ (k = 3 ==> s < &4) /\ (3 < k ==> s <= cstab) /\
2250 (&2 <= r ) /\ (&2 <= r') /\ (r <= s) /\ (r' <= s') /\ (3 < k ==> s <= &2 * h0 /\ r = &2) ==>
2251 is_scs_v39 (mk_unadorned_v39 k d (cs_adj k r r') (cs_adj k s s'))`,
2254 REPEAT WEAKER_STRIP_TAC;
2255 ASM_REWRITE_TAC[Appendix.is_scs_v39;Terminal.scs_unadorned_explicit;Appendix.scs_v39_explicit;arith `x <= x`;Appendix.periodic_empty;periodic2_cs_adj];
2257 BY(REWRITE_TAC[Appendix.periodic2]);
2259 REPEAT WEAKER_STRIP_TAC;
2260 REWRITE_TAC[Appendix.cs_adj];
2267 REPEAT WEAKER_STRIP_TAC;
2268 REWRITE_TAC[Appendix.cs_adj];
2269 COND_CASES_TAC THEN ASM_REWRITE_TAC[];
2272 BY(ASM_TAC THEN REAL_ARITH_TAC);
2273 BY(ASM_TAC THEN REAL_ARITH_TAC);
2275 REPEAT WEAKER_STRIP_TAC;
2276 BY(REWRITE_TAC[Appendix.cs_adj]);
2278 REPEAT WEAKER_STRIP_TAC;
2279 REWRITE_TAC[Appendix.cs_adj];
2281 BY(ASM_MESON_TAC[MOD_LT;arith `3 <= k ==> 0 < k`]);
2282 BY(ASM_TAC THEN REAL_ARITH_TAC);
2284 REPEAT WEAKER_STRIP_TAC;
2285 REWRITE_TAC[Appendix.cs_adj];
2287 FIRST_X_ASSUM (RULE_ASSUM_TAC o (unlist REWRITE_RULE));
2288 BY(ASM_TAC THEN REAL_ARITH_TAC);
2290 REPEAT WEAKER_STRIP_TAC;
2291 REWRITE_TAC[Appendix.cs_adj];
2292 FIRST_X_ASSUM (RULE_ASSUM_TAC o (unlist REWRITE_RULE));
2293 BY(ASM_TAC THEN REAL_ARITH_TAC);
2294 ASM_CASES_TAC `k=3`;
2295 ASM_REWRITE_TAC[arith `x + 3 <= 6 <=> x <= 3`];
2296 INTRO_TAC HAS_SIZE_NUMSEG_LT [`3`];
2297 REWRITE_TAC[HAS_SIZE];
2298 TYPIFY `{i | i < 3 /\ (&2 * h0 < cs_adj 3 s s' i (SUC i) \/ &2 < cs_adj 3 r r' i (SUC i))} SUBSET {i | i < 3}` (C SUBGOAL_THEN MP_TAC);
2300 BY(MESON_TAC[CARD_SUBSET]);
2301 TYPIFY `{i | i < k /\ (&2 * h0 < cs_adj k s s' i (SUC i) \/ &2 < cs_adj k r r' i (SUC i))} = {}` ENOUGH_TO_SHOW_TAC;
2302 DISCH_THEN SUBST1_TAC;
2303 REWRITE_TAC[CARD_CLAUSES];
2304 BY(ASM_TAC THEN ARITH_TAC);
2305 REWRITE_TAC[EXTENSION;IN_ELIM_THM;NOT_IN_EMPTY];
2306 REWRITE_TAC[Appendix.cs_adj];
2308 REWRITE_TAC[DE_MORGAN_THM];
2309 REWRITE_TAC[TAUT `~a \/ b <=> a ==> b`];
2311 ASM_SIMP_TAC[Qknvmlb.SUC_MOD_NOT_EQ;arith `3 <= k==> 1 < k`];
2312 TYPIFY `3 < k` (C SUBGOAL_THEN ASSUME_TAC);
2313 BY(ASM_TAC THEN ARITH_TAC);
2314 FIRST_X_ASSUM_ST `h0` MP_TAC;
2320 let is_scs_6T1 = prove_by_refinement(
2321 `is_scs_v39 scs_6T1`,
2324 REWRITE_TAC[Appendix.scs_6T1];
2325 MATCH_MP_TAC is_scs_adj;
2326 REWRITE_TAC[Appendix.d_tame;Sphere.cstab];
2328 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2332 let azim_in_fan_azim = prove_by_refinement(
2334 periodic vv k /\ 3 <= k /\ (!i j. i < k /\ j < k /\ vv i = vv j ==> i =j ) /\
2335 E = IMAGE (\i. {vv i, vv (SUC i)}) (:num)
2337 azim_in_fan (vv i,vv (SUC i)) E = azim (vec 0) (vv i) (vv (SUC i)) (vv (i + k -1))`,
2340 REPEAT WEAKER_STRIP_TAC;
2341 ASM_REWRITE_TAC[Localization.azim_in_fan;LET_DEF;LET_END_DEF];
2342 GMATCH_SIMP_TAC Terminal.EE_vv;
2343 TYPIFY `k` EXISTS_TAC;
2346 BY(REWRITE_TAC[GEN_ALL Local_lemmas.AZIM_CYCLE_TWO_POINT_SET]);
2348 FIRST_X_ASSUM_ST `CARD` MP_TAC;
2349 TYPIFY `~(k = 0)` (C SUBGOAL_THEN ASSUME_TAC);
2350 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
2352 MATCH_MP_TAC (arith `c = 2 ==> c > 1`);
2353 MATCH_MP_TAC Hypermap.CARD_TWO_ELEMENTS;
2354 INTRO_TAC Oxl_def.periodic_mod [`vv`;`k`];
2356 DISCH_THEN (unlist ONCE_REWRITE_TAC);
2358 TYPIFY `SUC i MOD k = (i + k - 1) MOD k` (C SUBGOAL_THEN ASSUME_TAC);
2359 BY(ASM_MESON_TAC[DIVISION]);
2360 INTRO_TAC Oxlzlez.MOD_INJ1_ALT [`k-2`;`k`];
2362 BY(REPEAT (FIRST_X_ASSUM_ST `3 <= k` MP_TAC) THEN ARITH_TAC);
2364 FIRST_X_ASSUM (C INTRO_TAC [`SUC i`]);
2366 BY(ASM_SIMP_TAC[arith `3 <= k ==> SUC x + k - 2 = x + k - 1`])
2370 let sol_local_azim = prove_by_refinement(
2373 let E = IMAGE (\i. {vv i, vv (SUC i)}) (:num) in
2374 let f = IMAGE (\i. vv i,vv (SUC i)) (:num) in
2375 (periodic vv k /\ 3 <= k /\
2376 (!i j. i < k /\ j < k /\ vv i = vv j ==> (i = j)) ==>
2377 sol_local E f = sum {i | i < k} (\i.
2378 azim (vec 0) (vv i) (vv (i+1)) (vv (i + (k-1)))) - pi * (&k - &2)))`,
2381 REWRITE_TAC[LET_DEF;LET_END_DEF;Localization.sol_local];
2382 REPEAT WEAKER_STRIP_TAC;
2383 GMATCH_SIMP_TAC (GSYM Oxlzlez.PERIODIC_IMAGE);
2384 TYPIFY `k` EXISTS_TAC;
2386 ASM_SIMP_TAC[arith `3 <= k ==> ~(0 = k)`];
2387 FIRST_X_ASSUM_ST `periodic` MP_TAC;
2388 REWRITE_TAC[Oxl_def.periodic;PAIR_EQ];
2389 BY(MESON_TAC[arith `SUC (i + k) = SUC i + k`]);
2390 TYPIFY `FINITE (IMAGE (\i. vv i,vv (SUC i)) {i | i < k})` (C SUBGOAL_THEN ASSUME_TAC);
2391 MATCH_MP_TAC FINITE_IMAGE;
2392 BY(REWRITE_TAC[FINITE_NUMSEG_LT]);
2393 ASM_SIMP_TAC[ SUM_SUB];
2394 ASM_SIMP_TAC[ SUM_CONST];
2395 MATCH_MP_TAC (arith `b = b' /\ s = s' ==> &2 * pi + s - b*pi = s' - (pi) * (b'- &2)`);
2396 GMATCH_SIMP_TAC CARD_IMAGE_INJ;
2397 ASM_REWRITE_TAC[IN_ELIM_THM;PAIR_EQ;FINITE_NUMSEG_LT;CARD_NUMSEG_LT];
2399 BY(ASM_MESON_TAC[]);
2400 GMATCH_SIMP_TAC SUM_IMAGE;
2401 ASM_REWRITE_TAC[IN_ELIM_THM;PAIR_EQ;FINITE_NUMSEG_LT;CARD_NUMSEG_LT];
2403 BY(ASM_MESON_TAC[]);
2404 MATCH_MP_TAC SUM_EQ;
2405 REWRITE_TAC[IN_ELIM_THM;o_THM];
2406 REPEAT WEAKER_STRIP_TAC;
2407 REWRITE_TAC[arith `x + 1 = SUC x`];
2408 MATCH_MP_TAC azim_in_fan_azim;
2413 let vv_inj_lemma = prove_by_refinement(
2414 `!s v k. is_scs_v39 s /\ v IN BBs_v39 s /\ scs_k_v39 s = k ==>
2415 (!i j. i < k /\ j < k /\ v i = v j ==> i = j)`,
2418 REPEAT WEAKER_STRIP_TAC;
2419 RULE_ASSUM_TAC(REWRITE_RULE[Appendix.is_scs_v39;IN;Appendix.BBs_v39;LET_THM]);
2420 ASM_TAC THEN REPEAT WEAKER_STRIP_TAC;
2421 FIRST_X_ASSUM (C INTRO_TAC [`i`;`j`]);
2422 REPEAT WEAKER_STRIP_TAC;
2424 FIRST_X_ASSUM_ST `&2 <= x` (C INTRO_TAC [`i`;`j`]);
2425 ASM_REWRITE_TAC[arith `~(x <= y) <=> y < x`];
2426 FIRST_X_ASSUM_ST `a <= dist(u,v)` MP_TAC;
2427 ASM_REWRITE_TAC[DIST_REFL];
2432 let LOCAL_FAN_AZIM_POS = prove_by_refinement(
2434 (let V = IMAGE vv (:num) in
2435 let E = IMAGE (\i. {vv i, vv (SUC i)}) (:num) in
2436 let f = IMAGE (\i. (vv i,vv (SUC i))) (:num) in
2437 let k = scs_k_v39 s in
2438 (convex_local_fan (V,E,f) /\ is_scs_v39 s /\ vv IN BBs_v39 s
2439 ==> &0 < azim (vec 0) (vv i ) (vv (SUC i)) (vv (i + (k-1)))))`,
2442 REWRITE_TAC[LET_THM];
2443 REPEAT WEAKER_STRIP_TAC;
2444 GMATCH_SIMP_TAC (GSYM azim_in_fan_azim);
2445 TYPED_ABBREV_TAC `V = IMAGE vv (:num)`;
2446 TYPED_ABBREV_TAC `E = IMAGE (\i. {vv i, vv (SUC i)}) (:num)`;
2447 TYPED_ABBREV_TAC `f = IMAGE (\i. (vv i,vv (SUC i))) (:num)`;
2448 TYPIFY `vv i IN V` (C SUBGOAL_THEN ASSUME_TAC);
2450 REWRITE_TAC[IN_IMAGE;IN_UNIV];
2452 TYPIFY ` E` EXISTS_TAC;
2453 INTRO_TAC (GEN_ALL Nkezbfc_local.CONVEX_LOFA_IMP_INANGLE_EQ_AZIM) [`V`;`f`;`E`];
2455 DISCH_THEN (C INTRO_TAC [`vv i`]);
2457 INTRO_TAC Terminal.vv_rho_node1 [`vv`;`scs_k_v39 s`];
2458 ASM_REWRITE_TAC[LET_THM];
2459 INTRO_TAC vv_inj_lemma [`s`;`vv`;`scs_k_v39 s`];
2463 INTRO_TAC (GEN_ALL Local_lemmas.INTERIOR_ANGLE1_POS) [`E`;`V`;`f`;`vv i`];
2466 BY(ASM_SIMP_TAC[Local_lemmas.CVX_LO_IMP_LO]);
2467 TYPIFY `periodic vv (scs_k_v39 s) /\ 3 <= scs_k_v39 s` ENOUGH_TO_SHOW_TAC;
2468 BY(ASM_MESON_TAC[]);
2469 RULE_ASSUM_TAC(REWRITE_RULE[Appendix.is_scs_v39]);
2471 RULE_ASSUM_TAC(REWRITE_RULE[IN;Appendix.BBs_v39;LET_THM]);
2472 BY(ASM_REWRITE_TAC[])
2476 let INTERIOR_ANGLE1_AZIM = prove_by_refinement(
2478 (let V = IMAGE vv (:num) in
2479 let E = IMAGE (\i. {vv i, vv (SUC i)}) (:num) in
2480 let f = IMAGE (\i. (vv i,vv (SUC i))) (:num) in
2481 let k = scs_k_v39 s in
2482 (is_scs_v39 s /\ vv IN BBs_v39 s /\ 3 < k
2483 ==> azim (vec 0) (vv i ) (vv (SUC i)) (vv (i + (k-1))) = interior_angle1 (vec 0) f (vv(i) )))`,
2486 REWRITE_TAC[LET_THM];
2487 REPEAT WEAKER_STRIP_TAC;
2488 GMATCH_SIMP_TAC (GSYM azim_in_fan_azim);
2489 TYPED_ABBREV_TAC `V = IMAGE vv (:num)`;
2490 TYPED_ABBREV_TAC `E = IMAGE (\i. {vv i, vv (SUC i)}) (:num)`;
2491 TYPED_ABBREV_TAC `f = IMAGE (\i. (vv i,vv (SUC i))) (:num)`;
2492 TYPIFY `vv i IN V` (C SUBGOAL_THEN ASSUME_TAC);
2494 REWRITE_TAC[IN_IMAGE;IN_UNIV];
2496 TYPIFY ` E` EXISTS_TAC;
2497 INTRO_TAC (GEN_ALL Nkezbfc_local.CONVEX_LOFA_IMP_INANGLE_EQ_AZIM) [`V`;`f`;`E`];
2498 TYPIFY `convex_local_fan(V,E,f)` (C SUBGOAL_THEN ASSUME_TAC);
2499 RULE_ASSUM_TAC(REWRITE_RULE[Appendix.BBs_v39;IN;LET_THM]);
2500 FIRST_X_ASSUM_ST `convex_local_fan` MP_TAC THEN ASM_REWRITE_TAC[];
2501 BY(ASM_SIMP_TAC[arith `3 < k ==> ~( k <= 3)`]);
2503 DISCH_THEN (C INTRO_TAC [`vv i`]);
2505 DISCH_THEN SUBST1_TAC;
2506 INTRO_TAC Terminal.vv_rho_node1 [`vv`;`scs_k_v39 s`];
2507 ASM_REWRITE_TAC[LET_THM];
2508 INTRO_TAC vv_inj_lemma [`s`;`vv`;`scs_k_v39 s`];
2512 TYPIFY `periodic vv (scs_k_v39 s) /\ 3 <= scs_k_v39 s` ENOUGH_TO_SHOW_TAC;
2513 BY(ASM_MESON_TAC[]);
2514 RULE_ASSUM_TAC(REWRITE_RULE[Appendix.is_scs_v39]);
2516 RULE_ASSUM_TAC(REWRITE_RULE[IN;Appendix.BBs_v39;LET_THM]);
2517 BY(ASM_REWRITE_TAC[])
2521 let delta_x4_imp_obtuse = prove_by_refinement(
2522 `!x1 x2 x3 x4 x5 x6.
2523 &0 < x1 /\ &0 <= delta_x x1 x2 x3 x4 x5 x6 /\ delta_x4 x1 x2 x3 x4 x5 x6 < &0 ==>
2524 pi/ &2 < dih_x x1 x2 x3 x4 x5 x6`,
2527 REPEAT WEAKER_STRIP_TAC;
2528 REWRITE_TAC[Sphere.dih_x;LET_THM];
2529 REWRITE_TAC[arith `x < x + y <=> &0 < y`];
2530 TYPED_ABBREV_TAC `s = sqrt(&4 * x1 * delta_x x1 x2 x3 x4 x5 x6)`;
2531 TYPIFY `&0 <= s` (C SUBGOAL_THEN ASSUME_TAC);
2533 GMATCH_SIMP_TAC SQRT_POS_LE;
2534 GMATCH_SIMP_TAC REAL_LE_MUL;
2535 GMATCH_SIMP_TAC REAL_LE_MUL;
2536 BY(ASM_TAC THEN REAL_ARITH_TAC);
2537 ASM_CASES_TAC `&0 < s`;
2538 ASM_SIMP_TAC[Merge_ineq.ATN2_POS];
2539 BY(ASM_TAC THEN REAL_ARITH_TAC);
2540 TYPIFY `s = &0` (C SUBGOAL_THEN SUBST1_TAC);
2541 BY(ASM_TAC THEN REAL_ARITH_TAC);
2542 GMATCH_SIMP_TAC Merge_ineq.atn2_0;
2544 BY(ASM_TAC THEN REAL_ARITH_TAC)
2548 let delta4_y_imp_obtuse = prove_by_refinement(
2549 `!y1 y2 y3 y4 y5 y6. &0 < y1 /\ &0 <= delta_y y1 y2 y3 y4 y5 y6 /\ delta4_y y1 y2 y3 y4 y5 y6 < &0 ==>
2550 pi/ &2 < dih_y y1 y2 y3 y4 y5 y6`,
2553 REWRITE_TAC[Sphere.dih_y;LET_THM;Sphere.delta_y;Sphere.delta4_y;Sphere.y_of_x];
2554 REPEAT WEAKER_STRIP_TAC;
2555 MATCH_MP_TAC delta_x4_imp_obtuse;
2557 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
2558 BY(ASM_REWRITE_TAC[])
2562 let scs_vv_MOD = prove_by_refinement(
2563 `!s vv i. is_scs_v39 s /\ BBs_v39 s vv ==> vv(i MOD scs_k_v39 s) = vv i`,
2566 REWRITE_TAC[Appendix.is_scs_v39;Appendix.BBs_v39;LET_THM];
2567 REPEAT WEAKER_STRIP_TAC;
2568 SPEC_TAC (`i:num`,`i:num`);
2569 MATCH_MP_TAC Xwitccn.PERIODIC_PROPERTY;
2571 BY(FIRST_X_ASSUM_ST `3 <= k` MP_TAC THEN ARITH_TAC)
2575 let scs_lb_2 = prove_by_refinement(
2576 `!s vv i j. is_scs_v39 s /\ BBs_v39 s vv /\ ~(i MOD scs_k_v39 s = j MOD scs_k_v39 s) ==>
2577 &2 <= dist(vv i,vv j)`,
2580 REPEAT WEAKER_STRIP_TAC;
2581 TYPIFY_GOAL_THEN `!i. vv(i MOD scs_k_v39 s) = vv (i)` (unlist ONCE_REWRITE_TAC o GSYM);
2582 BY(ASM_MESON_TAC[scs_vv_MOD]);
2583 RULE_ASSUM_TAC(REWRITE_RULE[Appendix.is_scs_v39;Appendix.BBs_v39;LET_THM]);
2584 TYPED_ABBREV_TAC `k = scs_k_v39 s`;
2585 ASM_TAC THEN REPEAT WEAKER_STRIP_TAC;
2586 FIRST_X_ASSUM_ST `&2 <= x` (C INTRO_TAC [`i MOD k`;`j MOD k`]);
2587 FIRST_X_ASSUM_ST `scs_a_v39` (C INTRO_TAC [`i MOD k`;`j MOD k`]);
2588 ASM_SIMP_TAC[arith `3 <= k ==> ~(k = 0)`;DIVISION];
2593 let delta_x4_decreasing = prove_by_refinement(
2594 `!x1 x2 x3 x4 x5 x6 x4'.
2595 x4 <= x4' /\ &0 <= x1 ==>
2596 delta_x4 x1 x2 x3 x4' x5 x6 <= delta_x4 x1 x2 x3 x4 x5 x6`,
2599 REPEAT WEAKER_STRIP_TAC;
2600 ENOUGH_TO_SHOW_TAC `delta_x4 x1 x2 x3 x4 x5 x6 - delta_x4 x1 x2 x3 x4' x5 x6 = &2 * x1 * (x4' - x4)`;
2601 ONCE_REWRITE_TAC[arith `d' <= d <=> &0 <= d - d'`];
2602 DISCH_THEN SUBST1_TAC;
2603 GMATCH_SIMP_TAC REAL_LE_MUL;
2606 GMATCH_SIMP_TAC REAL_LE_MUL;
2607 BY(ASM_TAC THEN REAL_ARITH_TAC);
2608 REWRITE_TAC[Nonlin_def.delta_x4];
2613 let SYNQIWN = prove_by_refinement(
2614 `main_nonlinear_terminal_v11 ==> (!s v i k.
2615 is_scs_v39 s /\ BBs_v39 s v /\ scs_k_v39 s =k /\ 3 < k /\
2616 ((norm (v (SUC i)) = &2 /\ dist(v i,v (i+k-1)) = &2) \/
2617 (norm (v (i+k-1)) = &2 /\ dist(v i,v (SUC i)) = &2) \/
2618 (norm (v (SUC i)) = &2 /\ norm (v(i+k-1)) = &2) \/
2619 (dist(v i,v(SUC i)) = &2 /\ dist(v i,v(i + k - 1)) = &2) \/
2620 (norm (v (SUC i)) = &2 /\ dist(v i,v (SUC i)) = &2) \/
2621 (norm (v (i+k-1)) = &2 /\ dist(v i,v (i+k-1)) = &2)) /\
2622 (dist(v i,v (SUC i)) <= &2 * h0) /\
2623 (dist(v (i),v(i+k-1)) <= &2 * h0) /\
2624 cstab <= dist(v (SUC i),v(i+k - 1)) ==>
2625 pi/ &2 < azim (vec 0) (v (i)) (v (SUC i)) (v (i + k - 1)))
2629 REPEAT WEAKER_STRIP_TAC;
2630 REWRITE_TAC[arith `x < y <=> ~(y <= x)`];
2632 TYPED_ABBREV_TAC `E = IMAGE (\i. {v i, v (SUC i)}) (:num) `;
2633 INTRO_TAC vv_inj_lemma [`s`;`v`;`k`];
2634 ASM_REWRITE_TAC[IN];
2635 COMMENT "noncollinearity";
2637 INTRO_TAC (GEN_ALL Qknvmlb.IS_SCS_NOT_COLLINEAR_BBs_CASE_LE_PRIME_3) [`v`;`i`;`s`];
2638 ASM_REWRITE_TAC[IN];
2639 INTRO_TAC (GEN_ALL Qknvmlb.IS_SCS_NOT_COLLINEAR_BBs_CASE_LE_PRIME_3) [`v`;`i + k - 1`;`s`];
2640 ASM_REWRITE_TAC[IN];
2641 TYPIFY `SUC (i + k -1) MOD k = i MOD k` (C SUBGOAL_THEN SUBST1_TAC);
2642 TYPIFY `SUC (i + k - 1) = 1*k + i` (C SUBGOAL_THEN SUBST1_TAC);
2643 BY(FIRST_X_ASSUM_ST `3 < k` MP_TAC THEN ARITH_TAC);
2644 BY(REWRITE_TAC[MOD_MULT_ADD]);
2645 TYPIFY_GOAL_THEN `!i. v (i MOD k) = v i` (unlist REWRITE_TAC);
2646 RULE_ASSUM_TAC(REWRITE_RULE[Appendix.BBs_v39;LET_THM]);
2647 MATCH_MP_TAC Xwitccn.PERIODIC_PROPERTY;
2648 BY(ASM_MESON_TAC[arith `3 < k ==> ~(k=0)`]);
2649 TYPIFY `{vec 0, v (i + k - 1),v ( i)} = {vec 0,v (i),v (i + k - 1)}` (C SUBGOAL_THEN SUBST1_TAC);
2651 REPEAT WEAKER_STRIP_TAC;
2653 TYPIFY `azim (vec 0) (v i) (v (SUC i)) (v (i + k - 1)) = dihV (vec 0) (v i) (v (SUC i)) (v (i + k - 1))` (C SUBGOAL_THEN ASSUME_TAC);
2654 GMATCH_SIMP_TAC (GSYM Polar_fan.AZIM_DIHV_SAME_STRONG);
2656 FIRST_X_ASSUM_ST `pi` MP_TAC;
2659 TYPIFY `pi / &2 < dihV (vec 0) (v (i)) (v (SUC i)) (v (i + k - 1))` ENOUGH_TO_SHOW_TAC;
2660 BY(ASM_TAC THEN REAL_ARITH_TAC);
2661 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] Merge_ineq.DIHV_EQ_DIH_Y);
2663 MATCH_MP_TAC delta4_y_imp_obtuse;
2664 COMMENT "three final steps";
2665 TYPIFY `!i. &2 <= norm(v i) /\ norm(v i) <= &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
2666 RULE_ASSUM_TAC(REWRITE_RULE[Appendix.BBs_v39;LET_THM;Terminal.IMAGE_SUBSET_IN;IN_UNIV]);
2667 BY(ASM_MESON_TAC[Fnjlbxs.in_ball_annulus]);
2668 REWRITE_TAC[Trigonometry1.DIST_L_ZERO];
2670 FIRST_X_ASSUM (C INTRO_TAC [`i`]);
2673 REWRITE_TAC[REWRITE_RULE[LET_THM] Tame_lemmas.delta_y_pos];
2674 INTRO_TAC scs_lb_2 [`s`;`v`];
2677 TYPIFY `&2 <= dist (v i, v (SUC i))` (C SUBGOAL_THEN ASSUME_TAC);
2678 FIRST_X_ASSUM MATCH_MP_TAC;
2679 BY(ASM_MESON_TAC[ Qknvmlb.SUC_MOD_NOT_EQ;arith `3 < k ==> 1 < k`]);
2680 TYPIFY `&2 <= dist(v i,v (i + k - 1))` (C SUBGOAL_THEN ASSUME_TAC);
2681 FIRST_X_ASSUM MATCH_MP_TAC;
2682 INTRO_TAC (GEN_ALL Oxl_2012.MOD_INJ1) [`k - 1`;`k`];
2684 BY(FIRST_X_ASSUM_ST `3 < k` MP_TAC THEN ARITH_TAC);
2685 BY(DISCH_THEN (unlist REWRITE_TAC));
2686 TYPIFY `delta4_y (norm (v i)) (norm (v (SUC i))) (norm (v (i + k - 1))) cstab (dist (v i,v (i + k - 1))) (dist (v i,v (SUC i))) < &0` ENOUGH_TO_SHOW_TAC;
2687 MATCH_MP_TAC (arith `y<= x ==> (x < &0 ==> y < &0)`);
2688 REWRITE_TAC[Sphere.delta4_y;Sphere.y_of_x];
2689 MATCH_MP_TAC delta_x4_decreasing;
2690 GMATCH_SIMP_TAC Misc_defs_and_lemmas.ABS_SQUARE_LE;
2691 REWRITE_TAC[ REAL_LE_SQUARE];
2692 BY(FIRST_X_ASSUM_ST `cstab` MP_TAC THEN REWRITE_TAC[Sphere.cstab] THEN REAL_ARITH_TAC);
2693 REWRITE_TAC[Sphere.cstab];
2694 COMMENT "ineq cases";
2695 REPEAT (FIRST_X_ASSUM_ST `collinear` kill);
2696 REPEAT (FIRST_X_ASSUM_ST `azim` kill);
2697 FIRST_ASSUM_ST `h0` (C INTRO_TAC [`i`]);
2698 FIRST_ASSUM_ST `h0` (C INTRO_TAC [`SUC i`]);
2699 FIRST_X_ASSUM_ST `h0` (C INTRO_TAC [`i + k - 1`]);
2700 TYPED_ABBREV_TAC `y1 = norm (v i)`;
2701 TYPED_ABBREV_TAC `y2 = norm (v (SUC i))`;
2702 TYPED_ABBREV_TAC `y3 = norm (v (i + k - 1))`;
2703 TYPED_ABBREV_TAC `y5 = dist(v i ,v(i + k - 1))`;
2704 TYPED_ABBREV_TAC `y6 = dist(v i, v(SUC i))`;
2705 REPLICATE_TAC 5 (FIRST_X_ASSUM kill);
2706 REPEAT WEAKER_STRIP_TAC;
2707 TYPIFY `delta4_y y1 y3 y2 #3.01 y6 y5 = delta4_y y1 y2 y3 #3.01 y5 y6 /\ delta4_y y1 y5 y6 #3.01 y2 y3 = delta4_y y1 y2 y3 #3.01 y5 y6 /\ delta4_y y1 y6 y5 #3.01 y3 y2 = delta4_y y1 y2 y3 #3.01 y5 y6` (C SUBGOAL_THEN ASSUME_TAC);
2708 BY(REWRITE_TAC[Sphere.delta4_y;Sphere.delta_x4;Sphere.y_of_x] THEN REAL_ARITH_TAC);
2709 (FIRST_X_ASSUM_ST `\/` MP_TAC) THEN REPEAT STRIP_TAC;
2710 INTRO_TAC (Terminal.get_main_nonlinear "1117202051") [`y1`;`y3`;`y2`;`#3.01`;`y6`;`y5`];
2711 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
2712 DISCH_THEN MATCH_MP_TAC;
2713 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2714 INTRO_TAC (Terminal.get_main_nonlinear "1117202051") [`y1`;`y2`;`y3`;`#3.01`;`y5`;`y6`];
2715 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
2716 DISCH_THEN MATCH_MP_TAC;
2717 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2718 INTRO_TAC (Terminal.get_main_nonlinear "4559601669") [`y1`;`y2`;`y3`;`#3.01`;`y5`;`y6`];
2719 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
2720 DISCH_THEN MATCH_MP_TAC;
2721 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2722 INTRO_TAC (Terminal.get_main_nonlinear "4559601669") [`y1`;`y5`;`y6`;`#3.01`;`y2`;`y3`];
2723 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
2724 DISCH_THEN MATCH_MP_TAC;
2725 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2726 INTRO_TAC (Terminal.get_main_nonlinear "4559601669b") [`y1`;`y2`;`y3`;`#3.01`;`y5`;`y6`];
2727 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
2728 DISCH_THEN MATCH_MP_TAC;
2729 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2730 INTRO_TAC (Terminal.get_main_nonlinear "4559601669b") [`y1`;`y3`;`y2`;`#3.01`;`y6`;`y5`];
2731 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
2732 DISCH_THEN MATCH_MP_TAC;
2733 BY(ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
2738 let edge2_generic = prove_by_refinement(
2739 `main_nonlinear_terminal_v11 ==>
2741 (let V = IMAGE vv (:num) in
2742 let E = IMAGE (\i. {vv i, vv (SUC i)}) (:num) in
2743 let s = mk_unadorned_v39 k d (cs_adj k (&2) cstab) (cs_adj k (&2) (&6)) in
2744 (BBs_v39 s vv /\ 3 < k /\ taustar_v39 s vv < &0 /\ is_scs_v39 s /\
2745 (!i j. i < k /\ j < k /\ vv i = vv j ==> (i = j)) ==>
2749 REWRITE_TAC[LET_THM];
2750 REPEAT WEAKER_STRIP_TAC;
2751 TYPED_ABBREV_TAC `s = mk_unadorned_v39 k d (cs_adj k (&2) cstab) (cs_adj k (&2) (&6))`;
2752 TYPIFY `scs_k_v39 s =k ` (C SUBGOAL_THEN ASSUME_TAC);
2754 BY(ASM_REWRITE_TAC[Terminal.scs_unadorned_explicit]);
2755 INTRO_TAC Jkqewgv.JKQEWGV2 [`s`;`vv`];
2756 ASM_REWRITE_TAC[LET_THM];
2758 TYPED_ABBREV_TAC `V = IMAGE vv (:num)`;
2759 TYPED_ABBREV_TAC `E = IMAGE (\i. {vv i, vv (SUC i)}) (:num)`;
2760 TYPED_ABBREV_TAC `f = IMAGE (\i. (vv i,vv (SUC i))) (:num)`;
2761 TYPIFY `convex_local_fan(V,E,f)` (C SUBGOAL_THEN ASSUME_TAC);
2762 RULE_ASSUM_TAC (REWRITE_RULE[Appendix.BBs_v39;LET_THM]);
2763 BY(ASM_MESON_TAC[arith `3 < k ==> ~(k <= 3)`;LET_THM]);
2764 TYPIFY `~(?v w. lunar (v,w) V E)` ENOUGH_TO_SHOW_TAC;
2765 BY(ASM_MESON_TAC[Local_lemmas.CVX_LO_IMP_LO; Wrgcvdr_cizmrrh.CIZMRRH]);
2766 REPEAT WEAKER_STRIP_TAC;
2767 INTRO_TAC Jkqewgv.JKQEWGV3 [`s`;`vv`;`v`;`w`];
2768 ASM_REWRITE_TAC[LET_THM];
2769 TYPIFY `v IN V` (C SUBGOAL_THEN ASSUME_TAC);
2770 RULE_ASSUM_TAC(REWRITE_RULE[Wrgcvdr_cizmrrh.lunar]);
2771 BY(FIRST_X_ASSUM MP_TAC THEN SET_TAC[]);
2772 TYPIFY ` interior_angle1 (vec 0) f v = azim_in_fan (v,rho_node1 f v) E` (C SUBGOAL_THEN SUBST1_TAC);
2773 BY(ASM_MESON_TAC[Nkezbfc_local.CONVEX_LOFA_IMP_INANGLE_EQ_AZIM]);
2774 TYPIFY `!v. v IN V ==> ?i. v = vv i` (C SUBGOAL_THEN ASSUME_TAC);
2777 BY(REWRITE_TAC[IN_IMAGE;IN_UNIV]);
2778 FIRST_X_ASSUM (C INTRO_TAC [`v`]);
2780 REPEAT WEAKER_STRIP_TAC;
2781 FIRST_X_ASSUM MP_TAC;
2784 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] Terminal.vv_rho_node1);
2785 TYPIFY `periodic vv k /\ 3 <= k` (C SUBGOAL_THEN ASSUME_TAC);
2786 RULE_ASSUM_TAC(REWRITE_RULE[Appendix.BBs_v39;LET_THM]);
2787 ASM_SIMP_TAC[arith `3 < k ==> 3 <= k`];
2789 BY(ASM_REWRITE_TAC[]);
2791 TYPIFY `k` EXISTS_TAC;
2792 BY(ASM_REWRITE_TAC[]);
2793 GMATCH_SIMP_TAC azim_in_fan_azim;
2794 TYPIFY `k` EXISTS_TAC;
2797 (* unfinished need SYN, redo as RRCWNS_WEAK *)
2802 let scs_diag_2 = prove_by_refinement(
2803 `!k i. 3 < k ==> scs_diag k (SUC i) (i + k - 1)`,
2807 REWRITE_TAC[Appendix.scs_diag];
2809 TYPIFY_GOAL_THEN `~(SUC (SUC i) MOD k = (i + k - 1) MOD k)` (unlist REWRITE_TAC);
2810 TYPIFY_GOAL_THEN `i + k - 1 = SUC(SUC i) + (k - 3)` (unlist REWRITE_TAC);
2811 BY(ASM_TAC THEN ARITH_TAC);
2812 BY(ASM_MESON_TAC[Oxl_2012.MOD_INJ1;arith `3 < k ==> ~(k = 0) /\ ~(k - 3 = 0) /\ (k - 3 < k)`]);
2813 TYPIFY_GOAL_THEN `SUC (i + k - 1) = SUC i + (k-1)` (unlist REWRITE_TAC);
2814 BY(ASM_TAC THEN ARITH_TAC);
2816 BY(ASM_MESON_TAC[Oxl_2012.MOD_INJ1;arith `3 < k ==> ~(k = 0) /\ ~(k - 1 = 0) /\ (k - 1 < k)`]);
2817 TYPIFY_GOAL_THEN `i + k - 1 = SUC i + k - 2` (unlist REWRITE_TAC);
2818 BY(ASM_TAC THEN ARITH_TAC);
2819 BY(ASM_MESON_TAC[Oxl_2012.MOD_INJ1;arith `3 < k ==> ~(k = 0) /\ ~(k - 2 = 0) /\ (k - 2 < k)`])
2823 let RRCWNS_WEAK = prove_by_refinement(
2824 `main_nonlinear_terminal_v11 ==> (!s vv.
2825 (let V = IMAGE vv (:num) in
2826 let E = IMAGE (\i. {vv i, vv (SUC i)}) (:num) in
2827 let k = scs_k_v39 s in
2828 (BBs_v39 s vv /\ 3 < k /\ taustar_v39 s vv < &0 /\
2829 is_scs_v39 s /\ scs_basic_v39 s /\
2830 (!i j. scs_diag (scs_k_v39 s) i j ==> cstab <= dist(vv i,vv j)) /\
2831 (!i w. lunar(vv i,w) V E ==>
2832 dist(vv i,vv(SUC i)) <= &2*h0 /\
2833 dist(vv i,vv(i + k - 1)) <= &2*h0 /\
2834 ((norm (vv (SUC i)) = &2 \/ dist(vv i, vv(SUC i)) = &2)) /\
2835 ((norm (vv (i + k - 1)) = &2 \/ dist(vv i, vv(i + k - 1)) = &2)))
2841 REWRITE_TAC[LET_THM;Appendix.scs_generic];
2842 REPEAT WEAKER_STRIP_TAC;
2843 INTRO_TAC Jkqewgv.JKQEWGV2 [`s`;`vv`];
2844 ASM_REWRITE_TAC[LET_THM];
2846 TYPED_ABBREV_TAC `V = IMAGE vv (:num)`;
2847 TYPED_ABBREV_TAC `E = IMAGE (\i. {vv i, vv (SUC i)}) (:num)`;
2848 TYPED_ABBREV_TAC `f = IMAGE (\i. (vv i,vv (SUC i))) (:num)`;
2849 TYPIFY `convex_local_fan(V,E,f)` (C SUBGOAL_THEN ASSUME_TAC);
2850 RULE_ASSUM_TAC (REWRITE_RULE[Appendix.BBs_v39;LET_THM]);
2851 BY(ASM_MESON_TAC[arith `3 < k ==> ~(k <= 3)`;LET_THM]);
2852 TYPIFY `~(?v w. lunar (v,w) V E)` ENOUGH_TO_SHOW_TAC;
2853 FIRST_X_ASSUM (MP_TAC o (MATCH_MP Local_lemmas.CVX_LO_IMP_LO));
2854 FIRST_X_ASSUM_ST `circular` MP_TAC;
2855 BY(MESON_TAC[Wrgcvdr_cizmrrh.CIZMRRH]);
2856 REPEAT WEAKER_STRIP_TAC;
2857 INTRO_TAC Jkqewgv.JKQEWGV3 [`s`;`vv`;`v`;`w`];
2858 ASM_REWRITE_TAC[LET_THM];
2859 TYPIFY `v IN V /\ w IN V` (C SUBGOAL_THEN ASSUME_TAC);
2860 RULE_ASSUM_TAC(REWRITE_RULE[Wrgcvdr_cizmrrh.lunar]);
2861 BY(FIRST_X_ASSUM MP_TAC THEN SET_TAC[]);
2862 TYPIFY `!v. v IN V ==> ?i. v = vv i` (C SUBGOAL_THEN ASSUME_TAC);
2865 BY(REWRITE_TAC[IN_IMAGE;IN_UNIV]);
2866 FIRST_X_ASSUM (C INTRO_TAC [`v`]);
2868 REPEAT WEAKER_STRIP_TAC;
2869 INTRO_TAC (REWRITE_RULE[LET_THM] (GSYM INTERIOR_ANGLE1_AZIM)) [`s`;`vv`;`i`];
2870 ASM_REWRITE_TAC[IN];
2872 FIRST_X_ASSUM_ST `pi` MP_TAC;
2874 MATCH_MP_TAC (arith `y < x ==> ~(x < y)`);
2875 FIRST_X_ASSUM (C INTRO_TAC [`i`;`w`]);
2877 BY(ASM_MESON_TAC[]);
2879 MATCH_MP_TAC (UNDISCH SYNQIWN);
2880 TYPIFY `s` EXISTS_TAC;
2882 TYPIFY_GOAL_THEN `cstab <= dist(vv (SUC i),vv(i+ scs_k_v39 s - 1))` (unlist REWRITE_TAC);
2883 FIRST_X_ASSUM MATCH_MP_TAC;
2884 MATCH_MP_TAC scs_diag_2;
2885 BY(ASM_REWRITE_TAC[]);
2886 COMMENT "final kill";
2887 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[])
2891 let EAR_SOL_NN = prove_by_refinement(
2892 `main_nonlinear_terminal_v11 ==> ( !y1 y2 y3 y4 y5 y6.
2893 &2 <= y1 /\ y1 <= &2 * h0 /\
2894 &2 <= y2 /\ y2 <= &2 * h0 /\
2895 &2 <= y3 /\ y3 <= &2 * h0 /\
2896 cstab <= y4 /\ y4 <= #3.915 /\
2899 &0 <= delta_y y1 y2 y3 y4 y5 y6 ==>
2900 &0 <= sol_y y1 y2 y3 y4 y5 y6)`,
2903 REPEAT WEAKER_STRIP_TAC;
2905 ASM_CASES_TAC `delta_y y1 y2 y3 y4 y5 y6 = &0`;
2906 INTRO_TAC (UNDISCH Terminal.EAR_DIH1_DELTA_0) [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
2908 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2910 REWRITE_TAC[Sphere.sol_y];
2912 INTRO_TAC Terminal.DIH_Y_NN [`y2`;`y3`;`y1`;`(&2)`;`(&2)`;`y4`];
2914 FIRST_X_ASSUM_ST `delta_y` MP_TAC;
2915 ASM_REWRITE_TAC[Merge_ineq.delta_y_sym];
2916 BY(ASM_TAC THEN REAL_ARITH_TAC);
2917 INTRO_TAC Terminal.DIH_Y_NN [`y3`;`y1`;`y2`;`(&2)`;`y4`;`(&2)`];
2919 FIRST_X_ASSUM_ST `delta_y` MP_TAC;
2920 ASM_REWRITE_TAC[Merge_ineq.delta_y_sym];
2921 BY(ASM_TAC THEN REAL_ARITH_TAC);
2923 COMMENT "replace solid angle";
2924 TYPIFY `&0 < delta_y y1 y2 y3 y4 y5 y6` (C SUBGOAL_THEN MP_TAC);
2925 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2927 MATCH_MP_TAC (arith `&0 < x ==> &0 <= x`);
2928 REWRITE_TAC[Merge_ineq.sol_y_sol_x];
2929 MATCH_MP_TAC Terminal.sol_x_nn;
2930 REPEAT (GMATCH_SIMP_TAC REAL_LT_MUL_EQ);
2931 REWRITE_TAC[Trigonometry1.UPS_X_SQUARES];
2932 REPEAT (GMATCH_SIMP_TAC REAL_LT_MUL_EQ);
2933 TYPIFY `&0 < eulerA_x (y1 * y1) (y2 * y2) (y3 * y3) (y4 * y4) (y5 * y5) (y6 * y6)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
2934 INTRO_TAC (Terminal.get_main_nonlinear "4821120729") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
2935 REWRITE_TAC[Sphere.ineq;Sphere.y_of_x;arith `x > &0 <=> &0 < x`];
2936 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Appendix.cstab] THEN REAL_ARITH_TAC);
2937 TYPIFY `&0 < delta_x (y1 * y1) (y2 * y2) (y3 * y3) (y4 * y4) (y5 * y5) (y6 * y6)` (C SUBGOAL_THEN (unlist REWRITE_TAC));
2938 FIRST_X_ASSUM MP_TAC;
2939 BY(REWRITE_TAC[Sphere.delta_y]);
2940 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN (REWRITE_TAC[Appendix.cstab;Sphere.h0]) THEN REAL_ARITH_TAC)
2944 let scs_mk_unadorned_unadorned = prove_by_refinement(
2945 `!k d a b. unadorned_v39 (mk_unadorned_v39 k d a b)`,
2948 BY(REWRITE_TAC[Appendix.unadorned_v39;Terminal.scs_unadorned_explicit])
2952 let scs_basic_unadorned = prove_by_refinement(
2953 `!k d a b. scs_basic_v39 (mk_unadorned_v39 k d a b)`,
2956 BY(REWRITE_TAC[Appendix.scs_basic;Terminal.scs_unadorned_explicit;scs_mk_unadorned_unadorned])
2960 let scs_diag_cs_adj = prove_by_refinement(
2961 `!k a b i j. scs_diag k i j ==> cs_adj k a b i j = b`,
2964 REWRITE_TAC[Appendix.scs_diag;Appendix.cs_adj];
2969 let cs_adj_SUC = prove_by_refinement(
2970 `!k a b i j. 1 < k ==> cs_adj k a b i (SUC i) = a`,
2973 REWRITE_TAC[Appendix.scs_diag;Appendix.cs_adj];
2974 BY(MESON_TAC[Qknvmlb.SUC_MOD_NOT_EQ])
2978 let scs_6T1_props = prove_by_refinement(
2979 `scs_k_v39 scs_6T1 = 6 /\
2980 scs_basic_v39 scs_6T1 /\
2981 (!vv i j. BBs_v39 scs_6T1 vv /\ scs_diag 6 i j ==> cstab <= dist(vv i,vv j)) /\
2982 (!vv i. BBs_v39 scs_6T1 vv ==> dist(vv i, vv(SUC i)) = &2)`,
2986 BY(REWRITE_TAC[Appendix.scs_6T1;Terminal.scs_unadorned_explicit;]);
2989 BY(REWRITE_TAC[Appendix.scs_6T1;scs_basic_unadorned]);
2991 MP_TAC (REWRITE_RULE[Appendix.scs_6T1] is_scs_6T1);
2992 REWRITE_TAC[Appendix.scs_6T1;Appendix.BBs_v39;Terminal.scs_unadorned_explicit;LET_THM;Appendix.is_scs_v39];
2993 REPEAT WEAKER_STRIP_TAC;
2995 REPEAT WEAKER_STRIP_TAC;
2996 FIRST_X_ASSUM (MP_TAC o (MATCH_MP scs_diag_cs_adj));
2997 BY(FIRST_X_ASSUM_ST `cs_adj` MP_TAC THEN MESON_TAC[]);
2998 REPEAT WEAKER_STRIP_TAC;
2999 BY(FIRST_X_ASSUM_ST `cs_adj` MP_TAC THEN MESON_TAC[cs_adj_SUC;arith `&2 <= x /\ x <= &2 ==> x = &2`;arith `1 < 6`])
3003 let scs_6T1_generic = prove_by_refinement(
3004 `main_nonlinear_terminal_v11 ==> (!vv.
3005 (let V = IMAGE vv (:num) in
3006 let E = IMAGE (\i. {vv i, vv (SUC i)}) (:num) in
3007 BBs_v39 scs_6T1 vv /\ taustar_v39 scs_6T1 vv < &0 ==> scs_generic vv))`,
3010 REWRITE_TAC[LET_THM];
3011 REPEAT WEAKER_STRIP_TAC;
3012 MATCH_MP_TAC (UNDISCH (REWRITE_RULE[LET_THM] RRCWNS_WEAK));
3013 TYPIFY `scs_6T1` EXISTS_TAC;
3014 ASM_REWRITE_TAC[is_scs_6T1];
3015 ASSUME_TAC scs_6T1_props;
3017 REWRITE_TAC[arith `3 < 6`;(REWRITE_RULE[GSYM Appendix.scs_6T1] is_scs_6T1)];
3019 BY(ASM_MESON_TAC[]);
3020 REPEAT WEAKER_STRIP_TAC;
3021 REWRITE_TAC[arith `i+6 - 1 = i+5`];
3022 TYPIFY `dist(vv i,vv(i+5)) = dist(vv(i+5),vv(SUC(i+5)))` (C SUBGOAL_THEN SUBST1_TAC);
3023 TYPIFY `vv (SUC (i+5)) = vv(i)` ENOUGH_TO_SHOW_TAC;
3024 BY(DISCH_THEN SUBST1_TAC THEN REWRITE_TAC[DIST_SYM]);
3025 RULE_ASSUM_TAC(REWRITE_RULE[Appendix.BBs_v39;LET_THM;scs_6T1_props;Sphere.periodic]);
3026 BY(ASM_REWRITE_TAC[arith `SUC (i+5) = i + 6`]);
3028 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3032 let empty_6T1 = prove_by_refinement(
3033 `main_nonlinear_terminal_v11 ==>
3034 (!vv. BBs_v39 scs_6T1 vv ==> &0 <= taustar_v39 scs_6T1 vv)` ,
3037 COMMENT "preliminaries, sol < pi";
3038 REPEAT WEAKER_STRIP_TAC;
3040 ASSUME_TAC (REWRITE_RULE[GSYM Appendix.scs_6T1] (is_scs_6T1));
3041 COMMENT "new material";
3042 TYPIFY `!i j. i < 6 /\ j < 6 /\ vv i = vv j ==> i = j` (C SUBGOAL_THEN ASSUME_TAC);
3043 MATCH_MP_TAC vv_inj_lemma;
3044 BY(ASM_MESON_TAC[Appendix.scs_6T1;IN;Terminal.scs_unadorned_explicit]);
3045 INTRO_TAC Jkqewgv.JKQEWGV1 [`scs_6T1`;`vv`];
3048 ASM_SIMP_TAC[arith `~(&0 <= t) ==> (t < &0)`];
3049 REWRITE_TAC[Appendix.scs_6T1];
3050 ASM_REWRITE_TAC[Terminal.scs_unadorned_explicit];
3053 TYPIFY `scs_generic vv` (C SUBGOAL_THEN ASSUME_TAC);
3054 MATCH_MP_TAC (REWRITE_RULE[LET_THM] (UNDISCH scs_6T1_generic));
3055 BY(ASM_REWRITE_TAC[] THEN ASM_TAC THEN REAL_ARITH_TAC);
3056 COMMENT "big expansion";
3057 REPEAT (FIRST_X_ASSUM MP_TAC);
3058 REWRITE_TAC[Appendix.taustar_v39;LET_DEF;LET_END_DEF;Appendix.BBs_v39;Terminal.scs_unadorned_explicit;Appendix.scs_6T1];
3059 REWRITE_TAC[arith `~(6 <= 3)`;Terminal.dsv_unadorned];
3060 REPEAT WEAKER_STRIP_TAC;
3062 FIRST_X_ASSUM_ST `tau_fun` MP_TAC;
3064 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] Terminal.tau_fun_azim);
3065 TYPIFY `6` EXISTS_TAC;
3066 ASM_REWRITE_TAC[arith `3 <= 6`;arith `&6 - &2 = &4`];
3067 TYPIFY `!i. dist(vv i,vv (i+1)) = &2` (C SUBGOAL_THEN ASSUME_TAC);
3068 REPEAT WEAKER_STRIP_TAC;
3069 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`i`;`i+1`]);
3070 REWRITE_TAC[Appendix.cs_adj;arith `i + 1 = SUC i`];
3071 SIMP_TAC[Qknvmlb.SUC_MOD_NOT_EQ;arith `1< 6`];
3073 COMMENT "end expansion";
3074 COMMENT "edge lengths";
3075 TYPIFY `!i. cstab <= dist(vv i,vv (i+2))` (C SUBGOAL_THEN ASSUME_TAC);
3076 REPEAT WEAKER_STRIP_TAC;
3077 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`i`;`i+2`]);
3078 TYPIFY `cs_adj 6 (&2) cstab i (i+2) = cstab` ENOUGH_TO_SHOW_TAC;
3079 DISCH_THEN SUBST1_TAC;
3081 REWRITE_TAC[Appendix.cs_adj];
3083 FIRST_X_ASSUM MP_TAC;
3084 BY(MESON_TAC[arith `~(0=6) /\ (2 < 6) /\ ~(0=2)`;Oxl_2012.MOD_INJ1]);
3086 FIRST_X_ASSUM MP_TAC;
3088 FIRST_X_ASSUM MP_TAC;
3089 REWRITE_TAC[arith `SUC i = i+1 /\ i + 2 = (i+1) + 1`];
3090 BY(MESON_TAC[arith `~(0=6) /\ (1 < 6) /\ ~(0=1)`;Oxl_2012.MOD_INJ1]);
3091 FIRST_X_ASSUM MP_TAC;
3092 REWRITE_TAC[arith `SUC (i+2)=i+3`];
3093 BY(MESON_TAC[arith `~(0=6) /\ (3 < 6) /\ ~(0=3)`;Oxl_2012.MOD_INJ1]);
3095 TYPIFY `!i. &2 <= norm (vv i) /\ norm (vv i) <= &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
3097 REWRITE_TAC[GSYM Fnjlbxs.in_ball_annulus];
3098 RULE_ASSUM_TAC(REWRITE_RULE[Terminal.IMAGE_SUBSET_IN;IN_UNIV]);
3099 BY(ASM_REWRITE_TAC[]);
3100 TYPIFY `!i. dist(vv i,vv(i+2)) <= &4` (C SUBGOAL_THEN ASSUME_TAC);
3102 MATCH_MP_TAC REAL_LE_TRANS;
3103 TYPIFY `dist(vv i,vv (i+1)) + dist(vv (i+1),vv(i+2))` EXISTS_TAC;
3105 BY(REWRITE_TAC[DIST_TRIANGLE]);
3106 ASM_REWRITE_TAC[arith `i+2 = (i+1)+1`];
3108 TYPIFY `!i. dist(vv i,vv (i+2)) <= #3.915` (C SUBGOAL_THEN ASSUME_TAC);
3109 REPEAT WEAKER_STRIP_TAC;
3110 INTRO_TAC (Terminal.get_main_nonlinear "6459846571") [`norm(vv (i+1))`;`norm (vv i)`;`norm (vv (i+2))`;`dist(vv i,vv (i+2))`;`dist(vv (i+1),vv(i+2))`;`dist(vv i,vv(i+1))`];
3111 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
3113 ASM_REWRITE_TAC[arith `(i+2 = (i+1)+1)`];
3114 TYPIFY `#2.52 = &2 * h0` (C SUBGOAL_THEN SUBST1_TAC);
3115 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
3116 ASM_REWRITE_TAC[arith `&2 <= &2`];
3118 FIRST_X_ASSUM_ST `cstab` (C INTRO_TAC [`i`]);
3119 REWRITE_TAC[Sphere.cstab;arith `(i+1)+1 = i+2`];
3121 BY(FIRST_X_ASSUM (C INTRO_TAC [`i`]) THEN REWRITE_TAC[arith `(i+1)+1 = i+2`] THEN REAL_ARITH_TAC);
3122 TYPIFY `dist(vv i,vv(i+1)) = dist(vv(i+1),vv(i))` (C SUBGOAL_THEN SUBST1_TAC);
3123 BY(REWRITE_TAC[DIST_SYM]);
3124 REWRITE_TAC[arith `x < y <=> ~(y <= x)`;REWRITE_RULE[LET_THM] Tame_lemmas.delta_y_pos];
3126 COMMENT "azim le pi";
3127 TYPIFY `!i. azim (vec 0) (vv i) (vv (i+1)) (vv (i + 6 -1)) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
3128 RULE_ASSUM_TAC(REWRITE_RULE[Localization.convex_local_fan]);
3129 ASM_TAC THEN REPEAT WEAKER_STRIP_TAC;
3130 REWRITE_TAC[arith `i+1 = SUC i`];
3131 GMATCH_SIMP_TAC (GSYM azim_in_fan_azim);
3132 TYPIFY `IMAGE (\i. {vv i, vv (SUC i)}) (:num)` EXISTS_TAC;
3133 ASM_REWRITE_TAC[arith `3 <= 6`];
3135 BY(ASM_MESON_TAC[]);
3136 BY(ASM_MESON_TAC[IN_IMAGE;IN_UNIV]);
3137 COMMENT "expand sol_local";
3138 FIRST_X_ASSUM_ST `sol_local` MP_TAC;
3139 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] sol_local_azim);
3140 TYPIFY `6` EXISTS_TAC;
3142 BY(ASM_MESON_TAC[arith `3 <= 6`]);
3144 COMMENT "split azim";
3145 RULE_ASSUM_TAC(REWRITE_RULE[Appendix.scs_generic]);
3146 TYPIFY `!i. azim(vec 0) (vv i) (vv (SUC i)) (vv (i + 5)) = azim(vec 0) (vv i) (vv (SUC i)) (vv (i+2)) + azim(vec 0) (vv i) (vv (i+2)) (vv (i+4)) + azim (vec 0) (vv i) (vv (i+4)) (vv (i+5))` (C SUBGOAL_THEN ASSUME_TAC);
3148 INTRO_TAC Terminal.vv_split_azim_generic [`vv`;`6`;`i`;`4`;`5`];
3149 ASM_REWRITE_TAC[LET_THM;arith `3 <= 6 /\ 0 < 4 /\ 4 < 5 /\ 5 < 6`];
3150 DISCH_THEN SUBST1_TAC;
3151 INTRO_TAC Terminal.vv_split_azim_generic [`vv`;`6`;`i`;`2`;`4`];
3152 ASM_REWRITE_TAC[LET_THM;arith `3 <= 6 /\ 0 < 2 /\ 2 < 4 /\ 4 < 6`];
3154 COMMENT "expand sums";
3155 FIRST_X_ASSUM_ST `sum` MP_TAC;
3156 TYPIFY `{i | i < 6 } = {0,1,2,3,4,5}` (C SUBGOAL_THEN SUBST1_TAC);
3157 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
3159 REPEAT (GMATCH_SIMP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt THEN REWRITE_TAC[NOT_IN_EMPTY;IN_INSERT;arith `~(0=1)/\ ~(0=2)/\ ~(0=3) /\ ~(0=4) /\ ~(0=5) /\ ~(1=2) /\ ~(1 = 3) /\ ~(1 = 4) /\ ~(1=5) /\ ~(2 = 3) /\ ~(2 = 4) /\ ~(2 = 5) /\ ~(3 = 4) /\ ~(3 =5) /\ ~(4 = 5)`]);
3160 REWRITE_TAC[SUM_CLAUSES;Geomdetail.FINITE6];
3161 REWRITE_TAC[arith `i + 1 = SUC i`];
3162 FIRST_ASSUM (C INTRO_TAC [`0`]);
3163 FIRST_ASSUM (C INTRO_TAC [`2`]);
3164 FIRST_X_ASSUM (C INTRO_TAC [`4`]);
3165 FIRST_ASSUM (C INTRO_TAC [`0`]);
3166 FIRST_ASSUM (C INTRO_TAC [`1`]);
3167 FIRST_ASSUM (C INTRO_TAC [`2`]);
3168 FIRST_ASSUM (C INTRO_TAC [`3`]);
3169 FIRST_ASSUM (C INTRO_TAC [`4`]);
3170 FIRST_X_ASSUM (C INTRO_TAC [`5`]);
3171 REPEAT WEAKER_STRIP_TAC;
3172 TYPIFY `azim (vec 0) (vv 4) (vv (SUC 4)) (vv (4 + 2)) <= pi /\ azim (vec 0) (vv 4) (vv (4 + 2)) (vv (4 + 4)) <= pi /\ azim (vec 0) (vv 4) (vv (4 + 4)) (vv (4 + 5)) <= pi /\ azim (vec 0) (vv 2) (vv (SUC 2)) (vv (2 + 2)) <= pi /\ azim (vec 0) (vv 2) (vv (2 + 2)) (vv (2 + 4)) <= pi /\ azim (vec 0) (vv 2) (vv (2 + 4)) (vv (2 + 5)) <= pi /\ azim (vec 0) (vv 0) (vv (SUC 0)) (vv (0 + 2)) <= pi /\ azim (vec 0) (vv 0) (vv (0 + 2)) (vv (0 + 4)) <= pi /\ azim (vec 0) (vv 0) (vv (0 + 4)) (vv (0 + 5)) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
3173 MP_TAC Counting_spheres.AZIM_NN;
3174 REPEAT (FIRST_X_ASSUM_ST `x <= pi` MP_TAC);
3175 ASM_REWRITE_TAC[arith `i + 1 = SUC i /\ 6 - 1 = 5`];
3176 BY(MESON_TAC[arith `&0 <= x /\ &0 <= y /\ &0 <= z /\ x + y + z <= pi ==> x <= pi /\ y <= pi /\ z <= pi`]);
3177 FIRST_X_ASSUM_ST `&6 - &2` MP_TAC;
3178 ASM_REWRITE_TAC[arith `6 - 1 = 5`];
3179 RULE_ASSUM_TAC(REWRITE_RULE[arith `6 - 1 = 5 /\ i + 1 = SUC i`]);
3180 COMMENT "collinearity";
3181 TYPIFY `!i j. ~(vv i = vv j) ==> ~collinear {vec 0,vv i,vv j}` (C SUBGOAL_THEN ASSUME_TAC);
3182 REPEAT WEAKER_STRIP_TAC;
3183 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`];
3184 ASM_SIMP_TAC[Local_lemmas.CVX_LO_IMP_LO];
3185 REWRITE_TAC[Qknvmlb.IN_IMAGE_VV];
3186 DISCH_THEN (C INTRO_TAC [`vv j`]);
3187 BY(ASM_REWRITE_TAC[Qknvmlb.IN_IMAGE_VV]);
3188 COMMENT "convert to dih";
3189 ASSUME_TAC (arith `SUC 0 = 1 /\ SUC 1 = 2 /\ SUC 2 = 3 /\ SUC 3 = 4 /\ SUC 4 = 5 /\ SUC 5 = 6 /\ 0+2=2 /\ 0+4=4 /\ 0+5=5 /\ 1+5=6 /\ 3+5 = 8 /\ 5 + 5 = 10 /\ 2 + 2 = 4 /\ 2+4=6 /\ 2+5=7 /\ 4+2=6 /\ 4+4=8 /\ 4+5=9`);
3191 TYPIFY `vv 6 = vv 0 /\ vv 7 = vv 1 /\ vv 8 = vv 2 /\ vv 9 = vv 3 /\ vv 10 = vv 4` (C SUBGOAL_THEN ASSUME_TAC);
3192 ONCE_REWRITE_TAC[arith `6 = 0 + 6 /\ 7 = 1 + 6 /\ 8 = 2 + 6 /\ 9 = 3 + 6 /\ 10 = 4 + 6`];
3193 FIRST_X_ASSUM_ST `periodic` MP_TAC;
3194 BY(SIMP_TAC [Sphere.periodic]);
3196 REPEAT (FIRST_X_ASSUM_ST `azim` MP_TAC) THEN ASM_REWRITE_TAC[];
3197 REPEAT WEAKER_STRIP_TAC;
3198 TYPIFY `!i j. (i < 6 /\ j < 6 /\ ~(i = j)) ==> ~collinear {vec 0 ,vv i ,vv j}` (C SUBGOAL_THEN ASSUME_TAC);
3199 REPEAT WEAKER_STRIP_TAC;
3200 FIRST_X_ASSUM MP_TAC;
3202 FIRST_X_ASSUM MATCH_MP_TAC;
3204 FIRST_X_ASSUM_ST `~` MP_TAC;
3206 FIRST_X_ASSUM MATCH_MP_TAC;
3207 BY(ASM_REWRITE_TAC[]);
3208 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 4) = dihV (vec 0) (vv 0) (vv 2) (vv 4) /\ azim (vec 0) (vv 0) (vv 4) (vv 5) = dihV (vec 0) (vv 0) (vv 4) (vv 5) /\ 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 4) = dihV (vec 0) (vv 2) (vv 3) (vv 4) /\ azim (vec 0) (vv 2) (vv 4) (vv 0) = dihV (vec 0) (vv 2) (vv 4) (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 4) (vv 2) = dihV (vec 0) (vv 3) (vv 4) (vv 2) /\ azim (vec 0) (vv 4) (vv 5) (vv 0) = dihV (vec 0) (vv 4) (vv 5) (vv 0) /\ azim (vec 0) (vv 4) (vv 0) (vv 2) = dihV (vec 0) (vv 4) (vv 0) (vv 2) /\ azim (vec 0) (vv 4) (vv 2) (vv 3) = dihV (vec 0) (vv 4) (vv 2) (vv 3) /\ azim (vec 0) (vv 5) (vv 0) (vv 4) = dihV (vec 0) (vv 5) (vv 0) (vv 4)` (C SUBGOAL_THEN ASSUME_TAC);
3209 ASSUME_TAC (arith `0 < 6 /\ 1 < 6 /\ 2 < 6 /\ 3 < 6 /\ 4 < 6 /\ 5 < 6 /\ ~(0=1)/\ ~(0=2)/\ ~(0=3) /\ ~(0=4) /\ ~(0=5) /\ ~(1=2) /\ ~(1 = 3) /\ ~(1 = 4) /\ ~(1=5) /\ ~(2 = 3) /\ ~(2 = 4) /\ ~(2 = 5) /\ ~(3 = 4) /\ ~(3 =5) /\ ~(4 = 5)`);
3210 BY(REPEAT (CONJ_TAC) THEN MATCH_MP_TAC Polar_fan.AZIM_DIHV_SAME_STRONG THEN ASM_REWRITE_TAC[] THEN CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN ASM_REWRITE_TAC[]);
3212 TYPIFY `#0.712 <= tau3 (vv 0) (vv 1) (vv 2) + tau3 (vv 0) (vv 2) (vv 4) + tau3 (vv 0) (vv 4) (vv 5) + tau3 (vv 2) (vv 3) (vv 4)` ENOUGH_TO_SHOW_TAC;
3213 ONCE_REWRITE_TAC[arith `&0 <= a - b - c <=> c <= a - b`];
3214 MATCH_MP_TAC (arith `d = #0.712 /\ ts = rs ==> (#0.712 <= ts ==> d <= rs)`);
3215 REWRITE_TAC[Appendix.d_tame;arith `~( 6=3) /\ ~(6 = 4) /\ ~(6 = 5)`];
3216 REWRITE_TAC[Appendix.tau3;Appendix.rho_rho_fun];
3218 REPEAT (GMATCH_SIMP_TAC Terminal.tau3_taum_40);
3220 RULE_ASSUM_TAC(REWRITE_RULE[Terminal.IMAGE_SUBSET_IN;IN_UNIV]);
3222 FIRST_X_ASSUM_ST `dist(a,b) = &2` MP_TAC;
3224 FIRST_ASSUM (C INTRO_TAC [`0`]);
3225 FIRST_ASSUM (C INTRO_TAC [`1`]);
3226 FIRST_ASSUM (C INTRO_TAC [`2`]);
3227 FIRST_ASSUM (C INTRO_TAC [`3`]);
3228 FIRST_ASSUM (C INTRO_TAC [`4`]);
3229 FIRST_X_ASSUM (C INTRO_TAC [`5`]);
3230 ASM_REWRITE_TAC[DIST_SYM];
3231 REPEAT WEAKER_STRIP_TAC THEN ASM_REWRITE_TAC[];
3232 FIRST_X_ASSUM_ST `cstab <= dist(a,b)` MP_TAC;
3234 FIRST_ASSUM (C INTRO_TAC [`0`]);
3235 FIRST_ASSUM (C INTRO_TAC [`2`]);
3236 FIRST_X_ASSUM (C INTRO_TAC [`4`]);
3237 ASM_REWRITE_TAC[DIST_SYM];
3238 REPEAT WEAKER_STRIP_TAC;
3239 FIRST_X_ASSUM_ST `dist(a,b) <= #3.915` MP_TAC;
3241 FIRST_ASSUM (C INTRO_TAC [`0`]);
3242 FIRST_ASSUM (C INTRO_TAC [`2`]);
3243 FIRST_X_ASSUM (C INTRO_TAC [`4`]);
3244 ASM_REWRITE_TAC[DIST_SYM];
3245 REPEAT WEAKER_STRIP_TAC;
3246 REWRITE_TAC[TAUT `a /\ b /\ c <=> (a /\ b) /\ c`];
3248 BY(REPLICATE_TAC 12 (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[Sphere.cstab] THEN REAL_ARITH_TAC);
3249 COMMENT "introduce ineq";
3250 INTRO_TAC Pent_hex.terminal_hex_taum [`norm (vv 0)`;`norm (vv 2)`;`norm (vv 4)`;`dist (vv 2,vv 4)`;`dist(vv 0,vv 4)`;`dist(vv 0,vv 2)`;`norm (vv 3)`;`norm(vv 1)`;`norm (vv 5)`];
3251 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
3253 REPEAT (FIRST_X_ASSUM_ST `azim` kill);
3255 TYPIFY `#2.52 = &2 * h0` (C SUBGOAL_THEN SUBST1_TAC);
3256 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
3257 BY(ASM_REWRITE_TAC[DIST_SYM;GSYM Sphere.cstab]);
3258 COMMENT "break into final cases";
3260 FIRST_X_ASSUM MP_TAC;
3261 REWRITE_TAC[DIST_SYM];
3262 REWRITE_TAC[Terminal.taum_sym];
3265 FIRST_X_ASSUM_ST `delta_y` MP_TAC;
3266 INTRO_TAC Tame_lemmas.delta_y_pos [`vv 5`;`vv 0`;`vv 4`];
3267 ASM_REWRITE_TAC[LET_THM;DIST_SYM];
3270 FIRST_X_ASSUM_ST `delta_y` MP_TAC;
3271 INTRO_TAC Tame_lemmas.delta_y_pos [`vv 1`;`vv 0`;`vv 2`];
3272 ASM_REWRITE_TAC[LET_THM;DIST_SYM];
3275 FIRST_X_ASSUM_ST `delta_y` MP_TAC;
3276 INTRO_TAC Tame_lemmas.delta_y_pos [`vv 3`;`vv 2`;`vv 4`];
3277 ASM_REWRITE_TAC[LET_THM;DIST_SYM];
3280 FIRST_X_ASSUM_ST `eulerA_x` MP_TAC;
3282 MATCH_MP_TAC (arith ` e > &0 ==> ~(e < &0)`);
3283 INTRO_TAC (UNDISCH DIH_IMP_EULER_A_POS) [`(vec 0):real^3`;`vv 0`;`vv 2`;`vv 4`];
3284 REWRITE_TAC[Sphere.y_of_x;DIST_SYM;LET_THM;DIST_0];
3285 DISCH_THEN MATCH_MP_TAC;
3286 ASM_REWRITE_TAC[GSYM Sphere.cstab];
3287 TYPIFY_GOAL_THEN `~collinear {vec 0, vv 0, vv 2} /\ ~collinear {vec 0, vv 2, vv 4} /\ ~collinear {vec 0, vv 0, vv 4}` (unlist REWRITE_TAC);
3288 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN REWRITE_TAC[arith `~(0=2) /\ ~(2 = 4) /\ ~(0=4) /\ 0 < 6 /\ 2 < 6 /\ 4 < 6`]);
3289 FIRST_X_ASSUM_ST `(&6 - &2)` MP_TAC;
3291 TYPIFY `pi <= dihV (vec 0) (vv 1) (vv 2) (vv 0) + dihV (vec 0) (vv 2) (vv 0) (vv 1) + dihV (vec 0) (vv 0) (vv 1) (vv 2) /\pi <= dihV (vec 0) (vv 3) (vv 4) (vv 2) + dihV (vec 0) (vv 4) (vv 2) (vv 3)+dihV (vec 0) (vv 2) (vv 3) (vv 4) /\ pi <= dihV (vec 0) (vv 5) (vv 0) (vv 4) + dihV (vec 0) (vv 0) (vv 4) (vv 5) +dihV (vec 0) (vv 4) (vv 5) (vv 0) ` ENOUGH_TO_SHOW_TAC;
3292 REWRITE_TAC [DIHV_SYM];
3294 REPEAT (GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] Merge_ineq.DIHV_EQ_DIH_Y));
3295 FIRST_X_ASSUM_ST `collinear` (REPEAT o GMATCH_SIMP_TAC);
3296 REWRITE_TAC[arith `0 < 6 /\ 1 < 6 /\ 2 < 6 /\ 3 < 6 /\ 4 < 6 /\ 5 < 6 /\ ~(0=1)/\ ~(0=2)/\ ~(0=3) /\ ~(0=4) /\ ~(0=5) /\ ~(1=2) /\ ~(1 = 3) /\ ~(1 = 4) /\ ~(1=5) /\ ~(2 = 3) /\ ~(2 = 4) /\ ~(2 = 5) /\ ~(3 = 4) /\ ~(3 =5) /\ ~(4 = 5)`];
3297 REWRITE_TAC[arith `pi <= a + b + c <=> &0 <= a + b + c - pi`;GSYM Sphere.sol_y;DIST_SYM];
3298 REPEAT CONJ_TAC THEN (MATCH_MP_TAC (UNDISCH EAR_SOL_NN)) THEN ASM_REWRITE_TAC[DIST_0];
3299 INTRO_TAC Tame_lemmas.delta_y_pos [`vv 1`;`vv 2`;`vv 0`];
3300 BY(ASM_REWRITE_TAC[LET_THM;DIST_SYM]);
3301 INTRO_TAC Tame_lemmas.delta_y_pos [`vv 3`;`vv 4`;`vv 2`];
3302 BY(ASM_REWRITE_TAC[LET_THM;DIST_SYM]);
3303 INTRO_TAC Tame_lemmas.delta_y_pos [`vv 5`;`vv 0`;`vv 4`];
3304 BY(ASM_REWRITE_TAC[LET_THM;DIST_SYM])
3308 let is_scs_5T1 = prove_by_refinement(
3309 `is_scs_v39 (scs_5T1)`,
3312 REWRITE_TAC[Appendix.scs_5T1];
3313 MATCH_MP_TAC is_scs_adj;
3314 REWRITE_TAC[Appendix.d_tame;Sphere.cstab];
3315 REWRITE_TAC[arith `~(5 = 3) /\ (3 <= 5) /\ (5 <= 6) /\ (3 < 5)`];
3316 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3320 let scs_5T1_props = prove_by_refinement(
3321 `scs_k_v39 scs_5T1 = 5 /\
3322 scs_basic_v39 scs_5T1 /\
3323 (!vv i j. BBs_v39 scs_5T1 vv /\ scs_diag 5 i j ==> cstab <= dist(vv i,vv j)) /\
3324 (!vv i. BBs_v39 scs_5T1 vv ==> dist(vv i, vv(SUC i)) = &2)`,
3328 BY(REWRITE_TAC[Appendix.scs_5T1;Terminal.scs_unadorned_explicit;]);
3331 BY(REWRITE_TAC[Appendix.scs_5T1;scs_basic_unadorned]);
3334 REWRITE_TAC[Appendix.scs_5T1;Appendix.BBs_v39;Terminal.scs_unadorned_explicit;LET_THM;Appendix.is_scs_v39];
3335 REPEAT WEAKER_STRIP_TAC;
3337 REPEAT WEAKER_STRIP_TAC;
3338 FIRST_X_ASSUM (MP_TAC o (MATCH_MP scs_diag_cs_adj));
3339 BY(FIRST_X_ASSUM_ST `cs_adj` MP_TAC THEN MESON_TAC[]);
3340 REPEAT WEAKER_STRIP_TAC;
3341 BY(FIRST_X_ASSUM_ST `cs_adj` MP_TAC THEN MESON_TAC[cs_adj_SUC;arith `&2 <= x /\ x <= &2 ==> x = &2`;arith `1 < 5`])
3345 let scs_5T1_generic = prove_by_refinement(
3346 `main_nonlinear_terminal_v11 ==> (!vv.
3347 (let V = IMAGE vv (:num) in
3348 let E = IMAGE (\i. {vv i, vv (SUC i)}) (:num) in
3349 BBs_v39 scs_5T1 vv /\ taustar_v39 scs_5T1 vv < &0 ==> scs_generic vv))`,
3352 REWRITE_TAC[LET_THM];
3353 REPEAT WEAKER_STRIP_TAC;
3354 MATCH_MP_TAC (UNDISCH (REWRITE_RULE[LET_THM] RRCWNS_WEAK));
3355 TYPIFY `scs_5T1` EXISTS_TAC;
3356 ASM_REWRITE_TAC[is_scs_5T1];
3357 ASSUME_TAC scs_5T1_props;
3359 REWRITE_TAC[arith `3 < 5`;(is_scs_5T1)];
3361 BY(ASM_MESON_TAC[]);
3362 REPEAT WEAKER_STRIP_TAC;
3363 REWRITE_TAC[arith `i+5 - 1 = i+4`];
3364 TYPIFY `dist(vv i,vv(i+4)) = dist(vv(i+4),vv(SUC(i+4)))` (C SUBGOAL_THEN SUBST1_TAC);
3365 TYPIFY `vv (SUC (i+4)) = vv(i)` ENOUGH_TO_SHOW_TAC;
3366 BY(DISCH_THEN SUBST1_TAC THEN REWRITE_TAC[DIST_SYM]);
3367 RULE_ASSUM_TAC(REWRITE_RULE[Appendix.BBs_v39;LET_THM;scs_5T1_props;Sphere.periodic]);
3368 BY(ASM_REWRITE_TAC[arith `SUC (i+4) = i + 5`]);
3370 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
3376 let periodic_sum_shift = prove_by_refinement(
3378 periodic f n /\ ~(n = 0) ==>
3379 sum { i | i < n} f = sum {i | i < n } (\i. f (j+i))`,
3382 REPEAT WEAKER_STRIP_TAC;
3383 INTRO_TAC Oxl_def.periodic_sum [`f`;`n`];
3385 DISCH_THEN (C INTRO_TAC [`j`]);
3386 TYPIFY `(0.. n - 1) = {i | i < n}` (C SUBGOAL_THEN SUBST1_TAC);
3387 REWRITE_TAC[EXTENSION;IN_NUMSEG;IN_ELIM_THM];
3389 BY(ASM_TAC THEN ARITH_TAC);
3390 DISCH_THEN (SUBST1_TAC o GSYM);
3391 INTRO_TAC Oxl_def.BIJ_SUM [`{i | (i:num) < n}`;`j..n - 1 + j`;`f`;`(\i. j+(i:num))`];
3393 REWRITE_TAC[BIJ;INJ;SURJ];
3395 REWRITE_TAC[IN_NUMSEG;IN_ELIM_THM];
3396 BY(ASM_TAC THEN ARITH_TAC);
3397 DISCH_THEN (unlist REWRITE_TAC);
3398 REWRITE_TAC[IN_NUMSEG;IN_ELIM_THM];
3399 REPEAT WEAKER_STRIP_TAC;
3400 TYPIFY `x - (j:num)` EXISTS_TAC;
3401 BY(ASM_TAC THEN ARITH_TAC);
3402 DISCH_THEN (SUBST1_TAC o GSYM);
3403 MATCH_MP_TAC SUM_EQ;
3404 BY(REWRITE_TAC[o_THM])
3408 let c110186 = Flyspeck_constants.calc `atn (sqrt (#0.110186)) < #0.3205`;;
3410 let LEMMA_7175074394 = prove_by_refinement(
3411 `main_nonlinear_terminal_v11 ==> (!y1 y2 y3 y4 y5 y6. ineq [
3420 (delta_y y1 y2 y3 y4 y5 y6 <= &20) /\ (&0 <= delta_y y1 y2 y3 y4 y5 y6) ==>
3421 (dih_y y1 y2 y3 y4 y5 y6 < #0.3205)
3425 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;LET_THM];
3426 REPEAT WEAKER_STRIP_TAC;
3427 INTRO_TAC (Terminal.get_main_nonlinear "2485876245a") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
3428 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;LET_THM];
3430 BY(ASM_TAC THEN REAL_ARITH_TAC);
3431 REWRITE_TAC[Sphere.delta4_y;Sphere.y_of_x];
3433 INTRO_TAC (Terminal.get_main_nonlinear "7175074394") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
3434 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;LET_THM];
3435 ASM_SIMP_TAC [arith `x <= &20 ==> ~(x > &20)`];
3437 REWRITE_TAC[Sphere.dih_y;LET_THM];
3438 GMATCH_SIMP_TAC Merge_ineq.lindih_lt;
3439 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
3441 BY(ASM_TAC THEN REAL_ARITH_TAC);
3444 BY(MP_TAC Flyspeck_constants.bounds THEN REAL_ARITH_TAC);
3446 BY(ASM_TAC THEN REAL_ARITH_TAC);
3447 BY(ASM_TAC THEN REAL_ARITH_TAC);
3448 TYPIFY `&0 <= (&4 * (y1 * y1) * delta_x (y1 * y1) (y2 * y2) (y3 * y3) (y4 * y4) (y5 * y5) (y6 * y6))` (C SUBGOAL_THEN ASSUME_TAC);
3449 REPEAT (GMATCH_SIMP_TAC REAL_LE_MUL);
3450 REWRITE_TAC[GSYM Sphere.delta_y];
3451 BY(ASM_TAC THEN REAL_ARITH_TAC);
3452 GMATCH_SIMP_TAC Pack1.bp_bdt;
3453 GMATCH_SIMP_TAC SQRT_POS_LE;
3456 GMATCH_SIMP_TAC REAL_LE_MUL;
3457 GMATCH_SIMP_TAC TAN_POS_PI2_LE;
3458 BY(MP_TAC Flyspeck_constants.bounds THEN ASM_TAC THEN REAL_ARITH_TAC);
3459 GMATCH_SIMP_TAC SQRT_POW_2;
3461 MATCH_MP_TAC REAL_LT_TRANS;
3462 TYPIFY `#0.110186 * delta4_squared_y y1 y2 y3 y4 y5 y6` EXISTS_TAC;
3464 FIRST_X_ASSUM_ST `x1_delta_y` MP_TAC;
3465 BY(REWRITE_TAC[Sphere.x1_delta_y;Sphere.delta4_squared_y;Sphere.y_of_x;Sphere.x1_delta_x]);
3466 REWRITE_TAC[Sphere.delta4_squared_y;Sphere.y_of_x;Sphere.delta4_squared_x];
3467 REWRITE_TAC[arith `(x * y) pow 2 = x pow 2 * y pow 2`];
3468 GMATCH_SIMP_TAC REAL_LT_RMUL_EQ;
3469 REWRITE_TAC[GSYM Trigonometry2.NOT_ZERO_EQ_POW2_LT];
3471 BY(ASM_TAC THEN REAL_ARITH_TAC);
3472 TYPIFY `#0.110186 = sqrt(#0.110186) pow 2` (C SUBGOAL_THEN SUBST1_TAC);
3473 GMATCH_SIMP_TAC SQRT_POW_2;
3475 MATCH_MP_TAC Tame_inequalities.REAL_LT_SQUARE_POS;
3476 GMATCH_SIMP_TAC SQRT_POS_LT;
3479 TYPIFY `atn(sqrt #0.110186) < atn(tan #0.3205)` ENOUGH_TO_SHOW_TAC;
3480 BY(REWRITE_TAC[ATN_MONO_LT_EQ]);
3481 GMATCH_SIMP_TAC TAN_ATN;
3483 BY(MP_TAC Flyspeck_constants.bounds THEN REAL_ARITH_TAC);
3484 BY(REWRITE_TAC[c110186])
3489 let angle_sum_5T1 = prove_by_refinement(
3490 `main_nonlinear_terminal_v11 ==> (!y1 y2 y3 y4 y5 y6 y126 y135.
3499 (dih_y y1 y126 y135 cstab (&2) (&2) <=
3500 dih_y y1 y2 y3 y4 y5 y6 + dih_y y1 y2 y126 (&2) (&2) y6 + dih_y y1 y3 y135 (&2) (&2) y5 /\
3501 &0 <= delta_y y1 y2 y126 (&2) (&2) y6 /\ &0 <= delta_y y1 y3 y135 (&2) (&2) y5 ==>
3502 (&20 <= delta_y y1 y2 y126 (&2) (&2) y6 \/ &20 <= delta_y y1 y3 y135 (&2) (&2) y5)))
3506 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
3507 REPEAT WEAKER_STRIP_TAC;
3509 RULE_ASSUM_TAC(REWRITE_RULE[DE_MORGAN_THM;arith `~(x <= y) <=> y < x`]);
3510 TYPIFY `#2.52 = &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
3511 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
3512 INTRO_TAC (Terminal.get_main_nonlinear "6789182745") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
3513 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;GSYM Sphere.cstab];
3515 INTRO_TAC (Terminal.get_main_nonlinear "4887115291") [`y1`;`y126`;`y135`;`cstab`;`(&2)`;`(&2)`];
3516 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;GSYM Sphere.cstab];
3517 REWRITE_TAC[arith `x <= x`];
3519 INTRO_TAC (UNDISCH LEMMA_7175074394) [`y1`;`y126`;`y2`;`(&2)`;`y6`;`(&2)`];
3520 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;GSYM Sphere.cstab;LET_THM];
3521 INTRO_TAC (UNDISCH LEMMA_7175074394) [`y1`;`y135`;`y3`;`(&2)`;`y5`;`(&2)`];
3522 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;GSYM Sphere.cstab;LET_THM];
3523 ONCE_REWRITE_TAC[Nonlinear_lemma.dih_y_sym];
3524 REPEAT (FIRST_X_ASSUM_ST `delta_y` MP_TAC) THEN REWRITE_TAC[Pent_hex.delta_y_hex_cases] THEN REPEAT WEAKER_STRIP_TAC;
3525 BY(ASM_TAC THEN REAL_ARITH_TAC)
3529 let terminal_pent_taum2 = prove_by_refinement(
3530 `main_nonlinear_terminal_v11 ==> (!y1 y2 y3 y4 y5 y6 y126 y135.
3531 &0 <= delta_y y126 y1 y2 y6 (&2) (&2) /\
3532 &0 <= delta_y y135 y1 y3 y5 (&2) (&2) /\
3533 dih_y y1 y126 y135 cstab (&2) (&2) <=
3534 dih_y y1 y2 y3 y4 y5 y6 +
3535 dih_y y1 y2 y126 (&2) (&2) y6 +
3536 dih_y y1 y3 y135 (&2) (&2) y5
3548 (#0.616 < taum y126 y1 y2 y6 (&2) (&2) + taum y1 y2 y3 y4 y5 y6 + taum y135 y1 y3 y5 (&2) (&2))))
3552 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
3553 REPEAT WEAKER_STRIP_TAC;
3554 INTRO_TAC (UNDISCH angle_sum_5T1) [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`;`y126`;`y135`];
3555 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
3556 ASM_REWRITE_TAC[Pent_hex.delta_y_hex_cases;Sphere.cstab];
3558 INTRO_TAC (UNDISCH Pent_hex.terminal_pent_taum) [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`;`y126`;`y135`];
3559 BY(ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`]);
3560 INTRO_TAC (UNDISCH Pent_hex.terminal_pent_taum) [`y1`;`y3`;`y2`;`y4`;`y6`;`y5`;`y135`;`y126`];
3561 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
3562 TYPIFY `taum y1 y3 y2 y4 y6 y5 = taum y1 y2 y3 y4 y5 y6` ENOUGH_TO_SHOW_TAC;
3564 BY(MESON_TAC[Terminal.taum_sym])
3568 let delta_diff4 = prove_by_refinement(
3569 `!x1 x2 x3 x4 x5 x6 z4.
3570 delta_x x1 x2 x3 x4 x5 x6 = delta_x x1 x2 x3 z4 x5 x6 +
3571 delta_x4 x1 x2 x3 x4 x5 x6 * (x4 - z4) + x1 * (x4 - z4) pow 2`,
3574 BY(REWRITE_TAC[Sphere.delta_x;Sphere.delta_x4] THEN REAL_ARITH_TAC)
3578 let dih_y_mono = prove_by_refinement(
3579 `!y1 y2 y3 y4 y5 y6 y4'.
3580 y4 <= y4' /\ &0 < y1 /\ &0 < y4 /\
3581 &0 < delta_y y1 y2 y3 y4 y5 y6 /\
3582 &0 <= delta_y y1 y2 y3 y4' y5 y6 ==>
3583 dih_y y1 y2 y3 y4 y5 y6 <= dih_y y1 y2 y3 y4' y5 y6`,
3586 REPEAT WEAKER_STRIP_TAC;
3587 TYPIFY `y4 = y4'` ASM_CASES_TAC;
3588 BY(ASM_REWRITE_TAC[arith `x <= x`]);
3589 ASM_CASES_TAC `&0 < delta_y y1 y2 y3 y4' y5 y6`;
3590 REWRITE_TAC[Sphere.dih_y;LET_THM];
3591 MATCH_MP_TAC (arith `x < y ==> x <= y`);
3592 MATCH_MP_TAC Tame_inequalities.DIH_X_MONO_LT_4;
3593 GMATCH_SIMP_TAC Misc_defs_and_lemmas.ABS_SQUARE;
3594 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
3595 ASM_REWRITE_TAC[GSYM Sphere.delta_y];
3596 BY(ASM_TAC THEN REAL_ARITH_TAC);
3597 TYPIFY `delta_y y1 y2 y3 y4' y5 y6 = &0` (C SUBGOAL_THEN ASSUME_TAC);
3598 BY(ASM_TAC THEN REAL_ARITH_TAC);
3599 ASM_CASES_TAC `delta4_y y1 y2 y3 y4' y5 y6 <= &0`;
3600 MATCH_MP_TAC REAL_LE_TRANS;
3601 TYPIFY `pi` EXISTS_TAC;
3603 REWRITE_TAC[Sphere.dih_y;LET_THM];
3604 MATCH_MP_TAC (arith (`x < y ==> x <= y`));
3605 MATCH_MP_TAC Oxlzlez.DIH_X_LT_PI;
3606 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
3607 BY(ASM_REWRITE_TAC[GSYM Sphere.delta_y]);
3608 ASM_REWRITE_TAC[Sphere.dih_y;LET_THM;Sphere.dih_x;GSYM Sphere.delta_y];
3609 REWRITE_TAC[arith `x * &0 = &0`;SQRT_0];
3610 ASM_CASES_TAC `delta4_y y1 y2 y3 y4' y5 y6 = &0`;
3611 RULE_ASSUM_TAC(REWRITE_RULE[Sphere.y_of_x;Sphere.delta4_y]);
3613 BY(MESON_TAC[arith `-- &0 = &0`;Merge_ineq.atn2_0;PI_POS;arith `&0 < x ==> x <= x / &2 + x`]);
3614 TYPIFY `delta4_y y1 y2 y3 y4' y5 y6 < &0` (C SUBGOAL_THEN MP_TAC);
3615 BY(ASM_TAC THEN REAL_ARITH_TAC);
3616 REWRITE_TAC[Sphere.y_of_x;Sphere.delta4_y];
3617 TYPED_ABBREV_TAC `u = delta_x4 (y1 * y1) (y2 * y2) (y3 * y3) (y4' * y4') (y5 * y5) (y6 * y6)`;
3618 BY(MESON_TAC[arith `u < &0 ==> &0 < -- u`;Merge_ineq.atn2_0;arith `x <= x / &2 + x / &2`]);
3619 INTRO_TAC delta_diff4 [`y1*y1`;`y2*y2`;`y3*y3`;`y4'*y4'`;`y5*y5`;`y6*y6`;`y4*y4`];
3620 RULE_ASSUM_TAC(REWRITE_RULE[Sphere.delta_y;Sphere.delta4_y;Sphere.y_of_x]);
3622 ENOUGH_TO_SHOW_TAC `&0 < delta_x (y1 * y1) (y2 * y2) (y3 * y3) (y4 * y4) (y5 * y5) (y6 * y6) /\ &0 <= delta_x4 (y1 * y1) (y2 * y2) (y3 * y3) (y4' * y4') (y5 * y5) (y6 * y6) * (y4' * y4' - y4 * y4) /\ &0 <= (y1 * y1) * (y4' * y4' - y4 * y4) pow 2`;
3626 GMATCH_SIMP_TAC REAL_LE_MUL;
3627 REWRITE_TAC[arith `&0 <= a - b <=> b <= a`];
3628 GMATCH_SIMP_TAC Misc_defs_and_lemmas.ABS_SQUARE_LE;
3629 BY(ASM_TAC THEN REAL_ARITH_TAC);
3630 GMATCH_SIMP_TAC REAL_LE_MUL;
3631 REWRITE_TAC[ REAL_LE_POW_2];
3632 BY(REWRITE_TAC[ REAL_LE_SQUARE])
3636 let MOD_EQ_MOD_SHIFT = prove_by_refinement(
3637 `!n x1 x2 y. ~(n=0) ==> (((y + x1) MOD n = (y + x2) MOD n) <=> (x1 MOD n = x2 MOD n))`,
3640 REPEAT WEAKER_STRIP_TAC;
3641 MATCH_MP_TAC (TAUT `((a ==> b) /\ (b ==> a)) ==> (a <=> b)`);
3643 BY(ASM_MESON_TAC[Hdplygy.MOD_EQ_MOD]);
3644 BY(ASM_MESON_TAC[MOD_ADD_MOD])
3648 let empty_5T1 = prove_by_refinement(
3649 `main_nonlinear_terminal_v11 ==>
3650 (!vv. BBs_v39 scs_5T1 vv ==> &0 <= taustar_v39 scs_5T1 vv)` ,
3653 REPEAT WEAKER_STRIP_TAC;
3655 ASSUME_TAC ((is_scs_5T1));
3656 COMMENT "new material";
3657 TYPIFY `!i j. i < 5 /\ j < 5 /\ vv i = vv j ==> i = j` (C SUBGOAL_THEN ASSUME_TAC);
3658 MATCH_MP_TAC vv_inj_lemma;
3659 BY(ASM_MESON_TAC[Appendix.scs_5T1;IN;Terminal.scs_unadorned_explicit]);
3660 TYPIFY `scs_generic vv` (C SUBGOAL_THEN ASSUME_TAC);
3661 MATCH_MP_TAC (REWRITE_RULE[LET_THM] (UNDISCH scs_5T1_generic));
3662 BY(ASM_REWRITE_TAC[] THEN ASM_TAC THEN REAL_ARITH_TAC);
3663 COMMENT "big expansion";
3664 REPEAT (FIRST_X_ASSUM MP_TAC);
3665 REWRITE_TAC[Appendix.taustar_v39;LET_DEF;LET_END_DEF;Appendix.BBs_v39;Terminal.scs_unadorned_explicit;Appendix.scs_5T1];
3666 REWRITE_TAC[arith `~(5 <= 3)`;Terminal.dsv_unadorned];
3667 REPEAT WEAKER_STRIP_TAC;
3668 FIRST_X_ASSUM_ST `tau_fun` MP_TAC;
3670 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] Terminal.tau_fun_azim);
3671 TYPIFY `5` EXISTS_TAC;
3672 ASM_REWRITE_TAC[arith `3 <= 5`;arith `&5 - &2 = &3`];
3673 TYPIFY `!i. dist(vv i,vv (i+1)) = &2` (C SUBGOAL_THEN ASSUME_TAC);
3674 REPEAT WEAKER_STRIP_TAC;
3675 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`i`;`i+1`]);
3676 REWRITE_TAC[Appendix.cs_adj;arith `i + 1 = SUC i`];
3677 SIMP_TAC[Qknvmlb.SUC_MOD_NOT_EQ;arith `1< 5`];
3679 COMMENT "end expansion";
3680 COMMENT "edge lengths";
3681 TYPIFY `!i. cstab <= dist(vv i,vv (i+2))` (C SUBGOAL_THEN ASSUME_TAC);
3682 REPEAT WEAKER_STRIP_TAC;
3683 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`i`;`i+2`]);
3684 TYPIFY `cs_adj 5 (&2) cstab i (i+2) = cstab` ENOUGH_TO_SHOW_TAC;
3685 DISCH_THEN SUBST1_TAC;
3687 REWRITE_TAC[Appendix.cs_adj];
3689 FIRST_X_ASSUM MP_TAC;
3690 BY(MESON_TAC[arith `~(0=5) /\ (2 < 5) /\ ~(0=2)`;Oxl_2012.MOD_INJ1]);
3692 FIRST_X_ASSUM MP_TAC;
3694 FIRST_X_ASSUM MP_TAC;
3695 REWRITE_TAC[arith `SUC i = i+1 /\ i + 2 = (i+1) + 1`];
3696 BY(MESON_TAC[arith `~(0=5) /\ (1 < 5) /\ ~(0=1)`;Oxl_2012.MOD_INJ1]);
3697 FIRST_X_ASSUM MP_TAC;
3698 REWRITE_TAC[arith `SUC (i+2)=i+3`];
3699 BY(MESON_TAC[arith `~(0=5) /\ (3 < 5) /\ ~(0=3)`;Oxl_2012.MOD_INJ1]);
3701 COMMENT "second diag";
3702 TYPIFY `!i. cstab <= dist(vv i,vv (i+3))` (C SUBGOAL_THEN ASSUME_TAC);
3703 REPEAT WEAKER_STRIP_TAC;
3704 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`i`;`i+3`]);
3705 TYPIFY `cs_adj 5 (&2) cstab i (i+3) = cstab` ENOUGH_TO_SHOW_TAC;
3706 DISCH_THEN SUBST1_TAC;
3708 REWRITE_TAC[Appendix.cs_adj];
3710 FIRST_X_ASSUM MP_TAC;
3711 BY(MESON_TAC[arith `~(0=5) /\ (3 < 5) /\ ~(0=3)`;Oxl_2012.MOD_INJ1]);
3713 FIRST_X_ASSUM MP_TAC;
3715 FIRST_X_ASSUM MP_TAC;
3716 REWRITE_TAC[arith `SUC i = i+1 /\ i + 3 = (i+1) + 2`];
3717 BY(MESON_TAC[arith `~(0=5) /\ (2 < 5) /\ ~(0=2)`;Oxl_2012.MOD_INJ1]);
3718 FIRST_X_ASSUM MP_TAC;
3719 REWRITE_TAC[arith `SUC (i+3)=i+4`];
3720 BY(MESON_TAC[arith `~(0=5) /\ (4 < 5) /\ ~(0=4)`;Oxl_2012.MOD_INJ1]);
3722 COMMENT "more distances";
3723 TYPIFY `!i. &2 <= norm (vv i) /\ norm (vv i) <= &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
3725 REWRITE_TAC[GSYM Fnjlbxs.in_ball_annulus];
3726 RULE_ASSUM_TAC(REWRITE_RULE[Terminal.IMAGE_SUBSET_IN;IN_UNIV]);
3727 BY(ASM_REWRITE_TAC[]);
3728 TYPIFY `!i j. i < 5 /\ j < 5 /\ ~(i = j) ==> &2 <= dist(vv i,vv j)` (C SUBGOAL_THEN ASSUME_TAC);
3729 REPEAT WEAKER_STRIP_TAC;
3730 FIRST_X_ASSUM (C INTRO_TAC [`i`;`j`]);
3733 FIRST_X_ASSUM (C INTRO_TAC [`i`;`j`]);
3734 ASM_REWRITE_TAC[Appendix.cs_adj];
3736 BY(ASM_MESON_TAC[MOD_LT]);
3737 TYPIFY `&2 <= cstab` (C SUBGOAL_THEN MP_TAC);
3738 BY(REWRITE_TAC[Sphere.cstab] THEN REAL_ARITH_TAC);
3740 COMMENT "1+sqrt(5)";
3741 TYPIFY `?j. j < 5 /\ dist(vv j,vv (j+2)) <= &1 + sqrt(&5) /\ dist(vv j,vv (j+3)) <= &1 + sqrt(&5)` (C SUBGOAL_THEN MP_TAC);
3742 INTRO_TAC Vpwshto.VPWSHTO_PRIME [`vv`];
3744 ONCE_REWRITE_TAC[GSYM dist];
3746 RULE_ASSUM_TAC(REWRITE_RULE[Terminal.IMAGE_SUBSET_IN;IN_UNIV]);
3747 BY(FIRST_X_ASSUM_ST `ball_annulus` MP_TAC THEN SET_TAC[]);
3748 REWRITE_TAC[Sphere.packing];
3749 TYPIFY_GOAL_THEN `!a b c d e (f:real^3). {a,b,c,d,e} f <=> (f = a \/ f = b \/ f = c \/ f = d \/ f = e)` (unlist REWRITE_TAC);
3750 REWRITE_TAC[INSERT;IN_ELIM_THM;NOT_IN_EMPTY];
3753 REPEAT WEAKER_STRIP_TAC;
3754 TYPIFY `?i j. u = vv i /\ v = vv j /\ i < 5 /\ j < 5 /\ ~(i=j)` (C SUBGOAL_THEN MP_TAC);
3755 BY(ASM_MESON_TAC[arith `0 < 5 /\ 1 < 5 /\ 2 < 5 /\ 3 < 5 /\ 4 < 5`]);
3756 REPEAT WEAKER_STRIP_TAC;
3758 FIRST_X_ASSUM MATCH_MP_TAC;
3759 BY(ASM_REWRITE_TAC[]);
3760 TYPIFY_GOAL_THEN `~(vv 0 = vv 1) /\ ~(vv 0 = vv 1) /\ ~(vv 0 = vv 2) /\ ~(vv 0 = vv 3) /\ ~(vv 0 = vv 4) /\ ~(vv 1 = vv 2) /\ ~(vv 1 = vv 3) /\ ~(vv 1 = vv 4) /\ ~(vv 2 = vv 3) /\ ~(vv 2 = vv 4) /\ ~(vv 3 = vv 4)` (unlist REWRITE_TAC);
3761 TYPIFY `!i j. i < 5 /\ j < 5 /\ ~(i = j) ==> ~(vv i = vv j)` (C SUBGOAL_THEN ASSUME_TAC);
3762 BY(ASM_MESON_TAC[]);
3763 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN ARITH_TAC);
3764 TYPIFY `vv 0 = vv 5` (C SUBGOAL_THEN ASSUME_TAC);
3765 ONCE_REWRITE_TAC[arith `5 = 0 +5`];
3766 BY(ASM_MESON_TAC[Sphere.periodic]);
3767 BY(ASM_MESON_TAC[arith `1 = 0+1 /\ 2 = 1+1 /\ 3 = 2+1 /\ 4 = 3+1 /\ 5 = 4+1`]);
3768 REWRITE_TAC[GSYM dist];
3769 REPEAT WEAKER_STRIP_TAC;
3770 TYPIFY `i` EXISTS_TAC;
3772 FIRST_X_ASSUM_ST `IN` MP_TAC;
3773 REWRITE_TAC[IN_NUMSEG];
3775 BY(ASM_MESON_TAC[Oxl_def.periodic_mod;arith `~(5=0)`]);
3776 REPEAT WEAKER_STRIP_TAC;
3777 COMMENT "pick up the hex flow again";
3778 COMMENT "azim le pi";
3779 TYPIFY `!i. azim (vec 0) (vv i) (vv (i+1)) (vv (i + 5 -1)) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
3780 RULE_ASSUM_TAC(REWRITE_RULE[Localization.convex_local_fan]);
3781 ASM_TAC THEN REPEAT WEAKER_STRIP_TAC;
3782 REWRITE_TAC[arith `i+1 = SUC i`];
3783 GMATCH_SIMP_TAC (GSYM azim_in_fan_azim);
3784 TYPIFY `IMAGE (\i. {vv i, vv (SUC i)}) (:num)` EXISTS_TAC;
3785 ASM_REWRITE_TAC[arith `3 <= 5`];
3787 BY(ASM_MESON_TAC[]);
3788 BY(ASM_MESON_TAC[IN_IMAGE;IN_UNIV]);
3789 COMMENT "split azim";
3790 RULE_ASSUM_TAC(REWRITE_RULE[Appendix.scs_generic]);
3791 TYPIFY `azim(vec 0) (vv j) (vv (SUC j)) (vv (j + 4)) = azim(vec 0) (vv j) (vv (SUC j)) (vv (j+2)) + azim(vec 0) (vv j) (vv (j+2)) (vv (j+3)) + azim (vec 0) (vv j) (vv (j+3)) (vv (j+4))` (C SUBGOAL_THEN ASSUME_TAC);
3792 INTRO_TAC Terminal.vv_split_azim_generic [`vv`;`5`;`j`;`3`;`4`];
3793 ASM_REWRITE_TAC[LET_THM;arith `3 <= 5 /\ 0 < 3 /\ 3 < 4 /\ 4 < 5`];
3794 DISCH_THEN SUBST1_TAC;
3795 INTRO_TAC Terminal.vv_split_azim_generic [`vv`;`5`;`j`;`2`;`3`];
3796 ASM_REWRITE_TAC[LET_THM;arith `3 <= 5 /\ 0 < 2 /\ 2 < 3 /\ 3 < 5`];
3798 COMMENT "split at j+2 and j+3";
3799 TYPIFY `vv (j+5) = vv j /\ vv (j+6) = vv(j+1) /\ vv (j+7) = vv(j+2) /\ vv(j+8)=vv(j+3) /\ vv(j+9) = vv(j+4)` (C SUBGOAL_THEN ASSUME_TAC);
3800 FIRST_X_ASSUM_ST `periodic` MP_TAC;
3801 BY(MESON_TAC[Sphere.periodic;arith `j+6 = (j+1)+5 /\ j+7 = (j+2)+5 /\ j+8 = (j+3)+5 /\ j+9 = (j+4)+5`]);
3802 ASSUME_TAC (arith `SUC(j) = j+1 /\ SUC(j+1)=j+2 /\ SUC(j+2)=j+3 /\ SUC(j+3)=j+4 /\ SUC(j+4)=j+5`);
3803 TYPIFY `azim(vec 0) (vv (j+2)) (vv(SUC (j+2))) (vv (j+1)) = azim(vec 0) (vv (j+2)) (vv(SUC (j+2))) (vv(j)) + azim(vec 0) (vv (j+2)) (vv j) (vv (j+1))` (C SUBGOAL_THEN ASSUME_TAC);
3804 INTRO_TAC Terminal.vv_split_azim_generic [`vv`;`5`;`j+2`;`3`;`4`];
3805 ASM_REWRITE_TAC[LET_THM;arith `3 <= 5 /\ 0 < 3 /\ 3 < 4 /\ 4 < 5`];
3806 BY(ASM_REWRITE_TAC[arith `(a +b)+(c:num) = a+(b+c) /\ 2+4=6 /\ 2+3 = 5`]);
3807 TYPIFY `azim (vec 0) (vv(j+3)) (vv(j+4)) (vv(j+2)) = azim(vec 0) (vv(j+3)) (vv(j+4)) (vv j) + azim(vec 0) (vv(j+3)) (vv j) (vv (j+2))` (C SUBGOAL_THEN ASSUME_TAC);
3808 INTRO_TAC Terminal.vv_split_azim_generic [`vv`;`5`;`j+3`;`2`;`4`];
3809 ASM_REWRITE_TAC[LET_THM;arith `3 <= 5 /\ 0 < 2 /\ 2 < 4 /\ 4 < 5`];
3810 BY(ASM_REWRITE_TAC[arith `(a +b)+(c:num) = a+(b+c) /\ 3+4=7 /\ 3+2 = 5`]);
3811 COMMENT "expand sum";
3812 INTRO_TAC periodic_sum_shift [`j`];
3813 DISCH_THEN GMATCH_SIMP_TAC;
3815 REWRITE_TAC[arith `~(5 = 0)`;Sphere.periodic];
3817 REWRITE_TAC[arith `(i+5) + j = (i+j) + 5`];
3818 RULE_ASSUM_TAC(REWRITE_RULE[Sphere.periodic]);
3819 BY(ASM_REWRITE_TAC[]);
3820 TYPIFY `{i | i < 5 } = {0,1,2,3,4}` (C SUBGOAL_THEN SUBST1_TAC);
3821 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
3823 REPEAT (GMATCH_SIMP_TAC Marchal_cells_2_new.SUM_CLAUSES_alt THEN REWRITE_TAC[NOT_IN_EMPTY;IN_INSERT;arith `~(0=1)/\ ~(0=2)/\ ~(0=3) /\ ~(0=4) /\ ~(0=5) /\ ~(1=2) /\ ~(1 = 3) /\ ~(1 = 4) /\ ~(1=5) /\ ~(2 = 3) /\ ~(2 = 4) /\ ~(2 = 5) /\ ~(3 = 4) /\ ~(3 =5) /\ ~(4 = 5)`]);
3824 REWRITE_TAC[SUM_CLAUSES;Geomdetail.FINITE6];
3825 FIRST_ASSUM (C INTRO_TAC [`j`]);
3826 FIRST_ASSUM (C INTRO_TAC [`j+1`]);
3827 FIRST_ASSUM (C INTRO_TAC [`j+2`]);
3828 FIRST_ASSUM (C INTRO_TAC [`j+3`]);
3829 FIRST_X_ASSUM (C INTRO_TAC [`j+4`]);
3830 REWRITE_TAC[arith `5-1=4`];
3831 REPEAT (FIRST_X_ASSUM_ST `azim` MP_TAC);
3832 REWRITE_TAC[arith `(a+b)+(c:num) = a+b+c`;arith `SUC i = i+1`];
3835 COMMENT "start again here";
3836 REPEAT WEAKER_STRIP_TAC;
3837 TYPIFY `azim (vec 0) (vv j) (vv (j + 3)) (vv (j + 4)) <= pi /\ azim (vec 0) (vv j) (vv (j + 1)) (vv (j + 2)) <= pi /\ azim (vec 0) (vv j) (vv (j + 2)) (vv (j + 3)) <= pi /\ azim (vec 0) (vv (j + 2)) (vv (j + 3)) (vv j) <= pi /\ azim (vec 0) (vv (j + 2)) (vv j) (vv (j + 1)) <= pi /\ azim (vec 0) (vv (j + 3)) (vv (j + 4)) (vv j) <= pi /\ azim (vec 0) (vv (j + 3)) (vv j) (vv (j + 2)) <= pi`(C SUBGOAL_THEN ASSUME_TAC);
3838 MP_TAC Counting_spheres.AZIM_NN;
3839 REPEAT (FIRST_X_ASSUM_ST `x <= pi` MP_TAC);
3840 REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC);
3841 BY(MESON_TAC[arith `&0 <= x /\ &0 <= y /\ &0 <= z /\ x + y + z <= pi ==> x <= pi /\ y <= pi /\ z <= pi`;arith `&0 <= x /\ &0 <= y /\ x + y <= pi ==> x <= pi /\ y <= pi`]);
3842 COMMENT "collinearity";
3843 TYPIFY `!i i'. (i < 5 /\ i' < 5 /\ ~(i=i')) ==> ~collinear {vec 0,vv (j+i),vv (j+i')}` (C SUBGOAL_THEN ASSUME_TAC);
3844 REPEAT WEAKER_STRIP_TAC;
3845 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 (j+(i:num))`];
3846 ASM_REWRITE_TAC[Qknvmlb.IN_IMAGE_VV];
3847 FIRST_X_ASSUM (MP_TAC o (MATCH_MP Local_lemmas.CVX_LO_IMP_LO));
3848 REWRITE_TAC[arith `SUC i = i+1`];
3849 DISCH_THEN (unlist REWRITE_TAC);
3850 DISCH_THEN (C INTRO_TAC [`vv (j+(i':num))`]);
3851 (ASM_REWRITE_TAC[Qknvmlb.IN_IMAGE_VV]);
3852 TYPIFY `!i. vv i = vv (i MOD 5) ` (C SUBGOAL_THEN MP_TAC);
3854 MATCH_MP_TAC (Oxl_def.periodic_mod);
3855 BY(ASM_REWRITE_TAC[arith `~(0=5)`]);
3856 DISCH_THEN (unlist ONCE_REWRITE_TAC);
3858 FIRST_X_ASSUM_ST `x ==> (i:num) = j` (C INTRO_TAC [`(j+i') MOD 5`;`(j+i) MOD 5`]);
3859 FIRST_X_ASSUM (SUBST1_TAC);
3860 SIMP_TAC[arith `~(5 = 0)`;DIVISION];
3862 INTRO_TAC Hdplygy.MOD_EQ_MOD [`i`;`i'`;`j`;`5`];
3863 ASM_REWRITE_TAC[arith `~(5=0)`];
3864 REPEAT (GMATCH_SIMP_TAC MOD_LT);
3865 BY(ASM_REWRITE_TAC[]);
3866 COMMENT "convert to dih";
3867 TYPIFY `azim (vec 0) (vv j) (vv (j + 1)) (vv (j + 4)) = dihV (vec 0) (vv j) (vv (j + 1)) (vv (j + 4)) /\ azim (vec 0) (vv j) (vv (j + 3)) (vv (j + 4)) = dihV (vec 0) (vv j) (vv (j + 3)) (vv (j + 4)) /\ azim (vec 0) (vv j) (vv (j + 1)) (vv (j + 2)) = dihV (vec 0) (vv j) (vv (j + 1)) (vv (j + 2)) /\ azim (vec 0) (vv j) (vv (j + 2)) (vv (j + 3)) = dihV (vec 0) (vv j) (vv (j + 2)) (vv (j + 3)) /\ azim (vec 0) (vv (j + 2)) (vv (j + 3)) (vv j) = dihV (vec 0) (vv (j + 2)) (vv (j + 3)) (vv j) /\ azim (vec 0) (vv (j + 2)) (vv j) (vv (j + 1)) = dihV (vec 0) (vv (j + 2)) (vv j) (vv (j + 1)) /\ azim (vec 0) (vv (j + 3)) (vv (j + 4)) (vv j) = dihV (vec 0) (vv (j + 3)) (vv (j + 4)) (vv j) /\ azim (vec 0) (vv (j + 3)) (vv j) (vv (j + 2)) = dihV (vec 0) (vv (j + 3)) (vv j) (vv (j + 2)) /\ azim (vec 0) (vv (j + 4)) (vv j) (vv (j + 3)) = dihV (vec 0) (vv (j + 4)) (vv j) (vv (j + 3)) /\ azim (vec 0) (vv (j + 1)) (vv (j + 2)) (vv j) = dihV (vec 0) (vv (j + 1)) (vv (j + 2)) (vv j)` (C SUBGOAL_THEN ASSUME_TAC);
3868 REPEAT (FIRST_X_ASSUM_ST `pi` MP_TAC);
3869 TYPIFY `vv j = vv (j+0)` (C SUBGOAL_THEN SUBST1_TAC);
3870 BY(REWRITE_TAC[arith `j+0=j`]);
3871 REPEAT WEAKER_STRIP_TAC;
3872 BY((REPEAT (CONJ_TAC) THEN MATCH_MP_TAC Polar_fan.AZIM_DIHV_SAME_STRONG THEN ASM_REWRITE_TAC[] THEN REPEAT CONJ_TAC THEN TRY (FIRST_X_ASSUM MATCH_MP_TAC) THEN NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[]));
3873 REWRITE_TAC[arith `j+0=j`];
3874 TYPIFY `#0.616 < tau3 (vv j) (vv (j+1)) (vv (j+2)) + tau3 (vv j) (vv (j+2)) (vv (j+3)) + tau3 (vv j) (vv (j+3)) (vv (j+4))` ENOUGH_TO_SHOW_TAC;
3875 ONCE_REWRITE_TAC[arith `&0 <= a - b - c <=> c <= a - b`];
3876 MATCH_MP_TAC (arith `ts = rs ==> (d < ts ==> d <= rs)`);
3877 ASM_REWRITE_TAC[Appendix.tau3;Appendix.rho_rho_fun];
3879 REPEAT (GMATCH_SIMP_TAC Terminal.tau3_taum_40);
3881 RULE_ASSUM_TAC(REWRITE_RULE[Terminal.IMAGE_SUBSET_IN;IN_UNIV]);
3883 FIRST_X_ASSUM_ST `dist(a,b) = &2` MP_TAC;
3885 FIRST_ASSUM (C INTRO_TAC [`j`]);
3886 FIRST_ASSUM (C INTRO_TAC [`j+1`]);
3887 FIRST_ASSUM (C INTRO_TAC [`j+2`]);
3888 FIRST_ASSUM (C INTRO_TAC [`j+3`]);
3889 FIRST_X_ASSUM (C INTRO_TAC [`j+4`]);
3890 ASM_REWRITE_TAC[arith `((a:num) + b) + c = a+b+c`];
3892 ASM_REWRITE_TAC[DIST_SYM];
3893 REPEAT WEAKER_STRIP_TAC THEN ASM_REWRITE_TAC[];
3894 FIRST_X_ASSUM_ST `cstab <= dist(a,b)` MP_TAC;
3895 TYPIFY `&2 <= cstab` (C SUBGOAL_THEN MP_TAC);
3896 BY(REWRITE_TAC[Sphere.cstab] THEN REAL_ARITH_TAC);
3897 REPEAT WEAKER_STRIP_TAC;
3898 TYPIFY_GOAL_THEN `&2 <= dist(vv j, vv(j+3))` (unlist REWRITE_TAC);
3899 BY(REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[REAL_LE_TRANS]);
3900 FIRST_X_ASSUM_ST `a = a1 + a2 + a3` MP_TAC;
3903 COMMENT "kill azim";
3904 REPEAT (FIRST_X_ASSUM_ST `azim` kill);
3905 TYPIFY_GOAL_THEN `&2 <= dist(vv j, vv(j+2))` (unlist REWRITE_TAC);
3906 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[REAL_LE_TRANS]);
3907 TYPIFY `&1 + sqrt(&5) < #3.237` (C SUBGOAL_THEN ASSUME_TAC);
3908 TYPIFY `sqrt(&5) < sqrt(#2.237 pow 2)` ENOUGH_TO_SHOW_TAC;
3909 GMATCH_SIMP_TAC POW_2_SQRT;
3911 GMATCH_SIMP_TAC SQRT_MONO_LT_EQ;
3914 BY(REPEAT (FIRST_X_ASSUM_ST `&5` MP_TAC) THEN REAL_ARITH_TAC);
3916 BY(REPEAT (FIRST_X_ASSUM_ST `&5` MP_TAC) THEN REAL_ARITH_TAC);
3918 BY(REPEAT (FIRST_X_ASSUM_ST `&5` MP_TAC) THEN REAL_ARITH_TAC);
3920 FIRST_X_ASSUM_ST `dihV` MP_TAC;
3922 REPEAT (GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] Merge_ineq.DIHV_EQ_DIH_Y));
3923 REWRITE_TAC[DIST_0];
3924 REWRITE_TAC[TAUT `a /\ b /\ c <=> (a /\ b) /\ c`];
3926 TYPIFY `vv j = vv (j+0)` (C SUBGOAL_THEN SUBST1_TAC);
3927 BY(REWRITE_TAC[arith `j+0=j`]);
3928 BY((REPEAT (CONJ_TAC) THEN TRY (FIRST_X_ASSUM MATCH_MP_TAC) THEN NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[]));
3930 TYPIFY `dih_y (norm (vv j)) (norm (vv (j + 1))) (norm (vv (j + 4))) (cstab) (dist (vv j,vv (j + 4))) (dist (vv j,vv (j + 1))) <= dih_y (norm (vv j)) (norm (vv (j + 1))) (norm (vv (j + 4))) (dist (vv (j + 1),vv (j + 4))) (dist (vv j,vv (j + 4))) (dist (vv j,vv (j + 1)))` (C SUBGOAL_THEN ASSUME_TAC);
3931 MATCH_MP_TAC dih_y_mono;
3933 FIRST_X_ASSUM_ST `cs_adj` (C INTRO_TAC [`j+1`;`j+4`]);
3934 INTRO_TAC scs_diag_cs_adj [`5`;`&2`;`cstab`;`j+1`;`j+4`];
3936 REWRITE_TAC[Appendix.scs_diag];
3937 REWRITE_TAC[arith `SUC (j+1) = j+2 /\ SUC (j+4) = j+5`];
3938 SIMP_TAC[MOD_EQ_MOD_SHIFT;arith `~(5 = 0)`];
3939 BY(REWRITE_TAC[Uxckfpe.ARITH_5_TAC]);
3942 FIRST_X_ASSUM_ST `&2 <= norm (vv i)` (C INTRO_TAC [`j`]);
3945 BY(REWRITE_TAC[Sphere.cstab] THEN REAL_ARITH_TAC);
3947 INTRO_TAC (Terminal.get_main_nonlinear "2125338128") [`norm(vv(j+1))`;`norm(vv(j+4))`;`norm(vv j)`;`dist(vv j,vv(j+4))`;`dist(vv j, vv(j+1))`;`cstab`];
3948 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;GSYM Sphere.cstab];
3950 TYPIFY `#2.52 = &2 * h0` (C SUBGOAL_THEN SUBST1_TAC);
3951 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
3953 BY(REWRITE_TAC[Sphere.h0;Sphere.cstab] THEN REAL_ARITH_TAC);
3954 REWRITE_TAC[Pent_hex.delta_y_hex_cases];
3956 INTRO_TAC (REWRITE_RULE[LET_THM] Tame_lemmas.delta_y_pos) [`(vv j)`;` (vv (j+1))`;` (vv (j+4))`];
3958 COMMENT "introduce ineq";
3959 INTRO_TAC (UNDISCH terminal_pent_taum2) [`norm (vv(j))`;`norm (vv(j+2))`;`norm (vv(j+3))`;`dist (vv(j+2),vv(j+3))`;`dist(vv(j),vv(j+3))`;`dist(vv(j),vv(j+2))`;`norm (vv(j+1))`;`norm(vv(j+4))`];
3960 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`];
3961 DISCH_THEN MP_TAC THEN ANTS_TAC;
3963 REWRITE_TAC[TAUT `(a /\ b) /\ c <=> a /\ b /\ c`];
3965 INTRO_TAC (REWRITE_RULE[LET_THM] Tame_lemmas.delta_y_pos) [`(vv (j+1))`;` (vv (j))`;` (vv (j+2))`];
3967 BY(ASM_REWRITE_TAC[DIST_SYM]);
3969 INTRO_TAC (REWRITE_RULE[LET_THM] Tame_lemmas.delta_y_pos) [`(vv (j+4))`;` (vv (j))`;` (vv (j+3))`];
3970 BY(ASM_REWRITE_TAC[DIST_SYM]);
3972 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN ASM_REWRITE_TAC[];
3973 TYPED_ABBREV_TAC `df = dih_y (norm (vv j)) (norm (vv (j + 1))) (norm (vv (j + 4))) (dist (vv (j + 1),vv (j + 4))) (&2) (&2)`;
3974 TYPED_ABBREV_TAC `dc = dih_y (norm (vv j)) (norm (vv (j + 1))) (norm (vv (j + 4))) cstab (&2) (&2)`;
3975 DISCH_THEN SUBST1_TAC;
3976 MATCH_MP_TAC (arith `(a12 = a21' /\ a23 = a23' /\ a34 = a34') ==> (dc <= a12 + a23 + a34 ==> dc <= a23' + a21' + a34')`);
3978 ASM_REWRITE_TAC[DIST_SYM];
3979 BY(MESON_TAC[Nonlinear_lemma.dih_y_sym]);
3982 ASM_REWRITE_TAC[GSYM Sphere.cstab];
3983 BY(REPEAT (FIRST_X_ASSUM_ST `&5` MP_TAC) THEN REAL_ARITH_TAC);
3984 FIRST_X_ASSUM_ST `taum` MP_TAC;
3986 MATCH_MP_TAC (arith `a = b ==> ~(d < a) ==> ~(d < b)`);
3987 MATCH_MP_TAC (arith `a1 = b1 /\ a2 = b2 /\ a3 = b3 ==> (a1 + a2 + a3 = b1 + b2 +b3)`);
3988 ASM_REWRITE_TAC[DIST_SYM];
3989 BY(MESON_TAC[Terminal.taum_sym])
3993 let psort_4 = prove_by_refinement(
3994 `!i. psort 4(i,4) = psort 4(i,0) /\ psort 4 (4,i)=psort 4 (0,i)`,
3997 REWRITE_TAC[Appendix.psort;LET_THM;Uxckfpe.ARITH_4_TAC]
4001 let I_LT_J_LT_5_EXPLICIT = prove_by_refinement(
4002 `!i j. (i < j /\ j < 5) <=> ((i = 0 /\ j = 1) \/ (i = 0 /\ j = 2) \/ (i = 0 /\ j = 3) \/ (i = 1 /\ j = 2) \/
4003 (i = 1 /\ j = 3) \/ (i = 2 /\ j = 3) \/
4004 (i=0 /\ j=4) \/ (i=1 /\ j=4) \/ (i=2 /\ j=4) \/ (i=3 /\ j=4))`,
4007 REPEAT WEAKER_STRIP_TAC;
4008 REWRITE_TAC[Geomdetail.EQ_EXPAND];
4011 REPEAT WEAKER_STRIP_TAC;
4012 TYPIFY `j = 1 \/ j = 2 \/ j = 3 \/ j= 4` (C SUBGOAL_THEN ASSUME_TAC);
4013 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
4014 REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[] THEN REPEAT (FIRST_X_ASSUM MP_TAC);
4022 let MOD_5_EXPLICIT = prove_by_refinement(
4023 `0 MOD 5 = 0 /\ 1 MOD 5 = 1 /\ 2 MOD 5 = 2 /\ 3 MOD 5 = 3 /\ 4 MOD 5 = 4 /\
4024 5 MOD 5 = 0 /\ 6 MOD 5 = 1 /\ 7 MOD 5 = 2`,
4027 ASM_SIMP_TAC[MOD_LT;MOD_MULT_ADD;arith `0 < 5 /\ 1 < 5 /\ 2 < 5 /\ 3 < 5 /\ 4 < 5 /\ 6 = 1*5 + 1 /\ 7 = 1*5 + 2`];
4028 BY(ASM_SIMP_TAC[Oxlzlez.MOD_REFL_ALT;arith `~(5 =0)`])
4032 let psort_5 = prove_by_refinement(
4034 psort 5 (0,1) = (0,1) /\ psort 5 (0,2) = (0,2) /\ psort 5(0,3) = (0,3) /\ psort 5 (0,4)=(0,4) /\
4035 psort 5 (1,1) = (1,1) /\ psort 5 (1,2) = (1,2) /\ psort 5(1,3) = (1,3) /\ psort 5 (1,4)=(1,4) /\
4036 psort 5 (2,1) = (1,2) /\ psort 5 (2,2) = (2,2) /\ psort 5(2,3) = (2,3) /\ psort 5 (2,4)=(2,4) /\
4037 psort 5 (3,1) = (1,3) /\ psort 5 (3,2) = (2,3) /\ psort 5(3,3) = (3,3) /\ psort 5 (3,4)=(3,4) /\
4038 psort 5 (4,1) = (1,4) /\ psort 5 (4,2) = (2,4) /\ psort 5(4,3) = (3,4) /\ psort 5 (4,4)=(4,4) /\
4039 psort 5 (4,5) = (0,4) /\ psort 5 (5,4) = (0,4)
4043 REWRITE_TAC[Appendix.psort;LET_DEF;LET_END_DEF];
4044 REWRITE_TAC[MOD_5_EXPLICIT;PAIR_EQ];
4050 (* NOW FINISH OTHER TERMINAL CASES *)
4055 let is_scs_4T1 = prove_by_refinement(
4056 `is_scs_v39 scs_4T1`,
4059 REWRITE_TAC[Appendix.scs_4T1];
4060 MATCH_MP_TAC is_scs_adj;
4061 REWRITE_TAC[Appendix.d_tame;Sphere.cstab];
4063 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
4067 let is_scs_4T2 = prove_by_refinement(
4068 `is_scs_v39 scs_4T2`,
4071 REWRITE_TAC[Appendix.scs_4T2];
4072 MATCH_MP_TAC is_scs_adj;
4073 REWRITE_TAC[Appendix.d_tame;Sphere.cstab];
4075 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
4079 let is_scs_4T3 = prove_by_refinement(
4080 `is_scs_v39 scs_4T3`,
4083 REWRITE_TAC[Appendix.scs_4T3];
4084 REWRITE_TAC[Appendix.mk_unadorned_v39];
4085 MATCH_MP_TAC is_scs_funlist_basic;
4086 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_4_EXPLICIT];
4087 TYPED_ABBREV_TAC `s = {i | i < 4 /\ (&2 * #1.26 < funlist_v39 [(0,1), #3.01; (0,2),&6; (1,3),&6] (&2) 4 i (SUC i) \/ &2 < funlist_v39 [(0,1), #3.01; (0,2), #3.01; (1,3), #3.01] (&2) 4 i (SUC i))}`;
4088 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4090 REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (REAL_ARITH_TAC);
4091 TYPIFY `CARD s = 1` ENOUGH_TO_SHOW_TAC;
4093 MATCH_MP_TAC Misc_defs_and_lemmas.CARD_SING;
4095 TYPIFY `0` EXISTS_TAC;
4097 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
4098 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4100 ASM_CASES_TAC `x = 0`;
4101 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4];
4104 REWRITE_TAC[TAUT `~(a /\ b) <=> (a ==> ~b)`];
4105 BY(STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (REAL_ARITH_TAC))
4109 let is_scs_4T4 = prove_by_refinement(
4110 `is_scs_v39 scs_4T4`,
4113 REWRITE_TAC[Appendix.scs_4T4];
4114 REWRITE_TAC[Appendix.mk_unadorned_v39];
4115 MATCH_MP_TAC is_scs_funlist_basic;
4116 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_4_EXPLICIT];
4117 TYPED_ABBREV_TAC `s = {i | i < 4 /\ (&2 * #1.26 < funlist_v39 [(0,1),sqrt8; (0,2),&6; (1,3), #3.01] (&2 * #1.26) 4 i (SUC i) \/ &2 < funlist_v39 [(0,1),&2 * #1.26; (0,2),sqrt8; (1,3),sqrt8] (&2) 4 i (SUC i))}`;
4118 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4120 REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN MP_TAC sqrt8_flyspeck (* Flyspeck_constants.bounds *) THEN TRY (REAL_ARITH_TAC);
4122 TYPIFY `CARD s = 1` ENOUGH_TO_SHOW_TAC;
4124 MATCH_MP_TAC Misc_defs_and_lemmas.CARD_SING;
4126 TYPIFY `0` EXISTS_TAC;
4128 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
4129 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4131 ASM_CASES_TAC `x = 0`;
4132 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4];
4135 REWRITE_TAC[TAUT `~(a /\ b) <=> (a ==> ~b)`];
4136 BY(STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (REAL_ARITH_TAC))
4140 let is_scs_4T5 = prove_by_refinement(
4141 `is_scs_v39 scs_4T5`,
4144 REWRITE_TAC[Appendix.scs_4T5];
4145 REWRITE_TAC[Appendix.mk_unadorned_v39];
4146 MATCH_MP_TAC is_scs_funlist_basic;
4147 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_4_EXPLICIT];
4148 TYPED_ABBREV_TAC `s = {i | i < 4 /\ (&2 * #1.26 < funlist_v39 [(0,1), #3.01; (0,2),&6; (1,3), #3.01] (&2 * #1.26) 4 i (SUC i) \/ &2 < funlist_v39 [(0,1),&2 * #1.26; (0,2), #3.01; (1,3), #3.01] (&2) 4 i (SUC i))}`;
4149 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4151 REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (REAL_ARITH_TAC);
4152 TYPIFY `CARD s = 1` ENOUGH_TO_SHOW_TAC;
4154 MATCH_MP_TAC Misc_defs_and_lemmas.CARD_SING;
4156 TYPIFY `0` EXISTS_TAC;
4158 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
4159 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4161 ASM_CASES_TAC `x = 0`;
4162 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4];
4165 REWRITE_TAC[TAUT `~(a /\ b) <=> (a ==> ~b)`];
4166 BY(STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (REAL_ARITH_TAC))
4170 let CARD_3_SUBSET = prove_by_refinement(
4171 `!f. CARD {i | i < 3 /\ f i} <= 3`,
4174 REPEAT WEAKER_STRIP_TAC;
4175 TYPIFY `CARD {i | i < 3 } = 3` ENOUGH_TO_SHOW_TAC;
4177 INTRO_TAC CARD_SUBSET [`{i | i < 3 /\ f i}`;`{i | i < 3}`];
4181 BY(REWRITE_TAC[FINITE_NUMSEG_LT]);
4182 BY(ASM_TAC THEN ARITH_TAC);
4183 BY(REWRITE_TAC[CARD_NUMSEG_LT])
4187 let is_scs_3T1 = prove_by_refinement(
4188 `is_scs_v39 scs_3T1`,
4191 REWRITE_TAC[Appendix.scs_3T1];
4192 REWRITE_TAC[Appendix.mk_unadorned_v39];
4193 MATCH_MP_TAC is_scs_funlist_basic;
4194 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_3_EXPLICIT;arith `x + 3 <= 6 <=> x <= 3`;CARD_3_SUBSET];
4195 REWRITE_TAC[arith `i < 3 <=> i=0 \/ i=1 \/ i=2`];
4197 BY(REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_3_TAC] THEN MP_TAC sqrt8_flyspeck (* 1 *) THEN TRY (REAL_ARITH_TAC))
4201 let is_scs_3M1 = prove_by_refinement(
4202 `is_scs_v39 scs_3M1`,
4205 REWRITE_TAC[Appendix.scs_3M1];
4206 REWRITE_TAC[Appendix.mk_unadorned_v39];
4207 MATCH_MP_TAC is_scs_funlist_basic;
4208 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_3_EXPLICIT;arith `x + 3 <= 6 <=> x <= 3`;CARD_3_SUBSET];
4209 REWRITE_TAC[arith `i < 3 <=> i=0 \/ i=1 \/ i=2`];
4211 BY(REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_3_TAC] THEN MP_TAC sqrt8_flyspeck (* 1 *) THEN TRY (REAL_ARITH_TAC))
4215 let is_scs_3T2 = prove_by_refinement(
4216 `is_scs_v39 scs_3T2`,
4219 REWRITE_TAC[Appendix.scs_3T2];
4220 REWRITE_TAC[Appendix.mk_unadorned_v39];
4221 MATCH_MP_TAC is_scs_funlist_basic;
4222 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_3_EXPLICIT;arith `x + 3 <= 6 <=> x <= 3`;CARD_3_SUBSET];
4223 REWRITE_TAC[arith `i < 3 <=> i=0 \/ i=1 \/ i=2`];
4225 BY(REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_3_TAC] THEN MP_TAC sqrt8_flyspeck (* 1 *) THEN TRY (REAL_ARITH_TAC))
4229 let is_scs_3T3 = prove_by_refinement(
4230 `is_scs_v39 scs_3T3`,
4233 REWRITE_TAC[Appendix.scs_3T3];
4234 REWRITE_TAC[Appendix.mk_unadorned_v39];
4235 MATCH_MP_TAC is_scs_funlist_basic;
4236 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_3_EXPLICIT;arith `x + 3 <= 6 <=> x <= 3`;CARD_3_SUBSET];
4237 REWRITE_TAC[arith `i < 3 <=> i=0 \/ i=1 \/ i=2`];
4239 BY(REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_3_TAC] THEN MP_TAC sqrt8_flyspeck (* 1 *) THEN TRY (REAL_ARITH_TAC))
4243 let is_scs_3T4 = prove_by_refinement(
4244 `is_scs_v39 scs_3T4`,
4247 REWRITE_TAC[Appendix.scs_3T4];
4248 REWRITE_TAC[Appendix.mk_unadorned_v39];
4249 MATCH_MP_TAC is_scs_funlist_basic;
4250 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_3_EXPLICIT;arith `x + 3 <= 6 <=> x <= 3`;CARD_3_SUBSET];
4251 REWRITE_TAC[arith `i < 3 <=> i=0 \/ i=1 \/ i=2`];
4253 BY(REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_3_TAC] THEN MP_TAC sqrt8_flyspeck (* 1 *) THEN TRY (REAL_ARITH_TAC))
4257 let is_scs_3T5 = prove_by_refinement(
4258 `is_scs_v39 scs_3T5`,
4261 REWRITE_TAC[Appendix.scs_3T5];
4262 REWRITE_TAC[Appendix.mk_unadorned_v39];
4263 MATCH_MP_TAC is_scs_funlist_basic;
4264 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_3_EXPLICIT;arith `x + 3 <= 6 <=> x <= 3`;CARD_3_SUBSET];
4265 REWRITE_TAC[arith `i < 3 <=> i=0 \/ i=1 \/ i=2`];
4267 BY(REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_3_TAC] THEN MP_TAC sqrt8_flyspeck (* 1 *) THEN TRY (REAL_ARITH_TAC))
4271 let is_scs_3T6 = prove_by_refinement(
4272 `is_scs_v39 scs_3T6'`,
4275 REWRITE_TAC[Appendix.scs_3T6];
4276 REWRITE_TAC[Appendix.mk_unadorned_v39];
4277 MATCH_MP_TAC is_scs_funlist_basic;
4278 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_3_EXPLICIT;arith `x + 3 <= 6 <=> x <= 3`;CARD_3_SUBSET];
4279 REWRITE_TAC[arith `i < 3 <=> i=0 \/ i=1 \/ i=2`];
4281 BY(REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_3_TAC] THEN MP_TAC sqrt8_flyspeck (* 1 *) THEN TRY (REAL_ARITH_TAC))
4285 let is_scs_3T7 = prove_by_refinement(
4286 `is_scs_v39 scs_3T7`,
4289 REWRITE_TAC[Appendix.scs_3T7];
4290 REWRITE_TAC[Appendix.mk_unadorned_v39];
4291 MATCH_MP_TAC is_scs_funlist_basic;
4292 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_3_EXPLICIT;arith `x + 3 <= 6 <=> x <= 3`;CARD_3_SUBSET];
4293 REWRITE_TAC[arith `i < 3 <=> i=0 \/ i=1 \/ i=2`];
4295 BY(REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_3_TAC] THEN MP_TAC sqrt8_flyspeck (* 1 *) THEN TRY (REAL_ARITH_TAC))
4299 let is_scs_6I1 = prove_by_refinement(
4300 `is_scs_v39 scs_6I1`,
4303 REWRITE_TAC[Appendix.scs_6I1];
4304 MATCH_MP_TAC is_scs_adj;
4305 REWRITE_TAC[Appendix.d_tame;Sphere.cstab];
4307 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
4311 let is_scs_5I1 = prove_by_refinement(
4312 `is_scs_v39 scs_5I1`,
4315 REWRITE_TAC[Appendix.scs_5I1];
4316 MATCH_MP_TAC is_scs_adj;
4317 REWRITE_TAC[Appendix.d_tame;Sphere.cstab];
4319 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
4323 let is_scs_5I2 = prove_by_refinement(
4324 `is_scs_v39 scs_5I2`,
4327 REWRITE_TAC[Appendix.scs_5I2];
4328 MATCH_MP_TAC is_scs_adj;
4329 REWRITE_TAC[Appendix.d_tame;Sphere.cstab];
4331 BY(REWRITE_TAC[Sphere.h0] THEN MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC)
4335 let is_scs_5I3 = prove_by_refinement(
4336 `is_scs_v39 scs_5I3`,
4339 REWRITE_TAC[Appendix.scs_5I3];
4340 REWRITE_TAC[Appendix.mk_unadorned_v39];
4341 MATCH_MP_TAC is_scs_funlist_basic;
4342 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;I_LT_J_LT_5_EXPLICIT];
4343 TYPED_ABBREV_TAC `s = {i | i < 5 /\ (&2 * #1.26 < funlist_v39 [(0,1),sqrt8; (0,2),&6; (0,3),&6; (1,3),&6; (1,4),&6; (2,4),&6] (&2 * #1.26) 5 i (SUC i) \/ &2 < funlist_v39 [(0,1),&2 * #1.26; (0,2),&2 * #1.26; (0,3),&2 * #1.26; (1,3), &2 * #1.26; (1,4), &2 * #1.26; (2,4),&2 * #1.26] (&2) 5 i (SUC i))}`;
4344 REWRITE_TAC[arith `i < 5 <=> i=0 \/ i=1 \/ i=2 \/ i=3 \/ i=4`];
4346 REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_5_TAC;psort_5] THEN MP_TAC sqrt8_flyspeck (* 1 *) THEN TRY (REAL_ARITH_TAC);
4348 TYPIFY `CARD s = 1` ENOUGH_TO_SHOW_TAC;
4350 MATCH_MP_TAC Misc_defs_and_lemmas.CARD_SING;
4352 TYPIFY `0` EXISTS_TAC;
4354 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
4355 REWRITE_TAC[arith `i < 5 <=> i=0 \/ i=1 \/ i=2 \/ i=3 \/ i=4`];
4357 ASM_CASES_TAC `x = 0`;
4358 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_5_TAC;psort_5];
4359 BY(MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC);
4361 REWRITE_TAC[TAUT `~(a /\ b) <=> (a ==> ~b)`];
4362 BY(STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_5_TAC;psort_5] THEN TRY (REAL_ARITH_TAC))
4366 let is_scs_4I1 = prove_by_refinement(
4367 `is_scs_v39 scs_4I1`,
4370 REWRITE_TAC[Appendix.scs_4I1];
4371 MATCH_MP_TAC is_scs_adj;
4372 REWRITE_TAC[Appendix.d_tame;Sphere.cstab];
4374 BY(REWRITE_TAC[Sphere.h0] THEN MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC)
4378 let is_scs_4I2 = prove_by_refinement(
4379 `is_scs_v39 scs_4I2`,
4382 REWRITE_TAC[Appendix.scs_4I2];
4383 MATCH_MP_TAC is_scs_adj;
4384 REWRITE_TAC[Appendix.d_tame;Sphere.cstab];
4386 BY(REWRITE_TAC[Sphere.h0] THEN MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC)
4390 let is_scs_4I3 = prove_by_refinement(
4391 `is_scs_v39 scs_4I3`,
4394 REWRITE_TAC[Appendix.scs_4I3];
4395 REWRITE_TAC[Appendix.mk_unadorned_v39];
4396 MATCH_MP_TAC is_scs_funlist_basic;
4397 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_4_EXPLICIT];
4398 TYPED_ABBREV_TAC `s = {i | i < 4 /\ (&2 * #1.26 < funlist_v39 [(0,1),sqrt8; (0,2),&6; (1,3),&6] (&2 * #1.26) 4 i (SUC i) \/ &2 < funlist_v39 [(0,1),&2 * #1.26; (0,2),sqrt8; (1,3),sqrt8] (&2) 4 i (SUC i))}`;
4399 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4401 REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC);
4402 TYPIFY `CARD s = 1` ENOUGH_TO_SHOW_TAC;
4404 MATCH_MP_TAC Misc_defs_and_lemmas.CARD_SING;
4406 TYPIFY `0` EXISTS_TAC;
4408 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
4409 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4411 ASM_CASES_TAC `x = 0`;
4412 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4];
4413 BY(MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC);
4415 REWRITE_TAC[TAUT `~(a /\ b) <=> (a ==> ~b)`];
4416 BY(STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC))
4420 let is_scs_3I1 = prove_by_refinement(
4421 `is_scs_v39 scs_3I1`,
4424 REWRITE_TAC[Appendix.scs_3I1];
4425 MATCH_MP_TAC is_scs_adj;
4426 REWRITE_TAC[Appendix.d_tame;Sphere.cstab];
4428 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
4433 let stab_diag_basic = prove_by_refinement(
4434 `!s i j. scs_basic_v39 s /\ ~(i = j) ==> scs_basic_v39 (scs_stab_diag_v39 s i j)`,
4437 rt[Appendix.scs_is_basic;Appendix.is_scs_v39;Appendix.unadorned_v39;Appendix.scs_stab_diag_v39]
4442 let is_scs_6M1 = prove_by_refinement(
4443 `is_scs_v39 scs_6M1`,
4446 REWRITE_TAC[Appendix.scs_6M1];
4447 MATCH_MP_TAC is_scs_adj;
4448 REWRITE_TAC[Appendix.d_tame;Sphere.cstab];
4450 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC)
4454 let is_scs_5M1 = prove_by_refinement(
4455 `is_scs_v39 scs_5M1`,
4458 REWRITE_TAC[Appendix.scs_5M1];
4459 REWRITE_TAC[Appendix.mk_unadorned_v39];
4460 MATCH_MP_TAC is_scs_funlist_basic;
4461 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;I_LT_J_LT_5_EXPLICIT];
4462 TYPED_ABBREV_TAC `s = {i | i < 5 /\ (&2 * #1.26 < funlist_v39 [(0,1), #3.01; (0,2),&6; (0,3),&6; (1,3),&6; (1,4),&6; (2,4),&6] (&2 * #1.26) 5 i (SUC i) \/ &2 < funlist_v39 [(0,1),&2 * #1.26; (0,2),&2 * #1.26; (0,3),&2 * #1.26; (1,3), &2 * #1.26; (1,4), &2 * #1.26; (2,4),&2 * #1.26] (&2) 5 i (SUC i))}`;
4463 REWRITE_TAC[arith `i < 5 <=> i=0 \/ i=1 \/ i=2 \/ i=3 \/ i=4`];
4465 REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_5_TAC;psort_5] THEN TRY (REAL_ARITH_TAC);
4466 TYPIFY `CARD s = 1` ENOUGH_TO_SHOW_TAC;
4468 MATCH_MP_TAC Misc_defs_and_lemmas.CARD_SING;
4470 TYPIFY `0` EXISTS_TAC;
4472 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
4473 REWRITE_TAC[arith `i < 5 <=> i=0 \/ i=1 \/ i=2 \/ i=3 \/ i=4`];
4475 ASM_CASES_TAC `x = 0`;
4476 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_5_TAC;psort_5];
4477 BY(MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC);
4479 REWRITE_TAC[TAUT `~(a /\ b) <=> (a ==> ~b)`];
4480 BY(STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_5_TAC;psort_5] THEN TRY (REAL_ARITH_TAC))
4484 let is_scs_5M2 = prove_by_refinement(
4485 `is_scs_v39 scs_5M2`,
4488 REWRITE_TAC[Appendix.scs_5M2];
4489 REWRITE_TAC[Appendix.mk_unadorned_v39];
4490 MATCH_MP_TAC is_scs_funlist_basic;
4491 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;I_LT_J_LT_5_EXPLICIT];
4492 TYPED_ABBREV_TAC `s = {i | i < 5 /\ (&2 * #1.26 < funlist_v39 [(0,1), #3.01; (0,2),&6; (0,3),&6; (1,3),&6; (1,4),&6; (2,4),&6] (&2 * #1.26) 5 i (SUC i) \/ &2 < funlist_v39 [(0,1),&2; (0,2), #3.01; (0,3), #3.01; (1,3), #3.01; (1,4), #3.01; (2,4), #3.01] (&2) 5 i (SUC i))}`;
4493 REWRITE_TAC[arith `i < 5 <=> i=0 \/ i=1 \/ i=2 \/ i=3 \/ i=4`];
4495 REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_5_TAC;psort_5] THEN TRY (REAL_ARITH_TAC);
4496 TYPIFY `CARD s = 1` ENOUGH_TO_SHOW_TAC;
4498 MATCH_MP_TAC Misc_defs_and_lemmas.CARD_SING;
4500 TYPIFY `0` EXISTS_TAC;
4502 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
4503 REWRITE_TAC[arith `i < 5 <=> i=0 \/ i=1 \/ i=2 \/ i=3 \/ i=4`];
4505 ASM_CASES_TAC `x = 0`;
4506 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_5_TAC;psort_5];
4507 BY(MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC);
4509 REWRITE_TAC[TAUT `~(a /\ b) <=> (a ==> ~b)`];
4510 BY(STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_5_TAC;psort_5] THEN TRY (REAL_ARITH_TAC))
4514 let is_scs_4M1 = prove_by_refinement(
4515 `is_scs_v39 scs_4M1`,
4518 REWRITE_TAC[Appendix.scs_4M1];
4519 REWRITE_TAC[Appendix.mk_unadorned_v39];
4520 MATCH_MP_TAC is_scs_funlist_basic;
4521 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_4_EXPLICIT];
4522 TYPED_ABBREV_TAC `s = {i | i < 4 /\ (&2 * #1.26 < funlist_v39 [(0,1), #3.01; (0,2),&6; (1,3),&6] (&2 * #1.26) 4 i (SUC i) \/ &2 < funlist_v39 [(0,1),&2 * #1.26; (0,2),&2 * #1.26; (1,3),&2 * #1.26] (&2) 4 i (SUC i))}`;
4523 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4525 REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC);
4526 TYPIFY `CARD s = 1` ENOUGH_TO_SHOW_TAC;
4528 MATCH_MP_TAC Misc_defs_and_lemmas.CARD_SING;
4530 TYPIFY `0` EXISTS_TAC;
4532 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
4533 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4535 ASM_CASES_TAC `x = 0`;
4536 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4];
4537 BY(MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC);
4539 REWRITE_TAC[TAUT `~(a /\ b) <=> (a ==> ~b)`];
4540 BY(STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC))
4544 let is_scs_4M2 = prove_by_refinement(
4545 `is_scs_v39 scs_4M2`,
4548 REWRITE_TAC[Appendix.scs_4M2];
4549 REWRITE_TAC[Appendix.mk_unadorned_v39];
4550 MATCH_MP_TAC is_scs_funlist_basic;
4551 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_4_EXPLICIT];
4552 TYPED_ABBREV_TAC `s = {i | i < 4 /\ (&2 * #1.26 < funlist_v39 [(0,1), #3.01; (0,2),&6; (1,3),&6] (&2 * #1.26) 4 i (SUC i) \/ &2 < funlist_v39 [(0,1),&2 * #1.26; (0,2),&2 * #1.26; (1,3),&2 * #1.26] (&2) 4 i (SUC i))}`;
4553 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4555 REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC);
4556 TYPIFY `CARD s = 1` ENOUGH_TO_SHOW_TAC;
4558 MATCH_MP_TAC Misc_defs_and_lemmas.CARD_SING;
4560 TYPIFY `0` EXISTS_TAC;
4562 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
4563 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4565 ASM_CASES_TAC `x = 0`;
4566 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4];
4567 BY(MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC);
4569 REWRITE_TAC[TAUT `~(a /\ b) <=> (a ==> ~b)`];
4570 BY(STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC))
4574 let is_scs_4M3 = prove_by_refinement(
4575 `is_scs_v39 scs_4M3'`,
4578 REWRITE_TAC[Appendix.scs_4M3];
4579 REWRITE_TAC[Appendix.mk_unadorned_v39];
4580 MATCH_MP_TAC is_scs_funlist_basic;
4581 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_4_EXPLICIT];
4582 TYPED_ABBREV_TAC `s = {i | i < 4 /\ (&2 * #1.26 < funlist_v39 [(0,1), #3.01; (0,2),&6; (1,3),&6] (&2 * #1.26) 4 i (SUC i) \/ &2 < funlist_v39 [(0,1),sqrt8; (0,2),sqrt8; (1,3),sqrt8] (&2) 4 i (SUC i))}`;
4583 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4585 REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC);
4586 TYPIFY `CARD s = 1` ENOUGH_TO_SHOW_TAC;
4588 MATCH_MP_TAC Misc_defs_and_lemmas.CARD_SING;
4590 TYPIFY `0` EXISTS_TAC;
4592 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
4593 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4595 ASM_CASES_TAC `x = 0`;
4596 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4];
4597 BY(MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC);
4599 REWRITE_TAC[TAUT `~(a /\ b) <=> (a ==> ~b)`];
4600 BY(STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC))
4604 let is_scs_4M4 = prove_by_refinement(
4605 `is_scs_v39 scs_4M4'`,
4608 REWRITE_TAC[Appendix.scs_4M4];
4609 REWRITE_TAC[Appendix.mk_unadorned_v39];
4610 MATCH_MP_TAC is_scs_funlist_basic;
4611 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_4_EXPLICIT];
4612 TYPED_ABBREV_TAC `s = {i | i < 4 /\ (&2 * #1.26 < funlist_v39 [(0,1), #3.01; (1,2), #3.01; (0,2),&6; (1,3),&6] (&2 * #1.26) 4 i (SUC i) \/ &2 < funlist_v39 [(0,1),&2 * #1.26; (1,2),&2 * #1.26; (0,2),&2 * #1.26; (1,3), &2 * #1.26] (&2) 4 i (SUC i))}`;
4613 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4615 REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (REAL_ARITH_TAC);
4616 TYPIFY `s = {0,1}` ENOUGH_TO_SHOW_TAC;
4617 DISCH_THEN SUBST1_TAC;
4618 BY(MESON_TAC[Geomdetail.CARD2;arith `x <= 2 ==> x + 4 <= 6`]);
4620 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
4621 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4623 ASM_CASES_TAC `x = 0`;
4624 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4];
4625 BY( REAL_ARITH_TAC);
4626 ASM_CASES_TAC `x = 1`;
4627 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4];
4628 BY( REAL_ARITH_TAC);
4630 REWRITE_TAC[TAUT `~(a /\ b) <=> (a ==> ~b)`];
4631 BY(STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (REAL_ARITH_TAC))
4635 let is_scs_4M5 = prove_by_refinement(
4636 `is_scs_v39 scs_4M5'`,
4639 REWRITE_TAC[Appendix.scs_4M5];
4640 REWRITE_TAC[Appendix.mk_unadorned_v39];
4641 MATCH_MP_TAC is_scs_funlist_basic;
4642 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_4_EXPLICIT];
4643 TYPED_ABBREV_TAC `s = {i | i < 4 /\ (&2 * #1.26 < funlist_v39 [(0,1), #3.01; (2,3), #3.01; (0,2),&6; (1,3),&6] (&2 * #1.26) 4 i (SUC i) \/ &2 < funlist_v39 [(0,1),&2 * #1.26; (2,3),&2 * #1.26; (0,2),&2 * #1.26; (1,3), &2 * #1.26] (&2) 4 i (SUC i))}`;
4644 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4646 REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (REAL_ARITH_TAC);
4647 TYPIFY `s = {0,2}` ENOUGH_TO_SHOW_TAC;
4648 DISCH_THEN SUBST1_TAC;
4649 BY(MESON_TAC[Geomdetail.CARD2;arith `x <= 2 ==> x + 4 <= 6`]);
4651 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
4652 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4654 ASM_CASES_TAC `x = 0`;
4655 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4];
4656 BY( REAL_ARITH_TAC);
4657 ASM_CASES_TAC `x = 2`;
4658 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4];
4659 BY( REAL_ARITH_TAC);
4661 REWRITE_TAC[TAUT `~(a /\ b) <=> (a ==> ~b)`];
4662 BY(STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (REAL_ARITH_TAC))
4666 let is_scs_4M6 = prove_by_refinement(
4667 `is_scs_v39 scs_4M6'`,
4670 REWRITE_TAC[Appendix.scs_4M6];
4671 REWRITE_TAC[Appendix.mk_unadorned_v39];
4672 MATCH_MP_TAC is_scs_funlist_basic;
4673 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_4_EXPLICIT];
4674 TYPED_ABBREV_TAC `s = {i | i < 4 /\ (&2 * #1.26 < funlist_v39 [(0,1), #3.01; (0,2),&6; (1,3),&6] (&2 * #1.26) 4 i (SUC i) \/ &2 < funlist_v39 [(0,1),&2 * #1.26; (0,2), #3.01; (1,3), #3.01] (&2) 4 i (SUC i))}`;
4675 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4677 REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC);
4678 TYPIFY `CARD s = 1` ENOUGH_TO_SHOW_TAC;
4680 MATCH_MP_TAC Misc_defs_and_lemmas.CARD_SING;
4682 TYPIFY `0` EXISTS_TAC;
4684 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
4685 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4687 ASM_CASES_TAC `x = 0`;
4688 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4];
4689 BY(MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC);
4691 REWRITE_TAC[TAUT `~(a /\ b) <=> (a ==> ~b)`];
4692 BY(STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (MP_TAC sqrt8_flyspeck (* 1 *) THEN REAL_ARITH_TAC))
4696 let is_scs_4M7 = prove_by_refinement(
4697 `is_scs_v39 scs_4M7`,
4700 REWRITE_TAC[Appendix.scs_4M7];
4701 REWRITE_TAC[Appendix.mk_unadorned_v39];
4702 MATCH_MP_TAC is_scs_funlist_basic;
4703 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_4_EXPLICIT];
4704 TYPED_ABBREV_TAC `s = {i | i < 4 /\ (&2 * #1.26 < funlist_v39 [(0,1), #3.01; (1,2), #3.01; (0,2),&6; (1,3),&6; (1,3),&6] (&2 * #1.26) 4 i (SUC i) \/ &2 < funlist_v39 [(0,1),&2 * #1.26; (1,2),&2 * #1.26; (0,2), #3.01; (1,3), #3.01] (&2) 4 i (SUC i))}`;
4705 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4707 REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (REAL_ARITH_TAC);
4708 TYPIFY `s = {0,1}` ENOUGH_TO_SHOW_TAC;
4709 DISCH_THEN SUBST1_TAC;
4710 BY(MESON_TAC[Geomdetail.CARD2;arith `x <= 2 ==> x + 4 <= 6`]);
4712 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
4713 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4715 ASM_CASES_TAC `x = 0`;
4716 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4];
4717 BY( REAL_ARITH_TAC);
4718 ASM_CASES_TAC `x = 1`;
4719 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4];
4720 BY( REAL_ARITH_TAC);
4722 REWRITE_TAC[TAUT `~(a /\ b) <=> (a ==> ~b)`];
4723 BY(STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (REAL_ARITH_TAC))
4727 let is_scs_4M8 = prove_by_refinement(
4728 `is_scs_v39 scs_4M8`,
4731 REWRITE_TAC[Appendix.scs_4M8];
4732 REWRITE_TAC[Appendix.mk_unadorned_v39];
4733 MATCH_MP_TAC is_scs_funlist_basic;
4734 REWRITE_TAC[Appendix.d_tame;Sphere.cstab;Sphere.h0;Terminal.I_LT_J_LT_4_EXPLICIT];
4735 TYPED_ABBREV_TAC `s = {i | i < 4 /\ (&2 * #1.26 < funlist_v39 [(0,1), #3.01; (2,3), #3.01; (0,2),&6; (1,3),&6; (1,3),&6] (&2 * #1.26) 4 i (SUC i) \/ &2 < funlist_v39 [(0,1),&2 * #1.26; (2,3),&2 * #1.26; (0,2), #3.01; (1,3), #3.01] (&2) 4 i (SUC i))} `;
4736 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4738 REPEAT CONJ_TAC THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (REAL_ARITH_TAC);
4739 TYPIFY `s = {0,2}` ENOUGH_TO_SHOW_TAC;
4740 DISCH_THEN SUBST1_TAC;
4741 BY(MESON_TAC[Geomdetail.CARD2;arith `x <= 2 ==> x + 4 <= 6`]);
4743 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_INSERT;NOT_IN_EMPTY];
4744 REWRITE_TAC[arith `i < 4 <=> i=0 \/ i=1 \/ i=2 \/ i=3`];
4746 ASM_CASES_TAC `x = 0`;
4747 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4];
4748 BY( REAL_ARITH_TAC);
4749 ASM_CASES_TAC `x = 2`;
4750 ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4];
4751 BY( REAL_ARITH_TAC);
4753 REWRITE_TAC[TAUT `~(a /\ b) <=> (a ==> ~b)`];
4754 BY(STRIP_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Uxckfpe.ARITH_4_TAC;psort_4] THEN TRY (REAL_ARITH_TAC))
4758 let is_scs_examples = prove_by_refinement(
4759 `is_scs_v39 scs_6I1 /\
4760 is_scs_v39 scs_5I1 /\
4761 is_scs_v39 scs_5I2 /\
4762 is_scs_v39 scs_5I3 /\
4763 is_scs_v39 scs_4I1 /\
4764 is_scs_v39 scs_4I2 /\
4765 is_scs_v39 scs_4I3 /\
4766 is_scs_v39 scs_3I1 /\
4768 is_scs_v39 scs_6T1 /\
4769 is_scs_v39 scs_5T1 /\
4770 is_scs_v39 scs_4T1 /\
4771 is_scs_v39 scs_4T2 /\
4772 is_scs_v39 scs_4T3 /\
4773 is_scs_v39 scs_4T4 /\
4774 is_scs_v39 scs_4T5 /\
4775 is_scs_v39 scs_3T1 /\
4776 is_scs_v39 scs_3T2 /\
4777 is_scs_v39 scs_3T3 /\
4778 is_scs_v39 scs_3T4 /\
4779 is_scs_v39 scs_3T5 /\
4780 is_scs_v39 scs_3T6' /\
4781 is_scs_v39 scs_3T7 /\
4783 is_scs_v39 scs_6M1 /\
4784 is_scs_v39 scs_5M1 /\
4785 is_scs_v39 scs_5M2 /\
4786 is_scs_v39 scs_4M1 /\
4787 is_scs_v39 scs_4M2 /\
4788 is_scs_v39 scs_4M3' /\
4789 is_scs_v39 scs_4M4' /\
4790 is_scs_v39 scs_4M5' /\
4791 is_scs_v39 scs_4M6' /\
4792 is_scs_v39 scs_4M7 /\
4793 is_scs_v39 scs_4M8 /\
4798 BY(REWRITE_TAC[is_scs_6I1;is_scs_5I1;is_scs_5I2;is_scs_5I3;is_scs_4I1;is_scs_4I2;is_scs_4I3;is_scs_3I1; is_scs_6T1;is_scs_5T1;is_scs_4T1;is_scs_4T2;is_scs_4T3;is_scs_4T4;is_scs_4T5;is_scs_3T1;is_scs_3T2;is_scs_3T3;is_scs_3T4;is_scs_3T5;is_scs_3T6;is_scs_3T7;is_scs_6M1;is_scs_5M1;is_scs_5M2;is_scs_4M1;is_scs_4M2;is_scs_4M3;is_scs_4M4;is_scs_4M5;is_scs_4M6;is_scs_4M7;is_scs_4M8;is_scs_3M1])
4803 let scs_example_list = [Appendix.scs_6I1;Appendix.scs_5I1;Appendix.scs_5I2;Appendix.scs_5I3;Appendix.scs_4I1;Appendix.scs_4I2;Appendix.scs_4I3;Appendix.scs_3I1; Appendix.scs_6T1;Appendix.scs_5T1;Appendix.scs_4T1;Appendix.scs_4T2;Appendix.scs_4T3;Appendix.scs_4T4;Appendix.scs_4T5;Appendix.scs_3T1;Appendix.scs_3T2;Appendix.scs_3T3;Appendix.scs_3T4;Appendix.scs_3T5;Appendix.scs_3T6;Appendix.scs_3T7;Appendix.scs_6M1;Appendix.scs_5M1;Appendix.scs_5M2;Appendix.scs_4M1;Appendix.scs_4M2;Appendix.scs_4M3;Appendix.scs_4M4;Appendix.scs_4M5;Appendix.scs_4M6;Appendix.scs_4M7;Appendix.scs_4M8;Appendix.scs_3M1];;
4805 let unadorned_examples = prove_by_refinement(
4806 `unadorned_v39 scs_6I1 /\
4807 unadorned_v39 scs_5I1 /\
4808 unadorned_v39 scs_5I2 /\
4809 unadorned_v39 scs_5I3 /\
4810 unadorned_v39 scs_4I1 /\
4811 unadorned_v39 scs_4I2 /\
4812 unadorned_v39 scs_4I3 /\
4813 unadorned_v39 scs_3I1 /\
4815 unadorned_v39 scs_6T1 /\
4816 unadorned_v39 scs_5T1 /\
4817 unadorned_v39 scs_4T1 /\
4818 unadorned_v39 scs_4T2 /\
4819 unadorned_v39 scs_4T3 /\
4820 unadorned_v39 scs_4T4 /\
4821 unadorned_v39 scs_4T5 /\
4822 unadorned_v39 scs_3T1 /\
4823 unadorned_v39 scs_3T2 /\
4824 unadorned_v39 scs_3T3 /\
4825 unadorned_v39 scs_3T4 /\
4826 unadorned_v39 scs_3T5 /\
4827 unadorned_v39 scs_3T6' /\
4828 unadorned_v39 scs_3T7 /\
4830 unadorned_v39 scs_6M1 /\
4831 unadorned_v39 scs_5M1 /\
4832 unadorned_v39 scs_5M2 /\
4833 unadorned_v39 scs_4M1 /\
4834 unadorned_v39 scs_4M2 /\
4835 unadorned_v39 scs_4M3' /\
4836 unadorned_v39 scs_4M4' /\
4837 unadorned_v39 scs_4M5' /\
4838 unadorned_v39 scs_4M6' /\
4839 unadorned_v39 scs_4M7 /\
4840 unadorned_v39 scs_4M8 /\
4841 unadorned_v39 scs_3M1
4845 REWRITE_TAC scs_example_list;
4846 BY(REWRITE_TAC[scs_mk_unadorned_unadorned])
4850 let basic_examples = prove_by_refinement(
4851 `scs_basic_v39 scs_6I1 /\
4852 scs_basic_v39 scs_5I1 /\
4853 scs_basic_v39 scs_5I2 /\
4854 scs_basic_v39 scs_5I3 /\
4855 scs_basic_v39 scs_4I1 /\
4856 scs_basic_v39 scs_4I2 /\
4857 scs_basic_v39 scs_4I3 /\
4858 scs_basic_v39 scs_3I1 /\
4860 scs_basic_v39 scs_6T1 /\
4861 scs_basic_v39 scs_5T1 /\
4862 scs_basic_v39 scs_4T1 /\
4863 scs_basic_v39 scs_4T2 /\
4864 scs_basic_v39 scs_4T3 /\
4865 scs_basic_v39 scs_4T4 /\
4866 scs_basic_v39 scs_4T5 /\
4867 scs_basic_v39 scs_3T1 /\
4868 scs_basic_v39 scs_3T2 /\
4869 scs_basic_v39 scs_3T3 /\
4870 scs_basic_v39 scs_3T4 /\
4871 scs_basic_v39 scs_3T5 /\
4872 scs_basic_v39 scs_3T6' /\
4873 scs_basic_v39 scs_3T7 /\
4875 scs_basic_v39 scs_6M1 /\
4876 scs_basic_v39 scs_5M1 /\
4877 scs_basic_v39 scs_5M2 /\
4878 scs_basic_v39 scs_4M1 /\
4879 scs_basic_v39 scs_4M2 /\
4880 scs_basic_v39 scs_4M3' /\
4881 scs_basic_v39 scs_4M4' /\
4882 scs_basic_v39 scs_4M5' /\
4883 scs_basic_v39 scs_4M6' /\
4884 scs_basic_v39 scs_4M7 /\
4885 scs_basic_v39 scs_4M8 /\
4886 scs_basic_v39 scs_3M1
4890 REWRITE_TAC[Appendix.scs_basic];
4891 REWRITE_TAC[is_scs_examples;unadorned_examples];
4892 REWRITE_TAC scs_example_list;
4893 BY(REWRITE_TAC[Terminal.scs_unadorned_explicit])
4897 let scs_arrow_sing_empty = prove_by_refinement(
4898 `!s. scs_arrow_v39 {s} {} <=> (MMs_v39 s = {})`,
4901 REWRITE_TAC[Appendix.scs_arrow_v39;NOT_IN_EMPTY;IN_SING];
4906 let pos_imp_scs_arrow_empty = prove_by_refinement(
4907 `!s. (!vv. BBs_v39 s vv ==> &0 <= taustar_v39 s vv) ==> scs_arrow_v39 {s} {}`,
4910 REPEAT WEAKER_STRIP_TAC;
4911 REWRITE_TAC[scs_arrow_sing_empty;EXTENSION;NOT_IN_EMPTY];
4912 REWRITE_TAC[IN;Appendix.MMs_v39;Appendix.BBprime2_v39;Appendix.BBprime_v39];
4913 REPEAT WEAKER_STRIP_TAC;
4914 BY(ASM_MESON_TAC[arith `x < &0 ==> ~(&0 <= x)`])
4918 let arrow_rewrite_list =
4919 map (UNDISCH o (REWRITE_RULE ((map GSYM scs_example_list) @ [LET_THM])))
4920 [Terminal.empty_3T1;Terminal.empty_3T2;Terminal.empty_3T3;Terminal.empty_3T4;
4921 Terminal.empty_3T5;Terminal.empty_3T6;Terminal.empty_3T6;Terminal.empty_3T7;
4922 Terminal.empty_4T1;Terminal.empty_4T2;Terminal.empty_4T3;Terminal.empty_4T4;
4923 Terminal.empty_4T5;empty_5T1;empty_6T1];;
4927 let OCBICBY = prove_by_refinement(
4928 `main_nonlinear_terminal_v11 ==>
4930 scs_arrow_v39 {scs_6T1} {} /\
4931 scs_arrow_v39 {scs_5T1} {} /\
4932 scs_arrow_v39 {scs_4T1} {} /\
4933 scs_arrow_v39 {scs_4T2} {} /\
4934 scs_arrow_v39 {scs_4T3} {} /\
4935 scs_arrow_v39 {scs_4T4} {} /\
4936 scs_arrow_v39 {scs_4T5} {} /\
4937 scs_arrow_v39 {scs_3T1} {} /\
4938 scs_arrow_v39 {scs_3T2} {} /\
4939 scs_arrow_v39 {scs_3T3} {} /\
4940 scs_arrow_v39 {scs_3T4} {} /\
4941 scs_arrow_v39 {scs_3T5} {} /\
4942 scs_arrow_v39 {scs_3T6' } {} /\
4943 scs_arrow_v39 {scs_3T7} {}
4948 REPEAT (GMATCH_SIMP_TAC pos_imp_scs_arrow_empty);
4949 BY(REWRITE_TAC arrow_rewrite_list)