1 module Jotswix = struct
6 let LET_THM = CONJ LET_DEF LET_END_DEF;;
7 let UNDISCH2 = repeat UNDISCH;;
12 let is_main = function
13 | Main_estimate -> true
16 exists (is_main) ind.tags in
18 filter has_main (!Ineq.ineqs) in
19 let id = map (fun t-> t.idv) main_ineq_data1 in
21 let id = nonlinear_ineq_terminal in *)
22 let main_ineq_data = map (fun t -> hd(Ineq.getexact t)) id in
23 let ineql = map (fun ind -> ind.ineq) main_ineq_data in
24 let sl = map (fun ind -> ind.idv) main_ineq_data in
25 let main_ineq_conj = end_itlist (curry mk_conj) ineql in
26 let th = new_definition (mk_eq (`main_work4:bool`,main_ineq_conj)) in
27 let th1 = UNDISCH (MATCH_MP (TAUT `(a <=> b) ==> (a ==> b)`) th) in
28 let co1 thm = if (is_conj (concl thm)) then CONJUNCT1 thm else thm in
29 let tryindex s sl = try index s sl with _ -> report s; failwith s in
31 let i = tryindex s sl in
32 let th2 = funpow i CONJUNCT2 th1 in
37 let taum_attains_inf = prove_by_refinement(
38 (* main_work4 ==> *) `main_nonlinear_terminal_v11 ==> (!y1 y2 y3 y4 y5 y6. &2 <= y1 /\ y1 <= &2 * h0 /\
39 &2 <= y2 /\ y2 <= &2 * h0 /\
40 &2 <= y3 /\ y3 <= &2 * h0 /\
41 &2 <= y4 /\ y4 <= &2 * h0 /\
42 &2 <= y5 /\ y5 <= &2 * h0 /\
43 &2 <= y6 /\ y6 <= &2 * h0
45 (?y4'. &2 <= y4' /\ y4' <= &2 * h0 /\ (!y4. &2 <= y4 /\ y4 <= &2 * h0 ==>
46 taum y1 y2 y3 y4' y5 y6 <= taum y1 y2 y3 y4 y5 y6)))`,
49 REPEAT WEAKER_STRIP_TAC;
50 INTRO_TAC REAL_CONTINUOUS_ATTAINS_INF [`\q. taum y1 y2 y3 q y5 y6`;`real_interval [&2, &2 * h0]`];
52 REWRITE_TAC[REAL_COMPACT_INTERVAL];
54 REWRITE_TAC[EXTENSION;NOT_IN_EMPTY;IN_REAL_INTERVAL;NOT_FORALL_THM;Sphere.h0];
55 TYPIFY `&2` EXISTS_TAC;
57 REWRITE_TAC[REAL_CONTINUOUS_ON_EQ_CONTINUOUS_WITHIN];
58 REWRITE_TAC[IN_REAL_INTERVAL];
59 REPEAT WEAKER_STRIP_TAC;
60 MATCH_MP_TAC REAL_CONTINUOUS_ATREAL_WITHINREAL;
61 MATCH_MP_TAC Bkossge.real_continuous_taum;
62 ASM_SIMP_TAC[arith `&2 <= y ==> &0 < y`];
64 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "4717061266") [`y1`;`y2`;`y3`;`x`;`y5`;`y6`];
65 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
66 REWRITE_TAC[arith `x > &0 <=> &0 < x`] THEN DISCH_THEN MATCH_MP_TAC;
67 BY(ASM_REWRITE_TAC[]);
68 BY(REPEAT CONJ_TAC THEN MATCH_MP_TAC Ysskqoy.TRI_UPS_X_STRICT_POS THEN ASM_TAC THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
69 REWRITE_TAC[IN_REAL_INTERVAL];
70 REPEAT WEAKER_STRIP_TAC;
71 TYPIFY `x` EXISTS_TAC;
76 let TAUM_EXTREMAL = prove_by_refinement(
77 (* main_work4 ==> *) ` main_nonlinear_terminal_v11 ==> (!y1 y2 y3 y4 y5 y6.
78 &2 <= y1 /\ y1 <= &2 * h0 /\
79 &2 <= y2 /\ y2 <= &2 * h0 /\
80 &2 <= y3 /\ y3 <= &2 * h0 /\
81 &2 <= y4 /\ y4 <= &2 * h0 /\
82 &2 <= y5 /\ y5 <= &2 * h0 /\
83 &2 <= y6 /\ y6 <= &2 * h0
85 (?y4'. (y4' = &2 * h0 \/ y4' = &2) /\
86 taum y1 y2 y3 y4' y5 y6 <= taum y1 y2 y3 y4 y5 y6)
90 REPEAT WEAKER_STRIP_TAC;
91 INTRO_TAC (UNDISCH2 taum_attains_inf) [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
93 REPEAT WEAKER_STRIP_TAC;
94 TYPIFY `y4'` EXISTS_TAC;
96 FIRST_X_ASSUM MATCH_MP_TAC;
97 BY(ASM_REWRITE_TAC[]);
99 TYPIFY `&2 < y4' /\ y4' < &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
100 BY(ASM_TAC THEN REAL_ARITH_TAC);
101 INTRO_TAC (UNDISCH Ocbicby.LEMMA_1834976363) [`y1`;`y2`;`y3`;`y4'`;`y5`;`y6`;`&2`;`&2 * h0`];
103 ASM_REWRITE_TAC[SUBSET;IN_REAL_INTERVAL;IN_ELIM_THM];
104 ASM_SIMP_TAC [arith `&2 <= y ==> &0 < y`];
105 INTRO_TAC Ocbicby.xrr_simple_lower_bound [`y2`;`y3`;`y4'`;`&2`];
106 INTRO_TAC Ocbicby.xrr_simple_lower_bound [`y1`;`y3`;`y5`;`&2`];
107 INTRO_TAC Ocbicby.xrr_simple_lower_bound [`y1`;`y2`;`y6`;`&2`];
108 ASM_REWRITE_TAC[arith `x <= x`];
109 REPEAT WEAKER_STRIP_TAC THEN ASM_REWRITE_TAC[];
111 INTRO_TAC Ocbicby.xrr_simple_upper_bound [`y2`;`y3`;`y4'`;`&2 * h0`];
113 BY(ASM_REWRITE_TAC[] THEN REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
114 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
116 BY(CONJ_TAC THEN MATCH_MP_TAC Bkossge.UPS_X_STD_POS THEN ASM_REWRITE_TAC[]);
117 REPEAT WEAKER_STRIP_TAC;
118 ASM_SIMP_TAC[arith `&2 < x ==> &0 < x`];
120 MATCH_MP_TAC Bkossge.UPS_X_STD_POS THEN ASM_REWRITE_TAC[];
121 BY(ASM_TAC THEN REAL_ARITH_TAC);
122 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "4717061266") [`y1`;`y2`;`y3`;`x`;`y5`;`y6`];
123 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
124 REWRITE_TAC[arith `x > &0 <=> &0 < x`] THEN DISCH_THEN MATCH_MP_TAC;
126 BY(REPLICATE_TAC 2 (POP_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
127 REWRITE_TAC[IN_REAL_INTERVAL];
128 REPEAT WEAKER_STRIP_TAC;
129 FIRST_X_ASSUM (C INTRO_TAC [`y4''`]);
131 BY(ASM_TAC THEN REAL_ARITH_TAC);
132 BY(ASM_REWRITE_TAC[arith `~(x <= y) <=> (y < x)`])
136 let TAUM_STD_POS = prove_by_refinement(
137 (* main_work4 ==> *) ` main_nonlinear_terminal_v11 ==> (!y1 y2 y3 y4 y5 y6.
138 &2 <= y1 /\ y1 <= &2 * h0 /\
139 &2 <= y2 /\ y2 <= &2 * h0 /\
140 &2 <= y3 /\ y3 <= &2 * h0 /\
141 &2 <= y4 /\ y4 <= &2 * h0 /\
142 &2 <= y5 /\ y5 <= &2 * h0 /\
143 &2 <= y6 /\ y6 <= &2 * h0
145 (&0 <= taum y1 y2 y3 y4 y5 y6))`,
148 REPEAT WEAKER_STRIP_TAC;
149 REWRITE_TAC[arith `x <= y <=> ~(y < x)`];
151 TYPIFY `&2 * h0 <= sqrt8 /\ #2.52 = &2 * h0 /\ &2 <= &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
152 BY(REWRITE_TAC[Sphere.h0] THEN MP_TAC Flyspeck_constants.bounds THEN REAL_ARITH_TAC);
154 INTRO_TAC (UNDISCH2 TAUM_EXTREMAL) [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
156 REPEAT WEAKER_STRIP_TAC;
157 FIRST_X_ASSUM (DISJ_CASES_TAC);
158 REPEAT (FIRST_X_ASSUM_ST `taum` MP_TAC) THEN ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
159 INTRO_TAC ( Terminal.get_main_nonlinear "5541487347") [`y2`;`y3`;`y1`;`y5`;`y6`;`y4'`];
160 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
161 DISCH_THEN MP_TAC THEN ANTS_TAC;
162 BY(ASM_REWRITE_TAC[arith `x <= x`]);
163 TYPIFY `taum y2 y3 y1 y5 y6 y4' = taum y1 y2 y3 y4' y5 y6` (C SUBGOAL_THEN SUBST1_TAC);
164 BY(MESON_TAC[Terminal.taum_sym]);
166 BY(REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
167 TYPIFY `taum y1 y2 y3 (&2) y5 y6 < &0` (C SUBGOAL_THEN ASSUME_TAC);
168 BY(FIRST_X_ASSUM_ST `taum` MP_TAC THEN ASM_REWRITE_TAC[] THEN ASM_TAC THEN REAL_ARITH_TAC);
169 FIRST_X_ASSUM MP_TAC;
171 REPEAT (FIRST_X_ASSUM_ST `taum` kill);
174 INTRO_TAC (UNDISCH2 TAUM_EXTREMAL) [`y2`;`y3`;`y1`;`y5`;`y6`;`(&2)`];
175 ASM_REWRITE_TAC[arith `x <= x`];
176 REPEAT WEAKER_STRIP_TAC;
177 TYPIFY `taum y1 y2 y3 (&2) y5 y6 = taum y2 y3 y1 y5 y6 (&2) /\ taum y3 y1 y2 y6 (&2) y4' = taum y2 y3 y1 y4' y6 (&2)` (C SUBGOAL_THEN ASSUME_TAC);
178 BY(MESON_TAC[Terminal.taum_sym]);
179 FIRST_X_ASSUM (DISJ_CASES_TAC);
180 REPEAT (FIRST_X_ASSUM_ST `taum` MP_TAC) THEN ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
181 INTRO_TAC ( Terminal.get_main_nonlinear "5541487347") [`y3`;`y1`;`y2`;`y6`;`&2`;`y4'`];
182 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
183 DISCH_THEN MP_TAC THEN ANTS_TAC;
184 BY(ASM_REWRITE_TAC[arith `x <= x`]);
186 BY(REPLICATE_TAC 4 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
187 TYPIFY `taum y1 y2 y3 (&2) (&2) y6 < &0` (C SUBGOAL_THEN ASSUME_TAC);
188 TYPIFY `taum y1 y2 y3 (&2) (&2) y6 = taum y2 y3 y1 (&2) y6 (&2)` (C SUBGOAL_THEN SUBST1_TAC);
189 BY(MESON_TAC[Terminal.taum_sym]);
190 BY(REPEAT (FIRST_X_ASSUM_ST `taum` MP_TAC) THEN ASM_REWRITE_TAC[] THEN ASM_TAC THEN REAL_ARITH_TAC);
191 FIRST_X_ASSUM MP_TAC;
193 REPEAT (FIRST_X_ASSUM_ST `taum` kill);
196 INTRO_TAC (UNDISCH2 TAUM_EXTREMAL) [`y3`;`y1`;`y2`;`y6`;`(&2)`;`(&2)`];
197 ASM_REWRITE_TAC[arith `x <= x`];
198 REPEAT WEAKER_STRIP_TAC;
200 TYPIFY_GOAL_THEN `!z1 z2 z3. taum y3 y1 y2 z3 z1 z2 = taum y1 y2 y3 z1 z2 z3` (unlist REWRITE_TAC);
201 BY(MESON_TAC[Terminal.taum_sym]);
203 FIRST_X_ASSUM (DISJ_CASES_TAC);
204 REPEAT (FIRST_X_ASSUM_ST `taum` MP_TAC) THEN ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
205 INTRO_TAC ( Terminal.get_main_nonlinear "5541487347") [`y1`;`y2`;`y3`;`&2`;`&2`;`&2 * h0`];
206 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
207 DISCH_THEN MP_TAC THEN ANTS_TAC;
208 BY(ASM_REWRITE_TAC[arith `x <= x`]);
209 BY(REPLICATE_TAC 4 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
210 TYPIFY `taum y1 y2 y3 (&2) (&2) (&2) < &0` (C SUBGOAL_THEN ASSUME_TAC);
211 BY(REPEAT (FIRST_X_ASSUM_ST `taum` MP_TAC) THEN ASM_REWRITE_TAC[] THEN ASM_TAC THEN REAL_ARITH_TAC);
212 INTRO_TAC ( Terminal.get_main_nonlinear "OMKYNLT 3336871894") [`y1`;`y2`;`y3`;`&2`;`&2`;`&2`];
213 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
214 ASM_REWRITE_TAC[arith `#2.0 = &2`];
215 BY(POP_ASSUM MP_TAC THEN REAL_ARITH_TAC)
219 let LFLACKU = prove_by_refinement(
220 (* main_work4 ==> *) ` main_nonlinear_terminal_v11 ==>
221 scs_arrow_v39 {scs_3I1} {}`,
224 REPEAT WEAKER_STRIP_TAC;
225 REPEAT (GMATCH_SIMP_TAC Ocbicby.pos_imp_scs_arrow_empty);
226 REWRITE_TAC[Appendix.scs_3I1;Appendix.mk_unadorned_v39];
227 MATCH_MP_TAC (REWRITE_RULE[LET_DEF;LET_END_DEF] Terminal.taustar_taum_dfun);
228 REWRITE_TAC[Terminal.FUNLIST_EXPLICIT];
229 REWRITE_TAC[Appendix.is_ear_v39;Appendix.scs_v39_explicit;EMPTY_GSPEC;NOT_INSERT_EMPTY];
230 REWRITE_TAC[Appendix.d_tame];
231 REWRITE_TAC[Appendix.cs_adj;Terminal.FUNLIST_EXPLICIT];
233 REWRITE_TAC[arith `x <= x`];
234 TYPIFY_GOAL_THEN `&2 * h0 <= #3.62` (unlist REWRITE_TAC);
235 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
236 REPEAT WEAKER_STRIP_TAC;
237 REWRITE_TAC[arith `&0 + #0.1 * -- &1 * (&0 + &0 + &0 + &0) = &0`];
238 MATCH_MP_TAC (UNDISCH2 TAUM_STD_POS);
239 BY(ASM_REWRITE_TAC[])
244 let s_init_list_alt = prove_by_refinement(
245 `s_init_list_v39 = [scs_6I1;scs_5I1;scs_4I1;scs_3I1;scs_5I2;scs_4I2;scs_5I3;scs_4I3]`,
248 REWRITE_TAC[Appendix.s_init_list_v39];
250 ASM_REWRITE_TAC[CONS_11;Appendix.scs_6I1;Appendix.scs_5I1;Appendix.scs_4I1;Appendix.scs_3T1;Appendix.scs_5I2;Appendix.scs_5I3;Appendix.scs_4I3;Appendix.scs_3I1;Appendix.scs_4I2];
251 TYPIFY `(!a1 a2 a3. (a_pro 5 a1 a2 a3 = (funlist_v39 [(0,1),a1; (0,2),a3; (0,3),a3; (1,3),a3; (1,4),a3; (2,4), a3] a2 5))) /\ (!a1 a2 a3. a_pro 4 a1 a2 a3 = (funlist_v39 [(0,1),a1; (0,2),a3; (1,3),a3] a2 4))` ENOUGH_TO_SHOW_TAC;
252 BY(DISCH_THEN (unlist REWRITE_TAC));
254 REPEAT WEAKER_STRIP_TAC;
255 REWRITE_TAC[FUN_EQ_THM];
256 MATCH_MP_TAC Terminal.periodic2_mod_reduce;
257 TYPIFY `5` EXISTS_TAC;
258 REWRITE_TAC[arith `~(5 =0)`];
260 REWRITE_TAC[Appendix.periodic2];
262 ASM_REWRITE_TAC[Oxl_2012.MOD_ADD_CANCEL;arith `SUC (j+5) = (SUC j) + 5`];
263 BY(MESON_TAC[Terminal.periodic2_funlist;Appendix.periodic2]);
264 REWRITE_TAC[arith `x < 5 <=> x = 0 \/ x = 1 \/ x = 2 \/ x = 3 \/ x = 4`];
265 REWRITE_TAC[TAUT ` ((a \/ b) /\ c) <=> ((a /\ c) \/ (b /\ c))`;TAUT `(a /\ (b \/ c)) <=> ((a /\ b) \/ (a /\ c))`];
267 REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
268 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[] THEN NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT;Hexagons.PSORT_5_EXPLICIT] THEN NUM_REDUCE_TAC);
269 REPEAT WEAKER_STRIP_TAC;
270 REWRITE_TAC[FUN_EQ_THM];
271 MATCH_MP_TAC Terminal.periodic2_mod_reduce;
272 TYPIFY `4` EXISTS_TAC;
273 REWRITE_TAC[arith `~(4 =0)`];
275 REWRITE_TAC[Appendix.periodic2];
277 ASM_REWRITE_TAC[Oxl_2012.MOD_ADD_CANCEL;arith `SUC (j+4) = (SUC j) + 4`];
278 BY(MESON_TAC[Terminal.periodic2_funlist;Appendix.periodic2]);
279 REWRITE_TAC[arith `x < 4 <=> x = 0 \/ x = 1 \/ x = 2 \/ x = 3`];
280 REWRITE_TAC[TAUT ` ((a \/ b) /\ c) <=> ((a /\ c) \/ (b /\ c))`;TAUT `(a /\ (b \/ c)) <=> ((a /\ b) \/ (a /\ c))`];
282 REWRITE_TAC[Geomdetail.PAIR_EQ_EXPAND];
283 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[] THEN NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[Terminal.FUNLIST_EXPLICIT] THEN NUM_REDUCE_TAC)
287 (* moved to JEJTVGB.hl
288 let JEJTVGB_case_breakdown = prove_by_refinement(
289 (* main_work4 ==> *) ` main_nonlinear_terminal_v11 ==> (
290 scs_arrow_v39 { scs_6I1 } { scs_6T1, scs_5M1, scs_4M2, scs_3T1 } /\ // OEHDBEN
291 scs_arrow_v39 { scs_5I1 } { scs_stab_diag_v39 scs_5I1 0 2 , scs_5M2 } /\ // OTMTOTJ1
292 scs_arrow_v39 { scs_5I2 } { scs_stab_diag_v39 scs_5I2 0 2 , scs_5M2 } /\ //
294 scs_arrow_v39 { scs_5I3 } { scs_stab_diag_v39 scs_5M1 0 2 ,
295 scs_stab_diag_v39 scs_5M1 0 3, scs_stab_diag_v39 scs_5M1 2 4, scs_5M2 } /\ // OTMTOTJ3
297 scs_arrow_v39 { scs_5M1 } { scs_stab_diag_v39 scs_5M1 0 2 ,
298 scs_stab_diag_v39 scs_5M1 0 3, scs_stab_diag_v39 scs_5M1 2 4, scs_5M2 } /\ // OTMTOTJ4
300 scs_arrow_v39 { scs_5M2 } { scs_3T1,scs_3T4,scs_4M6',scs_4M7,scs_4M8,
301 scs_5T1, scs_stab_diag_v39 scs_5I2 0 2 ,
302 scs_stab_diag_v39 scs_5M1 0 2 , scs_stab_diag_v39 scs_5M1 0 3, scs_stab_diag_v39 scs_5M1 2 4 } /\ // HIJQAHA
304 scs_arrow_v39 { scs_stab_diag_v39 scs_5I1 0 2 }
305 {scs_4M2, scs_3M1 } /\ // CNICGSF1 ..
307 scs_arrow_v39 { scs_stab_diag_v39 scs_5I2 0 2 }
308 {scs_4M3', scs_3T1 } /\ // CNICGSF2
310 scs_arrow_v39 { scs_stab_diag_v39 scs_5M1 0 2 }
311 {scs_4M2, scs_3T4 } /\ // CNICGSF3
313 scs_arrow_v39 { scs_stab_diag_v39 scs_5M1 0 3 }
314 {scs_4M4', scs_3M1 } /\ // CNICGSF4
316 scs_arrow_v39 { scs_stab_diag_v39 scs_5M1 2 4 }
317 {scs_4M5', scs_3M1 } /\ // CNICGSF5 ..
319 scs_arrow_v39 { scs_4I1 } {scs_4I2, scs_stab_diag_v39 scs_4I1 0 2 } /\ // FYSSVEV
322 scs_arrow_v39 { scs_4I2 } { scs_4T1, scs_4T2 } /\ // ARDBZYE
325 scs_arrow_v39 { scs_stab_diag_v39 scs_4I1 0 2 } { scs_3M1 } /\ // AUEAHEH
327 // scs_arrow_v39 { scs_stab_diag_v39 scs_4I3 0 2 } { scs_4T4 } /\ // ZNLLLDL (internal)
329 scs_arrow_v39 { scs_4I3 } { scs_4T4, scs_4M6' } /\ // VQFYMZY ..
331 // scs_arrow_v39 { scs_4M1 } { scs_4M2, scs_4M6' } /\ // unused.
333 scs_arrow_v39 { scs_4M2 } { scs_3M1, scs_3T4, scs_4M6' } /\ // BNAWVNH
335 scs_arrow_v39 { scs_4M3' } { scs_3T1, scs_3T6', scs_4M6' } /\ // RAWZDIB
337 scs_arrow_v39 { scs_4M4' } { scs_3M1, scs_3T4, scs_3T3, scs_4M7 } /\ // MFKLVDK
339 scs_arrow_v39 { scs_4M5' } { scs_3T4, scs_4M8 } /\ // RYPDIXT
341 scs_arrow_v39 {scs_4M6'} {scs_4T3,scs_4T5} /\ // NWDGKXH
343 scs_arrow_v39 {scs_4M7} {scs_3M1,scs_3T3,scs_3T4} /\ // YOBIMPP
345 scs_arrow_v39 {scs_4M8} {scs_4M6',scs_3T7,scs_3T4} /\ // MIQMCSN
347 scs_arrow_v39 {scs_3M1} {scs_3T1,scs_3T5} // BKOSSGE
354 REPEAT WEAKER_STRIP_TAC;
355 INTRO_TAC (UNDISCH Ocbicby.OCBICBY) [];
356 REPEAT WEAKER_STRIP_TAC;
357 TYPIFY `scs_arrow_v39 {scs_3M1} {}` (C SUBGOAL_THEN ASSUME_TAC);
358 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
359 TYPIFY `{scs_3T1, scs_3T5}` EXISTS_TAC;
360 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
361 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
362 TYPIFY `scs_arrow_v39 {scs_4M6'} {}` (C SUBGOAL_THEN ASSUME_TAC);
363 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
364 TYPIFY `{scs_4T3, scs_4T5}` EXISTS_TAC;
365 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
366 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
367 TYPIFY `scs_arrow_v39 {scs_4M7} {}` (C SUBGOAL_THEN ASSUME_TAC);
368 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
369 TYPIFY `{scs_3M1, scs_3T3, scs_3T4}` EXISTS_TAC;
370 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
371 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
372 TYPIFY `scs_arrow_v39 {scs_4M8} {}` (C SUBGOAL_THEN ASSUME_TAC);
373 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
374 TYPIFY `{scs_4M6', scs_3T7, scs_3T4}` EXISTS_TAC;
375 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
376 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
377 TYPIFY `scs_arrow_v39 {scs_4M5'} {}` (C SUBGOAL_THEN ASSUME_TAC);
378 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
379 TYPIFY `{scs_3T4, scs_4M8}` EXISTS_TAC;
380 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
381 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
382 TYPIFY `scs_arrow_v39 {scs_4M4'} {}` (C SUBGOAL_THEN ASSUME_TAC);
383 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
384 TYPIFY `{ scs_3M1, scs_3T4, scs_3T3, scs_4M7 }` EXISTS_TAC; (* revised *)
385 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
386 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
387 TYPIFY `scs_arrow_v39 {scs_4M3'} {}` (C SUBGOAL_THEN ASSUME_TAC);
388 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
389 TYPIFY `{scs_3T1, scs_3T6', scs_4M6'}` EXISTS_TAC;
390 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
391 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
392 TYPIFY `scs_arrow_v39 {scs_4M2} {}` (C SUBGOAL_THEN ASSUME_TAC);
393 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
394 TYPIFY `{ scs_3M1, scs_3T4, scs_4M6' }` EXISTS_TAC;
395 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
396 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
397 TYPIFY `scs_arrow_v39 {scs_4I3} {}` (C SUBGOAL_THEN ASSUME_TAC);
398 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
399 TYPIFY `{scs_4T4, scs_4M6'}` EXISTS_TAC;
400 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
401 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
402 TYPIFY `scs_arrow_v39 {scs_stab_diag_v39 scs_4I1 0 2} {}` (C SUBGOAL_THEN ASSUME_TAC);
403 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
404 TYPIFY `{scs_3M1}` EXISTS_TAC;
405 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
406 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
407 TYPIFY `scs_arrow_v39 {scs_4I2} {}` (C SUBGOAL_THEN ASSUME_TAC);
408 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
409 TYPIFY `{scs_4T1, scs_4T2}` EXISTS_TAC;
410 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
411 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
412 TYPIFY `scs_arrow_v39 {scs_4I1} {}` (C SUBGOAL_THEN ASSUME_TAC);
413 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
414 TYPIFY `{scs_4I2, scs_stab_diag_v39 scs_4I1 0 2}` EXISTS_TAC;
415 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
416 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
417 TYPIFY `scs_arrow_v39 {scs_stab_diag_v39 scs_5M1 2 4} {}` (C SUBGOAL_THEN ASSUME_TAC);
418 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
419 TYPIFY `{scs_4M5', scs_3M1}` EXISTS_TAC;
420 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
421 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
422 TYPIFY `scs_arrow_v39 {scs_stab_diag_v39 scs_5M1 0 3} {}` (C SUBGOAL_THEN ASSUME_TAC);
423 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
424 TYPIFY `{scs_4M4', scs_3M1}` EXISTS_TAC;
425 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
426 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
427 TYPIFY `scs_arrow_v39 {scs_stab_diag_v39 scs_5M1 0 2} {}` (C SUBGOAL_THEN ASSUME_TAC);
428 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
429 TYPIFY ` {scs_4M2, scs_3T4}` EXISTS_TAC;
430 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
431 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
432 TYPIFY `scs_arrow_v39 {scs_stab_diag_v39 scs_5I2 0 2} {}` (C SUBGOAL_THEN ASSUME_TAC);
433 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
434 TYPIFY `{scs_4M3', scs_3T1}` EXISTS_TAC;
435 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
436 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
437 TYPIFY `scs_arrow_v39 {scs_stab_diag_v39 scs_5I1 0 2} {}` (C SUBGOAL_THEN ASSUME_TAC);
438 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
439 TYPIFY ` {scs_4M2, scs_3M1}` EXISTS_TAC;
440 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
441 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
442 TYPIFY `scs_arrow_v39 {scs_5M2} {}` (C SUBGOAL_THEN ASSUME_TAC);
443 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
444 TYPIFY ` {scs_3T1, scs_3T4, scs_4M6', scs_4M7, scs_4M8, scs_5T1, scs_stab_diag_v39 scs_5I2 0 2, scs_stab_diag_v39 scs_5M1 0 2, scs_stab_diag_v39 scs_5M1 0 3, scs_stab_diag_v39 scs_5M1 2 4}` EXISTS_TAC;
445 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
446 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
447 TYPIFY `scs_arrow_v39 {scs_5M1} {}` (C SUBGOAL_THEN ASSUME_TAC);
448 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
449 TYPIFY `{scs_stab_diag_v39 scs_5M1 0 2, scs_stab_diag_v39 scs_5M1 0 3, scs_stab_diag_v39 scs_5M1 2 4, scs_5M2}` EXISTS_TAC;
450 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
451 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
452 TYPIFY `scs_arrow_v39 {scs_5I3} {}` (C SUBGOAL_THEN ASSUME_TAC);
453 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
454 TYPIFY `{scs_stab_diag_v39 scs_5M1 0 2, scs_stab_diag_v39 scs_5M1 0 3, scs_stab_diag_v39 scs_5M1 2 4, scs_5M2}` EXISTS_TAC;
455 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
456 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
457 TYPIFY `scs_arrow_v39 {scs_5I2} {}` (C SUBGOAL_THEN ASSUME_TAC);
458 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
459 TYPIFY `{scs_stab_diag_v39 scs_5I2 0 2, scs_5M2}` EXISTS_TAC;
460 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
461 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
462 TYPIFY `scs_arrow_v39 {scs_5I1} {}` (C SUBGOAL_THEN ASSUME_TAC);
463 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
464 TYPIFY ` {scs_stab_diag_v39 scs_5I1 0 2, scs_5M2}` EXISTS_TAC;
465 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
466 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
467 TYPIFY `scs_arrow_v39 {scs_6I1} {}` (C SUBGOAL_THEN ASSUME_TAC);
468 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
469 TYPIFY `{scs_6T1, scs_5M1, scs_4M2, scs_3T1}` EXISTS_TAC;
470 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
471 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
472 COMMENT "final kill";
473 MATCH_MP_TAC Ayqjtmd.EAPGLE;
474 REWRITE_TAC[GSYM Ocbicby.scs_arrow_sing_empty];
475 REWRITE_TAC[s_init_list_alt;MEM];
476 REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[];
477 BY(REWRITE_TAC[UNDISCH2 LFLACKU])
482 let MOD_4_CASES = prove_by_refinement(
483 `!j p. j < 4 ==> j = (p+0) MOD 4 \/ j = (p+1) MOD 4 \/ j = (p+2) MOD 4 \/ j = (p+3) MOD 4`,
486 REPEAT WEAKER_STRIP_TAC;
487 TYPIFY `p MOD 4 < 4` (C SUBGOAL_THEN ASSUME_TAC);
488 BY(MESON_TAC[DIVISION;arith `~(4 = 0)`]);
489 TYPED_ABBREV_TAC `i = p MOD 4`;
490 TYPIFY `(j = 0 \/ j = 1 \/ j = 2 \/ j = 3) /\ (i = 0 \/ i = 1 \/ i = 2 \/ i = 3)` (C SUBGOAL_THEN ASSUME_TAC);
491 BY(ASM_TAC THEN ARITH_TAC);
492 TYPIFY_GOAL_THEN `!k. (p + k) MOD 4 = (i + k) MOD 4` (unlist REWRITE_TAC);
494 ONCE_REWRITE_TAC[arith `(i:num) + j = j + i`];
495 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
497 GMATCH_SIMP_TAC MOD_MOD_REFL;
499 POP_ASSUM MP_TAC THEN REWRITE_TAC[TAUT ` ((a \/ b) /\ c) <=> ((a /\ c) \/ (b /\ c))`;TAUT `(a /\ (b \/ c)) <=> ((a /\ b) \/ (a /\ c))`];
500 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[] THEN NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[Terminal.MOD_4_EXPLICIT])
504 let ab4_assumption_reduction = prove_by_refinement(
509 (!i j. scs_diag 4 i j ==> scs_a_v39 s i j < dist(v i,v j) /\ &4 * h0 < scs_b_v39 s i j) /\
510 deformation f (IMAGE v (:num)) (--e,e) /\
512 (!w t. ~(w = v p) ==> (f w t = w)) /\
513 (!t. abs t < e ==> dist (v (p + 3),f (v p) t) = dist (v (p + 3),v p)) /\
514 scs_a_v39 s p (p + 1) < dist (v p,v (p + 1)) /\ dist (v p,v (p + 1)) < scs_b_v39 s p (p + 1)
516 (!i j. ?e1. &0 < e1 /\ (scs_a_v39 s i j = dist(v i,v j) ==>
517 (!t. abs t < e1 ==> scs_a_v39 s i j <= dist(f (v i) t,f (v j) t)))) /\
520 (dist (v i,v j) = scs_b_v39 s i j
522 ==> dist (f (v i) t,f (v j) t) <= scs_b_v39 s i j)))
526 REPEAT WEAKER_STRIP_TAC;
527 ASSUME_TAC (arith `~(4 = 0)`);
528 TYPIFY `!i j.scs_a_v39 s (i MOD 4) (j MOD 4) = scs_a_v39 s i j /\ scs_b_v39 s (i MOD 4) (j MOD 4) = scs_b_v39 s i j ` (C SUBGOAL_THEN ASSUME_TAC);
529 FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC;
530 ASM_REWRITE_TAC[Appendix.is_scs_v39];
531 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[Cuxvzoz.periodic2_MOD]);
532 TYPIFY `!i. i MOD 4 < 4` (C SUBGOAL_THEN ASSUME_TAC);
533 BY(REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[DIVISION]);
534 TYPIFY `periodic v 4` (C SUBGOAL_THEN ASSUME_TAC);
535 BY(FIRST_X_ASSUM_ST `BBs_v39` MP_TAC THEN ASM_REWRITE_TAC[Appendix.BBs_v39;LET_THM] THEN MESON_TAC[]);
536 TYPIFY `!i. v (i MOD 4) = v i` (C SUBGOAL_THEN ASSUME_TAC);
538 MATCH_MP_TAC (GSYM Oxl_def.periodic_mod);
539 BY(ASM_REWRITE_TAC[]);
540 INTRO_TAC Cuxvzoz.BBs_inj [`s`;`v`;`4`];
543 TYPIFY `!j. j < 4 ==> (j MOD 4 = j)` (C SUBGOAL_THEN ASSUME_TAC);
544 BY(REWRITE_TAC[MOD_LT]);
547 MATCH_MP_TAC Terminal.periodic2_mod_reduce;
548 TYPIFY `4` EXISTS_TAC;
551 MATCH_MP_TAC Cuxvzoz.MOD_periodic2;
552 BY(REPLICATE_TAC 7 (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[] THEN MESON_TAC[]);
553 TYPIFY `!j. j < 4 ==> (?e1. &0 < e1 /\ (scs_a_v39 s p j = dist (v p,v j) ==> (!t. abs t < e1 ==> scs_a_v39 s p j <= dist (f (v p) t,f (v j) t))))` ENOUGH_TO_SHOW_TAC;
554 REPEAT WEAKER_STRIP_TAC;
555 TYPIFY `i = ( p MOD 4)` ASM_CASES_TAC;
556 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`j`]);
558 REPEAT WEAKER_STRIP_TAC;
559 TYPIFY `e1` EXISTS_TAC;
561 TYPIFY_GOAL_THEN `scs_a_v39 s (p MOD 4) j = scs_a_v39 s p j ` (unlist REWRITE_TAC);
562 BY(REPLICATE_TAC 12 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
563 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[]);
564 TYPIFY `j = p MOD 4` ASM_CASES_TAC;
565 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`i`]);
566 ASM_REWRITE_TAC[DIST_SYM];
567 REPEAT WEAKER_STRIP_TAC;
568 TYPIFY `e1` EXISTS_TAC;
570 TYPIFY_GOAL_THEN `scs_a_v39 s i (p MOD 4) = scs_a_v39 s i p ` (unlist REWRITE_TAC);
571 BY(REPLICATE_TAC 12 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
572 BY(FIRST_X_ASSUM MP_TAC THEN FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39] THEN MESON_TAC[]);
573 TYPIFY `&1` EXISTS_TAC;
574 REWRITE_TAC[arith `&0 < &1`];
575 REPEAT WEAKER_STRIP_TAC;
576 TYPIFY `!w t. ~(w = v p) ==> f w t = w` ( (C FIRST_ASSUM_ST GMATCH_SIMP_TAC));
577 TYPIFY `!w t. ~(w = v p) ==> f w t = w` ( (C FIRST_X_ASSUM_ST GMATCH_SIMP_TAC));
578 FIRST_X_ASSUM_ST `BBs_v39` MP_TAC THEN REWRITE_TAC[Appendix.BBs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
580 BY(FIRST_X_ASSUM (C INTRO_TAC [`i`;`j`]) THEN MESON_TAC[]);
582 BY(REPLICATE_TAC 20 (POP_ASSUM MP_TAC) THEN MESON_TAC[]);
583 REPEAT WEAKER_STRIP_TAC;
584 INTRO_TAC MOD_4_CASES [`j`;`p`];
585 ASM_REWRITE_TAC[arith `p + 0 = p`] THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[DIST_REFL];
586 BY(TYPIFY `&1` EXISTS_TAC THEN MESON_TAC[arith `&0 <= &0 /\ &0 < &1`]);
587 TYPIFY `&1` EXISTS_TAC THEN REWRITE_TAC[arith `&0 < &1`];
588 BY(ASM_MESON_TAC[arith `x < y ==> ~(x = y)`]);
589 FIRST_X_ASSUM_ST `scs_diag` (C INTRO_TAC [`p`;`p+2`]);
590 TYPIFY `scs_diag 4 p (p+2)` ENOUGH_TO_SHOW_TAC;
591 DISCH_THEN (unlist REWRITE_TAC);
592 REPEAT WEAKER_STRIP_TAC;
593 TYPIFY `&1` EXISTS_TAC THEN REWRITE_TAC[arith `&0 < &1`];
594 BY(ASM_MESON_TAC[arith `x < y ==> ~(x = y)`]);
595 REWRITE_TAC[arith `p+2 = SUC(SUC p)`];
596 MATCH_MP_TAC Tfitskc.SCS_DIAG_2;
598 TYPIFY `e` EXISTS_TAC;
601 REPEAT WEAKER_STRIP_TAC;
603 REPEAT (FIRST_X_ASSUM_ST `abs` (C INTRO_TAC [`t`])) THEN ASM_REWRITE_TAC[DIST_SYM];
604 DISCH_THEN (SUBST1_TAC o GSYM);
605 MATCH_MP_TAC (arith `(x = y) ==> x <= y`);
606 REPEAT (AP_TERM_TAC ORELSE AP_THM_TAC);
607 ONCE_REWRITE_TAC[EQ_SYM_EQ];
608 FIRST_X_ASSUM MATCH_MP_TAC;
609 FIRST_X_ASSUM_ST `v (i MOD 4) = v i` ((unlist ONCE_REWRITE_TAC) o GSYM);
610 TYPIFY_GOAL_THEN `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> ~(v i = v j)` MATCH_MP_TAC;
613 TYPIFY `~((p + 3) MOD 4 = (p+0) MOD 4)` ENOUGH_TO_SHOW_TAC;
614 BY(REWRITE_TAC[arith `p+0=p`]);
615 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
616 BY(NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[Terminal.MOD_4_EXPLICIT]);
617 BY(ASM_REWRITE_TAC[]);
618 COMMENT "now the b end";
619 MATCH_MP_TAC Terminal.periodic2_mod_reduce;
620 TYPIFY `4` EXISTS_TAC;
623 MATCH_MP_TAC Cuxvzoz.MOD_periodic2;
624 BY(REPLICATE_TAC 7 (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[] THEN MESON_TAC[]);
625 TYPIFY `!j. j < 4 ==> (?e1. &0 < e1 /\ (dist (v p,v j) = scs_b_v39 s p j ==> (!t. abs t < e1 ==> dist (f (v p) t,f (v j) t) <= scs_b_v39 s p j)))` ENOUGH_TO_SHOW_TAC;
626 REPEAT WEAKER_STRIP_TAC;
627 TYPIFY `i = ( p MOD 4)` ASM_CASES_TAC;
628 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`j`]);
630 REPEAT WEAKER_STRIP_TAC;
631 TYPIFY `e1` EXISTS_TAC;
633 TYPIFY_GOAL_THEN `scs_b_v39 s (p MOD 4) j = scs_b_v39 s p j ` (unlist REWRITE_TAC);
634 BY(REPLICATE_TAC 12 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
635 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[]);
636 TYPIFY `j = p MOD 4` ASM_CASES_TAC;
637 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`i`]);
638 ASM_REWRITE_TAC[DIST_SYM];
639 REPEAT WEAKER_STRIP_TAC;
640 TYPIFY `e1` EXISTS_TAC;
642 TYPIFY_GOAL_THEN `scs_b_v39 s i (p MOD 4) = scs_b_v39 s i p ` (unlist REWRITE_TAC);
643 BY(REPLICATE_TAC 12 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
644 BY(FIRST_X_ASSUM MP_TAC THEN FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39] THEN MESON_TAC[]);
645 TYPIFY `&1` EXISTS_TAC;
646 REWRITE_TAC[arith `&0 < &1`];
647 REPEAT WEAKER_STRIP_TAC;
648 TYPIFY `!w t. ~(w = v p) ==> f w t = w` ( (C FIRST_ASSUM_ST GMATCH_SIMP_TAC));
649 TYPIFY `!w t. ~(w = v p) ==> f w t = w` ( (C FIRST_X_ASSUM_ST GMATCH_SIMP_TAC));
650 FIRST_X_ASSUM_ST `BBs_v39` MP_TAC THEN REWRITE_TAC[Appendix.BBs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
652 BY(FIRST_X_ASSUM (C INTRO_TAC [`i`;`j`]) THEN MESON_TAC[]);
654 BY(REPLICATE_TAC 20 (POP_ASSUM MP_TAC) THEN MESON_TAC[]);
655 REPEAT WEAKER_STRIP_TAC;
656 INTRO_TAC MOD_4_CASES [`j`;`p`];
657 ASM_REWRITE_TAC[arith `p + 0 = p`] THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[DIST_REFL];
658 BY(TYPIFY `&1` EXISTS_TAC THEN MESON_TAC[arith `&0 <= &0 /\ &0 < &1`]);
659 TYPIFY `&1` EXISTS_TAC THEN REWRITE_TAC[arith `&0 < &1`];
660 BY(ASM_MESON_TAC[arith `x < y ==> ~(x = y)`]);
661 FIRST_X_ASSUM_ST `scs_diag` (C INTRO_TAC [`p`;`p+2`]);
662 TYPIFY_GOAL_THEN `scs_diag 4 p (p+2)` (unlist REWRITE_TAC);
663 REWRITE_TAC[arith `p+2 = SUC(SUC p)`];
664 MATCH_MP_TAC Tfitskc.SCS_DIAG_2;
666 TYPIFY `dist(v p,v (p+2)) <= &4 * h0` ENOUGH_TO_SHOW_TAC;
667 BY(ASM_MESON_TAC[arith `x <= y /\ y < z ==> ~(x = z)`]);
668 INTRO_TAC DIST_TRIANGLE [`v p`;`(vec 0):real^3`;`v (p+2)`];
670 TYPIFY `!i. norm (v i) <= &2 * h0` ENOUGH_TO_SHOW_TAC;
671 BY(DISCH_TAC THEN FIRST_ASSUM (C INTRO_TAC [`p`]) THEN FIRST_X_ASSUM (C INTRO_TAC [`p+2`]) THEN REAL_ARITH_TAC);
672 FIRST_X_ASSUM_ST `BBs_v39` MP_TAC THEN REWRITE_TAC[Appendix.BBs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
673 BY(FIRST_X_ASSUM_ST `ball_annulus` MP_TAC THEN REWRITE_TAC[Terminal.IMAGE_SUBSET_IN;IN_UNIV] THEN MESON_TAC[Fnjlbxs.in_ball_annulus]);
674 TYPIFY `e` EXISTS_TAC;
677 REPEAT WEAKER_STRIP_TAC;
679 REPEAT (FIRST_X_ASSUM_ST `abs` (C INTRO_TAC [`t`])) THEN ASM_REWRITE_TAC[DIST_SYM];
680 DISCH_THEN (SUBST1_TAC o GSYM);
681 MATCH_MP_TAC (arith `(x = y) ==> x <= y`);
682 REPEAT (AP_TERM_TAC ORELSE AP_THM_TAC);
683 FIRST_X_ASSUM MATCH_MP_TAC;
684 FIRST_X_ASSUM_ST `v (i MOD 4) = v i` ((unlist ONCE_REWRITE_TAC) o GSYM);
685 TYPIFY_GOAL_THEN `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> ~(v i = v j)` MATCH_MP_TAC;
688 TYPIFY `~((p + 3) MOD 4 = (p+0) MOD 4)` ENOUGH_TO_SHOW_TAC;
689 BY(REWRITE_TAC[arith `p+0=p`]);
690 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
691 BY(NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[Terminal.MOD_4_EXPLICIT]);
692 BY(ASM_REWRITE_TAC[])
696 let PERIODIC_INJ_MOD = prove_by_refinement(
697 `!v k i j. ~(k= 0) /\ periodic (v:num->A) k /\
698 (!i j. i < k /\ j < k /\ v i = v j ==> i = j)
700 ((v i = v j) <=> (i MOD k = j MOD k))`,
703 REPEAT WEAKER_STRIP_TAC;
704 TYPIFY `!i. v (i MOD k) = v i` (C SUBGOAL_THEN ASSUME_TAC);
706 MATCH_MP_TAC (GSYM Oxl_def.periodic_mod);
707 BY(ASM_REWRITE_TAC[]);
708 TYPIFY ` (!i j. i < (k:num) /\ j < k /\ ~(i = j) ==> ~(v i = v j))` (C SUBGOAL_THEN ASSUME_TAC);
710 MATCH_MP_TAC (TAUT `((~b ==> ~a ) /\ (b ==> a)) ==> (a = b)`);
713 FIRST_X_ASSUM_ST `v (i MOD k) = v i` ((unlist ONCE_REWRITE_TAC) o GSYM);
714 FIRST_X_ASSUM MATCH_MP_TAC;
716 BY(ASM_MESON_TAC[DIVISION]);
721 let ab4_assumption_reduction2 = prove_by_refinement(
726 (!i j. scs_diag 4 i j ==> scs_a_v39 s i j < dist(v i,v j) /\ &4 * h0 < scs_b_v39 s i j) /\
727 deformation f (IMAGE v (:num)) (--e,e) /\
729 (!w t. ~(w = v p) ==> (f w t = w)) /\
730 (!t. abs t < e ==> dist (v (p + 3),f (v p) t) = dist (v (p + 3),v p)) /\
731 scs_a_v39 s p (p + 1) < dist (v p,v (p + 1)) /\
732 (?e3. &0 < e3 /\ (!t. abs t < e3 ==> dist (f (v p) t,v (p + 1)) <= scs_b_v39 s p (p + 1)))
734 (!i j. ?e1. &0 < e1 /\ (scs_a_v39 s i j = dist(v i,v j) ==>
735 (!t. abs t < e1 ==> scs_a_v39 s i j <= dist(f (v i) t,f (v j) t)))) /\
738 (dist (v i,v j) = scs_b_v39 s i j
740 ==> dist (f (v i) t,f (v j) t) <= scs_b_v39 s i j)))
744 REPEAT WEAKER_STRIP_TAC;
745 FIRST_X_ASSUM MP_TAC THEN BURY_MP_TAC;
746 ASSUME_TAC (arith `~(4 = 0)`);
747 TYPIFY `!i j.scs_a_v39 s (i MOD 4) (j MOD 4) = scs_a_v39 s i j /\ scs_b_v39 s (i MOD 4) (j MOD 4) = scs_b_v39 s i j ` (C SUBGOAL_THEN ASSUME_TAC);
748 FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC;
749 ASM_REWRITE_TAC[Appendix.is_scs_v39];
750 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[Cuxvzoz.periodic2_MOD]);
751 TYPIFY `!i. i MOD 4 < 4` (C SUBGOAL_THEN ASSUME_TAC);
752 BY(REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[DIVISION]);
753 TYPIFY `periodic v 4` (C SUBGOAL_THEN ASSUME_TAC);
754 BY(FIRST_X_ASSUM_ST `BBs_v39` MP_TAC THEN ASM_REWRITE_TAC[Appendix.BBs_v39;LET_THM] THEN MESON_TAC[]);
755 TYPIFY `!i. v (i MOD 4) = v i` (C SUBGOAL_THEN ASSUME_TAC);
757 MATCH_MP_TAC (GSYM Oxl_def.periodic_mod);
758 BY(ASM_REWRITE_TAC[]);
759 INTRO_TAC Cuxvzoz.BBs_inj [`s`;`v`;`4`];
762 TYPIFY `!j. j < 4 ==> (j MOD 4 = j)` (C SUBGOAL_THEN ASSUME_TAC);
763 BY(REWRITE_TAC[MOD_LT]);
766 MATCH_MP_TAC Terminal.periodic2_mod_reduce;
767 TYPIFY `4` EXISTS_TAC;
770 MATCH_MP_TAC Cuxvzoz.MOD_periodic2;
771 BY(REPLICATE_TAC 7 (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[] THEN MESON_TAC[]);
772 TYPIFY `!j. j < 4 ==> (?e1. &0 < e1 /\ (scs_a_v39 s p j = dist (v p,v j) ==> (!t. abs t < e1 ==> scs_a_v39 s p j <= dist (f (v p) t,f (v j) t))))` ENOUGH_TO_SHOW_TAC;
773 REPEAT WEAKER_STRIP_TAC;
774 TYPIFY `i = ( p MOD 4)` ASM_CASES_TAC;
775 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`j`]);
777 REPEAT WEAKER_STRIP_TAC;
778 TYPIFY `e1` EXISTS_TAC;
780 TYPIFY_GOAL_THEN `scs_a_v39 s (p MOD 4) j = scs_a_v39 s p j ` (unlist REWRITE_TAC);
781 BY(REPLICATE_TAC 12 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
782 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[]);
783 TYPIFY `j = p MOD 4` ASM_CASES_TAC;
784 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`i`]);
785 ASM_REWRITE_TAC[DIST_SYM];
786 REPEAT WEAKER_STRIP_TAC;
787 TYPIFY `e1` EXISTS_TAC;
789 TYPIFY_GOAL_THEN `scs_a_v39 s i (p MOD 4) = scs_a_v39 s i p ` (unlist REWRITE_TAC);
790 BY(REPLICATE_TAC 12 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
791 BY(FIRST_X_ASSUM MP_TAC THEN FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39] THEN MESON_TAC[]);
792 TYPIFY `&1` EXISTS_TAC;
793 REWRITE_TAC[arith `&0 < &1`];
794 REPEAT WEAKER_STRIP_TAC;
795 TYPIFY `!w t. ~(w = v p) ==> f w t = w` ( (C FIRST_ASSUM_ST GMATCH_SIMP_TAC));
796 TYPIFY `!w t. ~(w = v p) ==> f w t = w` ( (C FIRST_X_ASSUM_ST GMATCH_SIMP_TAC));
797 FIRST_X_ASSUM_ST `BBs_v39` MP_TAC THEN REWRITE_TAC[Appendix.BBs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
799 BY(FIRST_X_ASSUM (C INTRO_TAC [`i`;`j`]) THEN MESON_TAC[]);
801 BY(REPLICATE_TAC 20 (POP_ASSUM MP_TAC) THEN MESON_TAC[]);
802 REPEAT WEAKER_STRIP_TAC;
803 INTRO_TAC MOD_4_CASES [`j`;`p`];
804 ASM_REWRITE_TAC[arith `p + 0 = p`] THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[DIST_REFL];
805 BY(TYPIFY `&1` EXISTS_TAC THEN MESON_TAC[arith `&0 <= &0 /\ &0 < &1`]);
806 TYPIFY `&1` EXISTS_TAC THEN REWRITE_TAC[arith `&0 < &1`];
807 BY(ASM_MESON_TAC[arith `x < y ==> ~(x = y)`]);
808 FIRST_X_ASSUM_ST `scs_diag` (C INTRO_TAC [`p`;`p+2`]);
809 TYPIFY `scs_diag 4 p (p+2)` ENOUGH_TO_SHOW_TAC;
810 DISCH_THEN (unlist REWRITE_TAC);
811 REPEAT WEAKER_STRIP_TAC;
812 TYPIFY `&1` EXISTS_TAC THEN REWRITE_TAC[arith `&0 < &1`];
813 BY(ASM_MESON_TAC[arith `x < y ==> ~(x = y)`]);
814 REWRITE_TAC[arith `p+2 = SUC(SUC p)`];
815 MATCH_MP_TAC Tfitskc.SCS_DIAG_2;
817 TYPIFY `e` EXISTS_TAC;
820 REPEAT WEAKER_STRIP_TAC;
822 REPEAT (FIRST_X_ASSUM_ST `abs` (C INTRO_TAC [`t`])) THEN ASM_REWRITE_TAC[DIST_SYM];
824 DISCH_THEN (SUBST1_TAC o GSYM);
825 MATCH_MP_TAC (arith `(x = y) ==> x <= y`);
826 REPEAT (AP_TERM_TAC ORELSE AP_THM_TAC);
827 ONCE_REWRITE_TAC[EQ_SYM_EQ];
828 FIRST_X_ASSUM MATCH_MP_TAC;
829 FIRST_X_ASSUM_ST `v (i MOD 4) = v i` ((unlist ONCE_REWRITE_TAC) o GSYM);
830 TYPIFY_GOAL_THEN `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> ~(v i = v j)` MATCH_MP_TAC;
833 TYPIFY `~((p + 3) MOD 4 = (p+0) MOD 4)` ENOUGH_TO_SHOW_TAC;
834 BY(REWRITE_TAC[arith `p+0=p`]);
835 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
836 BY(NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[Terminal.MOD_4_EXPLICIT]);
837 BY(ASM_REWRITE_TAC[]);
838 COMMENT "now the b end";
839 MATCH_MP_TAC Terminal.periodic2_mod_reduce;
840 TYPIFY `4` EXISTS_TAC;
843 MATCH_MP_TAC Cuxvzoz.MOD_periodic2;
844 BY(REPLICATE_TAC 7 (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[] THEN MESON_TAC[]);
845 TYPIFY `!j. j < 4 ==> (?e1. &0 < e1 /\ (dist (v p,v j) = scs_b_v39 s p j ==> (!t. abs t < e1 ==> dist (f (v p) t,f (v j) t) <= scs_b_v39 s p j)))` ENOUGH_TO_SHOW_TAC;
846 REPEAT WEAKER_STRIP_TAC;
847 TYPIFY `i = ( p MOD 4)` ASM_CASES_TAC;
848 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`j`]);
850 REPEAT WEAKER_STRIP_TAC;
851 TYPIFY `e1` EXISTS_TAC;
853 TYPIFY_GOAL_THEN `scs_b_v39 s (p MOD 4) j = scs_b_v39 s p j ` (unlist REWRITE_TAC);
854 BY(REPLICATE_TAC 12 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
855 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[]);
856 TYPIFY `j = p MOD 4` ASM_CASES_TAC;
857 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`i`]);
858 ASM_REWRITE_TAC[DIST_SYM];
859 REPEAT WEAKER_STRIP_TAC;
860 TYPIFY `e1` EXISTS_TAC;
862 TYPIFY_GOAL_THEN `scs_b_v39 s i (p MOD 4) = scs_b_v39 s i p ` (unlist REWRITE_TAC);
863 BY(REPLICATE_TAC 12 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
864 BY(FIRST_X_ASSUM MP_TAC THEN FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39] THEN MESON_TAC[]);
865 TYPIFY `&1` EXISTS_TAC;
866 REWRITE_TAC[arith `&0 < &1`];
867 REPEAT WEAKER_STRIP_TAC;
868 TYPIFY `!w t. ~(w = v p) ==> f w t = w` ( (C FIRST_ASSUM_ST GMATCH_SIMP_TAC));
869 TYPIFY `!w t. ~(w = v p) ==> f w t = w` ( (C FIRST_X_ASSUM_ST GMATCH_SIMP_TAC));
870 FIRST_X_ASSUM_ST `BBs_v39` MP_TAC THEN REWRITE_TAC[Appendix.BBs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
872 BY(FIRST_X_ASSUM (C INTRO_TAC [`i`;`j`]) THEN MESON_TAC[]);
874 BY(REPLICATE_TAC 20 (POP_ASSUM MP_TAC) THEN MESON_TAC[]);
875 REPEAT WEAKER_STRIP_TAC;
876 INTRO_TAC MOD_4_CASES [`j`;`p`];
877 ASM_REWRITE_TAC[arith `p + 0 = p`] THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[DIST_REFL];
878 BY(TYPIFY `&1` EXISTS_TAC THEN MESON_TAC[arith `&0 <= &0 /\ &0 < &1`]);
879 TYPIFY `e3` EXISTS_TAC THEN REWRITE_TAC[arith `&0 < &1`];
880 ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
881 TYPIFY_GOAL_THEN `scs_b_v39 s p ((p + 1) MOD 4) = scs_b_v39 s p ((p + 1))` (unlist REWRITE_TAC);
883 TYPIFY `f (v(p+1)) t = v (p+1)` (C SUBGOAL_THEN SUBST1_TAC);
884 FIRST_X_ASSUM MATCH_MP_TAC;
885 GMATCH_SIMP_TAC PERIODIC_INJ_MOD;
886 TYPIFY `4` EXISTS_TAC THEN ASM_REWRITE_TAC[];
887 GEN_REWRITE_TAC (RAND_CONV o RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV) [arith `p = p + 0`];
888 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
889 BY(NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[Terminal.MOD_4_EXPLICIT]);
890 FIRST_X_ASSUM MATCH_MP_TAC;
891 BY(ASM_REWRITE_TAC[]);
892 FIRST_X_ASSUM_ST `scs_diag` (C INTRO_TAC [`p`;`p+2`]);
893 TYPIFY_GOAL_THEN `scs_diag 4 p (p+2)` (unlist REWRITE_TAC);
894 REWRITE_TAC[arith `p+2 = SUC(SUC p)`];
895 MATCH_MP_TAC Tfitskc.SCS_DIAG_2;
897 TYPIFY `dist(v p,v (p+2)) <= &4 * h0` ENOUGH_TO_SHOW_TAC;
898 BY(ASM_MESON_TAC[arith `x <= y /\ y < z ==> ~(x = z)`]);
899 INTRO_TAC DIST_TRIANGLE [`v p`;`(vec 0):real^3`;`v (p+2)`];
901 TYPIFY `!i. norm (v i) <= &2 * h0` ENOUGH_TO_SHOW_TAC;
902 BY(DISCH_TAC THEN FIRST_ASSUM (C INTRO_TAC [`p`]) THEN FIRST_X_ASSUM (C INTRO_TAC [`p+2`]) THEN REAL_ARITH_TAC);
903 FIRST_X_ASSUM_ST `BBs_v39` MP_TAC THEN REWRITE_TAC[Appendix.BBs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
904 BY(FIRST_X_ASSUM_ST `ball_annulus` MP_TAC THEN REWRITE_TAC[Terminal.IMAGE_SUBSET_IN;IN_UNIV] THEN MESON_TAC[Fnjlbxs.in_ball_annulus]);
905 TYPIFY `e` EXISTS_TAC;
908 REPEAT WEAKER_STRIP_TAC;
910 REPEAT (FIRST_X_ASSUM_ST `abs` (C INTRO_TAC [`t`])) THEN ASM_REWRITE_TAC[DIST_SYM];
912 DISCH_THEN (SUBST1_TAC o GSYM);
913 MATCH_MP_TAC (arith `(x = y) ==> x <= y`);
914 REPEAT (AP_TERM_TAC ORELSE AP_THM_TAC);
915 FIRST_X_ASSUM MATCH_MP_TAC;
916 FIRST_X_ASSUM_ST `v (i MOD 4) = v i` ((unlist ONCE_REWRITE_TAC) o GSYM);
917 TYPIFY_GOAL_THEN `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> ~(v i = v j)` MATCH_MP_TAC;
920 TYPIFY `~((p + 3) MOD 4 = (p+0) MOD 4)` ENOUGH_TO_SHOW_TAC;
921 BY(REWRITE_TAC[arith `p+0=p`]);
922 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
923 BY(NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[Terminal.MOD_4_EXPLICIT]);
924 BY(ASM_REWRITE_TAC[])
928 let ab4_assumption_reduction_sym = prove_by_refinement(
933 (!i j. scs_diag 4 i j ==> scs_a_v39 s i j < dist(v i,v j) /\ &4 * h0 < scs_b_v39 s i j) /\
934 deformation f (IMAGE v (:num)) (--e,e) /\
936 (!w t. ~(w = v (p+1)) ==> (f w t = w)) /\
937 (!t. abs t < e ==> dist (f (v (p + 1)) t ,(v (p+2))) = dist (v (p + 1),v (p+2))) /\
938 scs_a_v39 s p (p + 1) < dist (v p,v (p + 1)) /\ dist (v p,v (p + 1)) < scs_b_v39 s p (p + 1)
940 (!i j. ?e1. &0 < e1 /\ (scs_a_v39 s i j = dist(v i,v j) ==>
941 (!t. abs t < e1 ==> scs_a_v39 s i j <= dist(f (v i) t,f (v j) t)))) /\
944 (dist (v i,v j) = scs_b_v39 s i j
946 ==> dist (f (v i) t,f (v j) t) <= scs_b_v39 s i j)))
950 REPEAT WEAKER_STRIP_TAC;
951 ASSUME_TAC (arith `~(4 = 0)`);
952 TYPIFY `!i j.scs_a_v39 s (i MOD 4) (j MOD 4) = scs_a_v39 s i j /\ scs_b_v39 s (i MOD 4) (j MOD 4) = scs_b_v39 s i j ` (C SUBGOAL_THEN ASSUME_TAC);
953 FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC;
954 ASM_REWRITE_TAC[Appendix.is_scs_v39];
955 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[Cuxvzoz.periodic2_MOD]);
956 TYPIFY `!i. i MOD 4 < 4` (C SUBGOAL_THEN ASSUME_TAC);
957 BY(REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[DIVISION]);
958 TYPIFY `periodic v 4` (C SUBGOAL_THEN ASSUME_TAC);
959 BY(FIRST_X_ASSUM_ST `BBs_v39` MP_TAC THEN ASM_REWRITE_TAC[Appendix.BBs_v39;LET_THM] THEN MESON_TAC[]);
960 TYPIFY `!i. v (i MOD 4) = v i` (C SUBGOAL_THEN ASSUME_TAC);
962 MATCH_MP_TAC (GSYM Oxl_def.periodic_mod);
963 BY(ASM_REWRITE_TAC[]);
964 INTRO_TAC Cuxvzoz.BBs_inj [`s`;`v`;`4`];
967 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> ~(v i = v j)` (C SUBGOAL_THEN ASSUME_TAC);
969 TYPIFY `!j. j < 4 ==> (j MOD 4 = j)` (C SUBGOAL_THEN ASSUME_TAC);
970 BY(REWRITE_TAC[MOD_LT]);
971 TYPIFY `!t. f (v (p+0)) t = v(p+0) /\ f (v (p+2)) t = v(p+2) /\ f (v (p+3)) t = v(p+3)` (C SUBGOAL_THEN MP_TAC);
972 GEN_TAC THEN (FIRST_X_ASSUM_ST `~(w = v (p+1)) ==> a` (REPEAT o GMATCH_SIMP_TAC));
973 INTRO_TAC PERIODIC_INJ_MOD [`v`;`4`];
974 ASM_REWRITE_TAC[arith `~(4=0)`];
975 DISCH_TAC THEN ASM_REWRITE_TAC[];
976 REPEAT ( GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT);
977 BY(NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[Terminal.MOD_4_EXPLICIT]);
981 MATCH_MP_TAC Terminal.periodic2_mod_reduce;
982 TYPIFY `4` EXISTS_TAC;
985 MATCH_MP_TAC Cuxvzoz.MOD_periodic2;
986 BY(ASM_REWRITE_TAC[]);
987 TYPIFY `!j. j < 4 ==> (?e1. &0 < e1 /\ (scs_a_v39 s (p+1) j = dist (v (p+1),v j) ==> (!t. abs t < e1 ==> scs_a_v39 s (p+1) j <= dist (f (v (p+1)) t,f (v j) t))))` ENOUGH_TO_SHOW_TAC;
988 REPEAT WEAKER_STRIP_TAC;
989 TYPIFY `i = ( (p+1) MOD 4)` ASM_CASES_TAC;
990 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`j`]);
992 REPEAT WEAKER_STRIP_TAC;
993 TYPIFY `e1` EXISTS_TAC;
995 TYPIFY_GOAL_THEN `scs_a_v39 s ((p+1) MOD 4) j = scs_a_v39 s (p+1) j ` (unlist REWRITE_TAC);
996 BY(REPLICATE_TAC 14 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
997 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[]);
998 TYPIFY `j = (p+1) MOD 4` ASM_CASES_TAC;
999 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`i`]);
1000 ASM_REWRITE_TAC[DIST_SYM];
1001 REPEAT WEAKER_STRIP_TAC;
1002 TYPIFY `e1` EXISTS_TAC;
1004 TYPIFY_GOAL_THEN `scs_a_v39 s i ((p+1) MOD 4) = scs_a_v39 s i (p+1) ` (unlist REWRITE_TAC);
1005 BY(REPLICATE_TAC 14 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
1006 BY(FIRST_X_ASSUM MP_TAC THEN FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39] THEN MESON_TAC[]);
1007 TYPIFY `&1` EXISTS_TAC;
1008 REWRITE_TAC[arith `&0 < &1`];
1009 REPEAT WEAKER_STRIP_TAC;
1010 TYPIFY `!w t. ~(w = v (p+1)) ==> f w t = w` ( (C FIRST_ASSUM_ST GMATCH_SIMP_TAC));
1011 TYPIFY `!w t. ~(w = v (p+1)) ==> f w t = w` ( (C FIRST_X_ASSUM_ST GMATCH_SIMP_TAC));
1012 FIRST_X_ASSUM_ST `BBs_v39` MP_TAC THEN REWRITE_TAC[Appendix.BBs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
1014 BY(FIRST_X_ASSUM (C INTRO_TAC [`i`;`j`]) THEN MESON_TAC[]);
1016 BY(REPLICATE_TAC 20 (POP_ASSUM MP_TAC) THEN MESON_TAC[]);
1017 REPEAT WEAKER_STRIP_TAC;
1018 INTRO_TAC MOD_4_CASES [`j`;`(p+1)`];
1019 ASM_REWRITE_TAC[arith `p + 0 = p /\ (p+1)+j = p+(1+j)`] THEN NUM_REDUCE_TAC;
1020 TYPIFY `(p+4) MOD 4 = p MOD 4` (C SUBGOAL_THEN SUBST1_TAC);
1021 BY(REWRITE_TAC[Oxl_2012.MOD_ADD_CANCEL]);
1022 REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[DIST_REFL];
1023 BY(TYPIFY `&1` EXISTS_TAC THEN MESON_TAC[arith `&0 <= &0 /\ &0 < &1`]);
1024 TYPIFY `e` EXISTS_TAC THEN REWRITE_TAC[];
1026 DISCH_THEN SUBST1_TAC;
1027 REPEAT WEAKER_STRIP_TAC;
1028 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`t`]);
1029 BY(FIRST_X_ASSUM MP_TAC THEN REAL_ARITH_TAC);
1030 FIRST_X_ASSUM_ST `scs_diag` (C INTRO_TAC [`p+1`;`p+3`]);
1031 TYPIFY `scs_diag 4 (p+1) (p+3)` ENOUGH_TO_SHOW_TAC;
1032 DISCH_THEN (unlist REWRITE_TAC);
1033 REPEAT WEAKER_STRIP_TAC;
1034 TYPIFY `&1` EXISTS_TAC THEN REWRITE_TAC[arith `&0 < &1`];
1035 BY(ASM_MESON_TAC[arith `x < y ==> ~(x = y)`]);
1036 REWRITE_TAC[arith `p+3 = SUC(SUC (p+1))`];
1037 MATCH_MP_TAC Tfitskc.SCS_DIAG_2;
1039 TYPIFY `&1` EXISTS_TAC;
1040 TYPIFY `scs_a_v39 s (p+1) (p MOD 4) = scs_a_v39 s p (p+1)` ENOUGH_TO_SHOW_TAC;
1041 DISCH_THEN (unlist REWRITE_TAC);
1042 REWRITE_TAC[arith `&0 < &1`];
1043 BY(FIRST_X_ASSUM_ST `scs_a_v39 s p (p+1) < d` MP_TAC THEN REWRITE_TAC[DIST_SYM] THEN REAL_ARITH_TAC);
1044 BY(FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39] THEN ASM_MESON_TAC[]);
1045 COMMENT "now the b end";
1046 MATCH_MP_TAC Terminal.periodic2_mod_reduce;
1047 TYPIFY `4` EXISTS_TAC;
1050 MATCH_MP_TAC Cuxvzoz.MOD_periodic2;
1051 BY(ASM_REWRITE_TAC[]);
1052 TYPIFY `!j. j < 4 ==> (?e1. &0 < e1 /\ (dist (v (p+1),v j) = scs_b_v39 s (p+1) j ==> (!t. abs t < e1 ==> dist (f (v (p+1)) t,f (v j) t) <= scs_b_v39 s (p+1) j)))` ENOUGH_TO_SHOW_TAC;
1053 (REPEAT WEAKER_STRIP_TAC);
1054 TYPIFY `i = ( (p+1) MOD 4)` ASM_CASES_TAC;
1055 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`j`]);
1057 REPEAT WEAKER_STRIP_TAC;
1058 TYPIFY `e1` EXISTS_TAC;
1060 TYPIFY_GOAL_THEN `scs_b_v39 s ((p+1) MOD 4) j = scs_b_v39 s (p+1) j ` (unlist REWRITE_TAC);
1061 BY(REPLICATE_TAC 14 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
1062 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[]);
1063 TYPIFY `j = (p+1) MOD 4` ASM_CASES_TAC;
1064 FIRST_X_ASSUM_ST `dist` (C INTRO_TAC [`i`]);
1065 ASM_REWRITE_TAC[DIST_SYM];
1066 REPEAT WEAKER_STRIP_TAC;
1067 TYPIFY `e1` EXISTS_TAC;
1069 TYPIFY_GOAL_THEN `scs_b_v39 s i ((p+1) MOD 4) = scs_b_v39 s i (p+1) ` (unlist REWRITE_TAC);
1070 BY(REPLICATE_TAC 14 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
1071 BY(FIRST_X_ASSUM MP_TAC THEN FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39] THEN MESON_TAC[]);
1072 TYPIFY `&1` EXISTS_TAC;
1073 REWRITE_TAC[arith `&0 < &1`];
1074 REPEAT WEAKER_STRIP_TAC;
1075 TYPIFY `!w t. ~(w = v (p+1)) ==> f w t = w` ( (C FIRST_ASSUM_ST GMATCH_SIMP_TAC));
1076 TYPIFY `!w t. ~(w = v (p+1)) ==> f w t = w` ( (C FIRST_X_ASSUM_ST GMATCH_SIMP_TAC));
1077 FIRST_X_ASSUM_ST `BBs_v39` MP_TAC THEN REWRITE_TAC[Appendix.BBs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
1079 BY(FIRST_X_ASSUM (C INTRO_TAC [`i`;`j`]) THEN MESON_TAC[]);
1081 BY(REPLICATE_TAC 20 (POP_ASSUM MP_TAC) THEN MESON_TAC[]);
1082 REPEAT WEAKER_STRIP_TAC;
1083 INTRO_TAC MOD_4_CASES [`j`;`p+1`];
1084 ASM_REWRITE_TAC[arith `p + 0 = p /\ (p+1)+j = p+(1+j)`] THEN NUM_REDUCE_TAC;
1085 TYPIFY `(p+4) MOD 4 = p MOD 4` (C SUBGOAL_THEN SUBST1_TAC);
1086 BY(REWRITE_TAC[Oxl_2012.MOD_ADD_CANCEL]);
1087 ASM_REWRITE_TAC[arith `p + 0 = p`] THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[DIST_REFL];
1088 BY(TYPIFY `&1` EXISTS_TAC THEN MESON_TAC[arith `&0 <= &0 /\ &0 < &1`]);
1089 TYPIFY `e` EXISTS_TAC THEN ASM_REWRITE_TAC[];
1090 BY(ASM_MESON_TAC[arith `x = y ==> x <= y`]);
1091 FIRST_X_ASSUM_ST `scs_diag` (C INTRO_TAC [`p+1`;`p+3`]);
1092 TYPIFY_GOAL_THEN `scs_diag 4 (p+1) (p+3)` (unlist REWRITE_TAC);
1093 REWRITE_TAC[arith `p+3 = SUC(SUC (p+1))`];
1094 MATCH_MP_TAC Tfitskc.SCS_DIAG_2;
1096 TYPIFY `dist(v (p+1),v (p+3)) <= &4 * h0` ENOUGH_TO_SHOW_TAC;
1097 BY(ASM_MESON_TAC[arith `x <= y /\ y < z ==> ~(x = z)`]);
1098 INTRO_TAC DIST_TRIANGLE [`v (p+1)`;`(vec 0):real^3`;`v (p+3)`];
1099 REWRITE_TAC[DIST_0];
1100 TYPIFY `!i. norm (v i) <= &2 * h0` ENOUGH_TO_SHOW_TAC;
1101 BY(DISCH_TAC THEN FIRST_ASSUM (C INTRO_TAC [`p+1`]) THEN FIRST_X_ASSUM (C INTRO_TAC [`p+3`]) THEN REAL_ARITH_TAC);
1102 FIRST_X_ASSUM_ST `BBs_v39` MP_TAC THEN REWRITE_TAC[Appendix.BBs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
1103 BY(FIRST_X_ASSUM_ST `ball_annulus` MP_TAC THEN REWRITE_TAC[Terminal.IMAGE_SUBSET_IN;IN_UNIV] THEN MESON_TAC[Fnjlbxs.in_ball_annulus]);
1104 TYPIFY `&1` EXISTS_TAC THEN REWRITE_TAC[arith `&0 < &1`];
1105 FIRST_X_ASSUM_ST `dist (v p,v (p + 1)) < scs_b_v39 s p (p + 1)` MP_TAC THEN REWRITE_TAC[DIST_SYM];
1106 TYPIFY `scs_b_v39 s (p + 1) (p MOD 4) = scs_b_v39 s p (p+1)` ENOUGH_TO_SHOW_TAC;
1108 BY(FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39] THEN ASM_MESON_TAC[])
1112 let deform_azim_sum = prove_by_refinement(
1113 `!v1 v2 v3 v4 f e. deformation f {v1,v2,v3,v4} (--e,e) /\
1114 &0 < azim (vec 0) v1 v2 v4 /\ azim (vec 0) v1 v2 v4 < pi /\
1115 ~collinear {vec 0,v1,v2} /\ ~collinear {vec 0,v1,v3} /\ ~collinear {vec 0,v1,v4} /\
1116 azim (vec 0) v1 v2 v3 + azim (vec 0) v1 v3 v4 = azim (vec 0) v1 v2 v4 /\
1117 (((!t. (azim (vec 0) (f v1 t) (f v2 t) (f v3 t) = azim (vec 0) v1 v2 v3)) /\
1118 (&0 < azim (vec 0) v1 v3 v4 /\ azim (vec 0) v1 v3 v4 < pi)) \/
1119 ((!t. (azim (vec 0) (f v1 t) (f v3 t) (f v4 t) = azim (vec 0) v1 v3 v4)) /\
1120 (&0 < azim (vec 0) v1 v2 v3 /\ azim (vec 0) v1 v2 v3 < pi))) ==>
1123 ~collinear {vec 0,(f v1 t),(f v2 t)} /\
1124 ~collinear {vec 0,(f v1 t),(f v3 t)} /\
1125 ~collinear {vec 0,(f v1 t),(f v4 t)} /\
1126 azim (vec 0) (f v1 t) (f v2 t) (f v3 t) +
1127 azim (vec 0) (f v1 t) (f v3 t) (f v4 t) = azim (vec 0) (f v1 t) (f v2 t) (f v4 t)))
1131 REPEAT WEAKER_STRIP_TAC;
1132 INTRO_TAC (GEN_ALL Local_lemmas1.CONTINUOUS_PRESERVE_COLLINEAR) [`&0`;`(vec 0):real^3`;`f v1`];
1134 FIRST_ASSUM (C INTRO_TAC [`f v2`]);
1135 FIRST_ASSUM (C INTRO_TAC [`f v3`]);
1136 FIRST_X_ASSUM (C INTRO_TAC [`f v4`]);
1137 FIRST_ASSUM_ST `deformation` MP_TAC THEN REWRITE_TAC[Localization.deformation;IN_INSERT;NOT_IN_EMPTY];
1138 REPEAT WEAKER_STRIP_TAC;
1139 TYPIFY `f v1 continuous atreal (&0) /\ f v2 continuous atreal (&0) /\ f v3 continuous atreal (&0) /\ f v4 continuous atreal (&0)` (C SUBGOAL_THEN ASSUME_TAC);
1140 BY(ASM_MESON_TAC[]);
1141 TYPIFY `f v1 (&0) = v1 /\ f v2 (&0) = v2 /\ f v4 (&0) = v4 /\ f v3 (&0) = v3` (C SUBGOAL_THEN ASSUME_TAC);
1142 BY(ASM_MESON_TAC[]);
1143 REPLICATE_TAC 3 (FIRST_X_ASSUM_ST `collinear` MP_TAC) THEN ASM_REWRITE_TAC[];
1144 REWRITE_TAC[arith `abs(&0 - r) = abs r`];
1145 REPEAT WEAKER_STRIP_TAC;
1146 INTRO_TAC Cuxvzoz.epsilon_triple [`e'`;`e''`;`e'''`];
1147 ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
1148 INTRO_TAC Cuxvzoz.WNWSHJT_ALT [`v4`;`v1`;`v2`;`f`;`-- e`;`e`;`pi`];
1151 MATCH_MP_TAC Zlzthic.deformation_subset;
1152 BY(TYPIFY `{v1,v2,v3,v4}` EXISTS_TAC THEN ASM_REWRITE_TAC[] THEN SET_TAC[]);
1153 REPEAT WEAKER_STRIP_TAC;
1154 TYPIFY `?e1. &0 < e1 /\ (!t. abs t < e1 ==> azim (vec 0) (f v1 t) (f v2 t) (f v3 t) + azim (vec 0) (f v1 t) (f v3 t) (f v4 t) < &2 * pi)` (C SUBGOAL_THEN MP_TAC);
1155 TYPIFY `(!t. azim (vec 0) (f v1 t) (f v2 t) (f v3 t) = azim (vec 0) v1 v2 v3) /\ &0 < azim (vec 0) v1 v3 v4 /\ azim (vec 0) v1 v3 v4 < pi` ASM_CASES_TAC;
1156 INTRO_TAC Cuxvzoz.WNWSHJT_ALT [`v4`;`v1`;`v3`;`f`;`-- e`;`e`;`pi - azim (vec 0) v1 v2 v3`];
1160 MATCH_MP_TAC Zlzthic.deformation_subset;
1161 BY(TYPIFY `{v1,v2,v3,v4}` EXISTS_TAC THEN ASM_REWRITE_TAC[] THEN SET_TAC[]);
1162 BY(ASM_REWRITE_TAC[arith `a < p - b <=> b + a < p`]);
1163 REPEAT WEAKER_STRIP_TAC;
1164 TYPIFY `e''''''` EXISTS_TAC;
1165 ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
1166 FIRST_X_ASSUM (C INTRO_TAC [`t`]);
1168 BY(MP_TAC PI_POS THEN REAL_ARITH_TAC);
1169 TYPIFY `(!t. azim (vec 0) (f v1 t) (f v3 t) (f v4 t) = azim (vec 0) v1 v3 v4) /\ &0 < azim (vec 0) v1 v2 v3 /\ azim (vec 0) v1 v2 v3 < pi` (C SUBGOAL_THEN MP_TAC);
1170 BY(ASM_MESON_TAC[]);
1171 REPEAT WEAKER_STRIP_TAC;
1172 INTRO_TAC Cuxvzoz.WNWSHJT_ALT [`v3`;`v1`;`v2`;`f`;`-- e`;`e`;`pi - azim (vec 0) v1 v3 v4`];
1176 MATCH_MP_TAC Zlzthic.deformation_subset;
1177 BY(TYPIFY `{v1,v2,v3,v4}` EXISTS_TAC THEN ASM_REWRITE_TAC[] THEN SET_TAC[]);
1178 BY(ASM_REWRITE_TAC[arith `a < p - b <=> a + b < p`]);
1179 REPEAT WEAKER_STRIP_TAC;
1180 TYPIFY `e''''''` EXISTS_TAC;
1181 ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
1182 FIRST_X_ASSUM (C INTRO_TAC [`t`]);
1184 BY(MP_TAC PI_POS THEN REAL_ARITH_TAC);
1185 REPEAT WEAKER_STRIP_TAC;
1186 INTRO_TAC Cuxvzoz.epsilon_triple [`e''''`;`e'''''`;`e1`];
1187 ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
1188 TYPIFY `e''''''` EXISTS_TAC THEN ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
1189 ONCE_REWRITE_TAC[EQ_SYM_EQ];
1190 REWRITE_TAC[CONJ_ASSOC] THEN CONJ_TAC;
1191 BY(REPEAT CONJ_TAC THEN (REPEAT (FIRST_X_ASSUM MATCH_MP_TAC)) THEN ASM_REWRITE_TAC[]);
1192 MATCH_MP_TAC Fan.sum3_azim_fan;
1194 BY(REPEAT (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[]);
1195 BY(REPEAT CONJ_TAC THEN REPEAT (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[])
1199 let NEHXMWH = prove_by_refinement(
1200 `main_nonlinear_terminal_v11 ==>
1202 IMAGE (\i. (v i,v (SUC i))) (:num) = FF /\
1208 (!i j. scs_diag 4 i j ==> scs_a_v39 s i j <= cstab /\ cstab < dist(v i,v j) /\ &4 * h0 < scs_b_v39 s i j) /\
1209 (!i. ~(i MOD 4 = (p+2) MOD 4) ==> interior_angle1 (vec 0) FF (v i) < pi)
1210 ==> (dist(v p,v(p+1)) = scs_a_v39 s p (p+1) \/ dist(v p,v(p+1)) = scs_b_v39 s p (p+1)))`,
1213 REPEAT WEAKER_STRIP_TAC;
1214 TYPIFY `BBprime2_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
1215 BY(ASM_MESON_TAC[Appendix.scs_basic;Ayqjtmd.unadorned_MMs]);
1216 TYPIFY `BBprime_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
1217 BY(ASM_MESON_TAC[Appendix.BBprime2_v39]);
1218 TYPIFY `BBs_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
1219 BY(ASM_MESON_TAC[Appendix.BBprime_v39]);
1220 INTRO_TAC Appendix.BBs_v39 [`s`;`v`];
1221 ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;Terminal.IMAGE_SUBSET_IN;IN_UNIV;arith `~(4 <= 3)`];
1222 REPEAT WEAKER_STRIP_TAC;
1223 TYPED_ABBREV_TAC `V = IMAGE v (:num)`;
1224 TYPED_ABBREV_TAC `E = IMAGE (\i. {v i, v (SUC i)}) (:num)`;
1225 TYPIFY `local_fan (V,E,FF)` (C SUBGOAL_THEN ASSUME_TAC);
1226 MATCH_MP_TAC Local_lemmas.CVX_LO_IMP_LO;
1227 BY(ASM_REWRITE_TAC[]);
1228 TYPIFY `!i. v i IN V` (C SUBGOAL_THEN ASSUME_TAC);
1229 REPEAT WEAKER_STRIP_TAC;
1231 REWRITE_TAC[IN_IMAGE;IN_UNIV];
1233 INTRO_TAC Cuxvzoz.BBs_inj [`s`;`v`;`4`];
1236 TYPIFY `!i. interior_angle1 (vec 0) FF (v i) = azim (vec 0) (v i) (v (i+1)) (v (i+3))` (C SUBGOAL_THEN ASSUME_TAC);
1239 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] (GSYM Ocbicby.INTERIOR_ANGLE1_AZIM));
1240 TYPIFY `s` EXISTS_TAC;
1241 BY(ASM_REWRITE_TAC[IN;arith `4 - 1 = 3`;arith `3 < 4`;arith `SUC i = i+1`]);
1242 INTRO_TAC Ocbicby.LOCAL_FAN_AZIM_POS [`s`;`v`];
1243 ASM_REWRITE_TAC[LET_THM;IN;arith `4-1 = 3`;arith `SUC i = i+1`];
1245 TYPIFY `!i. v (i MOD 4) = v i` (C SUBGOAL_THEN ASSUME_TAC);
1247 MATCH_MP_TAC (GSYM Oxl_def.periodic_mod);
1248 BY(ASM_REWRITE_TAC[arith `~(0=4)`]);
1249 TYPIFY `v 4 = v 0 /\ v 5 = v 1 /\ v 6 = v 2 /\ v 7 = v 3 /\ v 8 = v 4` (C SUBGOAL_THEN ASSUME_TAC);
1250 FIRST_X_ASSUM ((unlist ONCE_REWRITE_TAC) o GSYM);
1251 BY(REWRITE_TAC[Terminal.MOD_4_EXPLICIT;arith `7 = 1*4 + 3`;arith `8 = 2*4 + 0`;MOD_MULT_ADD]);
1252 TYPIFY `generic V E` (C SUBGOAL_THEN ASSUME_TAC);
1253 BY(FIRST_X_ASSUM_ST `scs_generic` MP_TAC THEN ASM_REWRITE_TAC[Appendix.scs_generic]);
1254 TYPIFY `v (p+4) = v p /\ v (p+5) = v (p+1) /\ v (p+6) = v (p+2) /\ v (p+7) = v (p+3) /\ v (p+8) = v (p)` (C SUBGOAL_THEN ASSUME_TAC);
1255 FIRST_X_ASSUM_ST `MOD` ((unlist ONCE_REWRITE_TAC) o GSYM);
1256 BY(REWRITE_TAC[arith `p+4 = 1*4 + p /\ p+5 = 1*4+(p+1) /\ p+6=1*4+(p+2) /\ p+7 = 1*4 + (p+3) /\ p+8 = 2*4 + p`;MOD_MULT_ADD]);
1257 INTRO_TAC Terminal.vv_split_azim_generic [`v`;`4`;`p+3`;`2`;`3`];
1258 REWRITE_TAC[arith `SUC (x+k) = (x+k)+1`;arith `((p:num)+i)+j = p+(i+j)`];
1260 ASM_REWRITE_TAC[LET_THM];
1262 INTRO_TAC Terminal.vv_split_azim_generic [`v`;`4`;`p+1`;`2`;`3`];
1263 REWRITE_TAC[arith `SUC (x+k) = (x+k)+1`;arith `((p:num)+i)+j = p+(i+j)`];
1265 ASM_REWRITE_TAC[LET_THM];
1267 COMMENT "collinearity";
1268 TYPIFY `!i j. ~(v i = v j) ==> ~collinear {vec 0,v i, v j}` (C SUBGOAL_THEN ASSUME_TAC);
1269 REPEAT GEN_TAC THEN DISCH_TAC;
1270 MATCH_MP_TAC Zlzthic.PROPERTIES_GENERIC_LOCAL_FAN_ALT;
1271 GEXISTL_TAC [`V`;`E`;`FF`];
1272 BY(ASM_REWRITE_TAC[IN_IMAGE;IN_UNIV]);
1273 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> ~(v i = v j)` (C SUBGOAL_THEN ASSUME_TAC);
1274 BY(REPLICATE_TAC 10 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
1275 INTRO_TAC PERIODIC_INJ_MOD [`v`;`4`];
1276 ASM_REWRITE_TAC[arith `~(4 = 0)`];
1278 TYPIFY `azim (vec 0) (v p) (v (p+1)) (v (p+3)) < pi` (C SUBGOAL_THEN ASSUME_TAC);
1279 FIRST_X_ASSUM_ST `interior_angle1` ((unlist REWRITE_TAC) o GSYM);
1280 FIRST_X_ASSUM MATCH_MP_TAC;
1281 GEN_REWRITE_TAC(RAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[arith`p = p+0`];
1282 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
1284 TYPIFY `~coplanar {vec 0,v p,v (p+1),v (p+3)}` (C SUBGOAL_THEN ASSUME_TAC);
1285 REWRITE_TAC[GSYM Local_lemmas1.AZIM_COND_FOR_COPLANAR];
1286 MATCH_MP_TAC (arith `&0 < x /\ x < pi ==> ~ ((x = &0) \/ (x = pi))`);
1287 BY(ASM_REWRITE_TAC[]);
1288 TYPIFY `!i a b. a < 4 /\ b < 4 /\ ~(a = b) ==> ~collinear {vec 0,v(i+a),v(i+b)}` (C SUBGOAL_THEN ASSUME_TAC);
1289 REPEAT WEAKER_STRIP_TAC;
1290 FIRST_X_ASSUM MP_TAC THEN REWRITE_TAC[];
1291 FIRST_X_ASSUM_ST `v (i MOD 4) = v i` ((unlist ONCE_REWRITE_TAC) o GSYM);
1292 REPEAT (FIRST_X_ASSUM MATCH_MP_TAC);
1294 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
1296 BY(REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[DIVISION;MOD_LT;arith `~(4=0)`]);
1298 BY(MESON_TAC[DIVISION;arith `~(4=0)`]);
1299 COMMENT "introduce deformation";
1300 INTRO_TAC Cuxvzoz.deform_simplex_edge_exists [`V`;`(\ (t:real). &0)`;`(\(t:real). t)`;`v (p +3)`;`v p`;`v (p +1)`;`&1`];
1302 REPEAT WEAKER_STRIP_TAC;
1303 FIRST_X_ASSUM MP_TAC;
1305 REWRITE_TAC[arith `&0 < &1`];
1307 ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d}={a,c,d,b}`];
1308 BY(ASM_REWRITE_TAC[]);
1311 INTRO_TAC Planarity.cross_dot_fully_surrounded_fan [`(vec 0):real^3`;`v p`;`v (p+3)`;`v(p+1)`];
1314 INTRO_TAC Planarity.notcoplanar_imp_notcollinear_fan [`(vec 0):real^3`;`v p`;`v (p+1)`;`v(p+3)`];
1315 BY(REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
1316 MATCH_MP_TAC (arith `x = y ==> (&0 < x ==> y > &0)`);
1318 REPEAT ( GMATCH_SIMP_TAC REAL_CONTINUOUS_ON_EQ_REAL_CONTINUOUS_AT);
1319 REWRITE_TAC[Ocbicby.REAL_OPEN_REAL_INTERVAL];
1320 BY(REWRITE_TAC[REAL_CONTINUOUS_CONST;REAL_CONTINUOUS_AT_ID]);
1321 REPEAT WEAKER_STRIP_TAC;
1322 TYPIFY `~(scs_a_v39 s p (p+1) < dist(v p,v (p+1)) /\ dist(v p,v (p+1)) < scs_b_v39 s p (p+1))` ENOUGH_TO_SHOW_TAC;
1323 FIRST_X_ASSUM_ST `scs_a_v39` (C INTRO_TAC [`p`;`(p+1)`]);
1325 REPEAT WEAKER_STRIP_TAC;
1326 TYPIFY `(!i t. abs t < e' ==> norm (f (v i) t) = norm (v i))` (C SUBGOAL_THEN ASSUME_TAC);
1327 REPEAT WEAKER_STRIP_TAC;
1328 TYPIFY `v i = v p` ASM_CASES_TAC;
1330 FIRST_X_ASSUM_ST `norm` (C INTRO_TAC [`t`]);
1331 BY(ASM_REWRITE_TAC[] THEN MESON_TAC[]);
1332 FIRST_X_ASSUM GMATCH_SIMP_TAC;
1333 BY(ASM_REWRITE_TAC[]);
1334 TYPIFY `!i. 0 < i /\ i < 4 ==> ~(v (p + i) = v p)` (C SUBGOAL_THEN ASSUME_TAC);
1335 REPEAT WEAKER_STRIP_TAC;
1336 FIRST_X_ASSUM MP_TAC;
1338 GEN_REWRITE_TAC (RAND_CONV o RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV) [arith `p = p+0`];
1339 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
1341 BY(REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[DIVISION;MOD_LT;arith `~(4=0)`;arith `0 < i ==> ~(i=0)`]);
1342 TYPIFY `!i j (k:num). v i = v j ==> v (i+k) = v (j+k)` (C SUBGOAL_THEN ASSUME_TAC);
1344 REPEAT WEAKER_STRIP_TAC;
1345 ONCE_REWRITE_TAC[arith `(i:num) + k = k + i`];
1346 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
1347 BY(ASM_REWRITE_TAC[arith `~(4 = 0)`]);
1348 TYPIFY `!t. azim (vec 0) (f (v (p+2)) t) (f (v (p+3)) t) (f (v (p+1)) t) = azim(vec 0) (v(p+2)) (v(p+3)) (v(p+1))` (C SUBGOAL_THEN ASSUME_TAC);
1350 FIRST_X_ASSUM_ST `~(w = v p) ==> a` (REPEAT o GMATCH_SIMP_TAC);
1351 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
1352 TYPIFY `!i. azim (vec 0) (v i) (v (i+1)) (v (i+3)) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
1354 FIRST_X_ASSUM_ST `interior_angle1` ((unlist REWRITE_TAC) o GSYM);
1355 MATCH_MP_TAC Local_lemmas.CONVEX_LOFA_IMP_INANGLE_LE_PI;
1356 BY(ASM_REWRITE_TAC[]);
1357 TYPIFY `(!i. ?e0. &0 < e0 /\ (azim (vec 0) (v i) (v (i + 1)) (v (i + 3)) = pi ==> (!t. abs t < e0 ==> azim (vec 0) (f (v i) t) (f (v (i + 1)) t) (f (v (i + 3)) t) <= pi)))` (C SUBGOAL_THEN ASSUME_TAC);
1359 TYPIFY `v i = v (p+2)` ASM_CASES_TAC;
1360 FIRST_ASSUM (fun t -> FIRST_X_ASSUM (ASSUME_TAC o (C MATCH_MP t)));
1361 TYPIFY `&1` EXISTS_TAC;
1362 ASM_REWRITE_TAC[arith `&0 < &1`;arith `(p+2)+k = p + (2+k)`];
1363 NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[];
1365 TYPIFY `azim (vec 0) (v i) (v (i + 1)) (v (i + 3)) < pi` ENOUGH_TO_SHOW_TAC;
1366 BY(MESON_TAC[arith `x < pi ==> ~(x = pi)`;arith `&0 < &1`]);
1367 BY(ASM_MESON_TAC[]);
1368 (COMMENT "deformation in BBs");
1369 INTRO_TAC Cuxvzoz.deformation_BBs_ALT [`s`;`4`;`f`;`v`;`e'`];
1373 MATCH_MP_TAC ab4_assumption_reduction;
1374 GEXISTL_TAC [`p`;`e'`];
1377 REPEAT WEAKER_STRIP_TAC;
1378 FIRST_X_ASSUM_ST `scs_diag` (C INTRO_TAC [`i`;`j`]);
1379 BY(ASM_REWRITE_TAC[] THEN REAL_ARITH_TAC);
1380 REPEAT WEAKER_STRIP_TAC;
1381 (FIRST_X_ASSUM_ST `norm` (C INTRO_TAC [`t`]));
1382 BY(ASM_REWRITE_TAC[] THEN REAL_ARITH_TAC);
1383 (REPEAT WEAKER_STRIP_TAC);
1384 COMMENT "azim sums";
1385 INTRO_TAC deform_azim_sum [`v (p+3)`;`v p`;`v (p+1)`;`v(p+2)`;`f`;`e'`];
1387 REPEAT (FIRST_X_ASSUM_ST `c = a + b` MP_TAC) THEN ASM_REWRITE_TAC[];
1388 REPLICATE_TAC 3 DISCH_TAC;
1390 MATCH_MP_TAC Zlzthic.deformation_subset;
1391 (TYPIFY `V` EXISTS_TAC THEN ASM_REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY]);
1392 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
1393 TYPIFY `~collinear {vec 0, v (p + 3), v (p+0)} /\ ~collinear {vec 0, v (p + 3), v (p + 1)} /\ ~collinear {vec 0, v (p + 3), v (p + 2)}` (C SUBGOAL_THEN MP_TAC);
1394 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
1395 REWRITE_TAC[arith `p+0=p`] THEN DISCH_THEN (unlist REWRITE_TAC);
1397 BY(ASM_REWRITE_TAC[]);
1398 FIRST_X_ASSUM (SUBST1_TAC) THEN REWRITE_TAC[];
1399 REPLICATE_TAC 4 (FIRST_X_ASSUM kill);
1401 TYPIFY_GOAL_THEN `&0 < azim (vec 0) (v (p + 3)) (v p) (v (p + 2)) /\ azim (vec 0) (v (p + 3)) (v p) (v (p + 2)) < pi` (unlist REWRITE_TAC);
1402 FIRST_X_ASSUM_ST `&0 < azim a b c d` (C INTRO_TAC [`p+3`]);
1403 TYPIFY `azim (vec 0) (v (p+3)) (v p) (v (p+2)) = azim (vec 0) (v (p + 3)) (v ((p + 3) + 1)) (v ((p + 3) + 3))` (C SUBGOAL_THEN ASSUME_TAC);
1404 BY(REWRITE_TAC[arith `((p:num) + i) + j = p + i+j`] THEN NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[]);
1406 DISCH_THEN (unlist REWRITE_TAC);
1407 FIRST_X_ASSUM_ST `interior_angle1` ((unlist REWRITE_TAC) o GSYM);
1409 FIRST_X_ASSUM MATCH_MP_TAC;
1410 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
1415 FIRST_X_ASSUM_ST `~(w = v p) ==> a` (REPEAT o GMATCH_SIMP_TAC);
1417 BY(REPEAT CONJ_TAC THEN GEN_REWRITE_TAC (RAND_CONV o RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV) [arith `p = p+0`] THEN GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT THEN NUM_REDUCE_TAC);
1418 REWRITE_TAC[Zlzthic.azim_lt_pi_cross];
1419 TYPIFY `(v (p + 3) cross v p) dot v (p + 1) = (v (p) cross (v (p+1))) dot v (p + 3)` (C SUBGOAL_THEN SUBST1_TAC);
1421 REWRITE_TAC[GSYM Zlzthic.azim_lt_pi_cross];
1422 BY(ASM_REWRITE_TAC[]);
1423 (REPEAT WEAKER_STRIP_TAC);
1424 COMMENT "second azim sum";
1425 INTRO_TAC deform_azim_sum [`v (p+1)`;`v (p+2)`;`v (p+3)`;`v(p)`;`f`;`e'`];
1427 REPEAT (FIRST_X_ASSUM_ST `c = a + b` MP_TAC) THEN ASM_REWRITE_TAC[];
1428 REPLICATE_TAC 3 DISCH_TAC;
1430 MATCH_MP_TAC Zlzthic.deformation_subset;
1431 (TYPIFY `V` EXISTS_TAC THEN ASM_REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY]);
1432 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
1433 TYPIFY `~collinear {vec 0, v (p + 1), v (p + 2)} /\ ~collinear {vec 0, v (p + 1), v (p + 3)} /\ ~collinear {vec 0, v (p + 1), v (p + 0)}` (C SUBGOAL_THEN MP_TAC);
1434 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
1435 REWRITE_TAC[arith `p+0=p`] THEN DISCH_THEN (unlist REWRITE_TAC);
1437 BY(ASM_REWRITE_TAC[]);
1438 FIRST_X_ASSUM (SUBST1_TAC) THEN REWRITE_TAC[];
1439 REPLICATE_TAC 4 (FIRST_X_ASSUM kill);
1441 TYPIFY_GOAL_THEN `&0 < azim (vec 0) (v (p + 1)) (v (p + 2)) (v p) /\ azim (vec 0) (v (p + 1)) (v (p + 2)) (v p) < pi` (unlist REWRITE_TAC);
1442 FIRST_X_ASSUM_ST `&0 < azim a b c d` (C INTRO_TAC [`p+1`]);
1443 TYPIFY `azim (vec 0) (v (p+1)) (v (p+2)) (v (p)) = azim (vec 0) (v (p + 1)) (v ((p + 1) + 1)) (v ((p + 1) + 3))` (C SUBGOAL_THEN ASSUME_TAC);
1444 BY(REWRITE_TAC[arith `((p:num) + i) + j = p + i+j`] THEN NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[]);
1446 DISCH_THEN (unlist REWRITE_TAC);
1447 FIRST_X_ASSUM_ST `interior_angle1` ((unlist REWRITE_TAC) o GSYM);
1449 FIRST_X_ASSUM MATCH_MP_TAC;
1450 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
1455 FIRST_X_ASSUM_ST `~(w = v p) ==> a` (REPEAT o GMATCH_SIMP_TAC);
1457 BY(REPEAT CONJ_TAC THEN GEN_REWRITE_TAC (RAND_CONV o RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV) [arith `p = p+0`] THEN GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT THEN NUM_REDUCE_TAC);
1458 REWRITE_TAC[Zlzthic.azim_lt_pi_cross];
1459 TYPIFY `(v (p + 1) cross v (p+3)) dot v (p) = (v (p) cross (v (p+1))) dot v (p + 3)` (C SUBGOAL_THEN SUBST1_TAC);
1461 REWRITE_TAC[GSYM Zlzthic.azim_lt_pi_cross];
1462 BY(ASM_REWRITE_TAC[]);
1463 (REPEAT WEAKER_STRIP_TAC);
1464 TYPIFY `?e3. &0 < e3 /\ (!t. abs t < e3 ==> dist(v p,v (p+1)) + t IN real_interval(scs_a_v39 s p (p+1),scs_b_v39 s p (p+1)))` (C SUBGOAL_THEN MP_TAC);
1465 INTRO_TAC Zlzthic.real_interval_contains_0_ball [`scs_a_v39 s p (p+1)-dist(v p,v (p+1))`;`scs_b_v39 s p (p+1) - dist(v p,v (p+1))`;`&1`];
1466 ASM_REWRITE_TAC[arith `&0 < &1`;arith `a - d < &0 <=> a < d`;arith `&0 < b - d <=> d < b`];
1467 REPEAT WEAKER_STRIP_TAC;
1468 TYPIFY `e` EXISTS_TAC;
1469 ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
1470 FIRST_X_ASSUM (C INTRO_TAC [`t`]);
1471 ASM_REWRITE_TAC[IN_REAL_INTERVAL];
1473 REPEAT WEAKER_STRIP_TAC;
1475 INTRO_TAC Zlzthic.NONPLANAR_OPEN [`(\ (t:real). (vec 0):real^3)`;`f (v p)`;`\ (t:real). v (p+1)`;`\ (t:real). v (p+3)`;`&0`];
1476 ASM_REWRITE_TAC[CONTINUOUS_CONST];
1477 DISCH_THEN MP_TAC THEN ANTS_TAC;
1478 FIRST_X_ASSUM_ST `deformation` MP_TAC THEN REWRITE_TAC[Localization.deformation] THEN REPEAT WEAKER_STRIP_TAC;
1480 BY(FIRST_X_ASSUM MATCH_MP_TAC THEN ASM_REWRITE_TAC[]);
1481 POP_ASSUM GMATCH_SIMP_TAC;
1482 BY(ASM_REWRITE_TAC[]);
1483 REWRITE_TAC[arith `abs (&0 - t') = abs t'`] THEN REPEAT WEAKER_STRIP_TAC;
1484 INTRO_TAC Zlzthic.WNWSHJT [`v(p+3)`;`v p`;`v (p+1)`;`f`;`-- e'`;`e'`];
1488 MATCH_MP_TAC Zlzthic.deformation_subset;
1489 (TYPIFY `V` EXISTS_TAC THEN ASM_REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY]);
1490 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
1491 FIRST_X_ASSUM_ST `deformation` MP_TAC THEN REWRITE_TAC[Localization.deformation];
1492 REPEAT WEAKER_STRIP_TAC;
1493 FIRST_X_ASSUM (REPEAT o GMATCH_SIMP_TAC) THEN ASM_REWRITE_TAC[];
1494 TYPIFY `!i. ~(i=0) /\ i < 4 ==> ~collinear {vec 0,v (p+0),v(p+i)}` ENOUGH_TO_SHOW_TAC;
1495 BY(MESON_TAC[arith `p+0=p` ;arith `~(1=0) /\ 1 < 4 /\ ~(3=0) /\ 3 < 4`]);
1496 GEN_TAC THEN DISCH_TAC;
1497 FIRST_X_ASSUM MATCH_MP_TAC;
1498 BY(ASM_REWRITE_TAC[arith `0 < 4`]);
1499 REPEAT WEAKER_STRIP_TAC;
1500 COMMENT "introduce 1834";
1501 INTRO_TAC Iunbuig.epsilon_hept [`e`;`e'`;`e''`;`e'''`;`e3`;`e1`;`e1'`] THEN ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
1502 FIRST_ASSUM_ST `!i. 0 < i /\ i < 4 ==> ~(v (p + i) = v p)` MP_TAC;
1503 FIRST_ASSUM_ST `i MOD 4 = j MOD 4` (unlist REWRITE_TAC);
1505 INTRO_TAC (UNDISCH Ocbicby.LEMMA_1834976363) [`norm (v (p+3))`;`norm (v p)`;`norm (v (p+1))`;`dist(v p,v(p+1))`;`dist (v(p+1),v(p+3))`;`dist(v p,v (p+3))`;`dist(v p,v (p+1)) - e7`;`dist(v p,v(p+1)) + e7`];
1508 (COMMENT "1834 ants");
1510 TYPIFY `!i. &2 <= norm (v i) /\ norm (v i) <= &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
1512 REWRITE_TAC[GSYM Fnjlbxs.in_ball_annulus];
1513 FIRST_X_ASSUM_ST `BBs_v39` kill THEN FIRST_X_ASSUM_ST `BBs_v39` MP_TAC THEN REWRITE_TAC[Appendix.BBs_v39;LET_THM] THEN EXPAND_TAC "V" THEN REPEAT WEAKER_STRIP_TAC;
1514 FIRST_X_ASSUM_ST `ball_annulus` MP_TAC;
1515 REWRITE_TAC[SUBSET;IN_IMAGE;IN_UNIV];
1518 FIRST_ASSUM_ST `collinear` (C INTRO_TAC [`p`;`3`;`0`]);
1519 FIRST_X_ASSUM_ST `collinear` (C INTRO_TAC [`p`;`3`;`1`]);
1521 REWRITE_TAC[arith `p + 0 = p`];
1522 REPEAT WEAKER_STRIP_TAC;
1523 TYPIFY_GOAL_THEN `&0 < ups_x (norm (v (p + 3)) * norm (v (p + 3))) (norm (v p) * norm (v p)) (dist (v p,v (p + 3)) * dist (v p,v (p + 3))) /\ &0 < ups_x (norm (v (p + 3)) * norm (v (p + 3))) (norm (v (p + 1)) * norm (v (p + 1))) (dist (v (p + 1),v (p + 3)) * dist (v (p + 1),v (p + 3)))` (unlist REWRITE_TAC);
1524 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC);
1525 REWRITE_TAC[Collect_geom2.NOT_COL_EQ_UPS_X_POS;DIST_0;DIST_SYM;arith`x pow 2 = x*x`];
1527 TYPIFY `!i j. &2 <= dist(v i,v j) ==> (&2 / h0) pow 2 <= xrr (norm(v i)) (norm(v (j))) (dist (v i,v j))` ((C SUBGOAL_THEN ASSUME_TAC));
1528 REPEAT WEAKER_STRIP_TAC;
1529 MATCH_MP_TAC Ocbicby.xrr_simple_lower_bound;
1530 BY(ASM_REWRITE_TAC[arith `x <= x`]);
1532 POP_ASSUM MATCH_MP_TAC;
1533 MATCH_MP_TAC Ocbicby.scs_lb_2;
1534 TYPIFY `s` EXISTS_TAC;
1536 ONCE_REWRITE_TAC[EQ_SYM_EQ];
1537 FIRST_X_ASSUM MATCH_MP_TAC;
1540 TYPIFY `#15.53 = sqrt(#15.53) pow 2` (C SUBGOAL_THEN SUBST1_TAC);
1541 GMATCH_SIMP_TAC SQRT_POW_2;
1543 MATCH_MP_TAC Ocbicby.xrr_simple_upper_bound;
1545 TYPIFY `&4 = sqrt(&16)` (C SUBGOAL_THEN SUBST1_TAC);
1546 REWRITE_TAC[arith `&16 = &4 pow 2`];
1547 REWRITE_TAC[POW_2_SQRT_ABS];
1549 GMATCH_SIMP_TAC SQRT_MONO_LT_EQ;
1550 TYPIFY_GOAL_THEN `&0 <= #15.53 /\ &0 < &16 /\ #15.53 < &16` (unlist REWRITE_TAC);
1555 MATCH_MP_TAC Ocbicby.scs_lb_2;
1556 TYPIFY `s` EXISTS_TAC;
1558 ONCE_REWRITE_TAC[EQ_SYM_EQ];
1559 FIRST_X_ASSUM MATCH_MP_TAC;
1561 MATCH_MP_TAC REAL_LE_TRANS;
1562 TYPIFY `cstab` EXISTS_TAC;
1564 MATCH_MP_TAC (arith `d <= scs_b_v39 s p (p+1) /\ scs_b_v39 s p (p+1) <= cstab ==> d <= cstab`);
1566 FIRST_X_ASSUM_ST `BBs_v39` kill;
1567 (FIRST_X_ASSUM_ST `BBs_v39` MP_TAC) THEN REWRITE_TAC[Appendix.BBs_v39;LET_THM];
1569 FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39];
1570 ASM_REWRITE_TAC[arith `3 < 4`;arith `SUC i = i+1`];
1572 REWRITE_TAC[Sphere.cstab];
1573 MATCH_MP_TAC REAL_LE_RSQRT;
1576 ONCE_REWRITE_TAC[DIST_SYM];
1577 FIRST_X_ASSUM MATCH_MP_TAC;
1578 MATCH_MP_TAC Ocbicby.scs_lb_2;
1579 TYPIFY `s` EXISTS_TAC;
1581 BY(GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT THEN NUM_REDUCE_TAC);
1583 ONCE_REWRITE_TAC[DIST_SYM];
1584 FIRST_X_ASSUM MATCH_MP_TAC;
1585 MATCH_MP_TAC Ocbicby.scs_lb_2;
1586 TYPIFY `s` EXISTS_TAC;
1588 BY(FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
1590 REWRITE_TAC[IN_REAL_INTERVAL];
1591 BY(FIRST_X_ASSUM_ST `&0 < e` MP_TAC THEN REAL_ARITH_TAC);
1593 REWRITE_TAC[SUBSET;IN_REAL_INTERVAL;IN_ELIM_THM];
1594 REPEAT WEAKER_STRIP_TAC;
1595 TYPIFY `?t. abs t < e7 /\ x = dist(v p,v(p+1)) + t` (C SUBGOAL_THEN MP_TAC);
1596 TYPIFY `x - dist(v p,v(p+1))` EXISTS_TAC;
1599 BY(REPLICATE_TAC 2 (POP_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
1600 REPEAT WEAKER_STRIP_TAC;
1602 FIRST_X_ASSUM_ST `norm (f (v p) t) = norm (v p)` (C INTRO_TAC [`t`]);
1604 BY(REPEAT (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[]);
1605 REWRITE_TAC[DIST_SYM] THEN ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN REPEAT WEAKER_STRIP_TAC THEN ASM_REWRITE_TAC[];
1606 FIRST_X_ASSUM_ST `coplanar` (C INTRO_TAC [`t`]);
1608 BY(REPEAT (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[]);
1610 FIRST_ASSUM MP_TAC THEN ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,d,b,c}`] THEN REWRITE_TAC[Oxlzlez.coplanar_delta_y;DIST_0;DIST_SYM];
1611 RULE_ASSUM_TAC (REWRITE_RULE[arith `d + &0 = d`]);
1613 DISCH_THEN (unlist REWRITE_TAC);
1614 REWRITE_TAC[GSYM DIST_NZ];
1617 FIRST_X_ASSUM_ST `coplanar` MP_TAC;
1618 BY(ASM_REWRITE_TAC[SET_RULE `{a,b,b,c} = {a,b,c}`;COPLANAR_3]);
1619 TYPIFY `~collinear {vec 0,f (v p) t,v (p+1)}` (C SUBGOAL_THEN MP_TAC);
1620 BY(POP_ASSUM MP_TAC THEN MESON_TAC[Planarity.notcoplanar_imp_notcollinear_fan]);
1621 REWRITE_TAC[Collect_geom2.NOT_COL_EQ_UPS_X_POS];
1622 BY(REWRITE_TAC[DIST_0;arith `x pow 2 = x*x`;DIST_SYM]);
1623 TYPIFY `!i. i < 3 ==> &0 < dist (v (p+i), v (p+3))` ENOUGH_TO_SHOW_TAC;
1624 BY(MESON_TAC[arith `p + 0 = (p:num)`;arith `0 < 3`;arith `1 < 3`]);
1625 REPEAT WEAKER_STRIP_TAC;
1626 MATCH_MP_TAC (arith `&2 <= x ==> &0 < x`);
1627 MATCH_MP_TAC Ocbicby.scs_lb_2;
1628 TYPIFY `s` EXISTS_TAC;
1630 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT THEN NUM_REDUCE_TAC;
1631 BY(FIRST_X_ASSUM MP_TAC THEN REWRITE_TAC[arith `i < 3 <=> i = 0 \/ i = 1 \/ i = 2`] THEN DISCH_TAC THEN REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[] THEN NUM_REDUCE_TAC);
1632 REPEAT WEAKER_STRIP_TAC;
1633 TYPIFY `?t. abs t < e7 /\ y4' = dist(v p,v(p+1)) + t` (C SUBGOAL_THEN MP_TAC);
1634 TYPIFY `y4' - dist(v p,v(p+1))` EXISTS_TAC;
1637 BY(REPLICATE_TAC 2 (POP_ASSUM MP_TAC) THEN REWRITE_TAC[IN_REAL_INTERVAL] THEN REAL_ARITH_TAC);
1638 REPEAT WEAKER_STRIP_TAC;
1639 FIRST_X_ASSUM_ST `taum` MP_TAC;
1641 REWRITE_TAC[arith `~(x < y) <=> (y <= x)`];
1642 FIRST_X_ASSUM_ST `norm (f (v p) t) = norm (v p)` (C INTRO_TAC [`t`]);
1644 BY(REPEAT (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[]);
1645 (REWRITE_TAC[DIST_SYM;arith `d + &0 = d`] THEN REPEAT WEAKER_STRIP_TAC THEN ASM_REWRITE_TAC[]);
1646 COMMENT "back to root, next tau";
1647 TYPIFY `sum {i | i < 4} (\i. rho_fun (norm (v i)) * azim (vec 0) (v i) (v (i + 1)) (v (i + 4 - 1))) <= sum {i | i < 4} (\i. rho_fun (norm (f (v i) t)) * azim (vec 0) (f (v i) t) (f(v(i+1)) t) (f (v (i + 4 - 1)) t))` (C SUBGOAL_THEN ASSUME_TAC);
1648 REPEAT WEAKER_STRIP_TAC;
1649 MATCH_MP_TAC Cuxvzoz.MMs_minimize_tau_fun;
1650 TYPIFY `s` EXISTS_TAC;
1651 ASM_REWRITE_TAC[arith `3 < 4`];
1652 FIRST_X_ASSUM MATCH_MP_TAC;
1653 BY(FIRST_X_ASSUM MATCH_MP_TAC THEN ASM_REWRITE_TAC[]);
1655 TYPIFY `{i | i < 4} = 0..(4-1)` (C SUBGOAL_THEN SUBST1_TAC);
1656 BY(REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_NUMSEG] THEN ARITH_TAC);
1657 REPEAT ( GMATCH_SIMP_TAC (GSYM Oxl_def.periodic_sum));
1658 TYPIFY `p` EXISTS_TAC;
1661 FIRST_ASSUM_ST `periodic` MP_TAC THEN REWRITE_TAC[Oxl_def.periodic];
1662 REWRITE_TAC[arith `(i+4)+k = (i+k)+4`];
1663 BY(DISCH_THEN (unlist REWRITE_TAC));
1664 TYPIFY `p` EXISTS_TAC;
1667 FIRST_ASSUM_ST `periodic` MP_TAC THEN REWRITE_TAC[Oxl_def.periodic];
1668 REWRITE_TAC[arith `(i+4)+k = (i+k)+4`];
1669 BY(DISCH_THEN (unlist REWRITE_TAC));
1671 REWRITE_TAC[arith `3+p = SUC(SUC(SUC p))`;SUM_CLAUSES_NUMSEG;SUM_SING_NUMSEG;arith `p <= SUC p /\ p <= SUC (SUC p) /\ p <= SUC(SUC(SUC p))`];
1672 REWRITE_TAC[arith `SUC i = i+1`;arith `(i + j) + (k:num) = i+(j+k)`];
1675 REPLICATE_TAC 7 (FIRST_X_ASSUM (C INTRO_TAC [`t`])) THEN ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
1676 REPEAT (FIRST_X_ASSUM (C INTRO_TAC [`t`])) THEN ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
1677 FIRST_X_ASSUM_ST `rho_fun` MP_TAC THEN ASM_REWRITE_TAC[Appendix.rho_rho_fun];
1678 TYPIFY `f (v(p+1)) t = v(p+1) /\ f (v (p+2)) t = v(p+2) /\ f(v (p+3)) t = v(p+3)` (C SUBGOAL_THEN ASSUME_TAC);
1679 FIRST_X_ASSUM_ST `~(w = v p) ==> a` (REPEAT o GMATCH_SIMP_TAC);
1680 BY(ASM_REWRITE_TAC[] THEN REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
1681 POP_ASSUM (fun t -> ASM_TAC THEN unlist REWRITE_TAC t THEN REPEAT DISCH_TAC THEN ASSUME_TAC t);
1682 FIRST_X_ASSUM_ST `azim` MP_TAC;
1683 FIRST_X_ASSUM_ST `azim` MP_TAC THEN BURY_MP_TAC;
1684 FIRST_ASSUM_ST `azim` ((unlist REWRITE_TAC) o GSYM);
1685 FIRST_ASSUM_ST `azim (vec 0) (v (p + 3)) (f (v p) t) (v (p + 2))` ((unlist REWRITE_TAC) o GSYM);
1686 REWRITE_TAC[arith `(a+b)+c = a + b + c`];
1687 REWRITE_TAC[arith `r0 * (a013) + r1 * (a123 + a130) + r2 * a231 + r3 * (a301+a312) <= r0 * (f013) + r1 * (a123 + f130) + r2 * a231 + r3 *(f301 +a312) <=> r0 * a013 + r1*a130 + r3* a301 <= r0 * f013 + r1 * f130 + r3 * f301`];
1688 MATCH_MP_TAC (arith `a - (pi+sol0) = a' /\ b - (pi+sol0) = b' ==> (a <= b ==> a' <= b')`);
1689 REWRITE_TAC[arith `(a + b+c) - (pi + sol0) = a + b + c - (pi + sol0)`];
1691 GMATCH_SIMP_TAC (GSYM Cuxvzoz.tau3_azim);
1692 GMATCH_SIMP_TAC Cuxvzoz.tau3_taum_nonplanar;
1694 REWRITE_TAC[DIST_SYM];
1695 BY(MESON_TAC[Terminal.taum_sym]);
1696 FIRST_X_ASSUM_ST `norm a = norm b` (SUBST1_TAC o GSYM);
1697 FIRST_X_ASSUM_ST `dist s + t` (SUBST1_TAC o GSYM);
1698 GMATCH_SIMP_TAC (GSYM Cuxvzoz.tau3_azim);
1699 GMATCH_SIMP_TAC Cuxvzoz.tau3_taum_nonplanar;
1700 REWRITE_TAC[DIST_SYM];
1701 REWRITE_TAC[CONJ_ASSOC] THEN CONJ2_TAC;
1702 ASM_REWRITE_TAC[DIST_SYM];
1703 BY(MESON_TAC[Terminal.taum_sym]);
1705 BY(FIRST_X_ASSUM_ST `azim (vec 0) (f (v p) t) (v (p + 1)) (v (p + 3)) < pi` MP_TAC THEN REAL_ARITH_TAC)
1709 let BZQNDMN = prove_by_refinement(
1710 `main_nonlinear_terminal_v11 ==>
1712 IMAGE (\i. (v i,v (SUC i))) (:num) = FF /\
1718 (!i j. scs_diag 4 i j ==> scs_a_v39 s i j <= cstab /\ cstab < dist(v i,v j) /\ &4 * h0 < scs_b_v39 s i j) /\
1719 (!i. ~(i MOD 4 = (p+3) MOD 4) ==> interior_angle1 (vec 0) FF (v i) < pi)
1720 ==> (dist(v p,v(p+1)) = scs_a_v39 s p (p+1) \/ dist(v p,v(p+1)) = scs_b_v39 s p (p+1)))`,
1723 REPEAT WEAKER_STRIP_TAC;
1724 TYPIFY `BBprime2_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
1725 BY(ASM_MESON_TAC[Appendix.scs_basic;Ayqjtmd.unadorned_MMs]);
1726 TYPIFY `BBprime_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
1727 BY(ASM_MESON_TAC[Appendix.BBprime2_v39]);
1728 TYPIFY `BBs_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
1729 BY(ASM_MESON_TAC[Appendix.BBprime_v39]);
1730 INTRO_TAC Appendix.BBs_v39 [`s`;`v`];
1731 ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;Terminal.IMAGE_SUBSET_IN;IN_UNIV;arith `~(4 <= 3)`];
1732 REPEAT WEAKER_STRIP_TAC;
1733 TYPED_ABBREV_TAC `V = IMAGE v (:num)`;
1734 TYPED_ABBREV_TAC `E = IMAGE (\i. {v i, v (SUC i)}) (:num)`;
1735 TYPIFY `local_fan (V,E,FF)` (C SUBGOAL_THEN ASSUME_TAC);
1736 MATCH_MP_TAC Local_lemmas.CVX_LO_IMP_LO;
1737 BY(ASM_REWRITE_TAC[]);
1738 TYPIFY `!i. v i IN V` (C SUBGOAL_THEN ASSUME_TAC);
1739 REPEAT WEAKER_STRIP_TAC;
1741 REWRITE_TAC[IN_IMAGE;IN_UNIV];
1743 INTRO_TAC Cuxvzoz.BBs_inj [`s`;`v`;`4`];
1746 TYPIFY `!i. interior_angle1 (vec 0) FF (v i) = azim (vec 0) (v i) (v (i+1)) (v (i+3))` (C SUBGOAL_THEN ASSUME_TAC);
1749 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] (GSYM Ocbicby.INTERIOR_ANGLE1_AZIM));
1750 TYPIFY `s` EXISTS_TAC;
1751 BY(ASM_REWRITE_TAC[IN;arith `4 - 1 = 3`;arith `3 < 4`;arith `SUC i = i+1`]);
1752 INTRO_TAC Ocbicby.LOCAL_FAN_AZIM_POS [`s`;`v`];
1753 ASM_REWRITE_TAC[LET_THM;IN;arith `4-1 = 3`;arith `SUC i = i+1`];
1755 TYPIFY `!i. v (i MOD 4) = v i` (C SUBGOAL_THEN ASSUME_TAC);
1757 MATCH_MP_TAC (GSYM Oxl_def.periodic_mod);
1758 BY(ASM_REWRITE_TAC[arith `~(0=4)`]);
1759 TYPIFY `v 4 = v 0 /\ v 5 = v 1 /\ v 6 = v 2 /\ v 7 = v 3 /\ v 8 = v 4` (C SUBGOAL_THEN ASSUME_TAC);
1760 FIRST_X_ASSUM ((unlist ONCE_REWRITE_TAC) o GSYM);
1761 BY(REWRITE_TAC[Terminal.MOD_4_EXPLICIT;arith `7 = 1*4 + 3`;arith `8 = 2*4 + 0`;MOD_MULT_ADD]);
1762 TYPIFY `generic V E` (C SUBGOAL_THEN ASSUME_TAC);
1763 BY(FIRST_X_ASSUM_ST `scs_generic` MP_TAC THEN ASM_REWRITE_TAC[Appendix.scs_generic]);
1764 TYPIFY `v (p+4) = v p /\ v (p+5) = v (p+1) /\ v (p+6) = v (p+2) /\ v (p+7) = v (p+3) /\ v (p+8) = v (p)` (C SUBGOAL_THEN ASSUME_TAC);
1765 FIRST_X_ASSUM_ST `MOD` ((unlist ONCE_REWRITE_TAC) o GSYM);
1766 BY(REWRITE_TAC[arith `p+4 = 1*4 + p /\ p+5 = 1*4+(p+1) /\ p+6=1*4+(p+2) /\ p+7 = 1*4 + (p+3) /\ p+8 = 2*4 + p`;MOD_MULT_ADD]);
1767 COMMENT "change here";
1768 INTRO_TAC Terminal.vv_split_azim_generic [`v`;`4`;`p`;`2`;`3`];
1769 REWRITE_TAC[arith `SUC (x+k) = (x+k)+1`;arith `((p:num)+i)+j = p+(i+j)`];
1771 ASM_REWRITE_TAC[LET_THM];
1773 INTRO_TAC Terminal.vv_split_azim_generic [`v`;`4`;`p+2`;`2`;`3`];
1774 REWRITE_TAC[arith `SUC (x+k) = (x+k)+1`;arith `((p:num)+i)+j = p+(i+j)`];
1776 ASM_REWRITE_TAC[LET_THM];
1778 COMMENT "collinearity";
1779 TYPIFY `!i j. ~(v i = v j) ==> ~collinear {vec 0,v i, v j}` (C SUBGOAL_THEN ASSUME_TAC);
1780 REPEAT GEN_TAC THEN DISCH_TAC;
1781 MATCH_MP_TAC Zlzthic.PROPERTIES_GENERIC_LOCAL_FAN_ALT;
1782 GEXISTL_TAC [`V`;`E`;`FF`];
1783 BY(ASM_REWRITE_TAC[IN_IMAGE;IN_UNIV]);
1784 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> ~(v i = v j)` (C SUBGOAL_THEN ASSUME_TAC);
1785 BY(REPLICATE_TAC 10 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
1786 INTRO_TAC PERIODIC_INJ_MOD [`v`;`4`];
1787 ASM_REWRITE_TAC[arith `~(4 = 0)`];
1789 TYPIFY `azim (vec 0) (v (p+1)) (v((p+1)+1)) (v ((p+1)+3)) = azim (vec 0) (v (p+1)) (v (p+2)) (v p)` (C SUBGOAL_THEN ASSUME_TAC);
1790 BY(REWRITE_TAC[arith `(p+1)+i = p+(1+i)`] THEN NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[] THEN DISCH_TAC);
1791 TYPIFY `azim (vec 0) (v (p+1)) (v ((p+1)+1)) (v ((p+1)+3)) < pi` (C SUBGOAL_THEN MP_TAC);
1792 FIRST_X_ASSUM_ST `interior_angle1` ((unlist REWRITE_TAC) o GSYM);
1793 FIRST_X_ASSUM MATCH_MP_TAC;
1794 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
1796 ASM_REWRITE_TAC[] THEN DISCH_TAC;
1797 TYPIFY `&0 < azim (vec 0) (v (p+1)) (v ((p+1)+1)) (v ((p+1)+3))` (C SUBGOAL_THEN MP_TAC);
1798 BY(ASM_REWRITE_TAC[]);
1799 FIRST_X_ASSUM SUBST1_TAC THEN DISCH_TAC;
1800 TYPIFY `~coplanar {vec 0,v p,v (p+1),v (p+2)}` (C SUBGOAL_THEN ASSUME_TAC);
1801 ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,c,d,b}`];
1802 REWRITE_TAC[GSYM Local_lemmas1.AZIM_COND_FOR_COPLANAR];
1803 MATCH_MP_TAC (arith `&0 < x /\ x < pi ==> ~ ((x = &0) \/ (x = pi))`);
1804 BY((ASM_REWRITE_TAC[]));
1805 TYPIFY `!i a b. a < 4 /\ b < 4 /\ ~(a = b) ==> ~collinear {vec 0,v(i+a),v(i+b)}` (C SUBGOAL_THEN ASSUME_TAC);
1806 REPEAT WEAKER_STRIP_TAC;
1807 FIRST_X_ASSUM MP_TAC THEN REWRITE_TAC[];
1808 FIRST_X_ASSUM_ST `v (i MOD 4) = v i` ((unlist ONCE_REWRITE_TAC) o GSYM);
1809 REPEAT (FIRST_X_ASSUM MATCH_MP_TAC);
1811 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
1813 BY(REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[DIVISION;MOD_LT;arith `~(4=0)`]);
1815 BY(MESON_TAC[DIVISION;arith `~(4=0)`]);
1816 COMMENT "introduce deformation";
1817 INTRO_TAC Cuxvzoz.deform_simplex_edge_exists [`V`;`(\ (t:real). t)`;`(\(t:real). &0)`;`v (p)`;`v (p+1)`;`v (p +2)`;`&1`];
1819 REPEAT WEAKER_STRIP_TAC;
1820 FIRST_X_ASSUM MP_TAC;
1822 REWRITE_TAC[arith `&0 < &1`];
1824 INTRO_TAC Planarity.cross_dot_fully_surrounded_fan [`(vec 0):real^3`;`v (p+1)`;`v (p)`;`v(p+2)`];
1827 INTRO_TAC Planarity.notcoplanar_imp_notcollinear_fan [`(vec 0):real^3`;`v p`;`v (p+1)`;`v(p+2)`];
1828 BY(REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[SET_RULE `{a,b,c}={a,c,b}`]);
1829 MATCH_MP_TAC (arith `x = y ==> (&0 < x ==> y > &0)`);
1831 REPEAT ( GMATCH_SIMP_TAC REAL_CONTINUOUS_ON_EQ_REAL_CONTINUOUS_AT);
1832 REWRITE_TAC[Ocbicby.REAL_OPEN_REAL_INTERVAL];
1833 BY(REWRITE_TAC[REAL_CONTINUOUS_CONST;REAL_CONTINUOUS_AT_ID]);
1834 REPEAT WEAKER_STRIP_TAC;
1836 TYPIFY `~(scs_a_v39 s p (p+1) < dist(v p,v (p+1)) /\ dist(v p,v (p+1)) < scs_b_v39 s p (p+1))` ENOUGH_TO_SHOW_TAC;
1837 FIRST_X_ASSUM_ST `scs_a_v39` (C INTRO_TAC [`p`;`(p+1)`]);
1839 REPEAT WEAKER_STRIP_TAC;
1840 TYPIFY `(!i t. abs t < e' ==> norm (f (v i) t) = norm (v i))` (C SUBGOAL_THEN ASSUME_TAC);
1841 REPEAT WEAKER_STRIP_TAC;
1842 TYPIFY `v i = v (p+1)` ASM_CASES_TAC;
1844 FIRST_X_ASSUM_ST `norm` (C INTRO_TAC [`t`]);
1845 BY(ASM_REWRITE_TAC[] THEN MESON_TAC[]);
1846 FIRST_X_ASSUM GMATCH_SIMP_TAC;
1847 BY(ASM_REWRITE_TAC[]);
1848 TYPIFY `!i. 0 < i /\ i < 4 ==> ~(v (p + i) = v p)` (C SUBGOAL_THEN ASSUME_TAC);
1849 REPEAT WEAKER_STRIP_TAC;
1850 FIRST_X_ASSUM MP_TAC;
1852 GEN_REWRITE_TAC (RAND_CONV o RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV) [arith `p = p+0`];
1853 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
1855 BY(REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[DIVISION;MOD_LT;arith `~(4=0)`;arith `0 < i ==> ~(i=0)`]);
1856 TYPIFY `!i. i=0 \/ i = 2 \/ i = 3 ==> ~(v (p + i) = v (p+1))` (C SUBGOAL_THEN ASSUME_TAC);
1857 BY(REPEAT STRIP_TAC THEN FIRST_X_ASSUM MP_TAC THEN ASM_REWRITE_TAC[] THEN GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT THEN NUM_REDUCE_TAC);
1858 TYPIFY `!i j (k:num). v i = v j ==> v (i+k) = v (j+k)` (C SUBGOAL_THEN ASSUME_TAC);
1860 REPEAT WEAKER_STRIP_TAC;
1861 ONCE_REWRITE_TAC[arith `(i:num) + k = k + i`];
1862 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
1863 BY(ASM_REWRITE_TAC[arith `~(4 = 0)`]);
1864 TYPIFY `!t. azim (vec 0) (f (v (p+3)) t) (f (v (p)) t) (f (v (p+2)) t) = azim(vec 0) (v(p+3)) (v(p)) (v(p+2))` (C SUBGOAL_THEN ASSUME_TAC);
1866 FIRST_X_ASSUM_ST `~(w = v (p+1)) ==> a` (REPEAT o GMATCH_SIMP_TAC);
1867 ONCE_REWRITE_TAC[arith `(v p = (v:num->real^3) (p+1)) <=> (v(p+1) = v p)`];
1868 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
1869 TYPIFY `!i. azim (vec 0) (v i) (v (i+1)) (v (i+3)) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
1871 FIRST_X_ASSUM_ST `interior_angle1` ((unlist REWRITE_TAC) o GSYM);
1872 MATCH_MP_TAC Local_lemmas.CONVEX_LOFA_IMP_INANGLE_LE_PI;
1873 BY(ASM_REWRITE_TAC[]);
1874 TYPIFY `(!i. ?e0. &0 < e0 /\ (azim (vec 0) (v i) (v (i + 1)) (v (i + 3)) = pi ==> (!t. abs t < e0 ==> azim (vec 0) (f (v i) t) (f (v (i + 1)) t) (f (v (i + 3)) t) <= pi)))` (C SUBGOAL_THEN ASSUME_TAC);
1876 TYPIFY `v i = v (p+3)` ASM_CASES_TAC;
1877 FIRST_ASSUM (fun t -> FIRST_X_ASSUM (ASSUME_TAC o (C MATCH_MP t)));
1878 TYPIFY `&1` EXISTS_TAC;
1879 ASM_REWRITE_TAC[arith `&0 < &1`;arith `(p+3)+k = p + (3+k)`];
1880 NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[];
1882 TYPIFY `azim (vec 0) (v i) (v (i + 1)) (v (i + 3)) < pi` ENOUGH_TO_SHOW_TAC;
1883 BY(MESON_TAC[arith `x < pi ==> ~(x = pi)`;arith `&0 < &1`]);
1884 BY(ASM_MESON_TAC[]);
1885 (COMMENT "deformation in BBs");
1886 INTRO_TAC Cuxvzoz.deformation_BBs_ALT [`s`;`4`;`f`;`v`;`e'`];
1890 MATCH_MP_TAC ab4_assumption_reduction_sym;
1891 GEXISTL_TAC [`p`;`e'`];
1894 REPEAT WEAKER_STRIP_TAC;
1895 FIRST_X_ASSUM_ST `scs_diag` (C INTRO_TAC [`i`;`j`]);
1896 BY(ASM_REWRITE_TAC[] THEN REAL_ARITH_TAC);
1897 REPEAT WEAKER_STRIP_TAC;
1898 (FIRST_X_ASSUM_ST `norm` (C INTRO_TAC [`t`]));
1899 BY(ASM_REWRITE_TAC[DIST_SYM] THEN REAL_ARITH_TAC);
1900 (REPEAT WEAKER_STRIP_TAC);
1901 COMMENT "azim sums";
1902 INTRO_TAC deform_azim_sum [`v (p)`;`v (p+1)`;`v (p+2)`;`v(p+3)`;`f`;`e'`];
1904 REPEAT (FIRST_X_ASSUM_ST `c = a + b` MP_TAC) THEN ASM_REWRITE_TAC[];
1905 REPLICATE_TAC 3 DISCH_TAC;
1907 MATCH_MP_TAC Zlzthic.deformation_subset;
1908 (TYPIFY `V` EXISTS_TAC THEN ASM_REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY]);
1909 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
1910 TYPIFY `~collinear {vec 0, v (p + 0), v (p+1)} /\ ~collinear {vec 0, v (p + 0), v (p + 2)} /\ ~collinear {vec 0, v (p + 0), v (p + 3)}` (C SUBGOAL_THEN MP_TAC);
1911 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
1912 REWRITE_TAC[arith `p+0=p`] THEN DISCH_THEN (unlist REWRITE_TAC);
1914 BY(FIRST_X_ASSUM_ST `SUC` MP_TAC THEN REWRITE_TAC[arith `SUC p = p+1`] THEN DISCH_THEN (unlist REWRITE_TAC));
1915 FIRST_X_ASSUM (SUBST1_TAC) THEN REWRITE_TAC[];
1916 REPLICATE_TAC 3 (FIRST_X_ASSUM kill);
1919 FIRST_X_ASSUM_ST `interior_angle1` ((unlist REWRITE_TAC) o GSYM);
1921 FIRST_X_ASSUM MATCH_MP_TAC;
1922 GEN_REWRITE_TAC (RAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV) [arith `p = p+0`];
1923 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
1928 FIRST_X_ASSUM_ST `~(w = v p) ==> a` (REPEAT o GMATCH_SIMP_TAC);
1930 TYPIFY `p MOD 4 = (p+0) MOD 4` (C SUBGOAL_THEN SUBST1_TAC);
1931 BY(REWRITE_TAC[arith `p+0 = p`]);
1932 BY(REPEAT CONJ_TAC THEN GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT THEN NUM_REDUCE_TAC);
1933 REWRITE_TAC[Zlzthic.azim_lt_pi_cross];
1934 TYPIFY `(v (p) cross v (p+1)) dot v (p + 2) = (v (p+1) cross (v (p+2))) dot v (p)` (C SUBGOAL_THEN SUBST1_TAC);
1936 REWRITE_TAC[GSYM Zlzthic.azim_lt_pi_cross];
1937 BY(ASM_REWRITE_TAC[]);
1938 (REPEAT WEAKER_STRIP_TAC);
1939 INTRO_TAC deform_azim_sum [`v (p+2)`;`v (p+3)`;`v (p)`;`v(p+1)`;`f`;`e'`];
1941 REPEAT (FIRST_X_ASSUM_ST `c = a + b` MP_TAC) THEN ASM_REWRITE_TAC[];
1942 REPLICATE_TAC 3 DISCH_TAC;
1944 MATCH_MP_TAC Zlzthic.deformation_subset;
1945 (TYPIFY `V` EXISTS_TAC THEN ASM_REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY]);
1946 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
1947 TYPIFY `~collinear {vec 0, v (p + 2), v (p + 3)} /\ ~collinear {vec 0, v (p + 2), v (p + 0)} /\ ~collinear {vec 0, v (p + 2), v (p + 1)}` (C SUBGOAL_THEN MP_TAC);
1948 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
1949 REWRITE_TAC[arith `p+0=p`] THEN DISCH_THEN (unlist REWRITE_TAC);
1951 BY(ASM_REWRITE_TAC[]);
1952 FIRST_X_ASSUM (SUBST1_TAC) THEN REWRITE_TAC[];
1953 REPLICATE_TAC 4 (FIRST_X_ASSUM kill);
1955 TYPIFY_GOAL_THEN `&0 < azim (vec 0) (v (p + 2)) (v (p + 3)) (v (p+1)) /\ azim (vec 0) (v (p + 2)) (v (p + 3)) (v (p+1)) < pi` (unlist REWRITE_TAC);
1956 FIRST_X_ASSUM_ST `&0 < azim a b c d` (C INTRO_TAC [`p+2`]);
1957 TYPIFY `azim (vec 0) (v (p+2)) (v (p+3)) (v (p+1)) = azim (vec 0) (v (p + 2)) (v ((p + 2) + 1)) (v ((p + 2) + 3))` (C SUBGOAL_THEN ASSUME_TAC);
1958 BY(REWRITE_TAC[arith `((p:num) + i) + j = p + i+j`] THEN NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[]);
1960 DISCH_THEN (unlist REWRITE_TAC);
1961 FIRST_X_ASSUM_ST `interior_angle1` ((unlist REWRITE_TAC) o GSYM);
1963 FIRST_X_ASSUM MATCH_MP_TAC;
1964 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
1969 FIRST_X_ASSUM_ST `~(w = v (p+1)) ==> a` (REPEAT o GMATCH_SIMP_TAC);
1971 TYPIFY `p MOD 4 = (p+0) MOD 4` (C SUBGOAL_THEN SUBST1_TAC);
1972 BY(REWRITE_TAC[arith `p + 0 = p`]);
1973 BY(REPEAT CONJ_TAC THEN GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT THEN NUM_REDUCE_TAC);
1974 REWRITE_TAC[Zlzthic.azim_lt_pi_cross];
1975 TYPIFY `(v (p + 2) cross v (p)) dot v (p+1) = (v (p+1) cross (v (p+2))) dot v (p)` (C SUBGOAL_THEN SUBST1_TAC);
1977 REWRITE_TAC[GSYM Zlzthic.azim_lt_pi_cross];
1978 BY(ASM_REWRITE_TAC[]);
1979 (REPEAT WEAKER_STRIP_TAC);
1980 TYPIFY `?e3. &0 < e3 /\ (!t. abs t < e3 ==> dist(v p,v (p+1)) + t IN real_interval(scs_a_v39 s p (p+1),scs_b_v39 s p (p+1)))` (C SUBGOAL_THEN MP_TAC);
1981 INTRO_TAC Zlzthic.real_interval_contains_0_ball [`scs_a_v39 s p (p+1)-dist(v p,v (p+1))`;`scs_b_v39 s p (p+1) - dist(v p,v (p+1))`;`&1`];
1982 ASM_REWRITE_TAC[arith `&0 < &1`;arith `a - d < &0 <=> a < d`;arith `&0 < b - d <=> d < b`];
1983 REPEAT WEAKER_STRIP_TAC;
1984 TYPIFY `e` EXISTS_TAC;
1985 ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
1986 FIRST_X_ASSUM (C INTRO_TAC [`t`]);
1987 ASM_REWRITE_TAC[IN_REAL_INTERVAL];
1989 REPEAT WEAKER_STRIP_TAC;
1990 (COMMENT "coplanar");
1991 INTRO_TAC Zlzthic.NONPLANAR_OPEN [`(\ (t:real). (vec 0):real^3)`;`\ (t:real). (v p)`;`f( v (p+1))`;`\ (t:real). v (p+2)`;`&0`];
1992 ASM_REWRITE_TAC[CONTINUOUS_CONST];
1993 DISCH_THEN MP_TAC THEN ANTS_TAC;
1994 FIRST_X_ASSUM_ST `deformation` MP_TAC THEN REWRITE_TAC[Localization.deformation] THEN REPEAT WEAKER_STRIP_TAC;
1996 BY(FIRST_X_ASSUM MATCH_MP_TAC THEN ASM_REWRITE_TAC[]);
1997 POP_ASSUM GMATCH_SIMP_TAC;
1998 BY(ASM_REWRITE_TAC[]);
1999 REWRITE_TAC[arith `abs (&0 - t') = abs t'`] THEN REPEAT WEAKER_STRIP_TAC;
2000 INTRO_TAC Zlzthic.WNWSHJT [`v(p)`;`v (p+1)`;`v (p+2)`;`f`;`-- e'`;`e'`];
2004 MATCH_MP_TAC Zlzthic.deformation_subset;
2005 (TYPIFY `V` EXISTS_TAC THEN ASM_REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY]);
2006 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
2007 FIRST_X_ASSUM_ST `deformation` MP_TAC THEN REWRITE_TAC[Localization.deformation];
2008 REPEAT WEAKER_STRIP_TAC;
2009 FIRST_X_ASSUM (REPEAT o GMATCH_SIMP_TAC) THEN ASM_REWRITE_TAC[];
2010 TYPIFY `!i. ~(i=1) /\ i < 3 ==> ~collinear {vec 0,v (p+1),v(p+i)}` ENOUGH_TO_SHOW_TAC;
2011 BY(MESON_TAC[arith `p+0=p` ;arith `~(0=1) /\ 0 < 3 /\ ~(2=1) /\ 2 < 3`]);
2012 GEN_TAC THEN DISCH_TAC;
2013 FIRST_X_ASSUM MATCH_MP_TAC;
2014 BY(POP_ASSUM MP_TAC THEN ARITH_TAC);
2015 REPEAT WEAKER_STRIP_TAC;
2016 COMMENT "introduce 1834";
2017 INTRO_TAC Iunbuig.epsilon_hept [`e`;`e'`;`e''`;`e'''`;`e3`;`e1`;`e1'`] THEN ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
2018 FIRST_ASSUM_ST `i = 0 \/ i = 2 \/ i = 3` MP_TAC;
2019 FIRST_ASSUM_ST `i MOD 4 = j MOD 4` (unlist REWRITE_TAC);
2021 INTRO_TAC (UNDISCH Ocbicby.LEMMA_1834976363) [`norm (v (p+2))`;`norm (v (p))`;`norm (v (p+1))`;`dist(v (p),v(p+1))`;`dist (v(p+2),v(p+1))`;`dist(v (p+2),v (p))`;`dist(v (p),v (p+1)) - e7`;`dist(v (p),v(p+1)) + e7`];
2024 (COMMENT "1834 ants");
2025 TYPIFY `!i. &2 <= norm (v i) /\ norm (v i) <= &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
2027 REWRITE_TAC[GSYM Fnjlbxs.in_ball_annulus];
2028 FIRST_X_ASSUM_ST `BBs_v39` kill THEN FIRST_X_ASSUM_ST `BBs_v39` MP_TAC THEN REWRITE_TAC[Appendix.BBs_v39;LET_THM] THEN EXPAND_TAC "V" THEN REPEAT WEAKER_STRIP_TAC;
2029 FIRST_X_ASSUM_ST `ball_annulus` MP_TAC;
2030 REWRITE_TAC[SUBSET;IN_IMAGE;IN_UNIV];
2033 FIRST_ASSUM_ST `collinear` (C INTRO_TAC [`p`;`2`;`0`]);
2034 FIRST_X_ASSUM_ST `collinear` (C INTRO_TAC [`p`;`2`;`1`]);
2036 REWRITE_TAC[arith `p + 0 = p`];
2037 REPEAT WEAKER_STRIP_TAC;
2038 TYPIFY_GOAL_THEN `&0 < ups_x (norm (v (p + 2)) * norm (v (p + 2))) (norm (v p) * norm (v p)) (dist (v (p + 2),v p) * dist (v (p + 2),v p)) /\ &0 < ups_x (norm (v (p + 2)) * norm (v (p + 2))) (norm (v (p + 1)) * norm (v (p + 1))) (dist (v (p + 2),v (p + 1)) * dist (v (p + 2),v (p + 1)))` (unlist REWRITE_TAC);
2039 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC);
2040 REWRITE_TAC[Collect_geom2.NOT_COL_EQ_UPS_X_POS;DIST_0;DIST_SYM;arith`x pow 2 = x*x`];
2042 TYPIFY `!i j. &2 <= dist(v i,v j) ==> (&2 / h0) pow 2 <= xrr (norm(v i)) (norm(v (j))) (dist (v i,v j))` ((C SUBGOAL_THEN ASSUME_TAC));
2043 REPEAT WEAKER_STRIP_TAC;
2044 MATCH_MP_TAC Ocbicby.xrr_simple_lower_bound;
2045 BY(ASM_REWRITE_TAC[arith `x <= x`]);
2047 POP_ASSUM MATCH_MP_TAC;
2048 MATCH_MP_TAC Ocbicby.scs_lb_2;
2049 TYPIFY `s` EXISTS_TAC;
2051 GEN_REWRITE_TAC (RAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV) [arith `p = p+0`];
2052 FIRST_X_ASSUM MATCH_MP_TAC;
2055 TYPIFY `#15.53 = sqrt(#15.53) pow 2` (C SUBGOAL_THEN SUBST1_TAC);
2056 GMATCH_SIMP_TAC SQRT_POW_2;
2058 MATCH_MP_TAC Ocbicby.xrr_simple_upper_bound;
2060 TYPIFY `&4 = sqrt(&16)` (C SUBGOAL_THEN SUBST1_TAC);
2061 REWRITE_TAC[arith `&16 = &4 pow 2`];
2062 REWRITE_TAC[POW_2_SQRT_ABS];
2064 GMATCH_SIMP_TAC SQRT_MONO_LT_EQ;
2065 TYPIFY_GOAL_THEN `&0 <= #15.53 /\ &0 < &16 /\ #15.53 < &16` (unlist REWRITE_TAC);
2070 MATCH_MP_TAC Ocbicby.scs_lb_2;
2071 TYPIFY `s` EXISTS_TAC;
2073 GEN_REWRITE_TAC (RAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV) [arith `p = p+0`];
2074 FIRST_X_ASSUM MATCH_MP_TAC;
2076 MATCH_MP_TAC REAL_LE_TRANS;
2077 TYPIFY `cstab` EXISTS_TAC;
2079 MATCH_MP_TAC (arith `d <= scs_b_v39 s p (p+1) /\ scs_b_v39 s p (p+1) <= cstab ==> d <= cstab`);
2081 FIRST_X_ASSUM_ST `BBs_v39` kill;
2082 (FIRST_X_ASSUM_ST `BBs_v39` MP_TAC) THEN REWRITE_TAC[Appendix.BBs_v39;LET_THM];
2084 FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39];
2085 ASM_REWRITE_TAC[arith `3 < 4`;arith `SUC i = i+1`];
2087 REWRITE_TAC[Sphere.cstab];
2088 MATCH_MP_TAC REAL_LE_RSQRT;
2091 FIRST_X_ASSUM MATCH_MP_TAC;
2092 MATCH_MP_TAC Ocbicby.scs_lb_2;
2093 TYPIFY `s` EXISTS_TAC;
2095 BY(GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT THEN NUM_REDUCE_TAC);
2097 FIRST_X_ASSUM MATCH_MP_TAC;
2098 MATCH_MP_TAC Ocbicby.scs_lb_2;
2099 TYPIFY `s` EXISTS_TAC;
2101 GEN_REWRITE_TAC (RAND_CONV o RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV) [arith `p = p+0`];
2102 BY(GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT THEN NUM_REDUCE_TAC);
2104 REWRITE_TAC[IN_REAL_INTERVAL];
2105 BY(FIRST_X_ASSUM_ST `&0 < e` MP_TAC THEN REAL_ARITH_TAC);
2106 COMMENT "subset constraints";
2108 REWRITE_TAC[SUBSET;IN_REAL_INTERVAL;IN_ELIM_THM];
2109 REPEAT WEAKER_STRIP_TAC;
2110 TYPIFY `?t. abs t < e7 /\ x = dist(v p,v(p+1)) + t` (C SUBGOAL_THEN MP_TAC);
2111 TYPIFY `x - dist(v p,v(p+1))` EXISTS_TAC;
2114 BY(REPLICATE_TAC 2 (POP_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2115 REPEAT WEAKER_STRIP_TAC;
2117 FIRST_X_ASSUM_ST `norm (f (v (p+1)) t) = norm (v (p+1))` (C INTRO_TAC [`t`]);
2119 BY(REPEAT (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[]);
2120 REWRITE_TAC[DIST_SYM] THEN ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN REPEAT WEAKER_STRIP_TAC THEN ASM_REWRITE_TAC[];
2121 FIRST_X_ASSUM_ST `coplanar` (C INTRO_TAC [`t`]);
2123 BY(REPEAT (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[]);
2125 FIRST_ASSUM MP_TAC THEN ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,d,b,c}`] THEN REWRITE_TAC[Oxlzlez.coplanar_delta_y;DIST_0;DIST_SYM];
2126 RULE_ASSUM_TAC (REWRITE_RULE[arith `d + &0 = d`]);
2128 DISCH_THEN (unlist REWRITE_TAC);
2129 REWRITE_TAC[GSYM DIST_NZ];
2132 FIRST_X_ASSUM_ST `coplanar` MP_TAC;
2133 BY(ASM_REWRITE_TAC[SET_RULE `{a,b,b,c} = {a,b,c}`;COPLANAR_3]);
2134 TYPIFY `~collinear {vec 0, (v p) ,f (v (p+1)) t}` (C SUBGOAL_THEN MP_TAC);
2135 BY(POP_ASSUM MP_TAC THEN MESON_TAC[Planarity.notcoplanar_imp_notcollinear_fan]);
2136 REWRITE_TAC[Collect_geom2.NOT_COL_EQ_UPS_X_POS];
2137 BY(REWRITE_TAC[DIST_0;arith `x pow 2 = x*x`;DIST_SYM]);
2138 TYPIFY `!i. i < 2 ==> &0 < dist ( v (p+2),v (p+i))` ENOUGH_TO_SHOW_TAC;
2139 BY(MESON_TAC[arith `p + 0 = (p:num)`;arith `0 < 2`;arith `1 < 2`]);
2140 REPEAT WEAKER_STRIP_TAC;
2141 MATCH_MP_TAC (arith `&2 <= x ==> &0 < x`);
2142 MATCH_MP_TAC Ocbicby.scs_lb_2;
2143 TYPIFY `s` EXISTS_TAC;
2145 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT THEN NUM_REDUCE_TAC;
2146 BY(FIRST_X_ASSUM MP_TAC THEN REWRITE_TAC[arith `i < 2 <=> i = 0 \/ i = 1`] THEN DISCH_TAC THEN REPEAT (FIRST_X_ASSUM DISJ_CASES_TAC) THEN ASM_REWRITE_TAC[] THEN NUM_REDUCE_TAC);
2147 REPEAT WEAKER_STRIP_TAC;
2149 TYPIFY `?t. abs t < e7 /\ y4' = dist(v p,v(p+1)) + t` (C SUBGOAL_THEN MP_TAC);
2150 TYPIFY `y4' - dist(v p,v(p+1))` EXISTS_TAC;
2153 BY(REPLICATE_TAC 2 (POP_ASSUM MP_TAC) THEN REWRITE_TAC[IN_REAL_INTERVAL] THEN REAL_ARITH_TAC);
2154 REPEAT WEAKER_STRIP_TAC;
2155 FIRST_X_ASSUM_ST `taum` MP_TAC;
2157 REWRITE_TAC[arith `~(x < y) <=> (y <= x)`];
2158 FIRST_X_ASSUM_ST `norm (f (v p) t) = norm (v p)` (C INTRO_TAC [`t`]);
2160 BY(REPEAT (FIRST_X_ASSUM MATCH_MP_TAC) THEN ASM_REWRITE_TAC[]);
2161 (REWRITE_TAC[DIST_SYM;arith `d + &0 = d`] THEN REPEAT WEAKER_STRIP_TAC THEN ASM_REWRITE_TAC[]);
2162 COMMENT "back to root, next tau";
2163 TYPIFY `sum {i | i < 4} (\i. rho_fun (norm (v i)) * azim (vec 0) (v i) (v (i + 1)) (v (i + 4 - 1))) <= sum {i | i < 4} (\i. rho_fun (norm (f (v i) t)) * azim (vec 0) (f (v i) t) (f(v(i+1)) t) (f (v (i + 4 - 1)) t))` (C SUBGOAL_THEN ASSUME_TAC);
2164 REPEAT WEAKER_STRIP_TAC;
2165 MATCH_MP_TAC Cuxvzoz.MMs_minimize_tau_fun;
2166 TYPIFY `s` EXISTS_TAC;
2167 ASM_REWRITE_TAC[arith `3 < 4`];
2168 FIRST_X_ASSUM MATCH_MP_TAC;
2169 BY(FIRST_X_ASSUM MATCH_MP_TAC THEN ASM_REWRITE_TAC[]);
2171 TYPIFY `{i | i < 4} = 0..(4-1)` (C SUBGOAL_THEN SUBST1_TAC);
2172 BY(REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_NUMSEG] THEN ARITH_TAC);
2173 REPEAT ( GMATCH_SIMP_TAC (GSYM Oxl_def.periodic_sum));
2174 TYPIFY `p` EXISTS_TAC;
2177 FIRST_ASSUM_ST `periodic` MP_TAC THEN REWRITE_TAC[Oxl_def.periodic];
2178 REWRITE_TAC[arith `(i+4)+k = (i+k)+4`];
2179 BY(DISCH_THEN (unlist REWRITE_TAC));
2180 TYPIFY `p` EXISTS_TAC;
2183 FIRST_ASSUM_ST `periodic` MP_TAC THEN REWRITE_TAC[Oxl_def.periodic];
2184 REWRITE_TAC[arith `(i+4)+k = (i+k)+4`];
2185 BY(DISCH_THEN (unlist REWRITE_TAC));
2187 REWRITE_TAC[arith `3+p = SUC(SUC(SUC p))`;SUM_CLAUSES_NUMSEG;SUM_SING_NUMSEG;arith `p <= SUC p /\ p <= SUC (SUC p) /\ p <= SUC(SUC(SUC p))`];
2188 REWRITE_TAC[arith `SUC i = i+1`;arith `(i + j) + (k:num) = i+(j+k)`];
2191 REPLICATE_TAC 7 (FIRST_X_ASSUM (C INTRO_TAC [`t`])) THEN ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
2192 REPEAT (FIRST_X_ASSUM (C INTRO_TAC [`t`])) THEN ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
2193 FIRST_X_ASSUM_ST `rho_fun` MP_TAC THEN ASM_REWRITE_TAC[Appendix.rho_rho_fun];
2194 TYPIFY `f (v(p+0)) t = v(p+0) /\ f (v (p+2)) t = v(p+2) /\ f(v (p+3)) t = v(p+3)` (C SUBGOAL_THEN MP_TAC);
2195 FIRST_X_ASSUM_ST `~(w = v p) ==> a` (REPEAT o GMATCH_SIMP_TAC);
2196 BY(ASM_REWRITE_TAC[] THEN REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
2197 REWRITE_TAC[arith `p + 0 = p`] THEN DISCH_TAC;
2198 POP_ASSUM (fun t -> ASM_TAC THEN unlist REWRITE_TAC t THEN REPEAT DISCH_TAC THEN ASSUME_TAC t);
2199 FIRST_X_ASSUM_ST `azim` MP_TAC;
2200 FIRST_X_ASSUM_ST `azim` MP_TAC THEN BURY_MP_TAC;
2201 FIRST_ASSUM_ST `azim` ((unlist REWRITE_TAC) o GSYM);
2202 FIRST_ASSUM_ST ` azim (vec 0) (v p) (f (v (p + 1)) t) (v (p + 3))` ((unlist REWRITE_TAC) o GSYM);
2203 REWRITE_TAC[arith `(a+b)+c = a + b + c`];
2204 FIRST_X_ASSUM_ST `SUC` MP_TAC THEN REWRITE_TAC[arith `SUC p = p+1`];
2205 DISCH_THEN (SUBST1_TAC );
2206 REWRITE_TAC[arith `r0 * (a012+a023) + r1 * (a120) + r2 * (a230+a201) + r3 * (a302) <= r0 * (f012+a023) + r1 * (f120) + r2 * (a230+f201) + r3 *(a302) <=> r0 * a012 + r1*a120 + r2* a201 <= r0 * f012 + r1 * f120 + r2 * f201`];
2207 MATCH_MP_TAC (arith `a - (pi+sol0) = a' /\ b - (pi+sol0) = b' ==> (a <= b ==> a' <= b')`);
2208 REWRITE_TAC[arith `(a + b+c) - (pi + sol0) = a + b + c - (pi + sol0)`];
2210 ONCE_REWRITE_TAC[arith `a + b + c - p = b + c + a - p`];
2211 GMATCH_SIMP_TAC (GSYM Cuxvzoz.tau3_azim);
2212 GMATCH_SIMP_TAC Cuxvzoz.tau3_taum_nonplanar;
2213 ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,d,b,c}`];
2216 REWRITE_TAC[DIST_SYM];
2217 BY(MESON_TAC[Terminal.taum_sym]);
2218 FIRST_X_ASSUM_ST `a <= pi` kill;
2219 FIRST_X_ASSUM_ST `a <= pi` (C INTRO_TAC [`p+1`]);
2220 BY(REWRITE_TAC[arith `(p+1)+k = p + (1 +k)`] THEN NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[]);
2221 FIRST_X_ASSUM_ST `norm a = norm b` (SUBST1_TAC o GSYM);
2222 FIRST_X_ASSUM_ST `dist s + t` (SUBST1_TAC o GSYM);
2223 ONCE_REWRITE_TAC[arith `a + b + c - p = b + c + a - p`];
2224 GMATCH_SIMP_TAC (GSYM Cuxvzoz.tau3_azim);
2225 GMATCH_SIMP_TAC Cuxvzoz.tau3_taum_nonplanar;
2226 REWRITE_TAC[DIST_SYM];
2227 REWRITE_TAC[CONJ_ASSOC] THEN CONJ2_TAC;
2228 ASM_REWRITE_TAC[DIST_SYM];
2229 BY(MESON_TAC[Terminal.taum_sym]);
2230 ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d} = {a,d,b,c}`];
2232 BY(FIRST_X_ASSUM_ST `azim (vec 0) (f (v (p+1)) t) (v (p + 2)) (v (p)) < pi` MP_TAC THEN REAL_ARITH_TAC)
2236 let JOTSWIX = prove_by_refinement(
2237 `main_nonlinear_terminal_v11 ==>
2239 IMAGE (\i. (v i,v (SUC i))) (:num) = FF /\
2245 scs_a_v39 s p (p+1) < cstab /\
2246 (!i j. scs_diag 4 i j ==> scs_a_v39 s i j <= cstab /\ cstab < dist(v i,v j) /\ &4 * h0 < scs_b_v39 s i j) /\
2247 (!i. ~(i MOD 4 = (p+2) MOD 4) ==> interior_angle1 (vec 0) FF (v i) < pi) /\
2248 (xrr (norm (v (p+3))) (norm (v (p+1))) (dist(v (p+3),v(p+1))) <= #15.53)
2249 ==> (dist(v p,v(p+1)) < cstab \/ dist(v p,v(p+3)) < cstab))`,
2252 REPEAT WEAKER_STRIP_TAC;
2253 MATCH_MP_TAC (arith `~((cstab <= d) /\ (cstab <= d')) ==> (d < cstab \/ d' < cstab)`);
2254 REPEAT WEAKER_STRIP_TAC;
2255 TYPIFY `BBprime2_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
2256 BY(ASM_MESON_TAC[Appendix.scs_basic;Ayqjtmd.unadorned_MMs]);
2257 TYPIFY `BBprime_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
2258 BY(ASM_MESON_TAC[Appendix.BBprime2_v39]);
2259 TYPIFY `BBs_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
2260 BY(ASM_MESON_TAC[Appendix.BBprime_v39]);
2261 INTRO_TAC Appendix.BBs_v39 [`s`;`v`];
2262 ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;Terminal.IMAGE_SUBSET_IN;IN_UNIV;arith `~(4 <= 3)`];
2263 REPEAT WEAKER_STRIP_TAC;
2264 TYPED_ABBREV_TAC `V = IMAGE v (:num)`;
2265 TYPED_ABBREV_TAC `E = IMAGE (\i. {v i, v (SUC i)}) (:num)`;
2266 TYPIFY `local_fan (V,E,FF)` (C SUBGOAL_THEN ASSUME_TAC);
2267 MATCH_MP_TAC Local_lemmas.CVX_LO_IMP_LO;
2268 BY(ASM_REWRITE_TAC[]);
2269 TYPIFY `!i. v i IN V` (C SUBGOAL_THEN ASSUME_TAC);
2270 REPEAT WEAKER_STRIP_TAC;
2272 REWRITE_TAC[IN_IMAGE;IN_UNIV];
2274 INTRO_TAC Cuxvzoz.BBs_inj [`s`;`v`;`4`];
2277 TYPIFY `!i. interior_angle1 (vec 0) FF (v i) = azim (vec 0) (v i) (v (i+1)) (v (i+3))` (C SUBGOAL_THEN ASSUME_TAC);
2280 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] (GSYM Ocbicby.INTERIOR_ANGLE1_AZIM));
2281 TYPIFY `s` EXISTS_TAC;
2282 BY(ASM_REWRITE_TAC[IN;arith `4 - 1 = 3`;arith `3 < 4`;arith `SUC i = i+1`]);
2283 INTRO_TAC Ocbicby.LOCAL_FAN_AZIM_POS [`s`;`v`];
2284 ASM_REWRITE_TAC[LET_THM;IN;arith `4-1 = 3`;arith `SUC i = i+1`];
2286 TYPIFY `!i. v (i MOD 4) = v i` (C SUBGOAL_THEN ASSUME_TAC);
2288 MATCH_MP_TAC (GSYM Oxl_def.periodic_mod);
2289 BY(ASM_REWRITE_TAC[arith `~(0=4)`]);
2290 TYPIFY `v 4 = v 0 /\ v 5 = v 1 /\ v 6 = v 2 /\ v 7 = v 3 /\ v 8 = v 4` (C SUBGOAL_THEN ASSUME_TAC);
2291 FIRST_X_ASSUM ((unlist ONCE_REWRITE_TAC) o GSYM);
2292 BY(REWRITE_TAC[Terminal.MOD_4_EXPLICIT;arith `7 = 1*4 + 3`;arith `8 = 2*4 + 0`;MOD_MULT_ADD]);
2293 TYPIFY `generic V E` (C SUBGOAL_THEN ASSUME_TAC);
2294 BY(FIRST_X_ASSUM_ST `scs_generic` MP_TAC THEN ASM_REWRITE_TAC[Appendix.scs_generic]);
2295 TYPIFY `v (p+4) = v p /\ v (p+5) = v (p+1) /\ v (p+6) = v (p+2) /\ v (p+7) = v (p+3) /\ v (p+8) = v (p)` (C SUBGOAL_THEN ASSUME_TAC);
2296 FIRST_X_ASSUM_ST `MOD` ((unlist ONCE_REWRITE_TAC) o GSYM);
2297 BY(REWRITE_TAC[arith `p+4 = 1*4 + p /\ p+5 = 1*4+(p+1) /\ p+6=1*4+(p+2) /\ p+7 = 1*4 + (p+3) /\ p+8 = 2*4 + p`;MOD_MULT_ADD]);
2298 INTRO_TAC Terminal.vv_split_azim_generic [`v`;`4`;`p+3`;`2`;`3`];
2299 REWRITE_TAC[arith `SUC (x+k) = (x+k)+1`;arith `((p:num)+i)+j = p+(i+j)`];
2301 ASM_REWRITE_TAC[LET_THM];
2303 INTRO_TAC Terminal.vv_split_azim_generic [`v`;`4`;`p+1`;`2`;`3`];
2304 REWRITE_TAC[arith `SUC (x+k) = (x+k)+1`;arith `((p:num)+i)+j = p+(i+j)`];
2306 ASM_REWRITE_TAC[LET_THM];
2308 COMMENT "collinearity";
2309 TYPIFY `!i j. ~(v i = v j) ==> ~collinear {vec 0,v i, v j}` (C SUBGOAL_THEN ASSUME_TAC);
2310 REPEAT GEN_TAC THEN DISCH_TAC;
2311 MATCH_MP_TAC Zlzthic.PROPERTIES_GENERIC_LOCAL_FAN_ALT;
2312 GEXISTL_TAC [`V`;`E`;`FF`];
2313 BY(ASM_REWRITE_TAC[IN_IMAGE;IN_UNIV]);
2314 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> ~(v i = v j)` (C SUBGOAL_THEN ASSUME_TAC);
2315 BY(REPLICATE_TAC 10 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
2316 INTRO_TAC PERIODIC_INJ_MOD [`v`;`4`];
2317 ASM_REWRITE_TAC[arith `~(4 = 0)`];
2319 TYPIFY `azim (vec 0) (v p) (v (p+1)) (v (p+3)) < pi` (C SUBGOAL_THEN ASSUME_TAC);
2320 FIRST_X_ASSUM_ST `interior_angle1` ((unlist REWRITE_TAC) o GSYM);
2321 FIRST_X_ASSUM MATCH_MP_TAC;
2322 GEN_REWRITE_TAC(RAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[arith`p = p+0`];
2323 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
2325 TYPIFY `~coplanar {vec 0,v p,v (p+1),v (p+3)}` (C SUBGOAL_THEN ASSUME_TAC);
2326 REWRITE_TAC[GSYM Local_lemmas1.AZIM_COND_FOR_COPLANAR];
2327 MATCH_MP_TAC (arith `&0 < x /\ x < pi ==> ~ ((x = &0) \/ (x = pi))`);
2328 BY(ASM_REWRITE_TAC[]);
2329 TYPIFY `!i a b. a < 4 /\ b < 4 /\ ~(a = b) ==> ~collinear {vec 0,v(i+a),v(i+b)}` (C SUBGOAL_THEN ASSUME_TAC);
2330 REPEAT WEAKER_STRIP_TAC;
2331 FIRST_X_ASSUM MP_TAC THEN REWRITE_TAC[];
2332 FIRST_X_ASSUM_ST `v (i MOD 4) = v i` ((unlist ONCE_REWRITE_TAC) o GSYM);
2333 REPEAT (FIRST_X_ASSUM MATCH_MP_TAC);
2335 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
2337 BY(REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[DIVISION;MOD_LT;arith `~(4=0)`]);
2339 BY(MESON_TAC[DIVISION;arith `~(4=0)`]);
2340 COMMENT "introduce deformation";
2341 INTRO_TAC Cuxvzoz.deform_simplex_edge_exists [`V`;`(\ (t:real). &0)`;`(\(t:real). -- abs t)`;`v (p +3)`;`v p`;`v (p +1)`;`&1`];
2343 REPEAT WEAKER_STRIP_TAC;
2344 FIRST_X_ASSUM MP_TAC;
2346 REWRITE_TAC[arith `&0 < &1`];
2348 ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d}={a,c,d,b}`];
2349 BY(ASM_REWRITE_TAC[]);
2352 INTRO_TAC Planarity.cross_dot_fully_surrounded_fan [`(vec 0):real^3`;`v p`;`v (p+3)`;`v(p+1)`];
2355 INTRO_TAC Planarity.notcoplanar_imp_notcollinear_fan [`(vec 0):real^3`;`v p`;`v (p+1)`;`v(p+3)`];
2356 BY(REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
2357 MATCH_MP_TAC (arith `x = y ==> (&0 < x ==> y > &0)`);
2359 REPEAT ( GMATCH_SIMP_TAC REAL_CONTINUOUS_ON_EQ_REAL_CONTINUOUS_AT);
2360 REWRITE_TAC[Ocbicby.REAL_OPEN_REAL_INTERVAL];
2361 (REWRITE_TAC[REAL_CONTINUOUS_CONST;REAL_CONTINUOUS_AT_ID;arith `-- abs(&0) = &0`]);
2362 REPEAT WEAKER_STRIP_TAC;
2363 MATCH_MP_TAC REAL_CONTINUOUS_NEG;
2364 BY(REWRITE_TAC[Cuxvzoz.real_continuous_abs]);
2365 REPEAT WEAKER_STRIP_TAC;
2367 TYPIFY `!i. dist (v i,v (i+1)) <= cstab` (C SUBGOAL_THEN ASSUME_TAC);
2369 MATCH_MP_TAC REAL_LE_TRANS;
2370 TYPIFY `scs_b_v39 s i (i+1)` EXISTS_TAC;
2372 BY(ASM_MESON_TAC[]);
2373 FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
2374 FIRST_X_ASSUM_ST `scs_b_v39 s i j <= cstab` (C INTRO_TAC [`i`]);
2375 BY(ASM_REWRITE_TAC[arith `3 < 4`;arith `SUC i = i+1`]);
2376 TYPIFY `(!i t. abs t < e' ==> norm (f (v i) t) = norm (v i))` (C SUBGOAL_THEN ASSUME_TAC);
2377 REPEAT WEAKER_STRIP_TAC;
2378 TYPIFY `v i = v p` ASM_CASES_TAC;
2380 FIRST_X_ASSUM_ST `norm` (C INTRO_TAC [`t`]);
2381 BY(ASM_REWRITE_TAC[] THEN MESON_TAC[]);
2382 FIRST_X_ASSUM GMATCH_SIMP_TAC;
2383 BY(ASM_REWRITE_TAC[]);
2384 TYPIFY `!i. 0 < i /\ i < 4 ==> ~(v (p + i) = v p)` (C SUBGOAL_THEN ASSUME_TAC);
2385 REPEAT WEAKER_STRIP_TAC;
2386 FIRST_X_ASSUM MP_TAC;
2388 GEN_REWRITE_TAC (RAND_CONV o RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV) [arith `p = p+0`];
2389 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
2391 BY(REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[DIVISION;MOD_LT;arith `~(4=0)`;arith `0 < i ==> ~(i=0)`]);
2392 TYPIFY `!i j (k:num). v i = v j ==> v (i+k) = v (j+k)` (C SUBGOAL_THEN ASSUME_TAC);
2394 REPEAT WEAKER_STRIP_TAC;
2395 ONCE_REWRITE_TAC[arith `(i:num) + k = k + i`];
2396 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
2397 BY(ASM_REWRITE_TAC[arith `~(4 = 0)`]);
2398 TYPIFY `!t. azim (vec 0) (f (v (p+2)) t) (f (v (p+3)) t) (f (v (p+1)) t) = azim(vec 0) (v(p+2)) (v(p+3)) (v(p+1))` (C SUBGOAL_THEN ASSUME_TAC);
2400 FIRST_X_ASSUM_ST `~(w = v p) ==> a` (REPEAT o GMATCH_SIMP_TAC);
2401 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
2402 TYPIFY `!i. azim (vec 0) (v i) (v (i+1)) (v (i+3)) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
2404 FIRST_X_ASSUM_ST `interior_angle1` ((unlist REWRITE_TAC) o GSYM);
2405 MATCH_MP_TAC Local_lemmas.CONVEX_LOFA_IMP_INANGLE_LE_PI;
2406 BY(ASM_REWRITE_TAC[]);
2407 TYPIFY `(!i. ?e0. &0 < e0 /\ (azim (vec 0) (v i) (v (i + 1)) (v (i + 3)) = pi ==> (!t. abs t < e0 ==> azim (vec 0) (f (v i) t) (f (v (i + 1)) t) (f (v (i + 3)) t) <= pi)))` (C SUBGOAL_THEN ASSUME_TAC);
2409 TYPIFY `v i = v (p+2)` ASM_CASES_TAC;
2410 FIRST_ASSUM (fun t -> FIRST_X_ASSUM (ASSUME_TAC o (C MATCH_MP t)));
2411 TYPIFY `&1` EXISTS_TAC;
2412 ASM_REWRITE_TAC[arith `&0 < &1`;arith `(p+2)+k = p + (2+k)`];
2413 NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[];
2415 TYPIFY `azim (vec 0) (v i) (v (i + 1)) (v (i + 3)) < pi` ENOUGH_TO_SHOW_TAC;
2416 BY(MESON_TAC[arith `x < pi ==> ~(x = pi)`;arith `&0 < &1`]);
2417 BY(ASM_MESON_TAC[]);
2418 (COMMENT "deformation in BBs");
2419 INTRO_TAC Cuxvzoz.deformation_BBs_ALT [`s`;`4`;`f`;`v`;`e'`];
2423 MATCH_MP_TAC ab4_assumption_reduction2;
2424 GEXISTL_TAC [`p`;`e'`];
2427 REPEAT WEAKER_STRIP_TAC;
2428 FIRST_X_ASSUM_ST `scs_diag` (C INTRO_TAC [`i`;`j`]);
2429 BY(ASM_REWRITE_TAC[] THEN REAL_ARITH_TAC);
2430 REWRITE_TAC[CONJ_ASSOC] THEN CONJ2_TAC;
2431 TYPIFY `e'` EXISTS_TAC;
2432 ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
2433 (FIRST_X_ASSUM_ST `norm` (C INTRO_TAC [`t`]));
2434 TYPIFY `dist (v p,v (p+1)) <= scs_b_v39 s p (p+1)` ENOUGH_TO_SHOW_TAC;
2435 BY(POP_ASSUM (unlist REWRITE_TAC) THEN REWRITE_TAC[DIST_SYM] THEN REAL_ARITH_TAC);
2436 BY(ASM_REWRITE_TAC[]);
2438 REPEAT WEAKER_STRIP_TAC;
2439 (FIRST_X_ASSUM_ST `norm` (C INTRO_TAC [`t`]));
2440 BY(ASM_REWRITE_TAC[] THEN REAL_ARITH_TAC);
2441 MATCH_MP_TAC REAL_LTE_TRANS;
2442 TYPIFY `cstab` EXISTS_TAC;
2443 BY(ASM_REWRITE_TAC[]);
2444 (REPEAT WEAKER_STRIP_TAC);
2445 (COMMENT "azim sums");
2446 INTRO_TAC deform_azim_sum [`v (p+3)`;`v p`;`v (p+1)`;`v(p+2)`;`f`;`e'`];
2448 REPEAT (FIRST_X_ASSUM_ST `c = a + b` MP_TAC) THEN ASM_REWRITE_TAC[];
2449 REPLICATE_TAC 3 DISCH_TAC;
2451 MATCH_MP_TAC Zlzthic.deformation_subset;
2452 (TYPIFY `V` EXISTS_TAC THEN ASM_REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY]);
2453 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
2454 TYPIFY `~collinear {vec 0, v (p + 3), v (p+0)} /\ ~collinear {vec 0, v (p + 3), v (p + 1)} /\ ~collinear {vec 0, v (p + 3), v (p + 2)}` (C SUBGOAL_THEN MP_TAC);
2455 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
2456 REWRITE_TAC[arith `p+0=p`] THEN DISCH_THEN (unlist REWRITE_TAC);
2458 BY(ASM_REWRITE_TAC[]);
2459 FIRST_X_ASSUM (SUBST1_TAC) THEN REWRITE_TAC[];
2460 REPLICATE_TAC 4 (FIRST_X_ASSUM kill);
2462 TYPIFY_GOAL_THEN `&0 < azim (vec 0) (v (p + 3)) (v p) (v (p + 2)) /\ azim (vec 0) (v (p + 3)) (v p) (v (p + 2)) < pi` (unlist REWRITE_TAC);
2463 FIRST_X_ASSUM_ST `&0 < azim a b c d` (C INTRO_TAC [`p+3`]);
2464 TYPIFY `azim (vec 0) (v (p+3)) (v p) (v (p+2)) = azim (vec 0) (v (p + 3)) (v ((p + 3) + 1)) (v ((p + 3) + 3))` (C SUBGOAL_THEN ASSUME_TAC);
2465 BY(REWRITE_TAC[arith `((p:num) + i) + j = p + i+j`] THEN NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[]);
2467 DISCH_THEN (unlist REWRITE_TAC);
2468 FIRST_X_ASSUM_ST `interior_angle1` ((unlist REWRITE_TAC) o GSYM);
2470 FIRST_X_ASSUM MATCH_MP_TAC;
2471 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
2476 FIRST_X_ASSUM_ST `~(w = v p) ==> a` (REPEAT o GMATCH_SIMP_TAC);
2478 BY(REPEAT CONJ_TAC THEN GEN_REWRITE_TAC (RAND_CONV o RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV) [arith `p = p+0`] THEN GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT THEN NUM_REDUCE_TAC);
2479 REWRITE_TAC[Zlzthic.azim_lt_pi_cross];
2480 TYPIFY `(v (p + 3) cross v p) dot v (p + 1) = (v (p) cross (v (p+1))) dot v (p + 3)` (C SUBGOAL_THEN SUBST1_TAC);
2482 REWRITE_TAC[GSYM Zlzthic.azim_lt_pi_cross];
2483 BY(ASM_REWRITE_TAC[]);
2484 (REPEAT WEAKER_STRIP_TAC);
2485 COMMENT "second azim sum";
2486 INTRO_TAC deform_azim_sum [`v (p+1)`;`v (p+2)`;`v (p+3)`;`v(p)`;`f`;`e'`];
2488 REPEAT (FIRST_X_ASSUM_ST `c = a + b` MP_TAC) THEN ASM_REWRITE_TAC[];
2489 REPLICATE_TAC 3 DISCH_TAC;
2491 MATCH_MP_TAC Zlzthic.deformation_subset;
2492 (TYPIFY `V` EXISTS_TAC THEN ASM_REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY]);
2493 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
2494 TYPIFY `~collinear {vec 0, v (p + 1), v (p + 2)} /\ ~collinear {vec 0, v (p + 1), v (p + 3)} /\ ~collinear {vec 0, v (p + 1), v (p + 0)}` (C SUBGOAL_THEN MP_TAC);
2495 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
2496 REWRITE_TAC[arith `p+0=p`] THEN DISCH_THEN (unlist REWRITE_TAC);
2498 BY(ASM_REWRITE_TAC[]);
2499 FIRST_X_ASSUM (SUBST1_TAC) THEN REWRITE_TAC[];
2500 REPLICATE_TAC 4 (FIRST_X_ASSUM kill);
2502 TYPIFY_GOAL_THEN `&0 < azim (vec 0) (v (p + 1)) (v (p + 2)) (v p) /\ azim (vec 0) (v (p + 1)) (v (p + 2)) (v p) < pi` (unlist REWRITE_TAC);
2503 FIRST_X_ASSUM_ST `&0 < azim a b c d` (C INTRO_TAC [`p+1`]);
2504 TYPIFY `azim (vec 0) (v (p+1)) (v (p+2)) (v (p)) = azim (vec 0) (v (p + 1)) (v ((p + 1) + 1)) (v ((p + 1) + 3))` (C SUBGOAL_THEN ASSUME_TAC);
2505 BY(REWRITE_TAC[arith `((p:num) + i) + j = p + i+j`] THEN NUM_REDUCE_TAC THEN ASM_REWRITE_TAC[]);
2507 DISCH_THEN (unlist REWRITE_TAC);
2508 FIRST_X_ASSUM_ST `interior_angle1` ((unlist REWRITE_TAC) o GSYM);
2510 FIRST_X_ASSUM MATCH_MP_TAC;
2511 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
2516 FIRST_X_ASSUM_ST `~(w = v p) ==> a` (REPEAT o GMATCH_SIMP_TAC);
2518 BY(REPEAT CONJ_TAC THEN GEN_REWRITE_TAC (RAND_CONV o RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV) [arith `p = p+0`] THEN GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT THEN NUM_REDUCE_TAC);
2519 REWRITE_TAC[Zlzthic.azim_lt_pi_cross];
2520 TYPIFY `(v (p + 1) cross v (p+3)) dot v (p) = (v (p) cross (v (p+1))) dot v (p + 3)` (C SUBGOAL_THEN SUBST1_TAC);
2522 REWRITE_TAC[GSYM Zlzthic.azim_lt_pi_cross];
2523 BY(ASM_REWRITE_TAC[]);
2524 (REPEAT WEAKER_STRIP_TAC);
2525 TYPIFY `?e3. &0 < e3 /\ (!t. abs t < e3 /\ t < &0 ==> dist(v p,v (p+1)) + t IN real_interval(scs_a_v39 s p (p+1),scs_b_v39 s p (p+1)))` (C SUBGOAL_THEN MP_TAC);
2526 TYPIFY `dist(v p,v(p+1)) - scs_a_v39 s p (p+1)` EXISTS_TAC;
2527 ASM_REWRITE_TAC[arith `&0 < &1`;arith `a - d < &0 <=> a < d`;arith `&0 < b - d <=> d < b`];
2529 MATCH_MP_TAC REAL_LTE_TRANS;
2530 TYPIFY `cstab` EXISTS_TAC;
2531 BY(ASM_REWRITE_TAC[]);
2533 REPEAT WEAKER_STRIP_TAC;
2534 REWRITE_TAC[IN_REAL_INTERVAL];
2536 BY(REPLICATE_TAC 3 (POP_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2537 MATCH_MP_TAC (arith `t < &0 /\ d <= b ==> d + t < b`);
2538 BY(ASM_REWRITE_TAC[]);
2539 REPEAT WEAKER_STRIP_TAC;
2541 INTRO_TAC Zlzthic.NONPLANAR_OPEN [`(\ (t:real). (vec 0):real^3)`;`f (v p)`;`\ (t:real). v (p+1)`;`\ (t:real). v (p+3)`;`&0`];
2542 ASM_REWRITE_TAC[CONTINUOUS_CONST];
2543 DISCH_THEN MP_TAC THEN ANTS_TAC;
2544 FIRST_X_ASSUM_ST `deformation` MP_TAC THEN REWRITE_TAC[Localization.deformation] THEN REPEAT WEAKER_STRIP_TAC;
2546 BY(FIRST_X_ASSUM MATCH_MP_TAC THEN ASM_REWRITE_TAC[]);
2547 POP_ASSUM GMATCH_SIMP_TAC;
2548 BY(ASM_REWRITE_TAC[]);
2549 REWRITE_TAC[arith `abs (&0 - t') = abs t'`] THEN REPEAT WEAKER_STRIP_TAC;
2550 INTRO_TAC Zlzthic.WNWSHJT [`v(p+3)`;`v p`;`v (p+1)`;`f`;`-- e'`;`e'`];
2554 MATCH_MP_TAC Zlzthic.deformation_subset;
2555 (TYPIFY `V` EXISTS_TAC THEN ASM_REWRITE_TAC[SUBSET;IN_INSERT;NOT_IN_EMPTY]);
2556 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
2557 FIRST_X_ASSUM_ST `deformation` MP_TAC THEN REWRITE_TAC[Localization.deformation];
2558 REPEAT WEAKER_STRIP_TAC;
2559 FIRST_X_ASSUM (REPEAT o GMATCH_SIMP_TAC) THEN ASM_REWRITE_TAC[];
2560 TYPIFY `!i. ~(i=0) /\ i < 4 ==> ~collinear {vec 0,v (p+0),v(p+i)}` ENOUGH_TO_SHOW_TAC;
2561 BY(MESON_TAC[arith `p+0=p` ;arith `~(1=0) /\ 1 < 4 /\ ~(3=0) /\ 3 < 4`]);
2562 GEN_TAC THEN DISCH_TAC;
2563 FIRST_X_ASSUM MATCH_MP_TAC;
2564 BY(ASM_REWRITE_TAC[arith `0 < 4`]);
2565 REPEAT WEAKER_STRIP_TAC;
2566 INTRO_TAC Iunbuig.epsilon_hept [`e`;`e'`;`e''`;`e'''`;`e3`;`e1`;`e1'`] THEN ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
2567 FIRST_ASSUM_ST `!i. 0 < i /\ i < 4 ==> ~(v (p + i) = v p)` MP_TAC;
2568 FIRST_ASSUM_ST `i MOD 4 = j MOD 4` (unlist REWRITE_TAC);
2570 COMMENT "introduce 684";
2571 INTRO_TAC (UNDISCH Ocbicby.LEMMA_6843920790) [`norm (v (p+3))`;`norm (v p)`;`norm (v (p+1))`;`dist(v p,v(p+1))`;`dist (v(p+1),v(p+3))`;`dist(v p,v (p+3))`];
2574 (COMMENT "684 ants");
2575 TYPIFY `!i. &2 <= norm (v i) /\ norm (v i) <= &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
2577 REWRITE_TAC[GSYM Fnjlbxs.in_ball_annulus];
2578 FIRST_X_ASSUM_ST `BBs_v39` kill THEN FIRST_X_ASSUM_ST `BBs_v39` MP_TAC THEN REWRITE_TAC[Appendix.BBs_v39;LET_THM] THEN EXPAND_TAC "V" THEN REPEAT WEAKER_STRIP_TAC;
2579 FIRST_X_ASSUM_ST `ball_annulus` MP_TAC;
2580 REWRITE_TAC[SUBSET;IN_IMAGE;IN_UNIV];
2583 REWRITE_TAC[CONJ_ASSOC] THEN CONJ2_TAC;
2584 FIRST_X_ASSUM_ST `coplanar` kill;
2585 FIRST_X_ASSUM_ST `coplanar` MP_TAC;
2586 ONCE_REWRITE_TAC[SET_RULE `{a,b,c,d}= {a,d,b,c}`];
2587 BY(REWRITE_TAC[Oxlzlez.coplanar_delta_y;DIST_0;DIST_SYM]);
2588 ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REWRITE_TAC[];
2589 TYPIFY `!i j. &2 <= dist(v i,v j) /\ dist(v i,v j) <= cstab ==> xrr (norm (v i)) (norm (v j)) (dist (v i,v j)) <= #15.53` (C SUBGOAL_THEN ASSUME_TAC);
2590 REPEAT WEAKER_STRIP_TAC;
2591 TYPIFY `#15.53 = sqrt(#15.53) pow 2` (C SUBGOAL_THEN SUBST1_TAC);
2592 GMATCH_SIMP_TAC SQRT_POW_2;
2594 MATCH_MP_TAC Ocbicby.xrr_simple_upper_bound;
2596 TYPIFY `&4 = sqrt(&16)` (C SUBGOAL_THEN SUBST1_TAC);
2597 REWRITE_TAC[arith `&16 = &4 pow 2`];
2598 REWRITE_TAC[POW_2_SQRT_ABS];
2600 GMATCH_SIMP_TAC SQRT_MONO_LT_EQ;
2601 TYPIFY_GOAL_THEN `&0 <= #15.53 /\ &0 <= &16 /\ #15.53 < &16` (unlist REWRITE_TAC);
2603 MATCH_MP_TAC REAL_LE_TRANS;
2604 TYPIFY `cstab` EXISTS_TAC;
2606 REWRITE_TAC[Sphere.cstab];
2607 MATCH_MP_TAC REAL_LE_RSQRT;
2609 FIRST_X_ASSUM ( GMATCH_SIMP_TAC);
2610 TYPIFY ` &2 <= dist(v p,v(p+1)) /\ dist(v p,v (p+3)) <= cstab /\ cstab <= dist(v p,v(p+3)) /\ dist(v p,v(p+1)) <= cstab /\ cstab <= dist (v (p+1),v(p+3))` ENOUGH_TO_SHOW_TAC;
2611 BY(REWRITE_TAC[Sphere.cstab;DIST_SYM] THEN REAL_ARITH_TAC);
2613 MATCH_MP_TAC Ocbicby.scs_lb_2;
2614 TYPIFY `s` EXISTS_TAC;
2616 ONCE_REWRITE_TAC[EQ_SYM_EQ];
2617 FIRST_X_ASSUM MATCH_MP_TAC;
2621 MATCH_MP_TAC REAL_LE_TRANS;
2622 TYPIFY `scs_b_v39 s (p+3) (SUC (p+3))` EXISTS_TAC;
2624 FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
2625 FIRST_X_ASSUM MATCH_MP_TAC;
2626 BY(ASM_REWRITE_TAC[] THEN NUM_REDUCE_TAC);
2627 ONCE_REWRITE_TAC[DIST_SYM];
2628 TYPIFY `v p = v (SUC (p+3))` ENOUGH_TO_SHOW_TAC;
2629 DISCH_THEN SUBST1_TAC;
2630 FIRST_X_ASSUM_ST `d <= scs_b_v39 s i j` MP_TAC;
2632 BY(ASM_REWRITE_TAC[arith `SUC (p+3) = p+4`;Oxl_2012.MOD_ADD_CANCEL]);
2633 MATCH_MP_TAC (arith `c < d ==> c <= d`);
2634 FIRST_X_ASSUM_ST `cstab < d` (C INTRO_TAC [`p+1`;`p+3`]);
2636 REWRITE_TAC[arith `p+3 = SUC(SUC (p+1))`];
2637 MATCH_MP_TAC Tfitskc.SCS_DIAG_2;
2639 BY(DISCH_THEN (unlist REWRITE_TAC));
2640 REPEAT WEAKER_STRIP_TAC;
2641 TYPIFY `?e4. &0 < e4 /\ (!t. abs t < e4 ==> dist(v p,v (p+1)) + t IN real_interval(a,b))` (C SUBGOAL_THEN MP_TAC);
2642 INTRO_TAC Zlzthic.real_interval_contains_0_ball [`a-dist(v p,v (p+1))`;`b - dist(v p,v (p+1))`;`&1`];
2643 ASM_REWRITE_TAC[arith `&0 < &1`;arith `a - d < &0 <=> a < d`;arith `&0 < b - d <=> d < b`];
2645 BY(FIRST_X_ASSUM_ST `dist s IN real_interval(a,b)` MP_TAC THEN REWRITE_TAC[IN_REAL_INTERVAL]);
2646 REPEAT WEAKER_STRIP_TAC;
2647 TYPIFY `e''''` EXISTS_TAC;
2648 ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
2649 FIRST_X_ASSUM (C INTRO_TAC [`t`]);
2650 ASM_REWRITE_TAC[IN_REAL_INTERVAL];
2652 REPEAT WEAKER_STRIP_TAC;
2653 INTRO_TAC Cuxvzoz.epsilon_pair [`e4`;`e7`] THEN ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
2654 TYPIFY `?t. abs t < e'''' /\ t < &0` (C SUBGOAL_THEN MP_TAC);
2655 TYPIFY `-- e'''' / &2` EXISTS_TAC;
2656 BY(REPLICATE_TAC 3 (POP_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2657 REPEAT WEAKER_STRIP_TAC;
2658 REPLICATE_TAC 2 (FIRST_X_ASSUM (C INTRO_TAC [`t`])) THEN ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
2659 REPLICATE_TAC 7 (FIRST_X_ASSUM_ST `abs t < e ==> a` (C INTRO_TAC [`t`])) THEN ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
2660 FIRST_X_ASSUM (C INTRO_TAC [`dist(v p,v(p+1)) + t`;`dist(v p,v (p+1))`]);
2663 BY(FIRST_X_ASSUM_ST `t < &0` MP_TAC THEN REAL_ARITH_TAC);
2664 REWRITE_TAC[arith `~(x < y) <=> y <= x`];
2665 FIRST_X_ASSUM_ST `norm (f (v p) t) = norm (v p)` (C INTRO_TAC [`t`]);
2667 BY(ASM_REWRITE_TAC[]);
2668 TYPIFY `!d. t < &0 ==> d + -- abs t = d + t` (C SUBGOAL_THEN MP_TAC);
2671 DISCH_THEN (unlist REWRITE_TAC);
2672 (REWRITE_TAC[DIST_SYM;arith `d + &0 = d`] THEN REPEAT WEAKER_STRIP_TAC THEN ASM_REWRITE_TAC[]);
2673 (COMMENT "back to root, next tau");
2674 TYPIFY `sum {i | i < 4} (\i. rho_fun (norm (v i)) * azim (vec 0) (v i) (v (i + 1)) (v (i + 4 - 1))) <= sum {i | i < 4} (\i. rho_fun (norm (f (v i) t)) * azim (vec 0) (f (v i) t) (f(v(i+1)) t) (f (v (i + 4 - 1)) t))` (C SUBGOAL_THEN ASSUME_TAC);
2675 REPEAT WEAKER_STRIP_TAC;
2676 MATCH_MP_TAC Cuxvzoz.MMs_minimize_tau_fun;
2677 TYPIFY `s` EXISTS_TAC;
2678 ASM_REWRITE_TAC[arith `3 < 4`];
2679 FIRST_X_ASSUM MATCH_MP_TAC;
2680 BY(ASM_REWRITE_TAC[]);
2682 TYPIFY `{i | i < 4} = 0..(4-1)` (C SUBGOAL_THEN SUBST1_TAC);
2683 BY(REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_NUMSEG] THEN ARITH_TAC);
2684 REPEAT ( GMATCH_SIMP_TAC (GSYM Oxl_def.periodic_sum));
2685 TYPIFY `p` EXISTS_TAC;
2688 FIRST_ASSUM_ST `periodic` MP_TAC THEN REWRITE_TAC[Oxl_def.periodic];
2689 REWRITE_TAC[arith `(i+4)+k = (i+k)+4`];
2690 BY(DISCH_THEN (unlist REWRITE_TAC));
2691 TYPIFY `p` EXISTS_TAC;
2694 FIRST_ASSUM_ST `periodic` MP_TAC THEN REWRITE_TAC[Oxl_def.periodic];
2695 REWRITE_TAC[arith `(i+4)+k = (i+k)+4`];
2696 BY(DISCH_THEN (unlist REWRITE_TAC));
2698 REWRITE_TAC[arith `3+p = SUC(SUC(SUC p))`;SUM_CLAUSES_NUMSEG;SUM_SING_NUMSEG;arith `p <= SUC p /\ p <= SUC (SUC p) /\ p <= SUC(SUC(SUC p))`];
2699 REWRITE_TAC[arith `SUC i = i+1`;arith `(i + j) + (k:num) = i+(j+k)`];
2702 REPEAT (FIRST_X_ASSUM (C INTRO_TAC [`t`])) THEN ASM_REWRITE_TAC[] THEN REPEAT WEAKER_STRIP_TAC;
2703 FIRST_X_ASSUM_ST `rho_fun` MP_TAC THEN ASM_REWRITE_TAC[Appendix.rho_rho_fun];
2704 TYPIFY `f (v(p+1)) t = v(p+1) /\ f (v (p+2)) t = v(p+2) /\ f(v (p+3)) t = v(p+3)` (C SUBGOAL_THEN ASSUME_TAC);
2705 FIRST_X_ASSUM_ST `~(w = v p) ==> a` (REPEAT o GMATCH_SIMP_TAC);
2706 BY(ASM_REWRITE_TAC[] THEN REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
2707 POP_ASSUM (fun t -> ASM_TAC THEN unlist REWRITE_TAC t THEN REPEAT DISCH_TAC THEN ASSUME_TAC t);
2708 FIRST_X_ASSUM_ST `azim` MP_TAC;
2709 FIRST_X_ASSUM_ST `azim` MP_TAC THEN BURY_MP_TAC;
2710 FIRST_ASSUM_ST `azim` ((unlist REWRITE_TAC) o GSYM);
2711 FIRST_ASSUM_ST `azim (vec 0) (v (p + 3)) (f (v p) t) (v (p + 2))` ((unlist REWRITE_TAC) o GSYM);
2712 REWRITE_TAC[arith `(a+b)+c = a + b + c`];
2713 REWRITE_TAC[arith `r0 * (a013) + r1 * (a123 + a130) + r2 * a231 + r3 * (a301+a312) <= r0 * (f013) + r1 * (a123 + f130) + r2 * a231 + r3 *(f301 +a312) <=> r0 * a013 + r1*a130 + r3* a301 <= r0 * f013 + r1 * f130 + r3 * f301`];
2714 MATCH_MP_TAC (arith `a - (pi+sol0) = a' /\ b - (pi+sol0) = b' ==> (a <= b ==> a' <= b')`);
2715 REWRITE_TAC[arith `(a + b+c) - (pi + sol0) = a + b + c - (pi + sol0)`];
2717 GMATCH_SIMP_TAC (GSYM Cuxvzoz.tau3_azim);
2718 GMATCH_SIMP_TAC Cuxvzoz.tau3_taum_nonplanar;
2720 REWRITE_TAC[DIST_SYM];
2721 BY(MESON_TAC[Terminal.taum_sym]);
2722 FIRST_X_ASSUM_ST `norm a = norm b` (SUBST1_TAC o GSYM);
2723 FIRST_X_ASSUM_ST `dist s + t` (SUBST1_TAC o GSYM);
2724 GMATCH_SIMP_TAC (GSYM Cuxvzoz.tau3_azim);
2725 GMATCH_SIMP_TAC Cuxvzoz.tau3_taum_nonplanar;
2726 REWRITE_TAC[DIST_SYM];
2727 REWRITE_TAC[CONJ_ASSOC] THEN CONJ2_TAC;
2728 ASM_REWRITE_TAC[DIST_SYM];
2729 BY(MESON_TAC[Terminal.taum_sym]);
2732 FIRST_X_ASSUM MATCH_MP_TAC;
2733 BY(ASM_REWRITE_TAC[]);
2734 BY(FIRST_X_ASSUM_ST `azim (vec 0) (f (v p) t) (v (p + 1)) (v (p + 3)) < pi` MP_TAC THEN REAL_ARITH_TAC)
2738 let LEMMA_PWE1 = prove_by_refinement(
2739 (* main_work4 ==> *) ` main_nonlinear_terminal_v11 ==> (!s v p.
2740 is_scs_v39 s /\ scs_basic_v39 s /\ scs_k_v39 s = 4 /\ v IN MMs_v39 s /\
2741 (!i j. scs_diag 4 i j ==> scs_a_v39 s i j <= cstab /\ cstab < dist(v i,v j) /\ &4*h0 < scs_b_v39 s i j) /\
2742 (!i. (scs_a_v39 s i (i+1) = &2 /\ scs_b_v39 s i (i+1)= &2*h0) \/
2743 (scs_a_v39 s i (i+1) = &2 * h0 /\ scs_b_v39 s i (i+1)= cstab)) /\
2745 ~scs_is_str s v (p+1) /\ ~scs_is_str s v (p+3) /\
2746 scs_is_str s v p /\ norm (v p) = &2 /\
2747 scs_a_v39 s p (p+1) = &2 /\
2748 scs_a_v39 s (p+3) (p) = &2 /\
2749 dist(v (p+1),v(p+2)) <= &2 * h0 ==>
2750 pi / &2 < dihV (vec 0) (v (p+1)) (v (p+2)) (v p))`,
2753 REPEAT WEAKER_STRIP_TAC;
2754 REWRITE_TAC[arith `x < y <=> ~(y <= x)`] THEN DISCH_TAC;
2755 REPEAT WEAKER_STRIP_TAC;
2756 TYPIFY `BBprime2_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
2757 BY(ASM_MESON_TAC[Appendix.scs_basic;Ayqjtmd.unadorned_MMs;IN]);
2758 TYPIFY `BBprime_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
2759 BY(ASM_MESON_TAC[Appendix.BBprime2_v39]);
2760 TYPIFY `BBs_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
2761 BY(ASM_MESON_TAC[Appendix.BBprime_v39]);
2762 INTRO_TAC Appendix.BBs_v39 [`s`;`v`];
2763 ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;Terminal.IMAGE_SUBSET_IN;IN_UNIV;arith `~(4 <= 3)`];
2764 REPEAT WEAKER_STRIP_TAC;
2765 TYPED_ABBREV_TAC `V = IMAGE v (:num)`;
2766 TYPED_ABBREV_TAC `E = IMAGE (\i. {v i, v (SUC i)}) (:num)`;
2767 TYPED_ABBREV_TAC `FF = IMAGE (\i. (v i,v (SUC i))) (:num)`;
2768 TYPIFY `local_fan (V,E,FF)` (C SUBGOAL_THEN ASSUME_TAC);
2769 MATCH_MP_TAC Local_lemmas.CVX_LO_IMP_LO;
2770 BY(ASM_REWRITE_TAC[]);
2771 TYPIFY `!i. v i IN V` (C SUBGOAL_THEN ASSUME_TAC);
2772 REPEAT WEAKER_STRIP_TAC;
2774 REWRITE_TAC[IN_IMAGE;IN_UNIV];
2776 INTRO_TAC Cuxvzoz.BBs_inj [`s`;`v`;`4`];
2779 TYPIFY `!i. interior_angle1 (vec 0) FF (v i) = azim (vec 0) (v i) (v (i+1)) (v (i+3))` (C SUBGOAL_THEN ASSUME_TAC);
2782 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] (GSYM Ocbicby.INTERIOR_ANGLE1_AZIM));
2783 TYPIFY `s` EXISTS_TAC;
2784 BY(ASM_REWRITE_TAC[IN;arith `4 - 1 = 3`;arith `3 < 4`;arith `SUC i = i+1`]);
2785 INTRO_TAC Ocbicby.LOCAL_FAN_AZIM_POS [`s`;`v`];
2786 ASM_REWRITE_TAC[LET_THM;IN;arith `4-1 = 3`;arith `SUC i = i+1`];
2788 TYPIFY `!i. v (i MOD 4) = v i` (C SUBGOAL_THEN ASSUME_TAC);
2790 MATCH_MP_TAC (GSYM Oxl_def.periodic_mod);
2791 BY(ASM_REWRITE_TAC[arith `~(0=4)`]);
2792 TYPIFY `v 4 = v 0 /\ v 5 = v 1 /\ v 6 = v 2 /\ v 7 = v 3 /\ v 8 = v 4` (C SUBGOAL_THEN ASSUME_TAC);
2793 FIRST_X_ASSUM ((unlist ONCE_REWRITE_TAC) o GSYM);
2794 BY(REWRITE_TAC[Terminal.MOD_4_EXPLICIT;arith `7 = 1*4 + 3`;arith `8 = 2*4 + 0`;MOD_MULT_ADD]);
2795 TYPIFY `generic V E` (C SUBGOAL_THEN ASSUME_TAC);
2796 BY(FIRST_X_ASSUM_ST `scs_generic` MP_TAC THEN ASM_REWRITE_TAC[Appendix.scs_generic]);
2797 TYPIFY `v (p+4) = v p /\ v (p+5) = v (p+1) /\ v (p+6) = v (p+2) /\ v (p+7) = v (p+3) /\ v (p+8) = v (p)` (C SUBGOAL_THEN ASSUME_TAC);
2798 FIRST_X_ASSUM_ST `MOD` ((unlist ONCE_REWRITE_TAC) o GSYM);
2799 BY(REWRITE_TAC[arith `p+4 = 1*4 + p /\ p+5 = 1*4+(p+1) /\ p+6=1*4+(p+2) /\ p+7 = 1*4 + (p+3) /\ p+8 = 2*4 + p`;MOD_MULT_ADD]);
2800 TYPIFY `!i. &2 <= norm (v i) /\ norm (v i) <= &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
2802 REWRITE_TAC[GSYM Fnjlbxs.in_ball_annulus];
2803 BY(ASM_REWRITE_TAC[]);
2804 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> &2 <= dist(v (p + i),v (p+j))` (C SUBGOAL_THEN ASSUME_TAC);
2805 REPEAT WEAKER_STRIP_TAC;
2806 MATCH_MP_TAC Ocbicby.scs_lb_2;
2807 TYPIFY `s` EXISTS_TAC;
2809 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
2811 REPEAT (GMATCH_SIMP_TAC MOD_LT);
2812 BY(ASM_REWRITE_TAC[]);
2813 TYPIFY `scs_b_v39 s (p+2) ((p+2)+1) <= cstab /\ scs_b_v39 s p (p+1) = &2 * h0 /\ scs_b_v39 s (p+3) ((p+3)+1) = &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
2815 TYPIFY `~(&2 = &2 * h0)` (C SUBGOAL_THEN ASSUME_TAC);
2816 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2817 TYPIFY `scs_a_v39 s (p+3) p = scs_a_v39 s (p+3) ((p+3)+1)` ENOUGH_TO_SHOW_TAC;
2818 BY(ASM_MESON_TAC[]);
2819 REWRITE_TAC[arith `((p+3)+1) = p+4`];
2820 FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
2821 BY(ASM_MESON_TAC[Appendix.periodic2;Oxl_def.periodic]);
2822 FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
2823 FIRST_X_ASSUM_ST `x <= cstab` (C INTRO_TAC [`p+2`]) THEN ASM_REWRITE_TAC[arith `3 < 4`];
2824 BY(REWRITE_TAC[arith `SUC (p+2) = (p+2)+1`]);
2825 FIRST_X_ASSUM MP_TAC THEN REWRITE_TAC[arith `((p:num) + i ) + j = p + (i+j)`] THEN NUM_REDUCE_TAC;
2827 TYPIFY `dist(v (p+2),v(p+3)) <= cstab /\ dist(v p,v(p+1)) <= &2 * h0 /\ dist(v(p+3),v(p+4)) <= &2 * h0` (C SUBGOAL_THEN MP_TAC);
2828 FIRST_X_ASSUM MP_TAC;
2829 FIRST_X_ASSUM_ST `scs_b_v39` MP_TAC;
2830 BY(MESON_TAC[REAL_LE_TRANS]);
2832 REPEAT WEAKER_STRIP_TAC;
2833 COMMENT "collinear";
2834 TYPIFY `!i j. ~(v i = v j) ==> ~collinear {vec 0,v i, v j}` (C SUBGOAL_THEN ASSUME_TAC);
2835 REPEAT GEN_TAC THEN DISCH_TAC;
2836 MATCH_MP_TAC Zlzthic.PROPERTIES_GENERIC_LOCAL_FAN_ALT;
2837 GEXISTL_TAC [`V`;`E`;`FF`];
2838 BY(ASM_REWRITE_TAC[IN_IMAGE;IN_UNIV]);
2839 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> ~(v i = v j)` (C SUBGOAL_THEN ASSUME_TAC);
2840 BY(REPLICATE_TAC 20 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
2841 INTRO_TAC PERIODIC_INJ_MOD [`v`;`4`];
2842 ASM_REWRITE_TAC[arith `~(4 = 0)`];
2844 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i=j) ==> ~(v (p +i) = v (p+j))` (C SUBGOAL_THEN ASSUME_TAC);
2845 REPEAT WEAKER_STRIP_TAC;
2846 FIRST_X_ASSUM MP_TAC THEN ASM_REWRITE_TAC[];
2847 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
2849 REPEAT (GMATCH_SIMP_TAC MOD_LT);
2850 BY(ASM_REWRITE_TAC[]);
2851 TYPIFY `!i. 0 < i /\ i < 4 ==> ~(v (p+i) = v p)` (C SUBGOAL_THEN ASSUME_TAC);
2852 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[arith `p+0 = p`;arith `0< 4`;arith `0 < i ==> ~(i=0)`]);
2853 TYPIFY `#3.3 <= dist(v (p+2),v p)` ASM_CASES_TAC;
2854 COMMENT "long diag";
2855 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "6184614449") [`norm (v (p+1))`;`norm(v (p+2))`;`norm(v p)`;`dist(v(p+2),v p)`;`dist(v(p+1),v p)`;`dist(v(p+1),v(p+2))`];
2856 FIRST_X_ASSUM_ST `norm x = &2` kill;
2857 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
2859 DISCH_THEN MP_TAC THEN ANTS_TAC;
2861 INTRO_TAC DIST_TRIANGLE [`v (p+2)`;`(vec 0):real^3`;`v (p)`];
2862 REWRITE_TAC[DIST_0];
2863 MATCH_MP_TAC (arith `x <= &2 * h0 /\ y <= &2 * h0 ==> (d <= x + y ==> d <= &4 * h0)`);
2864 BY(ASM_REWRITE_TAC[]);
2866 BY(ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REWRITE_TAC[]);
2868 TYPIFY `v p = v (p+0)` (C SUBGOAL_THEN SUBST1_TAC);
2869 ONCE_REWRITE_TAC[arith `p+0=p`];
2871 BY(CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
2873 FIRST_X_ASSUM_ST `dihV` MP_TAC;
2874 REWRITE_TAC[arith `~(x <= y) <=> y < x`];
2875 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] Merge_ineq.DIHV_EQ_DIH_Y);
2876 ASM_REWRITE_TAC[DIST_0];
2878 BY(CONJ_TAC THEN (REPEAT (FIRST_X_ASSUM MATCH_MP_TAC)) THEN NUM_REDUCE_TAC);
2879 MATCH_MP_TAC Ocbicby.delta4_y_imp_obtuse;
2881 BY(ASM_MESON_TAC[arith `&2 <= x==> &0 < x`]);
2883 BY(REWRITE_TAC[REWRITE_RULE[LET_THM] Tame_lemmas.delta_y_pos]);
2884 BY(ASM_REWRITE_TAC[]);
2885 TYPIFY `!i. ~scs_is_str s v i ==> ~coplanar {vec 0, v i, v(i+1), v(i+3)}` (C SUBGOAL_THEN ASSUME_TAC);
2886 GEN_TAC THEN ASM_REWRITE_TAC[Appendix.scs_is_str;arith `SUC i = i+1`;GSYM Local_lemmas1.AZIM_COND_FOR_COPLANAR];
2888 DISCH_THEN (unlist REWRITE_TAC);
2889 MATCH_MP_TAC (arith `&0 < a ==> ~(a = &0)`);
2890 INTRO_TAC Ocbicby.LOCAL_FAN_AZIM_POS [`s`;`v`;`i`];
2891 BY(ASM_REWRITE_TAC[LET_THM;IN;arith `SUC i = i+1`;arith `4 - 1 = 3`]);
2892 FIRST_X_ASSUM MP_TAC THEN BURY_MP_TAC;
2893 COMMENT "short diag";
2894 INTRO_TAC Terminal.vv_split_azim_generic [`v`;`4`;`p`;`2`;`3`];
2895 ASM_REWRITE_TAC[arith `SUC p = p+1`;LET_THM];
2898 TYPIFY `azim (vec 0) (v p) (v (p+1)) (v (p+3)) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
2899 FIRST_X_ASSUM_ST `interior_angle1` ((unlist REWRITE_TAC) o GSYM);
2900 MATCH_MP_TAC Local_lemmas.CONVEX_LOFA_IMP_INANGLE_LE_PI;
2901 BY(ASM_REWRITE_TAC[]);
2902 TYPIFY `azim (vec 0) (v p) (v (p + 1)) (v (p + 2)) <= pi /\ azim (vec 0) (v p) (v (p + 2)) (v (p + 3)) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
2903 MATCH_MP_TAC (arith `&0 < pi /\ &0 <= a /\ &0 <= b /\ a + b <= pi ==> a <= pi /\ b <= pi`);
2904 REWRITE_TAC[PI_POS];
2905 REWRITE_TAC[Counting_spheres.AZIM_NN];
2906 BY(REPLICATE_TAC 2 (POP_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
2907 FIRST_X_ASSUM_ST `scs_is_str` MP_TAC;
2908 REWRITE_TAC[Appendix.scs_is_str];
2911 REWRITE_TAC[arith `SUC p = p+1`];
2912 DISCH_THEN (RULE_ASSUM_TAC o (unlist REWRITE_RULE));
2913 INTRO_TAC AZIM_DIHV_SAME_STRONG [`(vec 0):real^3`;`v p`;`v (p+2)`;`v (p+3)`];
2914 INTRO_TAC AZIM_DIHV_SAME_STRONG [`(vec 0):real^3`;`v p`;`v (p+1)`;`v (p+2)`];
2915 FIRST_X_ASSUM_ST `pi = a` (MP_TAC o SYM) THEN DISCH_TAC;
2917 TYPIFY `~collinear {vec 0, v p, v (p + 1)} /\ ~collinear {vec 0, v p, v (p + 2)} /\ ~collinear {vec 0, v p, v (p + 3)}` (C SUBGOAL_THEN ASSUME_TAC);
2918 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
2920 REPEAT WEAKER_STRIP_TAC;
2921 REPEAT (FIRST_X_ASSUM_ST `dihV` MP_TAC) THEN REWRITE_TAC[] THEN REPEAT (GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] Merge_ineq.DIHV_EQ_DIH_Y));
2924 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
2925 REPEAT WEAKER_STRIP_TAC;
2926 FIRST_X_ASSUM_ST `+` MP_TAC THEN ASM_REWRITE_TAC[];
2928 TYPIFY `cstab <= dist(v p,v(p+2))` (C SUBGOAL_THEN ASSUME_TAC);
2929 FIRST_X_ASSUM_ST `cstab < d` (C INTRO_TAC [`p`;`p+2`]);
2931 REWRITE_TAC[arith `p+2 = SUC(SUC (p))`];
2932 MATCH_MP_TAC Tfitskc.SCS_DIAG_2;
2935 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "1348932091 delta") [`norm (v (p))`;`norm(v (p+1))`;`norm(v (p+2))`;`&2 * h0`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+1))`];
2936 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
2937 TYPIFY `(&2 <= norm (v p) /\ norm (v p) <= &2) /\ (&2 <= norm (v (p + 1)) /\ norm (v (p + 1)) <= #2.52) /\ (&2 <= norm (v (p + 2)) /\ norm (v (p + 2)) <= #2.52) /\ ( #2.52 <= &2 * h0 /\ &2 * h0 <= #2.52) /\ ( #3.01 <= dist (v p,v (p + 2)) /\ dist (v p,v (p + 2)) <= #3.3) /\ &2 <= dist (v p,v (p + 1)) /\ dist (v p,v (p + 1)) <= #2.52` (C SUBGOAL_THEN ASSUME_TAC);
2938 TYPIFY `#2.52 = &2 * h0` (C SUBGOAL_THEN SUBST1_TAC);
2939 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2940 ASM_REWRITE_TAC[arith `(x <= y /\ y <= x) <=> y = x`];
2942 FIRST_X_ASSUM_ST `&2 <= dist s` (C INTRO_TAC [`0`;`1`]);
2943 BY(REWRITE_TAC[arith `p+0=p`] THEN DISCH_THEN MATCH_MP_TAC THEN NUM_REDUCE_TAC);
2945 BY(FIRST_X_ASSUM_ST `#3.3` MP_TAC THEN REWRITE_TAC[DIST_SYM] THEN REAL_ARITH_TAC);
2946 BY(ASM_REWRITE_TAC[GSYM Sphere.cstab]);
2949 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "1348932091") [`norm (v (p))`;`norm(v (p+1))`;`norm(v (p+2))`;`&2 * h0`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+1))`];
2950 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
2951 FIRST_X_ASSUM_ST `#3.01` (unlist REWRITE_TAC);
2953 INTRO_TAC Ocbicby.dih_y_mono [`norm (v (p))`;`norm(v (p+1))`;`norm(v (p+2))`;`dist(v (p+1),v(p+2))`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+1))`;`&2 * h0`];
2955 ASM_REWRITE_TAC[arith `&0 < &2`];
2957 FIRST_X_ASSUM_ST `&2 <= dist s` (C INTRO_TAC [`1`;`2`]);
2958 BY(NUM_REDUCE_TAC THEN REAL_ARITH_TAC);
2960 BY(FIRST_X_ASSUM_ST `delta_y` MP_TAC THEN REAL_ARITH_TAC);
2961 FIRST_X_ASSUM_ST `norm (v p) = &2` (SUBST1_TAC o GSYM);
2962 FIRST_X_ASSUM_ST `coplanar` (C INTRO_TAC [`p+1`]);
2964 BY(ASM_REWRITE_TAC[]);
2965 REWRITE_TAC[arith `(p+1) +i = p+(1+i)`] THEN NUM_REDUCE_TAC;
2966 REWRITE_TAC[Oxlzlez.coplanar_delta_y];
2967 ASM_REWRITE_TAC[DIST_SYM;DIST_0];
2968 MATCH_MP_TAC (arith `a = b ==> &0 < a ==> &0 < b`);
2969 BY(MESON_TAC[Merge_ineq.delta_y_sym]);
2972 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "5557288534 delta") [`norm (v (p))`;`norm(v (p+3))`;`norm(v (p+2))`;`cstab`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+3))`];
2973 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
2974 TYPIFY `(&2 <= norm (v p) /\ norm (v p) <= &2) /\ (&2 <= norm (v (p + 3)) /\ norm (v (p + 3)) <= #2.52) /\ (&2 <= norm (v (p + 2)) /\ norm (v (p + 2)) <= #2.52) /\ ( #3.01 <= cstab /\ cstab <= #3.01) /\ ( #3.01 <= dist (v p,v (p + 2)) /\ dist (v p,v (p + 2)) <= #3.3) /\ &2 <= dist (v p,v (p + 3)) /\ dist (v p,v (p + 3)) <= #2.52` (C SUBGOAL_THEN ASSUME_TAC);
2975 TYPIFY `#2.52 = &2 * h0` (C SUBGOAL_THEN SUBST1_TAC);
2976 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
2977 ASM_REWRITE_TAC[arith `(x <= y /\ y <= x) <=> y = x`;Sphere.cstab];
2980 FIRST_X_ASSUM_ST `&2 <= dist s` (C INTRO_TAC [`0`;`3`]);
2981 BY(REWRITE_TAC[arith `p+0=p`] THEN DISCH_THEN MATCH_MP_TAC THEN NUM_REDUCE_TAC);
2982 BY(ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REWRITE_TAC[]);
2984 BY(FIRST_X_ASSUM_ST `#3.3` MP_TAC THEN REWRITE_TAC[DIST_SYM] THEN REAL_ARITH_TAC);
2985 BY(ASM_REWRITE_TAC[GSYM Sphere.cstab]);
2986 FIRST_ASSUM (unlist REWRITE_TAC);
2988 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "5557288534") [`norm (v (p))`;`norm(v (p+3))`;`norm(v (p+2))`;`cstab`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+3))`];
2989 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
2990 FIRST_X_ASSUM_ST `#3.01` (unlist REWRITE_TAC);
2992 INTRO_TAC Ocbicby.dih_y_mono [`norm (v (p))`;`norm(v (p+3))`;`norm(v (p+2))`;`dist(v (p+3),v(p+2))`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+3))`;`cstab`];
2994 TYPIFY_GOAL_THEN `&0 < norm (v p)` (unlist REWRITE_TAC);
2995 BY(ASM_REWRITE_TAC[arith `&0 < &2`]);
2996 FIRST_X_ASSUM_ST `norm (v p) = &2` kill;
2999 BY(ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REWRITE_TAC[]);
3001 FIRST_X_ASSUM_ST `&2 <= dist s` (C INTRO_TAC [`3`;`2`]);
3002 BY(NUM_REDUCE_TAC THEN REAL_ARITH_TAC);
3004 BY(FIRST_X_ASSUM_ST `delta_y` MP_TAC THEN REAL_ARITH_TAC);
3005 FIRST_X_ASSUM_ST `coplanar` (C INTRO_TAC [`p+3`]);
3007 BY(ASM_REWRITE_TAC[]);
3008 REWRITE_TAC[arith `(p+3) +i = p+(3+i)`] THEN NUM_REDUCE_TAC;
3009 REWRITE_TAC[Oxlzlez.coplanar_delta_y];
3010 ASM_REWRITE_TAC[DIST_SYM;DIST_0];
3011 MATCH_MP_TAC (arith `a = b ==> &0 < a ==> &0 < b`);
3012 BY(MESON_TAC[Merge_ineq.delta_y_sym]);
3014 TYPIFY `dih_y (norm (v p)) (norm (v (p + 3))) (norm (v (p + 2))) (dist (v (p + 3),v (p + 2))) (dist (v p,v (p + 2))) (dist (v p,v (p + 3))) + dih_y (norm (v p)) (norm (v (p + 1))) (norm (v (p + 2))) (dist (v (p + 1),v (p + 2))) (dist (v p,v (p + 2))) (dist (v p,v (p + 1))) <= #3.1` (C SUBGOAL_THEN ASSUME_TAC);
3015 BY(REPLICATE_TAC 5 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
3016 TYPIFY `#3.1 < pi` (C SUBGOAL_THEN ASSUME_TAC);
3017 BY(MP_TAC Flyspeck_constants.bounds THEN REAL_ARITH_TAC);
3018 FIRST_X_ASSUM_ST `a = pi` MP_TAC THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC);
3019 REWRITE_TAC[DIST_0;DIST_SYM];
3020 TYPIFY `dih_y (norm (v p)) (norm (v (p + 2))) (norm (v (p + 3))) (dist (v (p + 2),v (p + 3))) (dist (v p,v (p + 3))) (dist (v p,v (p + 2))) = dih_y (norm (v p)) (norm (v (p + 3))) (norm (v (p + 2))) (dist (v (p + 2),v (p + 3))) (dist (v p,v (p + 2))) (dist (v p,v (p + 3)))` (C SUBGOAL_THEN SUBST1_TAC);
3021 BY(REWRITE_TAC[Nonlinear_lemma.dih_y_sym]);
3026 let LEMMA_PWE2 = prove_by_refinement(
3027 (* main_work4 ==> *) ` main_nonlinear_terminal_v11 ==> (!s v p.
3028 is_scs_v39 s /\ scs_basic_v39 s /\ scs_k_v39 s = 4 /\ v IN MMs_v39 s /\
3029 (!i j. scs_diag 4 i j ==> scs_a_v39 s i j <= cstab /\ cstab < dist(v i,v j) /\ &4*h0 < scs_b_v39 s i j) /\
3030 (!i. (scs_a_v39 s i (i+1) = &2 /\ scs_b_v39 s i (i+1)= &2*h0) \/
3031 (scs_a_v39 s i (i+1) = &2 * h0 /\ scs_b_v39 s i (i+1)= cstab)) /\
3033 ~scs_is_str s v (p+1) /\ ~scs_is_str s v (p+3) /\
3034 scs_is_str s v p /\ norm (v p) = &2 /\
3035 scs_a_v39 s p (p+1) = &2 /\
3036 scs_a_v39 s (p+3) (p) = &2 /\
3037 dist(v (p+2),v(p+3)) <= &2 * h0 ==>
3038 pi / &2 < dihV (vec 0) (v (p+3)) (v (p)) (v (p+2)))`,
3041 REPEAT WEAKER_STRIP_TAC;
3042 REWRITE_TAC[arith `x < y <=> ~(y <= x)`] THEN DISCH_TAC;
3043 REPEAT WEAKER_STRIP_TAC;
3044 TYPIFY `BBprime2_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
3045 BY(ASM_MESON_TAC[Appendix.scs_basic;Ayqjtmd.unadorned_MMs;IN]);
3046 TYPIFY `BBprime_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
3047 BY(ASM_MESON_TAC[Appendix.BBprime2_v39]);
3048 TYPIFY `BBs_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
3049 BY(ASM_MESON_TAC[Appendix.BBprime_v39]);
3050 INTRO_TAC Appendix.BBs_v39 [`s`;`v`];
3051 ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;Terminal.IMAGE_SUBSET_IN;IN_UNIV;arith `~(4 <= 3)`];
3052 REPEAT WEAKER_STRIP_TAC;
3053 TYPED_ABBREV_TAC `V = IMAGE v (:num)`;
3054 TYPED_ABBREV_TAC `E = IMAGE (\i. {v i, v (SUC i)}) (:num)`;
3055 TYPED_ABBREV_TAC `FF = IMAGE (\i. (v i,v (SUC i))) (:num)`;
3056 TYPIFY `local_fan (V,E,FF)` (C SUBGOAL_THEN ASSUME_TAC);
3057 MATCH_MP_TAC Local_lemmas.CVX_LO_IMP_LO;
3058 BY(ASM_REWRITE_TAC[]);
3059 TYPIFY `!i. v i IN V` (C SUBGOAL_THEN ASSUME_TAC);
3060 REPEAT WEAKER_STRIP_TAC;
3062 REWRITE_TAC[IN_IMAGE;IN_UNIV];
3064 INTRO_TAC Cuxvzoz.BBs_inj [`s`;`v`;`4`];
3067 TYPIFY `!i. interior_angle1 (vec 0) FF (v i) = azim (vec 0) (v i) (v (i+1)) (v (i+3))` (C SUBGOAL_THEN ASSUME_TAC);
3070 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] (GSYM Ocbicby.INTERIOR_ANGLE1_AZIM));
3071 TYPIFY `s` EXISTS_TAC;
3072 BY(ASM_REWRITE_TAC[IN;arith `4 - 1 = 3`;arith `3 < 4`;arith `SUC i = i+1`]);
3073 INTRO_TAC Ocbicby.LOCAL_FAN_AZIM_POS [`s`;`v`];
3074 ASM_REWRITE_TAC[LET_THM;IN;arith `4-1 = 3`;arith `SUC i = i+1`];
3076 TYPIFY `!i. v (i MOD 4) = v i` (C SUBGOAL_THEN ASSUME_TAC);
3078 MATCH_MP_TAC (GSYM Oxl_def.periodic_mod);
3079 BY(ASM_REWRITE_TAC[arith `~(0=4)`]);
3080 TYPIFY `v 4 = v 0 /\ v 5 = v 1 /\ v 6 = v 2 /\ v 7 = v 3 /\ v 8 = v 4` (C SUBGOAL_THEN ASSUME_TAC);
3081 FIRST_X_ASSUM ((unlist ONCE_REWRITE_TAC) o GSYM);
3082 BY(REWRITE_TAC[Terminal.MOD_4_EXPLICIT;arith `7 = 1*4 + 3`;arith `8 = 2*4 + 0`;MOD_MULT_ADD]);
3083 TYPIFY `generic V E` (C SUBGOAL_THEN ASSUME_TAC);
3084 BY(FIRST_X_ASSUM_ST `scs_generic` MP_TAC THEN ASM_REWRITE_TAC[Appendix.scs_generic]);
3085 TYPIFY `v (p+4) = v p /\ v (p+5) = v (p+1) /\ v (p+6) = v (p+2) /\ v (p+7) = v (p+3) /\ v (p+8) = v (p)` (C SUBGOAL_THEN ASSUME_TAC);
3086 FIRST_X_ASSUM_ST `MOD` ((unlist ONCE_REWRITE_TAC) o GSYM);
3087 BY(REWRITE_TAC[arith `p+4 = 1*4 + p /\ p+5 = 1*4+(p+1) /\ p+6=1*4+(p+2) /\ p+7 = 1*4 + (p+3) /\ p+8 = 2*4 + p`;MOD_MULT_ADD]);
3088 TYPIFY `!i. &2 <= norm (v i) /\ norm (v i) <= &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
3090 REWRITE_TAC[GSYM Fnjlbxs.in_ball_annulus];
3091 BY(ASM_REWRITE_TAC[]);
3092 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> &2 <= dist(v (p + i),v (p+j))` (C SUBGOAL_THEN ASSUME_TAC);
3093 REPEAT WEAKER_STRIP_TAC;
3094 MATCH_MP_TAC Ocbicby.scs_lb_2;
3095 TYPIFY `s` EXISTS_TAC;
3097 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
3099 REPEAT (GMATCH_SIMP_TAC MOD_LT);
3100 BY(ASM_REWRITE_TAC[]);
3101 COMMENT "edge lengths";
3102 TYPIFY `scs_b_v39 s (p+1) ((p+1)+1) <= cstab /\ scs_b_v39 s p (p+1) = &2 * h0 /\ scs_b_v39 s (p+3) ((p+3)+1) = &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
3104 TYPIFY `~(&2 = &2 * h0)` (C SUBGOAL_THEN ASSUME_TAC);
3105 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
3106 TYPIFY `scs_a_v39 s (p+3) p = scs_a_v39 s (p+3) ((p+3)+1)` ENOUGH_TO_SHOW_TAC;
3107 BY(ASM_MESON_TAC[]);
3108 REWRITE_TAC[arith `((p+3)+1) = p+4`];
3109 FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
3110 BY(ASM_MESON_TAC[Appendix.periodic2;Oxl_def.periodic]);
3111 FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
3112 FIRST_X_ASSUM_ST `x <= cstab` (C INTRO_TAC [`p+1`]) THEN ASM_REWRITE_TAC[arith `3 < 4`];
3113 BY(REWRITE_TAC[arith `SUC (p+1) = (p+1)+1`]);
3114 FIRST_X_ASSUM MP_TAC THEN REWRITE_TAC[arith `((p:num) + i ) + j = p + (i+j)`] THEN NUM_REDUCE_TAC;
3116 TYPIFY `dist(v (p+1),v(p+2)) <= cstab /\ dist(v p,v(p+1)) <= &2 * h0 /\ dist(v(p+3),v(p+4)) <= &2 * h0` (C SUBGOAL_THEN MP_TAC);
3117 FIRST_X_ASSUM MP_TAC;
3118 FIRST_X_ASSUM_ST `scs_b_v39` MP_TAC;
3119 BY(MESON_TAC[REAL_LE_TRANS]);
3121 REPEAT WEAKER_STRIP_TAC;
3122 COMMENT "collinear";
3123 TYPIFY `!i j. ~(v i = v j) ==> ~collinear {vec 0,v i, v j}` (C SUBGOAL_THEN ASSUME_TAC);
3124 REPEAT GEN_TAC THEN DISCH_TAC;
3125 MATCH_MP_TAC Zlzthic.PROPERTIES_GENERIC_LOCAL_FAN_ALT;
3126 GEXISTL_TAC [`V`;`E`;`FF`];
3127 BY(ASM_REWRITE_TAC[IN_IMAGE;IN_UNIV]);
3128 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> ~(v i = v j)` (C SUBGOAL_THEN ASSUME_TAC);
3129 BY(REPLICATE_TAC 20 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
3130 INTRO_TAC PERIODIC_INJ_MOD [`v`;`4`];
3131 ASM_REWRITE_TAC[arith `~(4 = 0)`];
3133 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i=j) ==> ~(v (p +i) = v (p+j))` (C SUBGOAL_THEN ASSUME_TAC);
3134 REPEAT WEAKER_STRIP_TAC;
3135 FIRST_X_ASSUM MP_TAC THEN ASM_REWRITE_TAC[];
3136 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
3138 REPEAT (GMATCH_SIMP_TAC MOD_LT);
3139 BY(ASM_REWRITE_TAC[]);
3140 TYPIFY `!i. 0 < i /\ i < 4 ==> ~(v (p+i) = v p)` (C SUBGOAL_THEN ASSUME_TAC);
3141 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[arith `p+0 = p`;arith `0< 4`;arith `0 < i ==> ~(i=0)`]);
3142 COMMENT "long diag";
3143 TYPIFY `#3.3 <= dist(v (p+2),v p)` ASM_CASES_TAC;
3144 COMMENT "long diag";
3145 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "6184614449") [`norm (v (p+3))`;`norm(v (p+2))`;`norm(v p)`;`dist(v(p+2),v p)`;`dist(v(p+3),v p)`;`dist(v(p+3),v(p+2))`];
3146 FIRST_X_ASSUM_ST `norm x = &2` kill;
3147 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
3149 DISCH_THEN MP_TAC THEN ANTS_TAC;
3151 INTRO_TAC DIST_TRIANGLE [`v (p+2)`;`(vec 0):real^3`;`v (p)`];
3152 REWRITE_TAC[DIST_0];
3153 MATCH_MP_TAC (arith `x <= &2 * h0 /\ y <= &2 * h0 ==> (d <= x + y ==> d <= &4 * h0)`);
3154 BY(ASM_REWRITE_TAC[]);
3156 BY(ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REWRITE_TAC[]);
3158 TYPIFY `v p = v (p+0)` (C SUBGOAL_THEN SUBST1_TAC);
3159 ONCE_REWRITE_TAC[arith `p+0=p`];
3161 BY(CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
3163 FIRST_X_ASSUM_ST `dihV` MP_TAC;
3164 REWRITE_TAC[arith `~(x <= y) <=> y < x`];
3165 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] Merge_ineq.DIHV_EQ_DIH_Y);
3166 ASM_REWRITE_TAC[DIST_0];
3168 BY(CONJ_TAC THEN (REPEAT (FIRST_X_ASSUM MATCH_MP_TAC)) THEN NUM_REDUCE_TAC);
3169 ONCE_REWRITE_TAC[Nonlinear_lemma.dih_y_sym];
3170 MATCH_MP_TAC Ocbicby.delta4_y_imp_obtuse;
3172 BY(ASM_MESON_TAC[arith `&2 <= x==> &0 < x`]);
3173 INTRO_TAC DIST_SYM [`v p`;`v (p+2)`];
3174 DISCH_THEN SUBST1_TAC;
3176 BY(REWRITE_TAC[REWRITE_RULE[LET_THM] Tame_lemmas.delta_y_pos]);
3177 BY(ASM_REWRITE_TAC[]);
3178 TYPIFY `!i. ~scs_is_str s v i ==> ~coplanar {vec 0, v i, v(i+1), v(i+3)}` (C SUBGOAL_THEN ASSUME_TAC);
3179 GEN_TAC THEN ASM_REWRITE_TAC[Appendix.scs_is_str;arith `SUC i = i+1`;GSYM Local_lemmas1.AZIM_COND_FOR_COPLANAR];
3181 DISCH_THEN (unlist REWRITE_TAC);
3182 MATCH_MP_TAC (arith `&0 < a ==> ~(a = &0)`);
3183 INTRO_TAC Ocbicby.LOCAL_FAN_AZIM_POS [`s`;`v`;`i`];
3184 BY(ASM_REWRITE_TAC[LET_THM;IN;arith `SUC i = i+1`;arith `4 - 1 = 3`]);
3185 FIRST_X_ASSUM MP_TAC THEN BURY_MP_TAC;
3186 COMMENT "short diag";
3187 INTRO_TAC Terminal.vv_split_azim_generic [`v`;`4`;`p`;`2`;`3`];
3188 ASM_REWRITE_TAC[arith `SUC p = p+1`;LET_THM];
3191 TYPIFY `azim (vec 0) (v p) (v (p+1)) (v (p+3)) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
3192 FIRST_X_ASSUM_ST `interior_angle1` ((unlist REWRITE_TAC) o GSYM);
3193 MATCH_MP_TAC Local_lemmas.CONVEX_LOFA_IMP_INANGLE_LE_PI;
3194 BY(ASM_REWRITE_TAC[]);
3195 TYPIFY `azim (vec 0) (v p) (v (p + 1)) (v (p + 2)) <= pi /\ azim (vec 0) (v p) (v (p + 2)) (v (p + 3)) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
3196 MATCH_MP_TAC (arith `&0 < pi /\ &0 <= a /\ &0 <= b /\ a + b <= pi ==> a <= pi /\ b <= pi`);
3197 REWRITE_TAC[PI_POS];
3198 REWRITE_TAC[Counting_spheres.AZIM_NN];
3199 BY(REPLICATE_TAC 2 (POP_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
3200 FIRST_X_ASSUM_ST `scs_is_str` MP_TAC;
3201 REWRITE_TAC[Appendix.scs_is_str];
3204 REWRITE_TAC[arith `SUC p = p+1`];
3205 DISCH_THEN (RULE_ASSUM_TAC o (unlist REWRITE_RULE));
3206 INTRO_TAC AZIM_DIHV_SAME_STRONG [`(vec 0):real^3`;`v p`;`v (p+2)`;`v (p+3)`];
3207 INTRO_TAC AZIM_DIHV_SAME_STRONG [`(vec 0):real^3`;`v p`;`v (p+1)`;`v (p+2)`];
3208 FIRST_X_ASSUM_ST `pi = a` (MP_TAC o SYM) THEN DISCH_TAC;
3210 TYPIFY `~collinear {vec 0, v p, v (p + 1)} /\ ~collinear {vec 0, v p, v (p + 2)} /\ ~collinear {vec 0, v p, v (p + 3)}` (C SUBGOAL_THEN ASSUME_TAC);
3211 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
3213 REPEAT WEAKER_STRIP_TAC;
3214 REPEAT (FIRST_X_ASSUM_ST `dihV` MP_TAC) THEN REWRITE_TAC[] THEN REPEAT (GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] Merge_ineq.DIHV_EQ_DIH_Y));
3217 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
3218 REPEAT WEAKER_STRIP_TAC;
3219 FIRST_X_ASSUM_ST `+` MP_TAC THEN ASM_REWRITE_TAC[];
3221 TYPIFY `cstab <= dist(v p,v(p+2))` (C SUBGOAL_THEN ASSUME_TAC);
3222 FIRST_X_ASSUM_ST `cstab < d` (C INTRO_TAC [`p`;`p+2`]);
3224 REWRITE_TAC[arith `p+2 = SUC(SUC (p))`];
3225 MATCH_MP_TAC Tfitskc.SCS_DIAG_2;
3228 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "1348932091 delta") [`norm (v (p))`;`norm(v (p+3))`;`norm(v (p+2))`;`&2 * h0`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+3))`];
3229 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
3230 TYPIFY `(&2 <= norm (v p) /\ norm (v p) <= &2) /\ (&2 <= norm (v (p + 3)) /\ norm (v (p + 3)) <= #2.52) /\ (&2 <= norm (v (p + 2)) /\ norm (v (p + 2)) <= #2.52) /\ ( #2.52 <= &2 * h0 /\ &2 * h0 <= #2.52) /\ ( #3.01 <= dist (v p,v (p + 2)) /\ dist (v p,v (p + 2)) <= #3.3) /\ &2 <= dist (v p,v (p + 3)) /\ dist (v p,v (p + 3)) <= #2.52` (C SUBGOAL_THEN ASSUME_TAC);
3231 TYPIFY `#2.52 = &2 * h0` (C SUBGOAL_THEN SUBST1_TAC);
3232 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
3233 ASM_REWRITE_TAC[arith `(x <= y /\ y <= x) <=> y = x`];
3235 BY(ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REWRITE_TAC[]);
3238 FIRST_X_ASSUM_ST `&2 <= dist s` (C INTRO_TAC [`0`;`3`]);
3239 BY(REWRITE_TAC[arith `p+0=p`] THEN DISCH_THEN MATCH_MP_TAC THEN NUM_REDUCE_TAC);
3241 BY(FIRST_X_ASSUM_ST `#3.3` MP_TAC THEN REWRITE_TAC[DIST_SYM] THEN REAL_ARITH_TAC);
3242 BY(ASM_REWRITE_TAC[GSYM Sphere.cstab]);
3243 FIRST_X_ASSUM_ST `norm x = &2` MP_TAC;
3245 REPEAT WEAKER_STRIP_TAC;
3246 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "1348932091") [`norm (v (p))`;`norm(v (p+3))`;`norm(v (p+2))`;`&2 * h0`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+3))`];
3247 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
3248 FIRST_X_ASSUM_ST `#3.01` (unlist REWRITE_TAC);
3250 INTRO_TAC Ocbicby.dih_y_mono [`norm (v (p))`;`norm(v (p+3))`;`norm(v (p+2))`;`dist(v (p+3),v(p+2))`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+3))`;`&2 * h0`];
3253 BY(FIRST_X_ASSUM_ST `norm x = &2` MP_TAC THEN REAL_ARITH_TAC);
3254 FIRST_X_ASSUM_ST `norm x = &2` kill;
3255 ASM_REWRITE_TAC[arith `&0 < &2`];
3257 BY(ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REWRITE_TAC[]);
3259 FIRST_X_ASSUM_ST `&2 <= dist s` (C INTRO_TAC [`3`;`2`]);
3260 BY(NUM_REDUCE_TAC THEN REAL_ARITH_TAC);
3262 BY(FIRST_X_ASSUM_ST `delta_y` MP_TAC THEN REAL_ARITH_TAC);
3263 FIRST_X_ASSUM_ST `coplanar` (C INTRO_TAC [`p+3`]);
3265 BY(ASM_REWRITE_TAC[]);
3266 REWRITE_TAC[arith `(p+3) +i = p+(3+i)`] THEN NUM_REDUCE_TAC;
3267 REWRITE_TAC[Oxlzlez.coplanar_delta_y];
3268 ASM_REWRITE_TAC[DIST_SYM;DIST_0];
3269 MATCH_MP_TAC (arith `a = b ==> &0 < a ==> &0 < b`);
3270 BY(MESON_TAC[Merge_ineq.delta_y_sym]);
3273 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "5557288534 delta") [`norm (v (p))`;`norm(v (p+1))`;`norm(v (p+2))`;`cstab`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+1))`];
3274 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
3275 TYPIFY `(&2 <= norm (v p) /\ norm (v p) <= &2) /\ (&2 <= norm (v (p + 1)) /\ norm (v (p + 1)) <= #2.52) /\ (&2 <= norm (v (p + 2)) /\ norm (v (p + 2)) <= #2.52) /\ ( #3.01 <= cstab /\ cstab <= #3.01) /\ ( #3.01 <= dist (v p,v (p + 2)) /\ dist (v p,v (p + 2)) <= #3.3) /\ &2 <= dist (v p,v (p + 1)) /\ dist (v p,v (p + 1)) <= #2.52` (C SUBGOAL_THEN ASSUME_TAC);
3276 TYPIFY `#2.52 = &2 * h0` (C SUBGOAL_THEN SUBST1_TAC);
3277 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
3278 ASM_REWRITE_TAC[arith `(x <= y /\ y <= x) <=> y = x`;Sphere.cstab];
3280 FIRST_X_ASSUM_ST `&2 <= dist s` (C INTRO_TAC [`0`;`1`]);
3281 BY(REWRITE_TAC[arith `p+0=p`] THEN DISCH_THEN MATCH_MP_TAC THEN NUM_REDUCE_TAC);
3283 BY(FIRST_X_ASSUM_ST `#3.3` MP_TAC THEN REWRITE_TAC[DIST_SYM] THEN REAL_ARITH_TAC);
3284 BY(ASM_REWRITE_TAC[GSYM Sphere.cstab]);
3285 FIRST_ASSUM (unlist REWRITE_TAC);
3287 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "5557288534") [`norm (v (p))`;`norm(v (p+1))`;`norm(v (p+2))`;`cstab`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+1))`];
3288 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
3289 FIRST_X_ASSUM_ST `#3.01` (unlist REWRITE_TAC);
3291 INTRO_TAC Ocbicby.dih_y_mono [`norm (v (p))`;`norm(v (p+1))`;`norm(v (p+2))`;`dist(v (p+1),v(p+2))`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+1))`;`cstab`];
3293 TYPIFY_GOAL_THEN `&0 < norm (v p)` (unlist REWRITE_TAC);
3294 BY(ASM_REWRITE_TAC[arith `&0 < &2`]);
3295 FIRST_X_ASSUM_ST `norm (v p) = &2` kill;
3298 FIRST_X_ASSUM_ST `&2 <= dist s` (C INTRO_TAC [`1`;`2`]);
3299 BY(NUM_REDUCE_TAC THEN REAL_ARITH_TAC);
3301 BY(FIRST_X_ASSUM_ST `delta_y` MP_TAC THEN REAL_ARITH_TAC);
3302 FIRST_X_ASSUM_ST `coplanar` (C INTRO_TAC [`p+1`]);
3304 BY(ASM_REWRITE_TAC[]);
3305 REWRITE_TAC[arith `(p+1) +i = p+(1+i)`] THEN NUM_REDUCE_TAC;
3306 REWRITE_TAC[Oxlzlez.coplanar_delta_y];
3307 ASM_REWRITE_TAC[DIST_SYM;DIST_0];
3308 MATCH_MP_TAC (arith `a = b ==> &0 < a ==> &0 < b`);
3309 BY(MESON_TAC[Merge_ineq.delta_y_sym]);
3311 TYPIFY `dih_y (norm (v p)) (norm (v (p + 3))) (norm (v (p + 2))) (dist (v (p + 3),v (p + 2))) (dist (v p,v (p + 2))) (dist (v p,v (p + 3))) + dih_y (norm (v p)) (norm (v (p + 1))) (norm (v (p + 2))) (dist (v (p + 1),v (p + 2))) (dist (v p,v (p + 2))) (dist (v p,v (p + 1))) < #3.1` (C SUBGOAL_THEN ASSUME_TAC);
3312 BY(REPLICATE_TAC 5 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
3313 TYPIFY `#3.1 < pi` (C SUBGOAL_THEN ASSUME_TAC);
3314 BY(MP_TAC Flyspeck_constants.bounds THEN REAL_ARITH_TAC);
3315 FIRST_X_ASSUM_ST `a = pi` MP_TAC THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC);
3316 REWRITE_TAC[DIST_0;DIST_SYM];
3317 TYPIFY `dih_y (norm (v p)) (norm (v (p + 2))) (norm (v (p + 3))) (dist (v (p + 2),v (p + 3))) (dist (v p,v (p + 3))) (dist (v p,v (p + 2))) = dih_y (norm (v p)) (norm (v (p + 3))) (norm (v (p + 2))) (dist (v (p + 2),v (p + 3))) (dist (v p,v (p + 2))) (dist (v p,v (p + 3)))` (C SUBGOAL_THEN SUBST1_TAC);
3318 BY(REWRITE_TAC[Nonlinear_lemma.dih_y_sym]);
3323 let LINDIH_11 = prove_by_refinement(
3324 (* main_work4 ==> *) `main_nonlinear_terminal_v11 ==>
3325 (!y1 y2 y3 y4 y5 y6.
3334 ((dih_y y1 y2 y3 y4 y5 y6 < #1.1) \/ delta_y y1 y2 y3 y4 y5 y6 < &0))`,
3337 REPEAT WEAKER_STRIP_TAC;
3338 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
3339 REPEAT WEAKER_STRIP_TAC;
3340 TYPIFY `delta_y y1 y2 y3 y4 y5 y6 < &0` ASM_CASES_TAC;
3341 BY(ASM_REWRITE_TAC[]);
3343 REWRITE_TAC[Sphere.dih_y;LET_THM];
3344 GMATCH_SIMP_TAC Merge_ineq.lindih_lt;
3345 REWRITE_TAC[GSYM CONJ_ASSOC];
3346 GMATCH_SIMP_TAC REAL_LT_MUL_EQ;
3348 BY(ASM_TAC THEN REAL_ARITH_TAC);
3350 BY(MP_TAC Flyspeck_constants.bounds THEN REAL_ARITH_TAC);
3352 BY(ASM_TAC THEN REAL_ARITH_TAC);
3353 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "9368433105") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
3354 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;LET_THM];
3355 REWRITE_TAC[Sphere.delta4_y;Sphere.y_of_x];
3357 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "8405387449") [`y1`;`y2`;`y3`;`y4`;`y5`;`y6`];
3358 ASM_REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;LET_THM];
3359 ASM_SIMP_TAC [arith `d > &0 ==> &0 < d`];
3361 TYPIFY `&0 <= (&4 * (y1 * y1) * delta_x (y1 * y1) (y2 * y2) (y3 * y3) (y4 * y4) (y5 * y5) (y6 * y6))` (C SUBGOAL_THEN ASSUME_TAC);
3362 REPEAT (GMATCH_SIMP_TAC REAL_LE_MUL);
3363 FIRST_X_ASSUM_ST `delta_y` MP_TAC THEN REWRITE_TAC[Sphere.delta_y];
3364 BY(ASM_TAC THEN REAL_ARITH_TAC);
3365 GMATCH_SIMP_TAC Pack1.bp_bdt;
3366 GMATCH_SIMP_TAC SQRT_POS_LE;
3369 GMATCH_SIMP_TAC REAL_LE_MUL;
3370 GMATCH_SIMP_TAC TAN_POS_PI2_LE;
3371 ASM_SIMP_TAC[arith `x > &0 ==> &0 <= x`];
3372 BY(MP_TAC Flyspeck_constants.bounds THEN ASM_TAC THEN REAL_ARITH_TAC);
3373 GMATCH_SIMP_TAC SQRT_POW_2;
3375 MATCH_MP_TAC REAL_LT_TRANS;
3376 TYPIFY `#3.86 * delta4_squared_y y1 y2 y3 y4 y5 y6` EXISTS_TAC;
3378 FIRST_X_ASSUM_ST `x1_delta_y` MP_TAC;
3379 BY(REWRITE_TAC[Sphere.x1_delta_y;Sphere.delta4_squared_y;Sphere.y_of_x;Sphere.x1_delta_x]);
3380 REWRITE_TAC[Sphere.delta4_squared_y;Sphere.y_of_x;Sphere.delta4_squared_x];
3381 REWRITE_TAC[arith `(x * y) pow 2 = x pow 2 * y pow 2`];
3382 GMATCH_SIMP_TAC REAL_LT_RMUL_EQ;
3384 REWRITE_TAC[GSYM Trigonometry2.NOT_ZERO_EQ_POW2_LT];
3385 BY(ASM_TAC THEN REAL_ARITH_TAC);
3386 TYPIFY `#3.86 = sqrt(#3.86) pow 2` (C SUBGOAL_THEN SUBST1_TAC);
3387 GMATCH_SIMP_TAC SQRT_POW_2;
3389 MATCH_MP_TAC Tame_inequalities.REAL_LT_SQUARE_POS;
3390 GMATCH_SIMP_TAC SQRT_POS_LT;
3393 TYPIFY `atn(sqrt #3.86) < atn(tan #1.1)` ENOUGH_TO_SHOW_TAC;
3394 BY(REWRITE_TAC[ATN_MONO_LT_EQ]);
3395 GMATCH_SIMP_TAC TAN_ATN;
3397 BY(MP_TAC Flyspeck_constants.bounds THEN REAL_ARITH_TAC);
3398 BY(REWRITE_TAC[Flyspeck_constants.calc `atn (sqrt #3.86) < #1.1`])
3402 let LEMMA_PWE3 = prove_by_refinement(
3403 (* main_work4 ==> *) ` main_nonlinear_terminal_v11 ==> (!s v p.
3404 is_scs_v39 s /\ scs_basic_v39 s /\ scs_k_v39 s = 4 /\ v IN MMs_v39 s /\
3405 (!i j. scs_diag 4 i j ==> scs_a_v39 s i j <= cstab /\ cstab < dist(v i,v j) /\ &4*h0 < scs_b_v39 s i j) /\
3406 (!i. (scs_a_v39 s i (i+1) = &2 /\ scs_b_v39 s i (i+1)= &2*h0) \/
3407 (scs_a_v39 s i (i+1) = &2 * h0 /\ scs_b_v39 s i (i+1)= cstab)) /\
3409 ~scs_is_str s v (p+1) /\ ~scs_is_str s v (p+3) /\
3410 scs_is_str s v p /\ norm (v p) = &2 /\
3411 scs_a_v39 s p (p+1) = &2 /\
3412 scs_a_v39 s (p+3) (p) = &2 * h0 /\
3413 dist(v (p+2),v(p+3)) = &2 /\
3414 &2 * h0 <= dist(v(p+1),v(p+2)) ==>
3415 pi / &2 < dihV (vec 0) (v (p+1)) (v (p)) (v (p+2)))`,
3418 REPEAT WEAKER_STRIP_TAC;
3419 REWRITE_TAC[arith `x < y <=> ~(y <= x)`] THEN DISCH_TAC;
3420 REPEAT WEAKER_STRIP_TAC;
3421 TYPIFY `BBprime2_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
3422 BY(ASM_MESON_TAC[Appendix.scs_basic;Ayqjtmd.unadorned_MMs;IN]);
3423 TYPIFY `BBprime_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
3424 BY(ASM_MESON_TAC[Appendix.BBprime2_v39]);
3425 TYPIFY `BBs_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
3426 BY(ASM_MESON_TAC[Appendix.BBprime_v39]);
3427 INTRO_TAC Appendix.BBs_v39 [`s`;`v`];
3428 ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;Terminal.IMAGE_SUBSET_IN;IN_UNIV;arith `~(4 <= 3)`];
3429 REPEAT WEAKER_STRIP_TAC;
3430 TYPED_ABBREV_TAC `V = IMAGE v (:num)`;
3431 TYPED_ABBREV_TAC `E = IMAGE (\i. {v i, v (SUC i)}) (:num)`;
3432 TYPED_ABBREV_TAC `FF = IMAGE (\i. (v i,v (SUC i))) (:num)`;
3433 TYPIFY `local_fan (V,E,FF)` (C SUBGOAL_THEN ASSUME_TAC);
3434 MATCH_MP_TAC Local_lemmas.CVX_LO_IMP_LO;
3435 BY(ASM_REWRITE_TAC[]);
3436 TYPIFY `!i. v i IN V` (C SUBGOAL_THEN ASSUME_TAC);
3437 REPEAT WEAKER_STRIP_TAC;
3439 REWRITE_TAC[IN_IMAGE;IN_UNIV];
3441 INTRO_TAC Cuxvzoz.BBs_inj [`s`;`v`;`4`];
3444 TYPIFY `!i. interior_angle1 (vec 0) FF (v i) = azim (vec 0) (v i) (v (i+1)) (v (i+3))` (C SUBGOAL_THEN ASSUME_TAC);
3447 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] (GSYM Ocbicby.INTERIOR_ANGLE1_AZIM));
3448 TYPIFY `s` EXISTS_TAC;
3449 BY(ASM_REWRITE_TAC[IN;arith `4 - 1 = 3`;arith `3 < 4`;arith `SUC i = i+1`]);
3450 INTRO_TAC Ocbicby.LOCAL_FAN_AZIM_POS [`s`;`v`];
3451 ASM_REWRITE_TAC[LET_THM;IN;arith `4-1 = 3`;arith `SUC i = i+1`];
3453 TYPIFY `!i. v (i MOD 4) = v i` (C SUBGOAL_THEN ASSUME_TAC);
3455 MATCH_MP_TAC (GSYM Oxl_def.periodic_mod);
3456 BY(ASM_REWRITE_TAC[arith `~(0=4)`]);
3457 TYPIFY `v 4 = v 0 /\ v 5 = v 1 /\ v 6 = v 2 /\ v 7 = v 3 /\ v 8 = v 4` (C SUBGOAL_THEN ASSUME_TAC);
3458 FIRST_X_ASSUM ((unlist ONCE_REWRITE_TAC) o GSYM);
3459 BY(REWRITE_TAC[Terminal.MOD_4_EXPLICIT;arith `7 = 1*4 + 3`;arith `8 = 2*4 + 0`;MOD_MULT_ADD]);
3460 TYPIFY `generic V E` (C SUBGOAL_THEN ASSUME_TAC);
3461 BY(FIRST_X_ASSUM_ST `scs_generic` MP_TAC THEN ASM_REWRITE_TAC[Appendix.scs_generic]);
3462 TYPIFY `v (p+4) = v p /\ v (p+5) = v (p+1) /\ v (p+6) = v (p+2) /\ v (p+7) = v (p+3) /\ v (p+8) = v (p)` (C SUBGOAL_THEN ASSUME_TAC);
3463 FIRST_X_ASSUM_ST `MOD` ((unlist ONCE_REWRITE_TAC) o GSYM);
3464 BY(REWRITE_TAC[arith `p+4 = 1*4 + p /\ p+5 = 1*4+(p+1) /\ p+6=1*4+(p+2) /\ p+7 = 1*4 + (p+3) /\ p+8 = 2*4 + p`;MOD_MULT_ADD]);
3465 TYPIFY `!i. &2 <= norm (v i) /\ norm (v i) <= &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
3467 REWRITE_TAC[GSYM Fnjlbxs.in_ball_annulus];
3468 BY(ASM_REWRITE_TAC[]);
3469 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> &2 <= dist(v (p + i),v (p+j))` (C SUBGOAL_THEN ASSUME_TAC);
3470 REPEAT WEAKER_STRIP_TAC;
3471 MATCH_MP_TAC Ocbicby.scs_lb_2;
3472 TYPIFY `s` EXISTS_TAC;
3474 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
3476 REPEAT (GMATCH_SIMP_TAC MOD_LT);
3477 BY(ASM_REWRITE_TAC[]);
3478 COMMENT "edge lengths";
3479 TYPIFY `scs_b_v39 s (p+1) ((p+1)+1) <= cstab /\ scs_b_v39 s p (p+1) = &2 * h0 /\ scs_b_v39 s (p+3) ((p+3)+1) = cstab` (C SUBGOAL_THEN ASSUME_TAC);
3480 TYPIFY `~(&2 = &2 * h0)` (C SUBGOAL_THEN ASSUME_TAC);
3481 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
3483 TYPIFY `scs_a_v39 s (p+3) p = scs_a_v39 s (p+3) ((p+3)+1)` ENOUGH_TO_SHOW_TAC;
3484 BY(ASM_MESON_TAC[]);
3485 REWRITE_TAC[arith `((p+3)+1) = p+4`];
3486 FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
3487 BY(ASM_MESON_TAC[Appendix.periodic2;Oxl_def.periodic]);
3488 FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
3489 FIRST_X_ASSUM_ST `x <= cstab` (C INTRO_TAC [`p+1`]) THEN ASM_REWRITE_TAC[arith `3 < 4`];
3490 BY(REWRITE_TAC[arith `SUC (p+1) = (p+1)+1`]);
3491 FIRST_X_ASSUM MP_TAC THEN REWRITE_TAC[arith `((p:num) + i ) + j = p + (i+j)`] THEN NUM_REDUCE_TAC;
3493 TYPIFY `dist(v (p+1),v(p+2)) <= cstab /\ dist(v p,v(p+1)) <= &2 * h0 /\ dist(v(p+3),v(p+4)) <= cstab` (C SUBGOAL_THEN MP_TAC);
3494 FIRST_X_ASSUM MP_TAC;
3495 FIRST_X_ASSUM_ST `scs_b_v39` MP_TAC;
3496 BY(MESON_TAC[REAL_LE_TRANS]);
3498 REPEAT WEAKER_STRIP_TAC;
3499 COMMENT "collinear";
3500 TYPIFY `!i j. ~(v i = v j) ==> ~collinear {vec 0,v i, v j}` (C SUBGOAL_THEN ASSUME_TAC);
3501 REPEAT GEN_TAC THEN DISCH_TAC;
3502 MATCH_MP_TAC Zlzthic.PROPERTIES_GENERIC_LOCAL_FAN_ALT;
3503 GEXISTL_TAC [`V`;`E`;`FF`];
3504 BY(ASM_REWRITE_TAC[IN_IMAGE;IN_UNIV]);
3505 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> ~(v i = v j)` (C SUBGOAL_THEN ASSUME_TAC);
3506 BY(REPLICATE_TAC 20 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
3507 INTRO_TAC PERIODIC_INJ_MOD [`v`;`4`];
3508 ASM_REWRITE_TAC[arith `~(4 = 0)`];
3510 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i=j) ==> ~(v (p +i) = v (p+j))` (C SUBGOAL_THEN ASSUME_TAC);
3511 REPEAT WEAKER_STRIP_TAC;
3512 FIRST_X_ASSUM MP_TAC THEN ASM_REWRITE_TAC[];
3513 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
3515 REPEAT (GMATCH_SIMP_TAC MOD_LT);
3516 BY(ASM_REWRITE_TAC[]);
3517 TYPIFY `!i. 0 < i /\ i < 4 ==> ~(v (p+i) = v p)` (C SUBGOAL_THEN ASSUME_TAC);
3518 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[arith `p+0 = p`;arith `0< 4`;arith `0 < i ==> ~(i=0)`]);
3519 COMMENT "long diag";
3520 TYPIFY `#2.52 = &2 * h0 /\ #3.01 = cstab` (C SUBGOAL_THEN ASSUME_TAC);
3521 BY(REWRITE_TAC[Sphere.h0;Sphere.cstab] THEN REAL_ARITH_TAC);
3522 TYPIFY `#3.55 <= dist(v (p+2),v p)` ASM_CASES_TAC;
3523 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "2073661826") [`norm (v (p+1))`;`norm(v (p+2))`;`norm(v p)`;`dist(v(p+2),v p)`;`dist(v(p+1),v p)`;`dist(v(p+1),v(p+2))`];
3524 FIRST_X_ASSUM_ST `norm x = &2` kill;
3525 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
3527 DISCH_THEN MP_TAC THEN ANTS_TAC;
3529 INTRO_TAC DIST_TRIANGLE [`v (p+2)`;`(vec 0):real^3`;`v (p)`];
3530 REWRITE_TAC[DIST_0];
3531 MATCH_MP_TAC (arith `x <= &2 * h0 /\ y <= &2 * h0 ==> (d <= x + y ==> d <= &4 * h0)`);
3532 BY(ASM_REWRITE_TAC[]);
3534 BY(ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REWRITE_TAC[]);
3535 TYPIFY `v p = v (p+0)` (C SUBGOAL_THEN SUBST1_TAC);
3536 ONCE_REWRITE_TAC[arith `p+0=p`];
3538 BY(FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
3540 FIRST_X_ASSUM_ST `dihV` MP_TAC;
3541 REWRITE_TAC[arith `~(x <= y) <=> y < x`];
3542 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] Merge_ineq.DIHV_EQ_DIH_Y);
3543 ASM_REWRITE_TAC[DIST_0];
3545 BY(CONJ_TAC THEN (REPEAT (FIRST_X_ASSUM MATCH_MP_TAC)) THEN NUM_REDUCE_TAC);
3546 ONCE_REWRITE_TAC[Nonlinear_lemma.dih_y_sym];
3547 MATCH_MP_TAC Ocbicby.delta4_y_imp_obtuse;
3549 BY(ASM_MESON_TAC[arith `&2 <= x==> &0 < x`]);
3550 INTRO_TAC DIST_SYM [`v p`;`v (p+2)`];
3551 DISCH_THEN SUBST1_TAC;
3553 BY(REWRITE_TAC[REWRITE_RULE[LET_THM] Tame_lemmas.delta_y_pos]);
3554 BY(ASM_REWRITE_TAC[]);
3555 TYPIFY `!i. ~scs_is_str s v i ==> ~coplanar {vec 0, v i, v(i+1), v(i+3)}` (C SUBGOAL_THEN ASSUME_TAC);
3556 GEN_TAC THEN ASM_REWRITE_TAC[Appendix.scs_is_str;arith `SUC i = i+1`;GSYM Local_lemmas1.AZIM_COND_FOR_COPLANAR];
3558 DISCH_THEN (unlist REWRITE_TAC);
3559 MATCH_MP_TAC (arith `&0 < a ==> ~(a = &0)`);
3560 INTRO_TAC Ocbicby.LOCAL_FAN_AZIM_POS [`s`;`v`;`i`];
3561 BY(ASM_REWRITE_TAC[LET_THM;IN;arith `SUC i = i+1`;arith `4 - 1 = 3`]);
3562 FIRST_X_ASSUM MP_TAC THEN BURY_MP_TAC;
3563 COMMENT "short diag";
3564 INTRO_TAC Terminal.vv_split_azim_generic [`v`;`4`;`p`;`2`;`3`];
3565 ASM_REWRITE_TAC[arith `SUC p = p+1`;LET_THM];
3568 TYPIFY `azim (vec 0) (v p) (v (p+1)) (v (p+3)) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
3569 FIRST_X_ASSUM_ST `interior_angle1` ((unlist REWRITE_TAC) o GSYM);
3570 MATCH_MP_TAC Local_lemmas.CONVEX_LOFA_IMP_INANGLE_LE_PI;
3571 BY(ASM_REWRITE_TAC[]);
3572 TYPIFY `azim (vec 0) (v p) (v (p + 1)) (v (p + 2)) <= pi /\ azim (vec 0) (v p) (v (p + 2)) (v (p + 3)) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
3573 MATCH_MP_TAC (arith `&0 < pi /\ &0 <= a /\ &0 <= b /\ a + b <= pi ==> a <= pi /\ b <= pi`);
3574 REWRITE_TAC[PI_POS];
3575 REWRITE_TAC[Counting_spheres.AZIM_NN];
3576 BY(REPLICATE_TAC 2 (POP_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
3577 FIRST_X_ASSUM_ST `scs_is_str` MP_TAC;
3578 REWRITE_TAC[Appendix.scs_is_str];
3581 REWRITE_TAC[arith `SUC p = p+1`];
3582 DISCH_THEN (RULE_ASSUM_TAC o (unlist REWRITE_RULE));
3583 INTRO_TAC AZIM_DIHV_SAME_STRONG [`(vec 0):real^3`;`v p`;`v (p+2)`;`v (p+3)`];
3584 INTRO_TAC AZIM_DIHV_SAME_STRONG [`(vec 0):real^3`;`v p`;`v (p+1)`;`v (p+2)`];
3585 FIRST_X_ASSUM_ST `pi = a` (MP_TAC o SYM) THEN DISCH_TAC;
3587 TYPIFY `~collinear {vec 0, v p, v (p + 1)} /\ ~collinear {vec 0, v p, v (p + 2)} /\ ~collinear {vec 0, v p, v (p + 3)}` (C SUBGOAL_THEN ASSUME_TAC);
3588 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
3590 REPEAT WEAKER_STRIP_TAC;
3591 REPEAT (FIRST_X_ASSUM_ST `dihV` MP_TAC) THEN REWRITE_TAC[] THEN REPEAT (GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] Merge_ineq.DIHV_EQ_DIH_Y));
3594 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
3595 REPEAT WEAKER_STRIP_TAC;
3596 FIRST_X_ASSUM_ST `+` MP_TAC THEN ASM_REWRITE_TAC[];
3598 TYPIFY `cstab <= dist(v p,v(p+2))` (C SUBGOAL_THEN ASSUME_TAC);
3599 FIRST_X_ASSUM_ST `cstab < d` (C INTRO_TAC [`p`;`p+2`]);
3601 REWRITE_TAC[arith `p+2 = SUC(SUC (p))`];
3602 MATCH_MP_TAC Tfitskc.SCS_DIAG_2;
3605 INTRO_TAC (UNDISCH2 LINDIH_11) [`norm (v (p))`;`norm(v (p+3))`;`norm(v (p+2))`;`dist(v(p+3),v(p+2))`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+3))`];
3606 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
3607 TYPIFY `(&2 <= norm (v p) /\ norm (v p) <= &2) /\ (&2 <= norm (v (p + 3)) /\ norm (v (p + 3)) <= #2.52) /\ (&2 <= norm (v (p + 2)) /\ norm (v (p + 2)) <= #2.52) /\ (&2 <= dist (v (p + 3),v (p + 2)) /\ dist (v (p + 3),v (p + 2)) <= &2) /\ ( #3.01 <= dist (v p,v (p + 2)) /\ dist (v p,v (p + 2)) <= #3.55) /\ &2 * h0 <= dist (v p,v (p + 3)) /\ dist (v p,v (p + 3)) <= #3.01` (C SUBGOAL_THEN ASSUME_TAC);
3608 ASM_REWRITE_TAC[arith `(x <= y /\ y <= x) <=> y = x`];
3610 BY(ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REWRITE_TAC[]);
3613 BY(ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REWRITE_TAC[]);
3615 BY(FIRST_X_ASSUM_ST `#3.55` MP_TAC THEN REWRITE_TAC[DIST_SYM] THEN REAL_ARITH_TAC);
3616 TYPIFY `scs_a_v39 s (p+3) p <= dist(v(p+3),v p) ` ENOUGH_TO_SHOW_TAC;
3617 REWRITE_TAC[DIST_SYM] THEN MATCH_MP_TAC (arith `a = b ==> (a <= d ==> b <= d)`);
3618 BY(ASM_REWRITE_TAC[]);
3619 BY(ASM_REWRITE_TAC[]);
3620 FIRST_ASSUM (unlist REWRITE_TAC);
3621 REWRITE_TAC[DE_MORGAN_THM];
3623 REWRITE_TAC[arith `~(d < &0) <=> &0 <= d`];
3624 FIRST_X_ASSUM_ST `coplanar` (C INTRO_TAC [`p+3`]);
3626 BY(ASM_REWRITE_TAC[]);
3627 REWRITE_TAC[arith `(p+3) +i = p+(3+i)`] THEN NUM_REDUCE_TAC;
3628 REWRITE_TAC[Oxlzlez.coplanar_delta_y];
3629 ASM_REWRITE_TAC[DIST_SYM;DIST_0];
3630 MATCH_MP_TAC (arith `a = b ==> &0 < a ==> &0 <= b`);
3631 BY(MESON_TAC[Merge_ineq.delta_y_sym]);
3634 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "5550839403 delta") [`norm (v (p))`;`norm(v (p+1))`;`norm(v (p+2))`;`cstab`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+1))`];
3635 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
3636 TYPIFY `(&2 <= norm (v p) /\ norm (v p) <= &2) /\ (&2 <= norm (v (p + 1)) /\ norm (v (p + 1)) <= #2.52) /\ (&2 <= norm (v (p + 2)) /\ norm (v (p + 2)) <= #2.52) /\ ( #3.01 <= cstab /\ cstab <= #3.01) /\ ( #3.01 <= dist (v p,v (p + 2)) /\ dist (v p,v (p + 2)) <= #3.55) /\ &2 <= dist (v p,v (p + 1)) /\ dist (v p,v (p + 1)) <= &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
3637 ASM_REWRITE_TAC[arith `(x <= y /\ y <= x) <=> y = x`];
3638 FIRST_X_ASSUM_ST `&2 <= dist s` (C INTRO_TAC [`0`;`1`]);
3639 BY(REWRITE_TAC[arith `p+0=p`] THEN DISCH_THEN MATCH_MP_TAC THEN NUM_REDUCE_TAC);
3640 FIRST_ASSUM (unlist REWRITE_TAC);
3642 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "5550839403") [`norm (v (p))`;`norm(v (p+1))`;`norm(v (p+2))`;`cstab`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+1))`];
3643 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
3644 FIRST_X_ASSUM_ST `#3.01` (unlist REWRITE_TAC);
3646 INTRO_TAC Ocbicby.dih_y_mono [`norm (v (p))`;`norm(v (p+1))`;`norm(v (p+2))`;`dist(v (p+1),v(p+2))`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+1))`;`cstab`];
3648 TYPIFY_GOAL_THEN `&0 < norm (v p)` (unlist REWRITE_TAC);
3649 BY(ASM_REWRITE_TAC[arith `&0 < &2`]);
3650 FIRST_X_ASSUM_ST `norm (v p) = &2` kill;
3653 FIRST_X_ASSUM_ST `&2 <= dist s` (C INTRO_TAC [`1`;`2`]);
3654 BY(NUM_REDUCE_TAC THEN REAL_ARITH_TAC);
3656 BY(FIRST_X_ASSUM_ST `delta_y` MP_TAC THEN REAL_ARITH_TAC);
3657 FIRST_X_ASSUM_ST `coplanar` (C INTRO_TAC [`p+1`]);
3659 BY(ASM_REWRITE_TAC[]);
3660 REWRITE_TAC[arith `(p+1) +i = p+(1+i)`] THEN NUM_REDUCE_TAC;
3661 REWRITE_TAC[Oxlzlez.coplanar_delta_y];
3662 ASM_REWRITE_TAC[DIST_SYM;DIST_0];
3663 MATCH_MP_TAC (arith `a = b ==> &0 < a ==> &0 < b`);
3664 BY(MESON_TAC[Merge_ineq.delta_y_sym]);
3666 TYPIFY `dih_y (norm (v p)) (norm (v (p + 3))) (norm (v (p + 2))) (dist (v (p + 3),v (p + 2))) (dist (v p,v (p + 2))) (dist (v p,v (p + 3))) + dih_y (norm (v p)) (norm (v (p + 1))) (norm (v (p + 2))) (dist (v (p + 1),v (p + 2))) (dist (v p,v (p + 2))) (dist (v p,v (p + 1))) < #3.1` (C SUBGOAL_THEN ASSUME_TAC);
3667 BY(REPLICATE_TAC 5 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
3668 TYPIFY `#3.1 < pi` (C SUBGOAL_THEN ASSUME_TAC);
3669 BY(MP_TAC Flyspeck_constants.bounds THEN REAL_ARITH_TAC);
3670 FIRST_X_ASSUM_ST `a = pi` MP_TAC THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC);
3671 REWRITE_TAC[DIST_0;DIST_SYM];
3672 FIRST_X_ASSUM_ST `dist s = &2` MP_TAC;
3673 DISCH_THEN ((unlist REWRITE_TAC) o GSYM);
3674 TYPIFY `dih_y (norm (v p)) (norm (v (p + 2))) (norm (v (p + 3))) (dist (v (p + 2),v (p + 3))) (dist (v p,v (p + 3))) (dist (v p,v (p + 2))) = dih_y (norm (v p)) (norm (v (p + 3))) (norm (v (p + 2))) (dist (v (p + 2),v (p + 3))) (dist (v p,v (p + 2))) (dist (v p,v (p + 3)))` (C SUBGOAL_THEN SUBST1_TAC);
3675 BY(REWRITE_TAC[Nonlinear_lemma.dih_y_sym]);
3680 let LEMMA_PWE4 = prove_by_refinement(
3681 (* main_work4 ==> *) ` main_nonlinear_terminal_v11 ==> (!s v p.
3682 is_scs_v39 s /\ scs_basic_v39 s /\ scs_k_v39 s = 4 /\ v IN MMs_v39 s /\
3683 (!i j. scs_diag 4 i j ==> scs_a_v39 s i j <= cstab /\ cstab < dist(v i,v j) /\ &4*h0 < scs_b_v39 s i j) /\
3684 (!i. (scs_a_v39 s i (i+1) = &2 /\ scs_b_v39 s i (i+1)= &2*h0) \/
3685 (scs_a_v39 s i (i+1) = &2 * h0 /\ scs_b_v39 s i (i+1)= cstab)) /\
3687 ~scs_is_str s v (p+1) /\ ~scs_is_str s v (p+3) /\
3688 scs_is_str s v p /\ norm (v p) = &2 /\
3689 scs_a_v39 s (p+3) p = &2 /\
3690 scs_a_v39 s p (p+1) = &2 * h0 /\
3691 dist(v (p+2),v(p+1)) = &2 /\
3692 &2 * h0 <= dist(v(p+3),v(p+2)) ==>
3693 pi / &2 < dihV (vec 0) (v (p+3)) (v (p)) (v (p+2)))`,
3696 REPEAT WEAKER_STRIP_TAC;
3697 REWRITE_TAC[arith `x < y <=> ~(y <= x)`] THEN DISCH_TAC;
3698 REPEAT WEAKER_STRIP_TAC;
3699 TYPIFY `BBprime2_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
3700 BY(ASM_MESON_TAC[Appendix.scs_basic;Ayqjtmd.unadorned_MMs;IN]);
3701 TYPIFY `BBprime_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
3702 BY(ASM_MESON_TAC[Appendix.BBprime2_v39]);
3703 TYPIFY `BBs_v39 s v` (C SUBGOAL_THEN ASSUME_TAC);
3704 BY(ASM_MESON_TAC[Appendix.BBprime_v39]);
3705 INTRO_TAC Appendix.BBs_v39 [`s`;`v`];
3706 ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;Terminal.IMAGE_SUBSET_IN;IN_UNIV;arith `~(4 <= 3)`];
3707 REPEAT WEAKER_STRIP_TAC;
3708 TYPED_ABBREV_TAC `V = IMAGE v (:num)`;
3709 TYPED_ABBREV_TAC `E = IMAGE (\i. {v i, v (SUC i)}) (:num)`;
3710 TYPED_ABBREV_TAC `FF = IMAGE (\i. (v i,v (SUC i))) (:num)`;
3711 TYPIFY `local_fan (V,E,FF)` (C SUBGOAL_THEN ASSUME_TAC);
3712 MATCH_MP_TAC Local_lemmas.CVX_LO_IMP_LO;
3713 BY(ASM_REWRITE_TAC[]);
3714 TYPIFY `!i. v i IN V` (C SUBGOAL_THEN ASSUME_TAC);
3715 REPEAT WEAKER_STRIP_TAC;
3717 REWRITE_TAC[IN_IMAGE;IN_UNIV];
3719 INTRO_TAC Cuxvzoz.BBs_inj [`s`;`v`;`4`];
3722 TYPIFY `!i. interior_angle1 (vec 0) FF (v i) = azim (vec 0) (v i) (v (i+1)) (v (i+3))` (C SUBGOAL_THEN ASSUME_TAC);
3725 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] (GSYM Ocbicby.INTERIOR_ANGLE1_AZIM));
3726 TYPIFY `s` EXISTS_TAC;
3727 BY(ASM_REWRITE_TAC[IN;arith `4 - 1 = 3`;arith `3 < 4`;arith `SUC i = i+1`]);
3728 INTRO_TAC Ocbicby.LOCAL_FAN_AZIM_POS [`s`;`v`];
3729 ASM_REWRITE_TAC[LET_THM;IN;arith `4-1 = 3`;arith `SUC i = i+1`];
3731 TYPIFY `!i. v (i MOD 4) = v i` (C SUBGOAL_THEN ASSUME_TAC);
3733 MATCH_MP_TAC (GSYM Oxl_def.periodic_mod);
3734 BY(ASM_REWRITE_TAC[arith `~(0=4)`]);
3735 TYPIFY `v 4 = v 0 /\ v 5 = v 1 /\ v 6 = v 2 /\ v 7 = v 3 /\ v 8 = v 4` (C SUBGOAL_THEN ASSUME_TAC);
3736 FIRST_X_ASSUM ((unlist ONCE_REWRITE_TAC) o GSYM);
3737 BY(REWRITE_TAC[Terminal.MOD_4_EXPLICIT;arith `7 = 1*4 + 3`;arith `8 = 2*4 + 0`;MOD_MULT_ADD]);
3738 TYPIFY `generic V E` (C SUBGOAL_THEN ASSUME_TAC);
3739 BY(FIRST_X_ASSUM_ST `scs_generic` MP_TAC THEN ASM_REWRITE_TAC[Appendix.scs_generic]);
3740 TYPIFY `v (p+4) = v p /\ v (p+5) = v (p+1) /\ v (p+6) = v (p+2) /\ v (p+7) = v (p+3) /\ v (p+8) = v (p)` (C SUBGOAL_THEN ASSUME_TAC);
3741 FIRST_X_ASSUM_ST `MOD` ((unlist ONCE_REWRITE_TAC) o GSYM);
3742 BY(REWRITE_TAC[arith `p+4 = 1*4 + p /\ p+5 = 1*4+(p+1) /\ p+6=1*4+(p+2) /\ p+7 = 1*4 + (p+3) /\ p+8 = 2*4 + p`;MOD_MULT_ADD]);
3743 TYPIFY `!i. &2 <= norm (v i) /\ norm (v i) <= &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
3745 REWRITE_TAC[GSYM Fnjlbxs.in_ball_annulus];
3746 BY(ASM_REWRITE_TAC[]);
3747 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> &2 <= dist(v (p + i),v (p+j))` (C SUBGOAL_THEN ASSUME_TAC);
3748 REPEAT WEAKER_STRIP_TAC;
3749 MATCH_MP_TAC Ocbicby.scs_lb_2;
3750 TYPIFY `s` EXISTS_TAC;
3752 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
3754 REPEAT (GMATCH_SIMP_TAC MOD_LT);
3755 BY(ASM_REWRITE_TAC[]);
3756 COMMENT "edge lengths";
3757 TYPIFY `scs_b_v39 s (p+3) ((p+3)+1) = &2 * h0 /\ scs_b_v39 s p (p+1) = cstab /\ scs_b_v39 s (p+2) ((p+2)+1) <= cstab` (C SUBGOAL_THEN ASSUME_TAC);
3758 TYPIFY `~(&2 = &2 * h0)` (C SUBGOAL_THEN ASSUME_TAC);
3759 BY(REWRITE_TAC[Sphere.h0] THEN REAL_ARITH_TAC);
3762 BY(ASM_MESON_TAC[]);
3763 FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
3764 FIRST_X_ASSUM_ST `scs_b_v39 s i j <= cstab` (C INTRO_TAC [`p+2`]);
3765 ASM_REWRITE_TAC[arith `SUC (p+2) = (p+2)+1`];
3766 BY(DISCH_THEN MATCH_MP_TAC THEN NUM_REDUCE_TAC);
3767 TYPIFY `scs_a_v39 s (p+3) p = scs_a_v39 s (p+3) ((p+3)+1)` ENOUGH_TO_SHOW_TAC;
3768 BY(ASM_MESON_TAC[]);
3769 REWRITE_TAC[arith `((p+3)+1) = p+4`];
3770 FIRST_X_ASSUM_ST `is_scs_v39` MP_TAC THEN REWRITE_TAC[Appendix.is_scs_v39;LET_THM] THEN REPEAT WEAKER_STRIP_TAC;
3771 BY(ASM_MESON_TAC[Appendix.periodic2;Oxl_def.periodic]);
3772 FIRST_X_ASSUM MP_TAC THEN REWRITE_TAC[arith `((p:num) + i ) + j = p + (i+j)`] THEN NUM_REDUCE_TAC;
3774 TYPIFY `dist(v (p+3),v(p+4)) <= &2 *h0 /\ dist(v p,v(p+1)) <= cstab /\ dist(v(p+2),v(p+3)) <= cstab` (C SUBGOAL_THEN MP_TAC);
3775 FIRST_X_ASSUM MP_TAC;
3776 FIRST_X_ASSUM_ST `scs_b_v39` MP_TAC;
3777 BY(MESON_TAC[REAL_LE_TRANS]);
3779 REPEAT WEAKER_STRIP_TAC;
3780 COMMENT "collinear";
3781 TYPIFY `!i j. ~(v i = v j) ==> ~collinear {vec 0,v i, v j}` (C SUBGOAL_THEN ASSUME_TAC);
3782 REPEAT GEN_TAC THEN DISCH_TAC;
3783 MATCH_MP_TAC Zlzthic.PROPERTIES_GENERIC_LOCAL_FAN_ALT;
3784 GEXISTL_TAC [`V`;`E`;`FF`];
3785 BY(ASM_REWRITE_TAC[IN_IMAGE;IN_UNIV]);
3786 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i = j) ==> ~(v i = v j)` (C SUBGOAL_THEN ASSUME_TAC);
3787 BY(REPLICATE_TAC 20 (FIRST_X_ASSUM MP_TAC) THEN MESON_TAC[]);
3788 INTRO_TAC PERIODIC_INJ_MOD [`v`;`4`];
3789 ASM_REWRITE_TAC[arith `~(4 = 0)`];
3791 TYPIFY `!i j. i < 4 /\ j < 4 /\ ~(i=j) ==> ~(v (p +i) = v (p+j))` (C SUBGOAL_THEN ASSUME_TAC);
3792 REPEAT WEAKER_STRIP_TAC;
3793 FIRST_X_ASSUM MP_TAC THEN ASM_REWRITE_TAC[];
3794 GMATCH_SIMP_TAC Ocbicby.MOD_EQ_MOD_SHIFT;
3796 REPEAT (GMATCH_SIMP_TAC MOD_LT);
3797 BY(ASM_REWRITE_TAC[]);
3798 TYPIFY `!i. 0 < i /\ i < 4 ==> ~(v (p+i) = v p)` (C SUBGOAL_THEN ASSUME_TAC);
3799 BY(FIRST_X_ASSUM MP_TAC THEN MESON_TAC[arith `p+0 = p`;arith `0< 4`;arith `0 < i ==> ~(i=0)`]);
3800 COMMENT "long diag";
3801 TYPIFY `#2.52 = &2 * h0 /\ #3.01 = cstab` (C SUBGOAL_THEN ASSUME_TAC);
3802 BY(REWRITE_TAC[Sphere.h0;Sphere.cstab] THEN REAL_ARITH_TAC);
3803 TYPIFY `#3.55 <= dist(v (p+2),v p)` ASM_CASES_TAC;
3804 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "2073661826") [`norm (v (p+3))`;`norm(v (p+2))`;`norm(v p)`;`dist(v(p+2),v p)`;`dist(v(p+3),v p)`;`dist(v(p+3),v(p+2))`];
3805 FIRST_X_ASSUM_ST `norm x = &2` kill;
3806 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
3808 DISCH_THEN MP_TAC THEN ANTS_TAC;
3810 INTRO_TAC DIST_TRIANGLE [`v (p+2)`;`(vec 0):real^3`;`v (p)`];
3811 REWRITE_TAC[DIST_0];
3812 MATCH_MP_TAC (arith `x <= &2 * h0 /\ y <= &2 * h0 ==> (d <= x + y ==> d <= &4 * h0)`);
3813 BY(ASM_REWRITE_TAC[]);
3815 BY(ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REWRITE_TAC[]);
3816 TYPIFY `v p = v (p+0)` (C SUBGOAL_THEN SUBST1_TAC);
3817 ONCE_REWRITE_TAC[arith `p+0=p`];
3819 BY(FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
3821 FIRST_X_ASSUM_ST `dihV` MP_TAC;
3822 REWRITE_TAC[arith `~(x <= y) <=> y < x`];
3823 GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] Merge_ineq.DIHV_EQ_DIH_Y);
3824 ASM_REWRITE_TAC[DIST_0];
3826 BY(CONJ_TAC THEN (REPEAT (FIRST_X_ASSUM MATCH_MP_TAC)) THEN NUM_REDUCE_TAC);
3827 ONCE_REWRITE_TAC[Nonlinear_lemma.dih_y_sym];
3828 MATCH_MP_TAC Ocbicby.delta4_y_imp_obtuse;
3830 BY(ASM_MESON_TAC[arith `&2 <= x==> &0 < x`]);
3831 INTRO_TAC DIST_SYM [`v p`;`v (p+2)`];
3832 DISCH_THEN SUBST1_TAC;
3834 BY(REWRITE_TAC[REWRITE_RULE[LET_THM] Tame_lemmas.delta_y_pos]);
3835 BY(ASM_REWRITE_TAC[]);
3836 TYPIFY `!i. ~scs_is_str s v i ==> ~coplanar {vec 0, v i, v(i+1), v(i+3)}` (C SUBGOAL_THEN ASSUME_TAC);
3837 GEN_TAC THEN ASM_REWRITE_TAC[Appendix.scs_is_str;arith `SUC i = i+1`;GSYM Local_lemmas1.AZIM_COND_FOR_COPLANAR];
3839 DISCH_THEN (unlist REWRITE_TAC);
3840 MATCH_MP_TAC (arith `&0 < a ==> ~(a = &0)`);
3841 INTRO_TAC Ocbicby.LOCAL_FAN_AZIM_POS [`s`;`v`;`i`];
3842 BY(ASM_REWRITE_TAC[LET_THM;IN;arith `SUC i = i+1`;arith `4 - 1 = 3`]);
3843 FIRST_X_ASSUM MP_TAC THEN BURY_MP_TAC;
3844 COMMENT "short diag";
3845 INTRO_TAC Terminal.vv_split_azim_generic [`v`;`4`;`p`;`2`;`3`];
3846 ASM_REWRITE_TAC[arith `SUC p = p+1`;LET_THM];
3849 TYPIFY `azim (vec 0) (v p) (v (p+1)) (v (p+3)) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
3850 FIRST_X_ASSUM_ST `interior_angle1` ((unlist REWRITE_TAC) o GSYM);
3851 MATCH_MP_TAC Local_lemmas.CONVEX_LOFA_IMP_INANGLE_LE_PI;
3852 BY(ASM_REWRITE_TAC[]);
3853 TYPIFY `azim (vec 0) (v p) (v (p + 1)) (v (p + 2)) <= pi /\ azim (vec 0) (v p) (v (p + 2)) (v (p + 3)) <= pi` (C SUBGOAL_THEN ASSUME_TAC);
3854 MATCH_MP_TAC (arith `&0 < pi /\ &0 <= a /\ &0 <= b /\ a + b <= pi ==> a <= pi /\ b <= pi`);
3855 REWRITE_TAC[PI_POS];
3856 REWRITE_TAC[Counting_spheres.AZIM_NN];
3857 BY(REPLICATE_TAC 2 (POP_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
3858 FIRST_X_ASSUM_ST `scs_is_str` MP_TAC;
3859 REWRITE_TAC[Appendix.scs_is_str];
3862 REWRITE_TAC[arith `SUC p = p+1`];
3863 DISCH_THEN (RULE_ASSUM_TAC o (unlist REWRITE_RULE));
3864 INTRO_TAC AZIM_DIHV_SAME_STRONG [`(vec 0):real^3`;`v p`;`v (p+2)`;`v (p+3)`];
3865 INTRO_TAC AZIM_DIHV_SAME_STRONG [`(vec 0):real^3`;`v p`;`v (p+1)`;`v (p+2)`];
3866 FIRST_X_ASSUM_ST `pi = a` (MP_TAC o SYM) THEN DISCH_TAC;
3868 TYPIFY `~collinear {vec 0, v p, v (p + 1)} /\ ~collinear {vec 0, v p, v (p + 2)} /\ ~collinear {vec 0, v p, v (p + 3)}` (C SUBGOAL_THEN ASSUME_TAC);
3869 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN ONCE_REWRITE_TAC[EQ_SYM_EQ] THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
3871 REPEAT WEAKER_STRIP_TAC;
3872 REPEAT (FIRST_X_ASSUM_ST `dihV` MP_TAC) THEN REWRITE_TAC[] THEN REPEAT (GMATCH_SIMP_TAC (REWRITE_RULE[LET_THM] Merge_ineq.DIHV_EQ_DIH_Y));
3875 BY(REPEAT CONJ_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN FIRST_X_ASSUM MATCH_MP_TAC THEN NUM_REDUCE_TAC);
3876 REPEAT WEAKER_STRIP_TAC;
3877 FIRST_X_ASSUM_ST `+` MP_TAC THEN ASM_REWRITE_TAC[];
3879 TYPIFY `cstab <= dist(v p,v(p+2))` (C SUBGOAL_THEN ASSUME_TAC);
3880 FIRST_X_ASSUM_ST `cstab < d` (C INTRO_TAC [`p`;`p+2`]);
3882 REWRITE_TAC[arith `p+2 = SUC(SUC (p))`];
3883 MATCH_MP_TAC Tfitskc.SCS_DIAG_2;
3886 INTRO_TAC (UNDISCH2 LINDIH_11) [`norm (v (p))`;`norm(v (p+1))`;`norm(v (p+2))`;`dist(v(p+1),v(p+2))`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+1))`];
3887 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
3888 TYPIFY `(&2 <= norm (v p) /\ norm (v p) <= &2) /\ (&2 <= norm (v (p + 1)) /\ norm (v (p + 1)) <= #2.52) /\ (&2 <= norm (v (p + 2)) /\ norm (v (p + 2)) <= #2.52) /\ (&2 <= dist (v (p + 1),v (p + 2)) /\ dist (v (p + 1),v (p + 2)) <= &2) /\ ( #3.01 <= dist (v p,v (p + 2)) /\ dist (v p,v (p + 2)) <= #3.55) /\ &2 * h0 <= dist (v p,v (p + 1)) /\ dist (v p,v (p + 1)) <= #3.01` (C SUBGOAL_THEN ASSUME_TAC);
3889 ASM_REWRITE_TAC[arith `(x <= y /\ y <= x) <=> y = x`];
3891 TYPIFY `scs_a_v39 s p (p+1) <= dist(v p,v(p+1)) ` ENOUGH_TO_SHOW_TAC;
3892 MATCH_MP_TAC (arith `a = b ==> (a <= d ==> b <= d)`);
3893 BY(ASM_REWRITE_TAC[]);
3894 BY(ASM_REWRITE_TAC[]);
3896 ONCE_REWRITE_TAC[DIST_SYM];
3898 BY(FIRST_X_ASSUM_ST `#3.55` MP_TAC THEN REAL_ARITH_TAC);
3899 FIRST_ASSUM (unlist REWRITE_TAC);
3900 REWRITE_TAC[DE_MORGAN_THM];
3902 REWRITE_TAC[arith `~(d < &0) <=> &0 <= d`];
3903 BY(REWRITE_TAC[REWRITE_RULE[LET_THM] Tame_lemmas.delta_y_pos]);
3906 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "5550839403 delta") [`norm (v (p))`;`norm(v (p+3))`;`norm(v (p+2))`;`cstab`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+3))`];
3907 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
3908 TYPIFY `(&2 <= norm (v p) /\ norm (v p) <= &2) /\ (&2 <= norm (v (p + 3)) /\ norm (v (p + 3)) <= #2.52) /\ (&2 <= norm (v (p + 2)) /\ norm (v (p + 2)) <= #2.52) /\ ( #3.01 <= cstab /\ cstab <= #3.01) /\ ( #3.01 <= dist (v p,v (p + 2)) /\ dist (v p,v (p + 2)) <= #3.55) /\ &2 <= dist (v p,v (p + 3)) /\ dist (v p,v (p + 3)) <= &2 * h0` (C SUBGOAL_THEN ASSUME_TAC);
3909 ASM_REWRITE_TAC[arith `(x <= y /\ y <= x) <=> y = x`];
3911 FIRST_X_ASSUM_ST `&2 <= dist s` (C INTRO_TAC [`0`;`3`]);
3912 BY(REWRITE_TAC[arith `p+0=p`] THEN DISCH_THEN MATCH_MP_TAC THEN NUM_REDUCE_TAC);
3913 BY(ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REWRITE_TAC[]);
3914 FIRST_ASSUM (unlist REWRITE_TAC);
3916 INTRO_TAC ((* get_work *) Terminal.get_main_nonlinear "5550839403") [`norm (v (p))`;`norm(v (p+3))`;`norm(v (p+2))`;`cstab`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+3))`];
3917 REWRITE_TAC[Sphere.ineq;TAUT `a ==> b ==> c <=> a /\ b ==> c`;arith `x <= x`];
3918 FIRST_X_ASSUM_ST `#3.01` (unlist REWRITE_TAC);
3920 INTRO_TAC Ocbicby.dih_y_mono [`norm (v (p))`;`norm(v (p+3))`;`norm(v (p+2))`;`dist(v (p+3),v(p+2))`;`dist(v(p),v (p+2))`;`dist(v(p),v(p+3))`;`cstab`];
3922 TYPIFY_GOAL_THEN `&0 < norm (v p)` (unlist REWRITE_TAC);
3923 BY(ASM_REWRITE_TAC[arith `&0 < &2`]);
3924 FIRST_X_ASSUM_ST `norm (v p) = &2` kill;
3927 BY(ONCE_REWRITE_TAC[DIST_SYM] THEN ASM_REWRITE_TAC[]);
3929 FIRST_X_ASSUM_ST `&2 <= dist s` (C INTRO_TAC [`3`;`2`]);
3930 BY(NUM_REDUCE_TAC THEN REAL_ARITH_TAC);
3932 BY(FIRST_X_ASSUM_ST `delta_y` MP_TAC THEN REAL_ARITH_TAC);
3933 FIRST_X_ASSUM_ST `coplanar` (C INTRO_TAC [`p+3`]);
3935 BY(ASM_REWRITE_TAC[]);
3936 REWRITE_TAC[arith `(p+3) +i = p+(3+i)`] THEN NUM_REDUCE_TAC;
3937 REWRITE_TAC[Oxlzlez.coplanar_delta_y];
3938 ASM_REWRITE_TAC[DIST_SYM;DIST_0];
3939 MATCH_MP_TAC (arith `a = b ==> &0 < a ==> &0 < b`);
3940 BY(MESON_TAC[Merge_ineq.delta_y_sym]);
3942 TYPIFY `dih_y (norm (v p)) (norm (v (p + 3))) (norm (v (p + 2))) (dist (v (p + 3),v (p + 2))) (dist (v p,v (p + 2))) (dist (v p,v (p + 3))) + dih_y (norm (v p)) (norm (v (p + 1))) (norm (v (p + 2))) (dist (v (p + 1),v (p + 2))) (dist (v p,v (p + 2))) (dist (v p,v (p + 1))) < #3.1` (C SUBGOAL_THEN ASSUME_TAC);
3943 BY(REPLICATE_TAC 5 (FIRST_X_ASSUM MP_TAC) THEN REAL_ARITH_TAC);
3944 TYPIFY `#3.1 < pi` (C SUBGOAL_THEN ASSUME_TAC);
3945 BY(MP_TAC Flyspeck_constants.bounds THEN REAL_ARITH_TAC);
3946 FIRST_X_ASSUM_ST `a = pi` MP_TAC THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC);
3947 REWRITE_TAC[DIST_0;DIST_SYM];
3948 TYPIFY `dih_y (norm (v p)) (norm (v (p + 2))) (norm (v (p + 3))) (dist (v (p + 2),v (p + 3))) (dist (v p,v (p + 3))) (dist (v p,v (p + 2))) = dih_y (norm (v p)) (norm (v (p + 3))) (norm (v (p + 2))) (dist (v (p + 2),v (p + 3))) (dist (v p,v (p + 2))) (dist (v p,v (p + 3)))` (C SUBGOAL_THEN SUBST1_TAC);
3949 BY(REWRITE_TAC[Nonlinear_lemma.dih_y_sym]);