Update from HH
[Flyspeck/.git] / text_formalization / local / XWITCCN.hl
1 (* ========================================================================== *)
2 (* FLYSPECK - BOOK FORMALIZATION                                              *)
3 (*                                                                            *)
4 (* Chapter: Local Fan                                              *)
5 (* Author: Hoang Le Truong                                        *)
6 (* Date: 2012-04-01                                                           *)
7 (* ========================================================================= *)
8
9 (*
10 remaining conclusions from appendix to Local Fan chapter
11 *)
12
13
14 module Xwitccn = struct
15
16
17 open Polyhedron;;
18 open Sphere;;
19 open Topology;;         
20 open Fan_misc;;
21 open Planarity;; 
22 open Conforming;;
23 open Hypermap;;
24 open Fan;;
25 open Topology;;
26 open Wrgcvdr_cizmrrh;;
27 open Local_lemmas;;
28 open Collect_geom;;
29 open Dih2k_hypermap;;
30 open Wjscpro;;
31 open Tecoxbm;;
32 open Hdplygy;;
33 open Nkezbfc_local;;
34 open Flyspeck_constants;;
35 open Gbycpxs;;
36 open Pcrttid;;
37 open Local_lemmas;;
38 open Pack_defs;;
39
40 open Hales_tactic;;
41
42 open Appendix;;
43
44
45
46
47
48 open Hypermap;;
49 open Fan;;
50 open Wrgcvdr_cizmrrh;;
51 open Local_lemmas;;
52 open Flyspeck_constants;;
53 open Pack_defs;;
54
55 open Hales_tactic;;
56
57 open Appendix;;
58
59
60 open Zithlqn;;
61
62
63 let CARD_SLICE_EQ=prove_by_refinement(
64 `!V E FF v w. 
65 convex_local_fan(V,E,FF)
66 /\ ~(v=w) /\
67 v IN V /\ w IN V
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`,
71   (* {{{ proof *)
72 [
73 REPEAT STRIP_TAC
74 THEN ASM_TAC
75 THEN STRIP_TAC
76 THEN POP_ASSUM(fun th-> ASSUME_TAC th
77 THEN REPEAT STRIP_TAC
78 THEN MP_TAC th)
79 THEN REWRITE_TAC[convex_local_fan]
80 THEN RESA_TAC
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`]
84 THEN REMOVE_ASSUM_TAC
85 THEN POP_ASSUM MP_TAC
86 THEN POP_ASSUM MP_TAC
87 THEN REWRITE_TAC[convex_local_fan]
88 THEN STRIP_TAC
89 THEN STRIP_TAC
90 THEN SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF w v`ASSUME_TAC
91 ;
92
93
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
99 ;
100
101
102 STRIP_TAC
103 THEN POP_ASSUM(fun th-> STRIP_TAC
104 THEN MRESA1_TAC th`i:num`)
105 ;
106
107  MRESA_TAC (GEN_ALL ORDER)[`n:num`;`rho_node1 (FF:real^3#real^3->bool)`;`w:real^3`;`v:real^3`];
108
109
110
111 SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF v w`ASSUME_TAC
112
113 ;
114
115
116 REWRITE_TAC[slicev;IN_ELIM_THM]
117 THEN EXISTS_TAC`0`
118 THEN REWRITE_TAC[ITER]
119 THEN ARITH_TAC;
120
121
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)`]
128 THEN RESA_TAC
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)`]
132 THEN RESA_TAC
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
136
137 ;
138
139
140 REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
141 THEN GEN_TAC
142 THEN EQ_TAC;
143
144 STRIP_TAC
145 THEN POP_ASSUM(fun th->
146 MP_TAC th
147 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[slicev;IN_ELIM_THM]
148 THEN ASSUME_TAC th)
149 THEN STRIP_TAC
150 THEN SUBGOAL_THEN`(!i. 0 < i /\ i < n ==> ~(ITER i (rho_node1 (FF:real^3#real^3->bool)) v = w))`ASSUME_TAC
151 ;
152
153
154 STRIP_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`)
158 ;
159
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
170 THEN ARITH_TAC;
171
172 RESA_TAC
173 ;
174
175
176
177
178
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
180
181 ;
182
183
184 REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
185 THEN GEN_TAC
186 THEN EQ_TAC;
187
188 POP_ASSUM MP_TAC
189 THEN POP_ASSUM MP_TAC
190 THEN REMOVE_ASSUM_TAC
191 THEN REPEAT STRIP_TAC
192 THEN POP_ASSUM(fun th->
193 MP_TAC th
194 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[slicev;IN_ELIM_THM]
195 THEN ASSUME_TAC th)
196 THEN STRIP_TAC
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]);
206
207
208 RESA_TAC
209 ;
210
211
212
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;
214
215 REMOVE_ASSUM_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
219 THEN STRIP_TAC
220 ;
221
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[]
226 THEN STRIP_TAC
227 THEN POP_ASSUM MATCH_MP_TAC
228 THEN ASM_REWRITE_TAC[];
229
230
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]
234 THEN ARITH_TAC
235 ;
236
237
238
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;
240
241 REMOVE_ASSUM_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
245 THEN STRIP_TAC
246 ;
247
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[]
252 THEN STRIP_TAC
253 THEN POP_ASSUM MATCH_MP_TAC
254 THEN ASM_REWRITE_TAC[];
255
256
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]
260 THEN ARITH_TAC
261 ;
262
263
264
265 POP_ASSUM(fun th-> 
266 POP_ASSUM( fun th1->
267 STRIP_TAC
268 THEN STRIP_TAC
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
273 ;
274
275
276 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_NUMSEG]
277 THEN ARITH_TAC;
278
279 SUBGOAL_THEN`{i | i = 0 \/ n <= i /\ i < CARD (V:real^3->bool)} = (n.. (CARD V -1)) UNION {0}`
280 ASSUME_TAC;
281
282
283 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_NUMSEG;UNION;IN_SING]
284 THEN ARITH_TAC;
285
286
287 ASM_REWRITE_TAC[]
288 THEN MP_TAC(ARITH_RULE`n=0\/ 0< n`)
289 THEN RESA_TAC;
290
291 POP_ASSUM(fun th-> ASM_TAC
292 THEN REWRITE_TAC[th;ITER])
293 THEN REPEAT RESA_TAC
294 ;
295
296
297 SUBGOAL_THEN`(n..CARD (V:real^3->bool) - 1) INTER {0} ={}`ASSUME_TAC;
298
299
300
301 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_NUMSEG;UNION;IN_SING;INTER]
302 THEN GEN_TAC
303 THEN EQ_TAC;
304
305 POP_ASSUM MP_TAC
306 THEN ARITH_TAC;
307
308 SET_TAC[];
309
310
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
316 THEN ARITH_TAC
317 ;
318
319 ]);;
320
321
322
323 let CARD_SLICE_LE=prove_by_refinement(
324 `!V E FF v w. 
325 convex_local_fan(V,E,FF)
326 /\ ~(v=w) /\
327 v IN V /\ w IN V
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`,
331 [
332 REPEAT STRIP_TAC
333 THEN ASM_TAC
334 THEN STRIP_TAC
335 THEN POP_ASSUM(fun th-> ASSUME_TAC th
336 THEN REPEAT STRIP_TAC
337 THEN MP_TAC th)
338 THEN REWRITE_TAC[convex_local_fan]
339 THEN RESA_TAC
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))
348 THEN STRIP_TAC
349 THEN STRIP_TAC
350 THEN SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF w v`ASSUME_TAC;
351
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;
357
358 STRIP_TAC
359 THEN POP_ASSUM(fun th-> STRIP_TAC
360 THEN MRESA1_TAC th`i:num`);
361
362 MRESA_TAC (GEN_ALL ORDER)[`n:num`;`rho_node1 (FF:real^3#real^3->bool)`;`w:real^3`;`v:real^3`];
363
364 SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF v w`ASSUME_TAC;
365
366 REWRITE_TAC[slicev;IN_ELIM_THM]
367 THEN EXISTS_TAC`0`
368 THEN REWRITE_TAC[ITER]
369 THEN ARITH_TAC;
370
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)`]
377 THEN RESA_TAC
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)`]
381 THEN RESA_TAC
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
389 THEN ARITH_TAC]);;
390
391
392
393
394
395
396 let CARD_SLICE_LE1=prove_by_refinement(
397 `!V E FF v w. 
398 convex_local_fan(V,E,FF)
399 /\ ~(v=w) /\
400 v IN V /\ w IN V
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`,
404 [
405 REPEAT STRIP_TAC
406 THEN ASM_TAC
407 THEN STRIP_TAC
408 THEN POP_ASSUM(fun th-> ASSUME_TAC th
409 THEN REPEAT STRIP_TAC
410 THEN MP_TAC th)
411 THEN REWRITE_TAC[convex_local_fan]
412 THEN RESA_TAC
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))
421 THEN STRIP_TAC
422 THEN STRIP_TAC
423 THEN SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF w v`ASSUME_TAC;
424
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;
430
431 STRIP_TAC
432 THEN POP_ASSUM(fun th-> STRIP_TAC
433 THEN MRESA1_TAC th`i:num`);
434
435 MRESA_TAC (GEN_ALL ORDER)[`n:num`;`rho_node1 (FF:real^3#real^3->bool)`;`w:real^3`;`v:real^3`];
436
437 SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF v w`ASSUME_TAC;
438
439 REWRITE_TAC[slicev;IN_ELIM_THM]
440 THEN EXISTS_TAC`0`
441 THEN REWRITE_TAC[ITER]
442 THEN ARITH_TAC;
443
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)`]
450 THEN RESA_TAC
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)`]
454 THEN RESA_TAC
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
462 THEN ARITH_TAC]);;
463
464
465
466
467
468 let SLICE_REPRENT=prove_by_refinement(
469 `!V E FF v w. 
470 convex_local_fan(V,E,FF)
471 /\ ~(v=w) /\
472 v IN V /\ w IN V
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}`
476 ,
477 [
478 REPEAT STRIP_TAC
479 THEN ASM_TAC
480 THEN STRIP_TAC
481 THEN POP_ASSUM(fun th-> ASSUME_TAC th
482 THEN REPEAT STRIP_TAC
483 THEN MP_TAC th)
484 THEN REWRITE_TAC[convex_local_fan]
485 THEN RESA_TAC
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]
493 THEN STRIP_TAC
494 THEN STRIP_TAC
495 THEN SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF w v`ASSUME_TAC;
496
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;
502
503 STRIP_TAC
504 THEN POP_ASSUM(fun th-> STRIP_TAC
505 THEN MRESA1_TAC th`i:num`);
506
507  MRESA_TAC (GEN_ALL ORDER)[`n:num`;`rho_node1 (FF:real^3#real^3->bool)`;`w:real^3`;`v:real^3`];
508
509 SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF v w`ASSUME_TAC;
510
511 REWRITE_TAC[slicev;IN_ELIM_THM]
512 THEN EXISTS_TAC`0`
513 THEN REWRITE_TAC[ITER]
514 THEN ARITH_TAC;
515
516
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]
521 THEN GEN_TAC
522 THEN EQ_TAC;
523
524 STRIP_TAC
525 THEN POP_ASSUM(fun th->
526 MP_TAC th
527 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[slicev;IN_ELIM_THM]
528 THEN ASSUME_TAC th)
529 THEN STRIP_TAC
530 THEN SUBGOAL_THEN`(!i. 0 < i /\ i < n ==> ~(ITER i (rho_node1 (FF:real^3#real^3->bool)) v = w))`ASSUME_TAC;
531
532 STRIP_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`);
536
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
547 THEN ARITH_TAC;
548
549 RESA_TAC;
550
551 ]);;
552
553
554
555
556 let SLICE_REPRENT2=prove_by_refinement(
557 `!V E FF v w. 
558 convex_local_fan(V,E,FF)
559 /\ ~(v=w) /\
560 v IN V /\ w IN V
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}`,
564 [
565 REPEAT STRIP_TAC
566 THEN ASM_TAC
567 THEN STRIP_TAC
568 THEN POP_ASSUM(fun th-> ASSUME_TAC th
569 THEN REPEAT STRIP_TAC
570 THEN MP_TAC th)
571 THEN REWRITE_TAC[convex_local_fan]
572 THEN RESA_TAC
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]
580 THEN STRIP_TAC
581 THEN STRIP_TAC
582 THEN SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF w v`ASSUME_TAC;
583
584
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;
590
591 STRIP_TAC
592 THEN POP_ASSUM(fun th-> STRIP_TAC
593 THEN MRESA1_TAC th`i:num`);
594
595  MRESA_TAC (GEN_ALL ORDER)[`n:num`;`rho_node1 (FF:real^3#real^3->bool)`;`w:real^3`;`v:real^3`];
596
597 SUBGOAL_THEN`v IN slicev (E:(real^3->bool)->bool) FF v w`ASSUME_TAC;
598
599 REWRITE_TAC[slicev;IN_ELIM_THM]
600 THEN EXISTS_TAC`0`
601 THEN REWRITE_TAC[ITER]
602 THEN ARITH_TAC;
603
604
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]
609 THEN GEN_TAC
610 THEN EQ_TAC;
611
612 POP_ASSUM MP_TAC
613 THEN POP_ASSUM MP_TAC
614 THEN REMOVE_ASSUM_TAC
615 THEN REPEAT STRIP_TAC
616 THEN POP_ASSUM(fun th->
617 MP_TAC th
618 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[slicev;IN_ELIM_THM]
619 THEN ASSUME_TAC th)
620 THEN STRIP_TAC
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]);
630
631
632 RESA_TAC;
633
634 ]);;
635
636
637 let change_type_v3= new_definition`(change_type_v3 (a:num->num->real)) (i,j)= a i j  `
638 ;;
639
640
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}  `
643 ;;
644
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]
652 THEN MP_TAC th)
653 THEN ABBREV_TAC`n= i DIV k`
654 THEN ASM_TAC
655 THEN SPEC_TAC (`i:num`,`i:num`)
656 THEN SPEC_TAC (`n:num`,`n:num`)
657 THEN INDUCT_TAC
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`]])
666 ;;
667
668
669
670
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)))`,
680   (* {{{ proof *)
681 [
682 REPEAT STRIP_TAC
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]
686 THEN STRIP_TAC;
687
688 STRIP_TAC;
689
690 STRIP_TAC;
691
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`];
694
695 STRIP_TAC;
696
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
701 THEN ARITH_TAC;
702
703 STRIP_TAC;
704
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`)
709 THEN RESA_TAC
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`)
712 THEN RESA_TAC
713 THEN MP_TAC(ARITH_RULE`x<= 2==> x=0 \/ x=1 \/ x=2`)
714 THEN ASM_REWRITE_TAC[]
715 THEN RESA_TAC
716 THEN ARITH_TAC;
717
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[]
725 THEN RESA_TAC
726 THEN ARITH_TAC;
727
728 STRIP_TAC;
729
730 REPEAT STRIP_TAC
731 THEN MP_TAC(ARITH_RULE`i MOD 3= j MOD 3 \/ ~(i MOD 3= j MOD 3)`)
732 THEN RESA_TAC;
733
734 REAL_ARITH_TAC;
735
736 MP_TAC(ARITH_RULE`i MOD 3= SUC j MOD 3 \/ ~(i MOD 3= SUC j MOD 3)`)
737 THEN RESA_TAC;
738
739 REWRITE_TAC[h0]
740 THEN REAL_ARITH_TAC;
741
742 MP_TAC CHOOSE_MOD_3
743 THEN ASM_REWRITE_TAC[h0]
744 THEN RESA_TAC
745 THEN REAL_ARITH_TAC;
746
747 STRIP_TAC;
748
749 REPEAT GEN_TAC
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];
755
756
757 SET_TAC[];
758
759 STRIP_TAC;
760
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]
766 THEN REAL_ARITH_TAC;
767
768 STRIP_TAC;
769
770 REWRITE_TAC[IN_NUMSEG;ARITH_RULE`(0 <= i /\ i <= 2)<=> i=0 \/ i=1\/ i=2`]
771 THEN REPEAT STRIP_TAC
772 THEN 
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]
777 THEN REAL_ARITH_TAC;
778
779 SET_TAC[]
780 ]);;
781   (* }}} *)
782
783
784
785
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)))
795 `,
796   (* {{{ proof *)
797 [
798 REPEAT STRIP_TAC
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]
802 THEN STRIP_TAC;
803
804 STRIP_TAC;
805
806 STRIP_TAC;
807
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`];
810
811 STRIP_TAC;
812
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
817 THEN ARITH_TAC;
818
819 STRIP_TAC;
820
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`)
825 THEN RESA_TAC
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`)
828 THEN RESA_TAC
829 THEN MP_TAC(ARITH_RULE`x<= 3==> x=0 \/ x=1 \/ x=2 \/ x=3`)
830 THEN ASM_REWRITE_TAC[]
831 THEN RESA_TAC
832 THEN ARITH_TAC;
833
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[]
841 THEN RESA_TAC
842 THEN ARITH_TAC;
843
844 STRIP_TAC;
845
846 REPEAT STRIP_TAC
847 THEN MP_TAC(ARITH_RULE`i MOD 4= j MOD 4 \/ ~(i MOD 4= j MOD 4)`)
848 THEN RESA_TAC;
849
850 REAL_ARITH_TAC;
851
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)`)
853 THEN RESA_TAC
854 THEN REWRITE_TAC[h0]
855 THEN REAL_ARITH_TAC;
856
857 STRIP_TAC;
858
859 REPEAT GEN_TAC
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];
865
866 STRIP_TAC;
867
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]
873 THEN REAL_ARITH_TAC;
874
875 STRIP_TAC;
876
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]
881 THEN REAL_ARITH_TAC;
882
883 SET_TAC[]
884 ]);;
885   (* }}} *)
886
887
888
889
890
891
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)))`,
901   (* {{{ proof *)
902 [
903
904 REPEAT STRIP_TAC
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]
908 THEN STRIP_TAC;
909
910
911 STRIP_TAC;
912
913 STRIP_TAC;
914
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`];
917
918 STRIP_TAC;
919
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
924 THEN ARITH_TAC;
925
926 STRIP_TAC;
927
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`)
932 THEN RESA_TAC
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`)
935 THEN RESA_TAC
936 THEN MP_TAC(ARITH_RULE`x<= 4==> x=0 \/ x=1 \/ x=2 \/ x=3\/ x=4`)
937 THEN ASM_REWRITE_TAC[]
938 THEN RESA_TAC
939 THEN ARITH_TAC;
940
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[]
948 THEN RESA_TAC
949 THEN ARITH_TAC;
950
951 STRIP_TAC;
952
953 REPEAT STRIP_TAC
954 THEN MP_TAC(ARITH_RULE`i MOD 5= j MOD 5 \/ ~(i MOD 5= j MOD 5)`)
955 THEN RESA_TAC;
956
957 REAL_ARITH_TAC;
958
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)`)
960 THEN RESA_TAC
961 THEN REWRITE_TAC[h0]
962 THEN REAL_ARITH_TAC;
963
964 STRIP_TAC;
965
966 REPEAT GEN_TAC
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];
972
973 STRIP_TAC;
974
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]
980 THEN REAL_ARITH_TAC;
981
982 STRIP_TAC;
983
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]
988 THEN REAL_ARITH_TAC;
989
990 SET_TAC[]
991 ]);;
992   (* }}} *)
993
994
995
996
997
998
999
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)))`,
1009   (* {{{ proof *)
1010 [
1011 REPEAT STRIP_TAC
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]
1015 THEN STRIP_TAC;
1016
1017
1018 STRIP_TAC;
1019
1020 STRIP_TAC;
1021
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`];
1024
1025 STRIP_TAC;
1026
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
1031 THEN ARITH_TAC;
1032
1033 STRIP_TAC;
1034
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`)
1039 THEN RESA_TAC
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`)
1042 THEN RESA_TAC
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[]
1045 THEN RESA_TAC
1046 THEN ARITH_TAC;
1047
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[]
1055 THEN RESA_TAC
1056 THEN ARITH_TAC;
1057
1058 STRIP_TAC;
1059
1060 REPEAT STRIP_TAC
1061 THEN MP_TAC(ARITH_RULE`i MOD 6= j MOD 6 \/ ~(i MOD 6= j MOD 6)`)
1062 THEN RESA_TAC;
1063
1064 REAL_ARITH_TAC;
1065
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)`)
1067 THEN RESA_TAC
1068 THEN REWRITE_TAC[h0]
1069 THEN REAL_ARITH_TAC;
1070
1071 STRIP_TAC;
1072
1073 REPEAT GEN_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];
1079
1080 STRIP_TAC;
1081
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;
1088
1089 STRIP_TAC;
1090
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;
1096
1097 SET_TAC[]
1098 ]);;
1099   (* }}} *)
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
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)))
1121 `,
1122   (* {{{ proof *)
1123 [
1124 REPEAT STRIP_TAC
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]
1128 THEN STRIP_TAC;
1129
1130 STRIP_TAC;
1131
1132 STRIP_TAC;
1133
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`];
1136
1137 STRIP_TAC;
1138
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
1143 THEN ARITH_TAC;
1144
1145 STRIP_TAC;
1146
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`)
1151 THEN RESA_TAC
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`)
1154 THEN RESA_TAC
1155 THEN MP_TAC(ARITH_RULE`x<= 3==> x=0 \/ x=1 \/ x=2 \/ x=3`)
1156 THEN ASM_REWRITE_TAC[]
1157 THEN RESA_TAC
1158 THEN ARITH_TAC;
1159
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[]
1167 THEN RESA_TAC
1168 THEN ARITH_TAC;
1169
1170 STRIP_TAC;
1171
1172 REPEAT STRIP_TAC
1173 THEN MP_TAC(ARITH_RULE`i MOD 4= j MOD 4 \/ ~(i MOD 4= j MOD 4)`)
1174 THEN RESA_TAC;
1175
1176 REAL_ARITH_TAC;
1177
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)`)
1179 THEN RESA_TAC
1180 THEN REWRITE_TAC[h0]
1181 THEN REAL_ARITH_TAC;
1182
1183 STRIP_TAC;
1184
1185 REPEAT GEN_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];
1191
1192 STRIP_TAC;
1193
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;
1200
1201 STRIP_TAC;
1202
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;
1208
1209 SET_TAC[]
1210 ]);;
1211   (* }}} *)
1212
1213
1214
1215
1216
1217
1218
1219
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)))`,
1229   (* {{{ proof *)
1230 [
1231
1232 REPEAT STRIP_TAC
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]
1236 THEN STRIP_TAC;
1237
1238
1239 STRIP_TAC;
1240
1241 STRIP_TAC;
1242
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`];
1245
1246 STRIP_TAC;
1247
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
1252 THEN ARITH_TAC;
1253
1254 STRIP_TAC;
1255
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`)
1260 THEN RESA_TAC
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`)
1263 THEN RESA_TAC
1264 THEN MP_TAC(ARITH_RULE`x<= 4==> x=0 \/ x=1 \/ x=2 \/ x=3\/ x=4`)
1265 THEN ASM_REWRITE_TAC[]
1266 THEN RESA_TAC
1267 THEN ARITH_TAC;
1268
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[]
1276 THEN RESA_TAC
1277 THEN ARITH_TAC;
1278
1279 STRIP_TAC;
1280
1281 REPEAT STRIP_TAC
1282 THEN MP_TAC(ARITH_RULE`i MOD 5= j MOD 5 \/ ~(i MOD 5= j MOD 5)`)
1283 THEN RESA_TAC;
1284
1285 REAL_ARITH_TAC;
1286
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)`)
1288 THEN RESA_TAC
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;
1292
1293
1294 STRIP_TAC;
1295
1296 REPEAT GEN_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];
1302
1303 STRIP_TAC;
1304
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)
1309 /\ ~(4=2) /\ ~(4=3)
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;
1314
1315 STRIP_TAC;
1316
1317
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)
1321 /\ ~(4=2) /\ ~(4=3)
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`]
1325
1326 THEN REAL_ARITH_TAC;
1327
1328
1329 SET_TAC[]
1330 ]);;
1331   (* }}} *)
1332
1333
1334
1335
1336
1337
1338
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)))`,
1348   (* {{{ proof *)
1349 [
1350 REPEAT STRIP_TAC
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}`]
1354 THEN STRIP_TAC;
1355
1356 STRIP_TAC;
1357
1358 STRIP_TAC;
1359
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`];
1362
1363 STRIP_TAC;
1364
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
1369 THEN ARITH_TAC;
1370
1371 STRIP_TAC;
1372
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`)
1377 THEN RESA_TAC
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`)
1380 THEN RESA_TAC
1381 THEN MP_TAC(ARITH_RULE`x<= 3==> x=0 \/ x=1 \/ x=2 \/ x=3`)
1382 THEN ASM_REWRITE_TAC[]
1383 THEN RESA_TAC
1384 THEN ARITH_TAC;
1385
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[]
1393 THEN RESA_TAC
1394 THEN ARITH_TAC;
1395
1396 STRIP_TAC;
1397
1398 REPEAT STRIP_TAC
1399 THEN MP_TAC(ARITH_RULE`i MOD 4= j MOD 4 \/ ~(i MOD 4= j MOD 4)`)
1400 THEN RESA_TAC;
1401
1402 REAL_ARITH_TAC;
1403
1404 MP_TAC(SET_RULE`{i MOD 4, j MOD 4} = {0, 1} \/ ~({i MOD 4, j MOD 4} = {0, 1})`)
1405 THEN RESA_TAC;
1406
1407
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`];
1409
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)`)
1411 THEN RESA_TAC
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;
1415
1416
1417 STRIP_TAC;
1418
1419 REPEAT GEN_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];
1425
1426 STRIP_TAC;
1427
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)
1433 /\ ~(4=2) /\ ~(4=3)
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`;]
1435 THEN RESA_TAC
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;
1439
1440 STRIP_TAC;
1441
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]
1448 THEN RESA_TAC
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;
1452
1453
1454 SET_TAC[]
1455 ]);;
1456   (* }}} *)
1457
1458
1459
1460
1461
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)))`,
1471   (* {{{ proof *)
1472 [
1473
1474 REPEAT STRIP_TAC
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}`]
1478 THEN STRIP_TAC;
1479
1480 STRIP_TAC;
1481
1482 STRIP_TAC;
1483
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`];
1486
1487 STRIP_TAC;
1488
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
1493 THEN ARITH_TAC;
1494
1495 STRIP_TAC;
1496
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`)
1501 THEN RESA_TAC
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`)
1504 THEN RESA_TAC
1505 THEN MP_TAC(ARITH_RULE`x<= 4==> x=0 \/ x=1 \/ x=2 \/ x=3\/ x=4`)
1506 THEN ASM_REWRITE_TAC[]
1507 THEN RESA_TAC
1508 THEN ARITH_TAC;
1509
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[]
1517 THEN RESA_TAC
1518 THEN ARITH_TAC;
1519
1520 STRIP_TAC;
1521
1522 REPEAT STRIP_TAC
1523 THEN MP_TAC(ARITH_RULE`i MOD 5= j MOD 5 \/ ~(i MOD 5= j MOD 5)`)
1524 THEN RESA_TAC;
1525
1526 REAL_ARITH_TAC;
1527
1528 MP_TAC(SET_RULE`{i MOD 5, j MOD 5} = {0, 1} \/ ~({i MOD 5, j MOD 5} = {0, 1})`)
1529 THEN RESA_TAC;
1530
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`];
1532
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)`)
1534 THEN RESA_TAC
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;
1538
1539
1540 STRIP_TAC;
1541
1542 REPEAT GEN_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];
1548
1549 STRIP_TAC;
1550
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;
1560
1561 STRIP_TAC;
1562
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]
1570 THEN RESA_TAC
1571 THEN RESA_TAC
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;
1575
1576 SET_TAC[]
1577 ]);;
1578   (* }}} *)
1579
1580
1581
1582
1583
1584
1585
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 `,
1594   (* {{{ proof *)
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
1597 THEN STRIP_TAC
1598 THEN REPEAT GEN_TAC
1599 THEN STRIP_TAC
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))`))
1602 ]);;
1603   (* }}} *)
1604
1605
1606
1607
1608
1609
1610 let SCS_K_LT_2= prove_by_refinement(
1611 `MEM s s_init_list_v39
1612 ==> 2< scs_k_v39 s`,
1613   (* {{{ proof *)
1614   [
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]
1619 THEN ARITH_TAC
1620 ]);;
1621   (* }}} *)
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
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
1653 `,
1654 REPEAT STRIP_TAC
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);;
1658
1659
1660
1661
1662 let ROW_IN_BALL_ANNULUS_3=
1663 fun (th:term)->
1664 ASM_SIMP_TAC[]
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]
1670 THEN EXISTS_TAC th
1671 THEN REWRITE_TAC[SET_RULE`(a:num) IN(:num)`]
1672 ;;
1673
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)`]);;
1680
1681 let  INEQUALITY_A_B_SCS_TAC_3=
1682 fun (th:term)->
1683 MP_TAC(ARITH_RULE`1<= i /\ i<= 3==> i=1\/ i=2\/ i=3`)
1684 THEN RESA_TAC
1685 THENL[
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];;
1689
1690
1691
1692
1693
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))
1700 /\ vv IN BBs_v39 s
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
1703 =v
1704 /\ matvec (v:real^3^M) =a
1705 ==> 
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  }`,
1707   (* {{{ proof *)
1708 [
1709
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[]
1719 THEN STRIP_TAC;
1720
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
1724 THENL[
1725 ROW_IN_BALL_ANNULUS_3 `1`;
1726 ROW_IN_BALL_ANNULUS_3 `2`;
1727 ROW_IN_BALL_ANNULUS_3 `0`];
1728
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
1732 THEN REPEAT GEN_TAC
1733 THEN STRIP_TAC
1734 THENL[
1735 INEQUALITY_A_B_SCS_TAC_3 `1` ;
1736 INEQUALITY_A_B_SCS_TAC_3 `2` ;
1737 INEQUALITY_A_B_SCS_TAC_3 `0` ];
1738 ]);;
1739   (* }}} *)
1740
1741
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))
1748 /\ vv IN BBs_v39 s
1749 /\ scs_k_v39 s= dimindex(:M)
1750 ==> 
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 }={})`
1752 ,
1753   (* {{{ proof *)
1754 [
1755 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;]
1756 THEN STRIP_TAC
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[]
1762 ]);;
1763   (* }}} *)
1764
1765
1766
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))
1773 ==>
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)`,
1776 REPEAT STRIP_TAC
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]);;
1782
1783
1784
1785
1786
1787
1788
1789 let VV_IN_BALL_ANNULUS_TAC_3=
1790 fun (so:term)-> 
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) `] )
1793 ;;
1794
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-> 
1801 REPEAT DISCH_TAC
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`])
1808 ))
1809 THEN MP_TAC SCS_A_B__EQ_MOD_3
1810 THEN ASM_REWRITE_TAC[]
1811 THEN STRIP_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`]
1814 THEN RESA_TAC
1815 THEN RESA_TAC
1816 ;;
1817
1818
1819 let PROVE_INEQUALITY_TAC_3=
1820 fun (th:term)->
1821 MP_TAC(ARITH_RULE`(j MOD 3<3)==> (j MOD 3=0) \/ (j MOD 3=1) \/ (j MOD 3=2)`)
1822 THEN RESA_TAC 
1823 THENL[
1824 PROVE_INEQUALITY_TAC_30  th `3`;
1825 PROVE_INEQUALITY_TAC_30 th `1`;
1826 PROVE_INEQUALITY_TAC_30  th `2`];;
1827
1828
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
1835 /\
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
1842 row 2 v)
1843 ==> vv IN BBs_v39 s`,
1844   (* {{{ proof *)
1845 [
1846
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;
1850
1851 EXPAND_TAC"s"
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;];
1853
1854 ASM_REWRITE_TAC[ARITH_RULE`3<=3`]
1855 THEN
1856 POP_ASSUM (fun th-> 
1857 REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
1858 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
1859 THEN ASSUME_TAC th
1860 THEN REPEAT STRIP_TAC)
1861 THEN POP_ASSUM MP_TAC
1862 THEN ASM_REWRITE_TAC[th;IN] 
1863 THEN STRIP_TAC
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;]
1865 THEN STRIP_TAC;
1866
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`)
1872 THEN RESA_TAC
1873 THENL[
1874 VV_IN_BALL_ANNULUS_TAC_3 `3`;
1875 VV_IN_BALL_ANNULUS_TAC_3 `1`;
1876 VV_IN_BALL_ANNULUS_TAC_3 `2`;];
1877
1878 STRIP_TAC;
1879
1880 ASM_REWRITE_TAC[periodic]
1881 THEN GEN_TAC
1882 THEN MRESAL_TAC MOD_EQ[`i+3:num`;`i:num`;`3:num`;`1`][ARITH_RULE`1*A=A`];
1883
1884 STRIP_TAC;
1885
1886 REWRITE_TAC[dist]
1887 THEN REPEAT GEN_TAC
1888 THEN SUBGOAL_THEN`!i. (vv:num->real^3) i= vv (i MOD 3)` ASSUME_TAC;
1889
1890 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
1891 THEN GEN_TAC
1892 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`3`][ARITH_RULE`~(3=0)`];
1893
1894 POP_ASSUM MP_TAC
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)`)
1899 THEN RESA_TAC
1900 THENL[
1901 PROVE_INEQUALITY_TAC_3 `3`;
1902 PROVE_INEQUALITY_TAC_3 `1`;
1903 PROVE_INEQUALITY_TAC_3 `2`;];
1904
1905 ASM_REWRITE_TAC[ARITH_RULE`3<=3`];
1906 ]);;
1907   (* }}} *)
1908
1909
1910
1911
1912
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)) 
1914 ==> k=3/\ 2<k`,
1915 SIMP_TAC[tri_stable;ARITH_RULE`2<3`])
1916 ;;
1917
1918
1919
1920
1921
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))
1928 /\ vv IN BBs_v39 s
1929 ==> ~(vv 1= vec 0)/\  ~(vv 2= vec 0) /\ ~(vv 0= vec 0)`,
1930   (* {{{ proof *)
1931 [
1932 REWRITE_TAC[IN]
1933 THEN STRIP_TAC
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]
1936 THEN STRIP_TAC
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;
1940
1941 EXISTS_TAC`0`
1942 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
1943
1944 SUBGOAL_THEN`(?x. x IN (:num) /\ vv 1 = (vv:num->real^3) x)`ASSUME_TAC;
1945
1946 EXISTS_TAC`1`
1947 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
1948
1949 SUBGOAL_THEN`(?x. x IN (:num) /\ vv 2 = (vv:num->real^3) x)`ASSUME_TAC;
1950
1951 EXISTS_TAC`2`
1952 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
1953
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;])
1959 THEN STRIP_TAC;
1960
1961 STRIP_TAC
1962 THEN POP_ASSUM(fun th-> ASM_TAC
1963 THEN REWRITE_TAC[th;DIST_REFL;REAL_ARITH`(&0< &2)`]);
1964 STRIP_TAC;
1965 STRIP_TAC
1966 THEN POP_ASSUM(fun th-> ASM_TAC
1967 THEN REWRITE_TAC[th;DIST_REFL;REAL_ARITH`(&0< &2)`]);
1968 STRIP_TAC
1969 THEN POP_ASSUM(fun th-> ASM_TAC
1970 THEN REWRITE_TAC[th;DIST_REFL;REAL_ARITH`(&0< &2)`])
1971 ]);;
1972   (* }}} *)
1973
1974
1975
1976
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
1983 /\ vv IN BBs_v39 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}`
1987 ,
1988   (* {{{ proof *)
1989 [
1990
1991 REWRITE_TAC[Local_lemmas.collinear_fan22;aff;AFFINE_HULL_2;IN_ELIM_THM;
1992 VECTOR_ARITH`A % vec 0+B=B`]
1993 THEN STRIP_TAC
1994 THEN MP_TAC POINT_IN_BBS_IS_NOT_0_3
1995 THEN RESA_TAC
1996 THEN ASM_TAC
1997 THEN REWRITE_TAC[IN]
1998 THEN STRIP_TAC
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;
2001
2002 EXPAND_TAC"s"
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;];
2004
2005
2006 ASM_REWRITE_TAC[ARITH_RULE`3<=3`]
2007 THEN POP_ASSUM(fun th->
2008 STRIP_TAC
2009 THEN ASSUME_TAC th)
2010 THEN REPEAT DISCH_TAC
2011 THEN REPEAT STRIP_TAC;
2012
2013
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
2019 THEN EXPAND_TAC"s"
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
2024 THEN MP_TAC th)
2025 THEN SUBGOAL_THEN`(?x. x IN (:num) /\ vv 1 = (vv:num->real^3) x)`ASSUME_TAC;
2026
2027
2028 EXISTS_TAC`1`
2029 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
2030
2031 SUBGOAL_THEN`(?x. x IN (:num) /\ vv 2 = (vv:num->real^3) x)`ASSUME_TAC;
2032
2033
2034 EXISTS_TAC`2`
2035 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
2036
2037
2038 REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
2039 THEN STRIP_TAC
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)`)
2043 THEN STRIP_TAC
2044 ;
2045
2046
2047  MP_TAC(REAL_ARITH`&0<= v\/ &0<= --( v)`)
2048 THEN STRIP_TAC
2049 ;
2050
2051
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]
2064 THEN REAL_ARITH_TAC
2065
2066 ;
2067
2068
2069
2070
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
2084 THEN MP_TAC th)
2085 THEN POP_ASSUM MP_TAC
2086 THEN ASM_REWRITE_TAC[h0]
2087 THEN REAL_ARITH_TAC
2088 ;
2089
2090
2091  MP_TAC(REAL_ARITH`&0<= v\/ &0<= --( v)`)
2092 THEN STRIP_TAC
2093 ;
2094
2095
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
2109 THEN MP_TAC th)
2110 THEN POP_ASSUM MP_TAC
2111 THEN ASM_REWRITE_TAC[h0]
2112 THEN REAL_ARITH_TAC
2113 ;
2114
2115
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
2129 THEN MP_TAC th)
2130 THEN POP_ASSUM MP_TAC
2131 THEN ASM_REWRITE_TAC[h0]
2132 THEN REAL_ARITH_TAC;
2133
2134
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
2140 THEN EXPAND_TAC"s"
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
2145 THEN MP_TAC th)
2146 THEN SUBGOAL_THEN`(?x. x IN (:num) /\ vv 1 = (vv:num->real^3) x)`ASSUME_TAC;
2147
2148
2149 EXISTS_TAC`1`
2150 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
2151
2152 SUBGOAL_THEN`(?x. x IN (:num) /\ vv 0 = (vv:num->real^3) x)`ASSUME_TAC;
2153
2154
2155 EXISTS_TAC`0`
2156 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
2157
2158
2159 REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
2160 THEN STRIP_TAC
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)`)
2164 THEN STRIP_TAC
2165 ;
2166
2167
2168  MP_TAC(REAL_ARITH`&0<= v\/ &0<= --( v)`)
2169 THEN STRIP_TAC
2170 ;
2171
2172
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]
2185 THEN REAL_ARITH_TAC
2186
2187 ;
2188
2189
2190
2191
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
2205 THEN MP_TAC th)
2206 THEN POP_ASSUM MP_TAC
2207 THEN ASM_REWRITE_TAC[h0]
2208 THEN REAL_ARITH_TAC
2209 ;
2210
2211
2212  MP_TAC(REAL_ARITH`&0<= v\/ &0<= --( v)`)
2213 THEN STRIP_TAC
2214 ;
2215
2216
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
2230 THEN MP_TAC th)
2231 THEN POP_ASSUM MP_TAC
2232 THEN ASM_REWRITE_TAC[h0]
2233 THEN REAL_ARITH_TAC
2234 ;
2235
2236
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
2250 THEN MP_TAC th)
2251 THEN POP_ASSUM MP_TAC
2252 THEN ASM_REWRITE_TAC[h0]
2253 THEN REAL_ARITH_TAC;
2254
2255
2256
2257
2258
2259
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
2265 THEN EXPAND_TAC"s"
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
2270 THEN MP_TAC th)
2271 THEN SUBGOAL_THEN`(?x. x IN (:num) /\ vv 2 = (vv:num->real^3) x)`ASSUME_TAC;
2272
2273
2274 EXISTS_TAC`2`
2275 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
2276
2277 SUBGOAL_THEN`(?x. x IN (:num) /\ vv 0 = (vv:num->real^3) x)`ASSUME_TAC;
2278
2279
2280 EXISTS_TAC`0`
2281 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
2282
2283
2284 REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
2285 THEN STRIP_TAC
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)`)
2289 THEN STRIP_TAC
2290 ;
2291
2292
2293  MP_TAC(REAL_ARITH`&0<= v\/ &0<= --( v)`)
2294 THEN STRIP_TAC
2295 ;
2296
2297
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]
2310 THEN REAL_ARITH_TAC
2311
2312 ;
2313
2314
2315
2316
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
2330 THEN MP_TAC th)
2331 THEN POP_ASSUM MP_TAC
2332 THEN ASM_REWRITE_TAC[h0]
2333 THEN REAL_ARITH_TAC
2334 ;
2335
2336
2337  MP_TAC(REAL_ARITH`&0<= v\/ &0<= --( v)`)
2338 THEN STRIP_TAC
2339 ;
2340
2341
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
2355 THEN MP_TAC th)
2356 THEN POP_ASSUM MP_TAC
2357 THEN ASM_REWRITE_TAC[h0]
2358 THEN REAL_ARITH_TAC
2359 ;
2360
2361
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
2375 THEN MP_TAC th)
2376 THEN POP_ASSUM MP_TAC
2377 THEN ASM_REWRITE_TAC[h0]
2378 THEN REAL_ARITH_TAC;
2379 ]);;
2380   (* }}} *)
2381
2382
2383
2384
2385
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
2392 /\
2393  scs_k_v39 s= dimindex(:M)
2394 ==>
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)})`
2399 ,
2400   (* {{{ proof *)
2401 [
2402
2403 REWRITE_TAC[IN_ELIM_THM;]
2404 THEN STRIP_TAC
2405 THEN GEN_TAC
2406 THEN STRIP_TAC
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]
2415 THEN RESA_TAC
2416 THEN STRIP_TAC
2417 THEN MP_TAC NOT_COLLINEAR_BBs_CASE_3
2418 THEN RESA_TAC
2419 THEN SUBGOAL_THEN`scs_k_v39 s =3` ASSUME_TAC;
2420
2421 EXPAND_TAC"s"
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;];
2423
2424 SUBGOAL_THEN`vector[(vv:num->real^3) 1;(vv:num->real^3) 2;(vv:num->real^3) 0]:real^3^M
2425 =v`ASSUME_TAC;
2426
2427 POP_ASSUM(fun th->
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
2438 THEN
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];
2442
2443 POP_ASSUM MP_TAC
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`]
2450 ]);;
2451   (* }}} *)
2452
2453
2454
2455
2456
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)
2459 /\ 2<k
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)))`
2468 ,
2469   (* {{{ proof *)
2470 [
2471 REPEAT STRIP_TAC
2472 THEN MP_TAC TRI_STABLE_K_EQ_3
2473 THEN RESA_TAC
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
2476 THEN STRIP_TAC
2477 ;
2478
2479
2480 POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2481 THEN MATCH_MP_TAC COMPACT_TRI_STABLE
2482 THEN ASM_REWRITE_TAC[];
2483
2484
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
2490 THEN STRIP_TAC;
2491
2492
2493 SIMP_TAC[o_DEF;LIFT_ADD;]
2494 THEN MATCH_MP_TAC CONTINUOUS_ON_ADD
2495 THEN STRIP_TAC;
2496
2497
2498 SIMP_TAC[o_DEF;LIFT_CMUL;FINITE_NUMSEG]
2499 THEN REPEAT STRIP_TAC
2500 THEN MATCH_MP_TAC CONTINUOUS_ON_MUL
2501 THEN STRIP_TAC;
2502
2503
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]
2520 THEN ARITH_TAC;
2521
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]
2526 THEN STRIP_TAC
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`
2535 THEN ASSUME_TAC th)
2536 THEN GEN_TAC
2537 THEN POP_ASSUM(fun th->  MRESA1_TAC th `(x (n:num)):real^(M,3)finite_product`)
2538
2539 ;
2540
2541
2542
2543 SIMP_TAC[o_DEF;LIFT_CMUL;FINITE_NUMSEG]
2544 THEN REPEAT STRIP_TAC
2545 THEN MATCH_MP_TAC CONTINUOUS_ON_MUL
2546 THEN STRIP_TAC;
2547
2548
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]
2565 THEN ARITH_TAC;
2566
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]
2571 THEN STRIP_TAC
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`
2580 THEN ASSUME_TAC th)
2581 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2582 THEN ASM_REWRITE_TAC[]
2583 THEN GEN_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[]
2587
2588 ;
2589
2590
2591
2592 SIMP_TAC[o_DEF;LIFT_CMUL;FINITE_NUMSEG]
2593 THEN REPEAT STRIP_TAC
2594 THEN MATCH_MP_TAC CONTINUOUS_ON_MUL
2595 THEN STRIP_TAC;
2596
2597
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]
2614 THEN ARITH_TAC;
2615
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]
2620 THEN STRIP_TAC
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`
2629 THEN ASSUME_TAC th)
2630 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2631 THEN ASM_REWRITE_TAC[]
2632 THEN GEN_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[];
2636 ]);;
2637   (* }}} *)
2638
2639
2640
2641
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
2648 /\ vv IN BBs_v39 s
2649 ==>  taustar_v39 s vv = tau3  (vv 1) (vv 2) (vv 0)`
2650 ,
2651   (* {{{ proof *)
2652 [
2653 REPEAT STRIP_TAC
2654 THEN SUBGOAL_THEN`scs_k_v39 s =3` ASSUME_TAC;
2655
2656 EXPAND_TAC"s"
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;];
2658
2659 POP_ASSUM MP_TAC
2660 THEN RESA_TAC
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
2665 THEN EXPAND_TAC"s"
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]
2667 THEN RESA_TAC
2668 THEN REWRITE_TAC[tau3;REAL_ARITH`A- &0=A`]
2669 THEN REAL_ARITH_TAC
2670 ]);;
2671   (* }}} *)
2672
2673
2674
2675
2676
2677
2678
2679
2680
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 = {})`
2691 ,
2692   (* {{{ proof *)
2693 [
2694  STRIP_TAC
2695 THEN MP_TAC SCS_3_IS_TRI_STABLE
2696 THEN RESA_TAC
2697 THEN MP_TAC NOT_EMPTY_CASE_3
2698 THEN RESA_TAC
2699 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?a. a IN A`]
2700 THEN SUBGOAL_THEN`scs_k_v39 s =3` ASSUME_TAC;
2701
2702 EXPAND_TAC"s"
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;];
2704
2705 POP_ASSUM (fun th-> 
2706 REPLICATE_TAC 3 (POP_ASSUM MP_TAC)
2707 THEN REWRITE_TAC[th]
2708 THEN STRIP_TAC
2709 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
2710 THEN ASSUME_TAC th
2711 THEN REPEAT RESA_TAC)
2712 THEN MP_TAC IN_B_SY1_COLLINEAR_CASE_3
2713 THEN RESA_TAC
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->
2716 POP_ASSUM MP_TAC
2717 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
2718 THEN STRIP_TAC
2719 THEN ASSUME_TAC th)
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`
2726 THEN STRIP_TAC;
2727
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
2734 THEN RESA_TAC;
2735
2736 SUBGOAL_THEN`vector [ vv1 1; (vv1:num->real^3) 2;vv1 0] = v:real^3^M`
2737 ASSUME_TAC;
2738
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
2744 THEN
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];
2748
2749 STRIP_TAC;
2750
2751 GEN_TAC
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]);
2765
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
2781 THEN REAL_ARITH_TAC
2782 ]);;
2783   (* }}} *)
2784
2785
2786
2787
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
2792 `,
2793 REPEAT STRIP_TAC
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);;
2797
2798
2799
2800
2801
2802
2803
2804
2805 let PROVE_V_SY_EQ_TAC=
2806 fun (th:term)->
2807 EXISTS_TAC th
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)`]
2811 THEN ARITH_TAC
2812 ;;
2813
2814
2815 let PROVE_E_SY_EQ_TAC=
2816 fun (th:term)->
2817 EXISTS_TAC th
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)`]
2820 ;;
2821
2822
2823 let PROVE_EQ_V_SY_TAC_4=
2824 fun (th:term)->
2825 ASM_REWRITE_TAC[]
2826 THEN EXISTS_TAC th
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)`]
2829 ;;
2830
2831
2832
2833 let PROVE_F_SY_EQ_TAC=
2834 fun (th:term)->
2835 EXISTS_TAC th
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`]
2838 THEN SET_TAC[];;
2839
2840 let PROOF_E_EQ_IMAGE_4=
2841 fun (th:term)->
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`]
2843 THEN EXISTS_TAC th
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`];;
2846
2847
2848
2849
2850
2851
2852
2853
2854
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))
2861 /\ vv IN BBs_v39 s
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
2865 ==> 
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)`,
2869   (* {{{ proof *)
2870 [
2871
2872 STRIP_TAC
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;
2876
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))
2880 THEN STRIP_TAC
2881 THEN STRIP_TAC
2882 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
2883 THEN GEN_TAC
2884 THEN EQ_TAC;
2885
2886 REPEAT STRIP_TAC
2887 THENL[
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`];
2892
2893 REPEAT STRIP_TAC
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`)
2900 THEN RESA_TAC
2901 THENL[ 
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`];
2906
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]
2912 THEN GEN_TAC
2913 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
2914 THEN EQ_TAC;
2915
2916 STRIP_TAC
2917 THEN ASM_REWRITE_TAC[]
2918 THENL[
2919 PROVE_E_SY_EQ_TAC `1`;
2920 PROVE_E_SY_EQ_TAC `2`;
2921 EXISTS_TAC `3`
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])
2927 THEN SET_TAC[];
2928 PROVE_E_SY_EQ_TAC `0`];
2929
2930 STRIP_TAC
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`)
2938 THEN RESA_TAC
2939 THENL[
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`];
2944
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]
2950 THEN GEN_TAC
2951 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
2952 THEN EQ_TAC;
2953
2954 STRIP_TAC
2955 THEN ASM_REWRITE_TAC[]
2956 THENL[
2957 PROVE_E_SY_EQ_TAC `1`;
2958 PROVE_E_SY_EQ_TAC `2`;
2959 EXISTS_TAC `3`
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])
2965 THEN SET_TAC[];
2966 PROVE_E_SY_EQ_TAC `0`];
2967
2968 STRIP_TAC
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`)
2976 THEN RESA_TAC
2977 THENL[
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`];
2982 ]);;
2983   (* }}} *)
2984
2985
2986
2987
2988
2989
2990 let IN_BALL_ANNULUS_ROW_TAC_4=
2991 fun (th:term)->
2992 ASM_SIMP_TAC[]
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]
2998 THEN EXISTS_TAC th
2999 THEN REWRITE_TAC[SET_RULE`(a:num)IN (:num)`]
3000 ;;
3001
3002
3003
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)`]);;
3012
3013
3014
3015
3016 let INEQUALITY_PROOF_TAC4=
3017 fun (th:term)->
3018 MP_TAC(ARITH_RULE`1<= i /\ i<= 4==> i=1\/ i=2\/ i=3\/ i=4`)
3019 THEN RESA_TAC
3020 THENL[
3021 INEQUALITY_PROOF_TAC40 `1` th;
3022 INEQUALITY_PROOF_TAC40 `2` th;
3023 INEQUALITY_PROOF_TAC40 `3` th;
3024 INEQUALITY_PROOF_TAC40 `0` th];;
3025
3026
3027
3028
3029
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))
3036 /\ vv IN BBs_v39 s
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
3040 ==> 
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 }`,
3042   (* {{{ proof *)
3043 [
3044
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`
3057 THEN STRIP_TAC;
3058
3059 STRIP_TAC;
3060
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
3064 THENL[
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`];
3069
3070 STRIP_TAC;
3071
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
3075 THEN REPEAT GEN_TAC
3076 THEN STRIP_TAC
3077 THENL[
3078 INEQUALITY_PROOF_TAC4 `1`;
3079 INEQUALITY_PROOF_TAC4 `2`;
3080 INEQUALITY_PROOF_TAC4 `3`;
3081 INEQUALITY_PROOF_TAC4 `0`];
3082
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;
3089
3090 ASM_REWRITE_TAC[];
3091 ]);;
3092   (* }}} *)
3093
3094
3095
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))
3102 /\ vv IN BBs_v39 s
3103 /\ scs_k_v39 s= dimindex(:M)
3104 ==> 
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 }={})`
3106 ,
3107   (* {{{ proof *)
3108 [
3109 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;]
3110 THEN STRIP_TAC
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[]
3116 ]);;
3117   (* }}} *)
3118
3119
3120
3121
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
3128 /\ vv IN BBs_v39 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`,
3138   (* {{{ proof *)
3139 [
3140 REPEAT STRIP_TAC
3141 THEN MP_TAC V_E_FF_CASE_4
3142 THEN RESA_TAC
3143 THEN SUBGOAL_THEN`scs_k_v39 s =4` ASSUME_TAC;
3144
3145 EXPAND_TAC"s"
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;];
3147
3148 POP_ASSUM MP_TAC
3149 THEN RESA_TAC
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]
3155 THEN STRIP_TAC
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;
3162
3163 ASM_REWRITE_TAC[J1_SY;]
3164 THEN EXPAND_TAC"s"
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`]
3166 THEN SET_TAC[];
3167
3168 ASM_REWRITE_TAC[SUM_CLAUSES;REAL_ARITH`a* &0= &0 /\a + &0=a`]
3169 THEN EXPAND_TAC"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
3173 THEN EXPAND_TAC"s"
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`]
3175 ]);;
3176   (* }}} *)
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195 let VV_IN_BALL_ANNULUS_TAC_4=
3196 fun (so:term)-> 
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) `] )
3199 ;;
3200
3201
3202
3203
3204
3205
3206
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))
3213 ==>
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)`,
3216 REPEAT STRIP_TAC
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]);;
3222
3223
3224
3225
3226
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-> 
3233 REPEAT DISCH_TAC
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`])
3241 ))
3242 THEN MP_TAC SCS_A_B__EQ_MOD_4
3243 THEN ASM_REWRITE_TAC[]
3244 THEN STRIP_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`]
3247 THEN RESA_TAC
3248 THEN RESA_TAC
3249 ;;
3250
3251
3252 let PROVE_INEQUALITY_TAC_4=
3253 fun (th:term)->
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)`)
3255 THEN RESA_TAC 
3256 THENL[
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`];;
3261
3262
3263
3264 let V_SY_EQ_IMAGE_VV_TAC4=
3265 fun (th:term)->
3266 ASM_REWRITE_TAC[]
3267 THEN EXISTS_TAC th
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`];; 
3269
3270
3271
3272 let PROVE_E_SY_EQ_MOD_TAC_4=
3273 fun (th:term)->
3274 EXISTS_TAC th
3275 THEN ASM_REWRITE_TAC[ARITH_RULE`~(3=0)/\ ~(3=1)/\ ~(3=2)/\ ~(2=0)/\ ~(2=1)/\ ~(1=0)`]
3276 THEN ARITH_TAC;;
3277
3278
3279
3280 let PROVE_E_SY_EQ_IMAGE_VV_4=
3281 fun (so:term)->
3282 EXISTS_TAC so
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`])
3288 ;;
3289
3290
3291
3292 let PROOF_E_EQ_TAC_4=
3293 fun (th:term)->
3294 EXISTS_TAC th
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)`]
3296 ;;
3297
3298
3299
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 /\
3310  CONDITION2_SY v 
3311 /\ (!i. vv i = 
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
3315 row 3 v)
3316 ==> vv IN BBs_v39 s`,
3317   (* {{{ proof *)
3318 [
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;
3322
3323
3324 EXPAND_TAC"s"
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;];
3326
3327 POP_ASSUM (fun th-> 
3328 REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
3329 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
3330 THEN ASSUME_TAC th
3331 THEN REPEAT STRIP_TAC)
3332 THEN POP_ASSUM MP_TAC
3333 THEN ASM_REWRITE_TAC[th;IN] 
3334 THEN STRIP_TAC
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;]
3336 THEN STRIP_TAC;
3337
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`)
3343 THEN RESA_TAC
3344 THENL[
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`];
3349
3350
3351 STRIP_TAC;
3352
3353 ASM_REWRITE_TAC[periodic]
3354 THEN GEN_TAC
3355 THEN MRESAL_TAC MOD_EQ[`i+4:num`;`i:num`;`4:num`;`1`][ARITH_RULE`1*A=A`];
3356
3357 STRIP_TAC;
3358
3359 REWRITE_TAC[dist]
3360 THEN REPEAT GEN_TAC
3361 THEN SUBGOAL_THEN`!i. (vv:num->real^3) i= vv (i MOD 4)` ASSUME_TAC;
3362
3363 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
3364 THEN GEN_TAC
3365 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`4`][ARITH_RULE`~(4=0)`];
3366
3367
3368 POP_ASSUM MP_TAC
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)`)
3373 THEN RESA_TAC
3374 THENL[
3375 PROVE_INEQUALITY_TAC_4 `4`;
3376 PROVE_INEQUALITY_TAC_4 `1`;
3377 PROVE_INEQUALITY_TAC_4 `2`;
3378 PROVE_INEQUALITY_TAC_4 `3`];
3379
3380 POP_ASSUM MP_TAC
3381 THEN ASM_REWRITE_TAC[ARITH_RULE`~(4<=3)`]
3382 THEN STRIP_TAC
3383 THEN SUBGOAL_THEN`V_SY (v:real^3^M) = IMAGE vv (:num)`ASSUME_TAC;
3384
3385
3386 ASM_REWRITE_TAC[V_SY;rows;IMAGE;EXTENSION;IN_ELIM_THM]
3387 THEN GEN_TAC
3388 THEN EQ_TAC;
3389
3390 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
3391 THEN STRIP_TAC
3392 THENL[
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`];
3397
3398 RESA_TAC
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)`)
3401 THEN RESA_TAC
3402 THENL[
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`];
3407
3408
3409
3410
3411 SUBGOAL_THEN`E_SY (v:real^3^M) = IMAGE (\i. {vv i, vv (SUC i)}) (:num)`ASSUME_TAC;
3412
3413
3414 ASM_REWRITE_TAC[E_SY;rows;IMAGE;]
3415 THEN ONCE_REWRITE_TAC[EXTENSION;]
3416 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
3417 THEN GEN_TAC
3418 THEN EQ_TAC;
3419
3420
3421 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
3422 THEN RESA_TAC
3423 THENL[
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`];
3428
3429 RESA_TAC
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)`)
3432 THEN RESA_TAC
3433 THENL[
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`];
3438
3439 SUBGOAL_THEN`F_SY (v:real^3^M) = IMAGE (\i. (vv i, vv (SUC i))) (:num)`ASSUME_TAC;
3440
3441
3442 ASM_REWRITE_TAC[F_SY;rows;IMAGE;]
3443 THEN ONCE_REWRITE_TAC[EXTENSION;]
3444 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
3445 THEN GEN_TAC
3446 THEN EQ_TAC;
3447
3448 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
3449 THEN RESA_TAC
3450 THENL[
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`];
3455
3456 RESA_TAC
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)`)
3459 THEN RESA_TAC
3460 THENL[
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`];
3465
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[];
3470 ]);;
3471   (* }}} *)
3472
3473
3474
3475
3476
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 = {})`,
3487   (* {{{ proof *)
3488 [
3489 REPEAT GEN_TAC
3490 THEN STRIP_TAC
3491 THEN MP_TAC SCS_4_IS_TRI_STABLE
3492 THEN RESA_TAC
3493 THEN MP_TAC NOT_EMPTY_CASE_4
3494 THEN RESA_TAC
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;
3507
3508 EXPAND_TAC"s"
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;];
3510
3511 POP_ASSUM (fun th-> 
3512 REPLICATE_TAC 11 (POP_ASSUM MP_TAC)
3513 THEN REWRITE_TAC[th]
3514 THEN STRIP_TAC
3515 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
3516 THEN ASSUME_TAC th
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->
3520 POP_ASSUM MP_TAC
3521 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
3522 THEN STRIP_TAC
3523 THEN ASSUME_TAC th)
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`
3531 THEN STRIP_TAC;
3532
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
3539 THEN RESA_TAC;
3540
3541 SUBGOAL_THEN`vector [ vv1 1; vv1 2; (vv1:num->real^3) 3;vv1 0] = v:real^3^M`
3542 ASSUME_TAC;
3543
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
3549 THEN
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];
3553
3554 STRIP_TAC;
3555
3556 GEN_TAC
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`);
3568
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
3582 THEN REAL_ARITH_TAC
3583 ]);;
3584   (* }}} *)
3585
3586
3587
3588
3589
3590
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
3596 `,
3597 REPEAT STRIP_TAC
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);;
3601
3602
3603
3604
3605
3606 let EQUALITY_V_SY_TAC_5 =
3607 fun (th:term)->
3608 ASM_REWRITE_TAC[]
3609 THEN EXISTS_TAC th
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)`]
3613 ;;
3614
3615
3616
3617 let PROVE_V_SY_EQ_5_TAC=
3618 fun (th:term)->
3619 EXISTS_TAC th
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`]
3623 ;;
3624
3625 let PROVE_E_SY_EQ_5_TAC =
3626 fun (th:term)->
3627 EXISTS_TAC th
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])
3634 ;;
3635
3636
3637
3638 let PROVE_E_SY_EQ_INV_5_TAC=
3639 fun (th:term) ->
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`]
3641 THEN EXISTS_TAC th
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)`]
3645 ;;
3646
3647
3648
3649 let PROVE_E_SY_EQ_INV_5_TAC=
3650 fun (th:term) ->
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`]
3652 THEN EXISTS_TAC th
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)`]
3656 ;;
3657
3658
3659
3660
3661
3662
3663
3664
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))
3671 /\ vv IN BBs_v39 s
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
3675 ==> 
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)`,
3679   (* {{{ proof *)
3680 [
3681 STRIP_TAC
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;
3685
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))
3689 THEN STRIP_TAC
3690 THEN STRIP_TAC
3691 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
3692 THEN GEN_TAC
3693 THEN EQ_TAC;
3694
3695 REPEAT STRIP_TAC
3696 THENL[
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`;];
3702
3703 REPEAT STRIP_TAC
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`)
3710 THEN RESA_TAC
3711 THENL[ 
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`;];
3717
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]
3723 THEN GEN_TAC
3724 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
3725 THEN EQ_TAC;
3726
3727 STRIP_TAC
3728 THEN ASM_REWRITE_TAC[]
3729 THENL[
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`;];
3735
3736 STRIP_TAC
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`)
3744 THEN RESA_TAC
3745 THENL[
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` ;];
3751
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]
3757 THEN GEN_TAC
3758 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
3759 THEN EQ_TAC;
3760
3761 STRIP_TAC
3762 THEN ASM_REWRITE_TAC[]
3763 THENL[
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`;];
3769
3770 STRIP_TAC
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`)
3778 THEN RESA_TAC
3779 THENL[
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` ;];
3785 ]);;
3786   (* }}} *)
3787
3788
3789
3790
3791
3792
3793 let IN_BALL_ANNUUS_TAC_5 =
3794 fun (th:term)-> 
3795 ASM_SIMP_TAC[]
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]
3801 THEN EXISTS_TAC th
3802 THEN REWRITE_TAC[SET_RULE`(a:num) IN(:num)`]
3803 ;;
3804
3805
3806
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)
3817 /\ ~(3=4)`]);;
3818
3819
3820 let INEQUALITY_A_B_TAC_5 =
3821 fun (th:term)->
3822 MP_TAC(ARITH_RULE`1<= i /\ i<= 5==> i=1\/ i=2\/ i=3\/ i=4 \/ i=5`)
3823 THEN RESA_TAC
3824 THENL[
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;];;
3830
3831
3832
3833
3834
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))
3841 /\ vv IN BBs_v39 s
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
3845 ==> 
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 }`,
3847   (* {{{ proof *)
3848 [
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`
3861 THEN STRIP_TAC;
3862
3863 STRIP_TAC;
3864
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
3868 THENL[
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)`;];
3874
3875 STRIP_TAC;
3876
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
3880 THEN REPEAT GEN_TAC
3881 THEN STRIP_TAC
3882 THENL[
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`; ];
3888
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;
3895
3896 ASM_REWRITE_TAC[]
3897 ]);;
3898   (* }}} *)
3899
3900
3901
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))
3908 /\ vv IN BBs_v39 s
3909 /\ scs_k_v39 s= dimindex(:M)
3910 ==> 
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 }={})`
3912 ,
3913   (* {{{ proof *)
3914 [
3915 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;]
3916 THEN STRIP_TAC
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[]
3922 ]);;
3923   (* }}} *)
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
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
3942 /\ vv IN BBs_v39 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`,
3952   (* {{{ proof *)
3953 [
3954 REPEAT STRIP_TAC
3955 THEN MP_TAC V_E_FF_CASE_5
3956 THEN RESA_TAC
3957 THEN SUBGOAL_THEN`scs_k_v39 s =5` ASSUME_TAC;
3958
3959 EXPAND_TAC"s"
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;];
3961
3962 POP_ASSUM MP_TAC
3963 THEN RESA_TAC
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]
3969 THEN STRIP_TAC
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;
3976
3977 ASM_REWRITE_TAC[J1_SY;]
3978 THEN EXPAND_TAC"s"
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`]
3980 THEN SET_TAC[];
3981
3982 ASM_REWRITE_TAC[SUM_CLAUSES;REAL_ARITH`a* &0= &0 /\a + &0=a`]
3983 THEN EXPAND_TAC"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
3987 THEN EXPAND_TAC"s"
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`]
3989 ]);;
3990   (* }}} *)
3991
3992
3993
3994
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))
4001 ==>
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)`,
4004 REPEAT STRIP_TAC
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]);;
4010
4011
4012
4013 let VV_IN_BALL_ANNULUS_TAC_5=
4014 fun (so:term)-> 
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)`] )
4017 ;;
4018
4019
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-> 
4026 REPEAT DISCH_TAC
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`])
4035 ))
4036 THEN MP_TAC SCS_A_B__EQ_MOD_5
4037 THEN ASM_REWRITE_TAC[]
4038 THEN STRIP_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`]
4041 THEN RESA_TAC
4042 THEN RESA_TAC
4043 ;;
4044
4045
4046
4047
4048 let PROVE_INEQUALITY_TAC_5=
4049 fun (th:term)->
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) `)
4051 THEN RESA_TAC 
4052 THENL[
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`];;
4058
4059
4060
4061
4062 let V_SY_EQ_IMAGE_VV_TAC5=
4063 fun (th:term)->
4064 ASM_REWRITE_TAC[]
4065 THEN EXISTS_TAC th
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)`];; 
4067
4068
4069
4070
4071
4072 let PROVE_E_SY_EQ_MOD_TAC_5=
4073 fun (th:term)->
4074 EXISTS_TAC th
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) `]
4076 THEN ARITH_TAC;;
4077
4078
4079
4080
4081
4082
4083
4084 let PROOF_E_EQ_TAC_5=
4085 fun (th:term)->
4086 EXISTS_TAC th
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)`]
4090 ;;
4091
4092
4093 let PROVE_E_SY_EQ_IMAGE_VV_5=
4094 fun (so:term)->
4095 EXISTS_TAC so
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)`])
4101 ;;
4102
4103
4104
4105
4106
4107
4108
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 /\
4119  CONDITION2_SY v 
4120 /\ (!i. vv i = 
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
4125 row 4 v)
4126 ==> vv IN BBs_v39 s`,
4127   (* {{{ proof *)
4128 [
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;
4132
4133
4134 EXPAND_TAC"s"
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;];
4136
4137 POP_ASSUM (fun th-> 
4138 REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
4139 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
4140 THEN ASSUME_TAC th
4141 THEN REPEAT STRIP_TAC)
4142 THEN POP_ASSUM MP_TAC
4143 THEN ASM_REWRITE_TAC[th;IN] 
4144 THEN STRIP_TAC
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;]
4146 THEN STRIP_TAC;
4147
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`)
4153 THEN RESA_TAC
4154 THENL[
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`];
4160
4161
4162
4163 STRIP_TAC;
4164
4165 ASM_REWRITE_TAC[periodic]
4166 THEN GEN_TAC
4167 THEN MRESAL_TAC MOD_EQ[`i+5:num`;`i:num`;`5:num`;`1`][ARITH_RULE`1*A=A`];
4168
4169 STRIP_TAC;
4170
4171 REWRITE_TAC[dist]
4172 THEN REPEAT GEN_TAC
4173 THEN SUBGOAL_THEN`!i. (vv:num->real^3) i= vv (i MOD 5)` ASSUME_TAC;
4174
4175 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
4176 THEN GEN_TAC
4177 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`5`][ARITH_RULE`~(5=0)`];
4178
4179
4180 POP_ASSUM MP_TAC
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)`)
4185 THEN RESA_TAC
4186 THENL[
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`];
4192
4193
4194 POP_ASSUM MP_TAC
4195 THEN ASM_REWRITE_TAC[ARITH_RULE`~(5<=3)`]
4196 THEN STRIP_TAC
4197 THEN SUBGOAL_THEN`V_SY (v:real^3^M) = IMAGE vv (:num)`ASSUME_TAC;
4198
4199
4200 ASM_REWRITE_TAC[V_SY;rows;IMAGE;EXTENSION;IN_ELIM_THM]
4201 THEN GEN_TAC
4202 THEN EQ_TAC;
4203
4204 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
4205 THEN STRIP_TAC
4206 THENL[
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`];
4212
4213
4214
4215
4216
4217 RESA_TAC
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)`)
4220 THEN RESA_TAC
4221 THENL[
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`];
4227
4228
4229
4230 SUBGOAL_THEN`E_SY (v:real^3^M) = IMAGE (\i. {vv i, vv (SUC i)}) (:num)`ASSUME_TAC;
4231
4232
4233
4234 ASM_REWRITE_TAC[E_SY;rows;IMAGE;]
4235 THEN ONCE_REWRITE_TAC[EXTENSION;]
4236 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
4237 THEN GEN_TAC
4238 THEN EQ_TAC;
4239
4240
4241 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
4242 THEN RESA_TAC
4243 THENL[
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`];
4249
4250
4251
4252
4253
4254 RESA_TAC
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)`)
4257 THEN RESA_TAC
4258 THENL[
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`];
4264
4265
4266
4267
4268 SUBGOAL_THEN`F_SY (v:real^3^M) = IMAGE (\i. (vv i, vv (SUC i))) (:num)`ASSUME_TAC;
4269
4270
4271
4272 ASM_REWRITE_TAC[F_SY;rows;IMAGE;]
4273 THEN ONCE_REWRITE_TAC[EXTENSION;]
4274 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
4275 THEN GEN_TAC
4276 THEN EQ_TAC;
4277
4278
4279 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
4280 THEN RESA_TAC
4281 THENL[
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`];
4287
4288
4289
4290
4291
4292 RESA_TAC
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)`)
4295 THEN RESA_TAC
4296 THENL[
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`];
4302
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[];
4307 ]);;
4308   (* }}} *)
4309
4310
4311
4312
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 = {})`,
4323   (* {{{ proof *)
4324 [
4325 REPEAT GEN_TAC
4326 THEN STRIP_TAC
4327 THEN MP_TAC SCS_5_IS_TRI_STABLE
4328 THEN RESA_TAC
4329 THEN MP_TAC NOT_EMPTY_CASE_5
4330 THEN RESA_TAC
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;
4343
4344 EXPAND_TAC"s"
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;];
4346
4347 POP_ASSUM (fun th-> 
4348 REPLICATE_TAC 11 (POP_ASSUM MP_TAC)
4349 THEN REWRITE_TAC[th]
4350 THEN STRIP_TAC
4351 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
4352 THEN ASSUME_TAC th
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->
4356 POP_ASSUM MP_TAC
4357 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
4358 THEN STRIP_TAC
4359 THEN ASSUME_TAC th)
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`
4368 THEN STRIP_TAC;
4369
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
4376 THEN RESA_TAC;
4377
4378 SUBGOAL_THEN`vector [ vv1 1; vv1 2; (vv1:num->real^3) 3;vv1 4;vv1 0] = v:real^3^M`
4379 ASSUME_TAC;
4380
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
4386 THEN
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];
4390
4391 STRIP_TAC;
4392
4393 GEN_TAC
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`);
4405
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;
4420 ]);;
4421   (* }}} *)
4422
4423
4424
4425
4426
4427
4428
4429
4430
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
4437 `,
4438 REPEAT STRIP_TAC
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);;
4442
4443
4444
4445 let IN_BALL_ANNUUS_TAC_6 =
4446 fun (th:term)-> 
4447 ASM_SIMP_TAC[]
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]
4453 THEN EXISTS_TAC th
4454 THEN REWRITE_TAC[SET_RULE`(a:num) IN(:num)`]
4455 ;;
4456
4457
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)`]);;
4469
4470
4471 let INEQUALITY_A_B_TAC_6 =
4472 fun (th:term)->
4473 MP_TAC(ARITH_RULE`1<= i /\ i<= 6==> i=1\/ i=2\/ i=3\/ i=4 \/ i=5 \/ i=6`)
4474 THEN RESA_TAC
4475 THENL[ 
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;];;
4482
4483
4484 let EQUALITY_V_SY_TAC_6 =
4485 fun (th:term)->
4486 ASM_REWRITE_TAC[]
4487 THEN EXISTS_TAC th
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)`]
4491 ;;
4492
4493
4494
4495 let PROVE_V_SY_EQ_6_TAC=
4496 fun (th:term)->
4497 EXISTS_TAC th
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)`]
4502 THEN ARITH_TAC
4503 ;;
4504
4505 let PROVE_E_SY_EQ_6_TAC =
4506 fun (th:term)->
4507 EXISTS_TAC th
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])
4515 ;;
4516
4517
4518
4519 let PROVE_E_SY_EQ_INV_6_TAC=
4520 fun (th:term)  ->
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 `]
4522 THEN EXISTS_TAC th
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)`]
4527 ;;
4528
4529
4530
4531
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))
4538 /\ vv IN BBs_v39 s
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
4542 ==> 
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)`,
4546   (* {{{ proof *)
4547 [
4548
4549 STRIP_TAC
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;
4553
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))
4557 THEN STRIP_TAC
4558 THEN STRIP_TAC
4559 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
4560 THEN GEN_TAC
4561 THEN EQ_TAC;
4562
4563 REPEAT STRIP_TAC
4564 THENL[
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`;];
4571
4572
4573
4574 REPEAT STRIP_TAC
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`)
4581 THEN RESA_TAC
4582 THENL[ 
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`;];
4589
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]
4595 THEN GEN_TAC
4596 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
4597 THEN EQ_TAC;
4598
4599 STRIP_TAC
4600 THEN ASM_REWRITE_TAC[]
4601 THENL[
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`;];
4608
4609 STRIP_TAC
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`)
4617 THEN RESA_TAC
4618 THENL[
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`;];
4625
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]
4631 THEN GEN_TAC
4632 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
4633 THEN EQ_TAC;
4634
4635 STRIP_TAC
4636 THEN ASM_REWRITE_TAC[]
4637 THENL[
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`;];
4644
4645 STRIP_TAC
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`)
4653 THEN RESA_TAC
4654 THENL[
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`;];
4661
4662 ]);;
4663   (* }}} *)
4664
4665
4666
4667
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))
4674 /\ vv IN BBs_v39 s
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
4678 ==> 
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 }`,
4680   (* {{{ proof *)
4681 [
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`
4694 THEN STRIP_TAC;
4695
4696 STRIP_TAC;
4697
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
4701 THENL[
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)`;];
4708
4709 STRIP_TAC;
4710
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
4714 THEN REPEAT GEN_TAC
4715 THEN STRIP_TAC
4716 THENL[
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`;];
4723
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;
4730
4731 ASM_REWRITE_TAC[]
4732 ]);;
4733   (* }}} *)
4734
4735
4736
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))
4743 /\ vv IN BBs_v39 s
4744 /\ scs_k_v39 s= dimindex(:M)
4745 ==> 
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 }={})`
4747 ,
4748   (* {{{ proof *)
4749 [
4750 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;]
4751 THEN STRIP_TAC
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[]
4757 ]);;
4758   (* }}} *)
4759
4760
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
4767 /\ vv IN BBs_v39 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`,
4777   (* {{{ proof *)
4778 [
4779 REPEAT STRIP_TAC
4780 THEN MP_TAC V_E_FF_CASE_6
4781 THEN RESA_TAC
4782 THEN SUBGOAL_THEN`scs_k_v39 s =6` ASSUME_TAC;
4783
4784 EXPAND_TAC"s"
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;];
4786
4787 POP_ASSUM MP_TAC
4788 THEN RESA_TAC
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]
4794 THEN STRIP_TAC
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;
4801
4802 ASM_REWRITE_TAC[J1_SY;]
4803 THEN EXPAND_TAC"s"
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`]
4805 THEN SET_TAC[];
4806
4807 ASM_REWRITE_TAC[SUM_CLAUSES;REAL_ARITH`a* &0= &0 /\a + &0=a`]
4808 THEN EXPAND_TAC"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
4812 THEN EXPAND_TAC"s"
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`]
4814 ]);;
4815   (* }}} *)
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
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))
4841 ==>
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)`,
4844 REPEAT STRIP_TAC
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]);;
4850
4851
4852
4853
4854 let VV_IN_BALL_ANNULUS_TAC_6=
4855 fun (so:term)-> 
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)`] )
4859 ;;
4860
4861
4862
4863
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-> 
4870 REPEAT DISCH_TAC
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`])
4880 ))
4881 THEN MP_TAC SCS_A_B__EQ_MOD_6
4882 THEN ASM_REWRITE_TAC[]
4883 THEN STRIP_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`]
4886 THEN RESA_TAC
4887 THEN RESA_TAC
4888 ;;
4889
4890
4891
4892
4893
4894
4895 let PROVE_INEQUALITY_TAC_6=
4896 fun (th:term)->
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)`)
4898 THEN RESA_TAC 
4899 THENL[
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`];;
4906
4907
4908
4909
4910
4911 let V_SY_EQ_IMAGE_VV_TAC6=
4912 fun (th:term)->
4913 ASM_REWRITE_TAC[]
4914 THEN EXISTS_TAC th
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)`];; 
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927 let PROVE_E_SY_EQ_MOD_TAC_6=
4928 fun (th:term)->
4929 EXISTS_TAC th
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) `]
4931 THEN ARITH_TAC;;
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942 let PROOF_E_EQ_TAC_6=
4943 fun (th:term)->
4944 EXISTS_TAC th
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)`]
4950 ;;
4951
4952
4953
4954
4955
4956
4957 let PROVE_E_SY_EQ_IMAGE_VV_6=
4958 fun (so:term)->
4959 EXISTS_TAC so
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`])
4968 ;;
4969
4970
4971
4972
4973
4974
4975
4976
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 /\
4987  CONDITION2_SY v 
4988 /\ (!i. vv i = 
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
4994 row 5 v)
4995 ==> vv IN BBs_v39 s`,
4996   (* {{{ proof *)
4997 [
4998
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;
5002
5003 EXPAND_TAC"s"
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;];
5005
5006 POP_ASSUM (fun th-> 
5007 REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
5008 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
5009 THEN ASSUME_TAC th
5010 THEN REPEAT STRIP_TAC)
5011 THEN POP_ASSUM MP_TAC
5012 THEN ASM_REWRITE_TAC[th;IN] 
5013 THEN STRIP_TAC
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;]
5015 THEN STRIP_TAC;
5016
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`)
5022 THEN RESA_TAC
5023 THENL[
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`];
5030
5031
5032
5033
5034 STRIP_TAC;
5035
5036 ASM_REWRITE_TAC[periodic]
5037 THEN GEN_TAC
5038 THEN MRESAL_TAC MOD_EQ[`i+6:num`;`i:num`;`6:num`;`1`][ARITH_RULE`1*A=A`];
5039
5040 STRIP_TAC;
5041
5042 REWRITE_TAC[dist]
5043 THEN REPEAT GEN_TAC
5044 THEN SUBGOAL_THEN`!i. (vv:num->real^3) i= vv (i MOD 6)` ASSUME_TAC;
5045
5046 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
5047 THEN GEN_TAC
5048 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`6`][ARITH_RULE`~(6=0)`];
5049
5050 POP_ASSUM MP_TAC
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)`)
5055 THEN RESA_TAC
5056 THENL[
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`];
5063
5064
5065 POP_ASSUM MP_TAC
5066 THEN ASM_REWRITE_TAC[ARITH_RULE`~(6<=3)`]
5067 THEN STRIP_TAC
5068 THEN SUBGOAL_THEN`V_SY (v:real^3^M) = IMAGE vv (:num)`ASSUME_TAC;
5069
5070 ASM_REWRITE_TAC[V_SY;rows;IMAGE;EXTENSION;IN_ELIM_THM]
5071 THEN GEN_TAC
5072 THEN EQ_TAC;
5073
5074 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 6)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5\/ i=6`]
5075 THEN STRIP_TAC
5076 THENL[
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`];
5083
5084
5085
5086
5087 RESA_TAC
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)`)
5090 THEN RESA_TAC
5091 THENL[
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`];
5098
5099
5100 SUBGOAL_THEN`E_SY (v:real^3^M) = IMAGE (\i. {vv i, vv (SUC i)}) (:num)`ASSUME_TAC;
5101
5102
5103 ASM_REWRITE_TAC[E_SY;rows;IMAGE;]
5104 THEN ONCE_REWRITE_TAC[EXTENSION;]
5105 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
5106 THEN GEN_TAC
5107 THEN EQ_TAC;
5108
5109 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 6)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5\/ i=6`]
5110 THEN RESA_TAC
5111 THENL[
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`];
5118
5119
5120
5121 RESA_TAC
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)`)
5124 THEN RESA_TAC
5125 THENL[
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`];
5132
5133
5134
5135
5136
5137 SUBGOAL_THEN`F_SY (v:real^3^M) = IMAGE (\i. (vv i, vv (SUC i))) (:num)`ASSUME_TAC;
5138
5139
5140 ASM_REWRITE_TAC[F_SY;rows;IMAGE;]
5141 THEN ONCE_REWRITE_TAC[EXTENSION;]
5142 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
5143 THEN GEN_TAC
5144 THEN EQ_TAC;
5145
5146 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 6)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5\/ i=6`]
5147 THEN RESA_TAC
5148 THENL[
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`];
5155
5156
5157
5158 RESA_TAC
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)`)
5161 THEN RESA_TAC
5162 THENL[
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`];
5169
5170
5171
5172
5173
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[];
5178 ]);;
5179   (* }}} *)
5180
5181
5182
5183
5184
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 = {})`,
5195   (* {{{ proof *)
5196 [
5197 REPEAT GEN_TAC
5198 THEN STRIP_TAC
5199 THEN MP_TAC SCS_6_IS_TRI_STABLE
5200 THEN RESA_TAC
5201 THEN MP_TAC NOT_EMPTY_CASE_6
5202 THEN RESA_TAC
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;
5215
5216
5217 EXPAND_TAC"s"
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;];
5220
5221 POP_ASSUM (fun th-> 
5222 REPLICATE_TAC 11 (POP_ASSUM MP_TAC)
5223 THEN REWRITE_TAC[th]
5224 THEN STRIP_TAC
5225 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
5226 THEN ASSUME_TAC th
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
5229 `;]
5230 THEN POP_ASSUM (fun th->
5231 POP_ASSUM MP_TAC
5232 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
5233 THEN STRIP_TAC
5234 THEN ASSUME_TAC th)
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
5238  v else
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`
5245 THEN STRIP_TAC;
5246
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
5253 THEN RESA_TAC;
5254
5255 SUBGOAL_THEN`vector [ vv1 1; vv1 2; (vv1:num->real^3) 3;vv1 4;vv1 5;vv1 0] = v:real^3^M`
5256 ASSUME_TAC;
5257
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
5265 THEN
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];
5269
5270 STRIP_TAC;
5271
5272 GEN_TAC
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`);
5285
5286 MRESA_TAC (GEN_ALL IN_NOT_EMPTY_B1_SY_6
5287 )
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
5292 )
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;
5304 ]);;
5305   (* }}} *)
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
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))
5338 /\ vv IN BBs_v39 s
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
5342 ==> 
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)`,
5346   (* {{{ proof *)
5347 [
5348 STRIP_TAC
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;
5352
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))
5356 THEN STRIP_TAC
5357 THEN STRIP_TAC
5358 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
5359 THEN GEN_TAC
5360 THEN EQ_TAC;
5361
5362 REPEAT STRIP_TAC
5363 THENL[
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`;];
5369
5370 REPEAT STRIP_TAC
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`)
5377 THEN RESA_TAC
5378 THENL[ 
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`;];
5384
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]
5390 THEN GEN_TAC
5391 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
5392 THEN EQ_TAC;
5393
5394 STRIP_TAC
5395 THEN ASM_REWRITE_TAC[]
5396 THENL[
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`;];
5402
5403 STRIP_TAC
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`)
5411 THEN RESA_TAC
5412 THENL[
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` ;];
5418
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]
5424 THEN GEN_TAC
5425 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
5426 THEN EQ_TAC;
5427
5428 STRIP_TAC
5429 THEN ASM_REWRITE_TAC[]
5430 THENL[
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`;];
5436
5437 STRIP_TAC
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`)
5445 THEN RESA_TAC
5446 THENL[
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` ;];
5452 ]);;
5453   (* }}} *)
5454
5455
5456
5457
5458
5459
5460
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))
5467 /\ vv IN BBs_v39 s
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
5471 ==> 
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 }`,
5473   (* {{{ proof *)
5474 [
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`
5487 THEN STRIP_TAC;
5488
5489 STRIP_TAC;
5490
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
5494 THENL[
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)`;];
5500
5501 STRIP_TAC;
5502
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
5506 THEN REPEAT GEN_TAC
5507 THEN STRIP_TAC
5508 THENL[
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`; ];
5514
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;
5521
5522 ASM_REWRITE_TAC[]
5523 ]);;
5524   (* }}} *)
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
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))
5546 /\ vv IN BBs_v39 s
5547 /\ scs_k_v39 s= dimindex(:M)
5548 ==> 
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 }={})`
5550 ,
5551   (* {{{ proof *)
5552 [
5553 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;]
5554 THEN STRIP_TAC
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[]
5560 ]);;
5561   (* }}} *)
5562
5563
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
5570 /\ vv IN BBs_v39 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`,
5580   (* {{{ proof *)
5581 [
5582 REPEAT STRIP_TAC
5583 THEN MP_TAC V_E_FF_CASE_5_sqrt8
5584 THEN RESA_TAC
5585 THEN SUBGOAL_THEN`scs_k_v39 s =5` ASSUME_TAC;
5586
5587 EXPAND_TAC"s"
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;];
5589
5590 POP_ASSUM MP_TAC
5591 THEN RESA_TAC
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]
5597 THEN STRIP_TAC
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;
5604
5605 ASM_REWRITE_TAC[J1_SY;]
5606 THEN EXPAND_TAC"s"
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`]
5608 THEN SET_TAC[];
5609
5610 ASM_REWRITE_TAC[SUM_CLAUSES;REAL_ARITH`a* &0= &0 /\a + &0=a`]
5611 THEN EXPAND_TAC"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
5615 THEN EXPAND_TAC"s"
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`]
5617 ]);;
5618   (* }}} *)
5619
5620
5621
5622
5623
5624
5625
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))
5632 ==>
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)`,
5635 REPEAT STRIP_TAC
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]);;
5641
5642
5643
5644 let VV_IN_BALL_ANNULUS_TAC_5=
5645 fun (so:term)-> 
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)`] )
5648 ;;
5649
5650
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-> 
5657 REPEAT DISCH_TAC
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`])
5666 ))
5667 THEN MP_TAC SCS_A_B__EQ_MOD_5_sqrt8
5668 THEN ASM_REWRITE_TAC[]
5669 THEN STRIP_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`]
5672 THEN RESA_TAC
5673 THEN RESA_TAC
5674 ;;
5675
5676
5677
5678
5679 let PROVE_INEQUALITY_TAC_5=
5680 fun (th:term)->
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) `)
5682 THEN RESA_TAC 
5683 THENL[
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`];;
5689
5690
5691
5692
5693 let V_SY_EQ_IMAGE_VV_TAC5=
5694 fun (th:term)->
5695 ASM_REWRITE_TAC[]
5696 THEN EXISTS_TAC th
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)`];; 
5698
5699
5700
5701
5702
5703 let PROVE_E_SY_EQ_MOD_TAC_5=
5704 fun (th:term)->
5705 EXISTS_TAC th
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) `]
5707 THEN ARITH_TAC;;
5708
5709
5710
5711
5712
5713
5714
5715 let PROOF_E_EQ_TAC_5=
5716 fun (th:term)->
5717 EXISTS_TAC th
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)`]
5721 ;;
5722
5723
5724 let PROVE_E_SY_EQ_IMAGE_VV_5=
5725 fun (so:term)->
5726 EXISTS_TAC so
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)`])
5732 ;;
5733
5734
5735
5736
5737
5738
5739
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 /\
5750  CONDITION2_SY v 
5751 /\ (!i. vv i = 
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
5756 row 4 v)
5757 ==> vv IN BBs_v39 s`,
5758   (* {{{ proof *)
5759 [
5760
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;
5764 EXPAND_TAC"s"
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;];
5766 POP_ASSUM (fun th-> 
5767 REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
5768 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
5769 THEN ASSUME_TAC th
5770 THEN REPEAT STRIP_TAC)
5771 THEN POP_ASSUM MP_TAC
5772 THEN ASM_REWRITE_TAC[th;IN] 
5773 THEN STRIP_TAC
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;]
5775 THEN STRIP_TAC;
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`)
5781 THEN RESA_TAC
5782 THENL[
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`];
5788 STRIP_TAC;
5789 ASM_REWRITE_TAC[periodic]
5790 THEN GEN_TAC
5791 THEN MRESAL_TAC MOD_EQ[`i+5:num`;`i:num`;`5:num`;`1`][ARITH_RULE`1*A=A`];
5792 STRIP_TAC;
5793 REWRITE_TAC[dist]
5794 THEN REPEAT GEN_TAC
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])
5797 THEN GEN_TAC
5798 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`5`][ARITH_RULE`~(5=0)`];
5799 POP_ASSUM MP_TAC
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)`)
5804 THEN RESA_TAC
5805 THENL[
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`];
5811
5812 POP_ASSUM MP_TAC
5813 THEN ASM_REWRITE_TAC[ARITH_RULE`~(5<=3)`]
5814 THEN STRIP_TAC
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]
5817 THEN GEN_TAC
5818 THEN EQ_TAC;
5819 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
5820 THEN STRIP_TAC
5821 THENL[
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`];
5827
5828
5829 RESA_TAC
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)`)
5832 THEN RESA_TAC
5833 THENL[
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]
5843 THEN GEN_TAC
5844 THEN EQ_TAC;
5845
5846
5847 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
5848 THEN RESA_TAC
5849 THENL[
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`];
5855
5856
5857 RESA_TAC
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)`)
5860 THEN RESA_TAC
5861 THENL[
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`];
5867
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]
5872 THEN GEN_TAC
5873 THEN EQ_TAC;
5874
5875 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
5876 THEN RESA_TAC
5877 THENL[
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`];
5883
5884
5885 RESA_TAC
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)`)
5888 THEN RESA_TAC
5889 THENL[
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`];
5895
5896
5897
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[];
5902
5903 ]);;
5904   (* }}} *)
5905
5906
5907
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 = {})`,
5918   (* {{{ proof *)
5919 [
5920 REPEAT GEN_TAC
5921 THEN STRIP_TAC
5922 THEN MP_TAC SCS_5_sqrt8_IS_TRI_STABLE
5923 THEN RESA_TAC
5924 THEN MP_TAC NOT_EMPTY_CASE_5_sqrt8
5925 THEN RESA_TAC
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;
5938
5939 EXPAND_TAC"s"
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;];
5941
5942 POP_ASSUM (fun th-> 
5943 REPLICATE_TAC 11 (POP_ASSUM MP_TAC)
5944 THEN REWRITE_TAC[th]
5945 THEN STRIP_TAC
5946 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
5947 THEN ASSUME_TAC th
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->
5951 POP_ASSUM MP_TAC
5952 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
5953 THEN STRIP_TAC
5954 THEN ASSUME_TAC th)
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`
5963 THEN STRIP_TAC;
5964
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
5971 THEN RESA_TAC;
5972
5973 SUBGOAL_THEN`vector [ vv1 1; vv1 2; (vv1:num->real^3) 3;vv1 4;vv1 0] = v:real^3^M`
5974 ASSUME_TAC;
5975
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
5981 THEN
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];
5985
5986 STRIP_TAC;
5987
5988 GEN_TAC
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`);
6000
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;
6015 ]);;
6016   (* }}} *)
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030 let IN_BALL_ANNUUS_TAC_5 =
6031 fun (th:term)-> 
6032 ASM_SIMP_TAC[]
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]
6038 THEN EXISTS_TAC th
6039 THEN REWRITE_TAC[]
6040 THEN SET_TAC[]
6041 ;;
6042
6043
6044
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)
6059 ;;
6060
6061
6062
6063
6064 let INEQUALITY_A_B_TAC_5 =
6065 fun (th:term)->
6066 MP_TAC(ARITH_RULE`1<= i /\ i<= 5==> i=1\/ i=2\/ i=3\/ i=4 \/ i=5`)
6067 THEN RESA_TAC
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];;
6073
6074
6075
6076
6077 let EQUALITY_V_SY_TAC_5 =
6078 fun (th:term)->
6079 ASM_REWRITE_TAC[]
6080 THEN EXISTS_TAC th
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)`]
6084 ;;
6085
6086
6087
6088 let PROVE_V_SY_EQ_5_TAC=
6089 fun (th:term)->
6090 EXISTS_TAC th
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`]
6094 ;;
6095
6096 let PROVE_E_SY_EQ_5_TAC =
6097 fun (th:term)->
6098 EXISTS_TAC th
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])
6105 ;;
6106
6107
6108
6109
6110
6111
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`]
6115 THEN EXISTS_TAC th1
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)`]
6119 ;;
6120
6121
6122
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))
6129 /\ vv IN BBs_v39 s
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
6133 ==> 
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)`,
6137   (* {{{ proof *)
6138 [
6139
6140 STRIP_TAC
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;
6144
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))
6148 THEN STRIP_TAC
6149 THEN STRIP_TAC
6150 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
6151 THEN GEN_TAC
6152 THEN EQ_TAC;
6153
6154 REPEAT STRIP_TAC
6155 THENL[
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`];
6161
6162 REPEAT STRIP_TAC
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`)
6169 THEN RESA_TAC
6170 THENL[ 
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`];
6176
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]
6182 THEN GEN_TAC
6183 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
6184 THEN EQ_TAC;
6185
6186 STRIP_TAC
6187 THEN ASM_REWRITE_TAC[]
6188 THENL[
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`];
6194
6195 STRIP_TAC
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`)
6203 THEN RESA_TAC
6204 THENL[
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`;];
6210
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]
6216 THEN GEN_TAC
6217 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
6218 THEN EQ_TAC;
6219
6220 STRIP_TAC
6221 THEN ASM_REWRITE_TAC[]
6222 THENL[
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`];
6228
6229 STRIP_TAC
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`)
6237 THEN RESA_TAC
6238 THENL[
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`;];
6244 ]);;
6245   (* }}} *)
6246
6247
6248
6249
6250
6251
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))
6258 /\ vv IN BBs_v39 s
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
6262 ==> 
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 }`,
6264   (* {{{ proof *)
6265 [
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`
6278 THEN STRIP_TAC;
6279
6280 STRIP_TAC;
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
6284 THENL[
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)`];
6290
6291 STRIP_TAC;
6292
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
6296 THEN REPEAT GEN_TAC
6297 THEN STRIP_TAC
6298 THENL[
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` ];
6304
6305
6306
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;
6313
6314 ASM_REWRITE_TAC[]
6315 ]);;
6316   (* }}} *)
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
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))
6333 /\ vv IN BBs_v39 s
6334 /\ scs_k_v39 s= dimindex(:M)
6335 ==> 
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 }={})`
6337 ,
6338   (* {{{ proof *)
6339 [
6340 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;]
6341 THEN STRIP_TAC
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[]
6347 ]);;
6348   (* }}} *)
6349
6350
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
6357 /\ vv IN BBs_v39 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`,
6367   (* {{{ proof *)
6368 [
6369 REPEAT STRIP_TAC
6370 THEN MP_TAC V_E_FF_CASE_5_pro_cs
6371 THEN RESA_TAC
6372 THEN SUBGOAL_THEN`scs_k_v39 s =5` ASSUME_TAC;
6373
6374 EXPAND_TAC"s"
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;];
6376
6377 POP_ASSUM MP_TAC
6378 THEN RESA_TAC
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]
6384 THEN STRIP_TAC
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;
6391
6392 ASM_REWRITE_TAC[J1_SY;]
6393 THEN EXPAND_TAC"s"
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`]
6395 THEN SET_TAC[];
6396
6397 ASM_REWRITE_TAC[SUM_CLAUSES;REAL_ARITH`a* &0= &0 /\a + &0=a`]
6398 THEN EXPAND_TAC"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
6402 THEN EXPAND_TAC"s"
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`]
6404 ]);;
6405   (* }}} *)
6406
6407
6408
6409
6410
6411
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))
6418 ==>
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)`,
6421 REPEAT STRIP_TAC
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]);;
6427
6428
6429
6430 let VV_IN_BALL_ANNULUS_TAC_5=
6431 fun (so:term)-> 
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)`] )
6434 ;;
6435
6436
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-> 
6443 REPEAT DISCH_TAC
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`])
6452 ))
6453 THEN MP_TAC SCS_A_B__EQ_MOD_5_pro_cs
6454 THEN ASM_REWRITE_TAC[]
6455 THEN STRIP_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`]
6458 THEN RESA_TAC
6459 THEN RESA_TAC
6460 ;;
6461
6462
6463
6464
6465 let PROVE_INEQUALITY_TAC_5=
6466 fun (th:term)->
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) `)
6468 THEN RESA_TAC 
6469 THENL[
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`];;
6475
6476
6477
6478
6479 let V_SY_EQ_IMAGE_VV_TAC5=
6480 fun (th:term)->
6481 ASM_REWRITE_TAC[]
6482 THEN EXISTS_TAC th
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)`];; 
6484
6485
6486
6487
6488
6489 let PROVE_E_SY_EQ_MOD_TAC_5=
6490 fun (th:term)->
6491 EXISTS_TAC th
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) `]
6493 THEN ARITH_TAC;;
6494
6495
6496
6497
6498
6499
6500
6501 let PROOF_E_EQ_TAC_5=
6502 fun (th:term)->
6503 EXISTS_TAC th
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)`]
6507 ;;
6508
6509
6510 let PROVE_E_SY_EQ_IMAGE_VV_5=
6511 fun (so:term)->
6512 EXISTS_TAC so
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)`])
6518 ;;
6519
6520
6521
6522
6523
6524
6525
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 /\
6536  CONDITION2_SY v 
6537 /\ (!i. vv i = 
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
6542 row 4 v)
6543 ==> vv IN BBs_v39 s`,
6544   (* {{{ proof *)
6545 [
6546
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;
6550 EXPAND_TAC"s"
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;];
6552 POP_ASSUM (fun th-> 
6553 REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
6554 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
6555 THEN ASSUME_TAC th
6556 THEN REPEAT STRIP_TAC)
6557 THEN POP_ASSUM MP_TAC
6558 THEN ASM_REWRITE_TAC[th;IN] 
6559 THEN STRIP_TAC
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;]
6561 THEN STRIP_TAC;
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`)
6567 THEN RESA_TAC
6568 THENL[
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`];
6574 STRIP_TAC;
6575 ASM_REWRITE_TAC[periodic]
6576 THEN GEN_TAC
6577 THEN MRESAL_TAC MOD_EQ[`i+5:num`;`i:num`;`5:num`;`1`][ARITH_RULE`1*A=A`];
6578 STRIP_TAC;
6579 REWRITE_TAC[dist]
6580 THEN REPEAT GEN_TAC
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])
6583 THEN GEN_TAC
6584 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`5`][ARITH_RULE`~(5=0)`];
6585 POP_ASSUM MP_TAC
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)`)
6590 THEN RESA_TAC
6591 THENL[
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`];
6597
6598 POP_ASSUM MP_TAC
6599 THEN ASM_REWRITE_TAC[ARITH_RULE`~(5<=3)`]
6600 THEN STRIP_TAC
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]
6603 THEN GEN_TAC
6604 THEN EQ_TAC;
6605 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
6606 THEN STRIP_TAC
6607 THENL[
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`];
6613
6614
6615 RESA_TAC
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)`)
6618 THEN RESA_TAC
6619 THENL[
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]
6629 THEN GEN_TAC
6630 THEN EQ_TAC;
6631
6632
6633 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
6634 THEN RESA_TAC
6635 THENL[
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`];
6641
6642
6643 RESA_TAC
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)`)
6646 THEN RESA_TAC
6647 THENL[
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`];
6653
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]
6658 THEN GEN_TAC
6659 THEN EQ_TAC;
6660
6661 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 5)<=> i= 1\/ i=2 \/ i=3 \/ i=4\/ i=5`]
6662 THEN RESA_TAC
6663 THENL[
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`];
6669
6670
6671 RESA_TAC
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)`)
6674 THEN RESA_TAC
6675 THENL[
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`];
6681
6682
6683
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[];
6688
6689 ]);;
6690   (* }}} *)
6691
6692
6693
6694
6695
6696
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 = {})`,
6707   (* {{{ proof *)
6708 [
6709 REPEAT GEN_TAC
6710 THEN STRIP_TAC
6711 THEN MP_TAC SCS_5_pro_cs_IS_TRI_STABLE
6712 THEN RESA_TAC
6713 THEN MP_TAC NOT_EMPTY_CASE_5_pro_cs
6714 THEN RESA_TAC
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;
6727
6728 EXPAND_TAC"s"
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;];
6730
6731 POP_ASSUM (fun th-> 
6732 REPLICATE_TAC 11 (POP_ASSUM MP_TAC)
6733 THEN REWRITE_TAC[th]
6734 THEN STRIP_TAC
6735 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
6736 THEN ASSUME_TAC th
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->
6740 POP_ASSUM MP_TAC
6741 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
6742 THEN STRIP_TAC
6743 THEN ASSUME_TAC th)
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`
6752 THEN STRIP_TAC;
6753
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
6760 THEN RESA_TAC;
6761
6762 SUBGOAL_THEN`vector [ vv1 1; vv1 2; (vv1:num->real^3) 3;vv1 4;vv1 0] = v:real^3^M`
6763 ASSUME_TAC;
6764
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
6770 THEN
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];
6774
6775 STRIP_TAC;
6776
6777 GEN_TAC
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`);
6789
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;
6804 ]);;
6805   (* }}} *)
6806
6807
6808
6809
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))
6816 /\ vv IN BBs_v39 s
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
6820 ==> 
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)`,
6824   (* {{{ proof *)
6825 [
6826
6827 STRIP_TAC
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;
6831
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))
6835 THEN STRIP_TAC
6836 THEN STRIP_TAC
6837 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
6838 THEN GEN_TAC
6839 THEN EQ_TAC;
6840
6841 REPEAT STRIP_TAC
6842 THENL[
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`];
6847
6848 REPEAT STRIP_TAC
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`)
6855 THEN RESA_TAC
6856 THENL[ 
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`];
6861
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]
6867 THEN GEN_TAC
6868 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
6869 THEN EQ_TAC;
6870
6871 STRIP_TAC
6872 THEN ASM_REWRITE_TAC[]
6873 THENL[
6874 PROVE_E_SY_EQ_TAC `1`;
6875 PROVE_E_SY_EQ_TAC `2`;
6876 EXISTS_TAC `3`
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])
6882 THEN SET_TAC[];
6883 PROVE_E_SY_EQ_TAC `0`];
6884
6885 STRIP_TAC
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`)
6893 THEN RESA_TAC
6894 THENL[
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`];
6899
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]
6905 THEN GEN_TAC
6906 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
6907 THEN EQ_TAC;
6908
6909 STRIP_TAC
6910 THEN ASM_REWRITE_TAC[]
6911 THENL[
6912 PROVE_E_SY_EQ_TAC `1`;
6913 PROVE_E_SY_EQ_TAC `2`;
6914 EXISTS_TAC `3`
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])
6920 THEN SET_TAC[];
6921 PROVE_E_SY_EQ_TAC `0`];
6922
6923 STRIP_TAC
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`)
6931 THEN RESA_TAC
6932 THENL[
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`];
6937 ]);;
6938   (* }}} *)
6939
6940
6941
6942
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))
6949 /\ vv IN BBs_v39 s
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
6953 ==> 
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 }`,
6955   (* {{{ proof *)
6956 [
6957
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`
6970 THEN STRIP_TAC;
6971
6972 STRIP_TAC;
6973
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
6977 THENL[
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`];
6982
6983 STRIP_TAC;
6984
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
6988 THEN REPEAT GEN_TAC
6989 THEN STRIP_TAC
6990 THENL[
6991 INEQUALITY_PROOF_TAC4 `1`;
6992 INEQUALITY_PROOF_TAC4 `2`;
6993 INEQUALITY_PROOF_TAC4 `3`;
6994 INEQUALITY_PROOF_TAC4 `0`];
6995
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;
7002
7003 ASM_REWRITE_TAC[];
7004 ]);;
7005   (* }}} *)
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
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))
7029 /\ vv IN BBs_v39 s
7030 /\ scs_k_v39 s= dimindex(:M)
7031 ==> 
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 }={})`
7033 ,
7034   (* {{{ proof *)
7035 [
7036 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;]
7037 THEN STRIP_TAC
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[]
7043 ]);;
7044   (* }}} *)
7045
7046
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
7053 /\ vv IN BBs_v39 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`
7063 ,
7064   (* {{{ proof *)
7065 [
7066 REPEAT STRIP_TAC
7067 THEN MP_TAC V_E_FF_CASE_4_3
7068 THEN RESA_TAC
7069 THEN SUBGOAL_THEN`scs_k_v39 s =4` ASSUME_TAC;
7070
7071 EXPAND_TAC"s"
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;];
7073
7074 POP_ASSUM MP_TAC
7075 THEN RESA_TAC
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]
7081 THEN STRIP_TAC
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;
7088
7089 ASM_REWRITE_TAC[J1_SY;]
7090 THEN EXPAND_TAC"s"
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`]
7092 THEN SET_TAC[];
7093
7094 ASM_REWRITE_TAC[SUM_CLAUSES;REAL_ARITH`a* &0= &0 /\a + &0=a`]
7095 THEN EXPAND_TAC"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
7099 THEN EXPAND_TAC"s"
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`]
7101 ]);;
7102   (* }}} *)
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120 let VV_IN_BALL_ANNULUS_TAC_4=
7121 fun (so:term)-> 
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) `] )
7124 ;;
7125
7126
7127
7128
7129
7130
7131
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))
7138 ==>
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)`,
7141 REPEAT STRIP_TAC
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]);;
7147
7148
7149
7150
7151
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-> 
7158 REPEAT DISCH_TAC
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`])
7166 ))
7167 THEN MP_TAC SCS_A_B__EQ_MOD_4_3
7168 THEN ASM_REWRITE_TAC[]
7169 THEN STRIP_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`]
7172 THEN RESA_TAC
7173 THEN RESA_TAC
7174 ;;
7175
7176
7177 let PROVE_INEQUALITY_TAC_4=
7178 fun (th:term)->
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)`)
7180 THEN RESA_TAC 
7181 THENL[
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`];;
7186
7187
7188
7189 let V_SY_EQ_IMAGE_VV_TAC4=
7190 fun (th:term)->
7191 ASM_REWRITE_TAC[]
7192 THEN EXISTS_TAC th
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`];; 
7194
7195
7196
7197 let PROVE_E_SY_EQ_MOD_TAC_4=
7198 fun (th:term)->
7199 EXISTS_TAC th
7200 THEN ASM_REWRITE_TAC[ARITH_RULE`~(3=0)/\ ~(3=1)/\ ~(3=2)/\ ~(2=0)/\ ~(2=1)/\ ~(1=0)`]
7201 THEN ARITH_TAC;;
7202
7203
7204
7205 let PROVE_E_SY_EQ_IMAGE_VV_4=
7206 fun (so:term)->
7207 EXISTS_TAC so
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`])
7213 ;;
7214
7215
7216
7217 let PROOF_E_EQ_TAC_4=
7218 fun (th:term)->
7219 EXISTS_TAC th
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)`]
7221 ;;
7222
7223
7224
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 /\
7235  CONDITION2_SY v 
7236 /\ (!i. vv i = 
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
7240 row 3 v)
7241 ==> vv IN BBs_v39 s`,
7242   (* {{{ proof *)
7243 [
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;
7247
7248
7249 EXPAND_TAC"s"
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;];
7251
7252 POP_ASSUM (fun th-> 
7253 REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
7254 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
7255 THEN ASSUME_TAC th
7256 THEN REPEAT STRIP_TAC)
7257 THEN POP_ASSUM MP_TAC
7258 THEN ASM_REWRITE_TAC[th;IN] 
7259 THEN STRIP_TAC
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;]
7261 THEN STRIP_TAC;
7262
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`)
7268 THEN RESA_TAC
7269 THENL[
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`];
7274
7275
7276 STRIP_TAC;
7277
7278 ASM_REWRITE_TAC[periodic]
7279 THEN GEN_TAC
7280 THEN MRESAL_TAC MOD_EQ[`i+4:num`;`i:num`;`4:num`;`1`][ARITH_RULE`1*A=A`];
7281
7282 STRIP_TAC;
7283
7284 REWRITE_TAC[dist]
7285 THEN REPEAT GEN_TAC
7286 THEN SUBGOAL_THEN`!i. (vv:num->real^3) i= vv (i MOD 4)` ASSUME_TAC;
7287
7288 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
7289 THEN GEN_TAC
7290 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`4`][ARITH_RULE`~(4=0)`];
7291
7292
7293 POP_ASSUM MP_TAC
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)`)
7298 THEN RESA_TAC
7299 THENL[
7300 PROVE_INEQUALITY_TAC_4 `4`;
7301 PROVE_INEQUALITY_TAC_4 `1`;
7302 PROVE_INEQUALITY_TAC_4 `2`;
7303 PROVE_INEQUALITY_TAC_4 `3`];
7304
7305 POP_ASSUM MP_TAC
7306 THEN ASM_REWRITE_TAC[ARITH_RULE`~(4<=3)`]
7307 THEN STRIP_TAC
7308 THEN SUBGOAL_THEN`V_SY (v:real^3^M) = IMAGE vv (:num)`ASSUME_TAC;
7309
7310
7311 ASM_REWRITE_TAC[V_SY;rows;IMAGE;EXTENSION;IN_ELIM_THM]
7312 THEN GEN_TAC
7313 THEN EQ_TAC;
7314
7315 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
7316 THEN STRIP_TAC
7317 THENL[
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`];
7322
7323 RESA_TAC
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)`)
7326 THEN RESA_TAC
7327 THENL[
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`];
7332
7333
7334
7335
7336 SUBGOAL_THEN`E_SY (v:real^3^M) = IMAGE (\i. {vv i, vv (SUC i)}) (:num)`ASSUME_TAC;
7337
7338
7339 ASM_REWRITE_TAC[E_SY;rows;IMAGE;]
7340 THEN ONCE_REWRITE_TAC[EXTENSION;]
7341 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
7342 THEN GEN_TAC
7343 THEN EQ_TAC;
7344
7345
7346 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
7347 THEN RESA_TAC
7348 THENL[
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`];
7353
7354 RESA_TAC
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)`)
7357 THEN RESA_TAC
7358 THENL[
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`];
7363
7364 SUBGOAL_THEN`F_SY (v:real^3^M) = IMAGE (\i. (vv i, vv (SUC i))) (:num)`ASSUME_TAC;
7365
7366
7367 ASM_REWRITE_TAC[F_SY;rows;IMAGE;]
7368 THEN ONCE_REWRITE_TAC[EXTENSION;]
7369 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
7370 THEN GEN_TAC
7371 THEN EQ_TAC;
7372
7373 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
7374 THEN RESA_TAC
7375 THENL[
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`];
7380
7381 RESA_TAC
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)`)
7384 THEN RESA_TAC
7385 THENL[
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`];
7390
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[];
7395 ]);;
7396   (* }}} *)
7397
7398
7399
7400
7401
7402
7403
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 = {})`,
7414   (* {{{ proof *)
7415 [
7416 REPEAT GEN_TAC
7417 THEN STRIP_TAC
7418 THEN MP_TAC SCS_4_3_IS_TRI_STABLE
7419 THEN RESA_TAC
7420 THEN MP_TAC NOT_EMPTY_CASE_4_3
7421 THEN RESA_TAC
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;
7434
7435 EXPAND_TAC"s"
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;];
7437
7438 POP_ASSUM (fun th-> 
7439 REPLICATE_TAC 11 (POP_ASSUM MP_TAC)
7440 THEN REWRITE_TAC[th]
7441 THEN STRIP_TAC
7442 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
7443 THEN ASSUME_TAC th
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->
7447 POP_ASSUM MP_TAC
7448 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
7449 THEN STRIP_TAC
7450 THEN ASSUME_TAC th)
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`
7458 THEN STRIP_TAC;
7459
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
7466 THEN RESA_TAC;
7467
7468 SUBGOAL_THEN`vector [ vv1 1; vv1 2; (vv1:num->real^3) 3;vv1 0] = v:real^3^M`
7469 ASSUME_TAC;
7470
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
7476 THEN
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];
7480
7481 STRIP_TAC;
7482
7483 GEN_TAC
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`);
7495
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
7509 THEN REAL_ARITH_TAC
7510 ]);;
7511   (* }}} *)
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535 let IN_BALL_ANNULUS_TAC_4=
7536 fun (th:term) ->
7537 ASM_SIMP_TAC[]
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]
7543 THEN EXISTS_TAC th
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)
7548 ;;
7549
7550
7551
7552
7553
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)
7565 ;;
7566
7567
7568 let INEQUALITY_A_B_TAC_4=
7569 fun (th:term)->
7570 MP_TAC(ARITH_RULE`1<= i /\ i<= 4==> i=1\/ i=2\/ i=3\/ i=4`)
7571 THEN RESA_TAC
7572 THENL[
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];;
7577
7578
7579
7580
7581 let EQ_V_SY_TAC_4=
7582 fun (th:term)->
7583 ASM_REWRITE_TAC[]
7584 THEN EXISTS_TAC 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)`]
7587 ;;
7588
7589
7590 let PROVE_V_SY_EQ_TAC=
7591 fun (th:term)->
7592 EXISTS_TAC th
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`]
7596 ;;
7597
7598
7599
7600
7601 let PROVE_E_SY_EQ_TAC=
7602 fun (th:term)->
7603 EXISTS_TAC th
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]);;
7609
7610
7611 let PROVE_E_SY_INV_TAC_4=
7612 fun (th:term)->
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`]
7614 THEN EXISTS_TAC th
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`];;
7617
7618
7619
7620
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))
7627 /\ vv IN BBs_v39 s
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
7631 ==> 
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)`,
7635   (* {{{ proof *)
7636 [
7637
7638 STRIP_TAC
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;
7642
7643
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))
7647 THEN STRIP_TAC
7648 THEN STRIP_TAC
7649 THEN ASM_REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
7650 THEN GEN_TAC
7651 THEN EQ_TAC;
7652
7653 REPEAT STRIP_TAC
7654 THENL[
7655 EQ_V_SY_TAC_4 `1`;
7656 EQ_V_SY_TAC_4 `2`;
7657 EQ_V_SY_TAC_4 `3`;
7658 EQ_V_SY_TAC_4 `0`];
7659
7660 REPEAT STRIP_TAC
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`)
7667 THEN RESA_TAC
7668 THENL[
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`];
7673
7674
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]
7680 THEN GEN_TAC
7681 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
7682 THEN EQ_TAC;
7683
7684 STRIP_TAC
7685 THEN ASM_REWRITE_TAC[]
7686 THENL[
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`];
7691
7692 STRIP_TAC
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`)
7700 THEN RESA_TAC
7701 THENL[
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`];
7706
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]
7712 THEN GEN_TAC
7713 THEN ONCE_REWRITE_TAC[GSYM EXTENSION]
7714 THEN EQ_TAC;
7715
7716 STRIP_TAC
7717 THEN ASM_REWRITE_TAC[]
7718 THENL[
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`];
7723
7724 STRIP_TAC
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`)
7732 THEN RESA_TAC
7733 THENL[
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`];
7738 ]);;
7739   (* }}} *)
7740
7741
7742
7743
7744
7745
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))
7752 /\ vv IN BBs_v39 s
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
7756 ==> 
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 }`,
7758   (* {{{ proof *)
7759 [
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`
7772 THEN STRIP_TAC;
7773
7774 STRIP_TAC;
7775
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
7779 THENL[
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`];
7784
7785 STRIP_TAC;
7786
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
7790 THEN REPEAT GEN_TAC
7791 THEN STRIP_TAC
7792 THENL[
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`];
7797
7798
7799
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;
7806
7807 ASM_REWRITE_TAC[]
7808 ]);;
7809   (* }}} *)
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
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))
7826 /\ vv IN BBs_v39 s
7827 /\ scs_k_v39 s= dimindex(:M)
7828 ==> 
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 }={})`
7830 ,
7831   (* {{{ proof *)
7832 [
7833 REWRITE_TAC[SET_RULE`~(A={})<=> (?a. a IN A)`;]
7834 THEN STRIP_TAC
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[]
7840 ]);;
7841   (* }}} *)
7842
7843
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
7850 /\ vv IN BBs_v39 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`,
7860   (* {{{ proof *)
7861 [
7862 REPEAT STRIP_TAC
7863 THEN MP_TAC V_E_FF_CASE_4_sqrt8
7864 THEN RESA_TAC
7865 THEN SUBGOAL_THEN`scs_k_v39 s =4` ASSUME_TAC;
7866
7867 EXPAND_TAC"s"
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;];
7869
7870 POP_ASSUM MP_TAC
7871 THEN RESA_TAC
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]
7877 THEN STRIP_TAC
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;
7884
7885 ASM_REWRITE_TAC[J1_SY;]
7886 THEN EXPAND_TAC"s"
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`]
7888 THEN SET_TAC[];
7889
7890 ASM_REWRITE_TAC[SUM_CLAUSES;REAL_ARITH`a* &0= &0 /\a + &0=a`]
7891 THEN EXPAND_TAC"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
7895 THEN EXPAND_TAC"s"
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`]
7897 ]);;
7898   (* }}} *)
7899
7900
7901
7902
7903
7904 let VV_IN_BALL_ANNULUS_TAC_4=
7905 fun (so:term)-> 
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) `] )
7908 ;;
7909
7910
7911
7912
7913
7914
7915
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))
7922 ==>
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)`,
7925 REPEAT STRIP_TAC
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]);;
7931
7932
7933
7934
7935
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-> 
7942 REPEAT DISCH_TAC
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`])
7950 ))
7951 THEN MP_TAC SCS_A_B__EQ_MOD_4_sqrt8
7952 THEN ASM_REWRITE_TAC[]
7953 THEN STRIP_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`]
7956 THEN RESA_TAC
7957 THEN RESA_TAC
7958 ;;
7959
7960
7961 let PROVE_INEQUALITY_TAC_4=
7962 fun (th:term)->
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)`)
7964 THEN RESA_TAC 
7965 THENL[
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`];;
7970
7971
7972
7973 let V_SY_EQ_IMAGE_VV_TAC4=
7974 fun (th:term)->
7975 ASM_REWRITE_TAC[]
7976 THEN EXISTS_TAC th
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`];; 
7978
7979
7980
7981 let PROVE_E_SY_EQ_MOD_TAC_4=
7982 fun (th:term)->
7983 EXISTS_TAC th
7984 THEN ASM_REWRITE_TAC[ARITH_RULE`~(3=0)/\ ~(3=1)/\ ~(3=2)/\ ~(2=0)/\ ~(2=1)/\ ~(1=0)`]
7985 THEN ARITH_TAC;;
7986
7987
7988
7989 let PROVE_E_SY_EQ_IMAGE_VV_4=
7990 fun (so:term)->
7991 EXISTS_TAC so
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`])
7997 ;;
7998
7999
8000
8001 let PROOF_E_EQ_TAC_4=
8002 fun (th:term)->
8003 EXISTS_TAC th
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)`]
8005 ;;
8006
8007
8008
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 /\
8019  CONDITION2_SY v 
8020 /\ (!i. vv i = 
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
8024 row 3 v)
8025 ==> vv IN BBs_v39 s`,
8026   (* {{{ proof *)
8027 [
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;
8031
8032
8033 EXPAND_TAC"s"
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;];
8035
8036 POP_ASSUM (fun th-> 
8037 REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
8038 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
8039 THEN ASSUME_TAC th
8040 THEN REPEAT STRIP_TAC)
8041 THEN POP_ASSUM MP_TAC
8042 THEN ASM_REWRITE_TAC[th;IN] 
8043 THEN STRIP_TAC
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;]
8045 THEN STRIP_TAC;
8046
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`)
8052 THEN RESA_TAC
8053 THENL[
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`];
8058
8059
8060 STRIP_TAC;
8061
8062 ASM_REWRITE_TAC[periodic]
8063 THEN GEN_TAC
8064 THEN MRESAL_TAC MOD_EQ[`i+4:num`;`i:num`;`4:num`;`1`][ARITH_RULE`1*A=A`];
8065
8066 STRIP_TAC;
8067
8068 REWRITE_TAC[dist]
8069 THEN REPEAT GEN_TAC
8070 THEN SUBGOAL_THEN`!i. (vv:num->real^3) i= vv (i MOD 4)` ASSUME_TAC;
8071
8072 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
8073 THEN GEN_TAC
8074 THEN MRESAL_TAC MOD_MOD_REFL[`i:num`;`4`][ARITH_RULE`~(4=0)`];
8075
8076
8077 POP_ASSUM MP_TAC
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)`)
8082 THEN RESA_TAC
8083 THENL[
8084 PROVE_INEQUALITY_TAC_4 `4`;
8085 PROVE_INEQUALITY_TAC_4 `1`;
8086 PROVE_INEQUALITY_TAC_4 `2`;
8087 PROVE_INEQUALITY_TAC_4 `3`];
8088
8089 POP_ASSUM MP_TAC
8090 THEN ASM_REWRITE_TAC[ARITH_RULE`~(4<=3)`]
8091 THEN STRIP_TAC
8092 THEN SUBGOAL_THEN`V_SY (v:real^3^M) = IMAGE vv (:num)`ASSUME_TAC;
8093
8094
8095 ASM_REWRITE_TAC[V_SY;rows;IMAGE;EXTENSION;IN_ELIM_THM]
8096 THEN GEN_TAC
8097 THEN EQ_TAC;
8098
8099 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
8100 THEN STRIP_TAC
8101 THENL[
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`];
8106
8107 RESA_TAC
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)`)
8110 THEN RESA_TAC
8111 THENL[
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`];
8116
8117
8118
8119
8120 SUBGOAL_THEN`E_SY (v:real^3^M) = IMAGE (\i. {vv i, vv (SUC i)}) (:num)`ASSUME_TAC;
8121
8122
8123 ASM_REWRITE_TAC[E_SY;rows;IMAGE;]
8124 THEN ONCE_REWRITE_TAC[EXTENSION;]
8125 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
8126 THEN GEN_TAC
8127 THEN EQ_TAC;
8128
8129
8130 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
8131 THEN RESA_TAC
8132 THENL[
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`];
8137
8138 RESA_TAC
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)`)
8141 THEN RESA_TAC
8142 THENL[
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`];
8147
8148 SUBGOAL_THEN`F_SY (v:real^3^M) = IMAGE (\i. (vv i, vv (SUC i))) (:num)`ASSUME_TAC;
8149
8150
8151 ASM_REWRITE_TAC[F_SY;rows;IMAGE;]
8152 THEN ONCE_REWRITE_TAC[EXTENSION;]
8153 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
8154 THEN GEN_TAC
8155 THEN EQ_TAC;
8156
8157 ASM_REWRITE_TAC[ARITH_RULE`(1 <= i /\ i <= 4)<=> i= 1\/ i=2 \/ i=3 \/ i=4`]
8158 THEN RESA_TAC
8159 THENL[
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`];
8164
8165 RESA_TAC
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)`)
8168 THEN RESA_TAC
8169 THENL[
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`];
8174
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[];
8179 ]);;
8180   (* }}} *)
8181
8182
8183
8184
8185
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 = {})`,
8196   (* {{{ proof *)
8197 [
8198 REPEAT GEN_TAC
8199 THEN STRIP_TAC
8200 THEN MP_TAC SCS_4_sqrt8_IS_TRI_STABLE
8201 THEN RESA_TAC
8202 THEN MP_TAC NOT_EMPTY_CASE_4_sqrt8
8203 THEN RESA_TAC
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;
8216
8217 EXPAND_TAC"s"
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;];
8219
8220 POP_ASSUM (fun th-> 
8221 REPLICATE_TAC 11 (POP_ASSUM MP_TAC)
8222 THEN REWRITE_TAC[th]
8223 THEN STRIP_TAC
8224 THEN POP_ASSUM(fun th1-> ASSUME_TAC(SYM th1))
8225 THEN ASSUME_TAC th
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->
8229 POP_ASSUM MP_TAC
8230 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
8231 THEN STRIP_TAC
8232 THEN ASSUME_TAC th)
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`
8240 THEN STRIP_TAC;
8241
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
8248 THEN RESA_TAC;
8249
8250 SUBGOAL_THEN`vector [ vv1 1; vv1 2; (vv1:num->real^3) 3;vv1 0] = v:real^3^M`
8251 ASSUME_TAC;
8252
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
8258 THEN
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];
8262
8263 STRIP_TAC;
8264
8265 GEN_TAC
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`);
8277
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
8291 THEN REAL_ARITH_TAC
8292 ]);;
8293   (* }}} *)
8294
8295
8296
8297
8298
8299
8300
8301
8302
8303
8304
8305
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)
8309 ==> 
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  }={})
8311 \/ 
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 } ={})
8313 `,
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]
8319 THEN RESA_TAC
8320 THEN MP_TAC NOT_EMPTY_CASE_4
8321 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8322 THEN RESA_TAC
8323 THEN MP_TAC NOT_EMPTY_CASE_5
8324 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8325 THEN RESA_TAC
8326 THEN MP_TAC NOT_EMPTY_CASE_6
8327 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8328 THEN RESA_TAC
8329 THEN MP_TAC NOT_EMPTY_CASE_4_3
8330 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8331 THEN RESA_TAC
8332 THEN MP_TAC NOT_EMPTY_CASE_4_sqrt8
8333 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8334 THEN RESA_TAC
8335 THEN MP_TAC NOT_EMPTY_CASE_5_sqrt8
8336 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8337 THEN RESA_TAC
8338 THEN MP_TAC NOT_EMPTY_CASE_5_pro_cs
8339 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8340 THEN RESA_TAC);;
8341
8342
8343
8344
8345
8346
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 = {})
8352 `,
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`]
8355 THEN REPEAT GEN_TAC
8356 THEN STRIP_TAC
8357 THEN MP_TAC XWITCCN_CASE_3
8358 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8359 THEN RESA_TAC
8360 THEN MP_TAC XWITCCN_CASE_4
8361 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8362 THEN RESA_TAC
8363 THEN MP_TAC XWITCCN_CASE_5
8364 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8365 THEN RESA_TAC
8366 THEN MP_TAC XWITCCN_CASE_6
8367 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8368 THEN RESA_TAC
8369 THEN MP_TAC XWITCCN_CASE_4_3
8370 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8371 THEN RESA_TAC
8372 THEN MP_TAC XWITCCN_CASE_4_sqrt8
8373 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8374 THEN RESA_TAC
8375 THEN MP_TAC XWITCCN_CASE_5_sqrt8
8376 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8377 THEN RESA_TAC
8378 THEN MP_TAC XWITCCN_CASE_5_pro_cs
8379 THEN REWRITE_TAC[LET_DEF;LET_END_DEF]
8380 THEN RESA_TAC);;
8381
8382
8383
8384
8385
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 = {})`,
8389 REPEAT GEN_TAC
8390 THEN DISCH_TAC
8391 THEN MP_TAC(INST_TYPE [`:3`,`:M`]XWITCCN_TYPE)
8392 THEN ASM_REWRITE_TAC[DIMINDEX_3]
8393 THEN STRIP_TAC 
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]
8397 THEN STRIP_TAC 
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]
8401 THEN STRIP_TAC 
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]
8405 THEN STRIP_TAC 
8406 THEN POP_ASSUM(fun th-> MRESA_TAC th[`s:scs_v39`;`vv:num->real^3`])
8407 THEN ASM_TAC
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`]
8410 THEN STRIP_TAC
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
8413 );;
8414
8415
8416
8417 (*
8418
8419 *)
8420
8421  end;;
8422
8423
8424
8425
8426