1 (* ========================================================================== *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
4 (* Chapter: Local Fan *)
5 (* Author: Hoang Le Truong *)
7 (* ========================================================================= *)
10 remaining conclusions from appendix to Local Fan chapter
14 module Xwitccn = struct
26 open Wrgcvdr_cizmrrh;;
34 open Flyspeck_constants;;
50 open Wrgcvdr_cizmrrh;;
52 open Flyspeck_constants;;
63 let CARD_SLICE_EQ=prove_by_refinement(
65 convex_local_fan(V,E,FF)
68 /\ (!u u1. u IN {v,w} /\ u1 IN V /\ ~(u=u1) ==> ~(collinear {vec 0, u, u1}))
69 /\ (!e. e IN FF ==> aff_gt {vec 0} {v,w} SUBSET wedge_in_fan_gt e E)
70 ==> CARD V = CARD (slicev E FF v w) + CARD (slicev E FF w v) - 2`,
76 THEN POP_ASSUM(fun th-> ASSUME_TAC th
79 THEN REWRITE_TAC[convex_local_fan]
81 THEN MRESA_TAC (GEN_ALL COMPATIBLE_BW_TWO_LEMMAS2
82 )[`hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (v,rho_node1 FF v)`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (w,rho_node1 FF w)`;`E:(real^3->bool)->bool`;`FF:real^3#real^3->bool`;`w:real^3`;`v:real^3`]
83 THEN MRESA_TAC (GEN_ALL Local_lemmas1.EJRCFJD)[`hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))`;`E:(real^3->bool)->bool`;`w:real^3`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (v,rho_node1 FF v)`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (w,rho_node1 FF w)`;`FF:real^3#real^3->bool`;`v:real^3`]
87 THEN REWRITE_TAC[convex_local_fan]
90 THEN SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF w v`ASSUME_TAC
94 REWRITE_TAC[slicev;IN_ELIM_THM]
95 THEN EXISTS_TAC`order (rho_node1 (FF:real^3#real^3->bool)) w v `
96 THEN REWRITE_TAC[ARITH_RULE`0<=a /\ a<=a`]
97 THEN MRESA_TAC (GEN_ALL Local_lemmas1.POINT_PRESENTED_IN_RHOND1)[`E:(real^3->bool)->bool`;`V:real^3->bool`;`FF:real^3#real^3->bool`;`w:real^3`;`v:real^3`]
98 THEN SUBGOAL_THEN`(!i. 0 < i /\ i < n ==> ~(ITER i (rho_node1 (FF:real^3#real^3->bool)) w = v))`ASSUME_TAC
103 THEN POP_ASSUM(fun th-> STRIP_TAC
104 THEN MRESA1_TAC th`i:num`)
107 MRESA_TAC (GEN_ALL ORDER)[`n:num`;`rho_node1 (FF:real^3#real^3->bool)`;`w:real^3`;`v:real^3`];
111 SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF v w`ASSUME_TAC
116 REWRITE_TAC[slicev;IN_ELIM_THM]
118 THEN REWRITE_TAC[ITER]
122 MRESA_TAC (GEN_ALL Local_lemmas.LOFA_IMP_LT_CARD_SET_V)[`slicee (E:(real^3->bool)->bool) FF v w`;`slicef (E:(real^3->bool)->bool) FF v w`;`slicev (E:(real^3->bool)->bool) FF v w`;`v:real^3`]
123 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOFA_IMP_LT_CARD_SET_V)[`slicee (E:(real^3->bool)->bool) FF w v`;`slicef (E:(real^3->bool)->bool) FF w v`;`slicev (E:(real^3->bool)->bool) FF w v`;`v:real^3`]
124 THEN MRESA_TAC (GEN_ALL Local_lemmas1.POINT_PRESENTED_IN_RHOND1)[`E:(real^3->bool)->bool`;`V:real^3->bool`;`FF:real^3#real^3->bool`;`v:real^3`;`w:real^3`]
125 THEN MRESAL_TAC (GEN_ALL Local_lemmas1.CONDS_IN_V_PRIME_NUM)[`(E:(real^3->bool)->bool)`;`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{v, w}}))`;`w:real^3`;`FF:real^3#real^3->bool`;`v:real^3`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{v, w}}))) (v,rho_node1 (FF:real^3#real^3->bool) v)`;`n:num`][DIFF;IN_SING;IN_ELIM_THM;]
126 THEN POP_ASSUM MP_TAC
127 THEN ONCE_REWRITE_TAC[SET_RULE`~(t = z) <=> ~(z = t)`]
129 THEN MRESAL_TAC (GEN_ALL Local_lemmas1.CONDS_IN_V_PRIME_NUM2)[`(E:(real^3->bool)->bool)`;`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{v, w}}))`;`w:real^3`;`FF:real^3#real^3->bool`;`v:real^3`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{v, w}}))) (w,rho_node1 (FF:real^3#real^3->bool) w)`;`n:num`;`V:real^3->bool`][DIFF;IN_SING;IN_ELIM_THM;]
130 THEN POP_ASSUM MP_TAC
131 THEN ONCE_REWRITE_TAC[SET_RULE`~(t = z) <=> ~(z = t)`]
133 THEN POP_ASSUM MP_TAC
134 THEN POP_ASSUM MP_TAC
135 THEN SUBGOAL_THEN`(slicev (E:(real^3->bool)->bool) FF v w) = IMAGE (\i. ITER i (rho_node1 FF) v) {i| i < CARD (V:real^3->bool) /\ ITER i (rho_node1 FF) v IN slicev E FF v w}`ASSUME_TAC
140 REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
145 THEN POP_ASSUM(fun th->
147 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[slicev;IN_ELIM_THM]
150 THEN SUBGOAL_THEN`(!i. 0 < i /\ i < n ==> ~(ITER i (rho_node1 (FF:real^3#real^3->bool)) v = w))`ASSUME_TAC
155 THEN REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
156 THEN POP_ASSUM(fun th-> REPLICATE_TAC 4 (STRIP_TAC) THEN STRIP_TAC
157 THEN MRESA1_TAC th`i:num`)
160 MRESA_TAC (GEN_ALL UNIQUE_ORDER)[`v:real^3`;`w:real^3`;`n:num`;`(rho_node1 (FF:real^3#real^3->bool))`]
161 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th])
162 THEN REPEAT STRIP_TAC
163 THEN EXISTS_TAC`n':num`
164 THEN ASM_REWRITE_TAC[]
165 THEN REMOVE_ASSUM_TAC
166 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
167 THEN POP_ASSUM MP_TAC
168 THEN REPLICATE_TAC 4 (REMOVE_ASSUM_TAC)
169 THEN POP_ASSUM MP_TAC
179 SUBGOAL_THEN`(slicev (E:(real^3->bool)->bool) FF w v) = IMAGE (\i. ITER i (rho_node1 FF) v) {i| i < CARD (V:real^3->bool) /\ ITER i (rho_node1 FF) v IN slicev E FF w v}`ASSUME_TAC
184 REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
189 THEN POP_ASSUM MP_TAC
190 THEN REMOVE_ASSUM_TAC
191 THEN REPEAT STRIP_TAC
192 THEN POP_ASSUM(fun th->
194 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[slicev;IN_ELIM_THM]
197 THEN MRESA_TAC(GEN_ALL Local_lemmas.LOCAL_FAN_ITER_RHO_NODE_IN_V)
198 [`(E:(real^3->bool)->bool)`;`FF:real^3#real^3->bool`;`w:real^3`;`V:real^3->bool`]
199 THEN POP_ASSUM(fun th-> MRESA1_TAC th `n':num`)
200 THEN MRESA_TAC (GEN_ALL Local_lemmas1.POINT_PRESENTED_IN_RHOND1)
201 [`(E:(real^3->bool)->bool)`;`V:real^3->bool`;`FF:real^3#real^3->bool`;`v:real^3`;`x:real^3`]
202 THEN EXISTS_TAC`n'':num`
203 THEN ASM_REWRITE_TAC[]
204 THEN REPLICATE_TAC 4 (REMOVE_ASSUM_TAC)
205 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
213 SUBGOAL_THEN`CARD (slicev (E:(real^3->bool)->bool) FF v w) = CARD {i | i < CARD (V:real^3->bool) /\ ITER i (rho_node1 FF) v IN slicev E FF v w}`ASSUME_TAC;
216 THEN POP_ASSUM(fun th->
217 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
218 THEN MATCH_MP_TAC CARD_IMAGE_INJ
222 REWRITE_TAC[IN_ELIM_THM]
223 THEN REPEAT STRIP_TAC
224 THEN MP_TAC Local_lemmas1.LT_CARD_MONO_LOFA
225 THEN ASM_REWRITE_TAC[]
227 THEN POP_ASSUM MATCH_MP_TAC
228 THEN ASM_REWRITE_TAC[];
231 MATCH_MP_TAC FINITE_SUBSET
232 THEN EXISTS_TAC`0.. (CARD (V:real^3->bool))`
233 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
239 SUBGOAL_THEN`CARD (slicev (E:(real^3->bool)->bool) FF w v) = CARD {i | i < CARD (V:real^3->bool) /\ ITER i (rho_node1 FF) v IN slicev E FF w v}`ASSUME_TAC;
242 THEN POP_ASSUM(fun th->
243 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
244 THEN MATCH_MP_TAC CARD_IMAGE_INJ
248 REWRITE_TAC[IN_ELIM_THM]
249 THEN REPEAT STRIP_TAC
250 THEN MP_TAC Local_lemmas1.LT_CARD_MONO_LOFA
251 THEN ASM_REWRITE_TAC[]
253 THEN POP_ASSUM MATCH_MP_TAC
254 THEN ASM_REWRITE_TAC[];
257 MATCH_MP_TAC FINITE_SUBSET
258 THEN EXISTS_TAC`0.. (CARD (V:real^3->bool))`
259 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
269 THEN GEN_REWRITE_TAC(RAND_CONV o ONCE_DEPTH_CONV)[th]
270 THEN GEN_REWRITE_TAC(RAND_CONV o ONCE_DEPTH_CONV)[th1]))
271 THEN ASM_REWRITE_TAC[]
272 THEN SUBGOAL_THEN`{i| i<n+1}= 0.. n` ASSUME_TAC
276 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_NUMSEG]
279 SUBGOAL_THEN`{i | i = 0 \/ n <= i /\ i < CARD (V:real^3->bool)} = (n.. (CARD V -1)) UNION {0}`
283 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_NUMSEG;UNION;IN_SING]
288 THEN MP_TAC(ARITH_RULE`n=0\/ 0< n`)
291 POP_ASSUM(fun th-> ASM_TAC
292 THEN REWRITE_TAC[th;ITER])
297 SUBGOAL_THEN`(n..CARD (V:real^3->bool) - 1) INTER {0} ={}`ASSUME_TAC;
301 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_NUMSEG;UNION;IN_SING;INTER]
311 MRESAL_TAC Geomdetail.CARD_EQUATION[`n..(CARD (V:real^3->bool)-1)`;`{0}`][FINITE_NUMSEG;FINITE_SING;CARD_CLAUSES;Geomdetail.CARD_SING;ARITH_RULE`A+0=A`;CARD_NUMSEG]
312 THEN REPLICATE_TAC 2 (REMOVE_ASSUM_TAC)
313 THEN POP_ASSUM MP_TAC
314 THEN REPLICATE_TAC 8 (REMOVE_ASSUM_TAC)
315 THEN POP_ASSUM MP_TAC
323 let CARD_SLICE_LE=prove_by_refinement(
325 convex_local_fan(V,E,FF)
328 /\ (!u u1. u IN {v,w} /\ u1 IN V /\ ~(u=u1) ==> ~(collinear {vec 0, u, u1}))
329 /\ (!e. e IN FF ==> aff_gt {vec 0} {v,w} SUBSET wedge_in_fan_gt e E)
330 ==> CARD (slicev E FF v w)< CARD V`,
335 THEN POP_ASSUM(fun th-> ASSUME_TAC th
336 THEN REPEAT STRIP_TAC
338 THEN REWRITE_TAC[convex_local_fan]
340 THEN MRESA_TAC (GEN_ALL COMPATIBLE_BW_TWO_LEMMAS2
341 )[`hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (v,rho_node1 FF v)`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (w,rho_node1 FF w)`;`E:(real^3->bool)->bool`;`FF:real^3#real^3->bool`;`w:real^3`;`v:real^3`]
342 THEN MRESA_TAC (GEN_ALL Local_lemmas1.EJRCFJD)[`hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))`;`E:(real^3->bool)->bool`;`w:real^3`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (v,rho_node1 FF v)`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (w,rho_node1 FF w)`;`FF:real^3#real^3->bool`;`v:real^3`]
343 THEN REMOVE_ASSUM_TAC
344 THEN POP_ASSUM (fun th-> MP_TAC th
345 THEN POP_ASSUM (fun th1-> MP_TAC th1
346 THEN REWRITE_TAC[convex_local_fan]
347 THEN ASSUME_TAC th THEN ASSUME_TAC th1))
350 THEN SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF w v`ASSUME_TAC;
352 REWRITE_TAC[slicev;IN_ELIM_THM]
353 THEN EXISTS_TAC`order (rho_node1 (FF:real^3#real^3->bool)) w v `
354 THEN REWRITE_TAC[ARITH_RULE`0<=a /\ a<=a`]
355 THEN MRESA_TAC (GEN_ALL Local_lemmas1.POINT_PRESENTED_IN_RHOND1)[`E:(real^3->bool)->bool`;`V:real^3->bool`;`FF:real^3#real^3->bool`;`w:real^3`;`v:real^3`]
356 THEN SUBGOAL_THEN`(!i. 0 < i /\ i < n ==> ~(ITER i (rho_node1 (FF:real^3#real^3->bool)) w = v))`ASSUME_TAC;
359 THEN POP_ASSUM(fun th-> STRIP_TAC
360 THEN MRESA1_TAC th`i:num`);
362 MRESA_TAC (GEN_ALL ORDER)[`n:num`;`rho_node1 (FF:real^3#real^3->bool)`;`w:real^3`;`v:real^3`];
364 SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF v w`ASSUME_TAC;
366 REWRITE_TAC[slicev;IN_ELIM_THM]
368 THEN REWRITE_TAC[ITER]
371 MRESA_TAC (GEN_ALL Local_lemmas.LOFA_IMP_LT_CARD_SET_V)[`slicee (E:(real^3->bool)->bool) FF v w`;`slicef (E:(real^3->bool)->bool) FF v w`;`slicev (E:(real^3->bool)->bool) FF v w`;`v:real^3`]
372 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOFA_IMP_LT_CARD_SET_V)[`slicee (E:(real^3->bool)->bool) FF w v`;`slicef (E:(real^3->bool)->bool) FF w v`;`slicev (E:(real^3->bool)->bool) FF w v`;`v:real^3`]
373 THEN MRESA_TAC (GEN_ALL Local_lemmas1.POINT_PRESENTED_IN_RHOND1)[`E:(real^3->bool)->bool`;`V:real^3->bool`;`FF:real^3#real^3->bool`;`v:real^3`;`w:real^3`]
374 THEN MRESAL_TAC (GEN_ALL Local_lemmas1.CONDS_IN_V_PRIME_NUM)[`(E:(real^3->bool)->bool)`;`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{v, w}}))`;`w:real^3`;`FF:real^3#real^3->bool`;`v:real^3`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{v, w}}))) (v,rho_node1 (FF:real^3#real^3->bool) v)`;`n:num`][DIFF;IN_SING;IN_ELIM_THM;]
375 THEN POP_ASSUM MP_TAC
376 THEN ONCE_REWRITE_TAC[SET_RULE`~(t = z) <=> ~(z = t)`]
378 THEN MRESAL_TAC (GEN_ALL Local_lemmas1.CONDS_IN_V_PRIME_NUM2)[`(E:(real^3->bool)->bool)`;`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{v, w}}))`;`w:real^3`;`FF:real^3#real^3->bool`;`v:real^3`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{v, w}}))) (w,rho_node1 (FF:real^3#real^3->bool) w)`;`n:num`;`V:real^3->bool`][DIFF;IN_SING;IN_ELIM_THM;]
379 THEN POP_ASSUM MP_TAC
380 THEN ONCE_REWRITE_TAC[SET_RULE`~(t = z) <=> ~(z = t)`]
382 THEN MRESA_TAC CARD_SLICE_EQ[`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`FF:real^3#real^3->bool`;`v:real^3`;`w:real^3`;]
383 THEN MRESA_TAC (GEN_ALL CARD_VERTEX_GE_3_LOCAL_FAN)
384 [`slicev (E:(real^3->bool)->bool) FF w v`;`slicee (E:(real^3->bool)->bool) FF w v`;`slicef (E:(real^3->bool)->bool) FF w v`]
385 THEN POP_ASSUM MP_TAC
386 THEN MRESA_TAC (GEN_ALL CARD_VERTEX_GE_3_LOCAL_FAN)
387 [`slicev (E:(real^3->bool)->bool) FF v w`;`slicee (E:(real^3->bool)->bool) FF v w`;`slicef (E:(real^3->bool)->bool) FF v w`]
388 THEN POP_ASSUM MP_TAC
396 let CARD_SLICE_LE1=prove_by_refinement(
398 convex_local_fan(V,E,FF)
401 /\ (!u u1. u IN {v,w} /\ u1 IN V /\ ~(u=u1) ==> ~(collinear {vec 0, u, u1}))
402 /\ (!e. e IN FF ==> aff_gt {vec 0} {v,w} SUBSET wedge_in_fan_gt e E)
403 ==> CARD (slicev E FF w v)< CARD V`,
408 THEN POP_ASSUM(fun th-> ASSUME_TAC th
409 THEN REPEAT STRIP_TAC
411 THEN REWRITE_TAC[convex_local_fan]
413 THEN MRESA_TAC (GEN_ALL COMPATIBLE_BW_TWO_LEMMAS2
414 )[`hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (v,rho_node1 FF v)`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (w,rho_node1 FF w)`;`E:(real^3->bool)->bool`;`FF:real^3#real^3->bool`;`w:real^3`;`v:real^3`]
415 THEN MRESA_TAC (GEN_ALL Local_lemmas1.EJRCFJD)[`hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))`;`E:(real^3->bool)->bool`;`w:real^3`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (v,rho_node1 FF v)`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (w,rho_node1 FF w)`;`FF:real^3#real^3->bool`;`v:real^3`]
416 THEN REMOVE_ASSUM_TAC
417 THEN POP_ASSUM (fun th-> MP_TAC th
418 THEN POP_ASSUM (fun th1-> MP_TAC th1
419 THEN REWRITE_TAC[convex_local_fan]
420 THEN ASSUME_TAC th THEN ASSUME_TAC th1))
423 THEN SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF w v`ASSUME_TAC;
425 REWRITE_TAC[slicev;IN_ELIM_THM]
426 THEN EXISTS_TAC`order (rho_node1 (FF:real^3#real^3->bool)) w v `
427 THEN REWRITE_TAC[ARITH_RULE`0<=a /\ a<=a`]
428 THEN MRESA_TAC (GEN_ALL Local_lemmas1.POINT_PRESENTED_IN_RHOND1)[`E:(real^3->bool)->bool`;`V:real^3->bool`;`FF:real^3#real^3->bool`;`w:real^3`;`v:real^3`]
429 THEN SUBGOAL_THEN`(!i. 0 < i /\ i < n ==> ~(ITER i (rho_node1 (FF:real^3#real^3->bool)) w = v))`ASSUME_TAC;
432 THEN POP_ASSUM(fun th-> STRIP_TAC
433 THEN MRESA1_TAC th`i:num`);
435 MRESA_TAC (GEN_ALL ORDER)[`n:num`;`rho_node1 (FF:real^3#real^3->bool)`;`w:real^3`;`v:real^3`];
437 SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF v w`ASSUME_TAC;
439 REWRITE_TAC[slicev;IN_ELIM_THM]
441 THEN REWRITE_TAC[ITER]
444 MRESA_TAC (GEN_ALL Local_lemmas.LOFA_IMP_LT_CARD_SET_V)[`slicee (E:(real^3->bool)->bool) FF v w`;`slicef (E:(real^3->bool)->bool) FF v w`;`slicev (E:(real^3->bool)->bool) FF v w`;`v:real^3`]
445 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOFA_IMP_LT_CARD_SET_V)[`slicee (E:(real^3->bool)->bool) FF w v`;`slicef (E:(real^3->bool)->bool) FF w v`;`slicev (E:(real^3->bool)->bool) FF w v`;`v:real^3`]
446 THEN MRESA_TAC (GEN_ALL Local_lemmas1.POINT_PRESENTED_IN_RHOND1)[`E:(real^3->bool)->bool`;`V:real^3->bool`;`FF:real^3#real^3->bool`;`v:real^3`;`w:real^3`]
447 THEN MRESAL_TAC (GEN_ALL Local_lemmas1.CONDS_IN_V_PRIME_NUM)[`(E:(real^3->bool)->bool)`;`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{v, w}}))`;`w:real^3`;`FF:real^3#real^3->bool`;`v:real^3`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{v, w}}))) (v,rho_node1 (FF:real^3#real^3->bool) v)`;`n:num`][DIFF;IN_SING;IN_ELIM_THM;]
448 THEN POP_ASSUM MP_TAC
449 THEN ONCE_REWRITE_TAC[SET_RULE`~(t = z) <=> ~(z = t)`]
451 THEN MRESAL_TAC (GEN_ALL Local_lemmas1.CONDS_IN_V_PRIME_NUM2)[`(E:(real^3->bool)->bool)`;`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{v, w}}))`;`w:real^3`;`FF:real^3#real^3->bool`;`v:real^3`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{v, w}}))) (w,rho_node1 (FF:real^3#real^3->bool) w)`;`n:num`;`V:real^3->bool`][DIFF;IN_SING;IN_ELIM_THM;]
452 THEN POP_ASSUM MP_TAC
453 THEN ONCE_REWRITE_TAC[SET_RULE`~(t = z) <=> ~(z = t)`]
455 THEN MRESA_TAC CARD_SLICE_EQ[`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`FF:real^3#real^3->bool`;`v:real^3`;`w:real^3`;]
456 THEN MRESA_TAC (GEN_ALL CARD_VERTEX_GE_3_LOCAL_FAN)
457 [`slicev (E:(real^3->bool)->bool) FF w v`;`slicee (E:(real^3->bool)->bool) FF w v`;`slicef (E:(real^3->bool)->bool) FF w v`]
458 THEN POP_ASSUM MP_TAC
459 THEN MRESA_TAC (GEN_ALL CARD_VERTEX_GE_3_LOCAL_FAN)
460 [`slicev (E:(real^3->bool)->bool) FF v w`;`slicee (E:(real^3->bool)->bool) FF v w`;`slicef (E:(real^3->bool)->bool) FF v w`]
461 THEN POP_ASSUM MP_TAC
468 let SLICE_REPRENT=prove_by_refinement(
470 convex_local_fan(V,E,FF)
473 /\ (!u u1. u IN {v,w} /\ u1 IN V /\ ~(u=u1) ==> ~(collinear {vec 0, u, u1}))
474 /\ (!e. e IN FF ==> aff_gt {vec 0} {v,w} SUBSET wedge_in_fan_gt e E)
475 ==>(slicev (E:(real^3->bool)->bool) FF v w) = IMAGE (\i. ITER i (rho_node1 FF) v) {i| i < CARD (V:real^3->bool) /\ ITER i (rho_node1 FF) v IN slicev E FF v w}`
481 THEN POP_ASSUM(fun th-> ASSUME_TAC th
482 THEN REPEAT STRIP_TAC
484 THEN REWRITE_TAC[convex_local_fan]
486 THEN MRESA_TAC (GEN_ALL COMPATIBLE_BW_TWO_LEMMAS2
487 )[`hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (v,rho_node1 FF v)`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (w,rho_node1 FF w)`;`E:(real^3->bool)->bool`;`FF:real^3#real^3->bool`;`w:real^3`;`v:real^3`]
488 THEN MRESA_TAC (GEN_ALL Local_lemmas1.EJRCFJD)[`hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))`;`E:(real^3->bool)->bool`;`w:real^3`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (v,rho_node1 FF v)`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (w,rho_node1 FF w)`;`FF:real^3#real^3->bool`;`v:real^3`]
489 THEN REMOVE_ASSUM_TAC
490 THEN POP_ASSUM MP_TAC
491 THEN POP_ASSUM MP_TAC
492 THEN REWRITE_TAC[convex_local_fan]
495 THEN SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF w v`ASSUME_TAC;
497 REWRITE_TAC[slicev;IN_ELIM_THM]
498 THEN EXISTS_TAC`order (rho_node1 (FF:real^3#real^3->bool)) w v `
499 THEN REWRITE_TAC[ARITH_RULE`0<=a /\ a<=a`]
500 THEN MRESA_TAC (GEN_ALL Local_lemmas1.POINT_PRESENTED_IN_RHOND1)[`E:(real^3->bool)->bool`;`V:real^3->bool`;`FF:real^3#real^3->bool`;`w:real^3`;`v:real^3`]
501 THEN SUBGOAL_THEN`(!i. 0 < i /\ i < n ==> ~(ITER i (rho_node1 (FF:real^3#real^3->bool)) w = v))`ASSUME_TAC;
504 THEN POP_ASSUM(fun th-> STRIP_TAC
505 THEN MRESA1_TAC th`i:num`);
507 MRESA_TAC (GEN_ALL ORDER)[`n:num`;`rho_node1 (FF:real^3#real^3->bool)`;`w:real^3`;`v:real^3`];
509 SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF v w`ASSUME_TAC;
511 REWRITE_TAC[slicev;IN_ELIM_THM]
513 THEN REWRITE_TAC[ITER]
517 MRESA_TAC (GEN_ALL Local_lemmas.LOFA_IMP_LT_CARD_SET_V)[`slicee (E:(real^3->bool)->bool) FF v w`;`slicef (E:(real^3->bool)->bool) FF v w`;`slicev (E:(real^3->bool)->bool) FF v w`;`v:real^3`]
518 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOFA_IMP_LT_CARD_SET_V)[`slicee (E:(real^3->bool)->bool) FF w v`;`slicef (E:(real^3->bool)->bool) FF w v`;`slicev (E:(real^3->bool)->bool) FF w v`;`v:real^3`]
519 THEN MRESA_TAC (GEN_ALL Local_lemmas1.POINT_PRESENTED_IN_RHOND1)[`E:(real^3->bool)->bool`;`V:real^3->bool`;`FF:real^3#real^3->bool`;`v:real^3`;`w:real^3`]
520 THEN REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
525 THEN POP_ASSUM(fun th->
527 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[slicev;IN_ELIM_THM]
530 THEN SUBGOAL_THEN`(!i. 0 < i /\ i < n ==> ~(ITER i (rho_node1 (FF:real^3#real^3->bool)) v = w))`ASSUME_TAC;
533 THEN REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
534 THEN POP_ASSUM(fun th-> REPLICATE_TAC 4 (STRIP_TAC) THEN STRIP_TAC
535 THEN MRESA1_TAC th`i:num`);
537 MRESA_TAC (GEN_ALL UNIQUE_ORDER)[`v:real^3`;`w:real^3`;`n:num`;`(rho_node1 (FF:real^3#real^3->bool))`]
538 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th])
539 THEN REPEAT STRIP_TAC
540 THEN EXISTS_TAC`n':num`
541 THEN ASM_REWRITE_TAC[]
542 THEN REMOVE_ASSUM_TAC
543 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
544 THEN POP_ASSUM MP_TAC
545 THEN REPLICATE_TAC 4 (REMOVE_ASSUM_TAC)
546 THEN POP_ASSUM MP_TAC
556 let SLICE_REPRENT2=prove_by_refinement(
558 convex_local_fan(V,E,FF)
561 /\ (!u u1. u IN {v,w} /\ u1 IN V /\ ~(u=u1) ==> ~(collinear {vec 0, u, u1}))
562 /\ (!e. e IN FF ==> aff_gt {vec 0} {v,w} SUBSET wedge_in_fan_gt e E)
563 ==> (slicev (E:(real^3->bool)->bool) FF w v) = IMAGE (\i. ITER i (rho_node1 FF) v) {i| i < CARD (V:real^3->bool) /\ ITER i (rho_node1 FF) v IN slicev E FF w v}`,
568 THEN POP_ASSUM(fun th-> ASSUME_TAC th
569 THEN REPEAT STRIP_TAC
571 THEN REWRITE_TAC[convex_local_fan]
573 THEN MRESA_TAC (GEN_ALL COMPATIBLE_BW_TWO_LEMMAS2
574 )[`hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (v,rho_node1 FF v)`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (w,rho_node1 FF w)`;`E:(real^3->bool)->bool`;`FF:real^3#real^3->bool`;`w:real^3`;`v:real^3`]
575 THEN MRESA_TAC (GEN_ALL Local_lemmas1.EJRCFJD)[`hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))`;`E:(real^3->bool)->bool`;`w:real^3`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (v,rho_node1 FF v)`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,(V:real^3->bool),E UNION {{v, w:real^3}}))) (w,rho_node1 FF w)`;`FF:real^3#real^3->bool`;`v:real^3`]
576 THEN REMOVE_ASSUM_TAC
577 THEN POP_ASSUM MP_TAC
578 THEN POP_ASSUM MP_TAC
579 THEN REWRITE_TAC[convex_local_fan]
582 THEN SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF w v`ASSUME_TAC;
585 REWRITE_TAC[slicev;IN_ELIM_THM]
586 THEN EXISTS_TAC`order (rho_node1 (FF:real^3#real^3->bool)) w v `
587 THEN REWRITE_TAC[ARITH_RULE`0<=a /\ a<=a`]
588 THEN MRESA_TAC (GEN_ALL Local_lemmas1.POINT_PRESENTED_IN_RHOND1)[`E:(real^3->bool)->bool`;`V:real^3->bool`;`FF:real^3#real^3->bool`;`w:real^3`;`v:real^3`]
589 THEN SUBGOAL_THEN`(!i. 0 < i /\ i < n ==> ~(ITER i (rho_node1 (FF:real^3#real^3->bool)) w = v))`ASSUME_TAC;
592 THEN POP_ASSUM(fun th-> STRIP_TAC
593 THEN MRESA1_TAC th`i:num`);
595 MRESA_TAC (GEN_ALL ORDER)[`n:num`;`rho_node1 (FF:real^3#real^3->bool)`;`w:real^3`;`v:real^3`];
597 SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF v w`ASSUME_TAC;
599 REWRITE_TAC[slicev;IN_ELIM_THM]
601 THEN REWRITE_TAC[ITER]
605 MRESA_TAC (GEN_ALL Local_lemmas.LOFA_IMP_LT_CARD_SET_V)[`slicee (E:(real^3->bool)->bool) FF v w`;`slicef (E:(real^3->bool)->bool) FF v w`;`slicev (E:(real^3->bool)->bool) FF v w`;`v:real^3`]
606 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOFA_IMP_LT_CARD_SET_V)[`slicee (E:(real^3->bool)->bool) FF w v`;`slicef (E:(real^3->bool)->bool) FF w v`;`slicev (E:(real^3->bool)->bool) FF w v`;`v:real^3`]
607 THEN MRESA_TAC (GEN_ALL Local_lemmas1.POINT_PRESENTED_IN_RHOND1)[`E:(real^3->bool)->bool`;`V:real^3->bool`;`FF:real^3#real^3->bool`;`v:real^3`;`w:real^3`]
608 THEN REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
613 THEN POP_ASSUM MP_TAC
614 THEN REMOVE_ASSUM_TAC
615 THEN REPEAT STRIP_TAC
616 THEN POP_ASSUM(fun th->
618 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[slicev;IN_ELIM_THM]
621 THEN MRESA_TAC(GEN_ALL Local_lemmas.LOCAL_FAN_ITER_RHO_NODE_IN_V)
622 [`(E:(real^3->bool)->bool)`;`FF:real^3#real^3->bool`;`w:real^3`;`V:real^3->bool`]
623 THEN POP_ASSUM(fun th-> MRESA1_TAC th `n':num`)
624 THEN MRESA_TAC (GEN_ALL Local_lemmas1.POINT_PRESENTED_IN_RHOND1)
625 [`(E:(real^3->bool)->bool)`;`V:real^3->bool`;`FF:real^3#real^3->bool`;`v:real^3`;`x:real^3`]
626 THEN EXISTS_TAC`n'':num`
627 THEN ASM_REWRITE_TAC[]
628 THEN REPLICATE_TAC 4 (REMOVE_ASSUM_TAC)
629 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
637 let change_type_v3= new_definition`(change_type_v3 (a:num->num->real)) (i,j)= a i j `
641 let change_type_v2= new_definition`(change_type_v2 (a:num->num->bool)) k =
642 { {i MOD k,j MOD k} | a i j =T} `
645 let PERIODIC_PROPERTY= prove(
646 ` ~(k = 0) /\ periodic vv k ==> (!i. vv (i MOD k)= vv i)`,
647 REWRITE_TAC[periodic]
648 THEN REPEAT STRIP_TAC
649 THEN MRESA_TAC DIVISION[`i:num`;`k:num`]
650 THEN REMOVE_ASSUM_TAC
651 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(RAND_CONV o ONCE_DEPTH_CONV)[th]
653 THEN ABBREV_TAC`n= i DIV k`
655 THEN SPEC_TAC (`i:num`,`i:num`)
656 THEN SPEC_TAC (`n:num`,`n:num`)
658 THENL[REWRITE_TAC[ARITH_RULE`0*K+A=A`];
659 POP_ASSUM(fun th-> REPEAT STRIP_TAC
660 THEN MRESA1_TAC th`n *k + i MOD k`)
661 THEN POP_ASSUM MP_TAC
662 THEN MRESA_TAC DIVISION[`i:num`;`k:num`]
663 THEN MRESA_TAC MOD_MULT_ADD[`n:num`;`k:num`;`i MOD k`]
664 THEN MRESA_TAC DIV_UNIQ[`n * k + i MOD k`;`k:num`;`n:num`;`i MOD k`]
665 THEN ASM_SIMP_TAC[MOD_MOD_REFL;ARITH_RULE`SUC n * k + i MOD k = (n * k + i MOD k) +k`]])
671 let SCS_3_IS_TRI_STABLE=prove_by_refinement(
672 `(s=let upperbd = &6 in
673 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
674 else (if {i MOD k,j MOD k}={0,1} then p
675 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
676 mk_unadorned_v39 3 (d_tame 3) (cs_adj 3 (&2) (&2 * h0)) (cs_adj 3 (&2 * h0) upperbd))
677 ==> tri_stable (scs_k_v39 s) (scs_d_v39 s) (0..(scs_k_v39 s)-1)
678 (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s))
679 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)) (\i. ((1+i):num MOD (scs_k_v39 s)))`,
683 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`~(4<=3)/\ 3-1=2`;mk_unadorned_v39;CS_ADJ;scs_J_v39_explicit;change_type_v2;d_tame ;change_type_v3]
684 THEN MRESAL_TAC HAS_SIZE_NUMSEG[`0`;`2`][ARITH_RULE`(2+1)-0=3`]
685 THEN ASM_SIMP_TAC[tri_stable;constraint_system;torsor;ARITH_RULE`3<= 3 /\3<=6/\ 1+3<=6/\ (2+1)-0=3/\ 3=3 /\ 0+3<=6`;CARD_NUMSEG;Hypermap.CARD_SINGLETON;change_type_v3;ARITH_RULE`A=B:num <=> B=A`;SET_RULE`A\/B<=> B\/A`;SET_RULE`A\/B<=> B\/A`;SET_RULE`{{i MOD k,j MOD K}| i,j| F}={}`;CARD_CLAUSES]
692 REWRITE_TAC[ARITH_RULE`3-1=2`;IN_NUMSEG;ARITH_RULE`0<= A`]
693 THEN MRESAL1_TAC Hypermap.LE_MOD_SUC`2`[ARITH_RULE`SUC 2=3`];
697 REWRITE_TAC[ARITH_RULE`3-1=2`;IN_NUMSEG;ARITH_RULE`0<= A`]
698 THEN REPEAT STRIP_TAC
699 THEN MRESAL_TAC (GEN_ALL MOD_IMP_EQ)[`3`;`1+x1`;`1+x2`][ARITH_RULE`1<= 1+A /\ (1+A<=3<=> A<=2)`]
700 THEN POP_ASSUM MP_TAC
705 REWRITE_TAC[ARITH_RULE`3-1=2`;IN_NUMSEG;ARITH_RULE`0<= A`]
706 THEN REPEAT STRIP_TAC
707 THEN POP_ASSUM MP_TAC
708 THEN MP_TAC(ARITH_RULE`0<i==> 1<= i /\ 1<3`)
710 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`3:num`;`x:num`;`i:num`]
711 THEN MP_TAC(ARITH_RULE`0<i /\ i< 3==> i=1 \/ i=2`)
713 THEN MP_TAC(ARITH_RULE`x<= 2==> x=0 \/ x=1 \/ x=2`)
714 THEN ASM_REWRITE_TAC[]
718 REWRITE_TAC[ARITH_RULE`3-1=2`;IN_NUMSEG;ARITH_RULE`0<= A`]
719 THEN REPEAT STRIP_TAC
720 THEN ASSUME_TAC(ARITH_RULE`1<=3 /\1<3/\ 1<=2`)
721 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`3:num`;`x:num`;`3:num`]
722 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`3`;`x:num`][ARITH_RULE`1*3=3`]
723 THEN MP_TAC(ARITH_RULE`x<= 2==> x=0 \/ x=1 \/ x=2`)
724 THEN ASM_REWRITE_TAC[]
731 THEN MP_TAC(ARITH_RULE`i MOD 3= j MOD 3 \/ ~(i MOD 3= j MOD 3)`)
736 MP_TAC(ARITH_RULE`i MOD 3= SUC j MOD 3 \/ ~(i MOD 3= SUC j MOD 3)`)
743 THEN ASM_REWRITE_TAC[h0]
750 THEN ASSUME_TAC(ARITH_RULE`1<=3 /\1<3/\ 1<=2`)
751 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`3:num`;`j:num`;`3:num`]
752 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`3`;`j:num`][ARITH_RULE`1*3=3`]
753 THEN MRESAL_TAC MOD_MOD_REFL[`j:num`;`3`][ARITH_RULE`~(3=0)`]
754 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`3`][ARITH_RULE`~(3=0) /\ 1 MOD 3=1`;ADD1];
761 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 2)<=> i=0 \/ i=1\/ i=2`]
762 THEN REPEAT STRIP_TAC
763 THEN POP_ASSUM MP_TAC
764 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1 /\ 2 MOD 3=2 /\ ~(0=1)
765 /\ SUC 0 MOD 3=1 /\ SUC 1 MOD 3=2/\ SUC 2 MOD 3=0`;h0;REAL_ARITH`&2<= &2`;cstab]
770 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 2)<=> i=0 \/ i=1\/ i=2`]
771 THEN REPEAT STRIP_TAC
773 ASM_REWRITE_TAC[ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1 /\ 2 MOD 3=2 /\ ~(0=1)
774 /\ SUC 0 MOD 3=1 /\ SUC 1 MOD 3=2/\ SUC 2 MOD 3=0
775 /\ (1+ 0) MOD 3=1 /\ (1+ 1) MOD 3=2 /\ (1+ 2) MOD 3=0
776 `;h0;REAL_ARITH`&2<= &2`;cstab]
786 let SCS_4_IS_TRI_STABLE=prove_by_refinement(
787 `(s=let upperbd = &6 in
788 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
789 else (if {i MOD k,j MOD k}={0,1} then p
790 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
791 mk_unadorned_v39 4 (d_tame 4) (cs_adj 4 (&2) (&2 * h0)) (cs_adj 4 (&2 * h0) upperbd))
792 ==> stable_system (scs_k_v39 s) (scs_d_v39 s) (0..(scs_k_v39 s)-1)
793 (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s))
794 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)) (\i. ((1+i):num MOD (scs_k_v39 s)))
799 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`~(4=3)/\ 4-1=3`;mk_unadorned_v39;CS_ADJ;scs_J_v39_explicit;change_type_v2;d_tame ;change_type_v3]
800 THEN MRESAL_TAC HAS_SIZE_NUMSEG[`0`;`3`][ARITH_RULE`(3+1)-0=4`]
801 THEN ASM_SIMP_TAC[stable_system;constraint_system;torsor;ARITH_RULE`3<= 4 /\4<=6/\ 1+4<=6/\ (3+1)-0=4/\ 4=4 /\ 0+4<=6`;CARD_NUMSEG;Hypermap.CARD_SINGLETON;change_type_v3;ARITH_RULE`A=B:num <=> B=A`;SET_RULE`A\/B<=> B\/A`;SET_RULE`{{i MOD k,j MOD K}| i,j| F}={}/\ {} SUBSET A`;CARD_CLAUSES]
808 REWRITE_TAC[ARITH_RULE`4-1=3`;IN_NUMSEG;ARITH_RULE`0<= A`]
809 THEN MRESAL1_TAC Hypermap.LE_MOD_SUC`3`[ARITH_RULE`SUC 3=4`];
813 REWRITE_TAC[ARITH_RULE`4-1=3`;IN_NUMSEG;ARITH_RULE`0<= A`]
814 THEN REPEAT STRIP_TAC
815 THEN MRESAL_TAC (GEN_ALL MOD_IMP_EQ)[`4`;`1+x1`;`1+x2`][ARITH_RULE`1<= 1+A /\ (1+A<=4<=> A<=3)`]
816 THEN POP_ASSUM MP_TAC
821 REWRITE_TAC[ARITH_RULE`4-1=3`;IN_NUMSEG;ARITH_RULE`0<= A`]
822 THEN REPEAT STRIP_TAC
823 THEN POP_ASSUM MP_TAC
824 THEN MP_TAC(ARITH_RULE`0<i==> 1<= i /\ 1<4`)
826 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`4:num`;`x:num`;`i:num`]
827 THEN MP_TAC(ARITH_RULE`0<i /\ i< 4==> i=1 \/ i=2 \/ i=3`)
829 THEN MP_TAC(ARITH_RULE`x<= 3==> x=0 \/ x=1 \/ x=2 \/ x=3`)
830 THEN ASM_REWRITE_TAC[]
834 REWRITE_TAC[ARITH_RULE`4-1=3`;IN_NUMSEG;ARITH_RULE`0<= A`]
835 THEN REPEAT STRIP_TAC
836 THEN ASSUME_TAC(ARITH_RULE`1<=4 /\1<4/\ 1<=3`)
837 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`4:num`;`x:num`;`4:num`]
838 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`4`;`x:num`][ARITH_RULE`1*4=4`]
839 THEN MP_TAC(ARITH_RULE`x<= 3==> x=0 \/ x=1 \/ x=2\/ x=3`)
840 THEN ASM_REWRITE_TAC[]
847 THEN MP_TAC(ARITH_RULE`i MOD 4= j MOD 4 \/ ~(i MOD 4= j MOD 4)`)
852 MP_TAC(ARITH_RULE`(i MOD 4 = SUC j MOD 4 \/ j MOD 4 = SUC i MOD 4) \/ ~(i MOD 4 = SUC j MOD 4 \/ j MOD 4 = SUC i MOD 4)`)
860 THEN ASSUME_TAC(ARITH_RULE`1<=4 /\1<4/\ 1<=2`)
861 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`4:num`;`j:num`;`4:num`]
862 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`4`;`j:num`][ARITH_RULE`1*4=4`]
863 THEN MRESAL_TAC MOD_MOD_REFL[`j:num`;`4`][ARITH_RULE`~(4=0)`]
864 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`4`][ARITH_RULE`~(4=0) /\ 1 MOD 4=1`;ADD1];
868 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 3)<=> i=0 \/ i=1\/ i=2 \/ i=3`]
869 THEN REPEAT STRIP_TAC
870 THEN POP_ASSUM MP_TAC
871 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 4=0 /\ 1 MOD 4=1 /\ 2 MOD 4=2 /\ 3 MOD 4=3 /\ ~(0=1)
872 /\ SUC 0 MOD 4=1 /\ SUC 1 MOD 4=2/\ SUC 2 MOD 4=3 /\ SUC 3 MOD 4=0`;h0;REAL_ARITH`&2<= &2`;cstab]
877 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 3)<=> i=0 \/ i=1\/ i=2\/ i=3`]
878 THEN REPEAT STRIP_TAC
879 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 4=0 /\ 1 MOD 4=1 /\ 2 MOD 4=2 /\ 3 MOD 4=3 /\ ~(0=1)
880 /\ SUC 0 MOD 4=1 /\ SUC 1 MOD 4=2/\ SUC 2 MOD 4=3 /\ SUC 3 MOD 4=0/\ 1+i=i+1`;h0;REAL_ARITH`&2<= &2`;cstab;GSYM ADD1]
892 let SCS_5_IS_TRI_STABLE=prove_by_refinement(
893 `(s=let upperbd = &6 in
894 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
895 else (if {i MOD k,j MOD k}={0,1} then p
896 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
897 mk_unadorned_v39 5 (d_tame 5) (cs_adj 5 (&2) (&2 * h0)) (cs_adj 5 (&2 * h0) upperbd))
898 ==> stable_system (scs_k_v39 s) (scs_d_v39 s) (0..(scs_k_v39 s)-1)
899 (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s))
900 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)) (\i. ((1+i):num MOD (scs_k_v39 s)))`,
905 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`~(5=3)/\ 5-1=4`;mk_unadorned_v39;CS_ADJ;scs_J_v39_explicit;change_type_v2;d_tame ;change_type_v3]
906 THEN MRESAL_TAC HAS_SIZE_NUMSEG[`0`;`4`][ARITH_RULE`(4+1)-0=5`]
907 THEN ASM_SIMP_TAC[stable_system;constraint_system;torsor;ARITH_RULE`3<= 5 /\5<=6/\ 1+5<=6/\ (4+1)-0=5/\ 5=5 /\ 0+5<=6`;CARD_NUMSEG;Hypermap.CARD_SINGLETON;change_type_v3;ARITH_RULE`A=B:num <=> B=A`;SET_RULE`A\/B<=> B\/A`;SET_RULE`{{i MOD k,j MOD K}| i,j| F}={}/\ {} SUBSET A`;CARD_CLAUSES]
915 REWRITE_TAC[ARITH_RULE`5-1=4`;IN_NUMSEG;ARITH_RULE`0<= A`]
916 THEN MRESAL1_TAC Hypermap.LE_MOD_SUC`4`[ARITH_RULE`SUC 4=5`];
920 REWRITE_TAC[ARITH_RULE`5-1=4`;IN_NUMSEG;ARITH_RULE`0<= A`]
921 THEN REPEAT STRIP_TAC
922 THEN MRESAL_TAC (GEN_ALL MOD_IMP_EQ)[`5`;`1+x1`;`1+x2`][ARITH_RULE`1<= 1+A /\ (1+A<=5<=> A<=4)`]
923 THEN POP_ASSUM MP_TAC
928 REWRITE_TAC[ARITH_RULE`5-1=4`;IN_NUMSEG;ARITH_RULE`0<= A`]
929 THEN REPEAT STRIP_TAC
930 THEN POP_ASSUM MP_TAC
931 THEN MP_TAC(ARITH_RULE`0<i==> 1<= i /\ 1<5`)
933 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`5:num`;`x:num`;`i:num`]
934 THEN MP_TAC(ARITH_RULE`0<i /\ i< 5==> i=1 \/ i=2 \/ i=3\/ i=4`)
936 THEN MP_TAC(ARITH_RULE`x<= 4==> x=0 \/ x=1 \/ x=2 \/ x=3\/ x=4`)
937 THEN ASM_REWRITE_TAC[]
941 REWRITE_TAC[ARITH_RULE`5-1=4`;IN_NUMSEG;ARITH_RULE`0<= A`]
942 THEN REPEAT STRIP_TAC
943 THEN ASSUME_TAC(ARITH_RULE`1<=5 /\1<5/\ 1<=4`)
944 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`5:num`;`x:num`;`5:num`]
945 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`5`;`x:num`][ARITH_RULE`1*5=5`]
946 THEN MP_TAC(ARITH_RULE`x<= 4==> x=0 \/ x=1 \/ x=2\/ x=3\/ x=4`)
947 THEN ASM_REWRITE_TAC[]
954 THEN MP_TAC(ARITH_RULE`i MOD 5= j MOD 5 \/ ~(i MOD 5= j MOD 5)`)
959 MP_TAC(ARITH_RULE`(i MOD 5 = SUC j MOD 5 \/ j MOD 5 = SUC i MOD 5) \/ ~(i MOD 5 = SUC j MOD 5 \/ j MOD 5 = SUC i MOD 5)`)
967 THEN ASSUME_TAC(ARITH_RULE`1<=5 /\1<5/\ 1<=2`)
968 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`5:num`;`j:num`;`5:num`]
969 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`5`;`j:num`][ARITH_RULE`1*5=5`]
970 THEN MRESAL_TAC MOD_MOD_REFL[`j:num`;`5`][ARITH_RULE`~(5=0)`]
971 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1`;ADD1];
975 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 4)<=> i=0 \/ i=1\/ i=2 \/ i=3\/ i=4`]
976 THEN REPEAT STRIP_TAC
977 THEN POP_ASSUM MP_TAC
978 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 5=0 /\ 1 MOD 5=1 /\ 2 MOD 5=2 /\ 3 MOD 5=3 /\ ~(0=1)
979 /\ SUC 0 MOD 5=1 /\ SUC 1 MOD 5=2/\ SUC 2 MOD 5=3 /\ SUC 3 MOD 5=4/\ SUC 4 MOD 5=0 /\ 4 MOD 5=4`;h0;REAL_ARITH`&2<= &2`;cstab]
984 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 4)<=> i=0 \/ i=1\/ i=2 \/ i=3\/ i=4`]
985 THEN REPEAT STRIP_TAC
986 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 5=0 /\ 1 MOD 5=1 /\ 2 MOD 5=2 /\ 3 MOD 5=3 /\ ~(0=1)
987 /\ SUC 0 MOD 5=1 /\ SUC 1 MOD 5=2/\ SUC 2 MOD 5=3 /\ SUC 3 MOD 5=4/\ SUC 4 MOD 5=0 /\ 4 MOD 5=4/\ 1+i=i+1`;h0;REAL_ARITH`&2<= &2`;cstab;GSYM ADD1]
1000 let SCS_6_IS_TRI_STABLE=prove_by_refinement(
1001 `(s=let upperbd = &6 in
1002 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
1003 else (if {i MOD k,j MOD k}={0,1} then p
1004 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
1005 mk_unadorned_v39 6 (d_tame 6) (cs_adj 6 (&2) (&2 * h0)) (cs_adj 6 (&2 * h0) upperbd))
1006 ==> stable_system (scs_k_v39 s) (scs_d_v39 s) (0..(scs_k_v39 s)-1)
1007 (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s))
1008 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)) (\i. ((1+i):num MOD (scs_k_v39 s)))`,
1012 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`~(6=3)/\ 6-1=5`;mk_unadorned_v39;CS_ADJ;scs_J_v39_explicit;change_type_v2;d_tame ;change_type_v3]
1013 THEN MRESAL_TAC HAS_SIZE_NUMSEG[`0`;`5`][ARITH_RULE`(5+1)-0=6`]
1014 THEN ASM_SIMP_TAC[stable_system;constraint_system;torsor;ARITH_RULE`3<= 6 /\6<=6/\ (5+1)-0=6/\ 6=6 /\ 0+6<=6`;CARD_NUMSEG;Hypermap.CARD_SINGLETON;change_type_v3;ARITH_RULE`A=B:num <=> B=A`;SET_RULE`A\/B<=> B\/A`;SET_RULE`{{i MOD k,j MOD K}| i,j| F}={}/\ {} SUBSET A`;CARD_CLAUSES]
1022 REWRITE_TAC[ARITH_RULE`6-1=5`;IN_NUMSEG;ARITH_RULE`0<= A`]
1023 THEN MRESAL1_TAC Hypermap.LE_MOD_SUC`5`[ARITH_RULE`SUC 5=6`];
1027 REWRITE_TAC[ARITH_RULE`6-1=5`;IN_NUMSEG;ARITH_RULE`0<= A`]
1028 THEN REPEAT STRIP_TAC
1029 THEN MRESAL_TAC (GEN_ALL MOD_IMP_EQ)[`6`;`1+x1`;`1+x2`][ARITH_RULE`1<= 1+A /\ (1+A<=6<=> A<=5)`]
1030 THEN POP_ASSUM MP_TAC
1035 REWRITE_TAC[ARITH_RULE`6-1=5`;IN_NUMSEG;ARITH_RULE`0<= A`]
1036 THEN REPEAT STRIP_TAC
1037 THEN POP_ASSUM MP_TAC
1038 THEN MP_TAC(ARITH_RULE`0<i==> 1<= i /\ 1<6`)
1040 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`6:num`;`x:num`;`i:num`]
1041 THEN MP_TAC(ARITH_RULE`0<i /\ i< 6==> i=1 \/ i=2 \/ i=3\/ i=4\/ i=5`)
1043 THEN MP_TAC(ARITH_RULE`x<= 5==> x=0 \/ x=1 \/ x=2 \/ x=3\/ x=4\/ x=5`)
1044 THEN ASM_REWRITE_TAC[]
1048 REWRITE_TAC[ARITH_RULE`6-1=5`;IN_NUMSEG;ARITH_RULE`0<= A`]
1049 THEN REPEAT STRIP_TAC
1050 THEN ASSUME_TAC(ARITH_RULE`1<=6 /\1<6/\ 1<=5`)
1051 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`6:num`;`x:num`;`6:num`]
1052 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`6`;`x:num`][ARITH_RULE`1*6=6`]
1053 THEN MP_TAC(ARITH_RULE`x<= 5==> x=0 \/ x=1 \/ x=2\/ x=3\/ x=4\/ x=5`)
1054 THEN ASM_REWRITE_TAC[]
1061 THEN MP_TAC(ARITH_RULE`i MOD 6= j MOD 6 \/ ~(i MOD 6= j MOD 6)`)
1066 MP_TAC(ARITH_RULE`(i MOD 6 = SUC j MOD 6 \/ j MOD 6 = SUC i MOD 6) \/ ~(i MOD 6 = SUC j MOD 6 \/ j MOD 6 = SUC i MOD 6)`)
1068 THEN REWRITE_TAC[h0]
1069 THEN REAL_ARITH_TAC;
1074 THEN ASSUME_TAC(ARITH_RULE`1<=6 /\1<6/\ 1<=2`)
1075 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`6:num`;`j:num`;`6:num`]
1076 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`6`;`j:num`][ARITH_RULE`1*6=6`]
1077 THEN MRESAL_TAC MOD_MOD_REFL[`j:num`;`6`][ARITH_RULE`~(6=0)`]
1078 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`6`][ARITH_RULE`~(6=0) /\ 1 MOD 6=1`;ADD1];
1082 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 5)<=> i=0 \/ i=1\/ i=2 \/ i=3\/ i=4 \/ i=5`]
1083 THEN REPEAT STRIP_TAC
1084 THEN POP_ASSUM MP_TAC
1085 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 6=0 /\ 1 MOD 6=1 /\ 2 MOD 6=2 /\ 3 MOD 6=3 /\ ~(0=1)
1086 /\ SUC 0 MOD 6=1 /\ SUC 1 MOD 6=2/\ SUC 2 MOD 6=3 /\ SUC 3 MOD 6=4/\ SUC 4 MOD 6=5 /\ 4 MOD 6=4/\ SUC 5 MOD 6=0/\ 5 MOD 6=5`;h0;REAL_ARITH`&2<= &2`;cstab]
1087 THEN REAL_ARITH_TAC;
1091 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 5)<=> i=0 \/ i=1\/ i=2 \/ i=3\/ i=4 \/ i=5`]
1092 THEN REPEAT STRIP_TAC
1093 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 6=0 /\ 1 MOD 6=1 /\ 2 MOD 6=2 /\ 3 MOD 6=3 /\ ~(0=1)/\ ~(1=2)
1094 /\ SUC 0 MOD 6=1 /\ SUC 1 MOD 6=2/\ SUC 2 MOD 6=3 /\ SUC 3 MOD 6=4/\ SUC 4 MOD 6=5 /\ 4 MOD 6=4/\ SUC 5 MOD 6=0/\ 5 MOD 6=5/\ 1+i=i+1`;h0;REAL_ARITH`&2<= &2`;cstab;GSYM ADD1]
1095 THEN REAL_ARITH_TAC;
1112 let SCS_4_3_IS_TRI_STABLE=prove_by_refinement(
1113 `(s=let upperbd = &6 in
1114 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
1115 else (if {i MOD k,j MOD k}={0,1} then p
1116 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
1117 mk_unadorned_v39 4 (#0.467) (cs_adj 4 (&2) (&3)) (cs_adj 4 (&2 * h0) upperbd))
1118 ==> stable_system (scs_k_v39 s) (scs_d_v39 s) (0..(scs_k_v39 s)-1)
1119 (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s))
1120 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)) (\i. ((1+i):num MOD (scs_k_v39 s)))
1125 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`~(4=3)/\ 4-1=3`;mk_unadorned_v39;CS_ADJ;scs_J_v39_explicit;change_type_v2;d_tame ;change_type_v3]
1126 THEN MRESAL_TAC HAS_SIZE_NUMSEG[`0`;`3`][ARITH_RULE`(3+1)-0=4`]
1127 THEN ASM_SIMP_TAC[stable_system;constraint_system;torsor;ARITH_RULE`3<= 4 /\4<=6/\ 1+4<=6/\ (3+1)-0=4/\ 4=4 /\ 0+4<=6`;CARD_NUMSEG;Hypermap.CARD_SINGLETON;change_type_v3;ARITH_RULE`A=B:num <=> B=A`;SET_RULE`A\/B<=> B\/A`;SET_RULE`{{i MOD k,j MOD K}| i,j| F}={}/\ {} SUBSET A`;CARD_CLAUSES]
1134 REWRITE_TAC[ARITH_RULE`4-1=3`;IN_NUMSEG;ARITH_RULE`0<= A`]
1135 THEN MRESAL1_TAC Hypermap.LE_MOD_SUC`3`[ARITH_RULE`SUC 3=4`];
1139 REWRITE_TAC[ARITH_RULE`4-1=3`;IN_NUMSEG;ARITH_RULE`0<= A`]
1140 THEN REPEAT STRIP_TAC
1141 THEN MRESAL_TAC (GEN_ALL MOD_IMP_EQ)[`4`;`1+x1`;`1+x2`][ARITH_RULE`1<= 1+A /\ (1+A<=4<=> A<=3)`]
1142 THEN POP_ASSUM MP_TAC
1147 REWRITE_TAC[ARITH_RULE`4-1=3`;IN_NUMSEG;ARITH_RULE`0<= A`]
1148 THEN REPEAT STRIP_TAC
1149 THEN POP_ASSUM MP_TAC
1150 THEN MP_TAC(ARITH_RULE`0<i==> 1<= i /\ 1<4`)
1152 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`4:num`;`x:num`;`i:num`]
1153 THEN MP_TAC(ARITH_RULE`0<i /\ i< 4==> i=1 \/ i=2 \/ i=3`)
1155 THEN MP_TAC(ARITH_RULE`x<= 3==> x=0 \/ x=1 \/ x=2 \/ x=3`)
1156 THEN ASM_REWRITE_TAC[]
1160 REWRITE_TAC[ARITH_RULE`4-1=3`;IN_NUMSEG;ARITH_RULE`0<= A`]
1161 THEN REPEAT STRIP_TAC
1162 THEN ASSUME_TAC(ARITH_RULE`1<=4 /\1<4/\ 1<=3`)
1163 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`4:num`;`x:num`;`4:num`]
1164 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`4`;`x:num`][ARITH_RULE`1*4=4`]
1165 THEN MP_TAC(ARITH_RULE`x<= 3==> x=0 \/ x=1 \/ x=2\/ x=3`)
1166 THEN ASM_REWRITE_TAC[]
1173 THEN MP_TAC(ARITH_RULE`i MOD 4= j MOD 4 \/ ~(i MOD 4= j MOD 4)`)
1178 MP_TAC(ARITH_RULE`(i MOD 4 = SUC j MOD 4 \/ j MOD 4 = SUC i MOD 4) \/ ~(i MOD 4 = SUC j MOD 4 \/ j MOD 4 = SUC i MOD 4)`)
1180 THEN REWRITE_TAC[h0]
1181 THEN REAL_ARITH_TAC;
1186 THEN ASSUME_TAC(ARITH_RULE`1<=4 /\1<4/\ 1<=2`)
1187 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`4:num`;`j:num`;`4:num`]
1188 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`4`;`j:num`][ARITH_RULE`1*4=4`]
1189 THEN MRESAL_TAC MOD_MOD_REFL[`j:num`;`4`][ARITH_RULE`~(4=0)`]
1190 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`4`][ARITH_RULE`~(4=0) /\ 1 MOD 4=1`;ADD1];
1194 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 3)<=> i=0 \/ i=1\/ i=2 \/ i=3`]
1195 THEN REPEAT STRIP_TAC
1196 THEN POP_ASSUM MP_TAC
1197 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 4=0 /\ 1 MOD 4=1 /\ 2 MOD 4=2 /\ 3 MOD 4=3 /\ ~(0=1)
1198 /\ SUC 0 MOD 4=1 /\ SUC 1 MOD 4=2/\ SUC 2 MOD 4=3 /\ SUC 3 MOD 4=0`;h0;REAL_ARITH`&2<= &2`;cstab]
1199 THEN REAL_ARITH_TAC;
1203 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 3)<=> i=0 \/ i=1\/ i=2\/ i=3`]
1204 THEN REPEAT STRIP_TAC
1205 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 4=0 /\ 1 MOD 4=1 /\ 2 MOD 4=2 /\ 3 MOD 4=3 /\ ~(0=1)
1206 /\ SUC 0 MOD 4=1 /\ SUC 1 MOD 4=2/\ SUC 2 MOD 4=3 /\ SUC 3 MOD 4=0/\ 1+i=i+1`;h0;REAL_ARITH`&2<= &2`;cstab;GSYM ADD1]
1207 THEN REAL_ARITH_TAC;
1220 let SCS_5_sqrt8_IS_TRI_STABLE=prove_by_refinement(
1221 `(s=let upperbd = &6 in
1222 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
1223 else (if {i MOD k,j MOD k}={0,1} then p
1224 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
1225 mk_unadorned_v39 5 (#0.616) (cs_adj 5 (&2) (sqrt8)) (cs_adj 5 (&2 * h0) upperbd))
1226 ==> stable_system (scs_k_v39 s) (scs_d_v39 s) (0..(scs_k_v39 s)-1)
1227 (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s))
1228 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)) (\i. ((1+i):num MOD (scs_k_v39 s)))`,
1233 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`~(5=3)/\ 5-1=4`;mk_unadorned_v39;CS_ADJ;scs_J_v39_explicit;change_type_v2;d_tame ;change_type_v3]
1234 THEN MRESAL_TAC HAS_SIZE_NUMSEG[`0`;`4`][ARITH_RULE`(4+1)-0=5`]
1235 THEN ASM_SIMP_TAC[stable_system;constraint_system;torsor;ARITH_RULE`3<= 5 /\5<=6/\ 1+5<=6/\ (4+1)-0=5/\ 5=5 /\ 0+5<=6`;CARD_NUMSEG;Hypermap.CARD_SINGLETON;change_type_v3;ARITH_RULE`A=B:num <=> B=A`;SET_RULE`A\/B<=> B\/A`;SET_RULE`{{i MOD k,j MOD K}| i,j| F}={}/\ {} SUBSET A`;CARD_CLAUSES]
1243 REWRITE_TAC[ARITH_RULE`5-1=4`;IN_NUMSEG;ARITH_RULE`0<= A`]
1244 THEN MRESAL1_TAC Hypermap.LE_MOD_SUC`4`[ARITH_RULE`SUC 4=5`];
1248 REWRITE_TAC[ARITH_RULE`5-1=4`;IN_NUMSEG;ARITH_RULE`0<= A`]
1249 THEN REPEAT STRIP_TAC
1250 THEN MRESAL_TAC (GEN_ALL MOD_IMP_EQ)[`5`;`1+x1`;`1+x2`][ARITH_RULE`1<= 1+A /\ (1+A<=5<=> A<=4)`]
1251 THEN POP_ASSUM MP_TAC
1256 REWRITE_TAC[ARITH_RULE`5-1=4`;IN_NUMSEG;ARITH_RULE`0<= A`]
1257 THEN REPEAT STRIP_TAC
1258 THEN POP_ASSUM MP_TAC
1259 THEN MP_TAC(ARITH_RULE`0<i==> 1<= i /\ 1<5`)
1261 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`5:num`;`x:num`;`i:num`]
1262 THEN MP_TAC(ARITH_RULE`0<i /\ i< 5==> i=1 \/ i=2 \/ i=3\/ i=4`)
1264 THEN MP_TAC(ARITH_RULE`x<= 4==> x=0 \/ x=1 \/ x=2 \/ x=3\/ x=4`)
1265 THEN ASM_REWRITE_TAC[]
1269 REWRITE_TAC[ARITH_RULE`5-1=4`;IN_NUMSEG;ARITH_RULE`0<= A`]
1270 THEN REPEAT STRIP_TAC
1271 THEN ASSUME_TAC(ARITH_RULE`1<=5 /\1<5/\ 1<=4`)
1272 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`5:num`;`x:num`;`5:num`]
1273 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`5`;`x:num`][ARITH_RULE`1*5=5`]
1274 THEN MP_TAC(ARITH_RULE`x<= 4==> x=0 \/ x=1 \/ x=2\/ x=3\/ x=4`)
1275 THEN ASM_REWRITE_TAC[]
1282 THEN MP_TAC(ARITH_RULE`i MOD 5= j MOD 5 \/ ~(i MOD 5= j MOD 5)`)
1287 MP_TAC(ARITH_RULE`(i MOD 5 = SUC j MOD 5 \/ j MOD 5 = SUC i MOD 5) \/ ~(i MOD 5 = SUC j MOD 5 \/ j MOD 5 = SUC i MOD 5)`)
1289 THEN REWRITE_TAC[h0;sqrt8]
1290 THEN MRESAL_TAC REAL_LE_LSQRT [`&8`;`&6`][REAL_ARITH`&0<= &8/\ &0<= &6 /\ &8<= &6 pow 2`]
1291 THEN REAL_ARITH_TAC;
1297 THEN ASSUME_TAC(ARITH_RULE`1<=5 /\1<5/\ 1<=2`)
1298 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`5:num`;`j:num`;`5:num`]
1299 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`5`;`j:num`][ARITH_RULE`1*5=5`]
1300 THEN MRESAL_TAC MOD_MOD_REFL[`j:num`;`5`][ARITH_RULE`~(5=0)`]
1301 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1`;ADD1];
1305 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 4)<=> i=0 \/ i=1\/ i=2 \/ i=3\/ i=4`]
1306 THEN REPEAT STRIP_TAC
1307 THEN POP_ASSUM MP_TAC
1308 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 5=0 /\ 1 MOD 5=1 /\ 2 MOD 5=2 /\ 3 MOD 5=3 /\ ~(0=1)/\ ~(0=2)/\ ~(0=3)/\ ~(2=1)/\ ~(0=4)/\ ~(3=1) /\ ~(1=4) /\ ~(3=2)
1310 /\ SUC 0 MOD 5=1 /\ SUC 1 MOD 5=2/\ SUC 2 MOD 5=3 /\ SUC 3 MOD 5=4/\ SUC 4 MOD 5=0 /\ 4 MOD 5=4`;h0;REAL_ARITH`&2<= &2`;cstab;sqrt8]
1311 THEN MRESAL_TAC REAL_LE_RSQRT [`&2`;`&8`][REAL_ARITH`&0<= &8/\ &0<= &8 /\ &2 pow 2<= &8`]
1312 THEN MRESAL_TAC REAL_LE_LSQRT [`&8`;`#3.01`][REAL_ARITH`&0<= &8/\ &0<= #3.01 /\ &8<= #3.01 pow 2`]
1313 THEN REAL_ARITH_TAC;
1318 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 4)<=> i=0 \/ i=1\/ i=2 \/ i=3\/ i=4`]
1319 THEN REPEAT STRIP_TAC
1320 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 5=0 /\ 1 MOD 5=1 /\ 2 MOD 5=2 /\ 3 MOD 5=3 /\ ~(0=1)/\ ~(0=2)/\ ~(0=3)/\ ~(2=1)/\ ~(0=4)/\ ~(3=1) /\ ~(1=4) /\ ~(3=2)
1322 /\ SUC 0 MOD 5=1 /\ SUC 1 MOD 5=2/\ SUC 2 MOD 5=3 /\ SUC 3 MOD 5=4/\ SUC 4 MOD 5=0 /\ 4 MOD 5=4/\ 1+i=i+1`;h0;REAL_ARITH`&2<= &2`;cstab;GSYM ADD1;h0;REAL_ARITH`&2<= &2`;cstab;sqrt8]
1323 THEN MRESAL_TAC REAL_LE_RSQRT [`&2`;`&8`][REAL_ARITH`&0<= &8/\ &0<= &8 /\ &2 pow 2<= &8`]
1324 THEN MRESAL_TAC REAL_LE_LSQRT [`&8`;`#3.01`][REAL_ARITH`&0<= &8/\ &0<= #3.01 /\ &8<= #3.01 pow 2`]
1326 THEN REAL_ARITH_TAC;
1339 let SCS_4_sqrt8_IS_TRI_STABLE=prove_by_refinement(
1340 `(s=let upperbd = &6 in
1341 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
1342 else (if {i MOD k,j MOD k}={0,1} then p
1343 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
1344 mk_unadorned_v39 4 (#0.477) (a_pro 4 (&2 * h0) (&2) sqrt8) (a_pro 4 sqrt8 (&2 * h0) upperbd))
1345 ==> stable_system (scs_k_v39 s) (scs_d_v39 s) (0..(scs_k_v39 s)-1)
1346 (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s))
1347 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)) (\i. ((1+i):num MOD (scs_k_v39 s)))`,
1351 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`~(4=3)/\ 4-1=3`;mk_unadorned_v39;CS_ADJ;scs_J_v39_explicit;change_type_v2;d_tame ;change_type_v3]
1352 THEN MRESAL_TAC HAS_SIZE_NUMSEG[`0`;`3`][ARITH_RULE`(3+1)-0=4`]
1353 THEN ASM_SIMP_TAC[stable_system;constraint_system;torsor;ARITH_RULE`3<= 4 /\4<=6/\ 1+4<=6/\ (3+1)-0=4/\ 4=4 /\ 0+4<=6`;CARD_NUMSEG;Hypermap.CARD_SINGLETON;change_type_v3;ARITH_RULE`A=B:num <=> B=A`;SET_RULE`A\/B<=> B\/A`;SET_RULE`{{i MOD k,j MOD K}| i,j| F}={}/\ {} SUBSET A`;CARD_CLAUSES;SET_RULE`({j MOD 4, i MOD 4} = {0, 1})<=> {i MOD 4, j MOD 4} = {0, 1}`]
1360 REWRITE_TAC[ARITH_RULE`4-1=3`;IN_NUMSEG;ARITH_RULE`0<= A`]
1361 THEN MRESAL1_TAC Hypermap.LE_MOD_SUC`3`[ARITH_RULE`SUC 3=4`];
1365 REWRITE_TAC[ARITH_RULE`4-1=3`;IN_NUMSEG;ARITH_RULE`0<= A`]
1366 THEN REPEAT STRIP_TAC
1367 THEN MRESAL_TAC (GEN_ALL MOD_IMP_EQ)[`4`;`1+x1`;`1+x2`][ARITH_RULE`1<= 1+A /\ (1+A<=4<=> A<=3)`]
1368 THEN POP_ASSUM MP_TAC
1373 REWRITE_TAC[ARITH_RULE`4-1=3`;IN_NUMSEG;ARITH_RULE`0<= A`]
1374 THEN REPEAT STRIP_TAC
1375 THEN POP_ASSUM MP_TAC
1376 THEN MP_TAC(ARITH_RULE`0<i==> 1<= i /\ 1<4`)
1378 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`4:num`;`x:num`;`i:num`]
1379 THEN MP_TAC(ARITH_RULE`0<i /\ i< 4==> i=1 \/ i=2 \/ i=3`)
1381 THEN MP_TAC(ARITH_RULE`x<= 3==> x=0 \/ x=1 \/ x=2 \/ x=3`)
1382 THEN ASM_REWRITE_TAC[]
1386 REWRITE_TAC[ARITH_RULE`4-1=3`;IN_NUMSEG;ARITH_RULE`0<= A`]
1387 THEN REPEAT STRIP_TAC
1388 THEN ASSUME_TAC(ARITH_RULE`1<=4 /\1<4/\ 1<=3`)
1389 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`4:num`;`x:num`;`4:num`]
1390 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`4`;`x:num`][ARITH_RULE`1*4=4`]
1391 THEN MP_TAC(ARITH_RULE`x<= 3==> x=0 \/ x=1 \/ x=2\/ x=3`)
1392 THEN ASM_REWRITE_TAC[]
1399 THEN MP_TAC(ARITH_RULE`i MOD 4= j MOD 4 \/ ~(i MOD 4= j MOD 4)`)
1404 MP_TAC(SET_RULE`{i MOD 4, j MOD 4} = {0, 1} \/ ~({i MOD 4, j MOD 4} = {0, 1})`)
1408 MRESAL_TAC REAL_LE_RSQRT [`&2 * #1.26 `;`&8`][sqrt8;h0;REAL_ARITH`&0<= &8/\ &0<= &2 * #1.26 /\ (&2 * #1.26) pow 2<= &8`];
1410 MP_TAC(ARITH_RULE`(i MOD 4 = SUC j MOD 4 \/ j MOD 4 = SUC i MOD 4) \/ ~(i MOD 4 = SUC j MOD 4 \/ j MOD 4 = SUC i MOD 4)`)
1412 THEN REWRITE_TAC[h0;sqrt8]
1413 THEN MRESAL_TAC REAL_LE_LSQRT [`&8`;`&6`][REAL_ARITH`&0<= &8/\ &0<= &6 /\ &8<= &6 pow 2`]
1414 THEN REAL_ARITH_TAC;
1420 THEN ASSUME_TAC(ARITH_RULE`1<=4 /\1<4/\ 1<=2`)
1421 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`4:num`;`j:num`;`4:num`]
1422 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`4`;`j:num`][ARITH_RULE`1*4=4`]
1423 THEN MRESAL_TAC MOD_MOD_REFL[`j:num`;`4`][ARITH_RULE`~(4=0)`]
1424 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`4`][ARITH_RULE`~(4=0) /\ 1 MOD 4=1`;ADD1];
1428 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 3)<=> i=0 \/ i=1\/ i=2 \/ i=3`]
1429 THEN REPEAT STRIP_TAC
1430 THEN POP_ASSUM MP_TAC
1431 THEN MP_TAC(SET_RULE`~(2=0) /\ ~(2=1)/\ ~(3=0) /\ ~(3=1)==> ~({2,3}={1,0}) `)
1432 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 4=0 /\ 1 MOD 4=1 /\ 2 MOD 4=2 /\ 3 MOD 4=3 /\ ~(0=1)/\ ~(0=2)/\ ~(0=3)/\ ~(2=1)/\ ~(0=4)/\ ~(3=1) /\ ~(1=4) /\ ~(3=2)
1434 /\ SUC 0 MOD 4=1 /\ SUC 1 MOD 4=2/\ SUC 2 MOD 4=3 /\ SUC 3 MOD 4=0 `;h0;REAL_ARITH`&2<= &2`;cstab;SET_RULE`{A,B}={A,C}<=> B=C`;sqrt8;SET_RULE`{A,B}={B,A}`;SET_RULE`{B,A}={C,A}<=> B=C`;SET_RULE`{B,A}={A,C}<=> B=C`;]
1436 THEN MRESAL_TAC REAL_LE_RSQRT [`&2`;`&8`][REAL_ARITH`&0<= &8/\ &0<= &8 /\ &2 pow 2<= &8`]
1437 THEN MRESAL_TAC REAL_LE_LSQRT [`&8`;`#3.01`][REAL_ARITH`&0<= &8/\ &0<= #3.01 /\ &8<= #3.01 pow 2`]
1438 THEN REAL_ARITH_TAC;
1442 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 3)<=> i=0 \/ i=1\/ i=2 \/ i=3`]
1443 THEN REPEAT STRIP_TAC
1444 THEN MP_TAC(SET_RULE`~(2=0) /\ ~(2=1)/\ ~(3=0) /\ ~(3=1)==> ~({2,3}={1,0}) `)
1445 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 4=0 /\ 1 MOD 4=1 /\ 2 MOD 4=2 /\ 3 MOD 4=3 /\ ~(0=1)/\ ~(0=2)/\ ~(0=3)/\ ~(2=1)/\ ~(0=4)/\ ~(3=1) /\ ~(1=4) /\ ~(3=2)
1446 /\ ~(4=2) /\ ~(4=3)/\ 1+0=1/\ 1+2=3/\ 1+3=4/\ 4 MOD 4=0
1447 /\ SUC 0 MOD 4=1 /\ SUC 1 MOD 4=2/\ SUC 2 MOD 4=3 /\ SUC 3 MOD 4=0 `;h0;REAL_ARITH`&2<= &2`;cstab;SET_RULE`{A,B}={A,C}<=> B=C`;sqrt8;SET_RULE`{A,B}={B,A}`;SET_RULE`{B,A}={C,A}<=> B=C`;SET_RULE`{B,A}={A,C}<=> B=C`;cstab;GSYM ADD1;h0;REAL_ARITH`&2<= &2`;cstab;sqrt8]
1449 THEN MRESAL_TAC REAL_LE_RSQRT [`&2`;`&8`][REAL_ARITH`&0<= &8/\ &0<= &8 /\ &2 pow 2<= &8`]
1450 THEN MRESAL_TAC REAL_LE_LSQRT [`&8`;`#3.01`][REAL_ARITH`&0<= &8/\ &0<= #3.01 /\ &8<= #3.01 pow 2`]
1451 THEN REAL_ARITH_TAC;
1462 let SCS_5_pro_cs_IS_TRI_STABLE=prove_by_refinement(
1463 `(s=let upperbd = &6 in
1464 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
1465 else (if {i MOD k,j MOD k}={0,1} then p
1466 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
1467 mk_unadorned_v39 5 (#0.616) (a_pro 5 (&2 * h0) (&2) (&2 * h0)) (a_pro 5 sqrt8 (&2 * h0) upperbd))
1468 ==> stable_system (scs_k_v39 s) (scs_d_v39 s) (0..(scs_k_v39 s)-1)
1469 (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s))
1470 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)) (\i. ((1+i):num MOD (scs_k_v39 s)))`,
1475 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`~(5=3)/\ 5-1=4`;mk_unadorned_v39;CS_ADJ;scs_J_v39_explicit;change_type_v2;d_tame ;change_type_v3]
1476 THEN MRESAL_TAC HAS_SIZE_NUMSEG[`0`;`4`][ARITH_RULE`(4+1)-0=5`]
1477 THEN ASM_SIMP_TAC[stable_system;constraint_system;torsor;ARITH_RULE`3<= 5 /\5<=6/\ 1+5<=6/\ (4+1)-0=5/\ 5=5 /\ 0+5<=6`;CARD_NUMSEG;Hypermap.CARD_SINGLETON;change_type_v3;ARITH_RULE`A=B:num <=> B=A`;SET_RULE`A\/B<=> B\/A`;SET_RULE`{{i MOD k,j MOD K}| i,j| F}={}/\ {} SUBSET A`;CARD_CLAUSES;SET_RULE`({j MOD 5, i MOD 5} = {0, 1})<=> {i MOD 5, j MOD 5} = {0, 1}`]
1484 REWRITE_TAC[ARITH_RULE`5-1=4`;IN_NUMSEG;ARITH_RULE`0<= A`]
1485 THEN MRESAL1_TAC Hypermap.LE_MOD_SUC`4`[ARITH_RULE`SUC 4=5`];
1489 REWRITE_TAC[ARITH_RULE`5-1=4`;IN_NUMSEG;ARITH_RULE`0<= A`]
1490 THEN REPEAT STRIP_TAC
1491 THEN MRESAL_TAC (GEN_ALL MOD_IMP_EQ)[`5`;`1+x1`;`1+x2`][ARITH_RULE`1<= 1+A /\ (1+A<=5<=> A<=4)`]
1492 THEN POP_ASSUM MP_TAC
1497 REWRITE_TAC[ARITH_RULE`5-1=4`;IN_NUMSEG;ARITH_RULE`0<= A`]
1498 THEN REPEAT STRIP_TAC
1499 THEN POP_ASSUM MP_TAC
1500 THEN MP_TAC(ARITH_RULE`0<i==> 1<= i /\ 1<5`)
1502 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`5:num`;`x:num`;`i:num`]
1503 THEN MP_TAC(ARITH_RULE`0<i /\ i< 5==> i=1 \/ i=2 \/ i=3\/ i=4`)
1505 THEN MP_TAC(ARITH_RULE`x<= 4==> x=0 \/ x=1 \/ x=2 \/ x=3\/ x=4`)
1506 THEN ASM_REWRITE_TAC[]
1510 REWRITE_TAC[ARITH_RULE`5-1=4`;IN_NUMSEG;ARITH_RULE`0<= A`]
1511 THEN REPEAT STRIP_TAC
1512 THEN ASSUME_TAC(ARITH_RULE`1<=5 /\1<5/\ 1<=4`)
1513 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`5:num`;`x:num`;`5:num`]
1514 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`5`;`x:num`][ARITH_RULE`1*5=5`]
1515 THEN MP_TAC(ARITH_RULE`x<= 4==> x=0 \/ x=1 \/ x=2\/ x=3\/ x=4`)
1516 THEN ASM_REWRITE_TAC[]
1523 THEN MP_TAC(ARITH_RULE`i MOD 5= j MOD 5 \/ ~(i MOD 5= j MOD 5)`)
1528 MP_TAC(SET_RULE`{i MOD 5, j MOD 5} = {0, 1} \/ ~({i MOD 5, j MOD 5} = {0, 1})`)
1531 MRESAL_TAC REAL_LE_RSQRT [`&2 * #1.26 `;`&8`][sqrt8;h0;REAL_ARITH`&0<= &8/\ &0<= &2 * #1.26 /\ (&2 * #1.26) pow 2<= &8`];
1533 MP_TAC(ARITH_RULE`(i MOD 5 = SUC j MOD 5 \/ j MOD 5 = SUC i MOD 5) \/ ~(i MOD 5 = SUC j MOD 5 \/ j MOD 5 = SUC i MOD 5)`)
1535 THEN REWRITE_TAC[h0;sqrt8]
1536 THEN MRESAL_TAC REAL_LE_LSQRT [`&8`;`&6`][REAL_ARITH`&0<= &8/\ &0<= &6 /\ &8<= &6 pow 2`]
1537 THEN REAL_ARITH_TAC;
1543 THEN ASSUME_TAC(ARITH_RULE`1<=5 /\1<5/\ 1<=2`)
1544 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`5:num`;`j:num`;`5:num`]
1545 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`5`;`j:num`][ARITH_RULE`1*5=5`]
1546 THEN MRESAL_TAC MOD_MOD_REFL[`j:num`;`5`][ARITH_RULE`~(5=0)`]
1547 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1`;ADD1];
1551 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 4)<=> i=0 \/ i=1\/ i=2 \/ i=3\/ i=4`]
1552 THEN REPEAT STRIP_TAC
1553 THEN POP_ASSUM MP_TAC
1554 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 5=0 /\ 1 MOD 5=1 /\ 2 MOD 5=2 /\ 3 MOD 5=3 /\ ~(0=1)/\ ~(0=2)/\ ~(0=3)/\ ~(2=1)/\ ~(0=4)/\ ~(3=1) /\ ~(1=4) /\ ~(3=2)
1555 /\ ~(4=2) /\ ~(4=3)/\ 1+0=1/\ 1+2=3/\ 1+3=4/\ 5 MOD 5=0
1556 /\ SUC 0 MOD 5=1 /\ SUC 1 MOD 5=2/\ SUC 2 MOD 5=3 /\ SUC 3 MOD 5=4/\ SUC 4 MOD 5=0 /\ 4 MOD 5=4`;h0;REAL_ARITH`&2<= &2`;cstab;sqrt8]
1557 THEN MRESAL_TAC REAL_LE_RSQRT [`&2`;`&8`][REAL_ARITH`&0<= &8/\ &0<= &8 /\ &2 pow 2<= &8`]
1558 THEN MRESAL_TAC REAL_LE_LSQRT [`&8`;`#3.01`][REAL_ARITH`&0<= &8/\ &0<= #3.01 /\ &8<= #3.01 pow 2`]
1559 THEN REAL_ARITH_TAC;
1563 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 4)<=> i=0 \/ i=1\/ i=2 \/ i=3\/ i=4`]
1564 THEN REPEAT STRIP_TAC
1565 THEN MP_TAC(SET_RULE`~(2=0) /\ ~(2=1)/\ ~(3=0) /\ ~(3=1)==> ~({2,3}={1,0}) `)
1566 THEN MP_TAC(SET_RULE`~(4=0) /\ ~(4=1)/\ ~(3=0) /\ ~(3=1)==> ~({4,3}={1,0}) `)
1567 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 5=0 /\ 1 MOD 5=1 /\ 2 MOD 5=2 /\ 3 MOD 5=3 /\ ~(0=1)/\ ~(0=2)/\ ~(0=3)/\ ~(2=1)/\ ~(0=4)/\ ~(3=1) /\ ~(1=4) /\ ~(3=2)
1568 /\ ~(4=2) /\ ~(4=3)/\ 1+0=1/\ 1+2=3/\ 1+3=4/\ 5 MOD 5=0
1569 /\ SUC 0 MOD 5=1 /\ SUC 1 MOD 5=2/\ SUC 2 MOD 5=3 /\ SUC 3 MOD 5=4/\ SUC 4 MOD 5=0 /\ 4 MOD 5=4/\ 1+i=i+1`;h0;REAL_ARITH`&2<= &2`;cstab;GSYM ADD1;h0;REAL_ARITH`&2<= &2`;cstab;cstab;SET_RULE`{A,B}={A,C}<=> B=C`;sqrt8;SET_RULE`{A,B}={B,A}`;SET_RULE`{B,A}={C,A}<=> B=C`;SET_RULE`{B,A}={A,C}<=> B=C`;cstab;GSYM ADD1;h0;REAL_ARITH`&2<= &2`;cstab;sqrt8]
1572 THEN MRESAL_TAC REAL_LE_RSQRT [`&2`;`&8`][REAL_ARITH`&0<= &8/\ &0<= &8 /\ &2 pow 2<= &8`]
1573 THEN MRESAL_TAC REAL_LE_LSQRT [`&8`;`#3.01`][REAL_ARITH`&0<= &8/\ &0<= #3.01 /\ &8<= #3.01 pow 2`]
1574 THEN REAL_ARITH_TAC;
1586 let stable_sy_explicit = prove_by_refinement(
1587 `!k d s a b J f. stable_system k d s a b J f ==> k_sy (stable_sy (k,d,s, a,b,J,f)) = k/\
1588 d_sy (stable_sy (k,d,s, a,b,J,f)) = d /\
1589 a_sy (stable_sy (k,d,s, a,b,J,f)) = a /\
1590 b_sy (stable_sy (k,d,s, a,b,J,f)) = b /\
1591 J_SY (stable_sy (k,d,s, a,b,J,f)) = J /\
1592 I_SY (stable_sy (k,d,s, a,b,J,f)) = s /\
1593 f_sy (stable_sy (k,d,s, a,b,J,f)) = f `,
1595 [ REWRITE_TAC[k_sy;d_sy;a_sy;b_sy;J_SY;I_SY;f_sy;stable_sy_tybij;]
1596 THEN MP_TAC stable_sy_tybij
1600 THEN POP_ASSUM(fun th->
1601 POP_ASSUM (fun th1-> ASSUME_TAC th THEN MRESA1_TAC th1`(k,d,s,a,b,J,f):(num#real#(num->bool)#(num#num->real)#(num#num->real)#((num->bool)->bool)#(num->num))`))
1610 let SCS_K_LT_2= prove_by_refinement(
1611 `MEM s s_init_list_v39
1612 ==> 2< scs_k_v39 s`,
1615 REWRITE_TAC[s_init_list_v39;JEJTVGB_assume_v39;GSYM IN_SET_OF_LIST;taustar_v39;set_of_list;LET_DEF;LET_END_DEF
1616 ;SET_RULE`A IN {A1,A2,A3,A4,A5,A6,A7,A8} <=> A= A1 \/ A= A2 \/ A= A3 \/ A= A4 \/ A= A5 \/ A= A6 \/ A= A7 \/ A= A8`]
1617 THEN REPEAT STRIP_TAC
1618 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;mk_unadorned_v39;scs_k_v39_explicit]
1650 let VECTOR_3_3=prove(`!x y z. 1<= dimindex(:M)/\ 2<= dimindex(:M) /\ 3<= dimindex(:M) ==> (row 1 (vector[x;y;z:real^3]:real^3^M)) = x
1651 /\ (row 2 (vector[x;y;z:real^3]:real^3^M)) = y
1652 /\ (row 3 (vector[x;y;z:real^3]:real^3^M)) = z
1655 THEN ASM_SIMP_TAC[row;vector; LAMBDA_BETA; DIMINDEX_3; LENGTH; ARITH] THEN
1656 REWRITE_TAC[num_CONV `2`; num_CONV `1`; EL; HD; TL]
1657 THEN VECTOR_ARITH_TAC);;
1662 let ROW_IN_BALL_ANNULUS_3=
1665 THEN MRESAL_TAC VECTOR_3_3[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=3/\ 2<=3/\ 3<=3`]
1666 THEN MATCH_MP_TAC(SET_RULE`
1667 vv th IN IMAGE vv (:num) /\ IMAGE vv (:num) SUBSET ball_annulus
1668 ==> vv th IN ball_annulus`)
1669 THEN ASM_REWRITE_TAC[IMAGE;IN_ELIM_THM]
1671 THEN REWRITE_TAC[SET_RULE`(a:num) IN(:num)`]
1674 let INEQUALITY_A_B_SCS_TAC_30=
1675 fun (so:term) (so1:term)->
1676 ASM_SIMP_TAC[change_type_v3]
1677 THEN MRESAL_TAC VECTOR_3_3[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 0`][ARITH_RULE`1<=3/\ 2<=3/\ 3<=3/\ 1 MOD 3=1/\ 2 MOD 3=2 /\ ~(1=2) /\ SUC 1 MOD 3=2/\ SUC 2 MOD 3=0`]
1678 THEN REPLICATE_TAC 10 (POP_ASSUM MP_TAC)
1679 THEN POP_ASSUM(fun th-> MRESAL_TAC th[so;so1][dist;ARITH_RULE`1<=3/\ 2<=3/\ 3<=3/\ 1 MOD 3=1/\ 2 MOD 3=2 /\ ~(1=2) /\ SUC 1 MOD 3=2/\ SUC 2 MOD 3=0/\ 0 MOD 3=0/\ ~(1=0)/\ SUC 0 MOD 3=1 /\ ~(2=1) /\ 3 MOD 3=0 /\ SUC 3 MOD 3=1/\ ~(2=0)`]);;
1681 let INEQUALITY_A_B_SCS_TAC_3=
1683 MP_TAC(ARITH_RULE`1<= i /\ i<= 3==> i=1\/ i=2\/ i=3`)
1686 INEQUALITY_A_B_SCS_TAC_30 `1` th;
1687 INEQUALITY_A_B_SCS_TAC_30 `2` th;
1688 INEQUALITY_A_B_SCS_TAC_30 `0` th];;
1694 let IN_NOT_EMPTY_CASE_3=prove_by_refinement(
1695 `(s=let upperbd = &6 in
1696 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
1697 else (if {i MOD k,j MOD k}={0,1} then p
1698 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
1699 mk_unadorned_v39 3 (d_tame 3) (cs_adj 3 (&2) (&2 * h0)) (cs_adj 3 (&2 * h0) upperbd))
1701 /\ scs_k_v39 s= dimindex(:M)
1702 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 0]:real^3^M
1704 /\ matvec (v:real^3^M) =a
1706 a IN {matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v }`,
1710 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;IN_ELIM_THM;CONDITION1_SY]
1711 THEN REPEAT STRIP_TAC
1712 THEN REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
1713 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`3<=3`;mk_unadorned_v39;CS_ADJ]
1714 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[IN]
1715 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;]
1716 THEN REPEAT STRIP_TAC
1717 THEN EXISTS_TAC`v:real^3^M`
1718 THEN ASM_REWRITE_TAC[]
1721 REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
1722 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 3)<=> (i=1\/ i=2\/ i=3)`] THEN ASSUME_TAC (SYM th))
1723 THEN REPEAT STRIP_TAC
1725 ROW_IN_BALL_ANNULUS_3 `1`;
1726 ROW_IN_BALL_ANNULUS_3 `2`;
1727 ROW_IN_BALL_ANNULUS_3 `0`];
1729 REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
1730 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 3)<=> (i=1\/ i=2\/ i=3)`] THEN ASSUME_TAC (SYM th))
1731 THEN REPEAT DISCH_TAC
1735 INEQUALITY_A_B_SCS_TAC_3 `1` ;
1736 INEQUALITY_A_B_SCS_TAC_3 `2` ;
1737 INEQUALITY_A_B_SCS_TAC_3 `0` ];
1742 let NOT_EMPTY_CASE_3=prove_by_refinement(
1743 `(s=let upperbd = &6 in
1744 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
1745 else (if {i MOD k,j MOD k}={0,1} then p
1746 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
1747 mk_unadorned_v39 3 (d_tame 3) (cs_adj 3 (&2) (&2 * h0)) (cs_adj 3 (&2 * h0) upperbd))
1749 /\ scs_k_v39 s= dimindex(:M)
1751 ~({matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v }={})`
1755 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;]
1757 THEN ABBREV_TAC`v=vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 0]:real^3^M`
1758 THEN ABBREV_TAC`a=matvec (v:real^3^M) `
1759 THEN EXISTS_TAC`a:real^(M,3)finite_product`
1760 THEN MATCH_MP_TAC IN_NOT_EMPTY_CASE_3
1761 THEN ASM_REWRITE_TAC[]
1767 let SCS_A_B__EQ_MOD_3=prove(
1768 `(s=let upperbd = &6 in
1769 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
1770 else (if {i MOD k,j MOD k}={0,1} then p
1771 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
1772 mk_unadorned_v39 3 (d_tame 3) (cs_adj 3 (&2) (&2 * h0)) (cs_adj 3 (&2 * h0) upperbd))
1774 !i j. scs_a_v39 s i j = scs_a_v39 s (i MOD 3) (j MOD 3)/\
1775 scs_b_v39 s i j = scs_b_v39 s (i MOD 3) (j MOD 3)`,
1777 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;CS_ADJ]
1778 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`3`][ARITH_RULE`~(3=0)`]
1779 THEN MRESAL_TAC MOD_MOD_REFL[`j:num`;`3`][ARITH_RULE`~(3=0)`]
1780 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`3`][ARITH_RULE`~(3=0) /\ 1 MOD 3=1`;ADD1]
1781 THEN MRESAL_TAC MOD_ADD_MOD[`i:num`;`1:num`;`3`][ARITH_RULE`~(3=0) /\ 1 MOD 3=1`;ADD1]);;
1789 let VV_IN_BALL_ANNULUS_TAC_3=
1791 REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
1792 THEN POP_ASSUM(fun th-> MRESAL1_TAC th so [ARITH_RULE`1<=1 /\ 1<=2 /\1<=3 /\ 1<= 4/\ 1<=3 /\ 2<=3/\ 3<=3/\ 4<=4/\ ~(1=0)/\ ~(2=0) /\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2) `] )
1795 let PROVE_INEQUALITY_TAC_30=
1796 fun (so:term) (so1:term)->
1797 REPLICATE_TAC 6(POP_ASSUM MP_TAC)
1798 THEN POP_ASSUM(fun th-> MRESAL_TAC th[so;so1][ARITH_RULE`1<=3 /\ 3<=3/\ 1<=1 /\ 1<=3/\ 1<=2 /\ 2<=3/\1<=3 /\ 3<=4`])
1799 THEN POP_ASSUM( fun th->
1800 POP_ASSUM( fun th1->
1802 THEN MP_TAC th THEN MP_TAC th1
1803 THEN POP_ASSUM(fun th2-> ONCE_REWRITE_TAC[th2]
1804 THEN POP_ASSUM(fun th3-> MRESAL1_TAC th3`3`[ARITH_RULE`3 MOD 3=0`]
1805 THEN MRESAL1_TAC th3`1`[ARITH_RULE`1 MOD 3=1/\ ~(1=0)`]
1806 THEN MRESAL1_TAC th3`2`[ARITH_RULE`2 MOD 3=2/\ ~(2=0)/\ ~(2=1)`])
1807 THEN MRESAL1_TAC th2`3`[ARITH_RULE`3 MOD 3=0`])
1809 THEN MP_TAC SCS_A_B__EQ_MOD_3
1810 THEN ASM_REWRITE_TAC[]
1812 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
1813 THEN ASM_REWRITE_TAC[ARITH_RULE`3 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2 /\ 3 MOD 4=3`]
1819 let PROVE_INEQUALITY_TAC_3=
1821 MP_TAC(ARITH_RULE`(j MOD 3<3)==> (j MOD 3=0) \/ (j MOD 3=1) \/ (j MOD 3=2)`)
1824 PROVE_INEQUALITY_TAC_30 th `3`;
1825 PROVE_INEQUALITY_TAC_30 th `1`;
1826 PROVE_INEQUALITY_TAC_30 th `2`];;
1829 let IN_NOT_EMPTY_B1_SY_3=prove_by_refinement(
1830 `(let upperbd = &6 in
1831 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
1832 else (if {i MOD k,j MOD k}={0,1} then p
1833 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
1834 mk_unadorned_v39 3 (d_tame 3) (cs_adj 3 (&2) (&2 * h0)) (cs_adj 3 (&2 * h0) upperbd))=s
1836 scs_k_v39 s= dimindex(:M)/\
1837 matvec (v:real^3^M) =a/\
1838 (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\
1839 CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\ (!i. vv i =
1840 if i MOD scs_k_v39 s = 0 then row 3 v else
1841 if i MOD scs_k_v39 s = 1 then row 1 v else
1843 ==> vv IN BBs_v39 s`,
1847 REWRITE_TAC[CONDITION1_SY;CONDITION2_SY;change_type_v3]
1848 THEN REPEAT STRIP_TAC
1849 THEN SUBGOAL_THEN`scs_k_v39 s =3` ASSUME_TAC;
1852 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;];
1854 ASM_REWRITE_TAC[ARITH_RULE`3<=3`]
1857 REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
1858 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
1860 THEN REPEAT STRIP_TAC)
1861 THEN POP_ASSUM MP_TAC
1862 THEN ASM_REWRITE_TAC[th;IN]
1864 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;]
1867 ASM_REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
1868 THEN REPEAT STRIP_TAC
1869 THEN ASM_REWRITE_TAC[]
1870 THEN MRESAL_TAC DIVISION[`x':num`;`3`][ARITH_RULE`~(3=0)`]
1871 THEN MP_TAC(ARITH_RULE`x' MOD 3<3 ==> x' MOD 3 = 0 \/ x' MOD 3 = 1 \/ x' MOD 3 = 2`)
1874 VV_IN_BALL_ANNULUS_TAC_3 `3`;
1875 VV_IN_BALL_ANNULUS_TAC_3 `1`;
1876 VV_IN_BALL_ANNULUS_TAC_3 `2`;];
1880 ASM_REWRITE_TAC[periodic]
1882 THEN MRESAL_TAC MOD_EQ[`i+3:num`;`i:num`;`3:num`;`1`][ARITH_RULE`1*A=A`];
1888 THEN SUBGOAL_THEN`!i. (vv:num->real^3) i= vv (i MOD 3)` ASSUME_TAC;
1890 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
1892 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`3`][ARITH_RULE`~(3=0)`];
1895 THEN POP_ASSUM MP_TAC
1896 THEN MRESAL_TAC DIVISION[`i:num`;`3`][ARITH_RULE`~(3=0)`]
1897 THEN MRESAL_TAC DIVISION[`j:num`;`3`][ARITH_RULE`~(3=0)`]
1898 THEN MP_TAC(ARITH_RULE`(i MOD 3<3)==> (i MOD 3=0) \/ (i MOD 3=1) \/ (i MOD 3=2)`)
1901 PROVE_INEQUALITY_TAC_3 `3`;
1902 PROVE_INEQUALITY_TAC_3 `1`;
1903 PROVE_INEQUALITY_TAC_3 `2`;];
1905 ASM_REWRITE_TAC[ARITH_RULE`3<=3`];
1913 let TRI_STABLE_K_EQ_3=prove(`tri_stable k (d:real) (0..k-1) a b J (\i. ((1+i):num MOD k))
1915 SIMP_TAC[tri_stable;ARITH_RULE`2<3`])
1922 let POINT_IN_BBS_IS_NOT_0_3=prove_by_refinement(
1923 `(s=let upperbd = &6 in
1924 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
1925 else (if {i MOD k,j MOD k}={0,1} then p
1926 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
1927 mk_unadorned_v39 3 (d_tame 3) (cs_adj 3 (&2) (&2 * h0)) (cs_adj 3 (&2 * h0) upperbd))
1929 ==> ~(vv 1= vec 0)/\ ~(vv 2= vec 0) /\ ~(vv 0= vec 0)`,
1934 THEN POP_ASSUM MP_TAC
1935 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`3<=3`;mk_unadorned_v39;CS_ADJ;IMAGE;SUBSET;IN_ELIM_THM]
1937 THEN REMOVE_ASSUM_TAC
1938 THEN REMOVE_ASSUM_TAC
1939 THEN SUBGOAL_THEN`(?x. x IN (:num) /\ vv 0 = (vv:num->real^3) x)`ASSUME_TAC;
1942 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
1944 SUBGOAL_THEN`(?x. x IN (:num) /\ vv 1 = (vv:num->real^3) x)`ASSUME_TAC;
1947 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
1949 SUBGOAL_THEN`(?x. x IN (:num) /\ vv 2 = (vv:num->real^3) x)`ASSUME_TAC;
1952 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
1954 REPLICATE_TAC 3(POP_ASSUM MP_TAC)
1955 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
1956 THEN MRESAL1_TAC th`(vv:num->real^3) 0`[ball_annulus;IN_ELIM_THM;DIFF;ball]
1957 THEN MRESAL1_TAC th`(vv:num->real^3) 1`[ball_annulus;IN_ELIM_THM;DIFF;ball]
1958 THEN MRESAL1_TAC th`(vv:num->real^3) 2`[ball_annulus;IN_ELIM_THM;DIFF;ball;])
1962 THEN POP_ASSUM(fun th-> ASM_TAC
1963 THEN REWRITE_TAC[th;DIST_REFL;REAL_ARITH`(&0< &2)`]);
1966 THEN POP_ASSUM(fun th-> ASM_TAC
1967 THEN REWRITE_TAC[th;DIST_REFL;REAL_ARITH`(&0< &2)`]);
1969 THEN POP_ASSUM(fun th-> ASM_TAC
1970 THEN REWRITE_TAC[th;DIST_REFL;REAL_ARITH`(&0< &2)`])
1977 let NOT_COLLINEAR_BBs_CASE_3=prove_by_refinement(
1978 `(let upperbd = &6 in
1979 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
1980 else (if {i MOD k,j MOD k}={0,1} then p
1981 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
1982 mk_unadorned_v39 3 (d_tame 3) (cs_adj 3 (&2) (&2 * h0)) (cs_adj 3 (&2 * h0) upperbd))=s
1984 ==> ~collinear{vec 0, vv 1 ,vv 2}/\
1985 ~collinear{vec 0, vv 1 ,vv 0}/\
1986 ~collinear{vec 0, vv 2 ,vv 0}`
1991 REWRITE_TAC[Local_lemmas.collinear_fan22;aff;AFFINE_HULL_2;IN_ELIM_THM;
1992 VECTOR_ARITH`A % vec 0+B=B`]
1994 THEN MP_TAC POINT_IN_BBS_IS_NOT_0_3
1997 THEN REWRITE_TAC[IN]
1999 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`3<=3`;mk_unadorned_v39;CS_ADJ]
2000 THEN SUBGOAL_THEN`scs_k_v39 s =3` ASSUME_TAC;
2003 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;];
2006 ASM_REWRITE_TAC[ARITH_RULE`3<=3`]
2007 THEN POP_ASSUM(fun th->
2010 THEN REPEAT DISCH_TAC
2011 THEN REPEAT STRIP_TAC;
2014 REPLICATE_TAC 6 (POP_ASSUM MP_TAC)
2015 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2016 THEN MRESA_TAC th[`1`;`2`])
2017 THEN POP_ASSUM MP_TAC
2018 THEN POP_ASSUM MP_TAC
2020 THEN REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`3<=3`;mk_unadorned_v39;CS_ADJ;
2021 ARITH_RULE`1 MOD 3 =1 /\ 2 MOD 3=2/\ ~(1=2) /\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0`;dist;VECTOR_ARITH`A- B%A=(&1-B)%A`;NORM_MUL]
2022 THEN REPLICATE_TAC 7(POP_ASSUM MP_TAC)
2023 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2025 THEN SUBGOAL_THEN`(?x. x IN (:num) /\ vv 1 = (vv:num->real^3) x)`ASSUME_TAC;
2029 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
2031 SUBGOAL_THEN`(?x. x IN (:num) /\ vv 2 = (vv:num->real^3) x)`ASSUME_TAC;
2035 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
2038 REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
2040 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`(vv:num->real^3) 2`[ball_annulus;IN_ELIM_THM;DIFF;cball;ball;dist;VECTOR_ARITH`vec 0- B= --B`;NORM_NEG;NORM_MUL;REAL_ARITH`~(a<b) <=> b<=a`]
2041 THEN MRESAL1_TAC th`(vv:num->real^3) 1`[ball_annulus;IN_ELIM_THM;DIFF;cball;ball;dist;VECTOR_ARITH`vec 0- B= --B`;NORM_NEG;NORM_MUL;REAL_ARITH`~(a<b) <=> b<=a`])
2042 THEN MP_TAC(REAL_ARITH`&0<= &1-v\/ &0<= --( &1-v)`)
2047 MP_TAC(REAL_ARITH`&0<= v\/ &0<= --( v)`)
2052 MRESA1_TAC Trigonometry2.ABS_REFL `v:real`
2053 THEN MRESA1_TAC Trigonometry2.ABS_REFL `&1- v:real`
2054 THEN POP_ASSUM(fun th-> ASM_TAC
2055 THEN REWRITE_TAC[th]
2056 THEN REPEAT STRIP_TAC)
2057 THEN POP_ASSUM(fun th-> ASM_TAC
2058 THEN REWRITE_TAC[th]
2059 THEN REPEAT STRIP_TAC)
2060 THEN MP_TAC(REAL_ARITH`&2 <= (&1 - v) * norm (vv 1)
2061 /\ &2 <= v * norm (vv 1) ==> &4<= norm ((vv:num->real^3) 1)`)
2062 THEN REPLICATE_TAC 5(POP_ASSUM MP_TAC)
2063 THEN ASM_REWRITE_TAC[h0]
2071 MRESAL1_TAC Trigonometry2.ABS_REFL `-- v:real`[REAL_ABS_NEG]
2072 THEN MRESA1_TAC Trigonometry2.ABS_REFL `&1- v:real`
2073 THEN POP_ASSUM(fun th-> ASM_TAC
2074 THEN REWRITE_TAC[th]
2075 THEN REPEAT STRIP_TAC)
2076 THEN POP_ASSUM(fun th-> ASM_TAC
2077 THEN REWRITE_TAC[th; ]
2078 THEN REPEAT STRIP_TAC)
2079 THEN MP_TAC(REAL_ARITH`&2 <= --v * norm (vv 1)
2080 /\ &2 <= norm (vv 1) ==> &4<=(&1- v) *norm ((vv:num->real^3) 1)`)
2081 THEN ASM_REWRITE_TAC[]
2082 THEN REPLICATE_TAC 10(POP_ASSUM MP_TAC)
2083 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
2085 THEN POP_ASSUM MP_TAC
2086 THEN ASM_REWRITE_TAC[h0]
2091 MP_TAC(REAL_ARITH`&0<= v\/ &0<= --( v)`)
2096 MRESAL1_TAC Trigonometry2.ABS_REFL ` v:real`[REAL_ABS_NEG]
2097 THEN MRESAL1_TAC Trigonometry2.ABS_REFL `--(&1- v):real` [REAL_ABS_NEG]
2098 THEN POP_ASSUM(fun th-> ASM_TAC
2099 THEN REWRITE_TAC[th]
2100 THEN REPEAT STRIP_TAC)
2101 THEN POP_ASSUM(fun th-> ASM_TAC
2102 THEN REWRITE_TAC[th; ]
2103 THEN REPEAT STRIP_TAC)
2104 THEN MP_TAC(REAL_ARITH`&2 <= norm (vv 1)
2105 /\ &2 <= --(&1 - v) * norm (vv 1) ==> &4<= v *norm ((vv:num->real^3) 1)`)
2106 THEN ASM_REWRITE_TAC[]
2107 THEN REPLICATE_TAC 5(POP_ASSUM MP_TAC)
2108 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
2110 THEN POP_ASSUM MP_TAC
2111 THEN ASM_REWRITE_TAC[h0]
2116 MRESAL1_TAC Trigonometry2.ABS_REFL ` --v:real`[REAL_ABS_NEG]
2117 THEN MRESAL1_TAC Trigonometry2.ABS_REFL `--(&1- v):real` [REAL_ABS_NEG]
2118 THEN POP_ASSUM(fun th-> ASM_TAC
2119 THEN REWRITE_TAC[th]
2120 THEN REPEAT STRIP_TAC)
2121 THEN POP_ASSUM(fun th-> ASM_TAC
2122 THEN REWRITE_TAC[th; ]
2123 THEN REPEAT STRIP_TAC)
2124 THEN MP_TAC(REAL_ARITH`&2 <= norm (vv 1)
2125 /\ &2 <= --v * norm (vv 1) ==> &4<= (&1-v) *norm ((vv:num->real^3) 1)`)
2126 THEN ASM_REWRITE_TAC[]
2127 THEN REPLICATE_TAC 11(POP_ASSUM MP_TAC)
2128 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
2130 THEN POP_ASSUM MP_TAC
2131 THEN ASM_REWRITE_TAC[h0]
2132 THEN REAL_ARITH_TAC;
2135 REPLICATE_TAC 6 (POP_ASSUM MP_TAC)
2136 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2137 THEN MRESA_TAC th[`0`;`1`])
2138 THEN POP_ASSUM MP_TAC
2139 THEN POP_ASSUM MP_TAC
2141 THEN REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`3<=3`;mk_unadorned_v39;CS_ADJ;
2142 ARITH_RULE`1 MOD 3 =1 /\ 2 MOD 3=2/\ ~(1=2) /\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ 0 MOD 3=0/\ SUC 0=1/\ ~(0=1)`;dist;VECTOR_ARITH`B%A-A= --((&1-B)%A)`;NORM_MUL;NORM_NEG]
2143 THEN REPLICATE_TAC 7(POP_ASSUM MP_TAC)
2144 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2146 THEN SUBGOAL_THEN`(?x. x IN (:num) /\ vv 1 = (vv:num->real^3) x)`ASSUME_TAC;
2150 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
2152 SUBGOAL_THEN`(?x. x IN (:num) /\ vv 0 = (vv:num->real^3) x)`ASSUME_TAC;
2156 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
2159 REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
2161 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`(vv:num->real^3) 0`[ball_annulus;IN_ELIM_THM;DIFF;cball;ball;dist;VECTOR_ARITH`vec 0- B= --B`;NORM_NEG;NORM_MUL;REAL_ARITH`~(a<b) <=> b<=a`]
2162 THEN MRESAL1_TAC th`(vv:num->real^3) 1`[ball_annulus;IN_ELIM_THM;DIFF;cball;ball;dist;VECTOR_ARITH`vec 0- B= --B`;NORM_NEG;NORM_MUL;REAL_ARITH`~(a<b) <=> b<=a`])
2163 THEN MP_TAC(REAL_ARITH`&0<= &1-v\/ &0<= --( &1-v)`)
2168 MP_TAC(REAL_ARITH`&0<= v\/ &0<= --( v)`)
2173 MRESA1_TAC Trigonometry2.ABS_REFL `v:real`
2174 THEN MRESA1_TAC Trigonometry2.ABS_REFL `&1- v:real`
2175 THEN POP_ASSUM(fun th-> ASM_TAC
2176 THEN REWRITE_TAC[th]
2177 THEN REPEAT STRIP_TAC)
2178 THEN POP_ASSUM(fun th-> ASM_TAC
2179 THEN REWRITE_TAC[th]
2180 THEN REPEAT STRIP_TAC)
2181 THEN MP_TAC(REAL_ARITH`&2 <= (&1 - v) * norm (vv 1)
2182 /\ &2 <= v * norm (vv 1) ==> &4<= norm ((vv:num->real^3) 1)`)
2183 THEN REPLICATE_TAC 5(POP_ASSUM MP_TAC)
2184 THEN ASM_REWRITE_TAC[h0]
2192 MRESAL1_TAC Trigonometry2.ABS_REFL `-- v:real`[REAL_ABS_NEG]
2193 THEN MRESA1_TAC Trigonometry2.ABS_REFL `&1- v:real`
2194 THEN POP_ASSUM(fun th-> ASM_TAC
2195 THEN REWRITE_TAC[th]
2196 THEN REPEAT STRIP_TAC)
2197 THEN POP_ASSUM(fun th-> ASM_TAC
2198 THEN REWRITE_TAC[th; ]
2199 THEN REPEAT STRIP_TAC)
2200 THEN MP_TAC(REAL_ARITH`&2 <= --v * norm (vv 1)
2201 /\ &2 <= norm (vv 1) ==> &4<=(&1- v) *norm ((vv:num->real^3) 1)`)
2202 THEN ASM_REWRITE_TAC[]
2203 THEN REPLICATE_TAC 10(POP_ASSUM MP_TAC)
2204 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
2206 THEN POP_ASSUM MP_TAC
2207 THEN ASM_REWRITE_TAC[h0]
2212 MP_TAC(REAL_ARITH`&0<= v\/ &0<= --( v)`)
2217 MRESAL1_TAC Trigonometry2.ABS_REFL ` v:real`[REAL_ABS_NEG]
2218 THEN MRESAL1_TAC Trigonometry2.ABS_REFL `--(&1- v):real` [REAL_ABS_NEG]
2219 THEN POP_ASSUM(fun th-> ASM_TAC
2220 THEN REWRITE_TAC[th]
2221 THEN REPEAT STRIP_TAC)
2222 THEN POP_ASSUM(fun th-> ASM_TAC
2223 THEN REWRITE_TAC[th; ]
2224 THEN REPEAT STRIP_TAC)
2225 THEN MP_TAC(REAL_ARITH`&2 <= norm (vv 1)
2226 /\ &2 <= --(&1 - v) * norm (vv 1) ==> &4<= v *norm ((vv:num->real^3) 1)`)
2227 THEN ASM_REWRITE_TAC[]
2228 THEN REPLICATE_TAC 5(POP_ASSUM MP_TAC)
2229 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
2231 THEN POP_ASSUM MP_TAC
2232 THEN ASM_REWRITE_TAC[h0]
2237 MRESAL1_TAC Trigonometry2.ABS_REFL ` --v:real`[REAL_ABS_NEG]
2238 THEN MRESAL1_TAC Trigonometry2.ABS_REFL `--(&1- v):real` [REAL_ABS_NEG]
2239 THEN POP_ASSUM(fun th-> ASM_TAC
2240 THEN REWRITE_TAC[th]
2241 THEN REPEAT STRIP_TAC)
2242 THEN POP_ASSUM(fun th-> ASM_TAC
2243 THEN REWRITE_TAC[th; ]
2244 THEN REPEAT STRIP_TAC)
2245 THEN MP_TAC(REAL_ARITH`&2 <= norm (vv 1)
2246 /\ &2 <= --v * norm (vv 1) ==> &4<= (&1-v) *norm ((vv:num->real^3) 1)`)
2247 THEN ASM_REWRITE_TAC[]
2248 THEN REPLICATE_TAC 11(POP_ASSUM MP_TAC)
2249 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
2251 THEN POP_ASSUM MP_TAC
2252 THEN ASM_REWRITE_TAC[h0]
2253 THEN REAL_ARITH_TAC;
2260 REPLICATE_TAC 6 (POP_ASSUM MP_TAC)
2261 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2262 THEN MRESA_TAC th[`0`;`2`])
2263 THEN POP_ASSUM MP_TAC
2264 THEN POP_ASSUM MP_TAC
2266 THEN REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`3<=3`;mk_unadorned_v39;CS_ADJ;
2267 ARITH_RULE`1 MOD 3 =1 /\ 2 MOD 3=2/\ ~(1=2) /\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ 0 MOD 3=0/\ SUC 0=1/\ ~(0=1)/\ ~(0=2)`;dist;VECTOR_ARITH`B%A-A= --((&1-B)%A)`;NORM_MUL;NORM_NEG]
2268 THEN REPLICATE_TAC 7(POP_ASSUM MP_TAC)
2269 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2271 THEN SUBGOAL_THEN`(?x. x IN (:num) /\ vv 2 = (vv:num->real^3) x)`ASSUME_TAC;
2275 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
2277 SUBGOAL_THEN`(?x. x IN (:num) /\ vv 0 = (vv:num->real^3) x)`ASSUME_TAC;
2281 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
2284 REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
2286 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`(vv:num->real^3) 0`[ball_annulus;IN_ELIM_THM;DIFF;cball;ball;dist;VECTOR_ARITH`vec 0- B= --B`;NORM_NEG;NORM_MUL;REAL_ARITH`~(a<b) <=> b<=a`]
2287 THEN MRESAL1_TAC th`(vv:num->real^3) 2`[ball_annulus;IN_ELIM_THM;DIFF;cball;ball;dist;VECTOR_ARITH`vec 0- B= --B`;NORM_NEG;NORM_MUL;REAL_ARITH`~(a<b) <=> b<=a`])
2288 THEN MP_TAC(REAL_ARITH`&0<= &1-v\/ &0<= --( &1-v)`)
2293 MP_TAC(REAL_ARITH`&0<= v\/ &0<= --( v)`)
2298 MRESA1_TAC Trigonometry2.ABS_REFL `v:real`
2299 THEN MRESA1_TAC Trigonometry2.ABS_REFL `&1- v:real`
2300 THEN POP_ASSUM(fun th-> ASM_TAC
2301 THEN REWRITE_TAC[th]
2302 THEN REPEAT STRIP_TAC)
2303 THEN POP_ASSUM(fun th-> ASM_TAC
2304 THEN REWRITE_TAC[th]
2305 THEN REPEAT STRIP_TAC)
2306 THEN MP_TAC(REAL_ARITH`&2 <= (&1 - v) * norm (vv 2)
2307 /\ &2 <= v * norm (vv 2) ==> &4<= norm ((vv:num->real^3) 2)`)
2308 THEN REPLICATE_TAC 5(POP_ASSUM MP_TAC)
2309 THEN ASM_REWRITE_TAC[h0]
2317 MRESAL1_TAC Trigonometry2.ABS_REFL `-- v:real`[REAL_ABS_NEG]
2318 THEN MRESA1_TAC Trigonometry2.ABS_REFL `&1- v:real`
2319 THEN POP_ASSUM(fun th-> ASM_TAC
2320 THEN REWRITE_TAC[th]
2321 THEN REPEAT STRIP_TAC)
2322 THEN POP_ASSUM(fun th-> ASM_TAC
2323 THEN REWRITE_TAC[th; ]
2324 THEN REPEAT STRIP_TAC)
2325 THEN MP_TAC(REAL_ARITH`&2 <= --v * norm (vv 2)
2326 /\ &2 <= norm (vv 2) ==> &4<=(&1- v) *norm ((vv:num->real^3) 2)`)
2327 THEN ASM_REWRITE_TAC[]
2328 THEN REPLICATE_TAC 10(POP_ASSUM MP_TAC)
2329 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
2331 THEN POP_ASSUM MP_TAC
2332 THEN ASM_REWRITE_TAC[h0]
2337 MP_TAC(REAL_ARITH`&0<= v\/ &0<= --( v)`)
2342 MRESAL1_TAC Trigonometry2.ABS_REFL ` v:real`[REAL_ABS_NEG]
2343 THEN MRESAL1_TAC Trigonometry2.ABS_REFL `--(&1- v):real` [REAL_ABS_NEG]
2344 THEN POP_ASSUM(fun th-> ASM_TAC
2345 THEN REWRITE_TAC[th]
2346 THEN REPEAT STRIP_TAC)
2347 THEN POP_ASSUM(fun th-> ASM_TAC
2348 THEN REWRITE_TAC[th; ]
2349 THEN REPEAT STRIP_TAC)
2350 THEN MP_TAC(REAL_ARITH`&2 <= norm (vv 2)
2351 /\ &2 <= --(&1 - v) * norm (vv 2) ==> &4<= v *norm ((vv:num->real^3) 2)`)
2352 THEN ASM_REWRITE_TAC[]
2353 THEN REPLICATE_TAC 5(POP_ASSUM MP_TAC)
2354 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
2356 THEN POP_ASSUM MP_TAC
2357 THEN ASM_REWRITE_TAC[h0]
2362 MRESAL1_TAC Trigonometry2.ABS_REFL ` --v:real`[REAL_ABS_NEG]
2363 THEN MRESAL1_TAC Trigonometry2.ABS_REFL `--(&1- v):real` [REAL_ABS_NEG]
2364 THEN POP_ASSUM(fun th-> ASM_TAC
2365 THEN REWRITE_TAC[th]
2366 THEN REPEAT STRIP_TAC)
2367 THEN POP_ASSUM(fun th-> ASM_TAC
2368 THEN REWRITE_TAC[th; ]
2369 THEN REPEAT STRIP_TAC)
2370 THEN MP_TAC(REAL_ARITH`&2 <= norm (vv 2)
2371 /\ &2 <= --v * norm (vv 2) ==> &4<= (&1-v) *norm ((vv:num->real^3) 2)`)
2372 THEN ASM_REWRITE_TAC[]
2373 THEN REPLICATE_TAC 11(POP_ASSUM MP_TAC)
2374 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
2376 THEN POP_ASSUM MP_TAC
2377 THEN ASM_REWRITE_TAC[h0]
2378 THEN REAL_ARITH_TAC;
2386 let IN_B_SY1_COLLINEAR_CASE_3=prove_by_refinement(
2387 `(let upperbd = &6 in
2388 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
2389 else (if {i MOD k,j MOD k}={0,1} then p
2390 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
2391 mk_unadorned_v39 3 (d_tame 3) (cs_adj 3 (&2) (&2 * h0)) (cs_adj 3 (&2 * h0) upperbd))=s
2393 scs_k_v39 s= dimindex(:M)
2395 (!a. a IN {matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v }
2396 ==> ~collinear{vec 0, row 1 (vecmats a),row 2 (vecmats a)}/\
2397 ~collinear{vec 0, row 1 (vecmats a),row 3 (vecmats a)}/\
2398 ~collinear{vec 0, row 2 (vecmats a),row 3 (vecmats a)})`
2403 REWRITE_TAC[IN_ELIM_THM;]
2407 THEN ABBREV_TAC`( vv i =
2408 if i MOD scs_k_v39 s = 0 then row 3 v else
2409 if i MOD scs_k_v39 s = 1 then row 1 v else
2410 row 2 (v:real^3^M))`
2411 THEN MP_TAC IN_NOT_EMPTY_B1_SY_3
2412 THEN ASM_REWRITE_TAC[]
2413 THEN POP_ASSUM MP_TAC
2414 THEN ASM_REWRITE_TAC[Dih2k_hypermap.VECMATS_MATVEC_ID]
2417 THEN MP_TAC NOT_COLLINEAR_BBs_CASE_3
2419 THEN SUBGOAL_THEN`scs_k_v39 s =3` ASSUME_TAC;
2422 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;];
2424 SUBGOAL_THEN`vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 0]:real^3^M
2428 REPLICATE_TAC 8 (POP_ASSUM MP_TAC)
2429 THEN POP_ASSUM(fun th1-> MP_TAC (SYM th1)
2430 THEN REWRITE_TAC[ th]))
2431 THEN REPEAT DISCH_TAC
2432 THEN REPLICATE_TAC 4 (REMOVE_ASSUM_TAC)
2433 THEN POP_ASSUM(fun th-> REWRITE_TAC[GSYM th])
2434 THEN ASM_REWRITE_TAC[ARITH_RULE`1 MOD 3=1/\ 2 MOD 3=2/\ 3 MOD 3=0/\ 0 MOD 3=0 /\ ~(1=0)/\ ~(2=0)/\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2)`;]
2435 THEN ONCE_REWRITE_TAC[CART_EQ]
2436 THEN ASM_REWRITE_TAC[ARITH_RULE`1<=i/\ i<=3 <=>i=1\/ i=2\/ i=3`]
2437 THEN REPEAT RESA_TAC
2439 ASM_SIMP_TAC[row;vector; LAMBDA_BETA; DIMINDEX_3; LENGTH; ARITH] THEN
2440 REWRITE_TAC[num_CONV `3`;num_CONV `2`; num_CONV `1`; EL; HD; TL;]
2441 THEN ASM_SIMP_TAC[CART_EQ; DIMINDEX_3; FORALL_3; VEC_COMPONENT; VECTOR_3; ARITH;row;LAMBDA_BETA];
2444 THEN POP_ASSUM(fun th->
2445 REPLICATE_TAC 8 (POP_ASSUM MP_TAC)
2446 THEN POP_ASSUM(fun th1-> MP_TAC (SYM th1)
2447 THEN REWRITE_TAC[ th]))
2448 THEN REPEAT DISCH_TAC
2449 THEN MRESAL_TAC VECTOR_3_3[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=3/\ 2<=3/\ 3<=3`]
2457 let HDPLYGY_CASE_3=prove_by_refinement(
2458 `tri_stable k (d:real) (0..k-1) a b J (\i. ((1+i):num MOD k)) /\k= dimindex(:M)
2460 /\ ~({matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY a b v } = {}:real^(M,3)finite_product->bool)
2461 /\ (!l. l IN {matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY a b v }
2462 ==> ~collinear{vec 0, row 1 (vecmats l),row 2 (vecmats l)}/\
2463 ~collinear{vec 0, row 1 (vecmats l),row 3 (vecmats l)}/\
2464 ~collinear{vec 0, row 2 (vecmats l),row 3 (vecmats l)})
2465 ==> ?x:real^(M,3)finite_product. x IN ({matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY a b v })
2466 /\ (!y:real^(M,3)finite_product. y IN ({matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY a b v })
2467 ==> tau3 (row 1 (vecmats (x:real^(M,3)finite_product))) (row 2 (vecmats x)) (row 3 ( vecmats x)) <= tau3 (row 1 (vecmats y)) (row 2 (vecmats y)) (row 3 (vecmats y)))`
2472 THEN MP_TAC TRI_STABLE_K_EQ_3
2474 THEN MRESA_TAC CONTINUOUS_ATTAINS_INF[`(\x:real^(M,3)finite_product. tau3 (row 1 (vecmats (x:real^(M,3)finite_product))) (row 2 (vecmats x)) (row 3 ( vecmats x)))`;`{matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY a b v }:real^(M,3)finite_product->bool`]
2475 THEN POP_ASSUM MATCH_MP_TAC
2480 POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2481 THEN MATCH_MP_TAC COMPACT_TRI_STABLE
2482 THEN ASM_REWRITE_TAC[];
2485 SIMP_TAC[o_DEF;LIFT_SUM;FINITE_NUMSEG;tau3; o_DEF;LIFT_SUB;LIFT_SUM;REAL_ARITH`A+B+C-D=((A+B)+C)-D`]
2486 THEN MATCH_MP_TAC CONTINUOUS_ON_SUB
2487 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_CMUL;LIFT_SUB;]
2488 THEN SIMP_TAC[o_DEF;LIFT_ADD;]
2489 THEN MATCH_MP_TAC CONTINUOUS_ON_ADD
2493 SIMP_TAC[o_DEF;LIFT_ADD;]
2494 THEN MATCH_MP_TAC CONTINUOUS_ON_ADD
2498 SIMP_TAC[o_DEF;LIFT_CMUL;FINITE_NUMSEG]
2499 THEN REPEAT STRIP_TAC
2500 THEN MATCH_MP_TAC CONTINUOUS_ON_MUL
2504 REWRITE_TAC[rho;o_DEF;LIFT_ADD]
2505 THEN MATCH_MP_TAC CONTINUOUS_ON_ADD
2506 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_CMUL;LIFT_SUB;]
2507 THEN MATCH_MP_TAC CONTINUOUS_ON_SUB
2508 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_CMUL;LIFT_SUB;]
2509 THEN MATCH_MP_TAC CONTINUOUS_ON_CMUL
2510 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_ADD;ly;interp;REAL_ARITH`a*b=b*a`;LIFT_CMUL]
2511 THEN MATCH_MP_TAC CONTINUOUS_ON_ADD
2512 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_CMUL;LIFT_SUB;]
2513 THEN MATCH_MP_TAC CONTINUOUS_ON_CMUL
2514 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_ADD;ly;interp;REAL_ARITH`a*b=b*a`;LIFT_CMUL]
2515 THEN MATCH_MP_TAC CONTINUOUS_ON_SUB
2516 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_CMUL;LIFT_SUB;]
2517 THEN MATCH_MP_TAC CONTINUOUS_ON_LIFT_NORM_COMPOSE
2518 THEN MATCH_MP_TAC CONTINUOUS_ON_ROW
2519 THEN ASM_REWRITE_TAC[IN_NUMSEG]
2522 REWRITE_TAC[CONTINUOUS_ON_SEQUENTIALLY;o_DEF]
2523 THEN REPEAT STRIP_TAC
2524 THEN MP_TAC (GEN_ALL SEQUENTIALLY_DIVH)
2525 THEN REWRITE_TAC[o_DEF]
2527 THEN POP_ASSUM MATCH_MP_TAC
2528 THEN MRESAL_TAC (GEN_ALL LIM_VECMAT)[`(\n:num. vecmats ((x:num->real^(M,3)finite_product) n))`;`vecmats(a':real^(M,3)finite_product)`][MATVEC_VECMATS_ID;ETA_AX]
2529 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`1`[ARITH_RULE`1<=1/\ 1<=3`]
2530 THEN MRESAL1_TAC th`2`[ARITH_RULE`1<=2/\ 2<=3`]
2531 THEN MRESAL1_TAC th`3`[ARITH_RULE`1<=3/\ 3<=3`])
2532 THEN REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
2533 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
2534 THEN MRESA1_TAC th `a':real^(M,3)finite_product`
2537 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x (n:num)):real^(M,3)finite_product`)
2543 SIMP_TAC[o_DEF;LIFT_CMUL;FINITE_NUMSEG]
2544 THEN REPEAT STRIP_TAC
2545 THEN MATCH_MP_TAC CONTINUOUS_ON_MUL
2549 REWRITE_TAC[rho;o_DEF;LIFT_ADD]
2550 THEN MATCH_MP_TAC CONTINUOUS_ON_ADD
2551 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_CMUL;LIFT_SUB;]
2552 THEN MATCH_MP_TAC CONTINUOUS_ON_SUB
2553 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_CMUL;LIFT_SUB;]
2554 THEN MATCH_MP_TAC CONTINUOUS_ON_CMUL
2555 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_ADD;ly;interp;REAL_ARITH`a*b=b*a`;LIFT_CMUL]
2556 THEN MATCH_MP_TAC CONTINUOUS_ON_ADD
2557 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_CMUL;LIFT_SUB;]
2558 THEN MATCH_MP_TAC CONTINUOUS_ON_CMUL
2559 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_ADD;ly;interp;REAL_ARITH`a*b=b*a`;LIFT_CMUL]
2560 THEN MATCH_MP_TAC CONTINUOUS_ON_SUB
2561 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_CMUL;LIFT_SUB;]
2562 THEN MATCH_MP_TAC CONTINUOUS_ON_LIFT_NORM_COMPOSE
2563 THEN MATCH_MP_TAC CONTINUOUS_ON_ROW
2564 THEN ASM_REWRITE_TAC[IN_NUMSEG]
2567 REWRITE_TAC[CONTINUOUS_ON_SEQUENTIALLY;o_DEF]
2568 THEN REPEAT STRIP_TAC
2569 THEN MP_TAC (GEN_ALL SEQUENTIALLY_DIVH)
2570 THEN REWRITE_TAC[o_DEF]
2572 THEN POP_ASSUM MATCH_MP_TAC
2573 THEN MRESAL_TAC (GEN_ALL LIM_VECMAT)[`(\n:num. vecmats ((x:num->real^(M,3)finite_product) n))`;`vecmats(a':real^(M,3)finite_product)`][MATVEC_VECMATS_ID;ETA_AX]
2574 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`1`[ARITH_RULE`1<=1/\ 1<=3`]
2575 THEN MRESAL1_TAC th`2`[ARITH_RULE`1<=2/\ 2<=3`]
2576 THEN MRESAL1_TAC th`3`[ARITH_RULE`1<=3/\ 3<=3`])
2577 THEN REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
2578 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
2579 THEN MRESA1_TAC th `a':real^(M,3)finite_product`
2581 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2582 THEN ASM_REWRITE_TAC[]
2584 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x (n:num)):real^(M,3)finite_product`)
2585 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2586 THEN ASM_REWRITE_TAC[]
2592 SIMP_TAC[o_DEF;LIFT_CMUL;FINITE_NUMSEG]
2593 THEN REPEAT STRIP_TAC
2594 THEN MATCH_MP_TAC CONTINUOUS_ON_MUL
2598 REWRITE_TAC[rho;o_DEF;LIFT_ADD]
2599 THEN MATCH_MP_TAC CONTINUOUS_ON_ADD
2600 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_CMUL;LIFT_SUB;]
2601 THEN MATCH_MP_TAC CONTINUOUS_ON_SUB
2602 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_CMUL;LIFT_SUB;]
2603 THEN MATCH_MP_TAC CONTINUOUS_ON_CMUL
2604 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_ADD;ly;interp;REAL_ARITH`a*b=b*a`;LIFT_CMUL]
2605 THEN MATCH_MP_TAC CONTINUOUS_ON_ADD
2606 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_CMUL;LIFT_SUB;]
2607 THEN MATCH_MP_TAC CONTINUOUS_ON_CMUL
2608 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_ADD;ly;interp;REAL_ARITH`a*b=b*a`;LIFT_CMUL]
2609 THEN MATCH_MP_TAC CONTINUOUS_ON_SUB
2610 THEN REWRITE_TAC[CONTINUOUS_ON_CONST;LIFT_CMUL;LIFT_SUB;]
2611 THEN MATCH_MP_TAC CONTINUOUS_ON_LIFT_NORM_COMPOSE
2612 THEN MATCH_MP_TAC CONTINUOUS_ON_ROW
2613 THEN ASM_REWRITE_TAC[IN_NUMSEG]
2616 REWRITE_TAC[CONTINUOUS_ON_SEQUENTIALLY;o_DEF]
2617 THEN REPEAT STRIP_TAC
2618 THEN MP_TAC (GEN_ALL SEQUENTIALLY_DIVH)
2619 THEN REWRITE_TAC[o_DEF]
2621 THEN POP_ASSUM MATCH_MP_TAC
2622 THEN MRESAL_TAC (GEN_ALL LIM_VECMAT)[`(\n:num. vecmats ((x:num->real^(M,3)finite_product) n))`;`vecmats(a':real^(M,3)finite_product)`][MATVEC_VECMATS_ID;ETA_AX]
2623 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`1`[ARITH_RULE`1<=1/\ 1<=3`]
2624 THEN MRESAL1_TAC th`2`[ARITH_RULE`1<=2/\ 2<=3`]
2625 THEN MRESAL1_TAC th`3`[ARITH_RULE`1<=3/\ 3<=3`])
2626 THEN REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
2627 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
2628 THEN MRESA1_TAC th `a':real^(M,3)finite_product`
2630 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2631 THEN ASM_REWRITE_TAC[]
2633 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x (n:num)):real^(M,3)finite_product`)
2634 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2635 THEN ASM_REWRITE_TAC[];
2642 let TAUSTAR_EQ_TAU_STAR_3=prove_by_refinement(
2643 `(let upperbd = &6 in
2644 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
2645 else (if {i MOD k,j MOD k}={0,1} then p
2646 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
2647 mk_unadorned_v39 3 (d_tame 3) (cs_adj 3 (&2) (&2 * h0)) (cs_adj 3 (&2 * h0) upperbd))=s
2649 ==> taustar_v39 s vv = tau3 (vv 1) (vv 2) (vv 0)`
2654 THEN SUBGOAL_THEN`scs_k_v39 s =3` ASSUME_TAC;
2657 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;];
2661 THEN ASM_REWRITE_TAC[taustar_v39;tau_star]
2662 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;]
2663 THEN MRESA_TAC dsv_J_empty[`s:scs_v39`;`vv:num->real^3`]
2664 THEN POP_ASSUM MP_TAC
2666 THEN REWRITE_TAC[scs_J_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;d_tame]
2668 THEN REWRITE_TAC[tau3;REAL_ARITH`A- &0=A`]
2681 let XWITCCN_CASE_3=prove_by_refinement(
2682 `(let upperbd = &6 in
2683 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
2684 else (if {i MOD k,j MOD k}={0,1} then p
2685 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
2686 mk_unadorned_v39 3 (d_tame 3) (cs_adj 3 (&2) (&2 * h0)) (cs_adj 3 (&2 * h0) upperbd))=s
2687 /\ vv IN BBs_v39 s /\
2688 taustar_v39 s vv < &0
2689 /\ scs_k_v39 s= dimindex(:M)
2690 ==> ~(BBprime_v39 s = {})`
2695 THEN MP_TAC SCS_3_IS_TRI_STABLE
2697 THEN MP_TAC NOT_EMPTY_CASE_3
2699 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?a. a IN A`]
2700 THEN SUBGOAL_THEN`scs_k_v39 s =3` ASSUME_TAC;
2703 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;];
2706 REPLICATE_TAC 3 (POP_ASSUM MP_TAC)
2707 THEN REWRITE_TAC[th]
2709 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
2711 THEN REPEAT RESA_TAC)
2712 THEN MP_TAC IN_B_SY1_COLLINEAR_CASE_3
2714 THEN MRESAL_TAC (GEN_ALL HDPLYGY_CASE_3)[`scs_d_v39 s`;`(change_type_v2 (scs_J_v39 s) (scs_k_v39 s))`;`scs_k_v39 s`;`(change_type_v3 (scs_a_v39 s))`;` (change_type_v3 (scs_b_v39 s))`][ARITH_RULE`2<3`]
2715 THEN POP_ASSUM (fun th->
2717 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
2720 THEN REWRITE_TAC[BBprime_v39;IN]
2721 THEN ABBREV_TAC`( vv1 i =
2722 if i MOD scs_k_v39 s = 0 then row 3 v else
2723 if i MOD scs_k_v39 s = 1 then row 1 v else
2724 row 2 (v:real^3^M))`
2725 THEN EXISTS_TAC`vv1:num->real^3`
2728 ONCE_REWRITE_TAC[GSYM IN]
2729 THEN MATCH_MP_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_3)
2730 THEN EXISTS_TAC`x:real^(M,3)finite_product`
2731 THEN EXISTS_TAC`v:real^3^M`
2732 THEN ASM_REWRITE_TAC[]
2733 THEN POP_ASSUM MP_TAC
2736 SUBGOAL_THEN`vector [ vv1 1; (vv1:num->real^3) 2;vv1 0] = v:real^3^M`
2739 POP_ASSUM(fun th-> REWRITE_TAC[GSYM th])
2740 THEN ASM_REWRITE_TAC[ARITH_RULE`1 MOD 3=1/\ 2 MOD 3=2/\ 3 MOD 3=0/\ 0 MOD 3=0 /\ ~(1=0)/\ ~(2=0)/\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2)`;]
2741 THEN ONCE_REWRITE_TAC[CART_EQ]
2742 THEN ASM_REWRITE_TAC[ARITH_RULE`1<=i/\ i<=3 <=>i=1\/ i=2\/ i=3`]
2743 THEN REPEAT RESA_TAC
2745 ASM_SIMP_TAC[row;vector; LAMBDA_BETA; DIMINDEX_3; LENGTH; ARITH] THEN
2746 REWRITE_TAC[num_CONV `3`;num_CONV `2`; num_CONV `1`; EL; HD; TL;]
2747 THEN ASM_SIMP_TAC[CART_EQ; DIMINDEX_3; FORALL_3; VEC_COMPONENT; VECTOR_3; ARITH;row;LAMBDA_BETA];
2752 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[GSYM IN]
2753 THEN REPEAT STRIP_TAC
2754 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_3)
2755 [`x:real^(M,3)finite_product`;`v:real^3^M`;`vv1:num->real^3`;`s:scs_v39`]
2756 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_3)[`s:scs_v39`;`vv1:num->real^3`;]
2757 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_3)
2758 [`s:scs_v39`;`ww:num->real^3`;]
2759 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_CASE_3)[`ww:num->real^3`;`vector [ww 1; ww 2; ww 0]:real^3^M`;`matvec(vector [ww 1; ww 2; ww 0]:real^3^M):real^(M,3)finite_product`;`s:scs_v39`;]
2760 THEN MRESAL_TAC VECTOR_3_3[`(vv1:num->real^3) 1`;`(vv1:num->real^3) 2`;`(vv1:num->real^3) 0`;][ARITH_RULE`1<=3/\ 2<=3/\ 3<=3`]
2761 THEN MRESAL_TAC VECTOR_3_3[`(ww:num->real^3) 1`;`(ww:num->real^3) 2`;`(ww:num->real^3) 0`;][ARITH_RULE`1<=3/\ 2<=3/\ 3<=3`]
2762 THEN REPLICATE_TAC 13 (POP_ASSUM MP_TAC)
2763 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2764 THEN MRESAL1_TAC th `matvec(vector [ww 1; ww 2; ww 0]:real^3^M):real^(M,3)finite_product`[Dih2k_hypermap.VECMATS_MATVEC_ID]);
2766 MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_3)
2767 [`x:real^(M,3)finite_product`;`v:real^3^M`;`vv1:num->real^3`;`s:scs_v39`]
2768 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_3)[`s:scs_v39`;`vv1:num->real^3`;]
2769 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_3)
2770 [`s:scs_v39`;`vv:num->real^3`;]
2771 THEN REPLICATE_TAC 14 (POP_ASSUM MP_TAC)
2772 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC THEN MP_TAC th)
2773 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_CASE_3)[`vv:num->real^3`;`vector [vv 1; vv 2; vv 0]:real^3^M`;`matvec(vector [vv 1; vv 2; vv 0]:real^3^M):real^(M,3)finite_product`;`s:scs_v39`;]
2774 THEN MRESAL_TAC VECTOR_3_3[`(vv1:num->real^3) 1`;`(vv1:num->real^3) 2`;`(vv1:num->real^3) 0`;][ARITH_RULE`1<=3/\ 2<=3/\ 3<=3`]
2775 THEN MRESAL_TAC VECTOR_3_3[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=3/\ 2<=3/\ 3<=3`]
2776 THEN REPLICATE_TAC 12 (POP_ASSUM MP_TAC)
2777 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2778 THEN MRESAL1_TAC th `matvec(vector [(vv:num->real^3) 1; vv 2; vv 0]:real^3^M):real^(M,3)finite_product`[Dih2k_hypermap.VECMATS_MATVEC_ID])
2779 THEN POP_ASSUM MP_TAC
2780 THEN POP_ASSUM MP_TAC
2788 let VECTOR_3_4=prove(`!x y z t. 1<= dimindex(:M)/\ 2<= dimindex(:M) /\ 3<= dimindex(:M)/\ 4<= dimindex(:M) ==> (row 1 (vector[x;y;z:real^3;t]:real^3^M)) = x
2789 /\ (row 2 (vector[x;y;z:real^3;t]:real^3^M)) = y
2790 /\ (row 3 (vector[x;y;z:real^3;t]:real^3^M)) = z
2791 /\ (row 4 (vector[x;y;z:real^3;t]:real^3^M)) = t
2794 THEN ASM_SIMP_TAC[row;vector; LAMBDA_BETA; DIMINDEX_3; LENGTH; ARITH] THEN
2795 REWRITE_TAC[num_CONV `3`;num_CONV `2`; num_CONV `1`; EL; HD; TL]
2796 THEN VECTOR_ARITH_TAC);;
2805 let PROVE_V_SY_EQ_TAC=
2808 THEN ASM_REWRITE_TAC[ARITH_RULE`1<= 1 /\ 1<= 4`]
2809 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 0`][ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 4 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
2810 /\ SUC 4 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0/\ ~(3=1)/\ ~(1=0)`]
2815 let PROVE_E_SY_EQ_TAC=
2818 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 0`][ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 4 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
2819 /\ SUC 4 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0/\ ~(3=1)/\ ~(1=0)/\ SUC 1=2/\ SUC 0=1 /\ SUC 2= 3/\ SUC 3=4 /\ SUC 4=5`;SET_RULE`(a:num)IN (:num)`]
2823 let PROVE_EQ_V_SY_TAC_4=
2827 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 0`][ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 4 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
2828 /\ SUC 4 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0/\ ~(3=1)/\ ~(1=0)`;SET_RULE`(a:num)IN (:num)`]
2833 let PROVE_F_SY_EQ_TAC=
2836 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 0`;`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`][ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 4 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
2837 /\ SUC 4 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0/\ ~(3=1)/\ ~(1=0)/\ SUC 1=2/\ SUC 0=1 /\ SUC 2= 3/\ SUC 3=4 /\ SUC 4=5`]
2840 let PROOF_E_EQ_IMAGE_4=
2842 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`x':num`;th;`4`][ARITH_RULE`~(4=0)/\ 4 MOD 4=0/\ SUC 0 MOD 4=1/\ 1 MOD 4=1/\ 2 MOD 4=2 /\ 3 MOD 4=3`]
2844 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 4 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
2845 /\ SUC 4 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0/\ ~(3=1)/\ ~(1=0)/\ SUC 1=2/\ SUC 0=1 /\ SUC 2= 3/\ SUC 3=4/\ 1<=1/\ 1<=2/\ 1<=3`];;
2855 let V_E_FF_CASE_4=prove_by_refinement(
2856 `(s=let upperbd = &6 in
2857 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
2858 else (if {i MOD k,j MOD k}={0,1} then p
2859 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
2860 mk_unadorned_v39 4 (d_tame 4) (cs_adj 4 (&2) (&2 * h0)) (cs_adj 4 (&2 * h0) upperbd))
2862 /\ scs_k_v39 s= dimindex(:M)
2863 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 0]:real^3^M= v
2864 /\ matvec (v:real^3^M) =a
2866 V_SY (v:real^3^M)=IMAGE vv (:num)/\
2867 E_SY (v:real^3^M)=IMAGE (\i. {vv i, vv (SUC i)}) (:num)/\
2868 F_SY (v:real^3^M)=IMAGE (\i. vv i,vv (SUC i)) (:num)`,
2873 THEN REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
2874 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39]
2875 THEN REPEAT STRIP_TAC;
2877 REWRITE_TAC[V_SY;rows]
2878 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
2879 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 4)<=> (i=1\/ i=2\/ i=3 \/ i=4)`] THEN ASSUME_TAC (SYM th))
2882 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
2888 PROVE_EQ_V_SY_TAC_4 `1`;
2889 PROVE_EQ_V_SY_TAC_4 `2`;
2890 PROVE_EQ_V_SY_TAC_4 `3`;
2891 PROVE_EQ_V_SY_TAC_4 `0`];
2894 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4)<=> (1<= i /\ i<= 4)`]
2895 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`4`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`]
2896 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num`)
2897 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
2898 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
2899 THEN MP_TAC(ARITH_RULE`x' MOD 4 < 4==> x' MOD 4 =0 \/ x' MOD 4 = 1\/ x' MOD 4 = 2 \/ x' MOD 4 =3`)
2902 PROVE_V_SY_EQ_TAC `4`;
2903 PROVE_V_SY_EQ_TAC `1`;
2904 PROVE_V_SY_EQ_TAC `2`;
2905 PROVE_V_SY_EQ_TAC `3`];
2907 REWRITE_TAC[E_SY;rows]
2908 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
2909 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 4)<=> (i=1\/ i=2\/ i=3 \/ i=4)`] THEN ASSUME_TAC (SYM th))
2910 THEN REPEAT STRIP_TAC
2911 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
2913 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
2917 THEN ASM_REWRITE_TAC[]
2919 PROVE_E_SY_EQ_TAC `1`;
2920 PROVE_E_SY_EQ_TAC `2`;
2922 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 4 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
2923 /\ SUC 4 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0/\ ~(3=1)/\ ~(1=0)/\ SUC 1=2/\ SUC 0=1 /\ SUC 2= 3/\ SUC 3=4`]
2924 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`4`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`]
2925 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`SUC 3`[ARITH_RULE`SUC 3 MOD 4=0/\ SUC 3=4`])
2926 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2928 PROVE_E_SY_EQ_TAC `0`];
2931 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4)<=> (1<= i /\ i<= 4)`]
2932 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`4`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`]
2933 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num` THEN MRESA1_TAC th`SUC x':num`)
2934 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
2935 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
2936 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
2937 THEN MP_TAC(ARITH_RULE`x' MOD 4 < 4==> x' MOD 4 =0 \/ x' MOD 4 = 1\/ x' MOD 4 = 2 \/ x' MOD 4 =3`)
2940 PROOF_E_EQ_IMAGE_4 `4`;
2941 PROOF_E_EQ_IMAGE_4 `1`;
2942 PROOF_E_EQ_IMAGE_4 `2`;
2943 PROOF_E_EQ_IMAGE_4 `3`];
2945 REWRITE_TAC[F_SY;rows]
2946 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
2947 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 4)<=> (i=1\/ i=2\/ i=3 \/ i=4)`] THEN ASSUME_TAC (SYM th))
2948 THEN REPEAT STRIP_TAC
2949 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
2951 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
2955 THEN ASM_REWRITE_TAC[]
2957 PROVE_E_SY_EQ_TAC `1`;
2958 PROVE_E_SY_EQ_TAC `2`;
2960 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 4 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
2961 /\ SUC 4 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0/\ ~(3=1)/\ ~(1=0)/\ SUC 1=2/\ SUC 0=1 /\ SUC 2= 3/\ SUC 3=4`]
2962 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`4`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`]
2963 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`SUC 3`[ARITH_RULE`SUC 3 MOD 4=0/\ SUC 3=4`])
2964 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2966 PROVE_E_SY_EQ_TAC `0`];
2969 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4)<=> (1<= i /\ i<= 4)`]
2970 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`4`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`]
2971 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num` THEN MRESA1_TAC th`SUC x':num`)
2972 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
2973 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
2974 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
2975 THEN MP_TAC(ARITH_RULE`x' MOD 4 < 4==> x' MOD 4 =0 \/ x' MOD 4 = 1\/ x' MOD 4 = 2 \/ x' MOD 4 =3`)
2978 PROOF_E_EQ_IMAGE_4 `4`;
2979 PROOF_E_EQ_IMAGE_4 `1`;
2980 PROOF_E_EQ_IMAGE_4 `2`;
2981 PROOF_E_EQ_IMAGE_4 `3`];
2990 let IN_BALL_ANNULUS_ROW_TAC_4=
2993 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 0`][ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4`]
2994 THEN MATCH_MP_TAC(SET_RULE`
2995 vv th IN IMAGE vv (:num) /\ IMAGE vv (:num) SUBSET ball_annulus
2996 ==> vv th IN ball_annulus`)
2997 THEN ASM_REWRITE_TAC[IMAGE;IN_ELIM_THM]
2999 THEN REWRITE_TAC[SET_RULE`(a:num)IN (:num)`]
3004 let INEQUALITY_PROOF_TAC40=
3005 fun (so:term) (so1:term)->
3006 ASM_SIMP_TAC[change_type_v3]
3007 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 4 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
3008 /\ SUC 4 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0/\ ~(3=1)/\ ~(1=0)`]
3009 THEN REPLICATE_TAC 12 (POP_ASSUM MP_TAC)
3010 THEN POP_ASSUM(fun th-> MRESAL_TAC th[so;so1][dist;ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 0 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
3011 /\ SUC 0 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0 /\ ~(2=0)/\ ~(3=0)/\ ~(2=3)/\ ~(3=1)/\ ~(1=0)`]);;
3016 let INEQUALITY_PROOF_TAC4=
3018 MP_TAC(ARITH_RULE`1<= i /\ i<= 4==> i=1\/ i=2\/ i=3\/ i=4`)
3021 INEQUALITY_PROOF_TAC40 `1` th;
3022 INEQUALITY_PROOF_TAC40 `2` th;
3023 INEQUALITY_PROOF_TAC40 `3` th;
3024 INEQUALITY_PROOF_TAC40 `0` th];;
3030 let IN_NOT_EMPTY_CASE_4=prove_by_refinement(
3031 `(s=let upperbd = &6 in
3032 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
3033 else (if {i MOD k,j MOD k}={0,1} then p
3034 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
3035 mk_unadorned_v39 4 (d_tame 4) (cs_adj 4 (&2) (&2 * h0)) (cs_adj 4 (&2 * h0) upperbd))
3037 /\ scs_k_v39 s= dimindex(:M)
3038 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 0]:real^3^M= v
3039 /\ matvec (v:real^3^M) =a
3041 a IN {matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\ CONDITION2_SY v }`,
3045 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;IN_ELIM_THM;CONDITION1_SY;CONDITION2_SY]
3046 THEN REPEAT STRIP_TAC
3047 THEN POP_ASSUM MP_TAC
3048 THEN POP_ASSUM MP_TAC
3049 THEN POP_ASSUM MP_TAC
3050 THEN POP_ASSUM MP_TAC
3051 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`~(4<=3)`;mk_unadorned_v39;CS_ADJ]
3052 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[IN]
3053 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`]
3054 THEN REPEAT STRIP_TAC
3055 THEN ASM_REWRITE_TAC[]
3056 THEN EXISTS_TAC`v:real^3^M`
3061 REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
3062 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 4)<=> (i=1\/ i=2\/ i=3 \/ i=4)`] THEN ASSUME_TAC (SYM th))
3063 THEN REPEAT STRIP_TAC
3065 IN_BALL_ANNULUS_ROW_TAC_4 `1`;
3066 IN_BALL_ANNULUS_ROW_TAC_4 `2`;
3067 IN_BALL_ANNULUS_ROW_TAC_4 `3`;
3068 IN_BALL_ANNULUS_ROW_TAC_4 `0`];
3072 REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
3073 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 4)<=> (i=1\/ i=2\/ i=3 \/ i=4)`] THEN ASSUME_TAC (SYM th))
3074 THEN REPEAT DISCH_TAC
3078 INEQUALITY_PROOF_TAC4 `1`;
3079 INEQUALITY_PROOF_TAC4 `2`;
3080 INEQUALITY_PROOF_TAC4 `3`;
3081 INEQUALITY_PROOF_TAC4 `0`];
3083 MP_TAC V_E_FF_CASE_4
3084 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;CS_ADJ]
3085 THEN POP_ASSUM MP_TAC
3086 THEN POP_ASSUM MP_TAC
3087 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
3088 THEN REPEAT RESA_TAC;
3096 let NOT_EMPTY_CASE_4=prove_by_refinement(
3097 `(s=let upperbd = &6 in
3098 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
3099 else (if {i MOD k,j MOD k}={0,1} then p
3100 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
3101 mk_unadorned_v39 4 (d_tame 4) (cs_adj 4 (&2) (&2 * h0)) (cs_adj 4 (&2 * h0) upperbd))
3103 /\ scs_k_v39 s= dimindex(:M)
3105 ~({matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\ CONDITION2_SY v }={})`
3109 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;]
3111 THEN ABBREV_TAC`v=vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 0]:real^3^M`
3112 THEN ABBREV_TAC`a=matvec (v:real^3^M) `
3113 THEN EXISTS_TAC`a:real^(M,3)finite_product`
3114 THEN MATCH_MP_TAC IN_NOT_EMPTY_CASE_4
3115 THEN ASM_REWRITE_TAC[]
3122 let TAUSTAR_EQ_TAU_STAR_4=prove_by_refinement(
3123 `(let upperbd = &6 in
3124 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
3125 else (if {i MOD k,j MOD k}={0,1} then p
3126 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
3127 mk_unadorned_v39 4 (d_tame 4) (cs_adj 4 (&2) (&2 * h0)) (cs_adj 4 (&2 * h0) upperbd))=s
3129 /\ scs_k_v39 s= dimindex(:M)
3130 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 0]:real^3^M= v
3131 /\ matvec (v:real^3^M) =a
3132 /\ stable_sy((scs_k_v39 s),(scs_d_v39 s),(0..scs_k_v39 s - 1),
3133 (change_type_v3 (scs_a_v39 s)),
3134 (change_type_v3 (scs_b_v39 s)),
3135 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)),
3136 (\i. (1 + i) MOD scs_k_v39 s))=s1
3137 ==> taustar_v39 s vv = tau_star s1 a`,
3141 THEN MP_TAC V_E_FF_CASE_4
3143 THEN SUBGOAL_THEN`scs_k_v39 s =4` ASSUME_TAC;
3146 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;];
3150 THEN ASM_REWRITE_TAC[taustar_v39;tau_star]
3151 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;]
3152 THEN ASM_SIMP_TAC[dsv_J_empty]
3153 THEN MP_TAC SCS_4_IS_TRI_STABLE
3154 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF]
3156 THEN MRESAL_TAC stable_sy_explicit[`(scs_k_v39 s)`;`(scs_d_v39 s)`;`(0..scs_k_v39 s - 1)`;`
3157 (change_type_v3 (scs_a_v39 s))`;`
3158 (change_type_v3 (scs_b_v39 s))`;`
3159 (change_type_v2 (scs_J_v39 s)(scs_k_v39 s))`;`
3160 (\i. (1 + i) MOD scs_k_v39 s)`][LET_DEF;LET_END_DEF;d_fun]
3161 THEN SUBGOAL_THEN`J1_SY (s1:stable_sy)={}` ASSUME_TAC;
3163 ASM_REWRITE_TAC[J1_SY;]
3165 THEN REWRITE_TAC[scs_J_v39_explicit;LET_DEF;LET_END_DEF;mk_unadorned_v39;change_type_v2;SET_RULE`a IN {{i, j} | F}<=> F`]
3168 ASM_REWRITE_TAC[SUM_CLAUSES;REAL_ARITH`a* &0= &0 /\a + &0=a`]
3170 THEN REWRITE_TAC[MATVEC_VECMATS_ID;VECMATS_MATVEC_ID]
3171 THEN ASM_REWRITE_TAC[REAL_ARITH`A-B=A-C<=>B=C`]
3172 THEN MATCH_MP_TAC dsv_J_empty
3174 THEN REWRITE_TAC[scs_J_v39_explicit;LET_DEF;LET_END_DEF;mk_unadorned_v39;change_type_v2;SET_RULE`a IN {{i, j} | F}<=> F`]
3195 let VV_IN_BALL_ANNULUS_TAC_4=
3197 REPLICATE_TAC 8 (POP_ASSUM MP_TAC)
3198 THEN POP_ASSUM(fun th-> MRESAL1_TAC th so [ARITH_RULE`1<=1 /\ 1<=2 /\1<=3 /\ 1<= 4/\ 1<=4 /\ 2<=4/\ 3<=4/\ 4<=4/\ ~(1=0)/\ ~(2=0) /\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2) `] )
3207 let SCS_A_B__EQ_MOD_4=prove(
3208 `s=(let upperbd = &6 in
3209 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
3210 else (if {i MOD k,j MOD k}={0,1} then p
3211 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
3212 mk_unadorned_v39 4 (d_tame 4) (cs_adj 4 (&2) (&2 * h0)) (cs_adj 4 (&2 * h0) upperbd))
3214 !i j. scs_a_v39 s i j = scs_a_v39 s (i MOD 4) (j MOD 4)/\
3215 scs_b_v39 s i j = scs_b_v39 s (i MOD 4) (j MOD 4)`,
3217 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;CS_ADJ]
3218 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`4`][ARITH_RULE`~(4=0)`]
3219 THEN MRESAL_TAC MOD_MOD_REFL[`j:num`;`4`][ARITH_RULE`~(4=0)`]
3220 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`4`][ARITH_RULE`~(4=0) /\ 1 MOD 4=1`;ADD1]
3221 THEN MRESAL_TAC MOD_ADD_MOD[`i:num`;`1:num`;`4`][ARITH_RULE`~(4=0) /\ 1 MOD 4=1`;ADD1]);;
3227 let PROVE_INEQUALITY_TAC_40=
3228 fun (so:term) (so1:term)->
3229 REPLICATE_TAC 7(POP_ASSUM MP_TAC)
3230 THEN POP_ASSUM(fun th-> MRESAL_TAC th[so;so1][ARITH_RULE`1<=4 /\ 4<=4/\ 1<=1 /\ 1<=4/\ 1<=2 /\ 2<=4/\1<=3 /\ 3<=4`])
3231 THEN POP_ASSUM( fun th->
3232 POP_ASSUM( fun th1->
3234 THEN MP_TAC th THEN MP_TAC th1
3235 THEN POP_ASSUM(fun th2-> ONCE_REWRITE_TAC[th2]
3236 THEN POP_ASSUM(fun th3-> MRESAL1_TAC th3`4`[ARITH_RULE`4 MOD 4=0`]
3237 THEN MRESAL1_TAC th3`1`[ARITH_RULE`1 MOD 4=1/\ ~(1=0)`]
3238 THEN MRESAL1_TAC th3`2`[ARITH_RULE`2 MOD 4=2/\ ~(2=0)/\ ~(2=1)`]
3239 THEN MRESAL1_TAC th3`3`[ARITH_RULE`3 MOD 4=3/\ ~(3=0)/\ ~(3=1)/\ ~(3=2)`])
3240 THEN MRESAL1_TAC th2`4`[ARITH_RULE`4 MOD 4=0`])
3242 THEN MP_TAC SCS_A_B__EQ_MOD_4
3243 THEN ASM_REWRITE_TAC[]
3245 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
3246 THEN ASM_REWRITE_TAC[ARITH_RULE`4 MOD 4=0/\ 1 MOD 4=1/\ 2 MOD 4=2 /\ 3 MOD 4=3`]
3252 let PROVE_INEQUALITY_TAC_4=
3254 MP_TAC(ARITH_RULE`(j MOD 4<4)==> (j MOD 4=0) \/ (j MOD 4=1) \/ (j MOD 4=2)\/ (j MOD 4=3)`)
3257 PROVE_INEQUALITY_TAC_40 th `4`;
3258 PROVE_INEQUALITY_TAC_40 th `1`;
3259 PROVE_INEQUALITY_TAC_40 th `2`;
3260 PROVE_INEQUALITY_TAC_40 th `3`];;
3264 let V_SY_EQ_IMAGE_VV_TAC4=
3268 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`;ARITH_RULE`1 MOD 4=1 /\ ~(1=0) /\ 2 MOD 4=2 /\ ~(2=0)/\ ~(2=1)/\ 3 MOD 4=3 /\ ~(3=0)/\ ~(3=1)/\ ~(3=2)/\ 4 MOD 4=0`];;
3272 let PROVE_E_SY_EQ_MOD_TAC_4=
3275 THEN ASM_REWRITE_TAC[ARITH_RULE`~(3=0)/\ ~(3=1)/\ ~(3=2)/\ ~(2=0)/\ ~(2=1)/\ ~(1=0)`]
3280 let PROVE_E_SY_EQ_IMAGE_VV_4=
3283 THEN ASM_REWRITE_TAC[ARITH_RULE`~(1=0)`]
3284 THEN MRESAL_TAC MOD_ADD_MOD[`x':num`;`1:num`;`4`][ARITH_RULE`~(4=0) /\ 1 MOD 4=1/\ 1<=4/\ 4<=4/\ 0+1=1`;ADD1]
3285 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`~(1=0)/\ 4 MOD 4=0/\ 0+1=1/\ 1<=1 /\ 1+1=2/\ 2 MOD 4=2/\ ~(2=0)/\ ~(2=1)/\ 2+1=3/\ 3 MOD 4=3
3286 /\ ~(3=0)/\ ~(3=1)/\ ~(3=2)/\1<=2/\ 2<=4
3287 /\ 1<=3/\ 3<=4/\ 3+1=4`])
3292 let PROOF_E_EQ_TAC_4=
3295 THEN ASM_REWRITE_TAC[ARITH_RULE`~(1=0)/\ 1 MOD 4=1/\ SUC 1=2/\ 2 MOD 4=2/\ ~(2=0)/\ ~(2=1)/\ SUC 2=3 /\ 3 MOD 4=3/\ ~(3=0) /\ ~(3=1)/\ ~(3=2)/\ SUC 3=4/\ 4 MOD 4=0/\ SUC 0=1 /\ SUC 4=5/\ 5 MOD 4=1`;SET_RULE`(a:num) IN (:num)`]
3300 let IN_NOT_EMPTY_B1_SY_4=prove_by_refinement(
3301 `(let upperbd = &6 in
3302 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
3303 else (if {i MOD k,j MOD k}={0,1} then p
3304 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
3305 mk_unadorned_v39 4 (d_tame 4) (cs_adj 4 (&2) (&2 * h0)) (cs_adj 4 (&2 * h0) upperbd))=s/\
3306 scs_k_v39 s= dimindex(:M)/\
3307 matvec (v:real^3^M) =a/\
3308 (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\
3309 CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\
3312 if i MOD scs_k_v39 s = 0 then row 4 v else
3313 if i MOD scs_k_v39 s = 1 then row 1 v else
3314 if i MOD scs_k_v39 s = 2 then row 2 v else
3316 ==> vv IN BBs_v39 s`,
3319 REWRITE_TAC[CONDITION1_SY;CONDITION2_SY;change_type_v3]
3320 THEN REPEAT STRIP_TAC
3321 THEN SUBGOAL_THEN`scs_k_v39 s =4` ASSUME_TAC;
3325 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;];
3328 REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
3329 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
3331 THEN REPEAT STRIP_TAC)
3332 THEN POP_ASSUM MP_TAC
3333 THEN ASM_REWRITE_TAC[th;IN]
3335 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;]
3338 ASM_REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
3339 THEN REPEAT STRIP_TAC
3340 THEN ASM_REWRITE_TAC[]
3341 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
3342 THEN MP_TAC(ARITH_RULE`x' MOD 4<4 ==> x' MOD 4 = 0 \/ x' MOD 4 = 1 \/ x' MOD 4 = 2 \/ x' MOD 4 = 3`)
3345 VV_IN_BALL_ANNULUS_TAC_4 `4`;
3346 VV_IN_BALL_ANNULUS_TAC_4 `1`;
3347 VV_IN_BALL_ANNULUS_TAC_4 `2`;
3348 VV_IN_BALL_ANNULUS_TAC_4 `3`];
3353 ASM_REWRITE_TAC[periodic]
3355 THEN MRESAL_TAC MOD_EQ[`i+4:num`;`i:num`;`4:num`;`1`][ARITH_RULE`1*A=A`];
3361 THEN SUBGOAL_THEN`!i. (vv:num->real^3) i= vv (i MOD 4)` ASSUME_TAC;
3363 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
3365 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`4`][ARITH_RULE`~(4=0)`];
3369 THEN POP_ASSUM MP_TAC
3370 THEN MRESAL_TAC DIVISION[`i:num`;`4`][ARITH_RULE`~(4=0)`]
3371 THEN MRESAL_TAC DIVISION[`j:num`;`4`][ARITH_RULE`~(4=0)`]
3372 THEN MP_TAC(ARITH_RULE`(i MOD 4<4)==> (i MOD 4=0) \/ (i MOD 4=1) \/ (i MOD 4=2)\/ (i MOD 4=3)`)
3375 PROVE_INEQUALITY_TAC_4 `4`;
3376 PROVE_INEQUALITY_TAC_4 `1`;
3377 PROVE_INEQUALITY_TAC_4 `2`;
3378 PROVE_INEQUALITY_TAC_4 `3`];
3381 THEN ASM_REWRITE_TAC[ARITH_RULE`~(4<=3)`]
3383 THEN SUBGOAL_THEN`V_SY (v:real^3^M) = IMAGE vv (:num)`ASSUME_TAC;
3386 ASM_REWRITE_TAC[V_SY;rows;IMAGE;EXTENSION;IN_ELIM_THM]
3390 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
3393 V_SY_EQ_IMAGE_VV_TAC4 `1`;
3394 V_SY_EQ_IMAGE_VV_TAC4 `2`;
3395 V_SY_EQ_IMAGE_VV_TAC4 `3`;
3396 V_SY_EQ_IMAGE_VV_TAC4 `4`];
3399 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
3400 THEN MP_TAC(ARITH_RULE`(x' MOD 4<4)==> (x' MOD 4=0) \/ (x' MOD 4=1) \/ (x' MOD 4=2)\/ (x' MOD 4=3)`)
3403 PROVE_E_SY_EQ_MOD_TAC_4 `4`;
3404 PROVE_E_SY_EQ_MOD_TAC_4 `1`;
3405 PROVE_E_SY_EQ_MOD_TAC_4 `2`;
3406 PROVE_E_SY_EQ_MOD_TAC_4 `3`];
3411 SUBGOAL_THEN`E_SY (v:real^3^M) = IMAGE (\i. {vv i, vv (SUC i)}) (:num)`ASSUME_TAC;
3414 ASM_REWRITE_TAC[E_SY;rows;IMAGE;]
3415 THEN ONCE_REWRITE_TAC[EXTENSION;]
3416 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
3421 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
3424 PROOF_E_EQ_TAC_4`1`;
3425 PROOF_E_EQ_TAC_4`2`;
3426 PROOF_E_EQ_TAC_4`3`;
3427 PROOF_E_EQ_TAC_4`4`];
3430 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
3431 THEN MP_TAC(ARITH_RULE`(x' MOD 4<4)==> (x' MOD 4=0) \/ (x' MOD 4=1) \/ (x' MOD 4=2)\/ (x' MOD 4=3)`)
3434 PROVE_E_SY_EQ_IMAGE_VV_4 `4`;
3435 PROVE_E_SY_EQ_IMAGE_VV_4 `1`;
3436 PROVE_E_SY_EQ_IMAGE_VV_4 `2`;
3437 PROVE_E_SY_EQ_IMAGE_VV_4 `3`];
3439 SUBGOAL_THEN`F_SY (v:real^3^M) = IMAGE (\i. (vv i, vv (SUC i))) (:num)`ASSUME_TAC;
3442 ASM_REWRITE_TAC[F_SY;rows;IMAGE;]
3443 THEN ONCE_REWRITE_TAC[EXTENSION;]
3444 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
3448 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
3451 PROOF_E_EQ_TAC_4`1`;
3452 PROOF_E_EQ_TAC_4`2`;
3453 PROOF_E_EQ_TAC_4`3`;
3454 PROOF_E_EQ_TAC_4`4`];
3457 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
3458 THEN MP_TAC(ARITH_RULE`(x' MOD 4<4)==> (x' MOD 4=0) \/ (x' MOD 4=1) \/ (x' MOD 4=2)\/ (x' MOD 4=3)`)
3461 PROVE_E_SY_EQ_IMAGE_VV_4 `4`;
3462 PROVE_E_SY_EQ_IMAGE_VV_4 `1`;
3463 PROVE_E_SY_EQ_IMAGE_VV_4 `2`;
3464 PROVE_E_SY_EQ_IMAGE_VV_4 `3`];
3466 POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
3467 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
3468 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
3469 THEN ASM_REWRITE_TAC[];
3477 let XWITCCN_CASE_4=prove_by_refinement(
3478 `(let upperbd = &6 in
3479 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
3480 else (if {i MOD k,j MOD k}={0,1} then p
3481 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
3482 mk_unadorned_v39 4 (d_tame 4) (cs_adj 4 (&2) (&2 * h0)) (cs_adj 4 (&2 * h0) upperbd))=s
3483 /\ vv IN BBs_v39 s /\
3484 taustar_v39 s vv < &0
3485 /\ scs_k_v39 s= dimindex(:M)
3486 ==> ~(BBprime_v39 s = {})`,
3491 THEN MP_TAC SCS_4_IS_TRI_STABLE
3493 THEN MP_TAC NOT_EMPTY_CASE_4
3495 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?a. a IN A`]
3496 THEN ABBREV_TAC`s1 =stable_sy((scs_k_v39 s),(scs_d_v39 s),(0..scs_k_v39 s - 1),
3497 (change_type_v3 (scs_a_v39 s)),
3498 (change_type_v3 (scs_b_v39 s)),
3499 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)),
3500 (\i. (1 + i) MOD scs_k_v39 s))`
3501 THEN MRESA_TAC stable_sy_explicit[`(scs_k_v39 s)`;`(scs_d_v39 s)`;`(0..scs_k_v39 s - 1)`;`
3502 (change_type_v3 (scs_a_v39 s))`;`
3503 (change_type_v3 (scs_b_v39 s))`;`
3504 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s))`;`
3505 (\i. (1 + i) MOD scs_k_v39 s)`]
3506 THEN SUBGOAL_THEN`scs_k_v39 s =4` ASSUME_TAC;
3509 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;];
3512 REPLICATE_TAC 11 (POP_ASSUM MP_TAC)
3513 THEN REWRITE_TAC[th]
3515 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
3517 THEN REPEAT RESA_TAC)
3518 THEN MRESAL_TAC (GEN_ALL HDPLYGY)[`(scs_k_v39 s)`;`s1:stable_sy`][k_sy;B_SY1;ARITH_RULE`2<4`;]
3519 THEN POP_ASSUM (fun th->
3521 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
3524 THEN REWRITE_TAC[BBprime_v39;IN]
3525 THEN ABBREV_TAC`( vv1 i =
3526 if i MOD scs_k_v39 s = 0 then row 4 v else
3527 if i MOD scs_k_v39 s = 1 then row 1 v else
3528 if i MOD scs_k_v39 s = 2 then row 2 v else
3529 row 3 (v:real^3^M))`
3530 THEN EXISTS_TAC`vv1:num->real^3`
3533 ONCE_REWRITE_TAC[GSYM IN]
3534 THEN MATCH_MP_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_4)
3535 THEN EXISTS_TAC`x:real^(M,3)finite_product`
3536 THEN EXISTS_TAC`v:real^3^M`
3537 THEN ASM_REWRITE_TAC[]
3538 THEN POP_ASSUM MP_TAC
3541 SUBGOAL_THEN`vector [ vv1 1; vv1 2; (vv1:num->real^3) 3;vv1 0] = v:real^3^M`
3544 POP_ASSUM(fun th-> REWRITE_TAC[GSYM th])
3545 THEN ASM_REWRITE_TAC[ARITH_RULE`1 MOD 4=1/\ 2 MOD 4=2/\ 3 MOD 4=3/\ 0 MOD 4=0 /\ ~(1=0)/\ ~(2=0)/\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2)`;]
3546 THEN ONCE_REWRITE_TAC[CART_EQ]
3547 THEN ASM_REWRITE_TAC[ARITH_RULE`1<=i/\ i<=4 <=>i=1\/ i=2\/ i=3\/ i=4`]
3548 THEN REPEAT RESA_TAC
3550 ASM_SIMP_TAC[row;vector; LAMBDA_BETA; DIMINDEX_3; LENGTH; ARITH] THEN
3551 REWRITE_TAC[num_CONV `3`;num_CONV `2`; num_CONV `1`; EL; HD; TL;]
3552 THEN ASM_SIMP_TAC[CART_EQ; DIMINDEX_3; FORALL_3; VEC_COMPONENT; VECTOR_3; ARITH;row;LAMBDA_BETA];
3557 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[GSYM IN]
3558 THEN REPEAT STRIP_TAC
3559 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_4)
3560 [`x:real^(M,3)finite_product`;`v:real^3^M`;`vv1:num->real^3`;`s:scs_v39`]
3561 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_4)[`v:real^3^M`;`s:scs_v39`;`vv1:num->real^3`;`s1:stable_sy`;`x:real^(M,3)finite_product`]
3562 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_4)
3563 [`vector [ww 1; ww 2; ww 3; ww 0]:real^3^M`;`s:scs_v39`;`ww:num->real^3`;`s1:stable_sy`;`matvec(vector [ww 1; ww 2; ww 3; ww 0]:real^3^M):real^(M,3)finite_product`;]
3564 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_CASE_4)[`ww:num->real^3`;`vector [ww 1; ww 2; ww 3; ww 0]:real^3^M`;`matvec(vector [ww 1; ww 2; ww 3; ww 0]:real^3^M):real^(M,3)finite_product`;`s:scs_v39`;]
3565 THEN REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
3566 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3567 THEN MRESA1_TAC th `matvec(vector [ww 1; ww 2; ww 3; ww 0]:real^3^M):real^(M,3)finite_product`);
3569 MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_4)
3570 [`x:real^(M,3)finite_product`;`v:real^3^M`;`vv1:num->real^3`;`s:scs_v39`]
3571 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_4)[`v:real^3^M`;`s:scs_v39`;`vv1:num->real^3`;`s1:stable_sy`;`x:real^(M,3)finite_product`]
3572 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_4)
3573 [`vector [vv 1; vv 2; vv 3; vv 0]:real^3^M`;`s:scs_v39`;`vv:num->real^3`;`s1:stable_sy`;`matvec(vector [vv 1; vv 2; vv 3; vv 0]:real^3^M):real^(M,3)finite_product`;]
3574 THEN REPLICATE_TAC 23 (POP_ASSUM MP_TAC)
3575 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC THEN MP_TAC th)
3576 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_CASE_4)[`vv:num->real^3`;`vector [vv 1; vv 2; vv 3; vv 0]:real^3^M`;`matvec(vector [vv 1; vv 2; vv 3; vv 0]:real^3^M):real^(M,3)finite_product`;`s:scs_v39`;]
3577 THEN REPLICATE_TAC 6 (POP_ASSUM MP_TAC)
3578 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3579 THEN MRESA1_TAC th `matvec(vector [vv 1; vv 2; vv 3; vv 0]:real^3^M):real^(M,3)finite_product`)
3580 THEN POP_ASSUM MP_TAC
3581 THEN POP_ASSUM MP_TAC
3591 let VECTOR_3_5=prove(`!x y z t u. 1<= dimindex(:M)/\ 2<= dimindex(:M) /\ 3<= dimindex(:M)/\ 4<= dimindex(:M) /\ 5<= dimindex(:M) ==> (row 1 (vector[x;y;z:real^3;t;u]:real^3^M)) = x
3592 /\ (row 2 (vector[x;y;z:real^3;t;u]:real^3^M)) = y
3593 /\ (row 3 (vector[x;y;z:real^3;t;u]:real^3^M)) = z
3594 /\ (row 4 (vector[x;y;z:real^3;t;u]:real^3^M)) = t
3595 /\ (row 5 (vector[x;y;z:real^3;t;u]:real^3^M)) = u
3598 THEN ASM_SIMP_TAC[row;vector; LAMBDA_BETA; DIMINDEX_3; LENGTH; ARITH] THEN
3599 REWRITE_TAC[num_CONV `4`;num_CONV `3`;num_CONV `2`; num_CONV `1`; EL; HD; TL]
3600 THEN VECTOR_ARITH_TAC);;
3606 let EQUALITY_V_SY_TAC_5 =
3610 THEN MRESAL_TAC VECTOR_3_5[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=5/\ 2<=5/\ 3<=5/\ 4<=5/\ 5<=5/\ 0 MOD 5= 0 /\ 1 MOD 5= 1 /\ 2 MOD 5= 2/\ 3 MOD 5= 3 /\ 4 MOD 5= 4 /\ 5 MOD 5=0 /\ ~(2=1)
3611 /\ SUC 0 MOD 5= 1 /\ SUC 1 MOD 5= 2 /\ SUC 2 MOD 5= 3/\ SUC 3 MOD 5= 4
3612 /\ SUC 4 MOD 5= 0 /\ SUC 5 MOD 5 = 1 /\ ~(3=1)/\ ~(1=0)`;SET_RULE`(a:num) IN (:num)`]
3617 let PROVE_V_SY_EQ_5_TAC=
3620 THEN ASM_REWRITE_TAC[ARITH_RULE`1<= 1 /\ 1<= 5`]
3621 THEN MRESAL_TAC VECTOR_3_5[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=5/\ 2<=5/\ 3<=5/\ 4<=5/\ 4 MOD 5= 4/\ 5 MOD 5=0 /\ 1 MOD 5= 1 /\ 2 MOD 5= 2/\ 3 MOD 5= 3 /\ ~(2=1)
3622 /\ SUC 4 MOD 5= 0 /\ SUC 1 MOD 5= 2 /\ SUC 2 MOD 5= 3/\ SUC 3 MOD 5= 4/\ ~(3=1)/\ ~(1=0)/\ 5<=5/\ 1<=1 /\ 1<=2 /\ 1<= 3 /\ 1<=4 /\ 1<=5`]
3625 let PROVE_E_SY_EQ_5_TAC =
3628 THEN MRESAL_TAC VECTOR_3_5[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=5/\ 2<=5/\ 3<=5/\ 4<=5/\ 4 MOD 5= 4/\ 5 MOD 5=0 /\ 1 MOD 5= 1 /\ 2 MOD 5= 2/\ 3 MOD 5= 3 /\ ~(2=1)
3629 /\ SUC 4 MOD 5= 0 /\ SUC 1 MOD 5= 2 /\ SUC 2 MOD 5= 3/\ SUC 3 MOD 5= 4/\ ~(3=1)/\ ~(1=0)/\ 5<=5/\ 1<=1 /\ 1<=2 /\ 1<= 3 /\ 1<=4 /\ 1<=5
3630 /\ SUC 1=2 /\ SUC 0 =1/\ SUC 2=3/\ SUC 3=4 `; SET_RULE`(a:num) IN (:num)`]
3631 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`5`;`vv:num-> real^3`][ARITH_RULE`~(5=0)`]
3632 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`SUC 4`[ARITH_RULE`SUC 4 MOD 5=0/\ SUC 4=5`])
3633 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3638 let PROVE_E_SY_EQ_INV_5_TAC=
3640 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`x':num`;th;`5`][ARITH_RULE`~(5=0)/\ 0 MOD 5=0/\ SUC 0 MOD 5=1 /\ 1 MOD 5=1 /\ 2 MOD 5=2 /\ 3 MOD 5=3/\ 4 MOD 5=4`]
3642 THEN MRESAL_TAC VECTOR_3_5[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=5/\ 2<=5/\ 3<=5/\ 4<=5/\ 4 MOD 5= 4/\ 5 MOD 5=0 /\ 1 MOD 5= 1 /\ 2 MOD 5= 2/\ 3 MOD 5= 3 /\ ~(2=1)
3643 /\ SUC 4 MOD 5= 0 /\ SUC 1 MOD 5= 2 /\ SUC 2 MOD 5= 3/\ SUC 3 MOD 5= 4/\ ~(3=1)/\ ~(1=0)/\ 5<=5/\ 1<=1 /\ 1<=2 /\ 1<= 3 /\ 1<=4 /\ 1<=5
3644 /\ SUC 1=2 /\ SUC 0 =1/\ SUC 2=3/\ SUC 3=4/\ SUC 4=5 `; SET_RULE`(a:num) IN (:num)`]
3649 let PROVE_E_SY_EQ_INV_5_TAC=
3651 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`x':num`;th;`5`][ARITH_RULE`~(5=0)/\ 5 MOD 5=0/\ SUC 0 MOD 5=1 /\ 1 MOD 5=1 /\ 2 MOD 5=2 /\ 3 MOD 5=3/\ 4 MOD 5=4`]
3653 THEN MRESAL_TAC VECTOR_3_5[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=5/\ 2<=5/\ 3<=5/\ 4<=5/\ 4 MOD 5= 4/\ 5 MOD 5=0 /\ 1 MOD 5= 1 /\ 2 MOD 5= 2/\ 3 MOD 5= 3 /\ ~(2=1)/\ SUC 5 MOD 5=1
3654 /\ SUC 4 MOD 5= 0 /\ SUC 1 MOD 5= 2 /\ SUC 2 MOD 5= 3/\ SUC 3 MOD 5= 4/\ ~(3=1)/\ ~(1=0)/\ 5<=5/\ 1<=1 /\ 1<=2 /\ 1<= 3 /\ 1<=4 /\ 1<=5
3655 /\ SUC 1=2 /\ SUC 0 =1/\ SUC 2=3/\ SUC 3=4/\ SUC 4=5 `; SET_RULE`(a:num) IN (:num)`]
3665 let V_E_FF_CASE_5=prove_by_refinement(
3666 `(s=let upperbd = &6 in
3667 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
3668 else (if {i MOD k,j MOD k}={0,1} then p
3669 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
3670 mk_unadorned_v39 5 (d_tame 5) (cs_adj 5 (&2) (&2 * h0)) (cs_adj 5 (&2 * h0) upperbd))
3672 /\ scs_k_v39 s= dimindex(:M)
3673 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 4;(vv:num->real^3) 0]:real^3^M= v
3674 /\ matvec (v:real^3^M) =a
3676 V_SY (v:real^3^M)=IMAGE vv (:num)/\
3677 E_SY (v:real^3^M)=IMAGE (\i. {vv i, vv (SUC i)}) (:num)/\
3678 F_SY (v:real^3^M)=IMAGE (\i. vv i,vv (SUC i)) (:num)`,
3682 THEN REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
3683 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39]
3684 THEN REPEAT STRIP_TAC;
3686 REWRITE_TAC[V_SY;rows]
3687 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
3688 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 5)<=> (i=1\/ i=2\/ i=3 \/ i=4\/ i=5)`] THEN ASSUME_TAC (SYM th))
3691 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
3697 EQUALITY_V_SY_TAC_5 `1`;
3698 EQUALITY_V_SY_TAC_5 `2`;
3699 EQUALITY_V_SY_TAC_5 `3`;
3700 EQUALITY_V_SY_TAC_5 `4`;
3701 EQUALITY_V_SY_TAC_5 `0`;];
3704 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)<=> (1<= i /\ i<= 5)`]
3705 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`5`;`vv:num-> real^3`][ARITH_RULE`~(5=0)`]
3706 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num`)
3707 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
3708 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
3709 THEN MP_TAC(ARITH_RULE`x' MOD 5 < 5 ==> x' MOD 5 =0 \/ x' MOD 5 = 1\/ x' MOD 5 = 2 \/ x' MOD 5 =3 \/ x' MOD 5 =4`)
3712 PROVE_V_SY_EQ_5_TAC`5`;
3713 PROVE_V_SY_EQ_5_TAC`1`;
3714 PROVE_V_SY_EQ_5_TAC`2`;
3715 PROVE_V_SY_EQ_5_TAC`3`;
3716 PROVE_V_SY_EQ_5_TAC`4`;];
3718 REWRITE_TAC[E_SY;rows]
3719 THEN REPLICATE_TAC 2(POP_ASSUM MP_TAC)
3720 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 5)<=> (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)`] THEN ASSUME_TAC (SYM th))
3721 THEN REPEAT STRIP_TAC
3722 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
3724 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
3728 THEN ASM_REWRITE_TAC[]
3730 PROVE_E_SY_EQ_5_TAC `1`;
3731 PROVE_E_SY_EQ_5_TAC `2`;
3732 PROVE_E_SY_EQ_5_TAC `3`;
3733 PROVE_E_SY_EQ_5_TAC `4`;
3734 PROVE_E_SY_EQ_5_TAC `0`;];
3737 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)<=> (1<= i /\ i<= 5)`]
3738 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`5`;`vv:num-> real^3`][ARITH_RULE`~(5=0)`]
3739 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num` THEN MRESA1_TAC th`SUC x':num`)
3740 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
3741 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
3742 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
3743 THEN MP_TAC(ARITH_RULE`x' MOD 5 < 5==> x' MOD 5 =0 \/ x' MOD 5 = 1\/ x' MOD 5 = 2 \/ x' MOD 5 =3 \/ x' MOD 5 =4`)
3746 PROVE_E_SY_EQ_INV_5_TAC `5`;
3747 PROVE_E_SY_EQ_INV_5_TAC `1`;
3748 PROVE_E_SY_EQ_INV_5_TAC `2` ;
3749 PROVE_E_SY_EQ_INV_5_TAC `3` ;
3750 PROVE_E_SY_EQ_INV_5_TAC `4` ;];
3752 REWRITE_TAC[F_SY;rows]
3753 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
3754 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 5)<=> (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)`] THEN ASSUME_TAC (SYM th))
3755 THEN REPEAT STRIP_TAC
3756 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
3758 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
3762 THEN ASM_REWRITE_TAC[]
3764 PROVE_E_SY_EQ_5_TAC `1`;
3765 PROVE_E_SY_EQ_5_TAC `2`;
3766 PROVE_E_SY_EQ_5_TAC `3`;
3767 PROVE_E_SY_EQ_5_TAC `4`;
3768 PROVE_E_SY_EQ_5_TAC `0`;];
3771 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)<=> (1<= i /\ i<= 5)`]
3772 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`5`;`vv:num-> real^3`][ARITH_RULE`~(5=0)`]
3773 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num` THEN MRESA1_TAC th`SUC x':num`)
3774 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
3775 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
3776 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
3777 THEN MP_TAC(ARITH_RULE`x' MOD 5 < 5==> x' MOD 5 =0 \/ x' MOD 5 = 1\/ x' MOD 5 = 2 \/ x' MOD 5 =3 \/ x' MOD 5 =4`)
3780 PROVE_E_SY_EQ_INV_5_TAC `5`;
3781 PROVE_E_SY_EQ_INV_5_TAC `1`;
3782 PROVE_E_SY_EQ_INV_5_TAC `2` ;
3783 PROVE_E_SY_EQ_INV_5_TAC `3` ;
3784 PROVE_E_SY_EQ_INV_5_TAC `4` ;];
3793 let IN_BALL_ANNUUS_TAC_5 =
3796 THEN MRESAL_TAC VECTOR_3_5[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=5/\ 2<=5/\ 3<=5/\ 4<=5/\ 5<=5`]
3797 THEN MATCH_MP_TAC(SET_RULE`
3798 vv th IN IMAGE vv (:num) /\ IMAGE vv (:num) SUBSET ball_annulus
3799 ==> vv th IN ball_annulus`)
3800 THEN ASM_REWRITE_TAC[IMAGE;IN_ELIM_THM]
3802 THEN REWRITE_TAC[SET_RULE`(a:num) IN(:num)`]
3807 let INEQUALITY_A_B_TAC_50 =
3808 fun (so:term) (so1:term)->
3809 ASM_SIMP_TAC[change_type_v3]
3810 THEN MRESAL_TAC VECTOR_3_5[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=5/\ 2<=5/\ 3<=5/\ 4<=5/\ 5<=5/\ 0 MOD 5= 0 /\ 1 MOD 5= 1 /\ 2 MOD 5= 2/\ 3 MOD 5= 3 /\ 4 MOD 5= 4 /\ 5 MOD 5=0 /\ ~(2=1)
3811 /\ SUC 0 MOD 5= 1 /\ SUC 1 MOD 5= 2 /\ SUC 2 MOD 5= 3/\ SUC 3 MOD 5= 4
3812 /\ SUC 4 MOD 5= 0 /\ SUC 5 MOD 5 = 1 /\ ~(3=1)/\ ~(1=0)`]
3813 THEN REPLICATE_TAC 13 (POP_ASSUM MP_TAC)
3814 THEN POP_ASSUM(fun th-> MRESAL_TAC th[so;so1][dist;ARITH_RULE`1<=5/\ 2<=5/\ 3<=5/\ 4<=5/\ 0 MOD 5= 0 /\ 1 MOD 5= 1 /\ 2 MOD 5= 2/\ 3 MOD 5= 3 /\ 4 MOD 5= 4 /\ 5 MOD 5=0 /\ ~(2=1)
3815 /\ SUC 0 MOD 5= 1 /\ SUC 1 MOD 5= 2 /\ SUC 2 MOD 5= 3/\ SUC 3 MOD 5= 4
3816 /\ SUC 4 MOD 5= 0 /\ SUC 5 MOD 5 = 1 /\ ~(3=1)/\ ~(1=0) /\ ~(1=4)/\ ~(2=3) /\ ~(2=0) /\ ~(3=0)/\ ~(0=4)/\ ~(2=4)
3820 let INEQUALITY_A_B_TAC_5 =
3822 MP_TAC(ARITH_RULE`1<= i /\ i<= 5==> i=1\/ i=2\/ i=3\/ i=4 \/ i=5`)
3825 INEQUALITY_A_B_TAC_50 `1` th;
3826 INEQUALITY_A_B_TAC_50 `2` th;
3827 INEQUALITY_A_B_TAC_50 `3` th;
3828 INEQUALITY_A_B_TAC_50 `4` th;
3829 INEQUALITY_A_B_TAC_50 `0` th;];;
3835 let IN_NOT_EMPTY_CASE_5=prove_by_refinement(
3836 `(s=let upperbd = &6 in
3837 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
3838 else (if {i MOD k,j MOD k}={0,1} then p
3839 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
3840 mk_unadorned_v39 5 (d_tame 5) (cs_adj 5 (&2) (&2 * h0)) (cs_adj 5 (&2 * h0) upperbd))
3842 /\ scs_k_v39 s= dimindex(:M)
3843 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 4;(vv:num->real^3) 0]:real^3^M= v
3844 /\ matvec (v:real^3^M) =a
3846 a IN {matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\ CONDITION2_SY v }`,
3849 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;IN_ELIM_THM;CONDITION1_SY;CONDITION2_SY]
3850 THEN REPEAT STRIP_TAC
3851 THEN POP_ASSUM MP_TAC
3852 THEN POP_ASSUM MP_TAC
3853 THEN POP_ASSUM MP_TAC
3854 THEN POP_ASSUM MP_TAC
3855 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`~(5<=3)`;mk_unadorned_v39;CS_ADJ]
3856 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[IN]
3857 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`]
3858 THEN REPEAT STRIP_TAC
3859 THEN ASM_REWRITE_TAC[]
3860 THEN EXISTS_TAC`v:real^3^M`
3865 REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
3866 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 5)<=> (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)`] THEN ASSUME_TAC (SYM th))
3867 THEN REPEAT STRIP_TAC
3869 IN_BALL_ANNUUS_TAC_5 `(1:num)`;
3870 IN_BALL_ANNUUS_TAC_5 `(2:num)`;
3871 IN_BALL_ANNUUS_TAC_5 `(3:num)`;
3872 IN_BALL_ANNUUS_TAC_5 `(4:num)`;
3873 IN_BALL_ANNUUS_TAC_5 `(0:num)`;];
3877 REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
3878 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 5)<=> (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)`] THEN ASSUME_TAC (SYM th))
3879 THEN REPEAT DISCH_TAC
3883 INEQUALITY_A_B_TAC_5 `1`;
3884 INEQUALITY_A_B_TAC_5 `2`;
3885 INEQUALITY_A_B_TAC_5 `3`;
3886 INEQUALITY_A_B_TAC_5 `4`;
3887 INEQUALITY_A_B_TAC_5 `0`; ];
3889 MP_TAC V_E_FF_CASE_5
3890 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;CS_ADJ]
3891 THEN POP_ASSUM MP_TAC
3892 THEN POP_ASSUM MP_TAC
3893 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
3894 THEN REPEAT RESA_TAC;
3902 let NOT_EMPTY_CASE_5=prove_by_refinement(
3903 `(s=let upperbd = &6 in
3904 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
3905 else (if {i MOD k,j MOD k}={0,1} then p
3906 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
3907 mk_unadorned_v39 5 (d_tame 5) (cs_adj 5 (&2) (&2 * h0)) (cs_adj 5 (&2 * h0) upperbd))
3909 /\ scs_k_v39 s= dimindex(:M)
3911 ~({matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\ CONDITION2_SY v }={})`
3915 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;]
3917 THEN ABBREV_TAC`v=vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 4;(vv:num->real^3) 0]:real^3^M`
3918 THEN ABBREV_TAC`a=matvec (v:real^3^M) `
3919 THEN EXISTS_TAC`a:real^(M,3)finite_product`
3920 THEN MATCH_MP_TAC IN_NOT_EMPTY_CASE_5
3921 THEN ASM_REWRITE_TAC[]
3936 let TAUSTAR_EQ_TAU_STAR_5=prove_by_refinement(
3937 `(let upperbd = &6 in
3938 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
3939 else (if {i MOD k,j MOD k}={0,1} then p
3940 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
3941 mk_unadorned_v39 5 (d_tame 5) (cs_adj 5 (&2) (&2 * h0)) (cs_adj 5 (&2 * h0) upperbd))=s
3943 /\ scs_k_v39 s= dimindex(:M)
3944 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 4;(vv:num->real^3) 0]:real^3^M= v
3945 /\ matvec (v:real^3^M) =a
3946 /\ stable_sy((scs_k_v39 s),(scs_d_v39 s),(0..scs_k_v39 s - 1),
3947 (change_type_v3 (scs_a_v39 s)),
3948 (change_type_v3 (scs_b_v39 s)),
3949 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)),
3950 (\i. (1 + i) MOD scs_k_v39 s))=s1
3951 ==> taustar_v39 s vv = tau_star s1 a`,
3955 THEN MP_TAC V_E_FF_CASE_5
3957 THEN SUBGOAL_THEN`scs_k_v39 s =5` ASSUME_TAC;
3960 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;];
3964 THEN ASM_REWRITE_TAC[taustar_v39;tau_star]
3965 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;]
3966 THEN ASM_SIMP_TAC[dsv_J_empty]
3967 THEN MP_TAC SCS_5_IS_TRI_STABLE
3968 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF]
3970 THEN MRESAL_TAC stable_sy_explicit[`(scs_k_v39 s)`;`(scs_d_v39 s)`;`(0..scs_k_v39 s - 1)`;`
3971 (change_type_v3 (scs_a_v39 s))`;`
3972 (change_type_v3 (scs_b_v39 s))`;`
3973 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s))`;`
3974 (\i. (1 + i) MOD scs_k_v39 s)`][LET_DEF;LET_END_DEF;d_fun]
3975 THEN SUBGOAL_THEN`J1_SY (s1:stable_sy)={}` ASSUME_TAC;
3977 ASM_REWRITE_TAC[J1_SY;]
3979 THEN REWRITE_TAC[scs_J_v39_explicit;LET_DEF;LET_END_DEF;mk_unadorned_v39;change_type_v2;SET_RULE`a IN {{i, j} | F}<=> F`]
3982 ASM_REWRITE_TAC[SUM_CLAUSES;REAL_ARITH`a* &0= &0 /\a + &0=a`]
3984 THEN REWRITE_TAC[MATVEC_VECMATS_ID;VECMATS_MATVEC_ID]
3985 THEN ASM_REWRITE_TAC[REAL_ARITH`A-B=A-C<=>B=C`]
3986 THEN MATCH_MP_TAC dsv_J_empty
3988 THEN REWRITE_TAC[scs_J_v39_explicit;LET_DEF;LET_END_DEF;mk_unadorned_v39;change_type_v2;SET_RULE`a IN {{i, j} | F}<=> F`]
3995 let SCS_A_B__EQ_MOD_5=prove(
3996 `s=(let upperbd = &6 in
3997 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
3998 else (if {i MOD k,j MOD k}={0,1} then p
3999 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
4000 mk_unadorned_v39 5 (d_tame 5) (cs_adj 5 (&2) (&2 * h0)) (cs_adj 5 (&2 * h0) upperbd))
4002 !i j. scs_a_v39 s i j = scs_a_v39 s (i MOD 5) (j MOD 5)/\
4003 scs_b_v39 s i j = scs_b_v39 s (i MOD 5) (j MOD 5)`,
4005 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;CS_ADJ]
4006 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`5`][ARITH_RULE`~(5=0)`]
4007 THEN MRESAL_TAC MOD_MOD_REFL[`j:num`;`5`][ARITH_RULE`~(5=0)`]
4008 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1`;ADD1]
4009 THEN MRESAL_TAC MOD_ADD_MOD[`i:num`;`1:num`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1`;ADD1]);;
4013 let VV_IN_BALL_ANNULUS_TAC_5=
4015 REPLICATE_TAC 8 (POP_ASSUM MP_TAC)
4016 THEN POP_ASSUM(fun th-> MRESAL1_TAC th so [ARITH_RULE`1<=1 /\ 1<=2 /\1<=3 /\ 1<= 4/\ 1<=5 /\ 2<=5/\ 3<=5/\ 4<=5/\ 5<=5/\ ~(1=0)/\ ~(2=0) /\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2)/\ ~(4=0) /\ ~(4=1)/\ ~(4=2)/\ ~(4=3)`] )
4020 let PROVE_INEQUALITY_TAC_50=
4021 fun (so:term) (so1:term)->
4022 REPLICATE_TAC 7(POP_ASSUM MP_TAC)
4023 THEN POP_ASSUM(fun th-> MRESAL_TAC th[so;so1][ARITH_RULE`1<=5 /\ 5<=5/\ 1<=1 /\ 1<=5/\ 1<=2 /\ 2<=5/\1<=3 /\ 3<=5/\ 1<=4/\ 4<=5`])
4024 THEN POP_ASSUM( fun th->
4025 POP_ASSUM( fun th1->
4027 THEN MP_TAC th THEN MP_TAC th1
4028 THEN POP_ASSUM(fun th2-> ONCE_REWRITE_TAC[th2]
4029 THEN POP_ASSUM(fun th3-> MRESAL1_TAC th3`5`[ARITH_RULE`4 MOD 4=0`]
4030 THEN MRESAL1_TAC th3`1`[ARITH_RULE`1 MOD 5=1/\ ~(1=0)`]
4031 THEN MRESAL1_TAC th3`2`[ARITH_RULE`2 MOD 5=2/\ ~(2=0)/\ ~(2=1)`]
4032 THEN MRESAL1_TAC th3`3`[ARITH_RULE`3 MOD 5=3/\ ~(3=0)/\ ~(3=1)/\ ~(3=2)`]
4033 THEN MRESAL1_TAC th3`4`[ARITH_RULE`4 MOD 5=4/\ ~(4=0)/\ ~(4=1)/\ ~(4=2)/\ ~(4=3)`])
4034 THEN MRESAL1_TAC th2`5`[ARITH_RULE`5 MOD 5=0`])
4036 THEN MP_TAC SCS_A_B__EQ_MOD_5
4037 THEN ASM_REWRITE_TAC[]
4039 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
4040 THEN ASM_REWRITE_TAC[ARITH_RULE`5 MOD 5=0/\ 1 MOD 5=1/\ 2 MOD 5=2 /\ 3 MOD 5=3 /\ 4 MOD 5=4`]
4048 let PROVE_INEQUALITY_TAC_5=
4050 MP_TAC(ARITH_RULE`(j MOD 5<5)==> (j MOD 5=0) \/ (j MOD 5=1) \/ (j MOD 5=2)\/ (j MOD 5=3)\/ (j MOD 5=4) `)
4053 PROVE_INEQUALITY_TAC_50 th `5`;
4054 PROVE_INEQUALITY_TAC_50 th `1`;
4055 PROVE_INEQUALITY_TAC_50 th `2`;
4056 PROVE_INEQUALITY_TAC_50 th `3`;
4057 PROVE_INEQUALITY_TAC_50 th `4`];;
4062 let V_SY_EQ_IMAGE_VV_TAC5=
4066 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`;ARITH_RULE`1 MOD 5=1 /\ ~(1=0) /\ 2 MOD 5=2 /\ ~(2=0)/\ ~(2=1)/\ 3 MOD 5=3 /\ ~(3=0)/\ ~(3=1)/\ ~(3=2)/\ 4 MOD 5=4/\ 5 MOD 5=0/\ ~(4=0)/\ ~(4=1)/\ ~(4=2)/\ ~(4=3)`];;
4072 let PROVE_E_SY_EQ_MOD_TAC_5=
4075 THEN ASM_REWRITE_TAC[ARITH_RULE`~(3=0)/\ ~(3=1)/\ ~(3=2)/\ ~(2=0)/\ ~(2=1)/\ ~(1=0)/\ ~(4=0) /\ ~(4=1) /\ ~(4=2) /\ ~(4=3) `]
4084 let PROOF_E_EQ_TAC_5=
4087 THEN ASM_REWRITE_TAC[ARITH_RULE`~(1=0)/\ 1 MOD 5=1/\ SUC 1=2/\ 2 MOD 5=2/\ ~(2=0)/\ ~(2=1)/\ SUC 2=3 /\ 3 MOD 5=3/\ ~(3=0) /\ ~(3=1)/\ ~(3=2)/\ SUC 3=4
4088 /\ ~(4=0) /\ ~(4=1) /\ ~(4=2) /\ ~(4=3) /\ 4 MOD 5=4/\ 5 MOD 5=0/\ SUC 0=1
4089 /\ SUC 5=6/\ SUC 4=5/\ 6 MOD 5=1`;SET_RULE`(a:num) IN (:num)`]
4093 let PROVE_E_SY_EQ_IMAGE_VV_5=
4096 THEN ASM_REWRITE_TAC[ARITH_RULE`~(1=0)`]
4097 THEN MRESAL_TAC MOD_ADD_MOD[`x':num`;`1:num`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1/\ 1<=5/\ 5<=5/\ 0+1=1`;ADD1]
4098 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`~(1=0)/\ 4 MOD 5=4/\ 5 MOD 5=0 /\ 0+1=1/\ 1<=1 /\ 1+1=2/\ 2 MOD 5=2/\ ~(2=0)/\ ~(2=1)/\ 2+1=3/\ 3 MOD 5=3
4099 /\ ~(3=0)/\ ~(3=1)/\ ~(3=2)/\1<=2/\ 2<=5 /\ 3<=5 /\ 4<=5/\ 1<=4/\ 4+1=5
4100 /\ 1<=3/\ 3<=4/\ 3+1=4/\ ~(4=0) /\ ~(4=1) /\ ~(4=2) /\ ~(4=3)`])
4109 let IN_NOT_EMPTY_B1_SY_5=prove_by_refinement(
4110 `(let upperbd = &6 in
4111 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
4112 else (if {i MOD k,j MOD k}={0,1} then p
4113 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
4114 mk_unadorned_v39 5 (d_tame 5) (cs_adj 5 (&2) (&2 * h0)) (cs_adj 5 (&2 * h0) upperbd))=s/\
4115 scs_k_v39 s= dimindex(:M)/\
4116 matvec (v:real^3^M) =a/\
4117 (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\
4118 CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\
4121 if i MOD scs_k_v39 s = 0 then row 5 v else
4122 if i MOD scs_k_v39 s = 1 then row 1 v else
4123 if i MOD scs_k_v39 s = 2 then row 2 v else
4124 if i MOD scs_k_v39 s = 3 then row 3 v else
4126 ==> vv IN BBs_v39 s`,
4129 REWRITE_TAC[CONDITION1_SY;CONDITION2_SY;change_type_v3]
4130 THEN REPEAT STRIP_TAC
4131 THEN SUBGOAL_THEN`scs_k_v39 s =5` ASSUME_TAC;
4135 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;];
4138 REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
4139 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
4141 THEN REPEAT STRIP_TAC)
4142 THEN POP_ASSUM MP_TAC
4143 THEN ASM_REWRITE_TAC[th;IN]
4145 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;]
4148 ASM_REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
4149 THEN REPEAT STRIP_TAC
4150 THEN ASM_REWRITE_TAC[]
4151 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
4152 THEN MP_TAC(ARITH_RULE`x' MOD 5<5 ==> x' MOD 5 = 0 \/ x' MOD 5 = 1 \/ x' MOD 5 = 2 \/ x' MOD 5 = 3\/ x' MOD 5 = 4`)
4155 VV_IN_BALL_ANNULUS_TAC_5 `5`;
4156 VV_IN_BALL_ANNULUS_TAC_5 `1`;
4157 VV_IN_BALL_ANNULUS_TAC_5 `2`;
4158 VV_IN_BALL_ANNULUS_TAC_5 `3`;
4159 VV_IN_BALL_ANNULUS_TAC_5 `4`];
4165 ASM_REWRITE_TAC[periodic]
4167 THEN MRESAL_TAC MOD_EQ[`i+5:num`;`i:num`;`5:num`;`1`][ARITH_RULE`1*A=A`];
4173 THEN SUBGOAL_THEN`!i. (vv:num->real^3) i= vv (i MOD 5)` ASSUME_TAC;
4175 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
4177 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`5`][ARITH_RULE`~(5=0)`];
4181 THEN POP_ASSUM MP_TAC
4182 THEN MRESAL_TAC DIVISION[`i:num`;`5`][ARITH_RULE`~(5=0)`]
4183 THEN MRESAL_TAC DIVISION[`j:num`;`5`][ARITH_RULE`~(5=0)`]
4184 THEN MP_TAC(ARITH_RULE`(i MOD 5<5)==> (i MOD 5=0) \/ (i MOD 5=1) \/ (i MOD 5=2)\/ (i MOD 5=3) \/ (i MOD 5=4)`)
4187 PROVE_INEQUALITY_TAC_5 `5`;
4188 PROVE_INEQUALITY_TAC_5 `1`;
4189 PROVE_INEQUALITY_TAC_5 `2`;
4190 PROVE_INEQUALITY_TAC_5 `3`;
4191 PROVE_INEQUALITY_TAC_5 `4`];
4195 THEN ASM_REWRITE_TAC[ARITH_RULE`~(5<=3)`]
4197 THEN SUBGOAL_THEN`V_SY (v:real^3^M) = IMAGE vv (:num)`ASSUME_TAC;
4200 ASM_REWRITE_TAC[V_SY;rows;IMAGE;EXTENSION;IN_ELIM_THM]
4204 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
4207 V_SY_EQ_IMAGE_VV_TAC5 `1`;
4208 V_SY_EQ_IMAGE_VV_TAC5 `2`;
4209 V_SY_EQ_IMAGE_VV_TAC5 `3`;
4210 V_SY_EQ_IMAGE_VV_TAC5 `4`;
4211 V_SY_EQ_IMAGE_VV_TAC5 `5`];
4218 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
4219 THEN MP_TAC(ARITH_RULE`(x' MOD 5<5)==> (x' MOD 5=0) \/ (x' MOD 5=1) \/ (x' MOD 5=2)\/ (x' MOD 5=3)\/ (x' MOD 5=4)`)
4222 PROVE_E_SY_EQ_MOD_TAC_5 `5`;
4223 PROVE_E_SY_EQ_MOD_TAC_5 `1`;
4224 PROVE_E_SY_EQ_MOD_TAC_5 `2`;
4225 PROVE_E_SY_EQ_MOD_TAC_5 `3`;
4226 PROVE_E_SY_EQ_MOD_TAC_5 `4`];
4230 SUBGOAL_THEN`E_SY (v:real^3^M) = IMAGE (\i. {vv i, vv (SUC i)}) (:num)`ASSUME_TAC;
4234 ASM_REWRITE_TAC[E_SY;rows;IMAGE;]
4235 THEN ONCE_REWRITE_TAC[EXTENSION;]
4236 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
4241 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
4244 PROOF_E_EQ_TAC_5`1`;
4245 PROOF_E_EQ_TAC_5`2`;
4246 PROOF_E_EQ_TAC_5`3`;
4247 PROOF_E_EQ_TAC_5`4`;
4248 PROOF_E_EQ_TAC_5`5`];
4255 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
4256 THEN MP_TAC(ARITH_RULE`(x' MOD 5<5)==> (x' MOD 5=0) \/ (x' MOD 5=1) \/ (x' MOD 5=2)\/ (x' MOD 5=3) \/ (x' MOD 5=4)`)
4259 PROVE_E_SY_EQ_IMAGE_VV_5 `5`;
4260 PROVE_E_SY_EQ_IMAGE_VV_5 `1`;
4261 PROVE_E_SY_EQ_IMAGE_VV_5 `2`;
4262 PROVE_E_SY_EQ_IMAGE_VV_5 `3`;
4263 PROVE_E_SY_EQ_IMAGE_VV_5 `4`];
4268 SUBGOAL_THEN`F_SY (v:real^3^M) = IMAGE (\i. (vv i, vv (SUC i))) (:num)`ASSUME_TAC;
4272 ASM_REWRITE_TAC[F_SY;rows;IMAGE;]
4273 THEN ONCE_REWRITE_TAC[EXTENSION;]
4274 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
4279 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
4282 PROOF_E_EQ_TAC_5`1`;
4283 PROOF_E_EQ_TAC_5`2`;
4284 PROOF_E_EQ_TAC_5`3`;
4285 PROOF_E_EQ_TAC_5`4`;
4286 PROOF_E_EQ_TAC_5`5`];
4293 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
4294 THEN MP_TAC(ARITH_RULE`(x' MOD 5<5)==> (x' MOD 5=0) \/ (x' MOD 5=1) \/ (x' MOD 5=2)\/ (x' MOD 5=3) \/ (x' MOD 5=4)`)
4297 PROVE_E_SY_EQ_IMAGE_VV_5 `5`;
4298 PROVE_E_SY_EQ_IMAGE_VV_5 `1`;
4299 PROVE_E_SY_EQ_IMAGE_VV_5 `2`;
4300 PROVE_E_SY_EQ_IMAGE_VV_5 `3`;
4301 PROVE_E_SY_EQ_IMAGE_VV_5 `4`];
4303 POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
4304 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
4305 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
4306 THEN ASM_REWRITE_TAC[];
4313 let XWITCCN_CASE_5=prove_by_refinement(
4314 `(let upperbd = &6 in
4315 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
4316 else (if {i MOD k,j MOD k}={0,1} then p
4317 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
4318 mk_unadorned_v39 5 (d_tame 5) (cs_adj 5 (&2) (&2 * h0)) (cs_adj 5 (&2 * h0) upperbd))=s
4319 /\ vv IN BBs_v39 s /\
4320 taustar_v39 s vv < &0
4321 /\ scs_k_v39 s= dimindex(:M)
4322 ==> ~(BBprime_v39 s = {})`,
4327 THEN MP_TAC SCS_5_IS_TRI_STABLE
4329 THEN MP_TAC NOT_EMPTY_CASE_5
4331 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?a. a IN A`]
4332 THEN ABBREV_TAC`s1 =stable_sy((scs_k_v39 s),(scs_d_v39 s),(0..scs_k_v39 s - 1),
4333 (change_type_v3 (scs_a_v39 s)),
4334 (change_type_v3 (scs_b_v39 s)),
4335 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)),
4336 (\i. (1 + i) MOD scs_k_v39 s))`
4337 THEN MRESA_TAC stable_sy_explicit[`(scs_k_v39 s)`;`(scs_d_v39 s)`;`(0..scs_k_v39 s - 1)`;`
4338 (change_type_v3 (scs_a_v39 s))`;`
4339 (change_type_v3 (scs_b_v39 s))`;`
4340 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s))`;`
4341 (\i. (1 + i) MOD scs_k_v39 s)`]
4342 THEN SUBGOAL_THEN`scs_k_v39 s =5` ASSUME_TAC;
4345 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;];
4348 REPLICATE_TAC 11 (POP_ASSUM MP_TAC)
4349 THEN REWRITE_TAC[th]
4351 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
4353 THEN REPEAT RESA_TAC)
4354 THEN MRESAL_TAC (GEN_ALL HDPLYGY)[`(scs_k_v39 s)`;`s1:stable_sy`][k_sy;B_SY1;ARITH_RULE`2<5`;]
4355 THEN POP_ASSUM (fun th->
4357 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
4360 THEN REWRITE_TAC[BBprime_v39;IN]
4361 THEN ABBREV_TAC`( vv1 i =
4362 if i MOD scs_k_v39 s = 0 then row 5 v else
4363 if i MOD scs_k_v39 s = 1 then row 1 v else
4364 if i MOD scs_k_v39 s = 2 then row 2 v else
4365 if i MOD scs_k_v39 s = 3 then row 3 v else
4366 row 4 (v:real^3^M))`
4367 THEN EXISTS_TAC`vv1:num->real^3`
4370 ONCE_REWRITE_TAC[GSYM IN]
4371 THEN MATCH_MP_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_5)
4372 THEN EXISTS_TAC`x:real^(M,3)finite_product`
4373 THEN EXISTS_TAC`v:real^3^M`
4374 THEN ASM_REWRITE_TAC[]
4375 THEN POP_ASSUM MP_TAC
4378 SUBGOAL_THEN`vector [ vv1 1; vv1 2; (vv1:num->real^3) 3;vv1 4;vv1 0] = v:real^3^M`
4381 POP_ASSUM(fun th-> REWRITE_TAC[GSYM th])
4382 THEN ASM_REWRITE_TAC[ARITH_RULE`1 MOD 5=1/\ 2 MOD 5=2/\ 3 MOD 5=3/\ 0 MOD 5=0 /\ ~(1=0)/\ ~(2=0)/\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2) /\ ~(4=0) /\ ~(4=1) /\ ~(4=2) /\ ~(4=3)/\ 4 MOD 5=4`;]
4383 THEN ONCE_REWRITE_TAC[CART_EQ]
4384 THEN ASM_REWRITE_TAC[ARITH_RULE`1<=i/\ i<=5 <=>i=1\/ i=2\/ i=3\/ i=4\/ i=5`]
4385 THEN REPEAT RESA_TAC
4387 ASM_SIMP_TAC[row;vector; LAMBDA_BETA; DIMINDEX_3; LENGTH; ARITH] THEN
4388 REWRITE_TAC[num_CONV `4`;num_CONV `3`;num_CONV `2`; num_CONV `1`; EL; HD; TL;]
4389 THEN ASM_SIMP_TAC[CART_EQ; DIMINDEX_3; FORALL_3; VEC_COMPONENT; VECTOR_3; ARITH;row;LAMBDA_BETA];
4394 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[GSYM IN]
4395 THEN REPEAT STRIP_TAC
4396 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_5)
4397 [`x:real^(M,3)finite_product`;`v:real^3^M`;`vv1:num->real^3`;`s:scs_v39`]
4398 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_5)[`v:real^3^M`;`s:scs_v39`;`vv1:num->real^3`;`s1:stable_sy`;`x:real^(M,3)finite_product`]
4399 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_5)
4400 [`vector [ww 1; ww 2; ww 3; ww 4; ww 0]:real^3^M`;`s:scs_v39`;`ww:num->real^3`;`s1:stable_sy`;`matvec(vector [ww 1; ww 2; ww 3; ww 4; ww 0]:real^3^M):real^(M,3)finite_product`;]
4401 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_CASE_5)[`ww:num->real^3`;`vector [ww 1; ww 2; ww 3; ww 4; ww 0]:real^3^M`;`matvec(vector [ww 1; ww 2; ww 3; ww 4;ww 0]:real^3^M):real^(M,3)finite_product`;`s:scs_v39`;]
4402 THEN REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
4403 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4404 THEN MRESA1_TAC th `matvec(vector [ww 1; ww 2; ww 3; ww 4;ww 0]:real^3^M):real^(M,3)finite_product`);
4406 MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_5)
4407 [`x:real^(M,3)finite_product`;`v:real^3^M`;`vv1:num->real^3`;`s:scs_v39`]
4408 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_5)[`v:real^3^M`;`s:scs_v39`;`vv1:num->real^3`;`s1:stable_sy`;`x:real^(M,3)finite_product`]
4409 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_5)
4410 [`vector [vv 1; vv 2; vv 3; vv 4;vv 0]:real^3^M`;`s:scs_v39`;`vv:num->real^3`;`s1:stable_sy`;`matvec(vector [vv 1; vv 2; vv 3; vv 4; vv 0]:real^3^M):real^(M,3)finite_product`;]
4411 THEN REPLICATE_TAC 23 (POP_ASSUM MP_TAC)
4412 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC THEN MP_TAC th)
4413 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_CASE_5)[`vv:num->real^3`;`vector [vv 1; vv 2; vv 3; vv 4; vv 0]:real^3^M`;`matvec(vector [vv 1; vv 2; vv 3; vv 4; vv 0]:real^3^M):real^(M,3)finite_product`;`s:scs_v39`;]
4414 THEN REPLICATE_TAC 6 (POP_ASSUM MP_TAC)
4415 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4416 THEN MRESA1_TAC th `matvec(vector [vv 1; vv 2; vv 3; vv 4; vv 0]:real^3^M):real^(M,3)finite_product`)
4417 THEN POP_ASSUM MP_TAC
4418 THEN POP_ASSUM MP_TAC
4419 THEN REAL_ARITH_TAC;
4431 let VECTOR_3_6=prove(`!x y z t u v. 1<= dimindex(:M)/\ 2<= dimindex(:M) /\ 3<= dimindex(:M)/\ 4<= dimindex(:M) /\ 5<= dimindex(:M) /\ 6<= dimindex(:M) ==> (row 1 (vector[x;y;z:real^3;t;u;v]:real^3^M)) = x
4432 /\ (row 2 (vector[x;y;z:real^3;t;u;v]:real^3^M)) = y
4433 /\ (row 3 (vector[x;y;z:real^3;t;u;v]:real^3^M)) = z
4434 /\ (row 4 (vector[x;y;z:real^3;t;u;v]:real^3^M)) = t
4435 /\ (row 5 (vector[x;y;z:real^3;t;u;v]:real^3^M)) = u
4436 /\ (row 6 (vector[x;y;z:real^3;t;u;v]:real^3^M)) = v
4439 THEN ASM_SIMP_TAC[row;vector; LAMBDA_BETA; DIMINDEX_3; LENGTH; ARITH] THEN
4440 REWRITE_TAC[num_CONV `5`;num_CONV `4`;num_CONV `3`;num_CONV `2`; num_CONV `1`; EL; HD; TL]
4441 THEN VECTOR_ARITH_TAC);;
4445 let IN_BALL_ANNUUS_TAC_6 =
4448 THEN MRESAL_TAC VECTOR_3_6[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 5`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=6/\ 2<=6/\ 3<=6/\ 4<=6/\ 5<=6/\6<=6`]
4449 THEN MATCH_MP_TAC(SET_RULE`
4450 vv th IN IMAGE vv (:num) /\ IMAGE vv (:num) SUBSET ball_annulus
4451 ==> vv th IN ball_annulus`)
4452 THEN ASM_REWRITE_TAC[IMAGE;IN_ELIM_THM]
4454 THEN REWRITE_TAC[SET_RULE`(a:num) IN(:num)`]
4458 let INEQUALITY_A_B_TAC_60 =
4459 fun (so:term) (so1:term)->
4460 ASM_SIMP_TAC[change_type_v3]
4461 THEN MRESAL_TAC VECTOR_3_6[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 5`;`(vv:num->real^3) 0`][ARITH_RULE`1<=6/\ 2<=6/\ 3<=6/\ 4<=6/\ 5<=6 /\ 6<=6 /\ 0 MOD 6= 0 /\ 1 MOD 6= 1 /\ 2 MOD 6= 2/\ 3 MOD 6= 3 /\ 4 MOD 6= 4 /\ 5 MOD 6=5 /\ 6 MOD 6=0 /\ ~(2=1)
4462 /\ SUC 0 MOD 6= 1 /\ SUC 1 MOD 6= 2 /\ SUC 2 MOD 6= 3/\ SUC 3 MOD 6= 4
4463 /\ SUC 4 MOD 6= 5 /\ SUC 5 MOD 6 = 0 /\ SUC 6 MOD 6 =1 /\ ~(3=1)/\ ~(1=0)`]
4464 THEN REPLICATE_TAC 14 (POP_ASSUM MP_TAC)
4465 THEN POP_ASSUM(fun th-> MRESAL_TAC th[so;so1][dist;ARITH_RULE`1<=6/\ 2<=6/\ 3<=6/\ 4<=6/\ 5<=6 /\ 6<=6 /\ 0 MOD 6= 0 /\ 1 MOD 6= 1 /\ 2 MOD 6= 2/\ 3 MOD 6= 3 /\ 4 MOD 6= 4 /\ 5 MOD 6=5 /\ 6 MOD 6=0 /\ ~(2=1)
4466 /\ SUC 0 MOD 6= 1 /\ SUC 1 MOD 6= 2 /\ SUC 2 MOD 6= 3/\ SUC 3 MOD 6= 4
4467 /\ SUC 4 MOD 6= 5 /\ SUC 5 MOD 6 = 0 /\ SUC 6 MOD 6 =1 /\ ~(3=1)/\ ~(1=0) /\ ~(1=4)/\ ~(2=3) /\ ~(2=0) /\ ~(3=0)/\ ~(0=4)/\ ~(2=4)
4468 /\ ~(3=4)/\ ~(1=5)/\ ~(2=5)/\ ~(3=5)/\ ~(4=5)/\ ~(0=5)`]);;
4471 let INEQUALITY_A_B_TAC_6 =
4473 MP_TAC(ARITH_RULE`1<= i /\ i<= 6==> i=1\/ i=2\/ i=3\/ i=4 \/ i=5 \/ i=6`)
4476 INEQUALITY_A_B_TAC_60 `1` th;
4477 INEQUALITY_A_B_TAC_60 `2` th;
4478 INEQUALITY_A_B_TAC_60 `3` th;
4479 INEQUALITY_A_B_TAC_60 `4` th;
4480 INEQUALITY_A_B_TAC_60 `5` th;
4481 INEQUALITY_A_B_TAC_60 `0` th;];;
4484 let EQUALITY_V_SY_TAC_6 =
4488 THEN MRESAL_TAC VECTOR_3_6[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 5`;`(vv:num->real^3) 0`][ARITH_RULE`1<=6/\ 2<=6/\ 3<=6/\ 4<=6/\ 5<=6 /\ 6<=6 /\ 0 MOD 6= 0 /\ 1 MOD 6= 1 /\ 2 MOD 6= 2/\ 3 MOD 6= 3 /\ 4 MOD 6= 4 /\ 5 MOD 6=5 /\ 6 MOD 6=0 /\ ~(2=1)
4489 /\ SUC 0 MOD 6= 1 /\ SUC 1 MOD 6= 2 /\ SUC 2 MOD 6= 3/\ SUC 3 MOD 6= 4
4490 /\ SUC 4 MOD 6= 5 /\ SUC 5 MOD 6 = 0 /\ SUC 6 MOD 6 =1 /\ ~(3=1)/\ ~(1=0)`;SET_RULE`(a:num) IN (:num)`]
4495 let PROVE_V_SY_EQ_6_TAC=
4498 THEN ASM_REWRITE_TAC[ARITH_RULE`1<= 1 /\ 1<= 5`]
4499 THEN MRESAL_TAC VECTOR_3_6[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 5`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=6/\ 2<=6/\ 3<=6/\ 4<=6/\ 5<=6 /\ 6<=6 /\ 0 MOD 6= 0 /\ 1 MOD 6= 1 /\ 2 MOD 6= 2/\ 3 MOD 6= 3 /\ 4 MOD 6= 4 /\ 5 MOD 6=5 /\ 6 MOD 6=0 /\ ~(2=1)
4500 /\ SUC 0 MOD 6= 1 /\ SUC 1 MOD 6= 2 /\ SUC 2 MOD 6= 3/\ SUC 3 MOD 6= 4
4501 /\ SUC 4 MOD 6= 5 /\ SUC 5 MOD 6 = 0 /\ SUC 6 MOD 6 =1 /\ ~(3=1)/\ ~(1=0)`;SET_RULE`(a:num) IN (:num)`]
4505 let PROVE_E_SY_EQ_6_TAC =
4508 THEN MRESAL_TAC VECTOR_3_6[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 5`;`(vv:num->real^3) 0`][ARITH_RULE`1<=6/\ 2<=6/\ 3<=6/\ 4<=6/\ 5<=6 /\ 6<=6 /\ 0 MOD 6= 0 /\ 1 MOD 6= 1 /\ 2 MOD 6= 2/\ 3 MOD 6= 3 /\ 4 MOD 6= 4 /\ 5 MOD 6=5 /\ 6 MOD 6=0 /\ ~(2=1)
4509 /\ SUC 0 MOD 6= 1 /\ SUC 1 MOD 6= 2 /\ SUC 2 MOD 6= 3/\ SUC 3 MOD 6= 4
4510 /\ SUC 4 MOD 6= 5 /\ SUC 5 MOD 6 = 0 /\ SUC 6 MOD 6 =1 /\ ~(3=1)/\ ~(3=1)/\ ~(1=0)/\ 5<=5/\ 1<=1 /\ 1<=2 /\ 1<= 3 /\ 1<=4 /\ 1<=5
4511 /\ SUC 1=2 /\ SUC 0 =1/\ SUC 2=3/\ SUC 3=4 /\ SUC 4=5 `; SET_RULE`(a:num) IN (:num)`]
4512 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`6`;`vv:num-> real^3`][ARITH_RULE`~(6=0)`]
4513 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`SUC 5`[ARITH_RULE`SUC 5 MOD 6=0/\ SUC 5=6`])
4514 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4519 let PROVE_E_SY_EQ_INV_6_TAC=
4521 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`x':num`;th;`6`][ARITH_RULE`~(6=0)/\ 0 MOD 6=0/\ SUC 0 MOD 6=1 /\ 1 MOD 6=1 /\ 2 MOD 6=2 /\ 3 MOD 6=3/\ 4 MOD 6=4 /\ 5 MOD 6=5/\ 6 MOD 6=0 `]
4523 THEN MRESAL_TAC VECTOR_3_6[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 5`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=6/\ 2<=6/\ 3<=6/\ 4<=6/\ 5<=6 /\ 6<=6 /\ 0 MOD 6= 0 /\ 1 MOD 6= 1 /\ 2 MOD 6= 2/\ 3 MOD 6= 3 /\ 4 MOD 6= 4 /\ 5 MOD 6=5 /\ 6 MOD 6=0 /\ ~(2=1)
4524 /\ SUC 0 MOD 6= 1 /\ SUC 1 MOD 6= 2 /\ SUC 2 MOD 6= 3/\ SUC 3 MOD 6= 4
4525 /\ SUC 4 MOD 6= 5 /\ SUC 5 MOD 6 = 0 /\ SUC 6 MOD 6 =1 /\ ~(3=1)/\ ~(3=1)/\ ~(1=0)/\ 5<=5/\ 1<=1 /\ 1<=2 /\ 1<= 3 /\ 1<=4 /\ 1<=5
4526 /\ SUC 1=2 /\ SUC 0 =1/\ SUC 2=3/\ SUC 3=4 /\ SUC 4=5 /\ SUC 5=6`; SET_RULE`(a:num) IN (:num)`]
4532 let V_E_FF_CASE_6=prove_by_refinement(
4533 `(s=let upperbd = &6 in
4534 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
4535 else (if {i MOD k,j MOD k}={0,1} then p
4536 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
4537 mk_unadorned_v39 6 (d_tame 6) (cs_adj 6 (&2) (&2 * h0)) (cs_adj 6 (&2 * h0) upperbd))
4539 /\ scs_k_v39 s= dimindex(:M)
4540 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 4;(vv:num->real^3) 5;(vv:num->real^3) 0]:real^3^M= v
4541 /\ matvec (v:real^3^M) =a
4543 V_SY (v:real^3^M)=IMAGE vv (:num)/\
4544 E_SY (v:real^3^M)=IMAGE (\i. {vv i, vv (SUC i)}) (:num)/\
4545 F_SY (v:real^3^M)=IMAGE (\i. vv i,vv (SUC i)) (:num)`,
4550 THEN REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
4551 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(6<=3)`;IN;mk_unadorned_v39]
4552 THEN REPEAT STRIP_TAC;
4554 REWRITE_TAC[V_SY;rows]
4555 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
4556 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 6)<=> (i=1\/ i=2\/ i=3 \/ i=4\/ i=5 \/ i=6)`] THEN ASSUME_TAC (SYM th))
4559 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
4565 EQUALITY_V_SY_TAC_6 `1`;
4566 EQUALITY_V_SY_TAC_6 `2`;
4567 EQUALITY_V_SY_TAC_6 `3`;
4568 EQUALITY_V_SY_TAC_6 `4`;
4569 EQUALITY_V_SY_TAC_6 `5`;
4570 EQUALITY_V_SY_TAC_6 `0`;];
4575 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5 \/ i=6)<=> (1<= i /\ i<= 6)`]
4576 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`6`;`vv:num-> real^3`][ARITH_RULE`~(6=0)`]
4577 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num`)
4578 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
4579 THEN MRESAL_TAC DIVISION[`x':num`;`6`][ARITH_RULE`~(6=0)`]
4580 THEN MP_TAC(ARITH_RULE`x' MOD 6 < 6 ==> x' MOD 6 =0 \/ x' MOD 6 = 1\/ x' MOD 6 = 2 \/ x' MOD 6 =3 \/ x' MOD 6 =4 \/ x' MOD 6 =5`)
4583 PROVE_V_SY_EQ_6_TAC`6`;
4584 PROVE_V_SY_EQ_6_TAC`1`;
4585 PROVE_V_SY_EQ_6_TAC`2`;
4586 PROVE_V_SY_EQ_6_TAC`3`;
4587 PROVE_V_SY_EQ_6_TAC`4`;
4588 PROVE_V_SY_EQ_6_TAC`5`;];
4590 REWRITE_TAC[E_SY;rows]
4591 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
4592 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 6)<=> (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5\/ i=6)`] THEN ASSUME_TAC (SYM th))
4593 THEN REPEAT STRIP_TAC
4594 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
4596 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
4600 THEN ASM_REWRITE_TAC[]
4602 PROVE_E_SY_EQ_6_TAC `1`;
4603 PROVE_E_SY_EQ_6_TAC `2`;
4604 PROVE_E_SY_EQ_6_TAC `3`;
4605 PROVE_E_SY_EQ_6_TAC `4`;
4606 PROVE_E_SY_EQ_6_TAC `5`;
4607 PROVE_E_SY_EQ_6_TAC `0`;];
4610 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5 \/ i=6)<=> (1<= i /\ i<= 6)`]
4611 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`6`;`vv:num-> real^3`][ARITH_RULE`~(6=0)`]
4612 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num` THEN MRESA1_TAC th`SUC x':num`)
4613 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
4614 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
4615 THEN MRESAL_TAC DIVISION[`x':num`;`6`][ARITH_RULE`~(6=0)`]
4616 THEN MP_TAC(ARITH_RULE`x' MOD 6 < 6==> x' MOD 6 =0 \/ x' MOD 6 = 1\/ x' MOD 6 = 2 \/ x' MOD 6 =3 \/ x' MOD 6 =4 \/ x' MOD 6 =5`)
4619 PROVE_E_SY_EQ_INV_6_TAC `6`;
4620 PROVE_E_SY_EQ_INV_6_TAC `1`;
4621 PROVE_E_SY_EQ_INV_6_TAC `2`;
4622 PROVE_E_SY_EQ_INV_6_TAC `3`;
4623 PROVE_E_SY_EQ_INV_6_TAC `4`;
4624 PROVE_E_SY_EQ_INV_6_TAC `5`;];
4626 REWRITE_TAC[F_SY;rows]
4627 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
4628 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 6)<=> (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5 \/ i=6)`] THEN ASSUME_TAC (SYM th))
4629 THEN REPEAT STRIP_TAC
4630 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
4632 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
4636 THEN ASM_REWRITE_TAC[]
4638 PROVE_E_SY_EQ_6_TAC `1`;
4639 PROVE_E_SY_EQ_6_TAC `2`;
4640 PROVE_E_SY_EQ_6_TAC `3`;
4641 PROVE_E_SY_EQ_6_TAC `4`;
4642 PROVE_E_SY_EQ_6_TAC `5`;
4643 PROVE_E_SY_EQ_6_TAC `0`;];
4646 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5 \/ i=6)<=> (1<= i /\ i<= 6)`]
4647 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`6`;`vv:num-> real^3`][ARITH_RULE`~(6=0)`]
4648 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num` THEN MRESA1_TAC th`SUC x':num`)
4649 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
4650 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
4651 THEN MRESAL_TAC DIVISION[`x':num`;`6`][ARITH_RULE`~(6=0)`]
4652 THEN MP_TAC(ARITH_RULE`x' MOD 6 < 6==> x' MOD 6 =0 \/ x' MOD 6 = 1\/ x' MOD 6 = 2 \/ x' MOD 6 =3 \/ x' MOD 6 =4 \/ x' MOD 6 =5`)
4655 PROVE_E_SY_EQ_INV_6_TAC `6`;
4656 PROVE_E_SY_EQ_INV_6_TAC `1`;
4657 PROVE_E_SY_EQ_INV_6_TAC `2`;
4658 PROVE_E_SY_EQ_INV_6_TAC `3`;
4659 PROVE_E_SY_EQ_INV_6_TAC `4`;
4660 PROVE_E_SY_EQ_INV_6_TAC `5`;];
4668 let IN_NOT_EMPTY_CASE_6=prove_by_refinement(
4669 `(s=let upperbd = &6 in
4670 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
4671 else (if {i MOD k,j MOD k}={0,1} then p
4672 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
4673 mk_unadorned_v39 6 (d_tame 6) (cs_adj 6 (&2) (&2 * h0)) (cs_adj 6 (&2 * h0) upperbd))
4675 /\ scs_k_v39 s= dimindex(:M)
4676 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 4;(vv:num->real^3) 5;(vv:num->real^3) 0]:real^3^M= v
4677 /\ matvec (v:real^3^M) =a
4679 a IN {matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\ CONDITION2_SY v }`,
4682 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;IN_ELIM_THM;CONDITION1_SY;CONDITION2_SY]
4683 THEN REPEAT STRIP_TAC
4684 THEN POP_ASSUM MP_TAC
4685 THEN POP_ASSUM MP_TAC
4686 THEN POP_ASSUM MP_TAC
4687 THEN POP_ASSUM MP_TAC
4688 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`~(6<=3)`;mk_unadorned_v39;CS_ADJ]
4689 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[IN]
4690 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(6<=3)`]
4691 THEN REPEAT STRIP_TAC
4692 THEN ASM_REWRITE_TAC[]
4693 THEN EXISTS_TAC`v:real^3^M`
4698 REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
4699 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 6)<=> (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5\/ i=6)`] THEN ASSUME_TAC (SYM th))
4700 THEN REPEAT STRIP_TAC
4702 IN_BALL_ANNUUS_TAC_6 `(1:num)`;
4703 IN_BALL_ANNUUS_TAC_6 `(2:num)`;
4704 IN_BALL_ANNUUS_TAC_6 `(3:num)`;
4705 IN_BALL_ANNUUS_TAC_6 `(4:num)`;
4706 IN_BALL_ANNUUS_TAC_6 `(5:num)`;
4707 IN_BALL_ANNUUS_TAC_6 `(0:num)`;];
4711 REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
4712 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 6)<=> (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5\/ i=6)`] THEN ASSUME_TAC (SYM th))
4713 THEN REPEAT DISCH_TAC
4717 INEQUALITY_A_B_TAC_6 `1`;
4718 INEQUALITY_A_B_TAC_6 `2`;
4719 INEQUALITY_A_B_TAC_6 `3`;
4720 INEQUALITY_A_B_TAC_6 `4`;
4721 INEQUALITY_A_B_TAC_6 `5`;
4722 INEQUALITY_A_B_TAC_6 `0`;];
4724 MP_TAC V_E_FF_CASE_6
4725 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;CS_ADJ]
4726 THEN POP_ASSUM MP_TAC
4727 THEN POP_ASSUM MP_TAC
4728 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
4729 THEN REPEAT RESA_TAC;
4737 let NOT_EMPTY_CASE_6=prove_by_refinement(
4738 `(s=let upperbd = &6 in
4739 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
4740 else (if {i MOD k,j MOD k}={0,1} then p
4741 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
4742 mk_unadorned_v39 6 (d_tame 6) (cs_adj 6 (&2) (&2 * h0)) (cs_adj 6 (&2 * h0) upperbd))
4744 /\ scs_k_v39 s= dimindex(:M)
4746 ~({matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\ CONDITION2_SY v }={})`
4750 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;]
4752 THEN ABBREV_TAC`v=vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 4;(vv:num->real^3) 5;(vv:num->real^3) 0]:real^3^M`
4753 THEN ABBREV_TAC`a=matvec (v:real^3^M) `
4754 THEN EXISTS_TAC`a:real^(M,3)finite_product`
4755 THEN MATCH_MP_TAC IN_NOT_EMPTY_CASE_6
4756 THEN ASM_REWRITE_TAC[]
4761 let TAUSTAR_EQ_TAU_STAR_6=prove_by_refinement(
4762 `(let upperbd = &6 in
4763 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
4764 else (if {i MOD k,j MOD k}={0,1} then p
4765 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
4766 mk_unadorned_v39 6 (d_tame 6) (cs_adj 6 (&2) (&2 * h0)) (cs_adj 6 (&2 * h0) upperbd))=s
4768 /\ scs_k_v39 s= dimindex(:M)
4769 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 4;(vv:num->real^3) 5;(vv:num->real^3) 0]:real^3^M= v
4770 /\ matvec (v:real^3^M) =a
4771 /\ stable_sy((scs_k_v39 s),(scs_d_v39 s),(0..scs_k_v39 s - 1),
4772 (change_type_v3 (scs_a_v39 s)),
4773 (change_type_v3 (scs_b_v39 s)),
4774 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)),
4775 (\i. (1 + i) MOD scs_k_v39 s))=s1
4776 ==> taustar_v39 s vv = tau_star s1 a`,
4780 THEN MP_TAC V_E_FF_CASE_6
4782 THEN SUBGOAL_THEN`scs_k_v39 s =6` ASSUME_TAC;
4785 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(6<=3)`;IN;mk_unadorned_v39;];
4789 THEN ASM_REWRITE_TAC[taustar_v39;tau_star]
4790 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(6<=3)`;IN;mk_unadorned_v39;]
4791 THEN ASM_SIMP_TAC[dsv_J_empty]
4792 THEN MP_TAC SCS_6_IS_TRI_STABLE
4793 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF]
4795 THEN MRESAL_TAC stable_sy_explicit[`(scs_k_v39 s)`;`(scs_d_v39 s)`;`(0..scs_k_v39 s - 1)`;`
4796 (change_type_v3 (scs_a_v39 s))`;`
4797 (change_type_v3 (scs_b_v39 s))`;`
4798 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s))`;`
4799 (\i. (1 + i) MOD scs_k_v39 s)`][LET_DEF;LET_END_DEF;d_fun]
4800 THEN SUBGOAL_THEN`J1_SY (s1:stable_sy)={}` ASSUME_TAC;
4802 ASM_REWRITE_TAC[J1_SY;]
4804 THEN REWRITE_TAC[scs_J_v39_explicit;LET_DEF;LET_END_DEF;mk_unadorned_v39;change_type_v2;SET_RULE`a IN {{i, j} | F}<=> F`]
4807 ASM_REWRITE_TAC[SUM_CLAUSES;REAL_ARITH`a* &0= &0 /\a + &0=a`]
4809 THEN REWRITE_TAC[MATVEC_VECMATS_ID;VECMATS_MATVEC_ID]
4810 THEN ASM_REWRITE_TAC[REAL_ARITH`A-B=A-C<=>B=C`]
4811 THEN MATCH_MP_TAC dsv_J_empty
4813 THEN REWRITE_TAC[scs_J_v39_explicit;LET_DEF;LET_END_DEF;mk_unadorned_v39;change_type_v2;SET_RULE`a IN {{i, j} | F}<=> F`]
4835 let SCS_A_B__EQ_MOD_6=prove(
4836 `s=(let upperbd = &6 in
4837 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
4838 else (if {i MOD k,j MOD k}={0,1} then p
4839 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
4840 mk_unadorned_v39 6 (d_tame 6) (cs_adj 6 (&2) (&2 * h0)) (cs_adj 6 (&2 * h0) upperbd))
4842 !i j. scs_a_v39 s i j = scs_a_v39 s (i MOD 6) (j MOD 6)/\
4843 scs_b_v39 s i j = scs_b_v39 s (i MOD 6) (j MOD 6)`,
4845 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(6<=3)`;IN;mk_unadorned_v39;CS_ADJ]
4846 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`6`][ARITH_RULE`~(6=0)`]
4847 THEN MRESAL_TAC MOD_MOD_REFL[`j:num`;`6`][ARITH_RULE`~(6=0)`]
4848 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`6`][ARITH_RULE`~(6=0) /\ 1 MOD 6=1`;ADD1]
4849 THEN MRESAL_TAC MOD_ADD_MOD[`i:num`;`1:num`;`6`][ARITH_RULE`~(6=0) /\ 1 MOD 6=1`;ADD1]);;
4854 let VV_IN_BALL_ANNULUS_TAC_6=
4856 REPLICATE_TAC 8 (POP_ASSUM MP_TAC)
4857 THEN POP_ASSUM(fun th-> MRESAL1_TAC th so [ARITH_RULE`1<=1 /\ 1<=2 /\1<=3 /\ 1<= 4/\ 1<=6 /\ 2<=6/\ 3<=6/\ 4<=6/\ 6<=6/\ ~(1=0)/\ ~(2=0) /\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2)/\ ~(4=0) /\ ~(4=1)/\ ~(4=2)/\ ~(4=3)/\ 1<=5/\ 5<=6
4858 /\ ~(5=0) /\ ~(5=1)/\ ~(5=2)/\ ~(5=3) /\ ~(5=4)`] )
4864 let PROVE_INEQUALITY_TAC_60=
4865 fun (so:term) (so1:term)->
4866 REPLICATE_TAC 7(POP_ASSUM MP_TAC)
4867 THEN POP_ASSUM(fun th-> MRESAL_TAC th[so;so1][ARITH_RULE`1<=6 /\ 6<=6/\ 1<=1 /\ 1<=6/\ 1<=2 /\ 2<=6/\1<=3 /\ 3<=6/\ 1<=4/\ 4<=6/\ 1<=5/\ 5<=6`])
4868 THEN POP_ASSUM( fun th->
4869 POP_ASSUM( fun th1->
4871 THEN MP_TAC th THEN MP_TAC th1
4872 THEN POP_ASSUM(fun th2-> ONCE_REWRITE_TAC[th2]
4873 THEN POP_ASSUM(fun th3-> MRESAL1_TAC th3`6`[ARITH_RULE`4 MOD 4=0`]
4874 THEN MRESAL1_TAC th3`1`[ARITH_RULE`1 MOD 6=1/\ ~(1=0)`]
4875 THEN MRESAL1_TAC th3`2`[ARITH_RULE`2 MOD 6=2/\ ~(2=0)/\ ~(2=1)`]
4876 THEN MRESAL1_TAC th3`3`[ARITH_RULE`3 MOD 6=3/\ ~(3=0)/\ ~(3=1)/\ ~(3=2)`]
4877 THEN MRESAL1_TAC th3`4`[ARITH_RULE`4 MOD 6=4/\ ~(4=0)/\ ~(4=1)/\ ~(4=2)/\ ~(4=3)`]
4878 THEN MRESAL1_TAC th3`5`[ARITH_RULE`5 MOD 6=5/\ ~(5=0)/\ ~(5=1)/\ ~(5=2)/\ ~(5=3)/\ ~(5=4)`])
4879 THEN MRESAL1_TAC th2`6`[ARITH_RULE`6 MOD 6=0`])
4881 THEN MP_TAC SCS_A_B__EQ_MOD_6
4882 THEN ASM_REWRITE_TAC[]
4884 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
4885 THEN ASM_REWRITE_TAC[ARITH_RULE`6 MOD 6=0/\ 1 MOD 6=1/\ 2 MOD 6=2 /\ 3 MOD 6=3 /\ 4 MOD 6=4/\ 5 MOD 6=5`]
4895 let PROVE_INEQUALITY_TAC_6=
4897 MP_TAC(ARITH_RULE`(j MOD 6<6)==> (j MOD 6=0) \/ (j MOD 6=1) \/ (j MOD 6=2)\/ (j MOD 6=3)\/ (j MOD 6=4) \/ (j MOD 6=5)`)
4900 PROVE_INEQUALITY_TAC_60 th `6`;
4901 PROVE_INEQUALITY_TAC_60 th `1`;
4902 PROVE_INEQUALITY_TAC_60 th `2`;
4903 PROVE_INEQUALITY_TAC_60 th `3`;
4904 PROVE_INEQUALITY_TAC_60 th `4`;
4905 PROVE_INEQUALITY_TAC_60 th `5`];;
4911 let V_SY_EQ_IMAGE_VV_TAC6=
4915 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`;ARITH_RULE`1 MOD 6=1 /\ ~(1=0) /\ 2 MOD 6=2 /\ ~(2=0)/\ ~(2=1)/\ 3 MOD 6=3 /\ ~(3=0)/\ ~(3=1)/\ ~(3=2)/\ 4 MOD 6=4/\ 5 MOD 6=5/\ 6 MOD 6=0 /\ ~(4=0)/\ ~(4=1)/\ ~(4=2)/\ ~(4=3)
4916 /\ ~(5=0) /\ ~(5=1)/\ ~(5=2)/\ ~(5=3) /\ ~(5=4)`];;
4927 let PROVE_E_SY_EQ_MOD_TAC_6=
4930 THEN ASM_REWRITE_TAC[ARITH_RULE`~(3=0)/\ ~(3=1)/\ ~(3=2)/\ ~(2=0)/\ ~(2=1)/\ ~(1=0)/\ ~(4=0) /\ ~(4=1) /\ ~(4=2) /\ ~(4=3)/\ ~(5=0) /\ ~(5=1)/\ ~(5=2)/\ ~(5=3) /\ ~(5=4) `]
4942 let PROOF_E_EQ_TAC_6=
4945 THEN ASM_REWRITE_TAC[ARITH_RULE`~(1=0)/\ 1 MOD 6=1/\ SUC 1=2/\ 2 MOD 6=2/\ ~(2=0)/\ ~(2=1)/\ SUC 2=3 /\ 3 MOD 6=3/\ ~(3=0) /\ ~(3=1)/\ ~(3=2)/\ SUC 3=4
4946 /\ ~(4=0) /\ ~(4=1) /\ ~(4=2) /\ ~(4=3) /\ 4 MOD 6=4/\ 6 MOD 6=0/\ SUC 0=1
4947 /\ SUC 5=6/\ SUC 4=5/\ 7 MOD 6=1/\ 5 MOD 6=5/\ SUC 6=7
4948 /\ ~(5=0) /\ ~(5=1)/\ ~(5=2)/\ ~(5=3) /\ ~(5=4)
4949 `;SET_RULE`(a:num) IN (:num)`]
4957 let PROVE_E_SY_EQ_IMAGE_VV_6=
4960 THEN ASM_REWRITE_TAC[ARITH_RULE`~(1=0)`]
4961 THEN MRESAL_TAC MOD_ADD_MOD[`x':num`;`1:num`;`6`][ARITH_RULE`~(6=0) /\ 1 MOD 6=1/\ 1<=6/\ 6<=6/\ 0+1=1`;ADD1]
4962 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`~(1=0)/\ 1 MOD 6=1/\ SUC 1=2/\ 2 MOD 6=2/\ ~(2=0)/\ ~(2=1)/\ SUC 2=3 /\ 3 MOD 6=3/\ ~(3=0) /\ ~(3=1)/\ ~(3=2)/\ SUC 3=4
4963 /\ ~(4=0) /\ ~(4=1) /\ ~(4=2) /\ ~(4=3) /\ 4 MOD 6=4/\ 6 MOD 6=0/\ SUC 0=1
4964 /\ SUC 5=6/\ SUC 4=5/\ 7 MOD 6=1/\ 5 MOD 6=5/\ SUC 6=7
4965 /\ ~(5=0) /\ ~(5=1)/\ ~(5=2)/\ ~(5=3) /\ ~(5=4)/\3<=6/\ 4+1=5/\ 5+1=6
4966 /\ 0+1=1/\ 1<=1 /\1+1=2/\ 1<=2/\ 2+1=3/\ 1<=3/\ 3+1=4/\ 2<=6
4967 /\ 1<=4/\ 4<=6/\ 1<=5/\ 5<=6`])
4977 let IN_NOT_EMPTY_B1_SY_6=prove_by_refinement(
4978 `(let upperbd = &6 in
4979 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
4980 else (if {i MOD k,j MOD k}={0,1} then p
4981 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
4982 mk_unadorned_v39 6 (d_tame 6) (cs_adj 6 (&2) (&2 * h0)) (cs_adj 6 (&2 * h0) upperbd))=s/\
4983 scs_k_v39 s= dimindex(:M)/\
4984 matvec (v:real^3^M) =a/\
4985 (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\
4986 CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\
4989 if i MOD scs_k_v39 s = 0 then row 6 v else
4990 if i MOD scs_k_v39 s = 1 then row 1 v else
4991 if i MOD scs_k_v39 s = 2 then row 2 v else
4992 if i MOD scs_k_v39 s = 3 then row 3 v else
4993 if i MOD scs_k_v39 s = 4 then row 4 v else
4995 ==> vv IN BBs_v39 s`,
4999 REWRITE_TAC[CONDITION1_SY;CONDITION2_SY;change_type_v3]
5000 THEN REPEAT STRIP_TAC
5001 THEN SUBGOAL_THEN`scs_k_v39 s =6` ASSUME_TAC;
5004 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(6<=3)`;IN;mk_unadorned_v39;];
5007 REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
5008 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
5010 THEN REPEAT STRIP_TAC)
5011 THEN POP_ASSUM MP_TAC
5012 THEN ASM_REWRITE_TAC[th;IN]
5014 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(6<=3)`;IN;mk_unadorned_v39;]
5017 ASM_REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
5018 THEN REPEAT STRIP_TAC
5019 THEN ASM_REWRITE_TAC[]
5020 THEN MRESAL_TAC DIVISION[`x':num`;`6`][ARITH_RULE`~(6=0)`]
5021 THEN MP_TAC(ARITH_RULE`x' MOD 6<6 ==> x' MOD 6 = 0 \/ x' MOD 6 = 1 \/ x' MOD 6 = 2 \/ x' MOD 6 = 3\/ x' MOD 6 = 4 \/ x' MOD 6 = 5`)
5024 VV_IN_BALL_ANNULUS_TAC_6 `6`;
5025 VV_IN_BALL_ANNULUS_TAC_6 `1`;
5026 VV_IN_BALL_ANNULUS_TAC_6 `2`;
5027 VV_IN_BALL_ANNULUS_TAC_6 `3`;
5028 VV_IN_BALL_ANNULUS_TAC_6 `4`;
5029 VV_IN_BALL_ANNULUS_TAC_6 `5`];
5036 ASM_REWRITE_TAC[periodic]
5038 THEN MRESAL_TAC MOD_EQ[`i+6:num`;`i:num`;`6:num`;`1`][ARITH_RULE`1*A=A`];
5044 THEN SUBGOAL_THEN`!i. (vv:num->real^3) i= vv (i MOD 6)` ASSUME_TAC;
5046 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
5048 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`6`][ARITH_RULE`~(6=0)`];
5051 THEN POP_ASSUM MP_TAC
5052 THEN MRESAL_TAC DIVISION[`i:num`;`6`][ARITH_RULE`~(6=0)`]
5053 THEN MRESAL_TAC DIVISION[`j:num`;`6`][ARITH_RULE`~(6=0)`]
5054 THEN MP_TAC(ARITH_RULE`(i MOD 6<6)==> (i MOD 6=0) \/ (i MOD 6=1) \/ (i MOD 6=2)\/ (i MOD 6=3) \/ (i MOD 6=4) \/ (i MOD 6=5)`)
5057 PROVE_INEQUALITY_TAC_6 `6`;
5058 PROVE_INEQUALITY_TAC_6 `1`;
5059 PROVE_INEQUALITY_TAC_6 `2`;
5060 PROVE_INEQUALITY_TAC_6 `3`;
5061 PROVE_INEQUALITY_TAC_6 `4`;
5062 PROVE_INEQUALITY_TAC_6 `5`];
5066 THEN ASM_REWRITE_TAC[ARITH_RULE`~(6<=3)`]
5068 THEN SUBGOAL_THEN`V_SY (v:real^3^M) = IMAGE vv (:num)`ASSUME_TAC;
5070 ASM_REWRITE_TAC[V_SY;rows;IMAGE;EXTENSION;IN_ELIM_THM]
5074 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 6)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5\/ i=6`]
5077 V_SY_EQ_IMAGE_VV_TAC6 `1`;
5078 V_SY_EQ_IMAGE_VV_TAC6 `2`;
5079 V_SY_EQ_IMAGE_VV_TAC6 `3`;
5080 V_SY_EQ_IMAGE_VV_TAC6 `4`;
5081 V_SY_EQ_IMAGE_VV_TAC6 `5`;
5082 V_SY_EQ_IMAGE_VV_TAC6 `6`];
5088 THEN MRESAL_TAC DIVISION[`x':num`;`6`][ARITH_RULE`~(6=0)`]
5089 THEN MP_TAC(ARITH_RULE`(x' MOD 6<6)==> (x' MOD 6=0) \/ (x' MOD 6=1) \/ (x' MOD 6=2)\/ (x' MOD 6=3)\/ (x' MOD 6=4) \/ (x' MOD 6=5)`)
5092 PROVE_E_SY_EQ_MOD_TAC_6 `6`;
5093 PROVE_E_SY_EQ_MOD_TAC_6 `1`;
5094 PROVE_E_SY_EQ_MOD_TAC_6 `2`;
5095 PROVE_E_SY_EQ_MOD_TAC_6 `3`;
5096 PROVE_E_SY_EQ_MOD_TAC_6 `4`;
5097 PROVE_E_SY_EQ_MOD_TAC_6 `5`];
5100 SUBGOAL_THEN`E_SY (v:real^3^M) = IMAGE (\i. {vv i, vv (SUC i)}) (:num)`ASSUME_TAC;
5103 ASM_REWRITE_TAC[E_SY;rows;IMAGE;]
5104 THEN ONCE_REWRITE_TAC[EXTENSION;]
5105 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
5109 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 6)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5\/ i=6`]
5112 PROOF_E_EQ_TAC_6`1`;
5113 PROOF_E_EQ_TAC_6`2`;
5114 PROOF_E_EQ_TAC_6`3`;
5115 PROOF_E_EQ_TAC_6`4`;
5116 PROOF_E_EQ_TAC_6`5`;
5117 PROOF_E_EQ_TAC_6`6`];
5122 THEN MRESAL_TAC DIVISION[`x':num`;`6`][ARITH_RULE`~(6=0)`]
5123 THEN MP_TAC(ARITH_RULE`(x' MOD 6<6)==> (x' MOD 6=0) \/ (x' MOD 6=1) \/ (x' MOD 6=2)\/ (x' MOD 6=3) \/ (x' MOD 6=4) \/ (x' MOD 6=5)`)
5126 PROVE_E_SY_EQ_IMAGE_VV_6 `6`;
5127 PROVE_E_SY_EQ_IMAGE_VV_6 `1`;
5128 PROVE_E_SY_EQ_IMAGE_VV_6 `2`;
5129 PROVE_E_SY_EQ_IMAGE_VV_6 `3`;
5130 PROVE_E_SY_EQ_IMAGE_VV_6 `4`;
5131 PROVE_E_SY_EQ_IMAGE_VV_6 `5`];
5137 SUBGOAL_THEN`F_SY (v:real^3^M) = IMAGE (\i. (vv i, vv (SUC i))) (:num)`ASSUME_TAC;
5140 ASM_REWRITE_TAC[F_SY;rows;IMAGE;]
5141 THEN ONCE_REWRITE_TAC[EXTENSION;]
5142 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
5146 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 6)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5\/ i=6`]
5149 PROOF_E_EQ_TAC_6`1`;
5150 PROOF_E_EQ_TAC_6`2`;
5151 PROOF_E_EQ_TAC_6`3`;
5152 PROOF_E_EQ_TAC_6`4`;
5153 PROOF_E_EQ_TAC_6`5`;
5154 PROOF_E_EQ_TAC_6`6`];
5159 THEN MRESAL_TAC DIVISION[`x':num`;`6`][ARITH_RULE`~(6=0)`]
5160 THEN MP_TAC(ARITH_RULE`(x' MOD 6<6)==> (x' MOD 6=0) \/ (x' MOD 6=1) \/ (x' MOD 6=2)\/ (x' MOD 6=3) \/ (x' MOD 6=4) \/ (x' MOD 6=5)`)
5163 PROVE_E_SY_EQ_IMAGE_VV_6 `6`;
5164 PROVE_E_SY_EQ_IMAGE_VV_6 `1`;
5165 PROVE_E_SY_EQ_IMAGE_VV_6 `2`;
5166 PROVE_E_SY_EQ_IMAGE_VV_6 `3`;
5167 PROVE_E_SY_EQ_IMAGE_VV_6 `4`;
5168 PROVE_E_SY_EQ_IMAGE_VV_6 `5`];
5174 POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
5175 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
5176 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
5177 THEN ASM_REWRITE_TAC[];
5185 let XWITCCN_CASE_6=prove_by_refinement(
5186 `(let upperbd = &6 in
5187 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
5188 else (if {i MOD k,j MOD k}={0,1} then p
5189 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
5190 mk_unadorned_v39 6 (d_tame 6) (cs_adj 6 (&2) (&2 * h0)) (cs_adj 6 (&2 * h0) upperbd))=s
5191 /\ vv IN BBs_v39 s /\
5192 taustar_v39 s vv < &0
5193 /\ scs_k_v39 s= dimindex(:M)
5194 ==> ~(BBprime_v39 s = {})`,
5199 THEN MP_TAC SCS_6_IS_TRI_STABLE
5201 THEN MP_TAC NOT_EMPTY_CASE_6
5203 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?a. a IN A`]
5204 THEN ABBREV_TAC`s1 =stable_sy((scs_k_v39 s),(scs_d_v39 s),(0..scs_k_v39 s - 1),
5205 (change_type_v3 (scs_a_v39 s)),
5206 (change_type_v3 (scs_b_v39 s)),
5207 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)),
5208 (\i. (1 + i) MOD scs_k_v39 s))`
5209 THEN MRESA_TAC stable_sy_explicit[`(scs_k_v39 s)`;`(scs_d_v39 s)`;`(0..scs_k_v39 s - 1)`;`
5210 (change_type_v3 (scs_a_v39 s))`;`
5211 (change_type_v3 (scs_b_v39 s))`;`
5212 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s))`;`
5213 (\i. (1 + i) MOD scs_k_v39 s)`]
5214 THEN SUBGOAL_THEN`scs_k_v39 s =6` ASSUME_TAC;
5218 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(6
5219 <=3)`;IN;mk_unadorned_v39;];
5222 REPLICATE_TAC 11 (POP_ASSUM MP_TAC)
5223 THEN REWRITE_TAC[th]
5225 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
5227 THEN REPEAT RESA_TAC)
5228 THEN MRESAL_TAC (GEN_ALL HDPLYGY)[`(scs_k_v39 s)`;`s1:stable_sy`][k_sy;B_SY1;ARITH_RULE`2<6
5230 THEN POP_ASSUM (fun th->
5232 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
5235 THEN REWRITE_TAC[BBprime_v39;IN]
5236 THEN ABBREV_TAC`( vv1 i =
5237 if i MOD scs_k_v39 s = 0 then row 6
5239 if i MOD scs_k_v39 s = 1 then row 1 v else
5240 if i MOD scs_k_v39 s = 2 then row 2 v else
5241 if i MOD scs_k_v39 s = 3 then row 3 v else
5242 if i MOD scs_k_v39 s = 4 then row 4 v else
5243 row 5 (v:real^3^M))`
5244 THEN EXISTS_TAC`vv1:num->real^3`
5247 ONCE_REWRITE_TAC[GSYM IN]
5248 THEN MATCH_MP_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_6)
5249 THEN EXISTS_TAC`x:real^(M,3)finite_product`
5250 THEN EXISTS_TAC`v:real^3^M`
5251 THEN ASM_REWRITE_TAC[]
5252 THEN POP_ASSUM MP_TAC
5255 SUBGOAL_THEN`vector [ vv1 1; vv1 2; (vv1:num->real^3) 3;vv1 4;vv1 5;vv1 0] = v:real^3^M`
5258 POP_ASSUM(fun th-> REWRITE_TAC[GSYM th])
5259 THEN ASM_REWRITE_TAC[ARITH_RULE`1 MOD 6=1/\ 2 MOD 6=2/\ 3 MOD 6=3/\ 0 MOD 6
5260 =0 /\ ~(1=0)/\ ~(2=0)/\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2) /\ ~(4=0) /\ ~(4=1) /\ ~(4=2) /\ ~(4=3)/\ 4 MOD 6=4/\ 5 MOD 6=5/\ ~(1=5)/\ ~(2=5)/\ ~(3=5)/\ ~(4=5)/\ ~(0=5)`;]
5261 THEN ONCE_REWRITE_TAC[CART_EQ]
5262 THEN ASM_REWRITE_TAC[ARITH_RULE`1<=i/\ i<=6
5263 <=>i=1\/ i=2\/ i=3\/ i=4\/ i=5\/ i=6`]
5264 THEN REPEAT RESA_TAC
5266 ASM_SIMP_TAC[row;vector; LAMBDA_BETA; DIMINDEX_3; LENGTH; ARITH] THEN
5267 REWRITE_TAC[num_CONV `4`;num_CONV `5`;num_CONV `3`;num_CONV `2`; num_CONV `1`; EL; HD; TL;]
5268 THEN ASM_SIMP_TAC[CART_EQ; DIMINDEX_3; FORALL_3; VEC_COMPONENT; VECTOR_3; ARITH;row;LAMBDA_BETA];
5273 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[GSYM IN]
5274 THEN REPEAT STRIP_TAC
5275 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_6)
5276 [`x:real^(M,3)finite_product`;`v:real^3^M`;`vv1:num->real^3`;`s:scs_v39`]
5277 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_6)[`v:real^3^M`;`s:scs_v39`;`vv1:num->real^3`;`s1:stable_sy`;`x:real^(M,3)finite_product`]
5278 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_6)
5279 [`vector [ww 1; ww 2; ww 3; ww 4; ww 5; ww 0]:real^3^M`;`s:scs_v39`;`ww:num->real^3`;`s1:stable_sy`;`matvec(vector [ww 1; ww 2; ww 3; ww 4;ww 5; ww 0]:real^3^M):real^(M,3)finite_product`;]
5280 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_CASE_6
5281 )[`ww:num->real^3`;`vector [ww 1; ww 2; ww 3; ww 4; ww 5;ww 0]:real^3^M`;`matvec(vector [ww 1; ww 2; ww 3; ww 4; ww 5; ww 0]:real^3^M):real^(M,3)finite_product`;`s:scs_v39`;]
5282 THEN REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
5283 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
5284 THEN MRESA1_TAC th `matvec(vector [ww 1; ww 2; ww 3; ww 4; ww 5; ww 0]:real^3^M):real^(M,3)finite_product`);
5286 MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_6
5288 [`x:real^(M,3)finite_product`;`v:real^3^M`;`vv1:num->real^3`;`s:scs_v39`]
5289 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_6
5290 )[`v:real^3^M`;`s:scs_v39`;`vv1:num->real^3`;`s1:stable_sy`;`x:real^(M,3)finite_product`]
5291 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_6
5293 [`vector [vv 1; vv 2; vv 3; vv 4;vv 5;vv 0]:real^3^M`;`s:scs_v39`;`vv:num->real^3`;`s1:stable_sy`;`matvec(vector [vv 1; vv 2; vv 3; vv 4;vv 5; vv 0]:real^3^M):real^(M,3)finite_product`;]
5294 THEN REPLICATE_TAC 23 (POP_ASSUM MP_TAC)
5295 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC THEN MP_TAC th)
5296 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_CASE_6
5297 )[`vv:num->real^3`;`vector [vv 1; vv 2; vv 3; vv 4; vv 5;vv 0]:real^3^M`;`matvec(vector [vv 1; vv 2; vv 3; vv 4; vv 5; vv 0]:real^3^M):real^(M,3)finite_product`;`s:scs_v39`;]
5298 THEN REPLICATE_TAC 6 (POP_ASSUM MP_TAC)
5299 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
5300 THEN MRESA1_TAC th `matvec(vector [vv 1; vv 2; vv 3; vv 4; vv 5; vv 0]:real^3^M):real^(M,3)finite_product`)
5301 THEN POP_ASSUM MP_TAC
5302 THEN POP_ASSUM MP_TAC
5303 THEN REAL_ARITH_TAC;
5332 let V_E_FF_CASE_5_sqrt8=prove_by_refinement(
5333 `(s=let upperbd = &6 in
5334 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
5335 else (if {i MOD k,j MOD k}={0,1} then p
5336 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
5337 mk_unadorned_v39 5 (#0.616) (cs_adj 5 (&2) (sqrt8)) (cs_adj 5 (&2 * h0) upperbd))
5339 /\ scs_k_v39 s= dimindex(:M)
5340 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 4;(vv:num->real^3) 0]:real^3^M= v
5341 /\ matvec (v:real^3^M) =a
5343 V_SY (v:real^3^M)=IMAGE vv (:num)/\
5344 E_SY (v:real^3^M)=IMAGE (\i. {vv i, vv (SUC i)}) (:num)/\
5345 F_SY (v:real^3^M)=IMAGE (\i. vv i,vv (SUC i)) (:num)`,
5349 THEN REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
5350 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39]
5351 THEN REPEAT STRIP_TAC;
5353 REWRITE_TAC[V_SY;rows]
5354 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
5355 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 5)<=> (i=1\/ i=2\/ i=3 \/ i=4\/ i=5)`] THEN ASSUME_TAC (SYM th))
5358 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
5364 EQUALITY_V_SY_TAC_5 `1`;
5365 EQUALITY_V_SY_TAC_5 `2`;
5366 EQUALITY_V_SY_TAC_5 `3`;
5367 EQUALITY_V_SY_TAC_5 `4`;
5368 EQUALITY_V_SY_TAC_5 `0`;];
5371 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)<=> (1<= i /\ i<= 5)`]
5372 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`5`;`vv:num-> real^3`][ARITH_RULE`~(5=0)`]
5373 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num`)
5374 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
5375 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
5376 THEN MP_TAC(ARITH_RULE`x' MOD 5 < 5 ==> x' MOD 5 =0 \/ x' MOD 5 = 1\/ x' MOD 5 = 2 \/ x' MOD 5 =3 \/ x' MOD 5 =4`)
5379 PROVE_V_SY_EQ_5_TAC`5`;
5380 PROVE_V_SY_EQ_5_TAC`1`;
5381 PROVE_V_SY_EQ_5_TAC`2`;
5382 PROVE_V_SY_EQ_5_TAC`3`;
5383 PROVE_V_SY_EQ_5_TAC`4`;];
5385 REWRITE_TAC[E_SY;rows]
5386 THEN REPLICATE_TAC 2(POP_ASSUM MP_TAC)
5387 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 5)<=> (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)`] THEN ASSUME_TAC (SYM th))
5388 THEN REPEAT STRIP_TAC
5389 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
5391 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
5395 THEN ASM_REWRITE_TAC[]
5397 PROVE_E_SY_EQ_5_TAC `1`;
5398 PROVE_E_SY_EQ_5_TAC `2`;
5399 PROVE_E_SY_EQ_5_TAC `3`;
5400 PROVE_E_SY_EQ_5_TAC `4`;
5401 PROVE_E_SY_EQ_5_TAC `0`;];
5404 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)<=> (1<= i /\ i<= 5)`]
5405 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`5`;`vv:num-> real^3`][ARITH_RULE`~(5=0)`]
5406 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num` THEN MRESA1_TAC th`SUC x':num`)
5407 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
5408 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
5409 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
5410 THEN MP_TAC(ARITH_RULE`x' MOD 5 < 5==> x' MOD 5 =0 \/ x' MOD 5 = 1\/ x' MOD 5 = 2 \/ x' MOD 5 =3 \/ x' MOD 5 =4`)
5413 PROVE_E_SY_EQ_INV_5_TAC `5`;
5414 PROVE_E_SY_EQ_INV_5_TAC `1`;
5415 PROVE_E_SY_EQ_INV_5_TAC `2` ;
5416 PROVE_E_SY_EQ_INV_5_TAC `3` ;
5417 PROVE_E_SY_EQ_INV_5_TAC `4` ;];
5419 REWRITE_TAC[F_SY;rows]
5420 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
5421 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 5)<=> (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)`] THEN ASSUME_TAC (SYM th))
5422 THEN REPEAT STRIP_TAC
5423 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
5425 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
5429 THEN ASM_REWRITE_TAC[]
5431 PROVE_E_SY_EQ_5_TAC `1`;
5432 PROVE_E_SY_EQ_5_TAC `2`;
5433 PROVE_E_SY_EQ_5_TAC `3`;
5434 PROVE_E_SY_EQ_5_TAC `4`;
5435 PROVE_E_SY_EQ_5_TAC `0`;];
5438 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)<=> (1<= i /\ i<= 5)`]
5439 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`5`;`vv:num-> real^3`][ARITH_RULE`~(5=0)`]
5440 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num` THEN MRESA1_TAC th`SUC x':num`)
5441 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
5442 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
5443 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
5444 THEN MP_TAC(ARITH_RULE`x' MOD 5 < 5==> x' MOD 5 =0 \/ x' MOD 5 = 1\/ x' MOD 5 = 2 \/ x' MOD 5 =3 \/ x' MOD 5 =4`)
5447 PROVE_E_SY_EQ_INV_5_TAC `5`;
5448 PROVE_E_SY_EQ_INV_5_TAC `1`;
5449 PROVE_E_SY_EQ_INV_5_TAC `2` ;
5450 PROVE_E_SY_EQ_INV_5_TAC `3` ;
5451 PROVE_E_SY_EQ_INV_5_TAC `4` ;];
5461 let IN_NOT_EMPTY_CASE_5_sqrt8=prove_by_refinement(
5462 `(s=let upperbd = &6 in
5463 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
5464 else (if {i MOD k,j MOD k}={0,1} then p
5465 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
5466 mk_unadorned_v39 5 (#0.616) (cs_adj 5 (&2) (sqrt8)) (cs_adj 5 (&2 * h0) upperbd))
5468 /\ scs_k_v39 s= dimindex(:M)
5469 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 4;(vv:num->real^3) 0]:real^3^M= v
5470 /\ matvec (v:real^3^M) =a
5472 a IN {matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\ CONDITION2_SY v }`,
5475 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;IN_ELIM_THM;CONDITION1_SY;CONDITION2_SY]
5476 THEN REPEAT STRIP_TAC
5477 THEN POP_ASSUM MP_TAC
5478 THEN POP_ASSUM MP_TAC
5479 THEN POP_ASSUM MP_TAC
5480 THEN POP_ASSUM MP_TAC
5481 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`~(5<=3)`;mk_unadorned_v39;CS_ADJ]
5482 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[IN]
5483 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`]
5484 THEN REPEAT STRIP_TAC
5485 THEN ASM_REWRITE_TAC[]
5486 THEN EXISTS_TAC`v:real^3^M`
5491 REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
5492 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 5)<=> (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)`] THEN ASSUME_TAC (SYM th))
5493 THEN REPEAT STRIP_TAC
5495 IN_BALL_ANNUUS_TAC_5 `(1:num)`;
5496 IN_BALL_ANNUUS_TAC_5 `(2:num)`;
5497 IN_BALL_ANNUUS_TAC_5 `(3:num)`;
5498 IN_BALL_ANNUUS_TAC_5 `(4:num)`;
5499 IN_BALL_ANNUUS_TAC_5 `(0:num)`;];
5503 REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
5504 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 5)<=> (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)`] THEN ASSUME_TAC (SYM th))
5505 THEN REPEAT DISCH_TAC
5509 INEQUALITY_A_B_TAC_5 `1`;
5510 INEQUALITY_A_B_TAC_5 `2`;
5511 INEQUALITY_A_B_TAC_5 `3`;
5512 INEQUALITY_A_B_TAC_5 `4`;
5513 INEQUALITY_A_B_TAC_5 `0`; ];
5515 MP_TAC V_E_FF_CASE_5_sqrt8
5516 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;CS_ADJ]
5517 THEN POP_ASSUM MP_TAC
5518 THEN POP_ASSUM MP_TAC
5519 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
5520 THEN REPEAT RESA_TAC;
5540 let NOT_EMPTY_CASE_5_sqrt8=prove_by_refinement(
5541 `(s=let upperbd = &6 in
5542 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
5543 else (if {i MOD k,j MOD k}={0,1} then p
5544 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
5545 mk_unadorned_v39 5 (#0.616) (cs_adj 5 (&2) (sqrt8)) (cs_adj 5 (&2 * h0) upperbd))
5547 /\ scs_k_v39 s= dimindex(:M)
5549 ~({matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\ CONDITION2_SY v }={})`
5553 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;]
5555 THEN ABBREV_TAC`v=vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 4;(vv:num->real^3) 0]:real^3^M`
5556 THEN ABBREV_TAC`a=matvec (v:real^3^M) `
5557 THEN EXISTS_TAC`a:real^(M,3)finite_product`
5558 THEN MATCH_MP_TAC IN_NOT_EMPTY_CASE_5_sqrt8
5559 THEN ASM_REWRITE_TAC[]
5564 let TAUSTAR_EQ_TAU_STAR_5_sqrt8=prove_by_refinement(
5565 `(let upperbd = &6 in
5566 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
5567 else (if {i MOD k,j MOD k}={0,1} then p
5568 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
5569 mk_unadorned_v39 5 (#0.616) (cs_adj 5 (&2) (sqrt8)) (cs_adj 5 (&2 * h0) upperbd))=s
5571 /\ scs_k_v39 s= dimindex(:M)
5572 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 4;(vv:num->real^3) 0]:real^3^M= v
5573 /\ matvec (v:real^3^M) =a
5574 /\ stable_sy((scs_k_v39 s),(scs_d_v39 s),(0..scs_k_v39 s - 1),
5575 (change_type_v3 (scs_a_v39 s)),
5576 (change_type_v3 (scs_b_v39 s)),
5577 (change_type_v2 (scs_J_v39 s)(scs_k_v39 s)),
5578 (\i. (1 + i) MOD scs_k_v39 s))=s1
5579 ==> taustar_v39 s vv = tau_star s1 a`,
5583 THEN MP_TAC V_E_FF_CASE_5_sqrt8
5585 THEN SUBGOAL_THEN`scs_k_v39 s =5` ASSUME_TAC;
5588 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;];
5592 THEN ASM_REWRITE_TAC[taustar_v39;tau_star]
5593 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;]
5594 THEN ASM_SIMP_TAC[dsv_J_empty]
5595 THEN MP_TAC SCS_5_sqrt8_IS_TRI_STABLE
5596 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF]
5598 THEN MRESAL_TAC stable_sy_explicit[`(scs_k_v39 s)`;`(scs_d_v39 s)`;`(0..scs_k_v39 s - 1)`;`
5599 (change_type_v3 (scs_a_v39 s))`;`
5600 (change_type_v3 (scs_b_v39 s))`;`
5601 (change_type_v2 (scs_J_v39 s)(scs_k_v39 s))`;`
5602 (\i. (1 + i) MOD scs_k_v39 s)`][LET_DEF;LET_END_DEF;d_fun]
5603 THEN SUBGOAL_THEN`J1_SY (s1:stable_sy)={}` ASSUME_TAC;
5605 ASM_REWRITE_TAC[J1_SY;]
5607 THEN REWRITE_TAC[scs_J_v39_explicit;LET_DEF;LET_END_DEF;mk_unadorned_v39;change_type_v2;SET_RULE`a IN {{i, j} | F}<=> F`]
5610 ASM_REWRITE_TAC[SUM_CLAUSES;REAL_ARITH`a* &0= &0 /\a + &0=a`]
5612 THEN REWRITE_TAC[MATVEC_VECMATS_ID;VECMATS_MATVEC_ID]
5613 THEN ASM_REWRITE_TAC[REAL_ARITH`A-B=A-C<=>B=C`]
5614 THEN MATCH_MP_TAC dsv_J_empty
5616 THEN REWRITE_TAC[scs_J_v39_explicit;LET_DEF;LET_END_DEF;mk_unadorned_v39;change_type_v2;SET_RULE`a IN {{i, j} | F}<=> F`]
5626 let SCS_A_B__EQ_MOD_5_sqrt8=prove(
5627 `s=(let upperbd = &6 in
5628 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
5629 else (if {i MOD k,j MOD k}={0,1} then p
5630 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
5631 mk_unadorned_v39 5 (#0.616) (cs_adj 5 (&2) (sqrt8)) (cs_adj 5 (&2 * h0) upperbd))
5633 !i j. scs_a_v39 s i j = scs_a_v39 s (i MOD 5) (j MOD 5)/\
5634 scs_b_v39 s i j = scs_b_v39 s (i MOD 5) (j MOD 5)`,
5636 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;CS_ADJ]
5637 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`5`][ARITH_RULE`~(5=0)`]
5638 THEN MRESAL_TAC MOD_MOD_REFL[`j:num`;`5`][ARITH_RULE`~(5=0)`]
5639 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1`;ADD1]
5640 THEN MRESAL_TAC MOD_ADD_MOD[`i:num`;`1:num`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1`;ADD1]);;
5644 let VV_IN_BALL_ANNULUS_TAC_5=
5646 REPLICATE_TAC 8 (POP_ASSUM MP_TAC)
5647 THEN POP_ASSUM(fun th-> MRESAL1_TAC th so [ARITH_RULE`1<=1 /\ 1<=2 /\1<=3 /\ 1<= 4/\ 1<=5 /\ 2<=5/\ 3<=5/\ 4<=5/\ 5<=5/\ ~(1=0)/\ ~(2=0) /\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2)/\ ~(4=0) /\ ~(4=1)/\ ~(4=2)/\ ~(4=3)`] )
5651 let PROVE_INEQUALITY_TAC_50=
5652 fun (so:term) (so1:term)->
5653 REPLICATE_TAC 7(POP_ASSUM MP_TAC)
5654 THEN POP_ASSUM(fun th-> MRESAL_TAC th[so;so1][ARITH_RULE`1<=5 /\ 5<=5/\ 1<=1 /\ 1<=5/\ 1<=2 /\ 2<=5/\1<=3 /\ 3<=5/\ 1<=4/\ 4<=5`])
5655 THEN POP_ASSUM( fun th->
5656 POP_ASSUM( fun th1->
5658 THEN MP_TAC th THEN MP_TAC th1
5659 THEN POP_ASSUM(fun th2-> ONCE_REWRITE_TAC[th2]
5660 THEN POP_ASSUM(fun th3-> MRESAL1_TAC th3`5`[ARITH_RULE`4 MOD 4=0`]
5661 THEN MRESAL1_TAC th3`1`[ARITH_RULE`1 MOD 5=1/\ ~(1=0)`]
5662 THEN MRESAL1_TAC th3`2`[ARITH_RULE`2 MOD 5=2/\ ~(2=0)/\ ~(2=1)`]
5663 THEN MRESAL1_TAC th3`3`[ARITH_RULE`3 MOD 5=3/\ ~(3=0)/\ ~(3=1)/\ ~(3=2)`]
5664 THEN MRESAL1_TAC th3`4`[ARITH_RULE`4 MOD 5=4/\ ~(4=0)/\ ~(4=1)/\ ~(4=2)/\ ~(4=3)`])
5665 THEN MRESAL1_TAC th2`5`[ARITH_RULE`5 MOD 5=0`])
5667 THEN MP_TAC SCS_A_B__EQ_MOD_5_sqrt8
5668 THEN ASM_REWRITE_TAC[]
5670 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
5671 THEN ASM_REWRITE_TAC[ARITH_RULE`5 MOD 5=0/\ 1 MOD 5=1/\ 2 MOD 5=2 /\ 3 MOD 5=3 /\ 4 MOD 5=4`]
5679 let PROVE_INEQUALITY_TAC_5=
5681 MP_TAC(ARITH_RULE`(j MOD 5<5)==> (j MOD 5=0) \/ (j MOD 5=1) \/ (j MOD 5=2)\/ (j MOD 5=3)\/ (j MOD 5=4) `)
5684 PROVE_INEQUALITY_TAC_50 th `5`;
5685 PROVE_INEQUALITY_TAC_50 th `1`;
5686 PROVE_INEQUALITY_TAC_50 th `2`;
5687 PROVE_INEQUALITY_TAC_50 th `3`;
5688 PROVE_INEQUALITY_TAC_50 th `4`];;
5693 let V_SY_EQ_IMAGE_VV_TAC5=
5697 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`;ARITH_RULE`1 MOD 5=1 /\ ~(1=0) /\ 2 MOD 5=2 /\ ~(2=0)/\ ~(2=1)/\ 3 MOD 5=3 /\ ~(3=0)/\ ~(3=1)/\ ~(3=2)/\ 4 MOD 5=4/\ 5 MOD 5=0/\ ~(4=0)/\ ~(4=1)/\ ~(4=2)/\ ~(4=3)`];;
5703 let PROVE_E_SY_EQ_MOD_TAC_5=
5706 THEN ASM_REWRITE_TAC[ARITH_RULE`~(3=0)/\ ~(3=1)/\ ~(3=2)/\ ~(2=0)/\ ~(2=1)/\ ~(1=0)/\ ~(4=0) /\ ~(4=1) /\ ~(4=2) /\ ~(4=3) `]
5715 let PROOF_E_EQ_TAC_5=
5718 THEN ASM_REWRITE_TAC[ARITH_RULE`~(1=0)/\ 1 MOD 5=1/\ SUC 1=2/\ 2 MOD 5=2/\ ~(2=0)/\ ~(2=1)/\ SUC 2=3 /\ 3 MOD 5=3/\ ~(3=0) /\ ~(3=1)/\ ~(3=2)/\ SUC 3=4
5719 /\ ~(4=0) /\ ~(4=1) /\ ~(4=2) /\ ~(4=3) /\ 4 MOD 5=4/\ 5 MOD 5=0/\ SUC 0=1
5720 /\ SUC 5=6/\ SUC 4=5/\ 6 MOD 5=1`;SET_RULE`(a:num) IN (:num)`]
5724 let PROVE_E_SY_EQ_IMAGE_VV_5=
5727 THEN ASM_REWRITE_TAC[ARITH_RULE`~(1=0)`]
5728 THEN MRESAL_TAC MOD_ADD_MOD[`x':num`;`1:num`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1/\ 1<=5/\ 5<=5/\ 0+1=1`;ADD1]
5729 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`~(1=0)/\ 4 MOD 5=4/\ 5 MOD 5=0 /\ 0+1=1/\ 1<=1 /\ 1+1=2/\ 2 MOD 5=2/\ ~(2=0)/\ ~(2=1)/\ 2+1=3/\ 3 MOD 5=3
5730 /\ ~(3=0)/\ ~(3=1)/\ ~(3=2)/\1<=2/\ 2<=5 /\ 3<=5 /\ 4<=5/\ 1<=4/\ 4+1=5
5731 /\ 1<=3/\ 3<=4/\ 3+1=4/\ ~(4=0) /\ ~(4=1) /\ ~(4=2) /\ ~(4=3)`])
5740 let IN_NOT_EMPTY_B1_SY_5_sqrt8=prove_by_refinement(
5741 `(let upperbd = &6 in
5742 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
5743 else (if {i MOD k,j MOD k}={0,1} then p
5744 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
5745 mk_unadorned_v39 5 (#0.616) (cs_adj 5 (&2) (sqrt8)) (cs_adj 5 (&2 * h0) upperbd))=s/\
5746 scs_k_v39 s= dimindex(:M)/\
5747 matvec (v:real^3^M) =a/\
5748 (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\
5749 CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\
5752 if i MOD scs_k_v39 s = 0 then row 5 v else
5753 if i MOD scs_k_v39 s = 1 then row 1 v else
5754 if i MOD scs_k_v39 s = 2 then row 2 v else
5755 if i MOD scs_k_v39 s = 3 then row 3 v else
5757 ==> vv IN BBs_v39 s`,
5761 REWRITE_TAC[CONDITION1_SY;CONDITION2_SY;change_type_v3]
5762 THEN REPEAT STRIP_TAC
5763 THEN SUBGOAL_THEN`scs_k_v39 s =5` ASSUME_TAC;
5765 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;];
5767 REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
5768 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
5770 THEN REPEAT STRIP_TAC)
5771 THEN POP_ASSUM MP_TAC
5772 THEN ASM_REWRITE_TAC[th;IN]
5774 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;]
5776 ASM_REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
5777 THEN REPEAT STRIP_TAC
5778 THEN ASM_REWRITE_TAC[]
5779 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
5780 THEN MP_TAC(ARITH_RULE`x' MOD 5<5 ==> x' MOD 5 = 0 \/ x' MOD 5 = 1 \/ x' MOD 5 = 2 \/ x' MOD 5 = 3\/ x' MOD 5 = 4`)
5783 VV_IN_BALL_ANNULUS_TAC_5 `5`;
5784 VV_IN_BALL_ANNULUS_TAC_5 `1`;
5785 VV_IN_BALL_ANNULUS_TAC_5 `2`;
5786 VV_IN_BALL_ANNULUS_TAC_5 `3`;
5787 VV_IN_BALL_ANNULUS_TAC_5 `4`];
5789 ASM_REWRITE_TAC[periodic]
5791 THEN MRESAL_TAC MOD_EQ[`i+5:num`;`i:num`;`5:num`;`1`][ARITH_RULE`1*A=A`];
5795 THEN SUBGOAL_THEN`!i. (vv:num->real^3) i= vv (i MOD 5)` ASSUME_TAC;
5796 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
5798 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`5`][ARITH_RULE`~(5=0)`];
5800 THEN POP_ASSUM MP_TAC
5801 THEN MRESAL_TAC DIVISION[`i:num`;`5`][ARITH_RULE`~(5=0)`]
5802 THEN MRESAL_TAC DIVISION[`j:num`;`5`][ARITH_RULE`~(5=0)`]
5803 THEN MP_TAC(ARITH_RULE`(i MOD 5<5)==> (i MOD 5=0) \/ (i MOD 5=1) \/ (i MOD 5=2)\/ (i MOD 5=3) \/ (i MOD 5=4)`)
5806 PROVE_INEQUALITY_TAC_5 `5`;
5807 PROVE_INEQUALITY_TAC_5 `1`;
5808 PROVE_INEQUALITY_TAC_5 `2`;
5809 PROVE_INEQUALITY_TAC_5 `3`;
5810 PROVE_INEQUALITY_TAC_5 `4`];
5813 THEN ASM_REWRITE_TAC[ARITH_RULE`~(5<=3)`]
5815 THEN SUBGOAL_THEN`V_SY (v:real^3^M) = IMAGE vv (:num)`ASSUME_TAC;
5816 ASM_REWRITE_TAC[V_SY;rows;IMAGE;EXTENSION;IN_ELIM_THM]
5819 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
5822 V_SY_EQ_IMAGE_VV_TAC5 `1`;
5823 V_SY_EQ_IMAGE_VV_TAC5 `2`;
5824 V_SY_EQ_IMAGE_VV_TAC5 `3`;
5825 V_SY_EQ_IMAGE_VV_TAC5 `4`;
5826 V_SY_EQ_IMAGE_VV_TAC5 `5`];
5830 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
5831 THEN MP_TAC(ARITH_RULE`(x' MOD 5<5)==> (x' MOD 5=0) \/ (x' MOD 5=1) \/ (x' MOD 5=2)\/ (x' MOD 5=3)\/ (x' MOD 5=4)`)
5834 PROVE_E_SY_EQ_MOD_TAC_5 `5`;
5835 PROVE_E_SY_EQ_MOD_TAC_5 `1`;
5836 PROVE_E_SY_EQ_MOD_TAC_5 `2`;
5837 PROVE_E_SY_EQ_MOD_TAC_5 `3`;
5838 PROVE_E_SY_EQ_MOD_TAC_5 `4`];
5839 SUBGOAL_THEN`E_SY (v:real^3^M) = IMAGE (\i. {vv i, vv (SUC i)}) (:num)`ASSUME_TAC;
5840 ASM_REWRITE_TAC[E_SY;rows;IMAGE;]
5841 THEN ONCE_REWRITE_TAC[EXTENSION;]
5842 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
5847 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
5850 PROOF_E_EQ_TAC_5`1`;
5851 PROOF_E_EQ_TAC_5`2`;
5852 PROOF_E_EQ_TAC_5`3`;
5853 PROOF_E_EQ_TAC_5`4`;
5854 PROOF_E_EQ_TAC_5`5`];
5858 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
5859 THEN MP_TAC(ARITH_RULE`(x' MOD 5<5)==> (x' MOD 5=0) \/ (x' MOD 5=1) \/ (x' MOD 5=2)\/ (x' MOD 5=3) \/ (x' MOD 5=4)`)
5862 PROVE_E_SY_EQ_IMAGE_VV_5 `5`;
5863 PROVE_E_SY_EQ_IMAGE_VV_5 `1`;
5864 PROVE_E_SY_EQ_IMAGE_VV_5 `2`;
5865 PROVE_E_SY_EQ_IMAGE_VV_5 `3`;
5866 PROVE_E_SY_EQ_IMAGE_VV_5 `4`];
5868 SUBGOAL_THEN`F_SY (v:real^3^M) = IMAGE (\i. (vv i, vv (SUC i))) (:num)`ASSUME_TAC;
5869 ASM_REWRITE_TAC[F_SY;rows;IMAGE;]
5870 THEN ONCE_REWRITE_TAC[EXTENSION;]
5871 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
5875 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
5878 PROOF_E_EQ_TAC_5`1`;
5879 PROOF_E_EQ_TAC_5`2`;
5880 PROOF_E_EQ_TAC_5`3`;
5881 PROOF_E_EQ_TAC_5`4`;
5882 PROOF_E_EQ_TAC_5`5`];
5886 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
5887 THEN MP_TAC(ARITH_RULE`(x' MOD 5<5)==> (x' MOD 5=0) \/ (x' MOD 5=1) \/ (x' MOD 5=2)\/ (x' MOD 5=3) \/ (x' MOD 5=4)`)
5890 PROVE_E_SY_EQ_IMAGE_VV_5 `5`;
5891 PROVE_E_SY_EQ_IMAGE_VV_5 `1`;
5892 PROVE_E_SY_EQ_IMAGE_VV_5 `2`;
5893 PROVE_E_SY_EQ_IMAGE_VV_5 `3`;
5894 PROVE_E_SY_EQ_IMAGE_VV_5 `4`];
5898 POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
5899 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
5900 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
5901 THEN ASM_REWRITE_TAC[];
5908 let XWITCCN_CASE_5_sqrt8=prove_by_refinement(
5909 `(let upperbd = &6 in
5910 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
5911 else (if {i MOD k,j MOD k}={0,1} then p
5912 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
5913 mk_unadorned_v39 5 (#0.616) (cs_adj 5 (&2) (sqrt8)) (cs_adj 5 (&2 * h0) upperbd))=s
5914 /\ vv IN BBs_v39 s /\
5915 taustar_v39 s vv < &0
5916 /\ scs_k_v39 s= dimindex(:M)
5917 ==> ~(BBprime_v39 s = {})`,
5922 THEN MP_TAC SCS_5_sqrt8_IS_TRI_STABLE
5924 THEN MP_TAC NOT_EMPTY_CASE_5_sqrt8
5926 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?a. a IN A`]
5927 THEN ABBREV_TAC`s1 =stable_sy((scs_k_v39 s),(scs_d_v39 s),(0..scs_k_v39 s - 1),
5928 (change_type_v3 (scs_a_v39 s)),
5929 (change_type_v3 (scs_b_v39 s)),
5930 (change_type_v2 (scs_J_v39 s)(scs_k_v39 s)),
5931 (\i. (1 + i) MOD scs_k_v39 s))`
5932 THEN MRESA_TAC stable_sy_explicit[`(scs_k_v39 s)`;`(scs_d_v39 s)`;`(0..scs_k_v39 s - 1)`;`
5933 (change_type_v3 (scs_a_v39 s))`;`
5934 (change_type_v3 (scs_b_v39 s))`;`
5935 (change_type_v2 (scs_J_v39 s)(scs_k_v39 s))`;`
5936 (\i. (1 + i) MOD scs_k_v39 s)`]
5937 THEN SUBGOAL_THEN`scs_k_v39 s =5` ASSUME_TAC;
5940 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;];
5943 REPLICATE_TAC 11 (POP_ASSUM MP_TAC)
5944 THEN REWRITE_TAC[th]
5946 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
5948 THEN REPEAT RESA_TAC)
5949 THEN MRESAL_TAC (GEN_ALL HDPLYGY)[`(scs_k_v39 s)`;`s1:stable_sy`][k_sy;B_SY1;ARITH_RULE`2<5`;]
5950 THEN POP_ASSUM (fun th->
5952 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
5955 THEN REWRITE_TAC[BBprime_v39;IN]
5956 THEN ABBREV_TAC`( vv1 i =
5957 if i MOD scs_k_v39 s = 0 then row 5 v else
5958 if i MOD scs_k_v39 s = 1 then row 1 v else
5959 if i MOD scs_k_v39 s = 2 then row 2 v else
5960 if i MOD scs_k_v39 s = 3 then row 3 v else
5961 row 4 (v:real^3^M))`
5962 THEN EXISTS_TAC`vv1:num->real^3`
5965 ONCE_REWRITE_TAC[GSYM IN]
5966 THEN MATCH_MP_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_5_sqrt8)
5967 THEN EXISTS_TAC`x:real^(M,3)finite_product`
5968 THEN EXISTS_TAC`v:real^3^M`
5969 THEN ASM_REWRITE_TAC[]
5970 THEN POP_ASSUM MP_TAC
5973 SUBGOAL_THEN`vector [ vv1 1; vv1 2; (vv1:num->real^3) 3;vv1 4;vv1 0] = v:real^3^M`
5976 POP_ASSUM(fun th-> REWRITE_TAC[GSYM th])
5977 THEN ASM_REWRITE_TAC[ARITH_RULE`1 MOD 5=1/\ 2 MOD 5=2/\ 3 MOD 5=3/\ 0 MOD 5=0 /\ ~(1=0)/\ ~(2=0)/\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2) /\ ~(4=0) /\ ~(4=1) /\ ~(4=2) /\ ~(4=3)/\ 4 MOD 5=4`;]
5978 THEN ONCE_REWRITE_TAC[CART_EQ]
5979 THEN ASM_REWRITE_TAC[ARITH_RULE`1<=i/\ i<=5 <=>i=1\/ i=2\/ i=3\/ i=4\/ i=5`]
5980 THEN REPEAT RESA_TAC
5982 ASM_SIMP_TAC[row;vector; LAMBDA_BETA; DIMINDEX_3; LENGTH; ARITH] THEN
5983 REWRITE_TAC[num_CONV `4`;num_CONV `3`;num_CONV `2`; num_CONV `1`; EL; HD; TL;]
5984 THEN ASM_SIMP_TAC[CART_EQ; DIMINDEX_3; FORALL_3; VEC_COMPONENT; VECTOR_3; ARITH;row;LAMBDA_BETA];
5989 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[GSYM IN]
5990 THEN REPEAT STRIP_TAC
5991 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_5_sqrt8)
5992 [`x:real^(M,3)finite_product`;`v:real^3^M`;`vv1:num->real^3`;`s:scs_v39`]
5993 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_5_sqrt8)[`v:real^3^M`;`s:scs_v39`;`vv1:num->real^3`;`s1:stable_sy`;`x:real^(M,3)finite_product`]
5994 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_5_sqrt8)
5995 [`vector [ww 1; ww 2; ww 3; ww 4; ww 0]:real^3^M`;`s:scs_v39`;`ww:num->real^3`;`s1:stable_sy`;`matvec(vector [ww 1; ww 2; ww 3; ww 4; ww 0]:real^3^M):real^(M,3)finite_product`;]
5996 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_CASE_5_sqrt8)[`ww:num->real^3`;`vector [ww 1; ww 2; ww 3; ww 4; ww 0]:real^3^M`;`matvec(vector [ww 1; ww 2; ww 3; ww 4;ww 0]:real^3^M):real^(M,3)finite_product`;`s:scs_v39`;]
5997 THEN REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
5998 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
5999 THEN MRESA1_TAC th `matvec(vector [ww 1; ww 2; ww 3; ww 4;ww 0]:real^3^M):real^(M,3)finite_product`);
6001 MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_5_sqrt8)
6002 [`x:real^(M,3)finite_product`;`v:real^3^M`;`vv1:num->real^3`;`s:scs_v39`]
6003 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_5_sqrt8)[`v:real^3^M`;`s:scs_v39`;`vv1:num->real^3`;`s1:stable_sy`;`x:real^(M,3)finite_product`]
6004 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_5_sqrt8)
6005 [`vector [vv 1; vv 2; vv 3; vv 4;vv 0]:real^3^M`;`s:scs_v39`;`vv:num->real^3`;`s1:stable_sy`;`matvec(vector [vv 1; vv 2; vv 3; vv 4; vv 0]:real^3^M):real^(M,3)finite_product`;]
6006 THEN REPLICATE_TAC 23 (POP_ASSUM MP_TAC)
6007 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC THEN MP_TAC th)
6008 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_CASE_5_sqrt8)[`vv:num->real^3`;`vector [vv 1; vv 2; vv 3; vv 4; vv 0]:real^3^M`;`matvec(vector [vv 1; vv 2; vv 3; vv 4; vv 0]:real^3^M):real^(M,3)finite_product`;`s:scs_v39`;]
6009 THEN REPLICATE_TAC 6 (POP_ASSUM MP_TAC)
6010 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6011 THEN MRESA1_TAC th `matvec(vector [vv 1; vv 2; vv 3; vv 4; vv 0]:real^3^M):real^(M,3)finite_product`)
6012 THEN POP_ASSUM MP_TAC
6013 THEN POP_ASSUM MP_TAC
6014 THEN REAL_ARITH_TAC;
6030 let IN_BALL_ANNUUS_TAC_5 =
6033 THEN MRESAL_TAC VECTOR_3_5[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=5/\ 2<=5/\ 3<=5/\ 4<=5/\ 5<=5`]
6034 THEN MATCH_MP_TAC(SET_RULE`
6035 vv th IN IMAGE vv (:num) /\ IMAGE vv (:num) SUBSET ball_annulus
6036 ==> vv th IN ball_annulus`)
6037 THEN ASM_REWRITE_TAC[IMAGE;IN_ELIM_THM]
6045 let INEQUALITY_A_B_TAC_50 =
6046 fun (so:term) (so1:term)->
6047 ASM_SIMP_TAC[change_type_v3]
6048 THEN MRESAL_TAC VECTOR_3_5[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 0`][ARITH_RULE`1<=5/\ 2<=5/\ 3<=5/\ 4<=5/\ 5<=5/\ 0 MOD 5= 0 /\ 1 MOD 5= 1 /\ 2 MOD 5= 2/\ 3 MOD 5= 3 /\ 4 MOD 5= 4 /\ 5 MOD 5=0 /\ ~(2=1)
6049 /\ SUC 0 MOD 5= 1 /\ SUC 1 MOD 5= 2 /\ SUC 2 MOD 5= 3/\ SUC 3 MOD 5= 4
6050 /\ SUC 4 MOD 5= 0 /\ SUC 5 MOD 5 = 1 /\ ~(3=1)/\ ~(1=0)`]
6051 THEN REPLICATE_TAC 13 (POP_ASSUM MP_TAC)
6052 THEN POP_ASSUM(fun th-> MRESAL_TAC th[so;so1][dist;ARITH_RULE`1<=5/\ 2<=5/\ 3<=5/\ 4<=5/\ 0 MOD 5= 0 /\ 1 MOD 5= 1 /\ 2 MOD 5= 2/\ 3 MOD 5= 3 /\ 4 MOD 5= 4 /\ 5 MOD 5=0 /\ ~(2=1)
6053 /\ SUC 0 MOD 5= 1 /\ SUC 1 MOD 5= 2 /\ SUC 2 MOD 5= 3/\ SUC 3 MOD 5= 4
6054 /\ SUC 4 MOD 5= 0 /\ SUC 5 MOD 5 = 1 /\ ~(3=1)/\ ~(1=0) /\ ~(1=4)/\ ~(2=3) /\ ~(2=0) /\ ~(3=0)/\ ~(0=4)/\ ~(2=4)
6055 /\ ~(3=4)`;SET_RULE`{1,0}={0,1}`; ])
6056 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`5`;`vv:num-> real^3`][ARITH_RULE`~(5=0)`]
6057 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`5:num`[ARITH_RULE`5 MOD 5=0`])
6058 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT RESA_TAC)
6064 let INEQUALITY_A_B_TAC_5 =
6066 MP_TAC(ARITH_RULE`1<= i /\ i<= 5==> i=1\/ i=2\/ i=3\/ i=4 \/ i=5`)
6068 THENL[ INEQUALITY_A_B_TAC_50 `1` th;
6069 INEQUALITY_A_B_TAC_50 `2` th;
6070 INEQUALITY_A_B_TAC_50 `3` th;
6071 INEQUALITY_A_B_TAC_50 `4` th;
6072 INEQUALITY_A_B_TAC_50 `5` th];;
6077 let EQUALITY_V_SY_TAC_5 =
6081 THEN MRESAL_TAC VECTOR_3_5[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 0`][ARITH_RULE`1<=5/\ 2<=5/\ 3<=5/\ 4<=5/\ 5<=5/\ 0 MOD 5= 0 /\ 1 MOD 5= 1 /\ 2 MOD 5= 2/\ 3 MOD 5= 3 /\ 4 MOD 5= 4 /\ 5 MOD 5=0 /\ ~(2=1)
6082 /\ SUC 0 MOD 5= 1 /\ SUC 1 MOD 5= 2 /\ SUC 2 MOD 5= 3/\ SUC 3 MOD 5= 4
6083 /\ SUC 4 MOD 5= 0 /\ SUC 5 MOD 5 = 1 /\ ~(3=1)/\ ~(1=0)`;SET_RULE`(a:num) IN (:num)`]
6088 let PROVE_V_SY_EQ_5_TAC=
6091 THEN ASM_REWRITE_TAC[ARITH_RULE`1<= 1 /\ 1<= 5`]
6092 THEN MRESAL_TAC VECTOR_3_5[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=5/\ 2<=5/\ 3<=5/\ 4<=5/\ 4 MOD 5= 4/\ 5 MOD 5=0 /\ 1 MOD 5= 1 /\ 2 MOD 5= 2/\ 3 MOD 5= 3 /\ ~(2=1)
6093 /\ SUC 4 MOD 5= 0 /\ SUC 1 MOD 5= 2 /\ SUC 2 MOD 5= 3/\ SUC 3 MOD 5= 4/\ ~(3=1)/\ ~(1=0)/\ 5<=5/\ 1<=1 /\ 1<=2 /\ 1<= 3 /\ 1<=4 /\ 1<=5`]
6096 let PROVE_E_SY_EQ_5_TAC =
6099 THEN MRESAL_TAC VECTOR_3_5[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 0`][ARITH_RULE`1<=5/\ 2<=5/\ 3<=5/\ 4<=5/\ 4 MOD 5= 4/\ 5 MOD 5=0 /\ 1 MOD 5= 1 /\ 2 MOD 5= 2/\ 3 MOD 5= 3 /\ ~(2=1)
6100 /\ SUC 4 MOD 5= 0 /\ SUC 1 MOD 5= 2 /\ SUC 2 MOD 5= 3/\ SUC 3 MOD 5= 4/\ ~(3=1)/\ ~(1=0)/\ 5<=5/\ 1<=1 /\ 1<=2 /\ 1<= 3 /\ 1<=4 /\ 1<=5
6101 /\ SUC 1=2 /\ SUC 0 =1/\ SUC 2=3/\ SUC 3=4 `; SET_RULE`(a:num) IN (:num)`]
6102 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`5`;`vv:num-> real^3`][ARITH_RULE`~(5=0)`]
6103 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`SUC 4`[ARITH_RULE`SUC 4 MOD 5=0/\ SUC 4=5`])
6104 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6112 let PROVE_E_SY_EQ_INV_5_TAC=
6113 fun (th:term) (th1:term) ->
6114 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`x':num`;th;`5`][ARITH_RULE`~(5=0)/\ 0 MOD 5=0/\ SUC 5 MOD 5=1 /\ 1 MOD 5=1 /\ 2 MOD 5=2 /\ 3 MOD 5=3/\ 4 MOD 5=4/\ 5 MOD 5=0`]
6116 THEN MRESAL_TAC VECTOR_3_5[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 4`;`(vv:num->real^3) 0`][ARITH_RULE`1<=5/\ 2<=5/\ 3<=5/\ 4<=5/\ 4 MOD 5= 4/\ 5 MOD 5=0 /\ 1 MOD 5= 1 /\ 2 MOD 5= 2/\ 3 MOD 5= 3 /\ ~(2=1)
6117 /\ SUC 4 MOD 5= 0 /\ SUC 1 MOD 5= 2 /\ SUC 2 MOD 5= 3/\ SUC 3 MOD 5= 4/\ ~(3=1)/\ ~(1=0)/\ 5<=5/\ 1<=1 /\ 1<=2 /\ 1<= 3 /\ 1<=4 /\ 1<=5
6118 /\ SUC 1=2 /\ SUC 0 =1/\ SUC 2=3/\ SUC 3=4/\ SUC 4=5 `; SET_RULE`(a:num) IN (:num)`]
6123 let V_E_FF_CASE_5_pro_cs=prove_by_refinement(
6124 `(s=let upperbd = &6 in
6125 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
6126 else (if {i MOD k,j MOD k}={0,1} then p
6127 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
6128 mk_unadorned_v39 5 (#0.616) (a_pro 5 (&2 * h0) (&2) (&2 * h0)) (a_pro 5 sqrt8 (&2 * h0) upperbd))
6130 /\ scs_k_v39 s= dimindex(:M)
6131 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 4;(vv:num->real^3) 0]:real^3^M= v
6132 /\ matvec (v:real^3^M) =a
6134 V_SY (v:real^3^M)=IMAGE vv (:num)/\
6135 E_SY (v:real^3^M)=IMAGE (\i. {vv i, vv (SUC i)}) (:num)/\
6136 F_SY (v:real^3^M)=IMAGE (\i. vv i,vv (SUC i)) (:num)`,
6141 THEN REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
6142 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39]
6143 THEN REPEAT STRIP_TAC;
6145 REWRITE_TAC[V_SY;rows]
6146 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
6147 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 5)<=> (i=1\/ i=2\/ i=3 \/ i=4\/ i=5)`] THEN ASSUME_TAC (SYM th))
6150 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
6156 EQUALITY_V_SY_TAC_5 `1`;
6157 EQUALITY_V_SY_TAC_5 `2`;
6158 EQUALITY_V_SY_TAC_5 `3`;
6159 EQUALITY_V_SY_TAC_5 `4`;
6160 EQUALITY_V_SY_TAC_5 `0`];
6163 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)<=> (1<= i /\ i<= 5)`]
6164 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`5`;`vv:num-> real^3`][ARITH_RULE`~(5=0)`]
6165 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num`)
6166 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
6167 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
6168 THEN MP_TAC(ARITH_RULE`x' MOD 5 < 5 ==> x' MOD 5 =0 \/ x' MOD 5 = 1\/ x' MOD 5 = 2 \/ x' MOD 5 =3 \/ x' MOD 5 =4`)
6171 PROVE_V_SY_EQ_5_TAC`5`;
6172 PROVE_V_SY_EQ_5_TAC`1`;
6173 PROVE_V_SY_EQ_5_TAC`2`;
6174 PROVE_V_SY_EQ_5_TAC`3`;
6175 PROVE_V_SY_EQ_5_TAC`4`];
6177 REWRITE_TAC[E_SY;rows]
6178 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
6179 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 5)<=> (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)`] THEN ASSUME_TAC (SYM th))
6180 THEN REPEAT STRIP_TAC
6181 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
6183 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
6187 THEN ASM_REWRITE_TAC[]
6189 PROVE_E_SY_EQ_5_TAC `1`;
6190 PROVE_E_SY_EQ_5_TAC `2`;
6191 PROVE_E_SY_EQ_5_TAC `3`;
6192 PROVE_E_SY_EQ_5_TAC `4`;
6193 PROVE_E_SY_EQ_5_TAC `0`];
6196 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)<=> (1<= i /\ i<= 5)`]
6197 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`5`;`vv:num-> real^3`][ARITH_RULE`~(5=0)`]
6198 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num` THEN MRESA1_TAC th`SUC x':num`)
6199 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
6200 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
6201 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
6202 THEN MP_TAC(ARITH_RULE`x' MOD 5 < 5==> x' MOD 5 =0 \/ x' MOD 5 = 1\/ x' MOD 5 = 2 \/ x' MOD 5 =3 \/ x' MOD 5 =4`)
6205 PROVE_E_SY_EQ_INV_5_TAC `5` `5`;
6206 PROVE_E_SY_EQ_INV_5_TAC `1` `1`;
6207 PROVE_E_SY_EQ_INV_5_TAC `2` `2`;
6208 PROVE_E_SY_EQ_INV_5_TAC `3` `3`;
6209 PROVE_E_SY_EQ_INV_5_TAC `4` `4`;];
6211 REWRITE_TAC[F_SY;rows]
6212 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
6213 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 5)<=> (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)`] THEN ASSUME_TAC (SYM th))
6214 THEN REPEAT STRIP_TAC
6215 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
6217 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
6221 THEN ASM_REWRITE_TAC[]
6223 PROVE_E_SY_EQ_5_TAC `1`;
6224 PROVE_E_SY_EQ_5_TAC `2`;
6225 PROVE_E_SY_EQ_5_TAC `3`;
6226 PROVE_E_SY_EQ_5_TAC `4`;
6227 PROVE_E_SY_EQ_5_TAC `0`];
6230 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)<=> (1<= i /\ i<= 5)`]
6231 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`5`;`vv:num-> real^3`][ARITH_RULE`~(5=0)`]
6232 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num` THEN MRESA1_TAC th`SUC x':num`)
6233 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
6234 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
6235 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
6236 THEN MP_TAC(ARITH_RULE`x' MOD 5 < 5==> x' MOD 5 =0 \/ x' MOD 5 = 1\/ x' MOD 5 = 2 \/ x' MOD 5 =3 \/ x' MOD 5 =4`)
6239 PROVE_E_SY_EQ_INV_5_TAC `5` `5`;
6240 PROVE_E_SY_EQ_INV_5_TAC `1` `1`;
6241 PROVE_E_SY_EQ_INV_5_TAC `2` `2`;
6242 PROVE_E_SY_EQ_INV_5_TAC `3` `3`;
6243 PROVE_E_SY_EQ_INV_5_TAC `4` `4`;];
6252 let IN_NOT_EMPTY_CASE_5_pro_cs=prove_by_refinement(
6253 `(s=let upperbd = &6 in
6254 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
6255 else (if {i MOD k,j MOD k}={0,1} then p
6256 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
6257 mk_unadorned_v39 5 (#0.616) (a_pro 5 (&2 * h0) (&2) (&2 * h0)) (a_pro 5 sqrt8 (&2 * h0) upperbd))
6259 /\ scs_k_v39 s= dimindex(:M)
6260 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 4;(vv:num->real^3) 0]:real^3^M= v
6261 /\ matvec (v:real^3^M) =a
6263 a IN {matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\ CONDITION2_SY v }`,
6266 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;IN_ELIM_THM;CONDITION1_SY;CONDITION2_SY]
6267 THEN REPEAT STRIP_TAC
6268 THEN POP_ASSUM MP_TAC
6269 THEN POP_ASSUM MP_TAC
6270 THEN POP_ASSUM MP_TAC
6271 THEN POP_ASSUM MP_TAC
6272 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`~(5<=3)`;mk_unadorned_v39;CS_ADJ]
6273 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[IN]
6274 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`]
6275 THEN REPEAT STRIP_TAC
6276 THEN ASM_REWRITE_TAC[]
6277 THEN EXISTS_TAC`v:real^3^M`
6281 REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
6282 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 5)<=> (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)`] THEN ASSUME_TAC (SYM th))
6283 THEN REPEAT STRIP_TAC
6285 IN_BALL_ANNUUS_TAC_5 `(1:num)`;
6286 IN_BALL_ANNUUS_TAC_5 `(2:num)`;
6287 IN_BALL_ANNUUS_TAC_5 `(3:num)`;
6288 IN_BALL_ANNUUS_TAC_5 `(4:num)`;
6289 IN_BALL_ANNUUS_TAC_5 `(0:num)`];
6293 REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
6294 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 5)<=> (i=1\/ i=2\/ i=3 \/ i=4 \/ i=5)`] THEN ASSUME_TAC (SYM th))
6295 THEN REPEAT DISCH_TAC
6299 INEQUALITY_A_B_TAC_5 `1`;
6300 INEQUALITY_A_B_TAC_5 `2`;
6301 INEQUALITY_A_B_TAC_5 `3`;
6302 INEQUALITY_A_B_TAC_5 `4`;
6303 INEQUALITY_A_B_TAC_5 `0` ];
6307 MP_TAC V_E_FF_CASE_5_pro_cs
6308 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;CS_ADJ]
6309 THEN POP_ASSUM MP_TAC
6310 THEN POP_ASSUM MP_TAC
6311 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
6312 THEN REPEAT RESA_TAC;
6327 let NOT_EMPTY_CASE_5_pro_cs=prove_by_refinement(
6328 `(s=let upperbd = &6 in
6329 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
6330 else (if {i MOD k,j MOD k}={0,1} then p
6331 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
6332 mk_unadorned_v39 5 (#0.616) (a_pro 5 (&2 * h0) (&2) (&2 * h0)) (a_pro 5 sqrt8 (&2 * h0) upperbd))
6334 /\ scs_k_v39 s= dimindex(:M)
6336 ~({matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\ CONDITION2_SY v }={})`
6340 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;]
6342 THEN ABBREV_TAC`v=vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 4;(vv:num->real^3) 0]:real^3^M`
6343 THEN ABBREV_TAC`a=matvec (v:real^3^M) `
6344 THEN EXISTS_TAC`a:real^(M,3)finite_product`
6345 THEN MATCH_MP_TAC IN_NOT_EMPTY_CASE_5_pro_cs
6346 THEN ASM_REWRITE_TAC[]
6351 let TAUSTAR_EQ_TAU_STAR_5_pro_cs=prove_by_refinement(
6352 `(let upperbd = &6 in
6353 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
6354 else (if {i MOD k,j MOD k}={0,1} then p
6355 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
6356 mk_unadorned_v39 5 (#0.616) (a_pro 5 (&2 * h0) (&2) (&2 * h0)) (a_pro 5 sqrt8 (&2 * h0) upperbd))=s
6358 /\ scs_k_v39 s= dimindex(:M)
6359 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 4;(vv:num->real^3) 0]:real^3^M= v
6360 /\ matvec (v:real^3^M) =a
6361 /\ stable_sy((scs_k_v39 s),(scs_d_v39 s),(0..scs_k_v39 s - 1),
6362 (change_type_v3 (scs_a_v39 s)),
6363 (change_type_v3 (scs_b_v39 s)),
6364 (change_type_v2 (scs_J_v39 s)(scs_k_v39 s)),
6365 (\i. (1 + i) MOD scs_k_v39 s))=s1
6366 ==> taustar_v39 s vv = tau_star s1 a`,
6370 THEN MP_TAC V_E_FF_CASE_5_pro_cs
6372 THEN SUBGOAL_THEN`scs_k_v39 s =5` ASSUME_TAC;
6375 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;];
6379 THEN ASM_REWRITE_TAC[taustar_v39;tau_star]
6380 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;]
6381 THEN ASM_SIMP_TAC[dsv_J_empty]
6382 THEN MP_TAC SCS_5_pro_cs_IS_TRI_STABLE
6383 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF]
6385 THEN MRESAL_TAC stable_sy_explicit[`(scs_k_v39 s)`;`(scs_d_v39 s)`;`(0..scs_k_v39 s - 1)`;`
6386 (change_type_v3 (scs_a_v39 s))`;`
6387 (change_type_v3 (scs_b_v39 s))`;`
6388 (change_type_v2 (scs_J_v39 s)(scs_k_v39 s))`;`
6389 (\i. (1 + i) MOD scs_k_v39 s)`][LET_DEF;LET_END_DEF;d_fun]
6390 THEN SUBGOAL_THEN`J1_SY (s1:stable_sy)={}` ASSUME_TAC;
6392 ASM_REWRITE_TAC[J1_SY;]
6394 THEN REWRITE_TAC[scs_J_v39_explicit;LET_DEF;LET_END_DEF;mk_unadorned_v39;change_type_v2;SET_RULE`a IN {{i, j} | F}<=> F`]
6397 ASM_REWRITE_TAC[SUM_CLAUSES;REAL_ARITH`a* &0= &0 /\a + &0=a`]
6399 THEN REWRITE_TAC[MATVEC_VECMATS_ID;VECMATS_MATVEC_ID]
6400 THEN ASM_REWRITE_TAC[REAL_ARITH`A-B=A-C<=>B=C`]
6401 THEN MATCH_MP_TAC dsv_J_empty
6403 THEN REWRITE_TAC[scs_J_v39_explicit;LET_DEF;LET_END_DEF;mk_unadorned_v39;change_type_v2;SET_RULE`a IN {{i, j} | F}<=> F`]
6412 let SCS_A_B__EQ_MOD_5_pro_cs=prove(
6413 `s=(let upperbd = &6 in
6414 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
6415 else (if {i MOD k,j MOD k}={0,1} then p
6416 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
6417 mk_unadorned_v39 5 (#0.616) (a_pro 5 (&2 * h0) (&2) (&2 * h0)) (a_pro 5 sqrt8 (&2 * h0) upperbd))
6419 !i j. scs_a_v39 s i j = scs_a_v39 s (i MOD 5) (j MOD 5)/\
6420 scs_b_v39 s i j = scs_b_v39 s (i MOD 5) (j MOD 5)`,
6422 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;CS_ADJ]
6423 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`5`][ARITH_RULE`~(5=0)`]
6424 THEN MRESAL_TAC MOD_MOD_REFL[`j:num`;`5`][ARITH_RULE`~(5=0)`]
6425 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1`;ADD1]
6426 THEN MRESAL_TAC MOD_ADD_MOD[`i:num`;`1:num`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1`;ADD1]);;
6430 let VV_IN_BALL_ANNULUS_TAC_5=
6432 REPLICATE_TAC 8 (POP_ASSUM MP_TAC)
6433 THEN POP_ASSUM(fun th-> MRESAL1_TAC th so [ARITH_RULE`1<=1 /\ 1<=2 /\1<=3 /\ 1<= 4/\ 1<=5 /\ 2<=5/\ 3<=5/\ 4<=5/\ 5<=5/\ ~(1=0)/\ ~(2=0) /\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2)/\ ~(4=0) /\ ~(4=1)/\ ~(4=2)/\ ~(4=3)`] )
6437 let PROVE_INEQUALITY_TAC_50=
6438 fun (so:term) (so1:term)->
6439 REPLICATE_TAC 7(POP_ASSUM MP_TAC)
6440 THEN POP_ASSUM(fun th-> MRESAL_TAC th[so;so1][ARITH_RULE`1<=5 /\ 5<=5/\ 1<=1 /\ 1<=5/\ 1<=2 /\ 2<=5/\1<=3 /\ 3<=5/\ 1<=4/\ 4<=5`])
6441 THEN POP_ASSUM( fun th->
6442 POP_ASSUM( fun th1->
6444 THEN MP_TAC th THEN MP_TAC th1
6445 THEN POP_ASSUM(fun th2-> ONCE_REWRITE_TAC[th2]
6446 THEN POP_ASSUM(fun th3-> MRESAL1_TAC th3`5`[ARITH_RULE`4 MOD 4=0`]
6447 THEN MRESAL1_TAC th3`1`[ARITH_RULE`1 MOD 5=1/\ ~(1=0)`]
6448 THEN MRESAL1_TAC th3`2`[ARITH_RULE`2 MOD 5=2/\ ~(2=0)/\ ~(2=1)`]
6449 THEN MRESAL1_TAC th3`3`[ARITH_RULE`3 MOD 5=3/\ ~(3=0)/\ ~(3=1)/\ ~(3=2)`]
6450 THEN MRESAL1_TAC th3`4`[ARITH_RULE`4 MOD 5=4/\ ~(4=0)/\ ~(4=1)/\ ~(4=2)/\ ~(4=3)`])
6451 THEN MRESAL1_TAC th2`5`[ARITH_RULE`5 MOD 5=0`])
6453 THEN MP_TAC SCS_A_B__EQ_MOD_5_pro_cs
6454 THEN ASM_REWRITE_TAC[]
6456 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
6457 THEN ASM_REWRITE_TAC[ARITH_RULE`5 MOD 5=0/\ 1 MOD 5=1/\ 2 MOD 5=2 /\ 3 MOD 5=3 /\ 4 MOD 5=4`]
6465 let PROVE_INEQUALITY_TAC_5=
6467 MP_TAC(ARITH_RULE`(j MOD 5<5)==> (j MOD 5=0) \/ (j MOD 5=1) \/ (j MOD 5=2)\/ (j MOD 5=3)\/ (j MOD 5=4) `)
6470 PROVE_INEQUALITY_TAC_50 th `5`;
6471 PROVE_INEQUALITY_TAC_50 th `1`;
6472 PROVE_INEQUALITY_TAC_50 th `2`;
6473 PROVE_INEQUALITY_TAC_50 th `3`;
6474 PROVE_INEQUALITY_TAC_50 th `4`];;
6479 let V_SY_EQ_IMAGE_VV_TAC5=
6483 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`;ARITH_RULE`1 MOD 5=1 /\ ~(1=0) /\ 2 MOD 5=2 /\ ~(2=0)/\ ~(2=1)/\ 3 MOD 5=3 /\ ~(3=0)/\ ~(3=1)/\ ~(3=2)/\ 4 MOD 5=4/\ 5 MOD 5=0/\ ~(4=0)/\ ~(4=1)/\ ~(4=2)/\ ~(4=3)`];;
6489 let PROVE_E_SY_EQ_MOD_TAC_5=
6492 THEN ASM_REWRITE_TAC[ARITH_RULE`~(3=0)/\ ~(3=1)/\ ~(3=2)/\ ~(2=0)/\ ~(2=1)/\ ~(1=0)/\ ~(4=0) /\ ~(4=1) /\ ~(4=2) /\ ~(4=3) `]
6501 let PROOF_E_EQ_TAC_5=
6504 THEN ASM_REWRITE_TAC[ARITH_RULE`~(1=0)/\ 1 MOD 5=1/\ SUC 1=2/\ 2 MOD 5=2/\ ~(2=0)/\ ~(2=1)/\ SUC 2=3 /\ 3 MOD 5=3/\ ~(3=0) /\ ~(3=1)/\ ~(3=2)/\ SUC 3=4
6505 /\ ~(4=0) /\ ~(4=1) /\ ~(4=2) /\ ~(4=3) /\ 4 MOD 5=4/\ 5 MOD 5=0/\ SUC 0=1
6506 /\ SUC 5=6/\ SUC 4=5/\ 6 MOD 5=1`;SET_RULE`(a:num) IN (:num)`]
6510 let PROVE_E_SY_EQ_IMAGE_VV_5=
6513 THEN ASM_REWRITE_TAC[ARITH_RULE`~(1=0)`]
6514 THEN MRESAL_TAC MOD_ADD_MOD[`x':num`;`1:num`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1/\ 1<=5/\ 5<=5/\ 0+1=1`;ADD1]
6515 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`~(1=0)/\ 4 MOD 5=4/\ 5 MOD 5=0 /\ 0+1=1/\ 1<=1 /\ 1+1=2/\ 2 MOD 5=2/\ ~(2=0)/\ ~(2=1)/\ 2+1=3/\ 3 MOD 5=3
6516 /\ ~(3=0)/\ ~(3=1)/\ ~(3=2)/\1<=2/\ 2<=5 /\ 3<=5 /\ 4<=5/\ 1<=4/\ 4+1=5
6517 /\ 1<=3/\ 3<=4/\ 3+1=4/\ ~(4=0) /\ ~(4=1) /\ ~(4=2) /\ ~(4=3)`])
6526 let IN_NOT_EMPTY_B1_SY_5_pro_cs=prove_by_refinement(
6527 `(let upperbd = &6 in
6528 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
6529 else (if {i MOD k,j MOD k}={0,1} then p
6530 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
6531 mk_unadorned_v39 5 (#0.616) (a_pro 5 (&2 * h0) (&2) (&2 * h0)) (a_pro 5 sqrt8 (&2 * h0) upperbd))=s/\
6532 scs_k_v39 s= dimindex(:M)/\
6533 matvec (v:real^3^M) =a/\
6534 (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\
6535 CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\
6538 if i MOD scs_k_v39 s = 0 then row 5 v else
6539 if i MOD scs_k_v39 s = 1 then row 1 v else
6540 if i MOD scs_k_v39 s = 2 then row 2 v else
6541 if i MOD scs_k_v39 s = 3 then row 3 v else
6543 ==> vv IN BBs_v39 s`,
6547 REWRITE_TAC[CONDITION1_SY;CONDITION2_SY;change_type_v3]
6548 THEN REPEAT STRIP_TAC
6549 THEN SUBGOAL_THEN`scs_k_v39 s =5` ASSUME_TAC;
6551 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;];
6553 REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
6554 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
6556 THEN REPEAT STRIP_TAC)
6557 THEN POP_ASSUM MP_TAC
6558 THEN ASM_REWRITE_TAC[th;IN]
6560 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;]
6562 ASM_REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
6563 THEN REPEAT STRIP_TAC
6564 THEN ASM_REWRITE_TAC[]
6565 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
6566 THEN MP_TAC(ARITH_RULE`x' MOD 5<5 ==> x' MOD 5 = 0 \/ x' MOD 5 = 1 \/ x' MOD 5 = 2 \/ x' MOD 5 = 3\/ x' MOD 5 = 4`)
6569 VV_IN_BALL_ANNULUS_TAC_5 `5`;
6570 VV_IN_BALL_ANNULUS_TAC_5 `1`;
6571 VV_IN_BALL_ANNULUS_TAC_5 `2`;
6572 VV_IN_BALL_ANNULUS_TAC_5 `3`;
6573 VV_IN_BALL_ANNULUS_TAC_5 `4`];
6575 ASM_REWRITE_TAC[periodic]
6577 THEN MRESAL_TAC MOD_EQ[`i+5:num`;`i:num`;`5:num`;`1`][ARITH_RULE`1*A=A`];
6581 THEN SUBGOAL_THEN`!i. (vv:num->real^3) i= vv (i MOD 5)` ASSUME_TAC;
6582 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
6584 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`5`][ARITH_RULE`~(5=0)`];
6586 THEN POP_ASSUM MP_TAC
6587 THEN MRESAL_TAC DIVISION[`i:num`;`5`][ARITH_RULE`~(5=0)`]
6588 THEN MRESAL_TAC DIVISION[`j:num`;`5`][ARITH_RULE`~(5=0)`]
6589 THEN MP_TAC(ARITH_RULE`(i MOD 5<5)==> (i MOD 5=0) \/ (i MOD 5=1) \/ (i MOD 5=2)\/ (i MOD 5=3) \/ (i MOD 5=4)`)
6592 PROVE_INEQUALITY_TAC_5 `5`;
6593 PROVE_INEQUALITY_TAC_5 `1`;
6594 PROVE_INEQUALITY_TAC_5 `2`;
6595 PROVE_INEQUALITY_TAC_5 `3`;
6596 PROVE_INEQUALITY_TAC_5 `4`];
6599 THEN ASM_REWRITE_TAC[ARITH_RULE`~(5<=3)`]
6601 THEN SUBGOAL_THEN`V_SY (v:real^3^M) = IMAGE vv (:num)`ASSUME_TAC;
6602 ASM_REWRITE_TAC[V_SY;rows;IMAGE;EXTENSION;IN_ELIM_THM]
6605 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
6608 V_SY_EQ_IMAGE_VV_TAC5 `1`;
6609 V_SY_EQ_IMAGE_VV_TAC5 `2`;
6610 V_SY_EQ_IMAGE_VV_TAC5 `3`;
6611 V_SY_EQ_IMAGE_VV_TAC5 `4`;
6612 V_SY_EQ_IMAGE_VV_TAC5 `5`];
6616 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
6617 THEN MP_TAC(ARITH_RULE`(x' MOD 5<5)==> (x' MOD 5=0) \/ (x' MOD 5=1) \/ (x' MOD 5=2)\/ (x' MOD 5=3)\/ (x' MOD 5=4)`)
6620 PROVE_E_SY_EQ_MOD_TAC_5 `5`;
6621 PROVE_E_SY_EQ_MOD_TAC_5 `1`;
6622 PROVE_E_SY_EQ_MOD_TAC_5 `2`;
6623 PROVE_E_SY_EQ_MOD_TAC_5 `3`;
6624 PROVE_E_SY_EQ_MOD_TAC_5 `4`];
6625 SUBGOAL_THEN`E_SY (v:real^3^M) = IMAGE (\i. {vv i, vv (SUC i)}) (:num)`ASSUME_TAC;
6626 ASM_REWRITE_TAC[E_SY;rows;IMAGE;]
6627 THEN ONCE_REWRITE_TAC[EXTENSION;]
6628 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
6633 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
6636 PROOF_E_EQ_TAC_5`1`;
6637 PROOF_E_EQ_TAC_5`2`;
6638 PROOF_E_EQ_TAC_5`3`;
6639 PROOF_E_EQ_TAC_5`4`;
6640 PROOF_E_EQ_TAC_5`5`];
6644 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
6645 THEN MP_TAC(ARITH_RULE`(x' MOD 5<5)==> (x' MOD 5=0) \/ (x' MOD 5=1) \/ (x' MOD 5=2)\/ (x' MOD 5=3) \/ (x' MOD 5=4)`)
6648 PROVE_E_SY_EQ_IMAGE_VV_5 `5`;
6649 PROVE_E_SY_EQ_IMAGE_VV_5 `1`;
6650 PROVE_E_SY_EQ_IMAGE_VV_5 `2`;
6651 PROVE_E_SY_EQ_IMAGE_VV_5 `3`;
6652 PROVE_E_SY_EQ_IMAGE_VV_5 `4`];
6654 SUBGOAL_THEN`F_SY (v:real^3^M) = IMAGE (\i. (vv i, vv (SUC i))) (:num)`ASSUME_TAC;
6655 ASM_REWRITE_TAC[F_SY;rows;IMAGE;]
6656 THEN ONCE_REWRITE_TAC[EXTENSION;]
6657 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
6661 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
6664 PROOF_E_EQ_TAC_5`1`;
6665 PROOF_E_EQ_TAC_5`2`;
6666 PROOF_E_EQ_TAC_5`3`;
6667 PROOF_E_EQ_TAC_5`4`;
6668 PROOF_E_EQ_TAC_5`5`];
6672 THEN MRESAL_TAC DIVISION[`x':num`;`5`][ARITH_RULE`~(5=0)`]
6673 THEN MP_TAC(ARITH_RULE`(x' MOD 5<5)==> (x' MOD 5=0) \/ (x' MOD 5=1) \/ (x' MOD 5=2)\/ (x' MOD 5=3) \/ (x' MOD 5=4)`)
6676 PROVE_E_SY_EQ_IMAGE_VV_5 `5`;
6677 PROVE_E_SY_EQ_IMAGE_VV_5 `1`;
6678 PROVE_E_SY_EQ_IMAGE_VV_5 `2`;
6679 PROVE_E_SY_EQ_IMAGE_VV_5 `3`;
6680 PROVE_E_SY_EQ_IMAGE_VV_5 `4`];
6684 POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
6685 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
6686 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
6687 THEN ASM_REWRITE_TAC[];
6697 let XWITCCN_CASE_5_pro_cs=prove_by_refinement(
6698 `(let upperbd = &6 in
6699 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
6700 else (if {i MOD k,j MOD k}={0,1} then p
6701 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
6702 mk_unadorned_v39 5 (#0.616) (a_pro 5 (&2 * h0) (&2) (&2 * h0)) (a_pro 5 sqrt8 (&2 * h0) upperbd))=s
6703 /\ vv IN BBs_v39 s /\
6704 taustar_v39 s vv < &0
6705 /\ scs_k_v39 s= dimindex(:M)
6706 ==> ~(BBprime_v39 s = {})`,
6711 THEN MP_TAC SCS_5_pro_cs_IS_TRI_STABLE
6713 THEN MP_TAC NOT_EMPTY_CASE_5_pro_cs
6715 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?a. a IN A`]
6716 THEN ABBREV_TAC`s1 =stable_sy((scs_k_v39 s),(scs_d_v39 s),(0..scs_k_v39 s - 1),
6717 (change_type_v3 (scs_a_v39 s)),
6718 (change_type_v3 (scs_b_v39 s)),
6719 (change_type_v2 (scs_J_v39 s)(scs_k_v39 s)),
6720 (\i. (1 + i) MOD scs_k_v39 s))`
6721 THEN MRESA_TAC stable_sy_explicit[`(scs_k_v39 s)`;`(scs_d_v39 s)`;`(0..scs_k_v39 s - 1)`;`
6722 (change_type_v3 (scs_a_v39 s))`;`
6723 (change_type_v3 (scs_b_v39 s))`;`
6724 (change_type_v2 (scs_J_v39 s)(scs_k_v39 s))`;`
6725 (\i. (1 + i) MOD scs_k_v39 s)`]
6726 THEN SUBGOAL_THEN`scs_k_v39 s =5` ASSUME_TAC;
6729 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(5<=3)`;IN;mk_unadorned_v39;];
6732 REPLICATE_TAC 11 (POP_ASSUM MP_TAC)
6733 THEN REWRITE_TAC[th]
6735 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
6737 THEN REPEAT RESA_TAC)
6738 THEN MRESAL_TAC (GEN_ALL HDPLYGY)[`(scs_k_v39 s)`;`s1:stable_sy`][k_sy;B_SY1;ARITH_RULE`2<5`;]
6739 THEN POP_ASSUM (fun th->
6741 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
6744 THEN REWRITE_TAC[BBprime_v39;IN]
6745 THEN ABBREV_TAC`( vv1 i =
6746 if i MOD scs_k_v39 s = 0 then row 5 v else
6747 if i MOD scs_k_v39 s = 1 then row 1 v else
6748 if i MOD scs_k_v39 s = 2 then row 2 v else
6749 if i MOD scs_k_v39 s = 3 then row 3 v else
6750 row 4 (v:real^3^M))`
6751 THEN EXISTS_TAC`vv1:num->real^3`
6754 ONCE_REWRITE_TAC[GSYM IN]
6755 THEN MATCH_MP_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_5_pro_cs)
6756 THEN EXISTS_TAC`x:real^(M,3)finite_product`
6757 THEN EXISTS_TAC`v:real^3^M`
6758 THEN ASM_REWRITE_TAC[]
6759 THEN POP_ASSUM MP_TAC
6762 SUBGOAL_THEN`vector [ vv1 1; vv1 2; (vv1:num->real^3) 3;vv1 4;vv1 0] = v:real^3^M`
6765 POP_ASSUM(fun th-> REWRITE_TAC[GSYM th])
6766 THEN ASM_REWRITE_TAC[ARITH_RULE`1 MOD 5=1/\ 2 MOD 5=2/\ 3 MOD 5=3/\ 0 MOD 5=0 /\ ~(1=0)/\ ~(2=0)/\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2) /\ ~(4=0) /\ ~(4=1) /\ ~(4=2) /\ ~(4=3)/\ 4 MOD 5=4`;]
6767 THEN ONCE_REWRITE_TAC[CART_EQ]
6768 THEN ASM_REWRITE_TAC[ARITH_RULE`1<=i/\ i<=5 <=>i=1\/ i=2\/ i=3\/ i=4\/ i=5`]
6769 THEN REPEAT RESA_TAC
6771 ASM_SIMP_TAC[row;vector; LAMBDA_BETA; DIMINDEX_3; LENGTH; ARITH] THEN
6772 REWRITE_TAC[num_CONV `4`;num_CONV `3`;num_CONV `2`; num_CONV `1`; EL; HD; TL;]
6773 THEN ASM_SIMP_TAC[CART_EQ; DIMINDEX_3; FORALL_3; VEC_COMPONENT; VECTOR_3; ARITH;row;LAMBDA_BETA];
6778 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[GSYM IN]
6779 THEN REPEAT STRIP_TAC
6780 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_5_pro_cs)
6781 [`x:real^(M,3)finite_product`;`v:real^3^M`;`vv1:num->real^3`;`s:scs_v39`]
6782 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_5_pro_cs)[`v:real^3^M`;`s:scs_v39`;`vv1:num->real^3`;`s1:stable_sy`;`x:real^(M,3)finite_product`]
6783 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_5_pro_cs)
6784 [`vector [ww 1; ww 2; ww 3; ww 4; ww 0]:real^3^M`;`s:scs_v39`;`ww:num->real^3`;`s1:stable_sy`;`matvec(vector [ww 1; ww 2; ww 3; ww 4; ww 0]:real^3^M):real^(M,3)finite_product`;]
6785 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_CASE_5_pro_cs)[`ww:num->real^3`;`vector [ww 1; ww 2; ww 3; ww 4; ww 0]:real^3^M`;`matvec(vector [ww 1; ww 2; ww 3; ww 4;ww 0]:real^3^M):real^(M,3)finite_product`;`s:scs_v39`;]
6786 THEN REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
6787 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6788 THEN MRESA1_TAC th `matvec(vector [ww 1; ww 2; ww 3; ww 4;ww 0]:real^3^M):real^(M,3)finite_product`);
6790 MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_5_pro_cs)
6791 [`x:real^(M,3)finite_product`;`v:real^3^M`;`vv1:num->real^3`;`s:scs_v39`]
6792 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_5_pro_cs)[`v:real^3^M`;`s:scs_v39`;`vv1:num->real^3`;`s1:stable_sy`;`x:real^(M,3)finite_product`]
6793 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_5_pro_cs)
6794 [`vector [vv 1; vv 2; vv 3; vv 4;vv 0]:real^3^M`;`s:scs_v39`;`vv:num->real^3`;`s1:stable_sy`;`matvec(vector [vv 1; vv 2; vv 3; vv 4; vv 0]:real^3^M):real^(M,3)finite_product`;]
6795 THEN REPLICATE_TAC 23 (POP_ASSUM MP_TAC)
6796 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC THEN MP_TAC th)
6797 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_CASE_5_pro_cs)[`vv:num->real^3`;`vector [vv 1; vv 2; vv 3; vv 4; vv 0]:real^3^M`;`matvec(vector [vv 1; vv 2; vv 3; vv 4; vv 0]:real^3^M):real^(M,3)finite_product`;`s:scs_v39`;]
6798 THEN REPLICATE_TAC 6 (POP_ASSUM MP_TAC)
6799 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6800 THEN MRESA1_TAC th `matvec(vector [vv 1; vv 2; vv 3; vv 4; vv 0]:real^3^M):real^(M,3)finite_product`)
6801 THEN POP_ASSUM MP_TAC
6802 THEN POP_ASSUM MP_TAC
6803 THEN REAL_ARITH_TAC;
6810 let V_E_FF_CASE_4_3=prove_by_refinement(
6811 `(s=let upperbd = &6 in
6812 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
6813 else (if {i MOD k,j MOD k}={0,1} then p
6814 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
6815 mk_unadorned_v39 4 (#0.467) (cs_adj 4 (&2) (&3)) (cs_adj 4 (&2 * h0) upperbd))
6817 /\ scs_k_v39 s= dimindex(:M)
6818 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 0]:real^3^M= v
6819 /\ matvec (v:real^3^M) =a
6821 V_SY (v:real^3^M)=IMAGE vv (:num)/\
6822 E_SY (v:real^3^M)=IMAGE (\i. {vv i, vv (SUC i)}) (:num)/\
6823 F_SY (v:real^3^M)=IMAGE (\i. vv i,vv (SUC i)) (:num)`,
6828 THEN REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
6829 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39]
6830 THEN REPEAT STRIP_TAC;
6832 REWRITE_TAC[V_SY;rows]
6833 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
6834 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 4)<=> (i=1\/ i=2\/ i=3 \/ i=4)`] THEN ASSUME_TAC (SYM th))
6837 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
6843 PROVE_EQ_V_SY_TAC_4 `1`;
6844 PROVE_EQ_V_SY_TAC_4 `2`;
6845 PROVE_EQ_V_SY_TAC_4 `3`;
6846 PROVE_EQ_V_SY_TAC_4 `0`];
6849 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4)<=> (1<= i /\ i<= 4)`]
6850 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`4`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`]
6851 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num`)
6852 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
6853 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
6854 THEN MP_TAC(ARITH_RULE`x' MOD 4 < 4==> x' MOD 4 =0 \/ x' MOD 4 = 1\/ x' MOD 4 = 2 \/ x' MOD 4 =3`)
6857 PROVE_V_SY_EQ_TAC `4`;
6858 PROVE_V_SY_EQ_TAC `1`;
6859 PROVE_V_SY_EQ_TAC `2`;
6860 PROVE_V_SY_EQ_TAC `3`];
6862 REWRITE_TAC[E_SY;rows]
6863 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
6864 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 4)<=> (i=1\/ i=2\/ i=3 \/ i=4)`] THEN ASSUME_TAC (SYM th))
6865 THEN REPEAT STRIP_TAC
6866 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
6868 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
6872 THEN ASM_REWRITE_TAC[]
6874 PROVE_E_SY_EQ_TAC `1`;
6875 PROVE_E_SY_EQ_TAC `2`;
6877 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 4 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
6878 /\ SUC 4 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0/\ ~(3=1)/\ ~(1=0)/\ SUC 1=2/\ SUC 0=1 /\ SUC 2= 3/\ SUC 3=4`]
6879 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`4`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`]
6880 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`SUC 3`[ARITH_RULE`SUC 3 MOD 4=0/\ SUC 3=4`])
6881 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6883 PROVE_E_SY_EQ_TAC `0`];
6886 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4)<=> (1<= i /\ i<= 4)`]
6887 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`4`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`]
6888 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num` THEN MRESA1_TAC th`SUC x':num`)
6889 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
6890 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
6891 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
6892 THEN MP_TAC(ARITH_RULE`x' MOD 4 < 4==> x' MOD 4 =0 \/ x' MOD 4 = 1\/ x' MOD 4 = 2 \/ x' MOD 4 =3`)
6895 PROOF_E_EQ_IMAGE_4 `4`;
6896 PROOF_E_EQ_IMAGE_4 `1`;
6897 PROOF_E_EQ_IMAGE_4 `2`;
6898 PROOF_E_EQ_IMAGE_4 `3`];
6900 REWRITE_TAC[F_SY;rows]
6901 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
6902 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 4)<=> (i=1\/ i=2\/ i=3 \/ i=4)`] THEN ASSUME_TAC (SYM th))
6903 THEN REPEAT STRIP_TAC
6904 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
6906 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
6910 THEN ASM_REWRITE_TAC[]
6912 PROVE_E_SY_EQ_TAC `1`;
6913 PROVE_E_SY_EQ_TAC `2`;
6915 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 4 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
6916 /\ SUC 4 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0/\ ~(3=1)/\ ~(1=0)/\ SUC 1=2/\ SUC 0=1 /\ SUC 2= 3/\ SUC 3=4`]
6917 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`4`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`]
6918 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`SUC 3`[ARITH_RULE`SUC 3 MOD 4=0/\ SUC 3=4`])
6919 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6921 PROVE_E_SY_EQ_TAC `0`];
6924 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4)<=> (1<= i /\ i<= 4)`]
6925 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`4`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`]
6926 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num` THEN MRESA1_TAC th`SUC x':num`)
6927 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
6928 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
6929 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
6930 THEN MP_TAC(ARITH_RULE`x' MOD 4 < 4==> x' MOD 4 =0 \/ x' MOD 4 = 1\/ x' MOD 4 = 2 \/ x' MOD 4 =3`)
6933 PROOF_E_EQ_IMAGE_4 `4`;
6934 PROOF_E_EQ_IMAGE_4 `1`;
6935 PROOF_E_EQ_IMAGE_4 `2`;
6936 PROOF_E_EQ_IMAGE_4 `3`];
6943 let IN_NOT_EMPTY_CASE_4_3=prove_by_refinement(
6944 `(s=let upperbd = &6 in
6945 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
6946 else (if {i MOD k,j MOD k}={0,1} then p
6947 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
6948 mk_unadorned_v39 4 (#0.467) (cs_adj 4 (&2) (&3)) (cs_adj 4 (&2 * h0) upperbd))
6950 /\ scs_k_v39 s= dimindex(:M)
6951 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 0]:real^3^M= v
6952 /\ matvec (v:real^3^M) =a
6954 a IN {matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\ CONDITION2_SY v }`,
6958 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;IN_ELIM_THM;CONDITION1_SY;CONDITION2_SY]
6959 THEN REPEAT STRIP_TAC
6960 THEN POP_ASSUM MP_TAC
6961 THEN POP_ASSUM MP_TAC
6962 THEN POP_ASSUM MP_TAC
6963 THEN POP_ASSUM MP_TAC
6964 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`~(4<=3)`;mk_unadorned_v39;CS_ADJ]
6965 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[IN]
6966 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`]
6967 THEN REPEAT STRIP_TAC
6968 THEN ASM_REWRITE_TAC[]
6969 THEN EXISTS_TAC`v:real^3^M`
6974 REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
6975 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 4)<=> (i=1\/ i=2\/ i=3 \/ i=4)`] THEN ASSUME_TAC (SYM th))
6976 THEN REPEAT STRIP_TAC
6978 IN_BALL_ANNULUS_ROW_TAC_4 `1`;
6979 IN_BALL_ANNULUS_ROW_TAC_4 `2`;
6980 IN_BALL_ANNULUS_ROW_TAC_4 `3`;
6981 IN_BALL_ANNULUS_ROW_TAC_4 `0`];
6985 REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
6986 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 4)<=> (i=1\/ i=2\/ i=3 \/ i=4)`] THEN ASSUME_TAC (SYM th))
6987 THEN REPEAT DISCH_TAC
6991 INEQUALITY_PROOF_TAC4 `1`;
6992 INEQUALITY_PROOF_TAC4 `2`;
6993 INEQUALITY_PROOF_TAC4 `3`;
6994 INEQUALITY_PROOF_TAC4 `0`];
6996 MP_TAC V_E_FF_CASE_4_3
6997 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;CS_ADJ]
6998 THEN POP_ASSUM MP_TAC
6999 THEN POP_ASSUM MP_TAC
7000 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
7001 THEN REPEAT RESA_TAC;
7023 let NOT_EMPTY_CASE_4_3=prove_by_refinement(
7024 `(s=let upperbd = &6 in
7025 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
7026 else (if {i MOD k,j MOD k}={0,1} then p
7027 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
7028 mk_unadorned_v39 4 (#0.467) (cs_adj 4 (&2) (&3)) (cs_adj 4 (&2 * h0) upperbd))
7030 /\ scs_k_v39 s= dimindex(:M)
7032 ~({matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\ CONDITION2_SY v }={})`
7036 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;]
7038 THEN ABBREV_TAC`v=vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 0]:real^3^M`
7039 THEN ABBREV_TAC`a=matvec (v:real^3^M) `
7040 THEN EXISTS_TAC`a:real^(M,3)finite_product`
7041 THEN MATCH_MP_TAC IN_NOT_EMPTY_CASE_4_3
7042 THEN ASM_REWRITE_TAC[]
7047 let TAUSTAR_EQ_TAU_STAR_4_3=prove_by_refinement(
7048 `(let upperbd = &6 in
7049 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
7050 else (if {i MOD k,j MOD k}={0,1} then p
7051 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
7052 mk_unadorned_v39 4 (#0.467) (cs_adj 4 (&2) (&3)) (cs_adj 4 (&2 * h0) upperbd))=s
7054 /\ scs_k_v39 s= dimindex(:M)
7055 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 0]:real^3^M= v
7056 /\ matvec (v:real^3^M) =a
7057 /\ stable_sy((scs_k_v39 s),(scs_d_v39 s),(0..scs_k_v39 s - 1),
7058 (change_type_v3 (scs_a_v39 s)),
7059 (change_type_v3 (scs_b_v39 s)),
7060 (change_type_v2 (scs_J_v39 s)(scs_k_v39 s)),
7061 (\i. (1 + i) MOD scs_k_v39 s))=s1
7062 ==> taustar_v39 s vv = tau_star s1 a`
7067 THEN MP_TAC V_E_FF_CASE_4_3
7069 THEN SUBGOAL_THEN`scs_k_v39 s =4` ASSUME_TAC;
7072 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;];
7076 THEN ASM_REWRITE_TAC[taustar_v39;tau_star]
7077 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;]
7078 THEN ASM_SIMP_TAC[dsv_J_empty]
7079 THEN MP_TAC SCS_4_3_IS_TRI_STABLE
7080 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF]
7082 THEN MRESAL_TAC stable_sy_explicit[`(scs_k_v39 s)`;`(scs_d_v39 s)`;`(0..scs_k_v39 s - 1)`;`
7083 (change_type_v3 (scs_a_v39 s))`;`
7084 (change_type_v3 (scs_b_v39 s))`;`
7085 (change_type_v2 (scs_J_v39 s)(scs_k_v39 s))`;`
7086 (\i. (1 + i) MOD scs_k_v39 s)`][LET_DEF;LET_END_DEF;d_fun]
7087 THEN SUBGOAL_THEN`J1_SY (s1:stable_sy)={}` ASSUME_TAC;
7089 ASM_REWRITE_TAC[J1_SY;]
7091 THEN REWRITE_TAC[scs_J_v39_explicit;LET_DEF;LET_END_DEF;mk_unadorned_v39;change_type_v2;SET_RULE`a IN {{i, j} | F}<=> F`]
7094 ASM_REWRITE_TAC[SUM_CLAUSES;REAL_ARITH`a* &0= &0 /\a + &0=a`]
7096 THEN REWRITE_TAC[MATVEC_VECMATS_ID;VECMATS_MATVEC_ID]
7097 THEN ASM_REWRITE_TAC[REAL_ARITH`A-B=A-C<=>B=C`]
7098 THEN MATCH_MP_TAC dsv_J_empty
7100 THEN REWRITE_TAC[scs_J_v39_explicit;LET_DEF;LET_END_DEF;mk_unadorned_v39;change_type_v2;SET_RULE`a IN {{i, j} | F}<=> F`]
7120 let VV_IN_BALL_ANNULUS_TAC_4=
7122 REPLICATE_TAC 8 (POP_ASSUM MP_TAC)
7123 THEN POP_ASSUM(fun th-> MRESAL1_TAC th so [ARITH_RULE`1<=1 /\ 1<=2 /\1<=3 /\ 1<= 4/\ 1<=4 /\ 2<=4/\ 3<=4/\ 4<=4/\ ~(1=0)/\ ~(2=0) /\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2) `] )
7132 let SCS_A_B__EQ_MOD_4_3=prove(
7133 `s=(let upperbd = &6 in
7134 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
7135 else (if {i MOD k,j MOD k}={0,1} then p
7136 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
7137 mk_unadorned_v39 4 (#0.467) (cs_adj 4 (&2) (&3)) (cs_adj 4 (&2 * h0) upperbd))
7139 !i j. scs_a_v39 s i j = scs_a_v39 s (i MOD 4) (j MOD 4)/\
7140 scs_b_v39 s i j = scs_b_v39 s (i MOD 4) (j MOD 4)`,
7142 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;CS_ADJ]
7143 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`4`][ARITH_RULE`~(4=0)`]
7144 THEN MRESAL_TAC MOD_MOD_REFL[`j:num`;`4`][ARITH_RULE`~(4=0)`]
7145 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`4`][ARITH_RULE`~(4=0) /\ 1 MOD 4=1`;ADD1]
7146 THEN MRESAL_TAC MOD_ADD_MOD[`i:num`;`1:num`;`4`][ARITH_RULE`~(4=0) /\ 1 MOD 4=1`;ADD1]);;
7152 let PROVE_INEQUALITY_TAC_40=
7153 fun (so:term) (so1:term)->
7154 REPLICATE_TAC 7(POP_ASSUM MP_TAC)
7155 THEN POP_ASSUM(fun th-> MRESAL_TAC th[so;so1][ARITH_RULE`1<=4 /\ 4<=4/\ 1<=1 /\ 1<=4/\ 1<=2 /\ 2<=4/\1<=3 /\ 3<=4`])
7156 THEN POP_ASSUM( fun th->
7157 POP_ASSUM( fun th1->
7159 THEN MP_TAC th THEN MP_TAC th1
7160 THEN POP_ASSUM(fun th2-> ONCE_REWRITE_TAC[th2]
7161 THEN POP_ASSUM(fun th3-> MRESAL1_TAC th3`4`[ARITH_RULE`4 MOD 4=0`]
7162 THEN MRESAL1_TAC th3`1`[ARITH_RULE`1 MOD 4=1/\ ~(1=0)`]
7163 THEN MRESAL1_TAC th3`2`[ARITH_RULE`2 MOD 4=2/\ ~(2=0)/\ ~(2=1)`]
7164 THEN MRESAL1_TAC th3`3`[ARITH_RULE`3 MOD 4=3/\ ~(3=0)/\ ~(3=1)/\ ~(3=2)`])
7165 THEN MRESAL1_TAC th2`4`[ARITH_RULE`4 MOD 4=0`])
7167 THEN MP_TAC SCS_A_B__EQ_MOD_4_3
7168 THEN ASM_REWRITE_TAC[]
7170 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
7171 THEN ASM_REWRITE_TAC[ARITH_RULE`4 MOD 4=0/\ 1 MOD 4=1/\ 2 MOD 4=2 /\ 3 MOD 4=3`]
7177 let PROVE_INEQUALITY_TAC_4=
7179 MP_TAC(ARITH_RULE`(j MOD 4<4)==> (j MOD 4=0) \/ (j MOD 4=1) \/ (j MOD 4=2)\/ (j MOD 4=3)`)
7182 PROVE_INEQUALITY_TAC_40 th `4`;
7183 PROVE_INEQUALITY_TAC_40 th `1`;
7184 PROVE_INEQUALITY_TAC_40 th `2`;
7185 PROVE_INEQUALITY_TAC_40 th `3`];;
7189 let V_SY_EQ_IMAGE_VV_TAC4=
7193 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`;ARITH_RULE`1 MOD 4=1 /\ ~(1=0) /\ 2 MOD 4=2 /\ ~(2=0)/\ ~(2=1)/\ 3 MOD 4=3 /\ ~(3=0)/\ ~(3=1)/\ ~(3=2)/\ 4 MOD 4=0`];;
7197 let PROVE_E_SY_EQ_MOD_TAC_4=
7200 THEN ASM_REWRITE_TAC[ARITH_RULE`~(3=0)/\ ~(3=1)/\ ~(3=2)/\ ~(2=0)/\ ~(2=1)/\ ~(1=0)`]
7205 let PROVE_E_SY_EQ_IMAGE_VV_4=
7208 THEN ASM_REWRITE_TAC[ARITH_RULE`~(1=0)`]
7209 THEN MRESAL_TAC MOD_ADD_MOD[`x':num`;`1:num`;`4`][ARITH_RULE`~(4=0) /\ 1 MOD 4=1/\ 1<=4/\ 4<=4/\ 0+1=1`;ADD1]
7210 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`~(1=0)/\ 4 MOD 4=0/\ 0+1=1/\ 1<=1 /\ 1+1=2/\ 2 MOD 4=2/\ ~(2=0)/\ ~(2=1)/\ 2+1=3/\ 3 MOD 4=3
7211 /\ ~(3=0)/\ ~(3=1)/\ ~(3=2)/\1<=2/\ 2<=4
7212 /\ 1<=3/\ 3<=4/\ 3+1=4`])
7217 let PROOF_E_EQ_TAC_4=
7220 THEN ASM_REWRITE_TAC[ARITH_RULE`~(1=0)/\ 1 MOD 4=1/\ SUC 1=2/\ 2 MOD 4=2/\ ~(2=0)/\ ~(2=1)/\ SUC 2=3 /\ 3 MOD 4=3/\ ~(3=0) /\ ~(3=1)/\ ~(3=2)/\ SUC 3=4/\ 4 MOD 4=0/\ SUC 0=1 /\ SUC 4=5/\ 5 MOD 4=1`;SET_RULE`(a:num) IN (:num)`]
7225 let IN_NOT_EMPTY_B1_SY_4_3=prove_by_refinement(
7226 `(let upperbd = &6 in
7227 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
7228 else (if {i MOD k,j MOD k}={0,1} then p
7229 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
7230 mk_unadorned_v39 4 (#0.467) (cs_adj 4 (&2) (&3)) (cs_adj 4 (&2 * h0) upperbd))=s/\
7231 scs_k_v39 s= dimindex(:M)/\
7232 matvec (v:real^3^M) =a/\
7233 (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\
7234 CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\
7237 if i MOD scs_k_v39 s = 0 then row 4 v else
7238 if i MOD scs_k_v39 s = 1 then row 1 v else
7239 if i MOD scs_k_v39 s = 2 then row 2 v else
7241 ==> vv IN BBs_v39 s`,
7244 REWRITE_TAC[CONDITION1_SY;CONDITION2_SY;change_type_v3]
7245 THEN REPEAT STRIP_TAC
7246 THEN SUBGOAL_THEN`scs_k_v39 s =4` ASSUME_TAC;
7250 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;];
7253 REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
7254 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
7256 THEN REPEAT STRIP_TAC)
7257 THEN POP_ASSUM MP_TAC
7258 THEN ASM_REWRITE_TAC[th;IN]
7260 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;]
7263 ASM_REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
7264 THEN REPEAT STRIP_TAC
7265 THEN ASM_REWRITE_TAC[]
7266 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
7267 THEN MP_TAC(ARITH_RULE`x' MOD 4<4 ==> x' MOD 4 = 0 \/ x' MOD 4 = 1 \/ x' MOD 4 = 2 \/ x' MOD 4 = 3`)
7270 VV_IN_BALL_ANNULUS_TAC_4 `4`;
7271 VV_IN_BALL_ANNULUS_TAC_4 `1`;
7272 VV_IN_BALL_ANNULUS_TAC_4 `2`;
7273 VV_IN_BALL_ANNULUS_TAC_4 `3`];
7278 ASM_REWRITE_TAC[periodic]
7280 THEN MRESAL_TAC MOD_EQ[`i+4:num`;`i:num`;`4:num`;`1`][ARITH_RULE`1*A=A`];
7286 THEN SUBGOAL_THEN`!i. (vv:num->real^3) i= vv (i MOD 4)` ASSUME_TAC;
7288 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
7290 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`4`][ARITH_RULE`~(4=0)`];
7294 THEN POP_ASSUM MP_TAC
7295 THEN MRESAL_TAC DIVISION[`i:num`;`4`][ARITH_RULE`~(4=0)`]
7296 THEN MRESAL_TAC DIVISION[`j:num`;`4`][ARITH_RULE`~(4=0)`]
7297 THEN MP_TAC(ARITH_RULE`(i MOD 4<4)==> (i MOD 4=0) \/ (i MOD 4=1) \/ (i MOD 4=2)\/ (i MOD 4=3)`)
7300 PROVE_INEQUALITY_TAC_4 `4`;
7301 PROVE_INEQUALITY_TAC_4 `1`;
7302 PROVE_INEQUALITY_TAC_4 `2`;
7303 PROVE_INEQUALITY_TAC_4 `3`];
7306 THEN ASM_REWRITE_TAC[ARITH_RULE`~(4<=3)`]
7308 THEN SUBGOAL_THEN`V_SY (v:real^3^M) = IMAGE vv (:num)`ASSUME_TAC;
7311 ASM_REWRITE_TAC[V_SY;rows;IMAGE;EXTENSION;IN_ELIM_THM]
7315 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
7318 V_SY_EQ_IMAGE_VV_TAC4 `1`;
7319 V_SY_EQ_IMAGE_VV_TAC4 `2`;
7320 V_SY_EQ_IMAGE_VV_TAC4 `3`;
7321 V_SY_EQ_IMAGE_VV_TAC4 `4`];
7324 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
7325 THEN MP_TAC(ARITH_RULE`(x' MOD 4<4)==> (x' MOD 4=0) \/ (x' MOD 4=1) \/ (x' MOD 4=2)\/ (x' MOD 4=3)`)
7328 PROVE_E_SY_EQ_MOD_TAC_4 `4`;
7329 PROVE_E_SY_EQ_MOD_TAC_4 `1`;
7330 PROVE_E_SY_EQ_MOD_TAC_4 `2`;
7331 PROVE_E_SY_EQ_MOD_TAC_4 `3`];
7336 SUBGOAL_THEN`E_SY (v:real^3^M) = IMAGE (\i. {vv i, vv (SUC i)}) (:num)`ASSUME_TAC;
7339 ASM_REWRITE_TAC[E_SY;rows;IMAGE;]
7340 THEN ONCE_REWRITE_TAC[EXTENSION;]
7341 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
7346 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
7349 PROOF_E_EQ_TAC_4`1`;
7350 PROOF_E_EQ_TAC_4`2`;
7351 PROOF_E_EQ_TAC_4`3`;
7352 PROOF_E_EQ_TAC_4`4`];
7355 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
7356 THEN MP_TAC(ARITH_RULE`(x' MOD 4<4)==> (x' MOD 4=0) \/ (x' MOD 4=1) \/ (x' MOD 4=2)\/ (x' MOD 4=3)`)
7359 PROVE_E_SY_EQ_IMAGE_VV_4 `4`;
7360 PROVE_E_SY_EQ_IMAGE_VV_4 `1`;
7361 PROVE_E_SY_EQ_IMAGE_VV_4 `2`;
7362 PROVE_E_SY_EQ_IMAGE_VV_4 `3`];
7364 SUBGOAL_THEN`F_SY (v:real^3^M) = IMAGE (\i. (vv i, vv (SUC i))) (:num)`ASSUME_TAC;
7367 ASM_REWRITE_TAC[F_SY;rows;IMAGE;]
7368 THEN ONCE_REWRITE_TAC[EXTENSION;]
7369 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
7373 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
7376 PROOF_E_EQ_TAC_4`1`;
7377 PROOF_E_EQ_TAC_4`2`;
7378 PROOF_E_EQ_TAC_4`3`;
7379 PROOF_E_EQ_TAC_4`4`];
7382 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
7383 THEN MP_TAC(ARITH_RULE`(x' MOD 4<4)==> (x' MOD 4=0) \/ (x' MOD 4=1) \/ (x' MOD 4=2)\/ (x' MOD 4=3)`)
7386 PROVE_E_SY_EQ_IMAGE_VV_4 `4`;
7387 PROVE_E_SY_EQ_IMAGE_VV_4 `1`;
7388 PROVE_E_SY_EQ_IMAGE_VV_4 `2`;
7389 PROVE_E_SY_EQ_IMAGE_VV_4 `3`];
7391 POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
7392 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
7393 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
7394 THEN ASM_REWRITE_TAC[];
7404 let XWITCCN_CASE_4_3=prove_by_refinement(
7405 `(let upperbd = &6 in
7406 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
7407 else (if {i MOD k,j MOD k}={0,1} then p
7408 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
7409 mk_unadorned_v39 4 (#0.467) (cs_adj 4 (&2) (&3)) (cs_adj 4 (&2 * h0) upperbd))=s
7410 /\ vv IN BBs_v39 s /\
7411 taustar_v39 s vv < &0
7412 /\ scs_k_v39 s= dimindex(:M)
7413 ==> ~(BBprime_v39 s = {})`,
7418 THEN MP_TAC SCS_4_3_IS_TRI_STABLE
7420 THEN MP_TAC NOT_EMPTY_CASE_4_3
7422 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?a. a IN A`]
7423 THEN ABBREV_TAC`s1 =stable_sy((scs_k_v39 s),(scs_d_v39 s),(0..scs_k_v39 s - 1),
7424 (change_type_v3 (scs_a_v39 s)),
7425 (change_type_v3 (scs_b_v39 s)),
7426 (change_type_v2 (scs_J_v39 s)(scs_k_v39 s)),
7427 (\i. (1 + i) MOD scs_k_v39 s))`
7428 THEN MRESA_TAC stable_sy_explicit[`(scs_k_v39 s)`;`(scs_d_v39 s)`;`(0..scs_k_v39 s - 1)`;`
7429 (change_type_v3 (scs_a_v39 s))`;`
7430 (change_type_v3 (scs_b_v39 s))`;`
7431 (change_type_v2 (scs_J_v39 s)(scs_k_v39 s))`;`
7432 (\i. (1 + i) MOD scs_k_v39 s)`]
7433 THEN SUBGOAL_THEN`scs_k_v39 s =4` ASSUME_TAC;
7436 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;];
7439 REPLICATE_TAC 11 (POP_ASSUM MP_TAC)
7440 THEN REWRITE_TAC[th]
7442 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
7444 THEN REPEAT RESA_TAC)
7445 THEN MRESAL_TAC (GEN_ALL HDPLYGY)[`(scs_k_v39 s)`;`s1:stable_sy`][k_sy;B_SY1;ARITH_RULE`2<4`;]
7446 THEN POP_ASSUM (fun th->
7448 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
7451 THEN REWRITE_TAC[BBprime_v39;IN]
7452 THEN ABBREV_TAC`( vv1 i =
7453 if i MOD scs_k_v39 s = 0 then row 4 v else
7454 if i MOD scs_k_v39 s = 1 then row 1 v else
7455 if i MOD scs_k_v39 s = 2 then row 2 v else
7456 row 3 (v:real^3^M))`
7457 THEN EXISTS_TAC`vv1:num->real^3`
7460 ONCE_REWRITE_TAC[GSYM IN]
7461 THEN MATCH_MP_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_4_3)
7462 THEN EXISTS_TAC`x:real^(M,3)finite_product`
7463 THEN EXISTS_TAC`v:real^3^M`
7464 THEN ASM_REWRITE_TAC[]
7465 THEN POP_ASSUM MP_TAC
7468 SUBGOAL_THEN`vector [ vv1 1; vv1 2; (vv1:num->real^3) 3;vv1 0] = v:real^3^M`
7471 POP_ASSUM(fun th-> REWRITE_TAC[GSYM th])
7472 THEN ASM_REWRITE_TAC[ARITH_RULE`1 MOD 4=1/\ 2 MOD 4=2/\ 3 MOD 4=3/\ 0 MOD 4=0 /\ ~(1=0)/\ ~(2=0)/\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2)`;]
7473 THEN ONCE_REWRITE_TAC[CART_EQ]
7474 THEN ASM_REWRITE_TAC[ARITH_RULE`1<=i/\ i<=4 <=>i=1\/ i=2\/ i=3\/ i=4`]
7475 THEN REPEAT RESA_TAC
7477 ASM_SIMP_TAC[row;vector; LAMBDA_BETA; DIMINDEX_3; LENGTH; ARITH] THEN
7478 REWRITE_TAC[num_CONV `3`;num_CONV `2`; num_CONV `1`; EL; HD; TL;]
7479 THEN ASM_SIMP_TAC[CART_EQ; DIMINDEX_3; FORALL_3; VEC_COMPONENT; VECTOR_3; ARITH;row;LAMBDA_BETA];
7484 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[GSYM IN]
7485 THEN REPEAT STRIP_TAC
7486 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_4_3)
7487 [`x:real^(M,3)finite_product`;`v:real^3^M`;`vv1:num->real^3`;`s:scs_v39`]
7488 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_4_3)[`v:real^3^M`;`s:scs_v39`;`vv1:num->real^3`;`s1:stable_sy`;`x:real^(M,3)finite_product`]
7489 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_4_3)
7490 [`vector [ww 1; ww 2; ww 3; ww 0]:real^3^M`;`s:scs_v39`;`ww:num->real^3`;`s1:stable_sy`;`matvec(vector [ww 1; ww 2; ww 3; ww 0]:real^3^M):real^(M,3)finite_product`;]
7491 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_CASE_4_3)[`ww:num->real^3`;`vector [ww 1; ww 2; ww 3; ww 0]:real^3^M`;`matvec(vector [ww 1; ww 2; ww 3; ww 0]:real^3^M):real^(M,3)finite_product`;`s:scs_v39`;]
7492 THEN REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
7493 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7494 THEN MRESA1_TAC th `matvec(vector [ww 1; ww 2; ww 3; ww 0]:real^3^M):real^(M,3)finite_product`);
7496 MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_4_3)
7497 [`x:real^(M,3)finite_product`;`v:real^3^M`;`vv1:num->real^3`;`s:scs_v39`]
7498 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_4_3)[`v:real^3^M`;`s:scs_v39`;`vv1:num->real^3`;`s1:stable_sy`;`x:real^(M,3)finite_product`]
7499 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_4_3)
7500 [`vector [vv 1; vv 2; vv 3; vv 0]:real^3^M`;`s:scs_v39`;`vv:num->real^3`;`s1:stable_sy`;`matvec(vector [vv 1; vv 2; vv 3; vv 0]:real^3^M):real^(M,3)finite_product`;]
7501 THEN REPLICATE_TAC 23 (POP_ASSUM MP_TAC)
7502 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC THEN MP_TAC th)
7503 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_CASE_4_3)[`vv:num->real^3`;`vector [vv 1; vv 2; vv 3; vv 0]:real^3^M`;`matvec(vector [vv 1; vv 2; vv 3; vv 0]:real^3^M):real^(M,3)finite_product`;`s:scs_v39`;]
7504 THEN REPLICATE_TAC 6 (POP_ASSUM MP_TAC)
7505 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7506 THEN MRESA1_TAC th `matvec(vector [vv 1; vv 2; vv 3; vv 0]:real^3^M):real^(M,3)finite_product`)
7507 THEN POP_ASSUM MP_TAC
7508 THEN POP_ASSUM MP_TAC
7535 let IN_BALL_ANNULUS_TAC_4=
7538 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 0`][ARITH_RULE`1<= 4 /\ 2<= 4 /\ 3<= 4 /\ 4<= 4`]
7539 THEN MATCH_MP_TAC(SET_RULE`
7540 vv th IN IMAGE vv (:num) /\ IMAGE vv (:num) SUBSET ball_annulus
7541 ==> vv th IN ball_annulus`)
7542 THEN ASM_REWRITE_TAC[IMAGE;IN_ELIM_THM]
7544 THEN REWRITE_TAC[SET_RULE`(a:num) IN (:num)`]
7545 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`4`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`]
7546 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`4:num`[ARITH_RULE`4 MOD 4=0`])
7547 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT RESA_TAC)
7554 let INEQUALITY_A_B_TAC_40=
7555 fun (so:term) (so1:term)->
7556 ASM_SIMP_TAC[change_type_v3]
7557 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 0 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
7558 /\ SUC 0 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0/\ ~(3=1)/\ ~(1=0)`]
7559 THEN REPLICATE_TAC 12 (POP_ASSUM MP_TAC)
7560 THEN POP_ASSUM(fun th-> MRESAL_TAC th[so;so1][dist;ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 0 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
7561 /\ SUC 0 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0 /\ 4 MOD 4 =0/\ SUC 4 MOD 4 =1 /\ ~(2=0)/\ ~(3=0)/\ ~(2=3)/\ ~(3=1)/\ ~(1=0)`;SET_RULE`({A,B}= {C,B})<=> A=C`;SET_RULE`({B,A}= {B,C})<=> A=C`;SET_RULE`({A,B}= {B,C})<=> A=C`;SET_RULE`{A,B}={B,A}`])
7562 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`4`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`]
7563 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`4:num`[ARITH_RULE`4 MOD 4=0`])
7564 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT RESA_TAC)
7568 let INEQUALITY_A_B_TAC_4=
7570 MP_TAC(ARITH_RULE`1<= i /\ i<= 4==> i=1\/ i=2\/ i=3\/ i=4`)
7573 INEQUALITY_A_B_TAC_40 `1` th;
7574 INEQUALITY_A_B_TAC_40 `2` th;
7575 INEQUALITY_A_B_TAC_40 `3` th;
7576 INEQUALITY_A_B_TAC_40 `4` th];;
7585 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 4 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
7586 /\ SUC 4 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0/\ ~(3=1)/\ ~(1=0)`;SET_RULE`(a:num) IN (:num)`]
7590 let PROVE_V_SY_EQ_TAC=
7593 THEN ASM_REWRITE_TAC[ARITH_RULE`1<= 1 /\ 1<= 4`]
7594 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 4 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
7595 /\ SUC 4 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0/\ ~(3=1)/\ ~(1=0)/\ 1<=2 /\ 1<=3`]
7601 let PROVE_E_SY_EQ_TAC=
7604 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 4 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
7605 /\ SUC 4 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0/\ ~(3=1)/\ ~(1=0)/\ SUC 1=2/\ SUC 0=1 /\ SUC 2= 3/\ SUC 3=4`;SET_RULE`(a:num) IN (:num)`]
7606 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`4`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`]
7607 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`SUC 3`[ARITH_RULE`SUC 3 MOD 4=0/\ SUC 3=4`])
7608 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th]);;
7611 let PROVE_E_SY_INV_TAC_4=
7613 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`x':num`;th;`4`][ARITH_RULE`~(4=0)/\ 4 MOD 4=0/\ SUC 0 MOD 4=1/\ 1 MOD 4=1 /\ 2 MOD 4=2 /\ 3 MOD 4=3`]
7615 THEN MRESAL_TAC VECTOR_3_4[`(vv:num->real^3) 1`;`(vv:num->real^3) 2`;`(vv:num->real^3) 3`;`(vv:num->real^3) 0`;][ARITH_RULE`1<=4/\ 2<=4/\ 3<=4/\ 4<=4/\ 4 MOD 4= 0 /\ 1 MOD 4= 1 /\ 2 MOD 4= 2/\ 3 MOD 4= 3/\ ~(2=1)
7616 /\ SUC 4 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0/\ ~(3=1)/\ ~(1=0)/\ SUC 1=2/\ SUC 0=1 /\ SUC 2= 3/\ SUC 3=4/\ 1<=1 /\ 1<=2 /\ 1<=3`];;
7621 let V_E_FF_CASE_4_sqrt8=prove_by_refinement(
7622 `(s=let upperbd = &6 in
7623 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
7624 else (if {i MOD k,j MOD k}={0,1} then p
7625 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
7626 mk_unadorned_v39 4 (#0.477) (a_pro 4 (&2 * h0) (&2) sqrt8) (a_pro 4 sqrt8 (&2 * h0) upperbd))
7628 /\ scs_k_v39 s= dimindex(:M)
7629 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 0]:real^3^M= v
7630 /\ matvec (v:real^3^M) =a
7632 V_SY (v:real^3^M)=IMAGE vv (:num)/\
7633 E_SY (v:real^3^M)=IMAGE (\i. {vv i, vv (SUC i)}) (:num)/\
7634 F_SY (v:real^3^M)=IMAGE (\i. vv i,vv (SUC i)) (:num)`,
7639 THEN REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
7640 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39]
7641 THEN REPEAT STRIP_TAC;
7644 REWRITE_TAC[V_SY;rows]
7645 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
7646 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 4)<=> (i=1\/ i=2\/ i=3 \/ i=4)`] THEN ASSUME_TAC (SYM th))
7649 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
7661 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4)<=> (1<= i /\ i<= 4)`]
7662 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`4`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`]
7663 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num`)
7664 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
7665 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
7666 THEN MP_TAC(ARITH_RULE`x' MOD 4 < 4==> x' MOD 4 =0 \/ x' MOD 4 = 1\/ x' MOD 4 = 2 \/ x' MOD 4 =3`)
7669 PROVE_V_SY_EQ_TAC `4`;
7670 PROVE_V_SY_EQ_TAC `1`;
7671 PROVE_V_SY_EQ_TAC `2`;
7672 PROVE_V_SY_EQ_TAC `3`];
7675 REWRITE_TAC[E_SY;rows]
7676 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
7677 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 4)<=> (i=1\/ i=2\/ i=3 \/ i=4)`] THEN ASSUME_TAC (SYM th))
7678 THEN REPEAT STRIP_TAC
7679 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
7681 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
7685 THEN ASM_REWRITE_TAC[]
7687 PROVE_E_SY_EQ_TAC `1`;
7688 PROVE_E_SY_EQ_TAC `2`;
7689 PROVE_E_SY_EQ_TAC `3`;
7690 PROVE_E_SY_EQ_TAC `0`];
7693 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4)<=> (1<= i /\ i<= 4)`]
7694 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`4`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`]
7695 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num` THEN MRESA1_TAC th`SUC x':num`)
7696 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
7697 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
7698 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
7699 THEN MP_TAC(ARITH_RULE`x' MOD 4 < 4==> x' MOD 4 =0 \/ x' MOD 4 = 1\/ x' MOD 4 = 2 \/ x' MOD 4 =3`)
7702 PROVE_E_SY_INV_TAC_4 `4`;
7703 PROVE_E_SY_INV_TAC_4 `1`;
7704 PROVE_E_SY_INV_TAC_4 `2`;
7705 PROVE_E_SY_INV_TAC_4 `3`];
7707 REWRITE_TAC[F_SY;rows]
7708 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
7709 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 4)<=> (i=1\/ i=2\/ i=3 \/ i=4)`] THEN ASSUME_TAC (SYM th))
7710 THEN REPEAT STRIP_TAC
7711 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
7713 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
7717 THEN ASM_REWRITE_TAC[]
7719 PROVE_E_SY_EQ_TAC `1`;
7720 PROVE_E_SY_EQ_TAC `2`;
7721 PROVE_E_SY_EQ_TAC `3`;
7722 PROVE_E_SY_EQ_TAC `0`];
7725 THEN REWRITE_TAC[ARITH_RULE` (i=1\/ i=2\/ i=3 \/ i=4)<=> (1<= i /\ i<= 4)`]
7726 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`4`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`]
7727 THEN POP_ASSUM (fun th-> MRESA1_TAC th`x':num` THEN MRESA1_TAC th`SUC x':num`)
7728 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
7729 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[SYM th])
7730 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
7731 THEN MP_TAC(ARITH_RULE`x' MOD 4 < 4==> x' MOD 4 =0 \/ x' MOD 4 = 1\/ x' MOD 4 = 2 \/ x' MOD 4 =3`)
7734 PROVE_E_SY_INV_TAC_4 `4`;
7735 PROVE_E_SY_INV_TAC_4 `1`;
7736 PROVE_E_SY_INV_TAC_4 `2`;
7737 PROVE_E_SY_INV_TAC_4 `3`];
7746 let IN_NOT_EMPTY_CASE_4_sqrt8=prove_by_refinement(
7747 `(s=let upperbd = &6 in
7748 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
7749 else (if {i MOD k,j MOD k}={0,1} then p
7750 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
7751 mk_unadorned_v39 4 (#0.477) (a_pro 4 (&2 * h0) (&2) sqrt8) (a_pro 4 sqrt8 (&2 * h0) upperbd))
7753 /\ scs_k_v39 s= dimindex(:M)
7754 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 0]:real^3^M= v
7755 /\ matvec (v:real^3^M) =a
7757 a IN {matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\ CONDITION2_SY v }`,
7760 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;IN_ELIM_THM;CONDITION1_SY;CONDITION2_SY]
7761 THEN REPEAT STRIP_TAC
7762 THEN POP_ASSUM MP_TAC
7763 THEN POP_ASSUM MP_TAC
7764 THEN POP_ASSUM MP_TAC
7765 THEN POP_ASSUM MP_TAC
7766 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;LET_DEF;LET_END_DEF;BBs_v39;ARITH_RULE`~(4<=3)`;mk_unadorned_v39;CS_ADJ]
7767 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[IN]
7768 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`]
7769 THEN REPEAT STRIP_TAC
7770 THEN ASM_REWRITE_TAC[]
7771 THEN EXISTS_TAC`v:real^3^M`
7776 REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
7777 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 4)<=> (i=1\/ i=2\/ i=3 \/ i=4)`] THEN ASSUME_TAC (SYM th))
7778 THEN REPEAT STRIP_TAC
7780 IN_BALL_ANNULUS_TAC_4 `1`;
7781 IN_BALL_ANNULUS_TAC_4 `2`;
7782 IN_BALL_ANNULUS_TAC_4 `3`;
7783 IN_BALL_ANNULUS_TAC_4 `4`];
7787 REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
7788 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`(1<= i /\ i<= 4)<=> (i=1\/ i=2\/ i=3 \/ i=4)`] THEN ASSUME_TAC (SYM th))
7789 THEN REPEAT DISCH_TAC
7793 INEQUALITY_A_B_TAC_4 `1`;
7794 INEQUALITY_A_B_TAC_4 `2`;
7795 INEQUALITY_A_B_TAC_4 `3`;
7796 INEQUALITY_A_B_TAC_4 `0`];
7800 MP_TAC V_E_FF_CASE_4_sqrt8
7801 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;CS_ADJ]
7802 THEN POP_ASSUM MP_TAC
7803 THEN POP_ASSUM MP_TAC
7804 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
7805 THEN REPEAT RESA_TAC;
7820 let NOT_EMPTY_CASE_4_sqrt8=prove_by_refinement(
7821 `(s=let upperbd = &6 in
7822 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
7823 else (if {i MOD k,j MOD k}={0,1} then p
7824 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
7825 mk_unadorned_v39 4 (#0.477) (a_pro 4 (&2 * h0) (&2) sqrt8) (a_pro 4 sqrt8 (&2 * h0) upperbd))
7827 /\ scs_k_v39 s= dimindex(:M)
7829 ~({matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\ CONDITION2_SY v }={})`
7833 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;]
7835 THEN ABBREV_TAC`v=vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 0]:real^3^M`
7836 THEN ABBREV_TAC`a=matvec (v:real^3^M) `
7837 THEN EXISTS_TAC`a:real^(M,3)finite_product`
7838 THEN MATCH_MP_TAC IN_NOT_EMPTY_CASE_4_sqrt8
7839 THEN ASM_REWRITE_TAC[]
7844 let TAUSTAR_EQ_TAU_STAR_4_sqrt8=prove_by_refinement(
7845 `(let upperbd = &6 in
7846 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
7847 else (if {i MOD k,j MOD k}={0,1} then p
7848 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
7849 mk_unadorned_v39 4 (#0.477) (a_pro 4 (&2 * h0) (&2) sqrt8) (a_pro 4 sqrt8 (&2 * h0) upperbd))=s
7851 /\ scs_k_v39 s= dimindex(:M)
7852 /\ vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 3;(vv:num->real^3) 0]:real^3^M= v
7853 /\ matvec (v:real^3^M) =a
7854 /\ stable_sy((scs_k_v39 s),(scs_d_v39 s),(0..scs_k_v39 s - 1),
7855 (change_type_v3 (scs_a_v39 s)),
7856 (change_type_v3 (scs_b_v39 s)),
7857 (change_type_v2 (scs_J_v39 s)(scs_k_v39 s)),
7858 (\i. (1 + i) MOD scs_k_v39 s))=s1
7859 ==> taustar_v39 s vv = tau_star s1 a`,
7863 THEN MP_TAC V_E_FF_CASE_4_sqrt8
7865 THEN SUBGOAL_THEN`scs_k_v39 s =4` ASSUME_TAC;
7868 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;];
7872 THEN ASM_REWRITE_TAC[taustar_v39;tau_star]
7873 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;]
7874 THEN ASM_SIMP_TAC[dsv_J_empty]
7875 THEN MP_TAC SCS_4_sqrt8_IS_TRI_STABLE
7876 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF]
7878 THEN MRESAL_TAC stable_sy_explicit[`(scs_k_v39 s)`;`(scs_d_v39 s)`;`(0..scs_k_v39 s - 1)`;`
7879 (change_type_v3 (scs_a_v39 s))`;`
7880 (change_type_v3 (scs_b_v39 s))`;`
7881 (change_type_v2 (scs_J_v39 s)(scs_k_v39 s))`;`
7882 (\i. (1 + i) MOD scs_k_v39 s)`][LET_DEF;LET_END_DEF;d_fun]
7883 THEN SUBGOAL_THEN`J1_SY (s1:stable_sy)={}` ASSUME_TAC;
7885 ASM_REWRITE_TAC[J1_SY;]
7887 THEN REWRITE_TAC[scs_J_v39_explicit;LET_DEF;LET_END_DEF;mk_unadorned_v39;change_type_v2;SET_RULE`a IN {{i, j} | F}<=> F`]
7890 ASM_REWRITE_TAC[SUM_CLAUSES;REAL_ARITH`a* &0= &0 /\a + &0=a`]
7892 THEN REWRITE_TAC[MATVEC_VECMATS_ID;VECMATS_MATVEC_ID]
7893 THEN ASM_REWRITE_TAC[REAL_ARITH`A-B=A-C<=>B=C`]
7894 THEN MATCH_MP_TAC dsv_J_empty
7896 THEN REWRITE_TAC[scs_J_v39_explicit;LET_DEF;LET_END_DEF;mk_unadorned_v39;change_type_v2;SET_RULE`a IN {{i, j} | F}<=> F`]
7904 let VV_IN_BALL_ANNULUS_TAC_4=
7906 REPLICATE_TAC 8 (POP_ASSUM MP_TAC)
7907 THEN POP_ASSUM(fun th-> MRESAL1_TAC th so [ARITH_RULE`1<=1 /\ 1<=2 /\1<=3 /\ 1<= 4/\ 1<=4 /\ 2<=4/\ 3<=4/\ 4<=4/\ ~(1=0)/\ ~(2=0) /\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2) `] )
7916 let SCS_A_B__EQ_MOD_4_sqrt8=prove(
7917 `s=(let upperbd = &6 in
7918 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
7919 else (if {i MOD k,j MOD k}={0,1} then p
7920 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
7921 mk_unadorned_v39 4 (#0.477) (a_pro 4 (&2 * h0) (&2) sqrt8) (a_pro 4 sqrt8 (&2 * h0) upperbd))
7923 !i j. scs_a_v39 s i j = scs_a_v39 s (i MOD 4) (j MOD 4)/\
7924 scs_b_v39 s i j = scs_b_v39 s (i MOD 4) (j MOD 4)`,
7926 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;CS_ADJ]
7927 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`4`][ARITH_RULE`~(4=0)`]
7928 THEN MRESAL_TAC MOD_MOD_REFL[`j:num`;`4`][ARITH_RULE`~(4=0)`]
7929 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`4`][ARITH_RULE`~(4=0) /\ 1 MOD 4=1`;ADD1]
7930 THEN MRESAL_TAC MOD_ADD_MOD[`i:num`;`1:num`;`4`][ARITH_RULE`~(4=0) /\ 1 MOD 4=1`;ADD1]);;
7936 let PROVE_INEQUALITY_TAC_40=
7937 fun (so:term) (so1:term)->
7938 REPLICATE_TAC 7(POP_ASSUM MP_TAC)
7939 THEN POP_ASSUM(fun th-> MRESAL_TAC th[so;so1][ARITH_RULE`1<=4 /\ 4<=4/\ 1<=1 /\ 1<=4/\ 1<=2 /\ 2<=4/\1<=3 /\ 3<=4`])
7940 THEN POP_ASSUM( fun th->
7941 POP_ASSUM( fun th1->
7943 THEN MP_TAC th THEN MP_TAC th1
7944 THEN POP_ASSUM(fun th2-> ONCE_REWRITE_TAC[th2]
7945 THEN POP_ASSUM(fun th3-> MRESAL1_TAC th3`4`[ARITH_RULE`4 MOD 4=0`]
7946 THEN MRESAL1_TAC th3`1`[ARITH_RULE`1 MOD 4=1/\ ~(1=0)`]
7947 THEN MRESAL1_TAC th3`2`[ARITH_RULE`2 MOD 4=2/\ ~(2=0)/\ ~(2=1)`]
7948 THEN MRESAL1_TAC th3`3`[ARITH_RULE`3 MOD 4=3/\ ~(3=0)/\ ~(3=1)/\ ~(3=2)`])
7949 THEN MRESAL1_TAC th2`4`[ARITH_RULE`4 MOD 4=0`])
7951 THEN MP_TAC SCS_A_B__EQ_MOD_4_sqrt8
7952 THEN ASM_REWRITE_TAC[]
7954 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
7955 THEN ASM_REWRITE_TAC[ARITH_RULE`4 MOD 4=0/\ 1 MOD 4=1/\ 2 MOD 4=2 /\ 3 MOD 4=3`]
7961 let PROVE_INEQUALITY_TAC_4=
7963 MP_TAC(ARITH_RULE`(j MOD 4<4)==> (j MOD 4=0) \/ (j MOD 4=1) \/ (j MOD 4=2)\/ (j MOD 4=3)`)
7966 PROVE_INEQUALITY_TAC_40 th `4`;
7967 PROVE_INEQUALITY_TAC_40 th `1`;
7968 PROVE_INEQUALITY_TAC_40 th `2`;
7969 PROVE_INEQUALITY_TAC_40 th `3`];;
7973 let V_SY_EQ_IMAGE_VV_TAC4=
7977 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`;ARITH_RULE`1 MOD 4=1 /\ ~(1=0) /\ 2 MOD 4=2 /\ ~(2=0)/\ ~(2=1)/\ 3 MOD 4=3 /\ ~(3=0)/\ ~(3=1)/\ ~(3=2)/\ 4 MOD 4=0`];;
7981 let PROVE_E_SY_EQ_MOD_TAC_4=
7984 THEN ASM_REWRITE_TAC[ARITH_RULE`~(3=0)/\ ~(3=1)/\ ~(3=2)/\ ~(2=0)/\ ~(2=1)/\ ~(1=0)`]
7989 let PROVE_E_SY_EQ_IMAGE_VV_4=
7992 THEN ASM_REWRITE_TAC[ARITH_RULE`~(1=0)`]
7993 THEN MRESAL_TAC MOD_ADD_MOD[`x':num`;`1:num`;`4`][ARITH_RULE`~(4=0) /\ 1 MOD 4=1/\ 1<=4/\ 4<=4/\ 0+1=1`;ADD1]
7994 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`~(1=0)/\ 4 MOD 4=0/\ 0+1=1/\ 1<=1 /\ 1+1=2/\ 2 MOD 4=2/\ ~(2=0)/\ ~(2=1)/\ 2+1=3/\ 3 MOD 4=3
7995 /\ ~(3=0)/\ ~(3=1)/\ ~(3=2)/\1<=2/\ 2<=4
7996 /\ 1<=3/\ 3<=4/\ 3+1=4`])
8001 let PROOF_E_EQ_TAC_4=
8004 THEN ASM_REWRITE_TAC[ARITH_RULE`~(1=0)/\ 1 MOD 4=1/\ SUC 1=2/\ 2 MOD 4=2/\ ~(2=0)/\ ~(2=1)/\ SUC 2=3 /\ 3 MOD 4=3/\ ~(3=0) /\ ~(3=1)/\ ~(3=2)/\ SUC 3=4/\ 4 MOD 4=0/\ SUC 0=1 /\ SUC 4=5/\ 5 MOD 4=1`;SET_RULE`(a:num) IN (:num)`]
8009 let IN_NOT_EMPTY_B1_SY_4_sqrt8=prove_by_refinement(
8010 `(let upperbd = &6 in
8011 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
8012 else (if {i MOD k,j MOD k}={0,1} then p
8013 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
8014 mk_unadorned_v39 4 (#0.477) (a_pro 4 (&2 * h0) (&2) sqrt8) (a_pro 4 sqrt8 (&2 * h0) upperbd))=s/\
8015 scs_k_v39 s= dimindex(:M)/\
8016 matvec (v:real^3^M) =a/\
8017 (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\
8018 CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\
8021 if i MOD scs_k_v39 s = 0 then row 4 v else
8022 if i MOD scs_k_v39 s = 1 then row 1 v else
8023 if i MOD scs_k_v39 s = 2 then row 2 v else
8025 ==> vv IN BBs_v39 s`,
8028 REWRITE_TAC[CONDITION1_SY;CONDITION2_SY;change_type_v3]
8029 THEN REPEAT STRIP_TAC
8030 THEN SUBGOAL_THEN`scs_k_v39 s =4` ASSUME_TAC;
8034 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;];
8037 REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
8038 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
8040 THEN REPEAT STRIP_TAC)
8041 THEN POP_ASSUM MP_TAC
8042 THEN ASM_REWRITE_TAC[th;IN]
8044 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;]
8047 ASM_REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
8048 THEN REPEAT STRIP_TAC
8049 THEN ASM_REWRITE_TAC[]
8050 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
8051 THEN MP_TAC(ARITH_RULE`x' MOD 4<4 ==> x' MOD 4 = 0 \/ x' MOD 4 = 1 \/ x' MOD 4 = 2 \/ x' MOD 4 = 3`)
8054 VV_IN_BALL_ANNULUS_TAC_4 `4`;
8055 VV_IN_BALL_ANNULUS_TAC_4 `1`;
8056 VV_IN_BALL_ANNULUS_TAC_4 `2`;
8057 VV_IN_BALL_ANNULUS_TAC_4 `3`];
8062 ASM_REWRITE_TAC[periodic]
8064 THEN MRESAL_TAC MOD_EQ[`i+4:num`;`i:num`;`4:num`;`1`][ARITH_RULE`1*A=A`];
8070 THEN SUBGOAL_THEN`!i. (vv:num->real^3) i= vv (i MOD 4)` ASSUME_TAC;
8072 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
8074 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`4`][ARITH_RULE`~(4=0)`];
8078 THEN POP_ASSUM MP_TAC
8079 THEN MRESAL_TAC DIVISION[`i:num`;`4`][ARITH_RULE`~(4=0)`]
8080 THEN MRESAL_TAC DIVISION[`j:num`;`4`][ARITH_RULE`~(4=0)`]
8081 THEN MP_TAC(ARITH_RULE`(i MOD 4<4)==> (i MOD 4=0) \/ (i MOD 4=1) \/ (i MOD 4=2)\/ (i MOD 4=3)`)
8084 PROVE_INEQUALITY_TAC_4 `4`;
8085 PROVE_INEQUALITY_TAC_4 `1`;
8086 PROVE_INEQUALITY_TAC_4 `2`;
8087 PROVE_INEQUALITY_TAC_4 `3`];
8090 THEN ASM_REWRITE_TAC[ARITH_RULE`~(4<=3)`]
8092 THEN SUBGOAL_THEN`V_SY (v:real^3^M) = IMAGE vv (:num)`ASSUME_TAC;
8095 ASM_REWRITE_TAC[V_SY;rows;IMAGE;EXTENSION;IN_ELIM_THM]
8099 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
8102 V_SY_EQ_IMAGE_VV_TAC4 `1`;
8103 V_SY_EQ_IMAGE_VV_TAC4 `2`;
8104 V_SY_EQ_IMAGE_VV_TAC4 `3`;
8105 V_SY_EQ_IMAGE_VV_TAC4 `4`];
8108 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
8109 THEN MP_TAC(ARITH_RULE`(x' MOD 4<4)==> (x' MOD 4=0) \/ (x' MOD 4=1) \/ (x' MOD 4=2)\/ (x' MOD 4=3)`)
8112 PROVE_E_SY_EQ_MOD_TAC_4 `4`;
8113 PROVE_E_SY_EQ_MOD_TAC_4 `1`;
8114 PROVE_E_SY_EQ_MOD_TAC_4 `2`;
8115 PROVE_E_SY_EQ_MOD_TAC_4 `3`];
8120 SUBGOAL_THEN`E_SY (v:real^3^M) = IMAGE (\i. {vv i, vv (SUC i)}) (:num)`ASSUME_TAC;
8123 ASM_REWRITE_TAC[E_SY;rows;IMAGE;]
8124 THEN ONCE_REWRITE_TAC[EXTENSION;]
8125 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
8130 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
8133 PROOF_E_EQ_TAC_4`1`;
8134 PROOF_E_EQ_TAC_4`2`;
8135 PROOF_E_EQ_TAC_4`3`;
8136 PROOF_E_EQ_TAC_4`4`];
8139 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
8140 THEN MP_TAC(ARITH_RULE`(x' MOD 4<4)==> (x' MOD 4=0) \/ (x' MOD 4=1) \/ (x' MOD 4=2)\/ (x' MOD 4=3)`)
8143 PROVE_E_SY_EQ_IMAGE_VV_4 `4`;
8144 PROVE_E_SY_EQ_IMAGE_VV_4 `1`;
8145 PROVE_E_SY_EQ_IMAGE_VV_4 `2`;
8146 PROVE_E_SY_EQ_IMAGE_VV_4 `3`];
8148 SUBGOAL_THEN`F_SY (v:real^3^M) = IMAGE (\i. (vv i, vv (SUC i))) (:num)`ASSUME_TAC;
8151 ASM_REWRITE_TAC[F_SY;rows;IMAGE;]
8152 THEN ONCE_REWRITE_TAC[EXTENSION;]
8153 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
8157 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
8160 PROOF_E_EQ_TAC_4`1`;
8161 PROOF_E_EQ_TAC_4`2`;
8162 PROOF_E_EQ_TAC_4`3`;
8163 PROOF_E_EQ_TAC_4`4`];
8166 THEN MRESAL_TAC DIVISION[`x':num`;`4`][ARITH_RULE`~(4=0)`]
8167 THEN MP_TAC(ARITH_RULE`(x' MOD 4<4)==> (x' MOD 4=0) \/ (x' MOD 4=1) \/ (x' MOD 4=2)\/ (x' MOD 4=3)`)
8170 PROVE_E_SY_EQ_IMAGE_VV_4 `4`;
8171 PROVE_E_SY_EQ_IMAGE_VV_4 `1`;
8172 PROVE_E_SY_EQ_IMAGE_VV_4 `2`;
8173 PROVE_E_SY_EQ_IMAGE_VV_4 `3`];
8175 POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
8176 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
8177 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
8178 THEN ASM_REWRITE_TAC[];
8186 let XWITCCN_CASE_4_sqrt8=prove_by_refinement(
8187 `(let upperbd = &6 in
8188 let a_pro = (\k p a1 a2 i j. (if (i MOD k = j MOD k) then &0
8189 else (if {i MOD k,j MOD k}={0,1} then p
8190 else (if (j MOD k = SUC i MOD k) \/ (SUC j MOD k = i MOD k) then a1 else a2)))) in
8191 mk_unadorned_v39 4 (#0.477) (a_pro 4 (&2 * h0) (&2) sqrt8) (a_pro 4 sqrt8 (&2 * h0) upperbd))=s
8192 /\ vv IN BBs_v39 s /\
8193 taustar_v39 s vv < &0
8194 /\ scs_k_v39 s= dimindex(:M)
8195 ==> ~(BBprime_v39 s = {})`,
8200 THEN MP_TAC SCS_4_sqrt8_IS_TRI_STABLE
8202 THEN MP_TAC NOT_EMPTY_CASE_4_sqrt8
8204 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?a. a IN A`]
8205 THEN ABBREV_TAC`s1 =stable_sy((scs_k_v39 s),(scs_d_v39 s),(0..scs_k_v39 s - 1),
8206 (change_type_v3 (scs_a_v39 s)),
8207 (change_type_v3 (scs_b_v39 s)),
8208 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)),
8209 (\i. (1 + i) MOD scs_k_v39 s))`
8210 THEN MRESA_TAC stable_sy_explicit[`(scs_k_v39 s)`;`(scs_d_v39 s)`;`(0..scs_k_v39 s - 1)`;`
8211 (change_type_v3 (scs_a_v39 s))`;`
8212 (change_type_v3 (scs_b_v39 s))`;`
8213 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s))`;`
8214 (\i. (1 + i) MOD scs_k_v39 s)`]
8215 THEN SUBGOAL_THEN`scs_k_v39 s =4` ASSUME_TAC;
8218 THEN REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;];
8221 REPLICATE_TAC 11 (POP_ASSUM MP_TAC)
8222 THEN REWRITE_TAC[th]
8224 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
8226 THEN REPEAT RESA_TAC)
8227 THEN MRESAL_TAC (GEN_ALL HDPLYGY)[`(scs_k_v39 s)`;`s1:stable_sy`][k_sy;B_SY1;ARITH_RULE`2<4`;]
8228 THEN POP_ASSUM (fun th->
8230 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
8233 THEN REWRITE_TAC[BBprime_v39;IN]
8234 THEN ABBREV_TAC`( vv1 i =
8235 if i MOD scs_k_v39 s = 0 then row 4 v else
8236 if i MOD scs_k_v39 s = 1 then row 1 v else
8237 if i MOD scs_k_v39 s = 2 then row 2 v else
8238 row 3 (v:real^3^M))`
8239 THEN EXISTS_TAC`vv1:num->real^3`
8242 ONCE_REWRITE_TAC[GSYM IN]
8243 THEN MATCH_MP_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_4_sqrt8)
8244 THEN EXISTS_TAC`x:real^(M,3)finite_product`
8245 THEN EXISTS_TAC`v:real^3^M`
8246 THEN ASM_REWRITE_TAC[]
8247 THEN POP_ASSUM MP_TAC
8250 SUBGOAL_THEN`vector [ vv1 1; vv1 2; (vv1:num->real^3) 3;vv1 0] = v:real^3^M`
8253 POP_ASSUM(fun th-> REWRITE_TAC[GSYM th])
8254 THEN ASM_REWRITE_TAC[ARITH_RULE`1 MOD 4=1/\ 2 MOD 4=2/\ 3 MOD 4=3/\ 0 MOD 4=0 /\ ~(1=0)/\ ~(2=0)/\ ~(3=0)/\ ~(2=1)/\ ~(3=1)/\ ~(3=2)`;]
8255 THEN ONCE_REWRITE_TAC[CART_EQ]
8256 THEN ASM_REWRITE_TAC[ARITH_RULE`1<=i/\ i<=4 <=>i=1\/ i=2\/ i=3\/ i=4`]
8257 THEN REPEAT RESA_TAC
8259 ASM_SIMP_TAC[row;vector; LAMBDA_BETA; DIMINDEX_3; LENGTH; ARITH] THEN
8260 REWRITE_TAC[num_CONV `3`;num_CONV `2`; num_CONV `1`; EL; HD; TL;]
8261 THEN ASM_SIMP_TAC[CART_EQ; DIMINDEX_3; FORALL_3; VEC_COMPONENT; VECTOR_3; ARITH;row;LAMBDA_BETA];
8266 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[GSYM IN]
8267 THEN REPEAT STRIP_TAC
8268 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_4_sqrt8)
8269 [`x:real^(M,3)finite_product`;`v:real^3^M`;`vv1:num->real^3`;`s:scs_v39`]
8270 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_4_sqrt8)[`v:real^3^M`;`s:scs_v39`;`vv1:num->real^3`;`s1:stable_sy`;`x:real^(M,3)finite_product`]
8271 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_4_sqrt8)
8272 [`vector [ww 1; ww 2; ww 3; ww 0]:real^3^M`;`s:scs_v39`;`ww:num->real^3`;`s1:stable_sy`;`matvec(vector [ww 1; ww 2; ww 3; ww 0]:real^3^M):real^(M,3)finite_product`;]
8273 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_CASE_4_sqrt8)[`ww:num->real^3`;`vector [ww 1; ww 2; ww 3; ww 0]:real^3^M`;`matvec(vector [ww 1; ww 2; ww 3; ww 0]:real^3^M):real^(M,3)finite_product`;`s:scs_v39`;]
8274 THEN REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
8275 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8276 THEN MRESA1_TAC th `matvec(vector [ww 1; ww 2; ww 3; ww 0]:real^3^M):real^(M,3)finite_product`);
8278 MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_4_sqrt8)
8279 [`x:real^(M,3)finite_product`;`v:real^3^M`;`vv1:num->real^3`;`s:scs_v39`]
8280 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_4_sqrt8)[`v:real^3^M`;`s:scs_v39`;`vv1:num->real^3`;`s1:stable_sy`;`x:real^(M,3)finite_product`]
8281 THEN MRESA_TAC ( GEN_ALL TAUSTAR_EQ_TAU_STAR_4_sqrt8)
8282 [`vector [vv 1; vv 2; vv 3; vv 0]:real^3^M`;`s:scs_v39`;`vv:num->real^3`;`s1:stable_sy`;`matvec(vector [vv 1; vv 2; vv 3; vv 0]:real^3^M):real^(M,3)finite_product`;]
8283 THEN REPLICATE_TAC 23 (POP_ASSUM MP_TAC)
8284 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC THEN MP_TAC th)
8285 THEN MRESA_TAC (GEN_ALL IN_NOT_EMPTY_CASE_4_sqrt8)[`vv:num->real^3`;`vector [vv 1; vv 2; vv 3; vv 0]:real^3^M`;`matvec(vector [vv 1; vv 2; vv 3; vv 0]:real^3^M):real^(M,3)finite_product`;`s:scs_v39`;]
8286 THEN REPLICATE_TAC 6 (POP_ASSUM MP_TAC)
8287 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8288 THEN MRESA1_TAC th `matvec(vector [vv 1; vv 2; vv 3; vv 0]:real^3^M):real^(M,3)finite_product`)
8289 THEN POP_ASSUM MP_TAC
8290 THEN POP_ASSUM MP_TAC
8306 let NOT_EMPTY_BBs_v39= prove(
8307 ` !s vv. MEM s s_init_list_v39 /\ vv IN BBs_v39 s
8308 /\ scs_k_v39 s= dimindex(:M)
8310 ~({matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v }={})
8312 ~({matvec(v:real^3^M) | (!i. 1<=i /\ i <= dimindex(:M)==> row i v IN ball_annulus) /\ CONDITION1_SY (change_type_v3 (scs_a_v39 s)) (change_type_v3 (scs_b_v39 s)) v /\ CONDITION2_SY v } ={})
8314 REWRITE_TAC[s_init_list_v39;JEJTVGB_assume_v39;GSYM IN_SET_OF_LIST;taustar_v39;set_of_list;LET_DEF;LET_END_DEF
8315 ;SET_RULE`A IN {A1,A2,A3,A4,A5,A6,A7,A8} <=> A= A1 \/ A= A2 \/ A= A3 \/ A= A4 \/ A= A5 \/ A= A6 \/ A= A7 \/ A= A8`]
8316 THEN REPEAT STRIP_TAC
8317 THEN MP_TAC NOT_EMPTY_CASE_3
8318 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8320 THEN MP_TAC NOT_EMPTY_CASE_4
8321 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8323 THEN MP_TAC NOT_EMPTY_CASE_5
8324 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8326 THEN MP_TAC NOT_EMPTY_CASE_6
8327 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8329 THEN MP_TAC NOT_EMPTY_CASE_4_3
8330 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8332 THEN MP_TAC NOT_EMPTY_CASE_4_sqrt8
8333 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8335 THEN MP_TAC NOT_EMPTY_CASE_5_sqrt8
8336 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8338 THEN MP_TAC NOT_EMPTY_CASE_5_pro_cs
8339 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8347 let XWITCCN_TYPE= prove(
8348 ` !s vv. MEM s s_init_list_v39 /\ vv IN BBs_v39 s
8349 /\ taustar_v39 s vv < &0
8350 /\ scs_k_v39 s= dimindex(:M)
8351 ==> ~(BBprime_v39 s = {})
8353 REWRITE_TAC[s_init_list_v39;JEJTVGB_assume_v39;GSYM IN_SET_OF_LIST;set_of_list;LET_DEF;LET_END_DEF
8354 ;SET_RULE`A IN {A1,A2,A3,A4,A5,A6,A7,A8} <=> A= A1 \/ A= A2 \/ A= A3 \/ A= A4 \/ A= A5 \/ A= A6 \/ A= A7 \/ A= A8`]
8357 THEN MP_TAC XWITCCN_CASE_3
8358 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8360 THEN MP_TAC XWITCCN_CASE_4
8361 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8363 THEN MP_TAC XWITCCN_CASE_5
8364 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8366 THEN MP_TAC XWITCCN_CASE_6
8367 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8369 THEN MP_TAC XWITCCN_CASE_4_3
8370 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8372 THEN MP_TAC XWITCCN_CASE_4_sqrt8
8373 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8375 THEN MP_TAC XWITCCN_CASE_5_sqrt8
8376 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8378 THEN MP_TAC XWITCCN_CASE_5_pro_cs
8379 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8386 let XWITCCN= prove(` !s vv . MEM s s_init_list_v39 /\ vv IN BBs_v39 s
8387 /\ taustar_v39 s vv < &0
8388 ==> ~(BBprime_v39 s = {})`,
8391 THEN MP_TAC(INST_TYPE [`:3`,`:M`]XWITCCN_TYPE)
8392 THEN ASM_REWRITE_TAC[DIMINDEX_3]
8394 THEN POP_ASSUM(fun th-> MRESA_TAC th[`s:scs_v39`;`vv:num->real^3`])
8395 THEN MP_TAC(INST_TYPE [`:2+2`,`:M`]XWITCCN_TYPE)
8396 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_4]
8398 THEN POP_ASSUM(fun th-> MRESA_TAC th[`s:scs_v39`;`vv:num->real^3`])
8399 THEN MP_TAC(INST_TYPE [`:2+3`,`:M`]XWITCCN_TYPE)
8400 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_5]
8402 THEN POP_ASSUM(fun th-> MRESA_TAC th[`s:scs_v39`;`vv:num->real^3`])
8403 THEN MP_TAC(INST_TYPE [`:3+3`,`:M`]XWITCCN_TYPE)
8404 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_6]
8406 THEN POP_ASSUM(fun th-> MRESA_TAC th[`s:scs_v39`;`vv:num->real^3`])
8408 THEN REWRITE_TAC[s_init_list_v39;JEJTVGB_assume_v39;GSYM IN_SET_OF_LIST;set_of_list;LET_DEF;LET_END_DEF
8409 ;SET_RULE`A IN {A1,A2,A3,A4,A5,A6,A7,A8} <=> A= A1 \/ A= A2 \/ A= A3 \/ A= A4 \/ A= A5 \/ A= A6 \/ A= A7 \/ A= A8`]
8411 THEN ASM_REWRITE_TAC[scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;]
8412 THEN REPEAT RESA_TAC