1 (* ========================================================================== *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
4 (* Chapter: Local Fan *)
5 (* Author: Hoang Le Truong *)
7 (* ========================================================================= *)
11 remaining conclusions from appendix to Local Fan chapter
15 module Tfitskc = struct
27 open Wrgcvdr_cizmrrh;;
35 open Flyspeck_constants;;
51 open Wrgcvdr_cizmrrh;;
53 open Flyspeck_constants;;
94 let SCS_DIAG_A_LE_DIST=prove(`(!i j. scs_diag (scs_k_v39 s) i j ==> (scs_a_v39 s i j <= cstab /\ cstab < dist(v i, v j)/\ &4 * h0 < scs_b_v39 s i j))
95 ==> (!i j. scs_diag (scs_k_v39 s) i j ==> (scs_a_v39 s i j < dist(v i, (v:num->real^3) j)))`,
97 THEN THAYTHE_TAC 1[`i`;`j`]
99 THEN REAL_ARITH_TAC);;
102 let DIST_EQ_2_IMP_A_EQ_2=prove(`is_scs_v39 s/\ BBs_v39 s v /\ dist (v i,v (SUC i)) = &2
103 ==> scs_a_v39 s i (SUC i) = &2`,
104 REWRITE_TAC[LET_DEF;LET_END_DEF;BBs_v39;is_scs_v39]
106 THEN ABBREV_TAC`k= scs_k_v39 s`
107 THEN MRESAS_TAC(GEN_ALL CHANGE_A_SCS_MOD)[`i MOD k`;`SUC i MOD k `;`s:scs_v39`;`i`;`SUC i`][MOD_REFL;MOD_MULT_ADD;ARITH_RULE`3<=k==> ~(k=0)/\ 1<k`;is_scs_v39]
108 THEN THAYTHES_TAC (26-14)[`i MOD k`;`SUC i MOD k`][DIVISION;ARITH_RULE`3<=k==> ~(k=0)/\ 1<k`;Qknvmlb.SUC_MOD_NOT_EQ]
110 THEN THAYTHE_TAC 4[`i`;`SUC i`]
112 THEN REAL_ARITH_TAC);;
115 let SCS_DIAG_2=prove(`3<k==> scs_diag k i (SUC (SUC i))`,
117 THEN REWRITE_TAC[scs_diag;ADD1]
118 THEN MP_TAC(ARITH_RULE`3<k==> (i+1)+1=i+2/\ (i+2)+1=i+3/\ ~(k=0)/\ k-1<k
119 /\ (i+1)+1=i+2 /\ 1<k /\ 2<k/\ 0<k/\ ~(2=0)/\ ~(2=1)/\ ~(3=0)`)
121 THEN MP_TAC(SET_RULE`i= i+0==> i MOD k= (i+0) MOD k`)
122 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o DEPTH_CONV)[ARITH_RULE`x+0=x`]
124 THEN ASM_SIMP_TAC[Ocbicby.MOD_EQ_MOD_SHIFT;MOD_LT]);;
127 let TFITSKCv1_concl = `
128 main_nonlinear_terminal_v11
129 ==> (!s (v:num->real^3) i.
130 (!i'. ~scs_J_v39 s (SUC (SUC i)) i')/\
131 scs_a_v39 s (SUC (SUC i)) (SUC(SUC(SUC i)))< scs_b_v39 s (SUC (SUC i)) (SUC(SUC(SUC i))) /\
133 is_scs_v39 s /\ v IN MMs_v39 s /\ scs_generic v /\ scs_basic_v39 s /\
134 scs_a_v39 s (i+1) (i+2) = &2 /\ scs_b_v39 s (i+1) (i+2) <= &2 * h0 /\
135 dist(v i,v (i+1)) = &2 /\ dist(v i,v (i+1))< scs_b_v39 s i (i+1) /\
136 (!i j. scs_diag (scs_k_v39 s) i j ==> (scs_a_v39 s i j <= cstab /\ cstab < dist(v i, v j)/\ &4 * h0 < scs_b_v39 s i j)) ==>
137 dist(v (i+1),v(i+2)) = &2)`;;
144 let TFITSKCv1=prove_by_refinement( TFITSKCv1_concl,
147 THEN REWRITE_TAC[IN;GSYM ADD1;ARITH_RULE`i+2=SUC(SUC i)`;scs_generic]
150 THEN ABBREV_TAC`k=scs_k_v39 s`
151 THEN ABBREV_TAC`V=(IMAGE (v:num->real^3) (:num))`
152 THEN ABBREV_TAC`E=(IMAGE (\i. {(v:num->real^3) i, v (SUC i)}) (:num))`
153 THEN ABBREV_TAC`FF=IMAGE (\i. ((v:num->real^3) i, v (SUC i))) (:num)`
154 THEN MRESA_TAC MMS_IMP_BBS[`s`;`v`]
155 THEN MRESA_TAC Imjxphr.BBS_IMP_CONVEX_LOCAL_FAN[`k`;`s`;`v`]
156 THEN MP_TAC Local_lemmas.CVLF_LF_F
158 THEN MP_TAC SCS_DIAG_A_LE_DIST
160 THEN MRESAL_TAC Axjrpnc.DIST_EDGE_IN_BB_LE_2[`s`;`v`;`SUC i`][ARITH_RULE`SUC(i+1)=i+2`;GSYM dist]
161 THEN MP_TAC(REAL_ARITH`&2 <= dist (v (SUC i),v (SUC(SUC i)))
162 ==> dist (v (SUC i),v (SUC(SUC i))) = &2 \/ &2 < dist (v (SUC i),(v:num->real^3) (SUC(SUC i)))`)
164 THEN MRESA_TAC WL_IN_V[`i`;`v:num->real^3`]
165 THEN MRESA_TAC WL_IN_V[`SUC i`;`v:num->real^3`]
166 THEN MRESA_TAC BB_RHO_NODE_IVS[`V`;`E`;`s`;`FF`;`v (SUC i)`;`v`;`SUC i`;`k`]
167 THEN MRESAL_TAC Local_lemmas.IN_V_IMP_AZIM_LESS_PI[`E`;`V`;`FF`;`v (SUC i)`][GSYM ADD1]
168 THEN THAYTHE_TAC 0[`v i`]
169 THEN MP_TAC(REAL_ARITH`azim (vec 0) (v (SUC i)) (v (SUC (SUC i))) (v i) <= pi
170 ==> azim (vec 0) (v (SUC i)) (v (SUC (SUC i))) (v i) = pi
171 \/ azim (vec 0) (v (SUC i)) (v (SUC (SUC i))) ((v:num->real^3) i) < pi`)
176 MP_TAC Jcyfmrp.J_EMPY_CASES_A_EQ_2_V1
178 THEN REWRITE_TAC[SET_RULE`(a = {})<=> !i. ~ (a i)`]
180 THEN MP_TAC DIST_EQ_2_IMP_A_EQ_2
183 THEN MRESAL_TAC MMS_IMP_BBPRIME[`s`;`v`][LET_DEF;LET_END_DEF;BBprime_v39]
184 THEN MRESA_TAC Imjxphr.EQ_W_L_IN_BBS[`s`;`k`;`v`;`i`]
185 THEN MRESAL_TAC JKQEWGV2[`s`;`v`][LET_DEF;LET_END_DEF;scs_generic]
186 THEN MP_TAC Wrgcvdr_cizmrrh.CIZMRRH
188 THEN POP_ASSUM MP_TAC
189 THEN REWRITE_TAC[NOT_EXISTS_THM]
191 THEN SUBGOAL_THEN`(!V' E' v1. V' = V /\ E' = E ==> ~lunar (v1,(v:num->real^3) (SUC i)) V' E')` ASSUME_TAC;
200 SUBGOAL_THEN`~collinear {vec 0, (v:num->real^3) (SUC (SUC i)), v (i)}`
204 MRESAS_TAC WL_IN_V[`SUC (SUC i)`;`v:num->real^3`][BB_VV_FUN_EQ;Ocbicby.MOD_EQ_MOD_SHIFT]
205 THEN MRESA_TAC Nkezbfc_local.PROPERTIES_GENERIC[`FF`;`E`;`v (SUC(SUC i))`;`v i`;`V`]
206 THEN THAYTHES_TAC 0[`v (SUC(SUC i))`;`v i`][SET_RULE`a IN {a,b}`;BB_VV_FUN_EQ;ARITH_RULE`SUC (SUC x)=x+2`;Ocbicby.MOD_EQ_MOD_SHIFT]
207 THEN MATCH_DICH_TAC 0
208 THEN MP_TAC(SET_RULE`i= i+0==> i MOD k= (i+0) MOD k`)
209 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o DEPTH_CONV)[ARITH_RULE`x+0=x`]
211 THEN MP_TAC(ARITH_RULE`3<k==> ~(k=0)/\ 0<k/\ 2<k/\ ~(2=0)`)
213 THEN ASM_SIMP_TAC[Ocbicby.MOD_EQ_MOD_SHIFT;MOD_LT];
219 SUBGOAL_THEN`(v:num->real^3) (SUC i) IN aff_gt {vec 0} {v (SUC (SUC i)), v (i)}`
225 MRESA_TAC Nkezbfc_local.PROPERTIES_GENERIC[`FF`;`E`;`v ((SUC i))`;`v i`;`V`]
226 THEN THAYTHES_TAC 0[`v (SUC i)`;`v i`][SET_RULE`a IN {a,b}`;BB_VV_FUN_EQ;Ocbicby.MOD_EQ_MOD_SHIFT;ADD1]
227 THEN POP_ASSUM MP_TAC
228 THEN MP_TAC(SET_RULE`i= i+0==> i MOD k= (i+0) MOD k`)
229 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o DEPTH_CONV)[ARITH_RULE`x+0=x`]
231 THEN MP_TAC(ARITH_RULE`3<k==> ~(k=0)/\ 0<k/\ 1<k/\ 2<k /\ ~(1=0)/\ ~(2=1)`)
233 THEN ASM_SIMP_TAC[Ocbicby.MOD_EQ_MOD_SHIFT;MOD_LT]
234 THEN MRESAL_TAC WL_IN_V[`SUC (SUC i)`;`v:num->real^3`][]
235 THEN MRESA_TAC Nkezbfc_local.PROPERTIES_GENERIC[`FF`;`E`;`v (SUC (SUC i))`;`v (SUC i)`;`V`]
236 THEN THAYTHES_TAC 0[`(v:num->real^3) (SUC(SUC i))`;`v (SUC i)`][SET_RULE`a IN {a,b}`;BB_VV_FUN_EQ;Ocbicby.MOD_EQ_MOD_SHIFT;ADD1;ARITH_RULE`(i+1)+1=i+2`;MOD_LT]
237 THEN POP_ASSUM MP_TAC
238 THEN ASM_REWRITE_TAC[ARITH_RULE`i+2=(i+1)+1`;GSYM ADD1]
239 THEN REPEAT STRIP_TAC
241 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
244 THEN REWRITE_TAC[GSYM ADD1;generic]
246 THEN MRESAL_TAC WL_IN_E[`SUC i`;`v:num->real^3`][]
247 THEN THAYTHE_TAC 1[`v (SUC i)`;`v(SUC(SUC i))`;`v i`]
248 THEN MRESAS_TAC Polar_fan.GENERIC_LOCAL_FAN_STRAIGHT_AFF_GE[`v i`;`v (SUC i)`;`v(SUC(SUC i))`;][]
250 THEN MRESA_TAC th3[`vec 0:real^3`;`v (SUC(SUC i))`;`v i`]
251 THEN MRESAS_TAC Local_lemmas.FAN_IMP_NOT_IN_AFF_GE[`E`;`V`;`v (SUC i)`;`vec 0:real^3`;`v i`][SET_RULE`{a,b} SUBSET A<=> a IN A/\ b IN A`;BB_VV_FUN_EQ;ADD1]
252 THEN POP_ASSUM MP_TAC
253 THEN MP_TAC(SET_RULE`i= i+0==> i MOD k= (i+0) MOD k`)
254 THEN GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o LAND_CONV o DEPTH_CONV)[ARITH_RULE`x+0=x`]
255 THEN ASM_SIMP_TAC[Ocbicby.MOD_EQ_MOD_SHIFT;MOD_LT]
256 THEN MRESAS_TAC Local_lemmas.FAN_IMP_NOT_IN_AFF_GE[`E`;`V`;`v (SUC i)`;`vec 0:real^3`;`v (SUC(SUC i))`][SET_RULE`{a,b} SUBSET A<=> a IN A/\ b IN A`;BB_VV_FUN_EQ;ADD1;ARITH_RULE`(i+1)+1=i+2`;MOD_LT;Ocbicby.MOD_EQ_MOD_SHIFT]
257 THEN POP_ASSUM MP_TAC
258 THEN ASM_REWRITE_TAC[ARITH_RULE`i+2=(i+1)+1`;GSYM ADD1]
261 THEN MRESAL_TAC Wrgcvdr_cizmrrh.AFF_GE_TO_AFF_GT2_GE1[`v i`;`vec 0:real^3`;`v (SUC(SUC i))`][UNION;IN_ELIM_THM]
262 THEN REPEAT STRIP_TAC
263 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
264 THEN ASM_REWRITE_TAC[];
269 MRESAS_TAC NUXCOEAv2[`s`;`k`;`v`;`SUC i`;`i`][ARITH_RULE`SUC i + k - 1=SUC (i + k - 1)`];
274 MRESAL_TAC WL_IN_BALL_ANNULUS[`s`;`v`;`SUC(SUC i)`][Fnjlbxs.in_ball_annulus]
275 THEN MP_TAC(REAL_ARITH`&2 <= norm (v (SUC(SUC i)))
276 ==> norm (v (SUC(SUC i)))= &2\/ &2 < norm ((v:num->real^3) (SUC(SUC i)))`)
283 MRESA_TAC Imjxphr.EQ_W_L_IN_BBS[`s`;`k`;`v`;`i`]
286 THEN THAYTHES_TAC 0[`s`;`v`;`SUC i`;`k`][Imjxphr.EQ_W_L_IN_BBS;ARITH_RULE`SUC i + k - 1=SUC( i + k - 1)`]
288 THEN ONCE_REWRITE_TAC[DIST_SYM]
289 THEN ASM_REWRITE_TAC[]
290 THEN SUBGOAL_THEN`dist (v (SUC (SUC i)),(v:num->real^3) (SUC i)) <= &2 * h0`ASSUME_TAC;
294 REPLICATE_TAC (31-1) (POP_ASSUM MP_TAC)
295 THEN MP_TAC(ARITH_RULE`3<k==> ~(k<=3)`)
296 THEN REWRITE_TAC[LET_DEF;LET_END_DEF;is_scs_v39;BBs_v39]
298 THEN THAYTHE_TAC (52-36)[`SUC(SUC i)`;`SUC i`]THEN DICH_TAC (56-29)
304 THEN REWRITE_TAC[h0;REAL_ARITH`&2<= &2* #1.26`]
305 THEN SUBGOAL_THEN`cstab <= dist (v i,(v:num->real^3) (SUC (SUC i)))`ASSUME_TAC
309 MP_TAC(ARITH_RULE`3<k==> SUC (i + k - 1)= i+ 1*k+0/\ ~(k<=3)/\ ~(k=0)/\ k-1<k
310 /\ (i+1)+1=i+2 /\ 1<k /\ 2<k/\ 0<k/\ ~(2=0)/\ ~(2=1)/\ ~(3=0)`)
312 THEN THAYTHES_TAC (43-10)[`SUC(SUC i)`;`i`][scs_diag;ADD1;ARITH_RULE`(i+1)+1=i+2/\(i+2)+1= i+3`;Ocbicby.MOD_EQ_MOD_SHIFT;MOD_LT]
313 THEN POP_ASSUM MP_TAC
314 THEN MP_TAC(SET_RULE`i= i+0==> i MOD k= (i+0) MOD k`)
315 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o DEPTH_CONV)[ARITH_RULE`x+0=x`]
317 THEN ASM_SIMP_TAC[Ocbicby.MOD_EQ_MOD_SHIFT;MOD_LT]
319 THEN ONCE_REWRITE_TAC[DIST_SYM]
325 THEN ONCE_REWRITE_TAC[DIST_SYM]
326 THEN MP_TAC(ARITH_RULE`3<k==> SUC i+k-1=SUC(i+k-1)`)
331 MP_TAC Cuxvzoz.CUXVZOZ
333 THEN THAYTHEL_TAC 0[`s`;`FF`;`k`;`SUC i`;`v`][scs_generic;GSYM ADD1;]
334 THEN MATCH_DICH_TAC 0
338 THAYTHES_TAC (35-10)[`i`;`SUC(SUC i)`][SCS_DIAG_2]
340 THEN REWRITE_TAC[cstab]
344 REWRITE_TAC[REAL_ARITH`a<= a/\ &2<= #3.01`;cstab]
349 THEN THAYTHE_TAC (37-10)[`i'`;`j`]
360 THEN THAYTHE_TAC (36-10)[`i'`;`j`]
368 ASM_REWRITE_TAC[interior_angle1;GSYM ivs_rho_node1;GSYM ADD1]
373 ASM_REWRITE_TAC[interior_angle1;GSYM ivs_rho_node1;GSYM ADD1]
377 MP_TAC(REAL_ARITH`&2 < norm ((v:num->real^3) (SUC (SUC i))) ==> ~(&2 = norm (v (SUC (SUC i))))`)
379 THEN SUBGOAL_THEN`(!i'. scs_diag k (SUC (SUC i)) i'
380 ==> &4 * h0 < scs_b_v39 s (SUC (SUC i)) i')`ASSUME_TAC
385 THEN THAYTHE_TAC(33-11)[`SUC(SUC i)`;`i'`]
391 MRESAL_TAC MMS_IMP_BBPRIME[`s`;`v`][LET_DEF;LET_END_DEF;BBprime_v39]
392 THEN MRESAL_TAC JKQEWGV2[`s`;`v`][LET_DEF;LET_END_DEF;scs_generic]
393 THEN MP_TAC Wrgcvdr_cizmrrh.CIZMRRH
395 THEN POP_ASSUM MP_TAC
396 THEN REWRITE_TAC[NOT_EXISTS_THM]
398 THEN SUBGOAL_THEN`(!V' E' v1. V' = V /\ E' = E ==> ~lunar (v1,(v:num->real^3) (SUC (SUC i))) V' E')` ASSUME_TAC;
404 MRESA_TAC ODXLSTCv2[`s`;`k`;`v`;`SUC(SUC i)`]
405 THEN POP_ASSUM MP_TAC
406 THEN REWRITE_TAC[NOT_FORALL_THM;NOT_IMP]
408 THEN THAYTHEL_ASM_TAC (41-21)[`SUC(SUC i)`;`i'`][scs_diag;]
410 THEN REWRITE_TAC[DE_MORGAN_THM]
411 THEN ONCE_REWRITE_TAC[SET_RULE`A\/B<=> B\/A`]
417 THEN ASM_SIMP_TAC[ADD1;ARITH_RULE`i+1=1+i`;Ocbicby.MOD_EQ_MOD_SHIFT;ARITH_RULE`3<k==> ~(k=0)`]
418 THEN REWRITE_TAC[ARITH_RULE`1+i= SUC i`]
421 THEN MRESA_TAC CHANGE_W_IN_BBS_MOD_IS_SCS[`s`;`i'`;`v:num->real^3`;`SUC i:num`]
422 THEN MRESAL_TAC(GEN_ALL CHANGE_A_SCS_MOD)[`SUC(SUC i)`;`i' `;`s:scs_v39`;`SUC(SUC i)`;`SUC i`][]
423 THEN ONCE_REWRITE_TAC[DIST_SYM]
425 THEN REWRITE_TAC[is_scs_v39;LET_DEF;LET_END_DEF]
431 SUBGOAL_THEN`scs_a_v39 s (SUC (SUC (SUC i))) (SUC (SUC i))= dist ((v:num->real^3) (SUC (SUC (SUC i))),v (SUC (SUC i)))`ASSUME_TAC
436 THEN MRESAL_TAC(GEN_ALL CHANGE_A_SCS_MOD)[`SUC(SUC i)`;`i' `;`s:scs_v39`;`SUC(SUC i)`;`SUC (SUC(SUC i))`][]
437 THEN MRESA_TAC CHANGE_W_IN_BBS_MOD_IS_SCS[`s`;`i'`;`v:num->real^3`;`SUC (SUC(SUC i)):num`]
439 THEN REWRITE_TAC[BBs_v39;LET_DEF;LET_END_DEF]
441 THEN THAYTHE_TAC 1[`SUC(SUC i)`;`SUC(SUC(SUC i))`]
445 THEN REWRITE_TAC[is_scs_v39;LET_DEF;LET_END_DEF]
447 THEN ONCE_REWRITE_TAC[DIST_SYM]
456 MRESA_TAC BB_RHO_NODE_IVS[`V`;`E`;`s`;`FF`;`v (SUC (SUC i))`;`v`;`SUC (SUC i)`;`k`]
457 THEN MRESA_TAC WL_IN_V[`SUC (SUC i)`;`v:num->real^3`]
458 THEN MRESAL_TAC Local_lemmas.IN_V_IMP_AZIM_LESS_PI[`E`;`V`;`FF`;`v (SUC (SUC i))`][GSYM ADD1]
459 THEN THAYTHE_TAC 0[`v (SUC i)`]
460 THEN MP_TAC(REAL_ARITH`azim (vec 0) (v (SUC (SUC i))) (v (SUC (SUC (SUC i)))) (v (SUC i)) <= pi
461 ==> azim (vec 0) (v (SUC (SUC i))) (v (SUC (SUC (SUC i)))) (v (SUC i)) = pi
462 \/ azim (vec 0) (v (SUC (SUC i))) (v (SUC (SUC (SUC i)))) ((v:num->real^3) (SUC i)) < pi`)
467 MRESA_TAC Imjxphr.EQ_W_L_IN_BBS[`s`;`k`;`v`;`SUC i`]
468 THEN SUBGOAL_THEN`dist ((v:num->real^3) (SUC (SUC (SUC i))),v (SUC (SUC i))) <
469 scs_b_v39 s (SUC (SUC (SUC i))) (SUC (SUC i))` ASSUME_TAC;
478 THEN REWRITE_TAC[is_scs_v39;LET_DEF;LET_END_DEF]
483 SUBGOAL_THEN`~collinear {vec 0, (v:num->real^3) (SUC (SUC (SUC i))), v ((SUC i))}`
487 MRESAS_TAC WL_IN_V[`SUC (SUC (SUC i))`;`v:num->real^3`][BB_VV_FUN_EQ;Ocbicby.MOD_EQ_MOD_SHIFT]
488 THEN MP_TAC(ARITH_RULE`3<k==> ~(k=0)/\ 1<k/\ 2<k/\ ~(3=1)`)
490 THEN MRESA_TAC Nkezbfc_local.PROPERTIES_GENERIC[`FF`;`E`;`v (SUC(SUC (SUC i)))`;`v (SUC i)`;`V`]
491 THEN THAYTHES_TAC 0[`v (SUC(SUC (SUC i)))`;`v (SUC i)`][SET_RULE`a IN {a,b}`;ADD1;BB_VV_FUN_EQ;ARITH_RULE`SUC (SUC (SUC x))=x+3`;Ocbicby.MOD_EQ_MOD_SHIFT;MOD_LT]
495 SUBGOAL_THEN`(v:num->real^3) (SUC (SUC i)) IN aff_gt {vec 0} {v (SUC (SUC (SUC i))), v (SUC i)}`
500 MP_TAC(ARITH_RULE`3<k==> ~(k=0)/\ 0<k/\ 1<k/\ 2<k /\ ~(3=2)/\ ~(2=1)`)
502 THEN MRESA_TAC Nkezbfc_local.PROPERTIES_GENERIC[`FF`;`E`;`v ((SUC (SUC i)))`;`v (SUC i)`;`V`]
503 THEN THAYTHES_TAC 0[`v (SUC (SUC i))`;`v (SUC i)`][SET_RULE`a IN {a,b}`;BB_VV_FUN_EQ;Ocbicby.MOD_EQ_MOD_SHIFT;ADD1;ARITH_RULE`(i+1)+1=i+2/\ (i+2)+1=i+3`;MOD_LT]
504 THEN MRESAL_TAC WL_IN_V[`SUC (SUC (SUC i))`;`v:num->real^3`][]
505 THEN MRESA_TAC Nkezbfc_local.PROPERTIES_GENERIC[`FF`;`E`;`v (SUC (SUC (SUC i)))`;`v (SUC (SUC i))`;`V`]
506 THEN THAYTHES_TAC 0[`(v:num->real^3) (SUC(SUC (SUC i)))`;`v (SUC (SUC i))`][SET_RULE`a IN {a,b}`;BB_VV_FUN_EQ;Ocbicby.MOD_EQ_MOD_SHIFT;ADD1;ARITH_RULE`(i+1)+1=i+2/\ (i+2)+1=i+3`;MOD_LT]
508 THEN REWRITE_TAC[GSYM ADD1;generic]
510 THEN MRESAL_TAC WL_IN_E[`SUC (SUC i)`;`v:num->real^3`][]
511 THEN THAYTHE_TAC 1[`v (SUC (SUC i))`;`v(SUC(SUC (SUC i)))`;`v (SUC i)`]
512 THEN MRESAS_TAC Polar_fan.GENERIC_LOCAL_FAN_STRAIGHT_AFF_GE[`v (SUC i)`;`v (SUC (SUC i))`;`v(SUC(SUC (SUC i)))`;][ARITH_RULE`SUC(SUC i)=i+2/\ SUC i= i+1/\ SUC(SUC(SUC i))=i+3`]
514 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
517 THEN MRESA_TAC th3[`vec 0:real^3`;`v (SUC(SUC (SUC i)))`;`v (SUC i)`]
518 THEN MRESAS_TAC Local_lemmas.FAN_IMP_NOT_IN_AFF_GE[`E`;`V`;`v (SUC (SUC i))`;`vec 0:real^3`;`v (SUC i)`][SET_RULE`{a,b} SUBSET A<=> a IN A/\ b IN A`;BB_VV_FUN_EQ;ADD1;ARITH_RULE`SUC(SUC i)=i+2/\ SUC i= i+1/\ SUC(SUC(SUC i))=i+3`;Ocbicby.MOD_EQ_MOD_SHIFT;MOD_LT]
519 THEN MRESAS_TAC Local_lemmas.FAN_IMP_NOT_IN_AFF_GE[`E`;`V`;`v (SUC (SUC i))`;`vec 0:real^3`;`v (SUC(SUC (SUC i)))`][SET_RULE`{a,b} SUBSET A<=> a IN A/\ b IN A`;BB_VV_FUN_EQ;ADD1;ARITH_RULE`SUC(SUC i)=i+2/\ SUC i= i+1/\ SUC(SUC(SUC i))=i+3`;Ocbicby.MOD_EQ_MOD_SHIFT;MOD_LT]
520 THEN MRESAL_TAC Wrgcvdr_cizmrrh.AFF_GE_TO_AFF_GT2_GE1[`v (SUC i)`;`vec 0:real^3`;`(v:num->real^3) (SUC(SUC (SUC i)))`][UNION;IN_ELIM_THM;ARITH_RULE`SUC(SUC i)=i+2/\ SUC i= i+1/\ SUC(SUC(SUC i))=i+3`]
521 THEN REPEAT STRIP_TAC
522 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
523 THEN ASM_REWRITE_TAC[]
527 MRESAS_TAC NUXCOEAv2[`s`;`k`;`v`;`SUC (SUC i)`;`SUC (SUC (SUC i))`][ARITH_RULE`SUC (SUC i) + k - 1=SUC (SUC i + k - 1)`]
528 THEN ONCE_REWRITE_TAC[DIST_SYM]
530 THEN MRESAS_TAC(GEN_ALL CHANGE_A_SCS_MOD)[`SUC(SUC i)`;`SUC(SUC i+k-1)`;`s:scs_v39`;`SUC(SUC i)`;`SUC(SUC i+k-1) MOD k`][MOD_REFL;ARITH_RULE`3<k==> ~(k=0)`;]
531 THEN ASM_SIMP_TAC[ARITH_RULE`3<k==> SUC (SUC i + k - 1) = 1*k+SUC i `;MOD_MULT_ADD]
532 THEN MRESAS_TAC(GEN_ALL CHANGE_A_SCS_MOD)[`SUC(SUC i)`;`SUC i MOD k`;`s:scs_v39`;`SUC(SUC i)`;`SUC i`][MOD_REFL;ARITH_RULE`3<k==> ~(k=0)`;]
534 THEN REWRITE_TAC[LET_DEF;LET_END_DEF;is_scs_v39]
541 ONCE_REWRITE_TAC[DIST_SYM]
542 THEN MP_TAC(ARITH_RULE`3<k==> SUC i+k-1=SUC(i+k-1)`)
544 THEN MRESAS_TAC CHANGE_W_IN_BBS_MOD_IS_SCS[`s`;`SUC (SUC i)+k-1`;`v:num->real^3`;`(SUC (SUC i)+k-1)MOD k`][MOD_REFL;ARITH_RULE`3<k==> ~(k=0)`;ARITH_RULE`3<k==> SUC (SUC i) + k - 1 = 1*k+SUC i `;]
545 THEN MRESAS_TAC CHANGE_W_IN_BBS_MOD_IS_SCS[`s`;`(SUC i) MOD k`;`v:num->real^3`;`(SUC i)`][MOD_REFL;ARITH_RULE`3<k==> ~(k=0)`;ARITH_RULE`3<k==> SUC (SUC i) + k - 1 = 1*k+SUC i `;]
550 MP_TAC Cuxvzoz.CJBDXXN
552 THEN THAYTHES_TAC 0[`s`;`FF`;`k`;`SUC(SUC i)`;`v`][scs_generic;MOD_MULT_ADD;ARITH_RULE`3<k==> SUC (SUC i) + k - 1 = 1*k+SUC i `;]
553 THEN MATCH_DICH_TAC 0
558 ASM_REWRITE_TAC[GSYM ADD1]
559 THEN ONCE_REWRITE_TAC[DIST_SYM]
560 THEN MRESA_TAC SCS_DIAG_2[`k`;`SUC i`]
561 THEN THAYTHE_TAC (52-12)[`SUC i`;`SUC(SUC(SUC i))`]
563 THEN REWRITE_TAC[cstab]
571 ASM_SIMP_TAC[interior_angle1;GSYM ivs_rho_node1;ARITH_RULE`3<k==> SUC (SUC i) + k - 1 = 1*k+SUC i `;MOD_MULT_ADD;GSYM ADD1]
579 ASM_SIMP_TAC[interior_angle1;GSYM ivs_rho_node1;ARITH_RULE`3<k==> SUC (SUC i) + k - 1 = 1*k+SUC i `;MOD_MULT_ADD;GSYM ADD1]
580 THEN MRESA_TAC Rrcwnsj.BB_F_SUC_PRE[`s`;`v`;`i`]
589 MRESAS_TAC(GEN_ALL CHANGE_A_SCS_MOD)[`SUC(SUC i)`;`(1*k+SUC i) `;`s:scs_v39`;`SUC(SUC i)`;`(1*k+SUC i)MOD k`][MOD_REFL;ARITH_RULE`3<k==> ~(k=0)`;MOD_MULT_ADD]
590 THEN MRESAS_TAC(GEN_ALL CHANGE_A_SCS_MOD)[`SUC(SUC i)`;`(SUC i) MOD k`;`s:scs_v39`;`SUC(SUC i)`;`SUC i`][MOD_REFL;ARITH_RULE`3<k==> ~(k=0)`;MOD_MULT_ADD]
592 THEN REWRITE_TAC[LET_DEF;LET_END_DEF;is_scs_v39]
603 MRESAS_TAC(GEN_ALL CHANGE_B_SCS_MOD)[`SUC(SUC i)`;`(1*k+SUC i) `;`s:scs_v39`;`SUC(SUC i)`;`(1*k+SUC i)MOD k`][MOD_REFL;ARITH_RULE`3<k==> ~(k=0)`;MOD_MULT_ADD]
604 THEN MRESAS_TAC(GEN_ALL CHANGE_B_SCS_MOD)[`SUC(SUC i)`;`(SUC i) MOD k`;`s:scs_v39`;`SUC(SUC i)`;`SUC i`][MOD_REFL;ARITH_RULE`3<k==> ~(k=0)`;MOD_MULT_ADD]
606 THEN REWRITE_TAC[LET_DEF;LET_END_DEF;is_scs_v39]
611 REWRITE_TAC[GSYM ADD1]
612 THEN ONCE_REWRITE_TAC[DIST_SYM];
614 MRESAL_TAC Axjrpnc.DIST_EDGE_IN_BB_LE_2[`s`;`v`;`SUC(SUC i)`][GSYM dist];
618 THEN ASM_REWRITE_TAC[is_scs_v39;LET_DEF;LET_END_DEF]
620 THEN THAYTHE_TAC (71-68)[`SUC(SUC i)`]
622 THEN ASM_REWRITE_TAC[BBs_v39;LET_DEF;LET_END_DEF]
624 THEN THAYTHE_TAC 0[`SUC(SUC i)`;`SUC(SUC(SUC i))`]
625 THEN POP_ASSUM MP_TAC
636 let TFITSKC_concl = `
637 main_nonlinear_terminal_v11
638 ==> (!s (v:num->real^3) i.
639 scs_a_v39 s (i+2) (i+3)< scs_b_v39 s (i+2) (i+3) /\
641 is_scs_v39 s /\ v IN MMs_v39 s /\ scs_generic v /\ scs_basic_v39 s /\
642 scs_a_v39 s (i+1) (i+2) = &2 /\ scs_b_v39 s (i+1) (i+2) <= &2 * h0 /\
643 dist(v i,v (i+1)) = &2 /\ &2< scs_b_v39 s i (i+1) /\
644 (!i j. scs_diag (scs_k_v39 s) i j ==> (scs_a_v39 s i j <= cstab /\ cstab < dist(v i, v j)/\ &4 * h0 < scs_b_v39 s i j)) ==>
645 dist(v (i+1),v(i+2)) = &2)`;;
649 let TFITSKC=prove( TFITSKC_concl,
651 THEN REPEAT STRIP_TAC
652 THEN MP_TAC TFITSKCv1
654 THEN POP_ASSUM MATCH_MP_TAC
655 THEN EXISTS_TAC`s:scs_v39`
656 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(SUC i)=i+2/\ SUC i+2=i+3`]
658 THEN REWRITE_TAC[scs_basic]
659 THEN REPEAT RESA_TAC);;
667 let check_completeness_claimA_concl =
668 Ineq.mk_tplate `\x. scs_arrow_v13 (set_of_list x)