1 (* ========================================================================== *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
4 (* Chapter: Local Fan *)
5 (* Author: Hoang Le Truong *)
7 (* ========================================================================= *)
11 remaining conclusions from appendix to Local Fan chapter
15 module Qknvmlb = struct
26 open Wrgcvdr_cizmrrh;;
34 open Flyspeck_constants;;
50 open Wrgcvdr_cizmrrh;;
52 open Flyspeck_constants;;
70 let MOD_EQ_IMP_MOD_EQ_0=prove(
71 `~(k=0)/\ p MOD k = q MOD k/\ q<= p
74 THEN MRESA_TAC DIVISION[`p:num`;`k:num`]
75 THEN MRESA_TAC DIVISION[`q:num`;`k:num`]
76 THEN MP_TAC(ARITH_RULE`p = p DIV k * k + q MOD k
77 /\ q = q DIV k * k + q MOD k
79 ==> p-q = (p DIV k *k - q DIV k *k)`)
80 THEN ASM_REWRITE_TAC[]
81 THEN POP_ASSUM(fun th->
83 THEN POP_ASSUM(fun th1->
84 GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th1])
86 THEN GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
87 THEN ASM_REWRITE_TAC[]
88 THEN MRESA_TAC DIV_MONO[`q:num`;`p:num`;`k:num`]
89 THEN REWRITE_TAC[GSYM RIGHT_SUB_DISTRIB]
91 THEN MRESA_TAC MOD_MULT[`k:num`;`(p DIV k - q DIV k)`]
92 THEN ONCE_REWRITE_TAC[ARITH_RULE`(p DIV k - q DIV k) * k=k* (p DIV k - q DIV k) `]
93 THEN ASM_REWRITE_TAC[]);;
96 let SCS_K_PRIME_CASE_4=prove(`s' = scs_half_slice_v39 s p q d' mkj
99 /\ scs_diag (scs_k_v39 s) p q
100 ==> scs_k_v39 s' =3`,
102 let CASE_DIAGONAL_MOD=
103 fun (so:term) (so1:term) (so2:term)->
104 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`p:num`;so;`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/\ 0 MOD 4=0 /\ SUC 1=2 /\ SUC 2=3/\ SUC 3=4`]
105 THEN POP_ASSUM(fun th-> ASM_TAC
107 THEN REPEAT STRIP_TAC)
108 THEN POP_ASSUM(fun th-> ASM_TAC
110 THEN REPEAT STRIP_TAC)
111 THEN MRESAL_TAC MOD_ADD_MOD[`q:num`;so1;`4`][ARITH_RULE`~(4=0) /\ 1 MOD 4=1/\ 1+4-0=5/\ 1+4-1=4 /\ 5 MOD 4=1/\ 4 MOD 4=0/\ 1+4-2=3 /\ 3 MOD 4=3/\ 2 MOD 4=2 /\ 1+4-3=2`;ADD1]
112 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
113 THEN MRESAL_TAC DIVISION[`q:num`;`4:num`][ARITH_RULE`~(4=0)`]
114 THEN MP_TAC(ARITH_RULE`q MOD 4 < 4 ==> q MOD 4 =0 \/ q MOD 4 =1 \/ q MOD 4 =2 \/ q MOD 4 =3`)
116 THEN ASM_REWRITE_TAC[ARITH_RULE`(3) MOD 4=3 /\ 2 +1=3 /\ 3+0=3/\ 0+3=3 /\ 1+2=3`]
117 THEN MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`q:num`;so2;`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/\ 0 MOD 4=0/\ SUC 3=4/\ SUC 1=2/\ SUC 2=3`]
121 THEN POP_ASSUM MP_TAC
122 THEN ASM_REWRITE_TAC[scs_half_slice_v39;LET_DEF;LET_END_DEF;scs_k_v39_explicit;scs_diag]
124 THEN MRESAL_TAC DIVISION[`p:num`;`4:num`][ARITH_RULE`~(4=0)`]
125 THEN MP_TAC(ARITH_RULE`p MOD 4 < 4 ==> p MOD 4 =0 \/ p MOD 4 =1 \/ p MOD 4 =2 \/ p MOD 4 =3`)
128 CASE_DIAGONAL_MOD `0` `5` `3`;
129 CASE_DIAGONAL_MOD `1` `4` `0`;
130 CASE_DIAGONAL_MOD `2` `3` `1`;
131 CASE_DIAGONAL_MOD `3` `2` `2`]);;
138 let SCS_K_PRIME_CASE_5=prove(
139 `s' = scs_half_slice_v39 s p q d' mkj
140 /\ s'' = scs_half_slice_v39 s q p d' mkj
143 /\ scs_diag (scs_k_v39 s) p q
144 ==> (scs_k_v39 s' =3 /\ scs_k_v39 s'' =4) \/ (scs_k_v39 s' =4 /\ scs_k_v39 s'' =3)`,
145 let CASE_DIAGONAL_MOD=
146 fun (so:term) (so1:term) (so2:term) ->
147 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`p:num`;so;`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/\ 0 MOD 5=0 /\ SUC 1=2 /\ SUC 2=3/\ SUC 3=4/\ 4 MOD 5=4 /\ SUC 4=5`]
148 THEN POP_ASSUM(fun th-> ASM_TAC
150 THEN REPEAT STRIP_TAC)
151 THEN POP_ASSUM(fun th-> ASM_TAC
153 THEN REPEAT STRIP_TAC
155 THEN MRESAL_TAC MOD_ADD_MOD[`q:num`;so1;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1/\ 1+5-0=6/\ 1+5-1=5 /\ 6 MOD 5=1/\ 5 MOD 5=0/\ 1+5-2=4 /\ 3 MOD 5=3/\ 2 MOD 5=2 /\ 1+5-3=3/\ 1+5-4=2`;ADD1]
156 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
157 THEN MRESAL_TAC DIVISION[`q:num`;`5:num`][ARITH_RULE`~(5=0)`]THEN MP_TAC(ARITH_RULE`q MOD 5 < 5 ==> q MOD 5 =0 \/ q MOD 5 =1 \/ q MOD 5 =2 \/ q MOD 5 = 3\/ q MOD 5=4`)
159 THEN ASM_REWRITE_TAC[ARITH_RULE`(3) MOD 5=3 /\ 2 +1=3 /\ 3+0=3/\ 0+3=3 /\ 1+2=3`]
160 THEN MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`q:num`;so2;`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/\ 0 MOD 5=0/\ SUC 3=4/\ SUC 1=2/\ SUC 2=3/\ SUC 4=5/\ 4 MOD 5=4`]
161 THEN MRESAL_TAC MOD_ADD_MOD[`p:num`;`4`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1/\ 1+5-0=6/\ 1+5-1=5 /\ 6 MOD 5=1/\ 5 MOD 5=0/\ 1+5-2=4 /\ 3 MOD 5=3/\ 2 MOD 5=2 /\ 1+5-3=3/\ 1+5-4=2/\ 4 MOD 5=4 /\ 0+4=4`;ADD1]
162 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
163 THEN MRESAL_TAC MOD_ADD_MOD[`p:num`;`3`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1/\ 1+5-0=6/\ 1+5-1=5 /\ 6 MOD 5=1/\ 5 MOD 5=0/\ 1+5-2=4 /\ 3 MOD 5=3/\ 2 MOD 5=2 /\ 1+5-3=3/\ 1+5-4=2/\ 4 MOD 5=4 /\ 0+3=3 /\ 3+1=4/\ 1+3=4/\ 4+0=4`;ADD1]
164 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
165 THEN MRESAL_TAC MOD_ADD_MOD[`p:num`;`2`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1/\ 1+5-0=6/\ 1+5-1=5 /\ 6 MOD 5=1/\ 5 MOD 5=0/\ 1+5-2=4 /\ 3 MOD 5=3/\ 2 MOD 5=2 /\ 1+5-3=3/\ 1+5-4=2/\ 4 MOD 5=4 /\ 0+3=3 /\ 3+1=4/\ 1+3=4/\ 4+0=4/\ 1+2=3`;ADD1]
166 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
167 THEN MRESAL_TAC MOD_ADD_MOD[`p:num`;`6`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1/\ 1+5-0=6/\ 1+5-1=5 /\ 6 MOD 5=1/\ 5 MOD 5=0/\ 1+5-2=4 /\ 3 MOD 5=3/\ 2 MOD 5=2 /\ 1+5-3=3/\ 1+5-4=2/\ 4 MOD 5=4 /\ 0+3=3 /\ 3+1=4/\ 1+3=4/\ 4+0=4/\ 1+2=3/\ 2+1=3 /\ 4+4=8 /\ 8 MOD 5=3 /\ 2+2=4`;ADD1]
168 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
169 THEN MRESAL_TAC MOD_ADD_MOD[`p:num`;`5`;`5`][ARITH_RULE`~(5=0) /\ 1 MOD 5=1/\ 1+5-0=6/\ 1+5-1=5 /\ 6 MOD 5=1/\ 5 MOD 5=0/\ 1+5-2=4 /\ 3 MOD 5=3/\ 2 MOD 5=2 /\ 1+5-3=3/\ 1+5-4=2/\ 4 MOD 5=4 /\ 0+3=3 /\ 3+1=4/\ 1+3=4/\ 4+0=4/\ 1+2=3/\ 2+1=3 /\ 4+4=8 /\ 8 MOD 5=3 /\ 2+2=4/\ 3+0=3`;ADD1]
170 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
174 THEN POP_ASSUM MP_TAC
175 THEN ASM_REWRITE_TAC[scs_half_slice_v39;LET_DEF;LET_END_DEF;scs_k_v39_explicit;scs_diag]
177 THEN MRESAL_TAC DIVISION[`p:num`;`5:num`][ARITH_RULE`~(5=0)`]
178 THEN MP_TAC(ARITH_RULE`p MOD 5 < 5 ==> p MOD 5 =0 \/ p MOD 5 =1 \/ p MOD 5 =2 \/ p MOD 5 =3\/ p MOD 5=4`)
181 CASE_DIAGONAL_MOD `0` `6` `4`;
182 CASE_DIAGONAL_MOD `1` `5` `0`;
183 CASE_DIAGONAL_MOD `2` `4` `1`;
184 CASE_DIAGONAL_MOD `3` `3` `2`;
185 CASE_DIAGONAL_MOD `4` `2` `3`]);;
189 let SCS_K_PRIME_CASE_6=prove(
190 `s' = scs_half_slice_v39 s p q d' mkj
191 /\ s'' = scs_half_slice_v39 s q p d' mkj
194 /\ scs_diag (scs_k_v39 s) p q
195 ==> (scs_k_v39 s' =3 /\ scs_k_v39 s'' =5) \/ (scs_k_v39 s' =5 /\ scs_k_v39 s'' =3) \/ (scs_k_v39 s' =4 /\ scs_k_v39 s'' =4)`,
196 let CASE_DIAGONAL_MOD=
197 fun (so:term) (so1:term) (so2:term) ->
198 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`p:num`;so;`6`][ARITH_RULE`~(6=0)/\ 6 MOD 6=0/\ SUC 0 MOD 6=1/\ 1 MOD 6=1 /\ 2 MOD 6=2 /\ 3 MOD 6=3/\ 0 MOD 6=0 /\ SUC 1=2 /\ SUC 2=3/\ SUC 3=4/\ 4 MOD 6=4 /\ SUC 4=5/\ SUC 5=6 /\ 5 MOD 6=5`]
199 THEN POP_ASSUM(fun th-> ASM_TAC
201 THEN REPEAT STRIP_TAC)
202 THEN POP_ASSUM(fun th-> ASM_TAC
204 THEN REPEAT STRIP_TAC
206 THEN MRESAL_TAC MOD_ADD_MOD[`q:num`;so1;`6`][ARITH_RULE`~(6=0) /\ 1 MOD 6=1/\ 1+6-0=7/\ 1+6-1=6 /\ 7 MOD 6=1/\ 6 MOD 6=0/\ 1+6-2=5 /\ 3 MOD 6=3/\ 2 MOD 6=2 /\ 1+6-3=4/\ 1+6-4=3/\ 1+6-5=2`;ADD1]
207 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
208 THEN MRESAL_TAC DIVISION[`q:num`;`6:num`][ARITH_RULE`~(6=0)`]THEN MP_TAC(ARITH_RULE`q MOD 6 < 6 ==> q MOD 6 =0 \/ q MOD 6 =1 \/ q MOD 6 =2 \/ q MOD 6 = 3\/ q MOD 6=4\/ q MOD 6=5`)
210 THEN ASM_REWRITE_TAC[ARITH_RULE`(3) MOD 6=3 /\ 2 +1=3 /\ 3+0=3/\ 0+3=3 /\ 1+2=3`]
211 THEN MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`q:num`;so2;`6`][ARITH_RULE`~(6=0)/\ 6 MOD 6=0/\ SUC 0 MOD 6=1/\ 1 MOD 6=1 /\ 2 MOD 6=2 /\ 3 MOD 6=3/\ 0 MOD 6=0/\ SUC 3=4/\ SUC 1=2/\ SUC 2=3/\ SUC 4=5/\ SUC 5=6/\ 4 MOD 6=4/\ 5 MOD 6=5`]
212 THEN MRESAL_TAC MOD_ADD_MOD[`p:num`;`4`;`6`][ARITH_RULE`~(6=0) /\ 1 MOD 6=1/\ 1+6-0=7/\ 1+6-1=6 /\ 7 MOD 6=1/\ 6 MOD 6=0/\ 1+6-2=5 /\ 3 MOD 6=3/\ 2 MOD 6=2 /\ 1+6-3=4/\ 1+6-4=3/\ 4 MOD 6=4 /\ 0+3=3 /\ 3+1=4/\ 1+3=4/\ 4+0=4/\ 1+2=3/\ 2+1=3 /\ 4+4=8 /\ 8 MOD 6=2 /\ 2+2=4/\ 3+0=3/\ 1+6-5=2`;ADD1]
213 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
214 THEN MRESAL_TAC MOD_ADD_MOD[`p:num`;`3`;`6`][ARITH_RULE`~(6=0) /\ 1 MOD 6=1/\ 1+6-0=7/\ 1+6-1=6 /\ 7 MOD 6=1/\ 6 MOD 6=0/\ 1+6-2=5 /\ 3 MOD 6=3/\ 2 MOD 6=2 /\ 1+6-3=4/\ 1+6-4=3/\ 4 MOD 6=4 /\ 0+3=3 /\ 3+1=4/\ 1+3=4/\ 4+0=4/\ 1+2=3/\ 2+1=3 /\ 4+4=8 /\ 8 MOD 6=2 /\ 2+2=4/\ 3+0=3`;ADD1]
215 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
216 THEN MRESAL_TAC MOD_ADD_MOD[`p:num`;`2`;`6`][ARITH_RULE`~(6=0) /\ 1 MOD 6=1/\ 1+6-0=7/\ 1+6-1=6 /\ 7 MOD 6=1/\ 6 MOD 6=0/\ 1+6-2=5 /\ 3 MOD 6=3/\ 2 MOD 6=2 /\ 1+6-3=4/\ 1+6-4=3/\ 4 MOD 6=4 /\ 0+3=3 /\ 3+1=4/\ 1+3=4/\ 4+0=4/\ 1+2=3/\ 2+1=3 /\ 4+4=8 /\ 8 MOD 6=2 /\ 2+2=4/\ 3+0=3`;ADD1]
217 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
218 THEN MRESAL_TAC MOD_ADD_MOD[`p:num`;`6`;`6`][ARITH_RULE`~(6=0) /\ 1 MOD 6=1/\ 1+6-0=7/\ 1+6-1=6 /\ 7 MOD 6=1/\ 6 MOD 6=0/\ 1+6-2=5 /\ 3 MOD 6=3/\ 2 MOD 6=2 /\ 1+6-3=4/\ 1+6-4=3/\ 4 MOD 6=4 /\ 0+3=3 /\ 3+1=4/\ 1+3=4/\ 4+0=4/\ 1+2=3/\ 2+1=3 /\ 4+4=8 /\ 8 MOD 6=2 /\ 2+2=4/\ 3+0=3`;ADD1]
219 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
220 THEN MRESAL_TAC MOD_ADD_MOD[`p:num`;`5`;`6`][ARITH_RULE`~(6=0) /\ 1 MOD 6=1/\ 1+6-0=7/\ 1+6-1=6 /\ 7 MOD 6=1/\ 6 MOD 6=0/\ 1+6-2=5 /\ 3 MOD 6=3/\ 2 MOD 6=2 /\ 1+6-3=4/\ 1+6-4=3/\ 4 MOD 6=4 /\ 0+3=3 /\ 3+1=4/\ 1+3=4/\ 4+0=4/\ 1+2=3/\ 2+1=3 /\ 4+4=8 /\ 8 MOD 6=2 /\ 2+2=4/\ 3+0=3/\ 5 MOD 6=5/\ 0+5=5/\0+4= 4/\ 4+1=5/\ 1+4=5 /\ 5+0=5`;ADD1]
221 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
222 THEN MRESAL_TAC MOD_ADD_MOD[`p:num`;`7`;`6`][ARITH_RULE`~(6=0) /\ 1 MOD 6=1/\ 1+6-0=7/\ 1+6-1=6 /\ 7 MOD 6=1/\ 6 MOD 6=0/\ 1+6-2=5 /\ 3 MOD 6=3/\ 2 MOD 6=2 /\ 1+6-3=4/\ 1+6-4=3/\ 4 MOD 6=4 /\ 0+3=3 /\ 3+1=4/\ 1+3=4/\ 4+0=4/\ 1+2=3/\ 2+1=3 /\ 4+4=8 /\ 8 MOD 6=2 /\ 2+2=4/\ 3+0=3/\ 5 MOD 6=5/\ 0+5=5/\0+4= 4/\ 4+1=5/\ 1+4=5 /\ 5+0=5/\ 4+5=9/\ 9 MOD 6=3/\ 2+3=5/\ 5+5=10/\ 10 MOD 6=4/\ 5+4=9/\ 3+2=5`;ADD1]
223 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
228 THEN POP_ASSUM MP_TAC
229 THEN ASM_REWRITE_TAC[scs_half_slice_v39;LET_DEF;LET_END_DEF;scs_k_v39_explicit;scs_diag]
231 THEN MRESAL_TAC DIVISION[`p:num`;`6:num`][ARITH_RULE`~(6=0)`]
232 THEN MP_TAC(ARITH_RULE`p MOD 6 < 6 ==> p MOD 6 =0 \/ p MOD 6 =1 \/ p MOD 6 =2 \/ p MOD 6 =3\/ p MOD 6=4\/ p MOD 6=5`)
235 CASE_DIAGONAL_MOD `0` `7` `5`;
236 CASE_DIAGONAL_MOD `1` `6` `0`;
237 CASE_DIAGONAL_MOD `2` `5` `1`;
238 CASE_DIAGONAL_MOD `3` `4` `2`;
239 CASE_DIAGONAL_MOD `4` `3` `3`;
240 CASE_DIAGONAL_MOD `5` `2` `4`]);;
245 let SCS_K_PRIME_CASE_3=prove(`is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q
248 fun (so:term) (so1:term)->
249 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`p:num`;so;`3`][ARITH_RULE`~(3=0)/\ 3 MOD 3=0/\ SUC 0 MOD 3=1/\ 1 MOD 3=1 /\ 2 MOD 3=2 /\ 0 MOD 3=0 /\ SUC 1=2 /\ SUC 2=3/\ SUC 3=4`]
250 THEN MRESAL_TAC DIVISION[`q:num`;`3:num`][ARITH_RULE`~(3=0)`]
251 THEN MP_TAC(ARITH_RULE`q MOD 3< 3 ==> q MOD 3 =0\/ q MOD 3 =1 \/ q MOD 3 =2`)
253 THEN MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`q:num`;so1;`3`][ARITH_RULE`~(3=0)/\ 3 MOD 3=0/\ SUC 0 MOD 3=1/\ 1 MOD 3=1 /\ 2 MOD 3=2 /\ 0 MOD 3=0 /\ SUC 1=2 /\ SUC 2=3/\ SUC 3=4`]
256 REWRITE_TAC[LET_DEF;LET_END_DEF;scs_half_slice_v39;is_scs_v39;scs_diag;scs_v39_explicit]
258 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> scs_k_v39 s =3\/ 3<scs_k_v39 s`)
259 THEN ASM_REWRITE_TAC[]
261 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th]
262 THEN REPEAT STRIP_TAC)
263 THEN REPLICATE_TAC 3 (POP_ASSUM MP_TAC)
264 THEN MRESAL_TAC DIVISION[`p:num`;`3:num`][ARITH_RULE`~(3=0)`]
265 THEN MP_TAC(ARITH_RULE`p MOD 3< 3 ==> p MOD 3 =0\/ p MOD 3 =1 \/ p MOD 3 =2`)
267 THENL[LEMMA_TAC `0` `2`;
269 LEMMA_TAC `2` `1`]);;
272 let SCS_K_PRIME_LE_GE=prove(` let s' = scs_half_slice_v39 s p q d' mkj in
273 is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q
275 3<= scs_k_v39 s' /\ scs_k_v39 s'<=6 /\ scs_k_v39 s'< scs_k_v39 s `,
276 REWRITE_TAC[LET_DEF;LET_END_DEF;]
278 THEN MP_TAC SCS_K_PRIME_CASE_3
280 THEN POP_ASSUM MP_TAC
281 THEN POP_ASSUM MP_TAC
282 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
283 THEN MP_TAC th THEN REWRITE_TAC[is_scs_v39]
286 THEN ABBREV_TAC`s' = scs_half_slice_v39 s p q d' mkj`
287 THEN ABBREV_TAC`s'' = scs_half_slice_v39 s q p d' mkj`
288 THEN MP_TAC(ARITH_RULE`3 < scs_k_v39 s /\ scs_k_v39 s<=6 ==> scs_k_v39 s = 4\/ scs_k_v39 s = 5\/ scs_k_v39 s = 6`)
291 MP_TAC SCS_K_PRIME_CASE_4
294 MP_TAC SCS_K_PRIME_CASE_5
297 MP_TAC SCS_K_PRIME_CASE_6
305 let SCS_HALF_SLICE_IS_SCS=prove_by_refinement(
306 ` s' = scs_half_slice_v39 s p q d' mkj /\
307 s'' = scs_half_slice_v39 s q p d'' mkj /\
308 (scs_J_v39 s' 0 (scs_k_v39 s' -1))= mkj
310 (~(scs_J_v39 s' 0 (scs_k_v39 s' -1)))
311 /\ vv' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s')+p MOD (scs_k_v39 s)))
312 /\ is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q
315 scs_bm_v39 s p q < &4 /\
316 (4<scs_k_v39 s ==> scs_bm_v39 s p q <= cstab)
322 THEN MRESA_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`p:num`;`q:num`;`d':real`;`scs_J_v39 s' p q`]
323 THEN POP_ASSUM MP_TAC
324 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;]
325 THEN REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
326 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;scs_half_slice_v39;is_scs_v39;scs_diag;scs_v39_explicit]
327 THEN ABBREV_TAC`k'=(q + 1 + scs_k_v39 s - p MOD scs_k_v39 s) MOD scs_k_v39 s`
328 THEN REPEAT RESA_TAC;
332 REWRITE_TAC[periodic]
337 REWRITE_TAC[periodic]
342 REWRITE_TAC[periodic]
347 REWRITE_TAC[periodic]
352 REWRITE_TAC[periodic2]
353 THEN REPEAT STRIP_TAC
358 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
359 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`]
364 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
365 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`]
370 REWRITE_TAC[periodic2]
371 THEN REPEAT STRIP_TAC
376 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
377 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
380 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
381 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
387 REWRITE_TAC[periodic2]
388 THEN REPEAT STRIP_TAC;
392 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
393 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
397 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
398 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
403 REWRITE_TAC[periodic2]
404 THEN REPEAT STRIP_TAC
409 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
410 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
415 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
416 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`]
421 REWRITE_TAC[periodic2]
422 THEN REPEAT STRIP_TAC
427 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
428 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
431 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
432 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
436 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
440 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
444 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
448 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
453 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
463 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
471 THEN REPLICATE_TAC (17)(REMOVE_ASSUM_TAC)
472 THEN POP_ASSUM(fun th-> MRESA_TAC th[`i MOD k' + p MOD scs_k_v39 s`;`j MOD k' + p MOD scs_k_v39 s`])
473 THEN REPLICATE_TAC 3 (POP_ASSUM MP_TAC)
483 MP_TAC(ARITH_RULE`3<=k' ==> ~(0=k'-1)`)
485 THEN DISJ_CASES_TAC(SET_RULE`{i MOD k', i MOD k'} = {0, k'-1} \/ ~({i MOD k', i MOD k'} = {0, k'-1})`);
489 MP_TAC(SET_RULE`{i MOD k', i MOD k'} = {0, k'-1}==> i MOD k'= 0 /\ i MOD k'= k'-1`)
491 THEN POP_ASSUM MP_TAC
501 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
507 THEN REWRITE_TAC[periodic2;]
508 THEN REPEAT STRIP_TAC
509 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0)`)
511 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_am_v39 s p`][ARITH_RULE`~(4=0)`;periodic]
512 THEN POP_ASSUM(fun th-> MRESA1_TAC th `q:num`)
513 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
514 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_am_v39 s (q MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
515 THEN POP_ASSUM(fun th-> MRESA1_TAC th `p:num`)
516 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
517 THEN MRESAL_TAC DIVISION[`p:num`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
518 THEN MRESAL_TAC DIVISION[`q:num`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
519 THEN REPLICATE_TAC 23 (POP_ASSUM MP_TAC)
520 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
521 THEN MRESA_TAC th[`p MOD scs_k_v39 s`;`q MOD scs_k_v39 s`])
522 THEN REPLICATE_TAC 25(POP_ASSUM MP_TAC)
523 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
524 THEN MRESA_TAC th[`p MOD scs_k_v39 s`;`q MOD scs_k_v39 s`])
525 THEN REPLICATE_TAC 4(POP_ASSUM MP_TAC)
532 THEN REWRITE_TAC[periodic2;]
533 THEN REPEAT STRIP_TAC
534 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0)`)
536 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
537 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(j MOD k' + p MOD scs_k_v39 s):num`)
538 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
539 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s (((j MOD k' + p MOD scs_k_v39 s) MOD scs_k_v39 s))`][ARITH_RULE`~(4=0)`;periodic]
540 THEN POP_ASSUM(fun th-> MRESA1_TAC th `((i MOD k' + p MOD scs_k_v39 s)):num`)
541 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
542 THEN REPLICATE_TAC (34-15)(POP_ASSUM MP_TAC)
543 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
544 THEN MATCH_MP_TAC th)
545 THEN MRESAL_TAC DIVISION[`(i MOD k' + p MOD scs_k_v39 s):num`;`scs_k_v39 s:num`][ARITH_RULE`~(6=0)`]
546 THEN MRESAL_TAC DIVISION[`(j MOD k' + p MOD scs_k_v39 s):num`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
548 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`i MOD k':num`;`j MOD k':num`;`p MOD scs_k_v39 s`;`scs_k_v39 s`][ADD_SYM]
549 THEN POP_ASSUM MP_TAC
550 THEN MRESA_TAC MOD_LT[`i:num`;`k':num`]
551 THEN MRESA_TAC MOD_LT[`j:num`;`k':num`]
552 THEN MP_TAC(ARITH_RULE`i< k' /\ k'< scs_k_v39 s /\ j<k' ==>
553 i< scs_k_v39 s /\ j< scs_k_v39 s`)
555 THEN MRESA_TAC MOD_LT[`i:num`;`scs_k_v39 s`]
556 THEN MRESA_TAC MOD_LT[`j:num`;`scs_k_v39 s`]
563 DISJ_CASES_TAC(SET_RULE`{i MOD 3, SUC i MOD 3} = {0, 3-1} \/ ~({i MOD 3, SUC i MOD 3} = {0, 3-1})`);
572 THEN MRESAL_TAC DIVISION[`i:num`;`k':num`][ARITH_RULE`~(3=0)`]
573 THEN MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s`)
576 THEN REWRITE_TAC[periodic2;]
577 THEN REPEAT STRIP_TAC
578 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0)`)
580 THEN MP_TAC(ARITH_RULE`(i ) MOD 3 < 3 ==> (i ) MOD 3 =0 \/ (i ) MOD 3 =1 \/ (i ) MOD 3 =2`)
585 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`0`;`3`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 0+A=A /\ 1+A= SUC A`]
586 THEN REPLICATE_TAC (37-17)(POP_ASSUM MP_TAC)
587 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
588 THEN MRESAL1_TAC th `p MOD scs_k_v39 s` [ARITH_RULE`SUC 0=1/\ SUC 1=2/\ SUC 2=3`;cstab])
589 THEN POP_ASSUM MP_TAC
594 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`1`;`3`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
595 THEN REPLICATE_TAC (37-17)(POP_ASSUM MP_TAC)
596 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
597 THEN MRESAL1_TAC th `1+p MOD scs_k_v39 s` [ARITH_RULE`SUC 0=1/\ SUC 1=2/\ SUC 2=3`;cstab])
598 THEN POP_ASSUM MP_TAC
602 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`2`;`3`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
603 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;ARITH_RULE`3-1=2`]
604 THEN REPEAT STRIP_TAC)
605 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;ARITH_RULE`3-1=2`]
606 THEN REPEAT STRIP_TAC)
607 THEN REPLICATE_TAC (4) REMOVE_ASSUM_TAC
608 THEN POP_ASSUM MP_TAC
620 DISJ_CASES_TAC(SET_RULE`{i MOD k', SUC i MOD k'} = {0, k'-1} \/ ~({i MOD k', SUC i MOD k'} = {0, k'-1})`);
624 THEN MP_TAC(ARITH_RULE`3<k' /\ k'< scs_k_v39 s ==> 4< scs_k_v39 s`)
626 THEN REPLICATE_TAC (6) (POP_ASSUM MP_TAC)
627 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
635 THEN MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'`)
637 THEN MRESAL_TAC DIVISION[`i:num`;`k':num`][ARITH_RULE`~(3=0)`]
639 THEN REWRITE_TAC[periodic2;]
640 THEN REPEAT STRIP_TAC
641 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0)`)
643 THEN REWRITE_TAC[ADD1]
644 THEN MRESA_TAC MOD_ADD_MOD[`i:num`;`1:num`;`k':num`]
645 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
646 THEN MRESA_TAC MOD_LT[`1`;`k':num`]
647 THEN MP_TAC(ARITH_RULE`3<k' /\ i MOD k' < k' ==> i MOD k' =k'-1 \/ i MOD k' +1 < k' `)
654 MRESA_TAC MOD_LT[`k'-1`;`k':num`]
655 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
657 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`k'-1`;`k':num`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
658 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th]
659 THEN REPEAT STRIP_TAC)
660 THEN REPLICATE_TAC (2) REMOVE_ASSUM_TAC
661 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th]
662 THEN REPEAT STRIP_TAC)
663 THEN REPLICATE_TAC (8) REMOVE_ASSUM_TAC
664 THEN POP_ASSUM MP_TAC
669 MRESAL_TAC MOD_LT[`i MOD k' +1`;`k':num`][ARITH_RULE`(i MOD k' + 1) + p MOD scs_k_v39 s= SUC(i MOD k' + p MOD scs_k_v39 s)`]
670 THEN REPLICATE_TAC (42-17)(POP_ASSUM MP_TAC)
671 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
672 THEN MATCH_MP_TAC th)
673 THEN ASM_REWRITE_TAC[];
678 THEN DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1} \/ ~({i MOD k', j MOD k'} = {0, k' - 1})`)
685 MP_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1} ==> (i MOD k'= 0 /\ j MOD k' = k'-1)\/ (i MOD k'= k'-1 /\ j MOD k' = 0)`)
689 MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'`)
691 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
692 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
694 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`j:num`;`k'-1`;`k':num`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
700 MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'/\ ~(scs_k_v39 s =0)`)
702 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
703 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
705 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`k'-1`;`k':num`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
712 THEN REPLICATE_TAC (31-18)(POP_ASSUM MP_TAC)
713 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
714 THEN MRESAL_TAC th[`(i MOD k' + p MOD scs_k_v39 s)`;`(j MOD k' + p MOD scs_k_v39 s)`][ARITH_RULE`SUC(A+B)= SUC A+B`])
719 MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'/\ ~(scs_k_v39 s =0)`)
721 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`j MOD k':num`;`SUC(i MOD k'):num`;`p MOD scs_k_v39 s`;`scs_k_v39 s`][ADD_SYM]
722 THEN POP_ASSUM MP_TAC
723 THEN MRESAL_TAC DIVISION[`(i):num`;`k':num`][ARITH_RULE`~(6=0)`]
724 THEN MRESAL_TAC DIVISION[`(j):num`;`k':num`][ARITH_RULE`~(6=0)`]
725 THEN MP_TAC(ARITH_RULE`j MOD k' < k' /\ k'< scs_k_v39 s
726 /\ i MOD k' < k' ==> j MOD k' < scs_k_v39 s /\ SUC (i MOD k') < scs_k_v39 s`)
728 THEN MRESA_TAC MOD_LT[`j MOD k'`;`scs_k_v39 s:num`]
729 THEN MRESA_TAC MOD_LT[`SUC(i MOD k')`;`scs_k_v39 s:num`]
731 THEN MP_TAC(ARITH_RULE`3<=k' /\ i MOD k' < k' ==> i MOD k' =k'-1 \/ i MOD k' +1 < k' `)
740 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th]
741 THEN REPEAT STRIP_TAC)
742 THEN POP_ASSUM MP_TAC
743 THEN ASM_REWRITE_TAC[]
744 THEN REPLICATE_TAC (4) REMOVE_ASSUM_TAC
745 THEN POP_ASSUM MP_TAC
751 THEN MRESA_TAC MOD_ADD_MOD[`i:num`;`1:num`;`k':num`]
752 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
753 THEN MRESA_TAC MOD_LT[`1`;`k':num`]
754 THEN MRESA_TAC MOD_LT[`i MOD k' + 1`;`k':num`]
763 MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'/\ ~(scs_k_v39 s =0)`)
765 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`i MOD k':num`;`SUC(j MOD k'):num`;`p MOD scs_k_v39 s`;`scs_k_v39 s`][ADD_SYM]
766 THEN POP_ASSUM MP_TAC
767 THEN MRESAL_TAC DIVISION[`(i):num`;`k':num`][ARITH_RULE`~(6=0)`]
768 THEN MRESAL_TAC DIVISION[`(j):num`;`k':num`][ARITH_RULE`~(6=0)`]
769 THEN MP_TAC(ARITH_RULE`j MOD k' < k' /\ k'< scs_k_v39 s
770 /\ i MOD k' < k' ==> SUC(j MOD k') < scs_k_v39 s /\ (i MOD k') < scs_k_v39 s`)
772 THEN MRESA_TAC MOD_LT[`i MOD k'`;`scs_k_v39 s:num`]
773 THEN MRESA_TAC MOD_LT[`SUC(j MOD k')`;`scs_k_v39 s:num`]
775 THEN MP_TAC(ARITH_RULE`3<=k' /\ j MOD k' < k' ==> j MOD k' =k'-1 \/ j MOD k' +1 < k' `)
784 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th]
785 THEN REPEAT STRIP_TAC)
786 THEN POP_ASSUM MP_TAC
787 THEN ASM_REWRITE_TAC[]
788 THEN REPLICATE_TAC (5) REMOVE_ASSUM_TAC
789 THEN POP_ASSUM MP_TAC
795 THEN MRESA_TAC MOD_ADD_MOD[`j:num`;`1:num`;`k':num`]
796 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
797 THEN MRESA_TAC MOD_LT[`1`;`k':num`]
798 THEN MRESA_TAC MOD_LT[`j MOD k' + 1`;`k':num`]
807 THEN DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1} \/ ~({i MOD k', j MOD k'} = {0, k' - 1})`)
814 THEN REPLICATE_TAC (33)(POP_ASSUM MP_TAC)
815 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
817 THEN ASM_REWRITE_TAC[];
823 THEN REPLICATE_TAC (36-24)(POP_ASSUM MP_TAC)
824 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
825 THEN MRESA_TAC th[`(i MOD k' + p MOD scs_k_v39 s)`;`(j MOD k' + p MOD scs_k_v39 s)`])
831 THEN DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1} \/ ~({i MOD k', j MOD k'} = {0, k' - 1})`)
838 THEN REPLICATE_TAC (33)(POP_ASSUM MP_TAC)
839 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
841 THEN ASM_REWRITE_TAC[];
847 THEN REPLICATE_TAC (36-24)(POP_ASSUM MP_TAC)
848 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
849 THEN MRESA_TAC th[`(i MOD k' + p MOD scs_k_v39 s)`;`(j MOD k' + p MOD scs_k_v39 s)`])
854 SUBGOAL_THEN`IMAGE (\x. (x+p MOD scs_k_v39 s )MOD scs_k_v39 s ) {i | i < k' /\
856 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
857 then scs_bm_v39 s p q
858 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
859 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
861 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
862 then scs_am_v39 s p q
863 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
864 (SUC i MOD k' + p MOD scs_k_v39 s)))}
865 SUBSET {i | i < scs_k_v39 s /\
866 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))} UNION {(k'-1 + p MOD scs_k_v39 s) MOD scs_k_v39 s}` ASSUME_TAC;
871 REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING;IMAGE]
877 THEN POP_ASSUM MP_TAC
878 THEN MP_TAC(ARITH_RULE`x'<k'==> x'= k'-1\/ SUC x' < k' `)
880 THEN MRESA_TAC MOD_LT[`x':num`;`k':num`]
881 THEN MRESA_TAC MOD_LT[`SUC x':num`;`k':num`]
882 THEN DISJ_CASES_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} \/ ~({x', SUC x'} = {0, k' - 1})`)
888 MP_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} ==> (x' =0 /\ SUC x' = k'-1)\/ (x' =k'-1/\ SUC x' =0)`)
890 THEN POP_ASSUM MP_TAC
891 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0= k'-1<=> k'=2`]
893 THEN POP_ASSUM (fun th->
894 REPLICATE_TAC (40-32)(REMOVE_ASSUM_TAC)
895 THEN POP_ASSUM MP_TAC
896 THEN REWRITE_TAC[th])
906 THEN MATCH_MP_TAC(SET_RULE`A==>A \/ B`)
907 THEN MP_TAC(ARITH_RULE`k' < scs_k_v39 s /\ 3<= k' /\ x'< k' /\ SUC x' < k' ==> ~(scs_k_v39 s=0) /\ x'< scs_k_v39 s/\ SUC x' < scs_k_v39 s/\ 1< scs_k_v39 s`)
909 THEN MRESAL_TAC DIVISION[`x' + p MOD scs_k_v39 s`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
910 THEN MATCH_MP_TAC(SET_RULE`A==>A \/ B`)
911 THEN MRESA_TAC MOD_LT[`x':num`;`scs_k_v39 s`]
912 THEN MRESA_TAC MOD_LT[`SUC x':num`;`scs_k_v39 s`]
913 THEN MRESA_TAC MOD_ADD_MOD[`x':num`;`p:num`;`scs_k_v39 s`]
914 THEN MRESA_TAC MOD_ADD_MOD[`SUC x':num`;`p:num`;`scs_k_v39 s`]
915 THEN REPLICATE_TAC (10)(POP_ASSUM MP_TAC)
916 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
919 THEN REWRITE_TAC[periodic2;]
920 THEN REPEAT STRIP_TAC
921 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s (x' + p MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
922 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(SUC x' + p MOD scs_k_v39 s):num`)
923 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[SYM th])
924 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s ((SUC x' + p) MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
925 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x' + p MOD scs_k_v39 s):num`)
926 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
927 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s ((x' + p) MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
928 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(SUC ((x' + p) MOD scs_k_v39 s)):num`)
929 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;ADD1])
930 THEN MRESA_TAC MOD_LT[`1:num`;`scs_k_v39 s`]
931 THEN MRESA_TAC MOD_ADD_MOD[`(x' + p):num`;`1:num`;`scs_k_v39 s`]
933 THEN ASM_REWRITE_TAC[ARITH_RULE`(x' + p) + 1=(x' + 1) + p`]
940 THEN POP_ASSUM MP_TAC
941 THEN MP_TAC(ARITH_RULE`x'<k'==> x'= k'-1\/ SUC x' < k' `)
943 THEN MRESA_TAC MOD_LT[`x':num`;`k':num`]
944 THEN MRESA_TAC MOD_LT[`SUC x':num`;`k':num`]
945 THEN DISJ_CASES_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} \/ ~({x', SUC x'} = {0, k' - 1})`)
951 MP_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} ==> (x' =0 /\ SUC x' = k'-1)\/ (x' =k'-1/\ SUC x' =0)`)
953 THEN POP_ASSUM MP_TAC
954 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0= k'-1<=> k'=2`]
956 THEN POP_ASSUM (fun th->
957 REPLICATE_TAC (40-32)(REMOVE_ASSUM_TAC)
958 THEN POP_ASSUM MP_TAC
959 THEN REWRITE_TAC[th])
969 THEN MATCH_MP_TAC(SET_RULE`A==>A \/ B`)
970 THEN MP_TAC(ARITH_RULE`k' < scs_k_v39 s /\ 3<= k' /\ x'< k' /\ SUC x' < k' ==> ~(scs_k_v39 s=0) /\ x'< scs_k_v39 s/\ SUC x' < scs_k_v39 s/\ 1< scs_k_v39 s`)
972 THEN MRESAL_TAC DIVISION[`x' + p MOD scs_k_v39 s`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
973 THEN MATCH_MP_TAC(SET_RULE`B==>A \/ B`)
974 THEN MRESA_TAC MOD_LT[`x':num`;`scs_k_v39 s`]
975 THEN MRESA_TAC MOD_LT[`SUC x':num`;`scs_k_v39 s`]
976 THEN MRESA_TAC MOD_ADD_MOD[`x':num`;`p:num`;`scs_k_v39 s`]
977 THEN MRESA_TAC MOD_ADD_MOD[`SUC x':num`;`p:num`;`scs_k_v39 s`]
978 THEN REPLICATE_TAC (10)(POP_ASSUM MP_TAC)
979 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
982 THEN REWRITE_TAC[periodic2;]
983 THEN REPEAT STRIP_TAC
984 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s (x' + p MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
985 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(SUC x' + p MOD scs_k_v39 s):num`)
986 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[SYM th])
987 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s ((SUC x' + p) MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
988 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x' + p MOD scs_k_v39 s):num`)
989 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
990 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s ((x' + p) MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
991 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(SUC ((x' + p) MOD scs_k_v39 s)):num`)
992 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;ADD1])
993 THEN MRESA_TAC MOD_LT[`1:num`;`scs_k_v39 s`]
994 THEN MRESA_TAC MOD_ADD_MOD[`(x' + p):num`;`1:num`;`scs_k_v39 s`]
996 THEN ASM_REWRITE_TAC[ARITH_RULE`(x' + p) + 1=(x' + 1) + p`]
1002 SUBGOAL_THEN`CARD(IMAGE (\x. (x+p MOD scs_k_v39 s )MOD scs_k_v39 s ) {i | i < k' /\
1004 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1005 then scs_bm_v39 s p q
1006 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
1007 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
1009 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1010 then scs_am_v39 s p q
1011 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
1012 (SUC i MOD k' + p MOD scs_k_v39 s)))})
1013 = CARD {i | i < k' /\
1015 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1016 then scs_bm_v39 s p q
1017 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
1018 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
1020 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1021 then scs_am_v39 s p q
1022 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
1023 (SUC i MOD k' + p MOD scs_k_v39 s)))}`ASSUME_TAC
1029 MATCH_MP_TAC CARD_IMAGE_INJ
1033 REWRITE_TAC[IN_ELIM_THM]
1034 THEN REPEAT STRIP_TAC
1035 THEN MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s /\ x<k' /\y< k' ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'/\ ~(scs_k_v39 s =0)
1036 /\ x< scs_k_v39 s/\ y< scs_k_v39 s`)
1038 THEN MRESA_TAC MOD_LT[`x:num`;`scs_k_v39 s`]
1039 THEN MRESA_TAC MOD_LT[`y:num`;`scs_k_v39 s`]
1040 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`x:num`;`y:num`;`p MOD scs_k_v39 s`;`scs_k_v39 s`][ADD_SYM]
1044 MATCH_MP_TAC FINITE_SUBSET
1045 THEN EXISTS_TAC`0.. k'`
1046 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
1051 POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1052 THEN SUBGOAL_THEN`FINITE
1053 ({i | i < scs_k_v39 s /\
1054 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))} UNION
1055 {(k' - 1 + p MOD scs_k_v39 s) MOD scs_k_v39 s})`ASSUME_TAC
1061 REWRITE_TAC[FINITE_UNION;FINITE_SING]
1062 THEN MATCH_MP_TAC FINITE_SUBSET
1063 THEN EXISTS_TAC`0.. (scs_k_v39 s)`
1064 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
1068 MRESA_TAC CARD_SUBSET[`IMAGE (\x. (x+p MOD scs_k_v39 s )MOD scs_k_v39 s ) {i | i < k' /\
1070 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1071 then scs_bm_v39 s p q
1072 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
1073 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
1075 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1076 then scs_am_v39 s p q
1077 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
1078 (SUC i MOD k' + p MOD scs_k_v39 s)))}`;`{i | i < scs_k_v39 s /\
1079 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))} UNION {(k'-1 + p MOD scs_k_v39 s) MOD scs_k_v39 s}`]
1080 THEN SUBGOAL_THEN`FINITE
1081 ({i | i < scs_k_v39 s /\
1082 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))})`ASSUME_TAC
1088 REWRITE_TAC[FINITE_UNION;FINITE_SING]
1089 THEN MATCH_MP_TAC FINITE_SUBSET
1090 THEN EXISTS_TAC`0.. (scs_k_v39 s)`
1091 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
1096 MRESAL_TAC CARD_UNION_LE[`{i | i < scs_k_v39 s /\
1097 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))}`;
1098 `{(k' - 1 + p MOD scs_k_v39 s) MOD scs_k_v39 s}`][FINITE_SING;Geomdetail.CARD_SING]
1099 THEN POP_ASSUM MP_TAC
1100 THEN REMOVE_ASSUM_TAC
1101 THEN POP_ASSUM MP_TAC
1102 THEN REMOVE_ASSUM_TAC
1103 THEN REMOVE_ASSUM_TAC
1104 THEN POP_ASSUM MP_TAC
1105 THEN REPLICATE_TAC (8) REMOVE_ASSUM_TAC
1106 THEN REPEAT STRIP_TAC
1107 THEN ABBREV_TAC`a= CARD
1108 ({i | i < scs_k_v39 s /\
1109 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))} UNION
1110 {(k' - 1 + p MOD scs_k_v39 s) MOD scs_k_v39 s})`
1111 THEN ABBREV_TAC`b=CARD
1112 {i | i < scs_k_v39 s /\
1113 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))}`
1114 THEN ABBREV_TAC`c=CARD
1115 (IMAGE (\x. (x + p MOD scs_k_v39 s) MOD scs_k_v39 s)
1118 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1119 then scs_bm_v39 s p q
1120 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
1121 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
1123 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1124 then scs_am_v39 s p q
1125 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
1126 (SUC i MOD k' + p MOD scs_k_v39 s)))})`
1127 THEN MP_TAC(ARITH_RULE`c<=a /\ a<= b+1 /\ k'< scs_k_v39 s/\ b + scs_k_v39 s <= 6 ==> c+k' <=6`)
1134 let SCS_HALF_SLICE_IS_SCS_4=prove_by_refinement(` s' = scs_half_slice_v39 s p q d' mkj /\
1135 s'' = scs_half_slice_v39 s q p d'' mkj /\
1136 (scs_J_v39 s' 0 (scs_k_v39 s' -1))= mkj
1138 (~(scs_J_v39 s' 0 (scs_k_v39 s' -1)))
1139 /\ vv' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s')+p MOD (scs_k_v39 s)))
1140 /\ is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q
1143 scs_bm_v39 s p q < &4 /\
1148 THEN MRESA_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`p:num`;`q:num`;`d':real`;`scs_J_v39 s' p q`]
1149 THEN POP_ASSUM MP_TAC
1150 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;]
1151 THEN REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
1152 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;scs_half_slice_v39;is_scs_v39;scs_diag;scs_v39_explicit]
1153 THEN ABBREV_TAC`k'=(q + 1 + scs_k_v39 s - p MOD scs_k_v39 s) MOD scs_k_v39 s`
1154 THEN REPEAT RESA_TAC;
1156 REWRITE_TAC[periodic]
1159 REWRITE_TAC[periodic]
1162 REWRITE_TAC[periodic]
1165 REWRITE_TAC[periodic]
1168 REWRITE_TAC[periodic2]
1169 THEN REPEAT STRIP_TAC
1172 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1173 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`]
1176 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1177 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`]
1180 REWRITE_TAC[periodic2]
1181 THEN REPEAT STRIP_TAC
1184 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1185 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
1186 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1187 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
1191 REWRITE_TAC[periodic2]
1192 THEN REPEAT STRIP_TAC;
1194 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1195 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
1197 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1198 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
1201 REWRITE_TAC[periodic2]
1202 THEN REPEAT STRIP_TAC
1205 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1206 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
1209 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1210 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`]
1213 REWRITE_TAC[periodic2]
1214 THEN REPEAT STRIP_TAC
1217 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1218 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
1219 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1220 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
1222 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1224 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1226 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1228 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1231 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1237 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
1241 THEN REPLICATE_TAC (17)(POP_ASSUM MP_TAC)
1242 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
1243 THEN MRESA_TAC th[`i MOD k' + p MOD scs_k_v39 s`;`j MOD k' + p MOD scs_k_v39 s`])
1244 THEN REPLICATE_TAC 3 (POP_ASSUM MP_TAC)
1245 THEN REAL_ARITH_TAC;
1249 MP_TAC(ARITH_RULE`3<=k' ==> ~(0=k'-1)`)
1251 THEN DISJ_CASES_TAC(SET_RULE`{i MOD k', i MOD k'} = {0, k'-1} \/ ~({i MOD k', i MOD k'} = {0, k'-1})`);
1253 MP_TAC(SET_RULE`{i MOD k', i MOD k'} = {0, k'-1}==> i MOD k'= 0 /\ i MOD k'= k'-1`)
1255 THEN POP_ASSUM MP_TAC
1261 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
1265 THEN REWRITE_TAC[periodic2;]
1266 THEN REPEAT STRIP_TAC
1267 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0)`)
1269 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_am_v39 s p`][ARITH_RULE`~(4=0)`;periodic]
1270 THEN POP_ASSUM(fun th-> MRESA1_TAC th `q:num`)
1271 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
1272 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_am_v39 s (q MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
1273 THEN POP_ASSUM(fun th-> MRESA1_TAC th `p:num`)
1274 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
1275 THEN MRESAL_TAC DIVISION[`p:num`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
1276 THEN MRESAL_TAC DIVISION[`q:num`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
1277 THEN REPLICATE_TAC 23 (POP_ASSUM MP_TAC)
1278 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1279 THEN MRESA_TAC th[`p MOD scs_k_v39 s`;`q MOD scs_k_v39 s`])
1280 THEN REPLICATE_TAC 25(POP_ASSUM MP_TAC)
1281 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1282 THEN MRESA_TAC th[`p MOD scs_k_v39 s`;`q MOD scs_k_v39 s`])
1283 THEN REPLICATE_TAC 4(POP_ASSUM MP_TAC)
1284 THEN REAL_ARITH_TAC;
1288 THEN REWRITE_TAC[periodic2;]
1289 THEN REPEAT STRIP_TAC
1290 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0)`)
1292 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
1293 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(j MOD k' + p MOD scs_k_v39 s):num`)
1294 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
1295 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s (((j MOD k' + p MOD scs_k_v39 s) MOD scs_k_v39 s))`][ARITH_RULE`~(4=0)`;periodic]
1296 THEN POP_ASSUM(fun th-> MRESA1_TAC th `((i MOD k' + p MOD scs_k_v39 s)):num`)
1297 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
1298 THEN REPLICATE_TAC (34-15)(POP_ASSUM MP_TAC)
1299 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1300 THEN MATCH_MP_TAC th)
1301 THEN MRESAL_TAC DIVISION[`(i MOD k' + p MOD scs_k_v39 s):num`;`scs_k_v39 s:num`][ARITH_RULE`~(6=0)`]
1302 THEN MRESAL_TAC DIVISION[`(j MOD k' + p MOD scs_k_v39 s):num`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
1304 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`i MOD k':num`;`j MOD k':num`;`p MOD scs_k_v39 s`;`scs_k_v39 s`][ADD_SYM]
1305 THEN POP_ASSUM MP_TAC
1306 THEN MRESA_TAC MOD_LT[`i:num`;`k':num`]
1307 THEN MRESA_TAC MOD_LT[`j:num`;`k':num`]
1308 THEN MP_TAC(ARITH_RULE`i< k' /\ k'< scs_k_v39 s /\ j<k' ==>
1309 i< scs_k_v39 s /\ j< scs_k_v39 s`)
1311 THEN MRESA_TAC MOD_LT[`i:num`;`scs_k_v39 s`]
1312 THEN MRESA_TAC MOD_LT[`j:num`;`scs_k_v39 s`]
1317 DISJ_CASES_TAC(SET_RULE`{i MOD 3, SUC i MOD 3} = {0, 3-1} \/ ~({i MOD 3, SUC i MOD 3} = {0, 3-1})`);
1322 THEN MRESAL_TAC DIVISION[`i:num`;`k':num`][ARITH_RULE`~(3=0)`]
1324 THEN REWRITE_TAC[periodic2;]
1325 THEN REPEAT STRIP_TAC
1326 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0)`)
1328 THEN MP_TAC(ARITH_RULE`(i ) MOD 3 < 3 ==> (i ) MOD 3 =0 \/ (i ) MOD 3 =1 \/ (i ) MOD 3 =2`)
1331 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`0`;`3`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 0+A=A /\ 1+A= SUC A`]
1332 THEN REPLICATE_TAC (41-22)(POP_ASSUM MP_TAC)
1333 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1334 THEN MRESAL1_TAC th `p MOD scs_k_v39 s` [ARITH_RULE`SUC 0=1/\ SUC 1=2/\ SUC 2=3/\ 3<4`;cstab])
1335 THEN POP_ASSUM MP_TAC
1336 THEN REAL_ARITH_TAC;
1338 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`1`;`3`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
1339 THEN REPLICATE_TAC (41-22)(POP_ASSUM MP_TAC)
1340 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1341 THEN MRESAL1_TAC th `1+p MOD scs_k_v39 s` [ARITH_RULE`SUC 0=1/\ SUC 1=2/\ SUC 2=3/\3<4`;cstab])
1342 THEN POP_ASSUM MP_TAC
1343 THEN REAL_ARITH_TAC;
1344 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`2`;`3`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
1345 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;ARITH_RULE`3-1=2`]
1346 THEN REPEAT STRIP_TAC)
1347 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;ARITH_RULE`3-1=2`]
1348 THEN REPEAT STRIP_TAC)
1349 THEN REPLICATE_TAC (3) REMOVE_ASSUM_TAC
1350 THEN POP_ASSUM MP_TAC
1355 THEN POP_ASSUM MP_TAC
1368 THEN DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1} \/ ~({i MOD k', j MOD k'} = {0, k' - 1})`)
1371 MP_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1} ==> (i MOD k'= 0 /\ j MOD k' = k'-1)\/ (i MOD k'= k'-1 /\ j MOD k' = 0)`)
1373 MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'`)
1375 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
1376 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
1378 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`j:num`;`k'-1`;`k':num`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
1382 MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'/\ ~(scs_k_v39 s =0)`)
1384 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
1385 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
1387 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`k'-1`;`k':num`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
1392 THEN REPLICATE_TAC (36-23)(POP_ASSUM MP_TAC)
1393 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1394 THEN MRESAL_TAC th[`(i MOD k' + p MOD scs_k_v39 s)`;`(j MOD k' + p MOD scs_k_v39 s)`][ARITH_RULE`SUC(A+B)= SUC A+B`])
1397 MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'/\ ~(scs_k_v39 s =0)`)
1399 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`j MOD k':num`;`SUC(i MOD k'):num`;`p MOD scs_k_v39 s`;`scs_k_v39 s`][ADD_SYM]
1400 THEN POP_ASSUM MP_TAC
1401 THEN MRESAL_TAC DIVISION[`(i):num`;`k':num`][ARITH_RULE`~(6=0)`]
1402 THEN MRESAL_TAC DIVISION[`(j):num`;`k':num`][ARITH_RULE`~(6=0)`]
1403 THEN MP_TAC(ARITH_RULE`j MOD k' < k' /\ k'< scs_k_v39 s
1404 /\ i MOD k' < k' ==> j MOD k' < scs_k_v39 s /\ SUC (i MOD k') < scs_k_v39 s`)
1406 THEN MRESA_TAC MOD_LT[`j MOD k'`;`scs_k_v39 s:num`]
1407 THEN MRESA_TAC MOD_LT[`SUC(i MOD k')`;`scs_k_v39 s:num`]
1409 THEN MP_TAC(ARITH_RULE`3<=k' /\ i MOD k' < k' ==> i MOD k' =k'-1 \/ i MOD k' +1 < k' `)
1416 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th]
1417 THEN REPEAT STRIP_TAC)
1418 THEN POP_ASSUM MP_TAC
1419 THEN ASM_REWRITE_TAC[]
1420 THEN REPLICATE_TAC (4) REMOVE_ASSUM_TAC
1421 THEN POP_ASSUM MP_TAC
1425 THEN MRESA_TAC MOD_ADD_MOD[`i:num`;`1:num`;`k':num`]
1426 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1427 THEN MRESA_TAC MOD_LT[`1`;`k':num`]
1428 THEN MRESA_TAC MOD_LT[`i MOD k' + 1`;`k':num`]
1435 MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'/\ ~(scs_k_v39 s =0)`)
1437 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`i MOD k':num`;`SUC(j MOD k'):num`;`p MOD scs_k_v39 s`;`scs_k_v39 s`][ADD_SYM]
1438 THEN POP_ASSUM MP_TAC
1439 THEN MRESAL_TAC DIVISION[`(i):num`;`k':num`][ARITH_RULE`~(6=0)`]
1440 THEN MRESAL_TAC DIVISION[`(j):num`;`k':num`][ARITH_RULE`~(6=0)`]
1441 THEN MP_TAC(ARITH_RULE`j MOD k' < k' /\ k'< scs_k_v39 s
1442 /\ i MOD k' < k' ==> SUC(j MOD k') < scs_k_v39 s /\ (i MOD k') < scs_k_v39 s`)
1444 THEN MRESA_TAC MOD_LT[`i MOD k'`;`scs_k_v39 s:num`]
1445 THEN MRESA_TAC MOD_LT[`SUC(j MOD k')`;`scs_k_v39 s:num`]
1447 THEN MP_TAC(ARITH_RULE`3<=k' /\ j MOD k' < k' ==> j MOD k' =k'-1 \/ j MOD k' +1 < k' `)
1454 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th]
1455 THEN REPEAT STRIP_TAC)
1456 THEN POP_ASSUM MP_TAC
1457 THEN ASM_REWRITE_TAC[]
1458 THEN REPLICATE_TAC (5) REMOVE_ASSUM_TAC
1459 THEN POP_ASSUM MP_TAC
1463 THEN MRESA_TAC MOD_ADD_MOD[`j:num`;`1:num`;`k':num`]
1464 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1465 THEN MRESA_TAC MOD_LT[`1`;`k':num`]
1466 THEN MRESA_TAC MOD_LT[`j MOD k' + 1`;`k':num`]
1473 THEN DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1} \/ ~({i MOD k', j MOD k'} = {0, k' - 1})`)
1478 THEN REPLICATE_TAC (33)(POP_ASSUM MP_TAC)
1479 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1481 THEN ASM_REWRITE_TAC[];
1485 THEN REPLICATE_TAC (36-24)(POP_ASSUM MP_TAC)
1486 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1487 THEN MRESA_TAC th[`(i MOD k' + p MOD scs_k_v39 s)`;`(j MOD k' + p MOD scs_k_v39 s)`])
1491 THEN DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1} \/ ~({i MOD k', j MOD k'} = {0, k' - 1})`)
1496 THEN REPLICATE_TAC (33)(POP_ASSUM MP_TAC)
1497 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1499 THEN ASM_REWRITE_TAC[];
1503 THEN REPLICATE_TAC (36-24)(POP_ASSUM MP_TAC)
1504 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1505 THEN MRESA_TAC th[`(i MOD k' + p MOD scs_k_v39 s)`;`(j MOD k' + p MOD scs_k_v39 s)`])
1508 SUBGOAL_THEN`IMAGE (\x. (x+p MOD scs_k_v39 s )MOD scs_k_v39 s ) {i | i < k' /\
1510 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1511 then scs_bm_v39 s p q
1512 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
1513 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
1515 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1516 then scs_am_v39 s p q
1517 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
1518 (SUC i MOD k' + p MOD scs_k_v39 s)))}
1519 SUBSET {i | i < scs_k_v39 s /\
1520 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))} UNION {(k'-1 + p MOD scs_k_v39 s) MOD scs_k_v39 s}` ASSUME_TAC;
1523 REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING;IMAGE]
1527 THEN POP_ASSUM MP_TAC
1528 THEN MP_TAC(ARITH_RULE`x'<k'==> x'= k'-1\/ SUC x' < k' `)
1530 THEN MRESA_TAC MOD_LT[`x':num`;`k':num`]
1531 THEN MRESA_TAC MOD_LT[`SUC x':num`;`k':num`]
1532 THEN DISJ_CASES_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} \/ ~({x', SUC x'} = {0, k' - 1})`)
1536 MP_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} ==> (x' =0 /\ SUC x' = k'-1)\/ (x' =k'-1/\ SUC x' =0)`)
1538 THEN POP_ASSUM MP_TAC
1539 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0= k'-1<=> k'=2`]
1541 THEN POP_ASSUM (fun th->
1542 REPLICATE_TAC (40-32)(REMOVE_ASSUM_TAC)
1543 THEN POP_ASSUM MP_TAC
1544 THEN REWRITE_TAC[th])
1552 THEN MATCH_MP_TAC(SET_RULE`A==>A \/ B`)
1553 THEN MP_TAC(ARITH_RULE`k' < scs_k_v39 s /\ 3<= k' /\ x'< k' /\ SUC x' < k' ==> ~(scs_k_v39 s=0) /\ x'< scs_k_v39 s/\ SUC x' < scs_k_v39 s/\ 1< scs_k_v39 s`)
1555 THEN MRESAL_TAC DIVISION[`x' + p MOD scs_k_v39 s`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
1556 THEN MATCH_MP_TAC(SET_RULE`A==>A \/ B`)
1557 THEN MRESA_TAC MOD_LT[`x':num`;`scs_k_v39 s`]
1558 THEN MRESA_TAC MOD_LT[`SUC x':num`;`scs_k_v39 s`]
1559 THEN MRESA_TAC MOD_ADD_MOD[`x':num`;`p:num`;`scs_k_v39 s`]
1560 THEN MRESA_TAC MOD_ADD_MOD[`SUC x':num`;`p:num`;`scs_k_v39 s`]
1561 THEN REPLICATE_TAC (10)(POP_ASSUM MP_TAC)
1562 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1565 THEN REWRITE_TAC[periodic2;]
1566 THEN REPEAT STRIP_TAC
1567 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s (x' + p MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
1568 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(SUC x' + p MOD scs_k_v39 s):num`)
1569 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[SYM th])
1570 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s ((SUC x' + p) MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
1571 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x' + p MOD scs_k_v39 s):num`)
1572 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
1573 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s ((x' + p) MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
1574 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(SUC ((x' + p) MOD scs_k_v39 s)):num`)
1575 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;ADD1])
1576 THEN MRESA_TAC MOD_LT[`1:num`;`scs_k_v39 s`]
1577 THEN MRESA_TAC MOD_ADD_MOD[`(x' + p):num`;`1:num`;`scs_k_v39 s`]
1579 THEN ASM_REWRITE_TAC[ARITH_RULE`(x' + p) + 1=(x' + 1) + p`]
1584 THEN POP_ASSUM MP_TAC
1585 THEN MP_TAC(ARITH_RULE`x'<k'==> x'= k'-1\/ SUC x' < k' `)
1587 THEN MRESA_TAC MOD_LT[`x':num`;`k':num`]
1588 THEN MRESA_TAC MOD_LT[`SUC x':num`;`k':num`]
1589 THEN DISJ_CASES_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} \/ ~({x', SUC x'} = {0, k' - 1})`)
1593 MP_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} ==> (x' =0 /\ SUC x' = k'-1)\/ (x' =k'-1/\ SUC x' =0)`)
1595 THEN POP_ASSUM MP_TAC
1596 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0= k'-1<=> k'=2`]
1598 THEN POP_ASSUM (fun th->
1599 REPLICATE_TAC (40-32)(REMOVE_ASSUM_TAC)
1600 THEN POP_ASSUM MP_TAC
1601 THEN REWRITE_TAC[th])
1609 THEN MATCH_MP_TAC(SET_RULE`A==>A \/ B`)
1610 THEN MP_TAC(ARITH_RULE`k' < scs_k_v39 s /\ 3<= k' /\ x'< k' /\ SUC x' < k' ==> ~(scs_k_v39 s=0) /\ x'< scs_k_v39 s/\ SUC x' < scs_k_v39 s/\ 1< scs_k_v39 s`)
1612 THEN MRESAL_TAC DIVISION[`x' + p MOD scs_k_v39 s`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
1613 THEN MATCH_MP_TAC(SET_RULE`B==>A \/ B`)
1614 THEN MRESA_TAC MOD_LT[`x':num`;`scs_k_v39 s`]
1615 THEN MRESA_TAC MOD_LT[`SUC x':num`;`scs_k_v39 s`]
1616 THEN MRESA_TAC MOD_ADD_MOD[`x':num`;`p:num`;`scs_k_v39 s`]
1617 THEN MRESA_TAC MOD_ADD_MOD[`SUC x':num`;`p:num`;`scs_k_v39 s`]
1618 THEN REPLICATE_TAC (10)(POP_ASSUM MP_TAC)
1619 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1622 THEN REWRITE_TAC[periodic2;]
1623 THEN REPEAT STRIP_TAC
1624 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s (x' + p MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
1625 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(SUC x' + p MOD scs_k_v39 s):num`)
1626 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[SYM th])
1627 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s ((SUC x' + p) MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
1628 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x' + p MOD scs_k_v39 s):num`)
1629 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
1630 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s ((x' + p) MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
1631 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(SUC ((x' + p) MOD scs_k_v39 s)):num`)
1632 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;ADD1])
1633 THEN MRESA_TAC MOD_LT[`1:num`;`scs_k_v39 s`]
1634 THEN MRESA_TAC MOD_ADD_MOD[`(x' + p):num`;`1:num`;`scs_k_v39 s`]
1636 THEN ASM_REWRITE_TAC[ARITH_RULE`(x' + p) + 1=(x' + 1) + p`]
1640 SUBGOAL_THEN`CARD(IMAGE (\x. (x+p MOD scs_k_v39 s )MOD scs_k_v39 s ) {i | i < k' /\
1642 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1643 then scs_bm_v39 s p q
1644 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
1645 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
1647 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1648 then scs_am_v39 s p q
1649 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
1650 (SUC i MOD k' + p MOD scs_k_v39 s)))})
1651 = CARD {i | i < k' /\
1653 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1654 then scs_bm_v39 s p q
1655 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
1656 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
1658 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1659 then scs_am_v39 s p q
1660 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
1661 (SUC i MOD k' + p MOD scs_k_v39 s)))}`ASSUME_TAC
1665 MATCH_MP_TAC CARD_IMAGE_INJ
1667 ASM_REWRITE_TAC[IN_ELIM_THM]
1668 THEN REPEAT STRIP_TAC
1669 THEN MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s /\ x<k' /\y< k' ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'/\ ~(scs_k_v39 s =0)
1670 /\ x< scs_k_v39 s/\ y< scs_k_v39 s`)
1672 THEN MRESA_TAC MOD_LT[`x:num`;`scs_k_v39 s`]
1673 THEN MRESA_TAC MOD_LT[`y:num`;`scs_k_v39 s`]
1674 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`x:num`;`y:num`;`p MOD scs_k_v39 s`;`scs_k_v39 s`][ADD_SYM]
1676 MATCH_MP_TAC FINITE_SUBSET
1677 THEN EXISTS_TAC`0.. k'`
1678 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
1682 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1683 THEN SUBGOAL_THEN`FINITE
1684 ({i | i < scs_k_v39 s /\
1685 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))} UNION
1686 {(k' - 1 + p MOD scs_k_v39 s) MOD scs_k_v39 s})`ASSUME_TAC
1690 REWRITE_TAC[FINITE_UNION;FINITE_SING]
1691 THEN MATCH_MP_TAC FINITE_SUBSET
1692 THEN EXISTS_TAC`0.. (scs_k_v39 s)`
1693 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
1697 THEN MRESA_TAC CARD_SUBSET[`IMAGE (\x. (x+p MOD scs_k_v39 s )MOD scs_k_v39 s ) {i | i < k' /\
1699 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1700 then scs_bm_v39 s p q
1701 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
1702 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
1704 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1705 then scs_am_v39 s p q
1706 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
1707 (SUC i MOD k' + p MOD scs_k_v39 s)))}`;`{i | i < scs_k_v39 s /\
1708 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))} UNION {(k'-1 + p MOD scs_k_v39 s) MOD scs_k_v39 s}`]
1709 THEN SUBGOAL_THEN`FINITE
1710 ({i | i < scs_k_v39 s /\
1711 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))})`ASSUME_TAC
1715 REWRITE_TAC[FINITE_UNION;FINITE_SING]
1716 THEN MATCH_MP_TAC FINITE_SUBSET
1717 THEN EXISTS_TAC`0.. (scs_k_v39 s)`
1718 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
1723 THEN MRESAL_TAC CARD_UNION_LE[`{i | i < scs_k_v39 s /\
1724 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))}`;`{(k' - 1 + p MOD scs_k_v39 s) MOD scs_k_v39 s}`][FINITE_SING;Geomdetail.CARD_SING]
1725 THEN POP_ASSUM MP_TAC
1726 THEN REMOVE_ASSUM_TAC
1727 THEN POP_ASSUM MP_TAC
1728 THEN REMOVE_ASSUM_TAC
1729 THEN REMOVE_ASSUM_TAC
1730 THEN POP_ASSUM MP_TAC
1731 THEN REMOVE_ASSUM_TAC
1732 THEN REMOVE_ASSUM_TAC
1733 THEN POP_ASSUM (fun th->
1734 REPLICATE_TAC (5) REMOVE_ASSUM_TAC
1735 THEN POP_ASSUM MP_TAC
1736 THEN REWRITE_TAC[th])
1737 THEN ABBREV_TAC`a={i | i < 4 /\
1738 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))}`
1739 THEN ABBREV_TAC`b=CARD
1740 (IMAGE (\x. (x + p MOD 4) MOD 4)
1743 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1744 then scs_bm_v39 s p q
1745 else scs_b_v39 s (i MOD k' + p MOD 4) (SUC i MOD k' + p MOD 4)) \/
1747 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
1748 then scs_am_v39 s p q
1749 else scs_a_v39 s (i MOD k' + p MOD 4) (SUC i MOD k' + p MOD 4)))})`
1750 THEN ABBREV_TAC`c=CARD (a UNION {(k' - 1 + p MOD 4) MOD 4})`
1751 THEN ASM_REWRITE_TAC[]
1758 let IS_EAR_IS_SCS=prove(`is_ear_v39 s
1760 REWRITE_TAC[is_ear_v39;is_scs_v39]
1765 let SCS_HALF_SLICE_IS_SCS_4_PRIME=prove_by_refinement(
1766 ` s' = scs_half_slice_v39 s p q d' mkj /\
1767 s'' = scs_half_slice_v39 s q p d'' mkj /\
1768 (scs_J_v39 s' 0 (scs_k_v39 s' -1))= mkj
1771 /\ vv' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s')+p MOD (scs_k_v39 s)))
1772 /\ is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q
1775 scs_bm_v39 s p q < &4 /\
1781 THEN MRESA_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`p:num`;`q:num`;`d':real`;`scs_J_v39 s' p q`]
1782 THEN POP_ASSUM MP_TAC
1783 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;]
1784 THEN REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
1785 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;scs_half_slice_v39;is_scs_v39;scs_diag;scs_v39_explicit]
1786 THEN ABBREV_TAC`k'=(q + 1 + scs_k_v39 s - p MOD scs_k_v39 s) MOD scs_k_v39 s`
1787 THEN REPEAT RESA_TAC;
1789 REWRITE_TAC[periodic]
1792 REWRITE_TAC[periodic]
1795 REWRITE_TAC[periodic]
1798 REWRITE_TAC[periodic]
1801 REWRITE_TAC[periodic2]
1802 THEN REPEAT STRIP_TAC
1805 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1806 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`]
1809 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1810 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`]
1813 REWRITE_TAC[periodic2]
1814 THEN REPEAT STRIP_TAC
1817 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1818 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
1819 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1820 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
1824 REWRITE_TAC[periodic2]
1825 THEN REPEAT STRIP_TAC;
1827 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1828 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
1830 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1831 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
1834 REWRITE_TAC[periodic2]
1835 THEN REPEAT STRIP_TAC
1838 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1839 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
1842 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1843 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`]
1846 REWRITE_TAC[periodic2]
1847 THEN REPEAT STRIP_TAC
1850 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1851 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
1852 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
1853 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
1855 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1857 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1859 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1861 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1864 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1870 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
1874 THEN REPLICATE_TAC (17)(POP_ASSUM MP_TAC)
1875 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
1876 THEN MRESA_TAC th[`i MOD k' + p MOD scs_k_v39 s`;`j MOD k' + p MOD scs_k_v39 s`])
1877 THEN REPLICATE_TAC 3 (POP_ASSUM MP_TAC)
1878 THEN REAL_ARITH_TAC;
1882 MP_TAC(ARITH_RULE`3<=k' ==> ~(0=k'-1)`)
1884 THEN DISJ_CASES_TAC(SET_RULE`{i MOD k', i MOD k'} = {0, k'-1} \/ ~({i MOD k', i MOD k'} = {0, k'-1})`);
1886 MP_TAC(SET_RULE`{i MOD k', i MOD k'} = {0, k'-1}==> i MOD k'= 0 /\ i MOD k'= k'-1`)
1888 THEN POP_ASSUM MP_TAC
1894 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
1898 THEN REWRITE_TAC[periodic2;]
1899 THEN REPEAT STRIP_TAC
1900 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0)`)
1902 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_am_v39 s p`][ARITH_RULE`~(4=0)`;periodic]
1903 THEN POP_ASSUM(fun th-> MRESA1_TAC th `q:num`)
1904 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
1905 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_am_v39 s (q MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
1906 THEN POP_ASSUM(fun th-> MRESA1_TAC th `p:num`)
1907 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
1908 THEN MRESAL_TAC DIVISION[`p:num`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
1909 THEN MRESAL_TAC DIVISION[`q:num`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
1910 THEN REPLICATE_TAC 23 (POP_ASSUM MP_TAC)
1911 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1912 THEN MRESA_TAC th[`p MOD scs_k_v39 s`;`q MOD scs_k_v39 s`])
1913 THEN REPLICATE_TAC 25(POP_ASSUM MP_TAC)
1914 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1915 THEN MRESA_TAC th[`p MOD scs_k_v39 s`;`q MOD scs_k_v39 s`])
1916 THEN REPLICATE_TAC 4(POP_ASSUM MP_TAC)
1917 THEN REAL_ARITH_TAC;
1921 THEN REWRITE_TAC[periodic2;]
1922 THEN REPEAT STRIP_TAC
1923 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0)`)
1925 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
1926 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(j MOD k' + p MOD scs_k_v39 s):num`)
1927 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
1928 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s (((j MOD k' + p MOD scs_k_v39 s) MOD scs_k_v39 s))`][ARITH_RULE`~(4=0)`;periodic]
1929 THEN POP_ASSUM(fun th-> MRESA1_TAC th `((i MOD k' + p MOD scs_k_v39 s)):num`)
1930 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
1931 THEN REPLICATE_TAC (34-15)(POP_ASSUM MP_TAC)
1932 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1933 THEN MATCH_MP_TAC th)
1934 THEN MRESAL_TAC DIVISION[`(i MOD k' + p MOD scs_k_v39 s):num`;`scs_k_v39 s:num`][ARITH_RULE`~(6=0)`]
1935 THEN MRESAL_TAC DIVISION[`(j MOD k' + p MOD scs_k_v39 s):num`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
1937 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`i MOD k':num`;`j MOD k':num`;`p MOD scs_k_v39 s`;`scs_k_v39 s`][ADD_SYM]
1938 THEN POP_ASSUM MP_TAC
1939 THEN MRESA_TAC MOD_LT[`i:num`;`k':num`]
1940 THEN MRESA_TAC MOD_LT[`j:num`;`k':num`]
1941 THEN MP_TAC(ARITH_RULE`i< k' /\ k'< scs_k_v39 s /\ j<k' ==>
1942 i< scs_k_v39 s /\ j< scs_k_v39 s`)
1944 THEN MRESA_TAC MOD_LT[`i:num`;`scs_k_v39 s`]
1945 THEN MRESA_TAC MOD_LT[`j:num`;`scs_k_v39 s`]
1950 DISJ_CASES_TAC(SET_RULE`{i MOD 3, SUC i MOD 3} = {0, 3-1} \/ ~({i MOD 3, SUC i MOD 3} = {0, 3-1})`);
1955 THEN MRESAL_TAC DIVISION[`i:num`;`k':num`][ARITH_RULE`~(3=0)`]
1957 THEN REWRITE_TAC[periodic2;]
1958 THEN REPEAT STRIP_TAC
1959 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0)`)
1961 THEN MP_TAC(ARITH_RULE`(i ) MOD 3 < 3 ==> (i ) MOD 3 =0 \/ (i ) MOD 3 =1 \/ (i ) MOD 3 =2`)
1964 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`0`;`3`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 0+A=A /\ 1+A= SUC A`]
1965 THEN REPLICATE_TAC (41-22)(POP_ASSUM MP_TAC)
1966 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1967 THEN MRESAL1_TAC th `p MOD scs_k_v39 s` [ARITH_RULE`SUC 0=1/\ SUC 1=2/\ SUC 2=3/\ 3<4`;cstab])
1968 THEN POP_ASSUM MP_TAC
1969 THEN REAL_ARITH_TAC;
1971 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`1`;`3`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
1972 THEN REPLICATE_TAC (41-22)(POP_ASSUM MP_TAC)
1973 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1974 THEN MRESAL1_TAC th `1+p MOD scs_k_v39 s` [ARITH_RULE`SUC 0=1/\ SUC 1=2/\ SUC 2=3/\3<4`;cstab])
1975 THEN POP_ASSUM MP_TAC
1976 THEN REAL_ARITH_TAC;
1977 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`2`;`3`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
1978 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;ARITH_RULE`3-1=2`]
1979 THEN REPEAT STRIP_TAC)
1980 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;ARITH_RULE`3-1=2`]
1981 THEN REPEAT STRIP_TAC)
1982 THEN REPLICATE_TAC (3) REMOVE_ASSUM_TAC
1983 THEN POP_ASSUM MP_TAC
1988 THEN POP_ASSUM MP_TAC
2001 THEN DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1} \/ ~({i MOD k', j MOD k'} = {0, k' - 1})`)
2004 MP_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1} ==> (i MOD k'= 0 /\ j MOD k' = k'-1)\/ (i MOD k'= k'-1 /\ j MOD k' = 0)`)
2007 MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'`)
2009 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
2010 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
2012 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`j:num`;`k'-1`;`k':num`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
2016 MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'/\ ~(scs_k_v39 s =0)`)
2018 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
2019 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
2021 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`k'-1`;`k':num`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
2026 THEN REPLICATE_TAC (36-23)(POP_ASSUM MP_TAC)
2027 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2028 THEN MRESAL_TAC th[`(i MOD k' + p MOD scs_k_v39 s)`;`(j MOD k' + p MOD scs_k_v39 s)`][ARITH_RULE`SUC(A+B)= SUC A+B`])
2032 MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'/\ ~(scs_k_v39 s =0)`)
2034 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`j MOD k':num`;`SUC(i MOD k'):num`;`p MOD scs_k_v39 s`;`scs_k_v39 s`][ADD_SYM]
2035 THEN POP_ASSUM MP_TAC
2036 THEN MRESAL_TAC DIVISION[`(i):num`;`k':num`][ARITH_RULE`~(6=0)`]
2037 THEN MRESAL_TAC DIVISION[`(j):num`;`k':num`][ARITH_RULE`~(6=0)`]
2038 THEN MP_TAC(ARITH_RULE`j MOD k' < k' /\ k'< scs_k_v39 s
2039 /\ i MOD k' < k' ==> j MOD k' < scs_k_v39 s /\ SUC (i MOD k') < scs_k_v39 s`)
2041 THEN MRESA_TAC MOD_LT[`j MOD k'`;`scs_k_v39 s:num`]
2042 THEN MRESA_TAC MOD_LT[`SUC(i MOD k')`;`scs_k_v39 s:num`]
2044 THEN MP_TAC(ARITH_RULE`3<=k' /\ i MOD k' < k' ==> i MOD k' =k'-1 \/ i MOD k' +1 < k' `)
2051 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th]
2052 THEN REPEAT STRIP_TAC)
2053 THEN POP_ASSUM MP_TAC
2054 THEN ASM_REWRITE_TAC[]
2055 THEN REPLICATE_TAC (4) REMOVE_ASSUM_TAC
2056 THEN POP_ASSUM MP_TAC
2060 THEN MRESA_TAC MOD_ADD_MOD[`i:num`;`1:num`;`k':num`]
2061 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2062 THEN MRESA_TAC MOD_LT[`1`;`k':num`]
2063 THEN MRESA_TAC MOD_LT[`i MOD k' + 1`;`k':num`]
2070 MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'/\ ~(scs_k_v39 s =0)`)
2072 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`i MOD k':num`;`SUC(j MOD k'):num`;`p MOD scs_k_v39 s`;`scs_k_v39 s`][ADD_SYM]
2073 THEN POP_ASSUM MP_TAC
2074 THEN MRESAL_TAC DIVISION[`(i):num`;`k':num`][ARITH_RULE`~(6=0)`]
2075 THEN MRESAL_TAC DIVISION[`(j):num`;`k':num`][ARITH_RULE`~(6=0)`]
2076 THEN MP_TAC(ARITH_RULE`j MOD k' < k' /\ k'< scs_k_v39 s
2077 /\ i MOD k' < k' ==> SUC(j MOD k') < scs_k_v39 s /\ (i MOD k') < scs_k_v39 s`)
2079 THEN MRESA_TAC MOD_LT[`i MOD k'`;`scs_k_v39 s:num`]
2080 THEN MRESA_TAC MOD_LT[`SUC(j MOD k')`;`scs_k_v39 s:num`]
2082 THEN MP_TAC(ARITH_RULE`3<=k' /\ j MOD k' < k' ==> j MOD k' =k'-1 \/ j MOD k' +1 < k' `)
2089 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th]
2090 THEN REPEAT STRIP_TAC)
2091 THEN POP_ASSUM MP_TAC
2092 THEN ASM_REWRITE_TAC[]
2093 THEN REPLICATE_TAC (5) REMOVE_ASSUM_TAC
2094 THEN POP_ASSUM MP_TAC
2098 THEN MRESA_TAC MOD_ADD_MOD[`j:num`;`1:num`;`k':num`]
2099 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2100 THEN MRESA_TAC MOD_LT[`1`;`k':num`]
2101 THEN MRESA_TAC MOD_LT[`j MOD k' + 1`;`k':num`]
2108 THEN DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1} \/ ~({i MOD k', j MOD k'} = {0, k' - 1})`)
2114 THEN REPLICATE_TAC (36-3)(POP_ASSUM MP_TAC)
2115 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
2117 THEN ASM_REWRITE_TAC[is_ear_v39;scs_half_slice_v39;LET_DEF;LET_END_DEF;scs_half_slice_v39;is_scs_v39;scs_diag;scs_v39_explicit])
2119 THEN ABBREV_TAC`k''=(p + 1 + 4 - q MOD 4) MOD 4`
2120 THEN SUBGOAL_THEN`k'' -1 IN {i | i < 3 /\
2121 (if {i MOD k'', SUC i MOD k''} = {0, k'' - 1}
2123 else scs_J_v39 s (i MOD k'' + q MOD 4) (SUC i MOD k'' + q MOD 4))}` ASSUME_TAC
2126 REWRITE_TAC[IN_ELIM_THM]
2127 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2 /\ 2<3 /\ 2 MOD 3=2/\ SUC 2=3/\ 3 MOD 3=0 `];
2130 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`;SET_RULE`( a = b <=> b=a)`;IN_SING]
2131 THEN REPLICATE_TAC (3)(POP_ASSUM MP_TAC)
2132 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2134 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2 /\ 2<3 /\ 2 MOD 3=2/\ SUC 2=3/\ 3 MOD 3=0 `];
2144 THEN REPLICATE_TAC (36-24)(POP_ASSUM MP_TAC)
2145 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2146 THEN MRESA_TAC th[`(i MOD k' + p MOD scs_k_v39 s)`;`(j MOD k' + p MOD scs_k_v39 s)`])
2150 THEN DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1} \/ ~({i MOD k', j MOD k'} = {0, k' - 1})`)
2156 THEN REPLICATE_TAC (36-3)(POP_ASSUM MP_TAC)
2157 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
2159 THEN ASM_REWRITE_TAC[is_ear_v39;scs_half_slice_v39;LET_DEF;LET_END_DEF;scs_half_slice_v39;is_scs_v39;scs_diag;scs_v39_explicit])
2161 THEN ABBREV_TAC`k''=(p + 1 + 4 - q MOD 4) MOD 4`
2162 THEN SUBGOAL_THEN`k'' -1 IN {i | i < 3 /\
2163 (if {i MOD k'', SUC i MOD k''} = {0, k'' - 1}
2165 else scs_J_v39 s (i MOD k'' + q MOD 4) (SUC i MOD k'' + q MOD 4))}` ASSUME_TAC
2168 REWRITE_TAC[IN_ELIM_THM]
2169 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2 /\ 2<3 /\ 2 MOD 3=2/\ SUC 2=3/\ 3 MOD 3=0 `];
2172 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`;SET_RULE`( a = b <=> b=a)`;IN_SING]
2173 THEN REPLICATE_TAC (2)(POP_ASSUM MP_TAC)
2174 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2176 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2 /\ 2<3 /\ 2 MOD 3=2/\ SUC 2=3/\ 3 MOD 3=0 `]
2183 THEN REPLICATE_TAC (36-24)(POP_ASSUM MP_TAC)
2184 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2185 THEN MRESA_TAC th[`(i MOD k' + p MOD scs_k_v39 s)`;`(j MOD k' + p MOD scs_k_v39 s)`])
2188 SUBGOAL_THEN`IMAGE (\x. (x+p MOD scs_k_v39 s )MOD scs_k_v39 s ) {i | i < k' /\
2190 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
2191 then scs_bm_v39 s p q
2192 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
2193 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
2195 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
2196 then scs_am_v39 s p q
2197 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
2198 (SUC i MOD k' + p MOD scs_k_v39 s)))}
2199 SUBSET {i | i < scs_k_v39 s /\
2200 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))} UNION {(k'-1 + p MOD scs_k_v39 s) MOD scs_k_v39 s}` ASSUME_TAC;
2203 REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING;IMAGE]
2207 THEN POP_ASSUM MP_TAC
2208 THEN MP_TAC(ARITH_RULE`x'<k'==> x'= k'-1\/ SUC x' < k' `)
2210 THEN MRESA_TAC MOD_LT[`x':num`;`k':num`]
2211 THEN MRESA_TAC MOD_LT[`SUC x':num`;`k':num`]
2212 THEN DISJ_CASES_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} \/ ~({x', SUC x'} = {0, k' - 1})`)
2216 MP_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} ==> (x' =0 /\ SUC x' = k'-1)\/ (x' =k'-1/\ SUC x' =0)`)
2218 THEN POP_ASSUM MP_TAC
2219 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0= k'-1<=> k'=2`]
2221 THEN POP_ASSUM (fun th->
2222 REPLICATE_TAC (40-32)(REMOVE_ASSUM_TAC)
2223 THEN POP_ASSUM MP_TAC
2224 THEN REWRITE_TAC[th])
2232 THEN MATCH_MP_TAC(SET_RULE`A==>A \/ B`)
2233 THEN MP_TAC(ARITH_RULE`k' < scs_k_v39 s /\ 3<= k' /\ x'< k' /\ SUC x' < k' ==> ~(scs_k_v39 s=0) /\ x'< scs_k_v39 s/\ SUC x' < scs_k_v39 s/\ 1< scs_k_v39 s`)
2235 THEN MRESAL_TAC DIVISION[`x' + p MOD scs_k_v39 s`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
2236 THEN MATCH_MP_TAC(SET_RULE`A==>A \/ B`)
2237 THEN MRESA_TAC MOD_LT[`x':num`;`scs_k_v39 s`]
2238 THEN MRESA_TAC MOD_LT[`SUC x':num`;`scs_k_v39 s`]
2239 THEN MRESA_TAC MOD_ADD_MOD[`x':num`;`p:num`;`scs_k_v39 s`]
2240 THEN MRESA_TAC MOD_ADD_MOD[`SUC x':num`;`p:num`;`scs_k_v39 s`]
2241 THEN REPLICATE_TAC (10)(POP_ASSUM MP_TAC)
2242 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2245 THEN REWRITE_TAC[periodic2;]
2246 THEN REPEAT STRIP_TAC
2247 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s (x' + p MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
2248 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(SUC x' + p MOD scs_k_v39 s):num`)
2249 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[SYM th])
2250 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s ((SUC x' + p) MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
2251 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x' + p MOD scs_k_v39 s):num`)
2252 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
2253 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s ((x' + p) MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
2254 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(SUC ((x' + p) MOD scs_k_v39 s)):num`)
2255 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;ADD1])
2256 THEN MRESA_TAC MOD_LT[`1:num`;`scs_k_v39 s`]
2257 THEN MRESA_TAC MOD_ADD_MOD[`(x' + p):num`;`1:num`;`scs_k_v39 s`]
2259 THEN ASM_REWRITE_TAC[ARITH_RULE`(x' + p) + 1=(x' + 1) + p`]
2264 THEN POP_ASSUM MP_TAC
2265 THEN MP_TAC(ARITH_RULE`x'<k'==> x'= k'-1\/ SUC x' < k' `)
2267 THEN MRESA_TAC MOD_LT[`x':num`;`k':num`]
2268 THEN MRESA_TAC MOD_LT[`SUC x':num`;`k':num`]
2269 THEN DISJ_CASES_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} \/ ~({x', SUC x'} = {0, k' - 1})`)
2273 MP_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} ==> (x' =0 /\ SUC x' = k'-1)\/ (x' =k'-1/\ SUC x' =0)`)
2275 THEN POP_ASSUM MP_TAC
2276 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0= k'-1<=> k'=2`]
2278 THEN POP_ASSUM (fun th->
2279 REPLICATE_TAC (40-32)(REMOVE_ASSUM_TAC)
2280 THEN POP_ASSUM MP_TAC
2281 THEN REWRITE_TAC[th])
2289 THEN MATCH_MP_TAC(SET_RULE`A==>A \/ B`)
2290 THEN MP_TAC(ARITH_RULE`k' < scs_k_v39 s /\ 3<= k' /\ x'< k' /\ SUC x' < k' ==> ~(scs_k_v39 s=0) /\ x'< scs_k_v39 s/\ SUC x' < scs_k_v39 s/\ 1< scs_k_v39 s`)
2292 THEN MRESAL_TAC DIVISION[`x' + p MOD scs_k_v39 s`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
2293 THEN MATCH_MP_TAC(SET_RULE`B==>A \/ B`)
2294 THEN MRESA_TAC MOD_LT[`x':num`;`scs_k_v39 s`]
2295 THEN MRESA_TAC MOD_LT[`SUC x':num`;`scs_k_v39 s`]
2296 THEN MRESA_TAC MOD_ADD_MOD[`x':num`;`p:num`;`scs_k_v39 s`]
2297 THEN MRESA_TAC MOD_ADD_MOD[`SUC x':num`;`p:num`;`scs_k_v39 s`]
2298 THEN REPLICATE_TAC (10)(POP_ASSUM MP_TAC)
2299 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2302 THEN REWRITE_TAC[periodic2;]
2303 THEN REPEAT STRIP_TAC
2304 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s (x' + p MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
2305 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(SUC x' + p MOD scs_k_v39 s):num`)
2306 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[SYM th])
2307 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s ((SUC x' + p) MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
2308 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x' + p MOD scs_k_v39 s):num`)
2309 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
2310 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s ((x' + p) MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
2311 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(SUC ((x' + p) MOD scs_k_v39 s)):num`)
2312 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;ADD1])
2313 THEN MRESA_TAC MOD_LT[`1:num`;`scs_k_v39 s`]
2314 THEN MRESA_TAC MOD_ADD_MOD[`(x' + p):num`;`1:num`;`scs_k_v39 s`]
2316 THEN ASM_REWRITE_TAC[ARITH_RULE`(x' + p) + 1=(x' + 1) + p`]
2320 SUBGOAL_THEN`CARD(IMAGE (\x. (x+p MOD scs_k_v39 s )MOD scs_k_v39 s ) {i | i < k' /\
2322 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
2323 then scs_bm_v39 s p q
2324 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
2325 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
2327 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
2328 then scs_am_v39 s p q
2329 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
2330 (SUC i MOD k' + p MOD scs_k_v39 s)))})
2331 = CARD {i | i < k' /\
2333 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
2334 then scs_bm_v39 s p q
2335 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
2336 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
2338 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
2339 then scs_am_v39 s p q
2340 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
2341 (SUC i MOD k' + p MOD scs_k_v39 s)))}`ASSUME_TAC
2345 MATCH_MP_TAC CARD_IMAGE_INJ
2347 ASM_REWRITE_TAC[IN_ELIM_THM]
2348 THEN REPEAT STRIP_TAC
2349 THEN MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s /\ x<k' /\y< k' ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'/\ ~(scs_k_v39 s =0)
2350 /\ x< scs_k_v39 s/\ y< scs_k_v39 s`)
2352 THEN MRESA_TAC MOD_LT[`x:num`;`scs_k_v39 s`]
2353 THEN MRESA_TAC MOD_LT[`y:num`;`scs_k_v39 s`]
2354 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`x:num`;`y:num`;`p MOD scs_k_v39 s`;`scs_k_v39 s`][ADD_SYM]
2356 MATCH_MP_TAC FINITE_SUBSET
2357 THEN EXISTS_TAC`0.. k'`
2358 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
2362 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2363 THEN SUBGOAL_THEN`FINITE
2364 ({i | i < scs_k_v39 s /\
2365 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))} UNION
2366 {(k' - 1 + p MOD scs_k_v39 s) MOD scs_k_v39 s})`ASSUME_TAC
2370 REWRITE_TAC[FINITE_UNION;FINITE_SING]
2371 THEN MATCH_MP_TAC FINITE_SUBSET
2372 THEN EXISTS_TAC`0.. (scs_k_v39 s)`
2373 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
2377 THEN MRESA_TAC CARD_SUBSET[`IMAGE (\x. (x+p MOD scs_k_v39 s )MOD scs_k_v39 s ) {i | i < k' /\
2379 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
2380 then scs_bm_v39 s p q
2381 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
2382 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
2384 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
2385 then scs_am_v39 s p q
2386 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
2387 (SUC i MOD k' + p MOD scs_k_v39 s)))}`;`{i | i < scs_k_v39 s /\
2388 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))} UNION {(k'-1 + p MOD scs_k_v39 s) MOD scs_k_v39 s}`]
2389 THEN SUBGOAL_THEN`FINITE
2390 ({i | i < scs_k_v39 s /\
2391 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))})`ASSUME_TAC
2395 REWRITE_TAC[FINITE_UNION;FINITE_SING]
2396 THEN MATCH_MP_TAC FINITE_SUBSET
2397 THEN EXISTS_TAC`0.. (scs_k_v39 s)`
2398 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
2403 THEN MRESAL_TAC CARD_UNION_LE[`{i | i < scs_k_v39 s /\
2404 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))}`;`{(k' - 1 + p MOD scs_k_v39 s) MOD scs_k_v39 s}`][FINITE_SING;Geomdetail.CARD_SING]
2405 THEN POP_ASSUM MP_TAC
2406 THEN REMOVE_ASSUM_TAC
2407 THEN POP_ASSUM MP_TAC
2408 THEN REMOVE_ASSUM_TAC
2409 THEN REMOVE_ASSUM_TAC
2410 THEN POP_ASSUM MP_TAC
2411 THEN REMOVE_ASSUM_TAC
2412 THEN REMOVE_ASSUM_TAC
2413 THEN POP_ASSUM (fun th->
2414 REPLICATE_TAC (5) REMOVE_ASSUM_TAC
2415 THEN POP_ASSUM MP_TAC
2416 THEN REWRITE_TAC[th])
2417 THEN ABBREV_TAC`a={i | i < 4 /\
2418 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))}`
2419 THEN ABBREV_TAC`b=CARD
2420 (IMAGE (\x. (x + p MOD 4) MOD 4)
2423 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
2424 then scs_bm_v39 s p q
2425 else scs_b_v39 s (i MOD k' + p MOD 4) (SUC i MOD k' + p MOD 4)) \/
2427 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
2428 then scs_am_v39 s p q
2429 else scs_a_v39 s (i MOD k' + p MOD 4) (SUC i MOD k' + p MOD 4)))})`
2430 THEN ABBREV_TAC`c=CARD (a UNION {(k' - 1 + p MOD 4) MOD 4})`
2431 THEN ASM_REWRITE_TAC[]
2438 let SCS_HALF_SLICE_IS_SCS_PRIME=prove_by_refinement(
2439 ` s' = scs_half_slice_v39 s p q d' mkj /\
2440 s'' = scs_half_slice_v39 s q p d'' mkj /\
2441 (scs_J_v39 s' 0 (scs_k_v39 s' -1))= mkj
2444 /\ vv' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s')+p MOD (scs_k_v39 s)))
2445 /\ is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q
2448 scs_bm_v39 s p q < &4 /\
2449 (4<scs_k_v39 s ==> scs_bm_v39 s p q <= cstab)
2454 THEN MRESA_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`p:num`;`q:num`;`d':real`;`scs_J_v39 s' p q`]
2455 THEN POP_ASSUM MP_TAC
2456 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;]
2457 THEN REPLICATE_TAC 5 (POP_ASSUM MP_TAC)
2458 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;scs_half_slice_v39;is_scs_v39;scs_diag;scs_v39_explicit]
2459 THEN ABBREV_TAC`k'=(q + 1 + scs_k_v39 s - p MOD scs_k_v39 s) MOD scs_k_v39 s`
2460 THEN REPEAT RESA_TAC;
2464 REWRITE_TAC[periodic]
2469 REWRITE_TAC[periodic]
2474 REWRITE_TAC[periodic]
2479 REWRITE_TAC[periodic]
2484 REWRITE_TAC[periodic2]
2485 THEN REPEAT STRIP_TAC
2490 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
2491 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`]
2496 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
2497 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`]
2502 REWRITE_TAC[periodic2]
2503 THEN REPEAT STRIP_TAC
2508 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
2509 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
2512 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
2513 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
2519 REWRITE_TAC[periodic2]
2520 THEN REPEAT STRIP_TAC;
2524 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
2525 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
2529 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
2530 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
2535 REWRITE_TAC[periodic2]
2536 THEN REPEAT STRIP_TAC
2541 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
2542 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
2547 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
2548 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`]
2553 REWRITE_TAC[periodic2]
2554 THEN REPEAT STRIP_TAC
2559 MRESAL_TAC MOD_EQ [`i+k':num`;`i:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
2560 THEN MRESAL_TAC MOD_EQ [`i+p+k':num`;`i+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
2563 MRESAL_TAC MOD_EQ [`j+k':num`;`j:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ (i + k') + p = i+p+k'`]
2564 THEN MRESAL_TAC MOD_EQ [`j+p+k':num`;`j+p:num`;`k':num`;`1`][ARITH_RULE`1* k'=k'/\ i + p + k' = (i + p) + k'`];
2568 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
2572 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
2576 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
2580 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
2585 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
2595 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
2603 THEN REPLICATE_TAC (17)(REMOVE_ASSUM_TAC)
2604 THEN POP_ASSUM(fun th-> MRESA_TAC th[`i MOD k' + p MOD scs_k_v39 s`;`j MOD k' + p MOD scs_k_v39 s`])
2605 THEN REPLICATE_TAC 3 (POP_ASSUM MP_TAC)
2615 MP_TAC(ARITH_RULE`3<=k' ==> ~(0=k'-1)`)
2617 THEN DISJ_CASES_TAC(SET_RULE`{i MOD k', i MOD k'} = {0, k'-1} \/ ~({i MOD k', i MOD k'} = {0, k'-1})`);
2621 MP_TAC(SET_RULE`{i MOD k', i MOD k'} = {0, k'-1}==> i MOD k'= 0 /\ i MOD k'= k'-1`)
2623 THEN POP_ASSUM MP_TAC
2633 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
2639 THEN REWRITE_TAC[periodic2;]
2640 THEN REPEAT STRIP_TAC
2641 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0)`)
2643 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_am_v39 s p`][ARITH_RULE`~(4=0)`;periodic]
2644 THEN POP_ASSUM(fun th-> MRESA1_TAC th `q:num`)
2645 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
2646 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_am_v39 s (q MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
2647 THEN POP_ASSUM(fun th-> MRESA1_TAC th `p:num`)
2648 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
2649 THEN MRESAL_TAC DIVISION[`p:num`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
2650 THEN MRESAL_TAC DIVISION[`q:num`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
2651 THEN REPLICATE_TAC 23 (POP_ASSUM MP_TAC)
2652 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2653 THEN MRESA_TAC th[`p MOD scs_k_v39 s`;`q MOD scs_k_v39 s`])
2654 THEN REPLICATE_TAC 25(POP_ASSUM MP_TAC)
2655 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2656 THEN MRESA_TAC th[`p MOD scs_k_v39 s`;`q MOD scs_k_v39 s`])
2657 THEN REPLICATE_TAC 4(POP_ASSUM MP_TAC)
2658 THEN REAL_ARITH_TAC;
2664 THEN REWRITE_TAC[periodic2;]
2665 THEN REPEAT STRIP_TAC
2666 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0)`)
2668 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
2669 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(j MOD k' + p MOD scs_k_v39 s):num`)
2670 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
2671 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s (((j MOD k' + p MOD scs_k_v39 s) MOD scs_k_v39 s))`][ARITH_RULE`~(4=0)`;periodic]
2672 THEN POP_ASSUM(fun th-> MRESA1_TAC th `((i MOD k' + p MOD scs_k_v39 s)):num`)
2673 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
2674 THEN REPLICATE_TAC (34-15)(POP_ASSUM MP_TAC)
2675 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2676 THEN MATCH_MP_TAC th)
2677 THEN MRESAL_TAC DIVISION[`(i MOD k' + p MOD scs_k_v39 s):num`;`scs_k_v39 s:num`][ARITH_RULE`~(6=0)`]
2678 THEN MRESAL_TAC DIVISION[`(j MOD k' + p MOD scs_k_v39 s):num`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
2680 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`i MOD k':num`;`j MOD k':num`;`p MOD scs_k_v39 s`;`scs_k_v39 s`][ADD_SYM]
2681 THEN POP_ASSUM MP_TAC
2682 THEN MRESA_TAC MOD_LT[`i:num`;`k':num`]
2683 THEN MRESA_TAC MOD_LT[`j:num`;`k':num`]
2684 THEN MP_TAC(ARITH_RULE`i< k' /\ k'< scs_k_v39 s /\ j<k' ==>
2685 i< scs_k_v39 s /\ j< scs_k_v39 s`)
2687 THEN MRESA_TAC MOD_LT[`i:num`;`scs_k_v39 s`]
2688 THEN MRESA_TAC MOD_LT[`j:num`;`scs_k_v39 s`]
2695 DISJ_CASES_TAC(SET_RULE`{i MOD 3, SUC i MOD 3} = {0, 3-1} \/ ~({i MOD 3, SUC i MOD 3} = {0, 3-1})`);
2704 THEN MRESAL_TAC DIVISION[`i:num`;`k':num`][ARITH_RULE`~(3=0)`]
2705 THEN MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s`)
2708 THEN REWRITE_TAC[periodic2;]
2709 THEN REPEAT STRIP_TAC
2710 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0)`)
2712 THEN MP_TAC(ARITH_RULE`(i ) MOD 3 < 3 ==> (i ) MOD 3 =0 \/ (i ) MOD 3 =1 \/ (i ) MOD 3 =2`)
2717 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`0`;`3`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 0+A=A /\ 1+A= SUC A`]
2718 THEN REPLICATE_TAC (37-17)(POP_ASSUM MP_TAC)
2719 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2720 THEN MRESAL1_TAC th `p MOD scs_k_v39 s` [ARITH_RULE`SUC 0=1/\ SUC 1=2/\ SUC 2=3`;cstab])
2721 THEN POP_ASSUM MP_TAC
2722 THEN REAL_ARITH_TAC;
2726 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`1`;`3`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
2727 THEN REPLICATE_TAC (37-17)(POP_ASSUM MP_TAC)
2728 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2729 THEN MRESAL1_TAC th `1+p MOD scs_k_v39 s` [ARITH_RULE`SUC 0=1/\ SUC 1=2/\ SUC 2=3`;cstab])
2730 THEN POP_ASSUM MP_TAC
2731 THEN REAL_ARITH_TAC;
2734 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`2`;`3`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
2735 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;ARITH_RULE`3-1=2`]
2736 THEN REPEAT STRIP_TAC)
2737 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;ARITH_RULE`3-1=2`]
2738 THEN REPEAT STRIP_TAC)
2739 THEN REPLICATE_TAC (4) REMOVE_ASSUM_TAC
2740 THEN POP_ASSUM MP_TAC
2752 DISJ_CASES_TAC(SET_RULE`{i MOD k', SUC i MOD k'} = {0, k'-1} \/ ~({i MOD k', SUC i MOD k'} = {0, k'-1})`);
2756 THEN MP_TAC(ARITH_RULE`3<k' /\ k'< scs_k_v39 s ==> 4< scs_k_v39 s`)
2758 THEN REPLICATE_TAC (6) (POP_ASSUM MP_TAC)
2759 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2767 THEN MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'`)
2769 THEN MRESAL_TAC DIVISION[`i:num`;`k':num`][ARITH_RULE`~(3=0)`]
2771 THEN REWRITE_TAC[periodic2;]
2772 THEN REPEAT STRIP_TAC
2773 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0)`)
2775 THEN REWRITE_TAC[ADD1]
2776 THEN MRESA_TAC MOD_ADD_MOD[`i:num`;`1:num`;`k':num`]
2777 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2778 THEN MRESA_TAC MOD_LT[`1`;`k':num`]
2779 THEN MP_TAC(ARITH_RULE`3<k' /\ i MOD k' < k' ==> i MOD k' =k'-1 \/ i MOD k' +1 < k' `)
2786 MRESA_TAC MOD_LT[`k'-1`;`k':num`]
2787 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
2789 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`k'-1`;`k':num`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
2790 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th]
2791 THEN REPEAT STRIP_TAC)
2792 THEN REPLICATE_TAC (2) REMOVE_ASSUM_TAC
2793 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th]
2794 THEN REPEAT STRIP_TAC)
2795 THEN REPLICATE_TAC (8) REMOVE_ASSUM_TAC
2796 THEN POP_ASSUM MP_TAC
2801 MRESAL_TAC MOD_LT[`i MOD k' +1`;`k':num`][ARITH_RULE`(i MOD k' + 1) + p MOD scs_k_v39 s= SUC(i MOD k' + p MOD scs_k_v39 s)`]
2802 THEN REPLICATE_TAC (42-17)(POP_ASSUM MP_TAC)
2803 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2804 THEN MATCH_MP_TAC th)
2805 THEN ASM_REWRITE_TAC[];
2810 THEN DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1} \/ ~({i MOD k', j MOD k'} = {0, k' - 1})`)
2817 MP_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1} ==> (i MOD k'= 0 /\ j MOD k' = k'-1)\/ (i MOD k'= k'-1 /\ j MOD k' = 0)`)
2821 MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'`)
2823 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
2824 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
2826 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`j:num`;`k'-1`;`k':num`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
2832 MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'/\ ~(scs_k_v39 s =0)`)
2834 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
2835 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
2837 MRESAL_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`i:num`;`k'-1`;`k':num`][ARITH_RULE`0 MOD 3=0 /\ 1 MOD 3=1/\ 2 MOD 3=2/\ SUC 0=1/\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ ~(3=0)/\ 2+A=SUC(1+A) `]
2844 THEN REPLICATE_TAC (31-18)(POP_ASSUM MP_TAC)
2845 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2846 THEN MRESAL_TAC th[`(i MOD k' + p MOD scs_k_v39 s)`;`(j MOD k' + p MOD scs_k_v39 s)`][ARITH_RULE`SUC(A+B)= SUC A+B`])
2851 MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'/\ ~(scs_k_v39 s =0)`)
2853 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`j MOD k':num`;`SUC(i MOD k'):num`;`p MOD scs_k_v39 s`;`scs_k_v39 s`][ADD_SYM]
2854 THEN POP_ASSUM MP_TAC
2855 THEN MRESAL_TAC DIVISION[`(i):num`;`k':num`][ARITH_RULE`~(6=0)`]
2856 THEN MRESAL_TAC DIVISION[`(j):num`;`k':num`][ARITH_RULE`~(6=0)`]
2857 THEN MP_TAC(ARITH_RULE`j MOD k' < k' /\ k'< scs_k_v39 s
2858 /\ i MOD k' < k' ==> j MOD k' < scs_k_v39 s /\ SUC (i MOD k') < scs_k_v39 s`)
2860 THEN MRESA_TAC MOD_LT[`j MOD k'`;`scs_k_v39 s:num`]
2861 THEN MRESA_TAC MOD_LT[`SUC(i MOD k')`;`scs_k_v39 s:num`]
2863 THEN MP_TAC(ARITH_RULE`3<=k' /\ i MOD k' < k' ==> i MOD k' =k'-1 \/ i MOD k' +1 < k' `)
2872 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th]
2873 THEN REPEAT STRIP_TAC)
2874 THEN POP_ASSUM MP_TAC
2875 THEN ASM_REWRITE_TAC[]
2876 THEN REPLICATE_TAC (4) REMOVE_ASSUM_TAC
2877 THEN POP_ASSUM MP_TAC
2883 THEN MRESA_TAC MOD_ADD_MOD[`i:num`;`1:num`;`k':num`]
2884 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2885 THEN MRESA_TAC MOD_LT[`1`;`k':num`]
2886 THEN MRESA_TAC MOD_LT[`i MOD k' + 1`;`k':num`]
2895 MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'/\ ~(scs_k_v39 s =0)`)
2897 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`i MOD k':num`;`SUC(j MOD k'):num`;`p MOD scs_k_v39 s`;`scs_k_v39 s`][ADD_SYM]
2898 THEN POP_ASSUM MP_TAC
2899 THEN MRESAL_TAC DIVISION[`(i):num`;`k':num`][ARITH_RULE`~(6=0)`]
2900 THEN MRESAL_TAC DIVISION[`(j):num`;`k':num`][ARITH_RULE`~(6=0)`]
2901 THEN MP_TAC(ARITH_RULE`j MOD k' < k' /\ k'< scs_k_v39 s
2902 /\ i MOD k' < k' ==> SUC(j MOD k') < scs_k_v39 s /\ (i MOD k') < scs_k_v39 s`)
2904 THEN MRESA_TAC MOD_LT[`i MOD k'`;`scs_k_v39 s:num`]
2905 THEN MRESA_TAC MOD_LT[`SUC(j MOD k')`;`scs_k_v39 s:num`]
2907 THEN MP_TAC(ARITH_RULE`3<=k' /\ j MOD k' < k' ==> j MOD k' =k'-1 \/ j MOD k' +1 < k' `)
2916 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th]
2917 THEN REPEAT STRIP_TAC)
2918 THEN POP_ASSUM MP_TAC
2919 THEN ASM_REWRITE_TAC[]
2920 THEN REPLICATE_TAC (5) REMOVE_ASSUM_TAC
2921 THEN POP_ASSUM MP_TAC
2927 THEN MRESA_TAC MOD_ADD_MOD[`j:num`;`1:num`;`k':num`]
2928 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2929 THEN MRESA_TAC MOD_LT[`1`;`k':num`]
2930 THEN MRESA_TAC MOD_LT[`j MOD k' + 1`;`k':num`]
2939 THEN DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1} \/ ~({i MOD k', j MOD k'} = {0, k' - 1})`)
2947 THEN REPLICATE_TAC (36-3)(POP_ASSUM MP_TAC)
2948 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
2950 THEN ASM_REWRITE_TAC[is_ear_v39;scs_half_slice_v39;LET_DEF;LET_END_DEF;scs_half_slice_v39;is_scs_v39;scs_diag;scs_v39_explicit])
2952 THEN ABBREV_TAC`k''=(p + 1 + scs_k_v39 s - q MOD scs_k_v39 s) MOD scs_k_v39 s`
2953 THEN SUBGOAL_THEN`k'' -1 IN {i | i < 3 /\
2954 (if {i MOD k'', SUC i MOD k''} = {0, k'' - 1}
2956 else scs_J_v39 s (i MOD k'' + q MOD scs_k_v39 s)
2957 (SUC i MOD k'' + q MOD scs_k_v39 s))}` ASSUME_TAC
2960 REWRITE_TAC[IN_ELIM_THM]
2961 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2 /\ 2<3 /\ 2 MOD 3=2/\ SUC 2=3/\ 3 MOD 3=0 `;SET_RULE`{A,B}={B,A}`];
2965 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`;SET_RULE`( a = b <=> b=a)`;IN_SING]
2966 THEN REPLICATE_TAC (3)(POP_ASSUM MP_TAC)
2967 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2969 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2 /\ 2<3 /\ 2 MOD 3=2/\ SUC 2=3/\ 3 MOD 3=0 `]
2978 THEN REPLICATE_TAC (36-24)(POP_ASSUM MP_TAC)
2979 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2980 THEN MRESA_TAC th[`(i MOD k' + p MOD scs_k_v39 s)`;`(j MOD k' + p MOD scs_k_v39 s)`])
2986 THEN DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1} \/ ~({i MOD k', j MOD k'} = {0, k' - 1})`)
2994 THEN REPLICATE_TAC (36-3)(POP_ASSUM MP_TAC)
2995 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
2997 THEN ASM_REWRITE_TAC[is_ear_v39;scs_half_slice_v39;LET_DEF;LET_END_DEF;scs_half_slice_v39;is_scs_v39;scs_diag;scs_v39_explicit])
2999 THEN ABBREV_TAC`k''=(p + 1 + scs_k_v39 s - q MOD scs_k_v39 s) MOD scs_k_v39 s`
3000 THEN SUBGOAL_THEN`k'' -1 IN {i | i < 3 /\
3001 (if {i MOD k'', SUC i MOD k''} = {0, k'' - 1}
3003 else scs_J_v39 s (i MOD k'' + q MOD scs_k_v39 s)
3004 (SUC i MOD k'' + q MOD scs_k_v39 s))}` ASSUME_TAC
3007 REWRITE_TAC[IN_ELIM_THM]
3008 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2 /\ 2<3 /\ 2 MOD 3=2/\ SUC 2=3/\ 3 MOD 3=0 `;SET_RULE`{A,B}={B,A}`];
3012 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`;SET_RULE`( a = b <=> b=a)`;IN_SING]
3013 THEN REPLICATE_TAC (2)(POP_ASSUM MP_TAC)
3014 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3016 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2 /\ 2<3 /\ 2 MOD 3=2/\ SUC 2=3/\ 3 MOD 3=0 `]
3024 THEN REPLICATE_TAC (36-24)(POP_ASSUM MP_TAC)
3025 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3026 THEN MRESA_TAC th[`(i MOD k' + p MOD scs_k_v39 s)`;`(j MOD k' + p MOD scs_k_v39 s)`])
3031 SUBGOAL_THEN`IMAGE (\x. (x+p MOD scs_k_v39 s )MOD scs_k_v39 s ) {i | i < k' /\
3033 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
3034 then scs_bm_v39 s p q
3035 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
3036 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
3038 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
3039 then scs_am_v39 s p q
3040 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
3041 (SUC i MOD k' + p MOD scs_k_v39 s)))}
3042 SUBSET {i | i < scs_k_v39 s /\
3043 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))} UNION {(k'-1 + p MOD scs_k_v39 s) MOD scs_k_v39 s}` ASSUME_TAC;
3048 REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING;IMAGE]
3054 THEN POP_ASSUM MP_TAC
3055 THEN MP_TAC(ARITH_RULE`x'<k'==> x'= k'-1\/ SUC x' < k' `)
3057 THEN MRESA_TAC MOD_LT[`x':num`;`k':num`]
3058 THEN MRESA_TAC MOD_LT[`SUC x':num`;`k':num`]
3059 THEN DISJ_CASES_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} \/ ~({x', SUC x'} = {0, k' - 1})`)
3065 MP_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} ==> (x' =0 /\ SUC x' = k'-1)\/ (x' =k'-1/\ SUC x' =0)`)
3067 THEN POP_ASSUM MP_TAC
3068 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0= k'-1<=> k'=2`]
3070 THEN POP_ASSUM (fun th->
3071 REPLICATE_TAC (40-32)(REMOVE_ASSUM_TAC)
3072 THEN POP_ASSUM MP_TAC
3073 THEN REWRITE_TAC[th])
3083 THEN MATCH_MP_TAC(SET_RULE`A==>A \/ B`)
3084 THEN MP_TAC(ARITH_RULE`k' < scs_k_v39 s /\ 3<= k' /\ x'< k' /\ SUC x' < k' ==> ~(scs_k_v39 s=0) /\ x'< scs_k_v39 s/\ SUC x' < scs_k_v39 s/\ 1< scs_k_v39 s`)
3086 THEN MRESAL_TAC DIVISION[`x' + p MOD scs_k_v39 s`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
3087 THEN MATCH_MP_TAC(SET_RULE`A==>A \/ B`)
3088 THEN MRESA_TAC MOD_LT[`x':num`;`scs_k_v39 s`]
3089 THEN MRESA_TAC MOD_LT[`SUC x':num`;`scs_k_v39 s`]
3090 THEN MRESA_TAC MOD_ADD_MOD[`x':num`;`p:num`;`scs_k_v39 s`]
3091 THEN MRESA_TAC MOD_ADD_MOD[`SUC x':num`;`p:num`;`scs_k_v39 s`]
3092 THEN REPLICATE_TAC (10)(POP_ASSUM MP_TAC)
3093 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3096 THEN REWRITE_TAC[periodic2;]
3097 THEN REPEAT STRIP_TAC
3098 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s (x' + p MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
3099 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(SUC x' + p MOD scs_k_v39 s):num`)
3100 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[SYM th])
3101 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s ((SUC x' + p) MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
3102 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x' + p MOD scs_k_v39 s):num`)
3103 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
3104 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s ((x' + p) MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
3105 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(SUC ((x' + p) MOD scs_k_v39 s)):num`)
3106 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;ADD1])
3107 THEN MRESA_TAC MOD_LT[`1:num`;`scs_k_v39 s`]
3108 THEN MRESA_TAC MOD_ADD_MOD[`(x' + p):num`;`1:num`;`scs_k_v39 s`]
3110 THEN ASM_REWRITE_TAC[ARITH_RULE`(x' + p) + 1=(x' + 1) + p`]
3117 THEN POP_ASSUM MP_TAC
3118 THEN MP_TAC(ARITH_RULE`x'<k'==> x'= k'-1\/ SUC x' < k' `)
3120 THEN MRESA_TAC MOD_LT[`x':num`;`k':num`]
3121 THEN MRESA_TAC MOD_LT[`SUC x':num`;`k':num`]
3122 THEN DISJ_CASES_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} \/ ~({x', SUC x'} = {0, k' - 1})`)
3128 MP_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} ==> (x' =0 /\ SUC x' = k'-1)\/ (x' =k'-1/\ SUC x' =0)`)
3130 THEN POP_ASSUM MP_TAC
3131 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0= k'-1<=> k'=2`]
3133 THEN POP_ASSUM (fun th->
3134 REPLICATE_TAC (40-32)(REMOVE_ASSUM_TAC)
3135 THEN POP_ASSUM MP_TAC
3136 THEN REWRITE_TAC[th])
3146 THEN MATCH_MP_TAC(SET_RULE`A==>A \/ B`)
3147 THEN MP_TAC(ARITH_RULE`k' < scs_k_v39 s /\ 3<= k' /\ x'< k' /\ SUC x' < k' ==> ~(scs_k_v39 s=0) /\ x'< scs_k_v39 s/\ SUC x' < scs_k_v39 s/\ 1< scs_k_v39 s`)
3149 THEN MRESAL_TAC DIVISION[`x' + p MOD scs_k_v39 s`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
3150 THEN MATCH_MP_TAC(SET_RULE`B==>A \/ B`)
3151 THEN MRESA_TAC MOD_LT[`x':num`;`scs_k_v39 s`]
3152 THEN MRESA_TAC MOD_LT[`SUC x':num`;`scs_k_v39 s`]
3153 THEN MRESA_TAC MOD_ADD_MOD[`x':num`;`p:num`;`scs_k_v39 s`]
3154 THEN MRESA_TAC MOD_ADD_MOD[`SUC x':num`;`p:num`;`scs_k_v39 s`]
3155 THEN REPLICATE_TAC (10)(POP_ASSUM MP_TAC)
3156 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3159 THEN REWRITE_TAC[periodic2;]
3160 THEN REPEAT STRIP_TAC
3161 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s (x' + p MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
3162 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(SUC x' + p MOD scs_k_v39 s):num`)
3163 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[SYM th])
3164 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s ((SUC x' + p) MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
3165 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x' + p MOD scs_k_v39 s):num`)
3166 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
3167 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s ((x' + p) MOD scs_k_v39 s)`][ARITH_RULE`~(4=0)`;periodic]
3168 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(SUC ((x' + p) MOD scs_k_v39 s)):num`)
3169 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;ADD1])
3170 THEN MRESA_TAC MOD_LT[`1:num`;`scs_k_v39 s`]
3171 THEN MRESA_TAC MOD_ADD_MOD[`(x' + p):num`;`1:num`;`scs_k_v39 s`]
3173 THEN ASM_REWRITE_TAC[ARITH_RULE`(x' + p) + 1=(x' + 1) + p`]
3179 SUBGOAL_THEN`CARD(IMAGE (\x. (x+p MOD scs_k_v39 s )MOD scs_k_v39 s ) {i | i < k' /\
3181 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
3182 then scs_bm_v39 s p q
3183 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
3184 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
3186 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
3187 then scs_am_v39 s p q
3188 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
3189 (SUC i MOD k' + p MOD scs_k_v39 s)))})
3190 = CARD {i | i < k' /\
3192 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
3193 then scs_bm_v39 s p q
3194 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
3195 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
3197 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
3198 then scs_am_v39 s p q
3199 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
3200 (SUC i MOD k' + p MOD scs_k_v39 s)))}`ASSUME_TAC
3206 MATCH_MP_TAC CARD_IMAGE_INJ
3210 REWRITE_TAC[IN_ELIM_THM]
3211 THEN REPEAT STRIP_TAC
3212 THEN MP_TAC(ARITH_RULE`3<= k' /\ k' <scs_k_v39 s /\ x<k' /\y< k' ==> 3< scs_k_v39 s/\ ~(k'=0) /\ 1< k'/\ k'-1< k'/\ SUC(k'-1)= k'/\ ~(scs_k_v39 s =0)
3213 /\ x< scs_k_v39 s/\ y< scs_k_v39 s`)
3215 THEN MRESA_TAC MOD_LT[`x:num`;`scs_k_v39 s`]
3216 THEN MRESA_TAC MOD_LT[`y:num`;`scs_k_v39 s`]
3217 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`x:num`;`y:num`;`p MOD scs_k_v39 s`;`scs_k_v39 s`][ADD_SYM]
3221 MATCH_MP_TAC FINITE_SUBSET
3222 THEN EXISTS_TAC`0.. k'`
3223 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
3228 POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3229 THEN SUBGOAL_THEN`FINITE
3230 ({i | i < scs_k_v39 s /\
3231 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))} UNION
3232 {(k' - 1 + p MOD scs_k_v39 s) MOD scs_k_v39 s})`ASSUME_TAC
3238 REWRITE_TAC[FINITE_UNION;FINITE_SING]
3239 THEN MATCH_MP_TAC FINITE_SUBSET
3240 THEN EXISTS_TAC`0.. (scs_k_v39 s)`
3241 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
3245 MRESA_TAC CARD_SUBSET[`IMAGE (\x. (x+p MOD scs_k_v39 s )MOD scs_k_v39 s ) {i | i < k' /\
3247 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
3248 then scs_bm_v39 s p q
3249 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
3250 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
3252 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
3253 then scs_am_v39 s p q
3254 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
3255 (SUC i MOD k' + p MOD scs_k_v39 s)))}`;`{i | i < scs_k_v39 s /\
3256 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))} UNION {(k'-1 + p MOD scs_k_v39 s) MOD scs_k_v39 s}`]
3257 THEN SUBGOAL_THEN`FINITE
3258 ({i | i < scs_k_v39 s /\
3259 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))})`ASSUME_TAC
3265 REWRITE_TAC[FINITE_UNION;FINITE_SING]
3266 THEN MATCH_MP_TAC FINITE_SUBSET
3267 THEN EXISTS_TAC`0.. (scs_k_v39 s)`
3268 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
3273 MRESAL_TAC CARD_UNION_LE[`{i | i < scs_k_v39 s /\
3274 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))}`;`{(k' - 1 + p MOD scs_k_v39 s) MOD scs_k_v39 s}`][FINITE_SING;Geomdetail.CARD_SING]
3275 THEN POP_ASSUM MP_TAC
3276 THEN REMOVE_ASSUM_TAC
3277 THEN POP_ASSUM MP_TAC
3278 THEN REMOVE_ASSUM_TAC
3279 THEN REMOVE_ASSUM_TAC
3280 THEN POP_ASSUM MP_TAC
3281 THEN REPLICATE_TAC (8) REMOVE_ASSUM_TAC
3282 THEN REPEAT STRIP_TAC
3283 THEN ABBREV_TAC`a= CARD
3284 ({i | i < scs_k_v39 s /\
3285 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))} UNION
3286 {(k' - 1 + p MOD scs_k_v39 s) MOD scs_k_v39 s})`
3287 THEN ABBREV_TAC`b=CARD
3288 {i | i < scs_k_v39 s /\
3289 (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))}`
3290 THEN ABBREV_TAC`c=CARD
3291 (IMAGE (\x. (x + p MOD scs_k_v39 s) MOD scs_k_v39 s)
3294 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
3295 then scs_bm_v39 s p q
3296 else scs_b_v39 s (i MOD k' + p MOD scs_k_v39 s)
3297 (SUC i MOD k' + p MOD scs_k_v39 s)) \/
3299 (if {i MOD k', SUC i MOD k'} = {0, k' - 1}
3300 then scs_am_v39 s p q
3301 else scs_a_v39 s (i MOD k' + p MOD scs_k_v39 s)
3302 (SUC i MOD k' + p MOD scs_k_v39 s)))})`
3303 THEN MP_TAC(ARITH_RULE`c<=a /\ a<= b+1 /\ k'< scs_k_v39 s/\ b + scs_k_v39 s <= 6 ==> c+k' <=6`)
3309 let SCS_HALF_SLICE_IS_A_SCS=prove_by_refinement(
3310 ` is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q
3311 /\ is_scs_slice_v39 s s' s'' p q
3316 THEN POP_ASSUM MP_TAC
3317 THEN MP_TAC SCS_K_PRIME_CASE_3
3319 THEN MP_TAC(ARITH_RULE`3 < scs_k_v39 s ==> scs_k_v39 s =4\/ (4 < scs_k_v39 s /\ ~(scs_k_v39 s=4))`)
3322 ASM_REWRITE_TAC[is_scs_slice_v39;LET_DEF;LET_END_DEF;scs_diag;scs_v39_explicit;scs_slice_v39;PAIR_EQ]
3324 THEN ABBREV_TAC`k'=scs_k_v39 s'`
3325 THEN ABBREV_TAC`d'=scs_d_v39 s'`
3326 THEN ABBREV_TAC`d''=scs_d_v39 s''`
3327 THEN ABBREV_TAC`mkj=scs_J_v39 s' 0 (k'-1)`
3328 THEN ABBREV_TAC`vv' = (\i. (vv:num->real^3) ((i) MOD k'+p MOD (scs_k_v39 s)))`
3329 THEN REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
3330 THEN ASM_REWRITE_TAC[]
3331 THEN REPEAT STRIP_TAC;
3333 DISJ_CASES_TAC(SET_RULE`~(scs_J_v39 s' 0 (k'-1)) \/ scs_J_v39 s' 0 (k'-1)`);
3335 MP_TAC SCS_HALF_SLICE_IS_SCS_4
3336 THEN ASM_REWRITE_TAC[scs_diag]
3337 THEN POP_ASSUM MP_TAC
3340 REPLICATE_TAC 6 (POP_ASSUM MP_TAC)
3341 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3343 THEN POP_ASSUM MP_TAC
3347 MATCH_MP_TAC IS_EAR_IS_SCS
3348 THEN ASM_REWRITE_TAC[];
3350 MP_TAC SCS_HALF_SLICE_IS_SCS_4_PRIME
3351 THEN ASM_REWRITE_TAC[scs_diag]
3353 THEN REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
3354 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3355 THEN POP_ASSUM MP_TAC
3359 ASM_REWRITE_TAC[is_scs_slice_v39;LET_DEF;LET_END_DEF;scs_diag;scs_v39_explicit;scs_slice_v39;PAIR_EQ]
3361 THEN ABBREV_TAC`k'=scs_k_v39 s'`
3362 THEN ABBREV_TAC`d'=scs_d_v39 s'`
3363 THEN ABBREV_TAC`d''=scs_d_v39 s''`
3364 THEN ABBREV_TAC`mkj=scs_J_v39 s' 0 (k'-1)`
3365 THEN ABBREV_TAC`vv' = (\i. (vv:num->real^3) ((i) MOD k'+p MOD (scs_k_v39 s)))`
3366 THEN REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
3367 THEN ASM_REWRITE_TAC[]
3368 THEN REPEAT STRIP_TAC;
3370 DISJ_CASES_TAC(SET_RULE`~(scs_J_v39 s' 0 (k'-1)) \/ scs_J_v39 s' 0 (k'-1)`);
3372 MP_TAC SCS_HALF_SLICE_IS_SCS
3373 THEN ASM_REWRITE_TAC[scs_diag]
3374 THEN POP_ASSUM MP_TAC
3377 REPLICATE_TAC 6 (POP_ASSUM MP_TAC)
3378 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3380 THEN POP_ASSUM MP_TAC
3384 MATCH_MP_TAC IS_EAR_IS_SCS
3385 THEN ASM_REWRITE_TAC[];
3387 MP_TAC SCS_HALF_SLICE_IS_SCS_PRIME
3388 THEN ASM_REWRITE_TAC[scs_diag]
3390 THEN REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
3391 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3392 THEN POP_ASSUM MP_TAC
3398 let NOT_EQ_DIAG=prove(` is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q
3399 /\ dist(vv (p MOD (scs_k_v39 s)) ,vv (q MOD (scs_k_v39 s))) <= cstab
3401 ==> ~(vv (p MOD (scs_k_v39 s)) =vv (q MOD (scs_k_v39 s)))`,
3403 THEN POP_ASSUM(fun thH->
3405 THEN MP_TAC SCS_K_PRIME_CASE_3
3407 THEN POP_ASSUM(fun th-> ASM_TAC
3409 THEN MP_TAC(ARITH_RULE`3<scs_k_v39 s==> ~(scs_k_v39 s<=3)`))
3410 THEN ASM_REWRITE_TAC[scs_diag;BBs_v39;LET_DEF;LET_END_DEF;]
3412 THEN ASSUME_TAC thH)
3413 THEN ABBREV_TAC`k= scs_k_v39 s`
3414 THEN REPEAT STRIP_TAC
3415 THEN POP_ASSUM MP_TAC
3416 THEN MRESAL_TAC (GEN_ALL IS_SCS_NOT_COLLINEAR_BBs_CASE_LE_3)[`p:num`;`vv:num->real^3`;`q:num`;`s:scs_v39`][IN]
3417 THEN POP_ASSUM MP_TAC
3418 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
3420 THEN MRESA_TAC th3[`(vv:num->real^3) (p MOD k)`;`vec 0:real^3`;`(vv:num->real^3) (q MOD k)`]);;
3424 let IN_IMAGE_VV=prove(` vv p IN IMAGE vv (:num)`,
3425 REWRITE_TAC[IMAGE;IN_ELIM_THM]
3426 THEN EXISTS_TAC`p:num`
3431 let SUC_MOD_NOT_EQ=prove(` 1<k ==> !i. ~(i MOD k= SUC i MOD k)`,
3434 THENL[ MP_TAC(ARITH_RULE`1<k==> 0<k/\ SUC 0=1`)
3436 THEN MRESA_TAC MOD_LT[`0`;`k:num`]
3437 THEN MRESAL_TAC MOD_LT[`1`;`k:num`][ADD1]
3440 THEN REWRITE_TAC[ADD1]
3441 THEN MP_TAC(ARITH_RULE`1<k ==> ~(k=0)/\ SUC 0=1/\ i<= i+1 `)
3444 THEN MRESAL_TAC (GEN_ALL Hdplygy.MOD_EQ_MOD1)[`i+1:num`;`i:num`;`1`;`k:num`][ADD_SYM]]);;
3447 let IS_SCS_NOT_COLLINEAR_BBs_CASE_LE_PRIME_3=prove_by_refinement(
3448 `3< scs_k_v39 s/\ is_scs_v39 s
3450 ==> ~collinear{vec 0, vv (i MOD (scs_k_v39 s)) ,vv ((SUC i) MOD (scs_k_v39 s))}`,
3453 REWRITE_TAC[Local_lemmas.collinear_fan22;aff;AFFINE_HULL_2;IN_ELIM_THM;VECTOR_ARITH`A % vec 0+B=B`;cstab]
3455 THEN MRESA_TAC( GEN_ALL IS_SCS_POINT_IN_BBS_IS_NOT_0_LE_3)[`s:scs_v39`;`vv:num->real^3`;`i MOD scs_k_v39 s`]
3458 THEN REWRITE_TAC[IN]
3460 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;is_scs_v39]
3461 THEN POP_ASSUM(fun th->
3464 THEN REPEAT STRIP_TAC;
3466 MP_TAC(ARITH_RULE`3 < scs_k_v39 s==> ~(scs_k_v39 s <= 3)`)
3469 ABBREV_TAC`k=scs_k_v39 s`
3470 THEN POP_ASSUM MP_TAC
3471 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)/\ 1<k`)
3474 THEN MRESA_TAC DIVISION[`i:num`;`k:num`]
3475 THEN MRESA_TAC DIVISION[`SUC i:num`;`k:num`]
3476 THEN POP_ASSUM MP_TAC
3477 THEN MP_TAC SUC_MOD_NOT_EQ
3479 THEN POP_ASSUM(fun th-> MRESA1_TAC th`i:num`)
3481 THEN REPLICATE_TAC (35-14) (POP_ASSUM MP_TAC)
3482 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3483 THEN MRESAL_TAC th[`i MOD k`;`(SUC i) MOD k`][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;
3484 ARITH_RULE`1 MOD 3 =1 /\ 2 MOD 3=2/\ ~(1=2) /\ SUC 1=2 /\ SUC 2=3/\ 3 MOD 3=0/\ 1<3/\ 2<3`;dist;VECTOR_ARITH`A- B%A=(&1-B)%A`;NORM_MUL])
3485 THEN REPLICATE_TAC (35-25)(POP_ASSUM MP_TAC)
3486 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3488 THEN REPLICATE_TAC (34-22) (POP_ASSUM MP_TAC)
3489 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3490 THEN POP_ASSUM MP_TAC
3491 THEN MRESAL_TAC th[`i MOD k`;`(SUC i) MOD k`][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;
3492 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])
3493 THEN REPLICATE_TAC (35-20)(POP_ASSUM MP_TAC)
3494 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3496 THEN SUBGOAL_THEN`(?x. x IN (:num) /\ vv (i MOD k) = (vv:num->real^3) x)`ASSUME_TAC;
3499 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
3502 SUBGOAL_THEN`(?x. x IN (:num) /\ vv ((SUC i) MOD k) = (vv:num->real^3) x)`ASSUME_TAC;
3504 EXISTS_TAC`SUC(i) MOD k`
3505 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
3507 REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
3509 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`(vv:num->real^3) (i MOD k)`[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`]
3510 THEN MRESAL1_TAC th`(vv:num->real^3) ((SUC i) MOD k)`[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`])
3511 THEN MP_TAC(REAL_ARITH`&0<= &1-v\/ &0<= --( &1-v)`)
3514 MP_TAC(REAL_ARITH`&0<= v\/ &0<= --( v)`)
3517 MRESA1_TAC Trigonometry2.ABS_REFL `v:real`
3518 THEN MRESA1_TAC Trigonometry2.ABS_REFL `&1- v:real`
3519 THEN POP_ASSUM(fun th-> ASM_TAC
3520 THEN REWRITE_TAC[th]
3521 THEN REPEAT STRIP_TAC)
3522 THEN POP_ASSUM(fun th-> ASM_TAC
3523 THEN REWRITE_TAC[th]
3524 THEN REPEAT STRIP_TAC)
3525 THEN MP_TAC(REAL_ARITH`&2 <=scs_a_v39 s (i MOD k) ((SUC i) MOD k)/\ scs_a_v39 s (i MOD k) ((SUC i) MOD k)<= (&1 - v) * norm (vv (i MOD k))
3526 /\ &2 <= v * norm (vv (i MOD k)) ==> &4<= norm ((vv:num->real^3) (i MOD k))`)
3527 THEN REPLICATE_TAC 6(POP_ASSUM MP_TAC)
3528 THEN ASM_REWRITE_TAC[h0]
3529 THEN REAL_ARITH_TAC;
3531 MRESAL1_TAC Trigonometry2.ABS_REFL `-- v:real`[REAL_ABS_NEG]
3532 THEN MRESA1_TAC Trigonometry2.ABS_REFL `&1- v:real`
3533 THEN POP_ASSUM(fun th-> ASM_TAC
3534 THEN REWRITE_TAC[th]
3535 THEN REPEAT STRIP_TAC)
3536 THEN POP_ASSUM(fun th-> ASM_TAC
3537 THEN REWRITE_TAC[th; ]
3538 THEN REPEAT STRIP_TAC)
3539 THEN MP_TAC(REAL_ARITH`&2 <= --v * norm (vv (i MOD k))
3540 /\ &2 <= norm (vv (i MOD k)) ==> &4<=(&1- v) *norm ((vv:num->real^3) (i MOD k) )`)
3541 THEN ASM_REWRITE_TAC[]
3542 THEN REPLICATE_TAC (45-15)(POP_ASSUM MP_TAC)
3543 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
3544 THEN POP_ASSUM MP_TAC
3545 THEN MRESA1_TAC th`i:num`
3546 THEN ASM_REWRITE_TAC[])
3548 THEN REWRITE_TAC[periodic2]
3549 THEN REPEAT STRIP_TAC
3550 THEN REPLICATE_TAC (2)(POP_ASSUM MP_TAC)
3551 THEN MRESAL_TAC (GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s i`][periodic]
3552 THEN POP_ASSUM(fun th-> MRESA1_TAC th`SUC i:num`)
3553 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3554 THEN MRESAL_TAC (GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s ((SUC i MOD k))`][periodic]
3555 THEN POP_ASSUM(fun th-> MRESA1_TAC th`i:num`)
3556 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3557 THEN REPLICATE_TAC (44-33)(POP_ASSUM MP_TAC)
3558 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
3559 THEN POP_ASSUM MP_TAC
3560 THEN POP_ASSUM MP_TAC
3562 THEN ASM_REWRITE_TAC[cstab]
3563 THEN REAL_ARITH_TAC;
3565 MP_TAC(REAL_ARITH`&0<= v\/ &0<= --( v)`)
3568 MRESAL1_TAC Trigonometry2.ABS_REFL ` v:real`[REAL_ABS_NEG]
3569 THEN MRESAL1_TAC Trigonometry2.ABS_REFL `--(&1- v):real` [REAL_ABS_NEG]
3570 THEN POP_ASSUM(fun th-> ASM_TAC
3571 THEN REWRITE_TAC[th]
3572 THEN REPEAT STRIP_TAC)
3573 THEN POP_ASSUM(fun th-> ASM_TAC
3574 THEN REWRITE_TAC[th; ]
3575 THEN REPEAT STRIP_TAC)
3576 THEN MP_TAC(REAL_ARITH`&2 <= norm (vv (i MOD k))
3577 /\ &2 <= scs_a_v39 s (i MOD k) ((SUC i) MOD k)/\ scs_a_v39 s (i MOD k) ((SUC i) MOD k)<= --(&1 - v) * norm (vv (i MOD k)) ==> &4<= v *norm ((vv:num->real^3) (i MOD k))`)
3578 THEN ASM_REWRITE_TAC[]
3579 THEN REPLICATE_TAC 3(POP_ASSUM MP_TAC)
3580 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
3582 THEN POP_ASSUM MP_TAC
3583 THEN ASM_REWRITE_TAC[h0]
3584 THEN REAL_ARITH_TAC;
3586 MRESAL1_TAC Trigonometry2.ABS_REFL ` --v:real`[REAL_ABS_NEG]
3587 THEN MRESAL1_TAC Trigonometry2.ABS_REFL `--(&1- v):real` [REAL_ABS_NEG]
3588 THEN POP_ASSUM(fun th-> ASM_TAC
3589 THEN REWRITE_TAC[th]
3590 THEN REPEAT STRIP_TAC)
3591 THEN POP_ASSUM(fun th-> ASM_TAC
3592 THEN REWRITE_TAC[th; ]
3593 THEN REPEAT STRIP_TAC)
3594 THEN MP_TAC(REAL_ARITH`&2 <= norm (vv (i MOD k))
3595 /\ &2 <= --v * norm (vv (i MOD k)) ==> &4<= (&1-v) *norm ((vv:num->real^3) (i MOD k))`)
3596 THEN ASM_REWRITE_TAC[REAL_ARITH`~(a<= b) <=> b<a`]
3597 THEN REPLICATE_TAC (45-32)(POP_ASSUM MP_TAC)
3598 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
3600 THEN REPLICATE_TAC (44-32)(POP_ASSUM MP_TAC)
3601 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
3603 THEN POP_ASSUM MP_TAC
3604 THEN ASM_REWRITE_TAC[]
3605 THEN REAL_ARITH_TAC;]);;
3610 let DIAG_NOT_IN_EDGES=prove_by_refinement(
3611 `is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q
3612 /\ dist(u ,w) <= cstab
3613 /\ (vv:num->real^3) (p MOD (scs_k_v39 s))=u
3614 /\ (vv:num->real^3) (q MOD (scs_k_v39 s))=w
3615 /\ E= IMAGE (\i. {vv i, vv (SUC i)}) (:num)
3619 THEN MP_TAC SCS_K_PRIME_CASE_3
3621 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM;scs_diag]
3623 THEN MP_TAC(SET_RULE`{u, w} = {vv x, vv (SUC x)}==> (u= vv x /\ w= vv (SUC x))\/(u= (vv:num->real^3) (SUC x) /\ w= vv (x))`)
3627 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;BBs_v39;is_scs_v39;scs_diag]
3628 THEN REPEAT RESA_TAC;
3630 MP_TAC(ARITH_RULE`3< scs_k_v39 s==> ~(scs_k_v39 s<= 3)`)
3634 THEN POP_ASSUM MP_TAC
3635 THEN MP_TAC(ARITH_RULE`3< scs_k_v39 s==> ~(scs_k_v39 s= 0)`)
3637 THEN MRESAL_TAC (GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][periodic]
3638 THEN POP_ASSUM(fun th-> MRESA1_TAC th`x:num` THEN MRESA1_TAC th`SUC x:num`)
3639 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3640 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3641 THEN MRESA_TAC DIVISION[`x:num`;`scs_k_v39 s`]
3642 THEN MRESA_TAC DIVISION[`p:num`;`scs_k_v39 s`]
3643 THEN MRESA_TAC DIVISION[`q:num`;`scs_k_v39 s`]
3644 THEN MRESA_TAC DIVISION[`SUC x:num`;`scs_k_v39 s`]
3645 THEN REPLICATE_TAC (42-14) (POP_ASSUM MP_TAC)
3646 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3647 THEN MRESA_TAC th[`x MOD scs_k_v39 s`;`p MOD scs_k_v39 s`]
3648 THEN MRESA_TAC th[`SUC x MOD scs_k_v39 s`;`q MOD scs_k_v39 s`])
3649 THEN REPLICATE_TAC (45-28) (POP_ASSUM MP_TAC)
3650 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3651 THEN MRESAL_TAC th[`x MOD scs_k_v39 s`;`p MOD scs_k_v39 s`][DIST_REFL]
3652 THEN MRESAL_TAC th[`SUC x MOD scs_k_v39 s`;`q MOD scs_k_v39 s`][DIST_REFL])
3653 THEN REPLICATE_TAC (6) (POP_ASSUM MP_TAC)
3654 THEN MP_TAC(SET_RULE`~(x MOD scs_k_v39 s = p MOD scs_k_v39 s) \/ (x MOD scs_k_v39 s = p MOD scs_k_v39 s)`)
3659 MP_TAC(SET_RULE`~(SUC x MOD scs_k_v39 s = q MOD scs_k_v39 s) \/ (SUC x MOD scs_k_v39 s = q MOD scs_k_v39 s)`)
3665 THEN REPLICATE_TAC (3) (REMOVE_ASSUM_TAC)
3666 THEN POP_ASSUM(fun th-> ASM_TAC
3667 THEN REWRITE_TAC[SYM th;])
3668 THEN REPEAT STRIP_TAC
3669 THEN MRESAL_TAC (GEN_ALL Zithlqn.IMP_SUC_MOD_EQ)[`x:num`;`p:num`;`scs_k_v39 s`][];
3672 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;BBs_v39;is_scs_v39;scs_diag]
3673 THEN REPEAT RESA_TAC;
3675 MP_TAC(ARITH_RULE`3< scs_k_v39 s==> ~(scs_k_v39 s<= 3)`)
3679 THEN POP_ASSUM MP_TAC
3680 THEN MP_TAC(ARITH_RULE`3< scs_k_v39 s==> ~(scs_k_v39 s= 0)`)
3682 THEN MRESAL_TAC (GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][periodic]
3683 THEN POP_ASSUM(fun th-> MRESA1_TAC th`x:num` THEN MRESA1_TAC th`SUC x:num`)
3684 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3685 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3686 THEN MRESA_TAC DIVISION[`x:num`;`scs_k_v39 s`]
3687 THEN MRESA_TAC DIVISION[`p:num`;`scs_k_v39 s`]
3688 THEN MRESA_TAC DIVISION[`q:num`;`scs_k_v39 s`]
3689 THEN MRESA_TAC DIVISION[`SUC x:num`;`scs_k_v39 s`]
3690 THEN REPLICATE_TAC (42-14) (POP_ASSUM MP_TAC)
3691 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3692 THEN MRESA_TAC th[`x MOD scs_k_v39 s`;`q MOD scs_k_v39 s`]
3693 THEN MRESA_TAC th[`SUC x MOD scs_k_v39 s`;`p MOD scs_k_v39 s`])
3694 THEN REPLICATE_TAC (45-28) (POP_ASSUM MP_TAC)
3695 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3696 THEN MRESAL_TAC th[`x MOD scs_k_v39 s`;`q MOD scs_k_v39 s`][DIST_REFL]
3697 THEN MRESAL_TAC th[`SUC x MOD scs_k_v39 s`;`p MOD scs_k_v39 s`][DIST_REFL])
3698 THEN REPLICATE_TAC (6) (POP_ASSUM MP_TAC)
3699 THEN MP_TAC(SET_RULE`~(x MOD scs_k_v39 s = q MOD scs_k_v39 s) \/ (x MOD scs_k_v39 s = q MOD scs_k_v39 s)`)
3705 MP_TAC(SET_RULE`~(SUC x MOD scs_k_v39 s = p MOD scs_k_v39 s) \/ (SUC x MOD scs_k_v39 s = p MOD scs_k_v39 s)`)
3712 THEN REPLICATE_TAC (3) (REMOVE_ASSUM_TAC)
3713 THEN POP_ASSUM(fun th-> ASM_TAC
3714 THEN REWRITE_TAC[SYM th;])
3715 THEN REPEAT STRIP_TAC
3716 THEN MRESAL_TAC (GEN_ALL Zithlqn.IMP_SUC_MOD_EQ)[`x:num`;`q:num`;`scs_k_v39 s`][]]);;
3724 let SCS_K_LE_6=prove(`is_scs_v39 s ==> scs_k_v39 s<=6`,
3725 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;BBs_v39;is_scs_v39;scs_diag]
3726 THEN REPEAT RESA_TAC);;
3730 let TECOXBMv2=prove_by_refinement(
3731 `is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q
3732 /\ dist(u ,w) <= cstab
3733 /\ (vv:num->real^3) (p MOD (scs_k_v39 s))=u
3734 /\ (vv:num->real^3) (q MOD (scs_k_v39 s))=w
3735 /\ IMAGE (vv:num->real^3) (:num)=V/\
3736 IMAGE (\i. {vv i,(vv:num->real^3) (SUC i)}) (:num) =E/\
3737 IMAGE (\i. (vv i,(vv:num->real^3) (SUC i))) (:num)=FF /\
3740 (!x. x IN FF ==> aff_gt {vec 0} {u, w} SUBSET wedge_in_fan_gt x E)`,
3743 THEN REPEAT STRIP_TAC
3744 THEN MP_TAC IS_SCS_STABLE_SYSTEM
3745 THEN ASM_REWRITE_TAC[ARITH_RULE`3<4`]
3746 THEN MP_TAC SCS_K_PRIME_CASE_3
3748 THEN MP_TAC SCS_K_LE_6
3751 THEN ABBREV_TAC`s1 =stable_sy((scs_k_v39 s),(scs_d_v39 s),(0..scs_k_v39 s - 1),
3752 (change_type_v3 (scs_a_v39 s)),
3753 (change_type_v3 (scs_b_v39 s)),
3754 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)),
3755 (\i. (1 + i) MOD scs_k_v39 s))`
3756 THEN MRESA_TAC stable_sy_explicit[`(scs_k_v39 s)`;`(scs_d_v39 s)`;`(0..scs_k_v39 s - 1)`;`
3757 (change_type_v3 (scs_a_v39 s))`;`
3758 (change_type_v3 (scs_b_v39 s))`;`
3759 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s))`;`
3760 (\i. (1 + i) MOD scs_k_v39 s)`]
3761 THEN MP_TAC(ARITH_RULE`3 < scs_k_v39 s /\ scs_k_v39 s<=6 ==> scs_k_v39 s=4 \/
3762 scs_k_v39 s=5 \/ scs_k_v39 s=6`)
3768 POP_ASSUM(fun th-> ASM_TAC
3769 THEN REWRITE_TAC[th]
3771 THEN REPEAT STRIP_TAC
3772 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^(2+2)`
3773 THEN ABBREV_TAC`a=matvec (v:real^3^(2+2))`
3774 THEN MP_TAC(INST_TYPE [`:2+2`,`:M`]V_E_FF_IS_SCS_CASES_4)
3775 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_4;IN]
3777 THEN MP_TAC(INST_TYPE [`:2+2`,`:M`]IN_IS_SCS_CASE_4)
3778 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_4;IN]
3780 THEN SUBGOAL_THEN`{u, w} SUBSET V_SY (v:real^3^(2+2))` ASSUME_TAC;
3786 REWRITE_TAC[SET_RULE`{a,b} SUBSET A<=> a IN A /\ b IN A`]
3787 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`p MOD scs_k_v39 s`;`vv:num->real^3`]
3788 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`q MOD scs_k_v39 s`;`vv:num->real^3`];
3794 SUBGOAL_THEN`&2 <= norm (u - w:real^3)` ASSUME_TAC;
3802 THEN REWRITE_TAC[is_scs_v39;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;scs_diag]
3803 THEN REPEAT RESA_TAC;
3817 REPLICATE_TAC (51-32)(POP_ASSUM MP_TAC)
3818 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3819 THEN MRESAL_TAC th [`p MOD scs_k_v39 s`;`q MOD scs_k_v39 s`] [ARITH_RULE`SUC 0=1/\ SUC 1=2/\ SUC 2=3`;cstab;dist])
3820 THEN MRESAL_TAC DIVISION[`p:num`;`scs_k_v39 s`][ARITH_RULE`~(4=0)`]
3821 THEN MRESAL_TAC DIVISION[`q:num`;`scs_k_v39 s`][ARITH_RULE`~(4=0)`]
3822 THEN REPLICATE_TAC (56-15)(POP_ASSUM MP_TAC)
3823 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3824 THEN MRESAL_TAC th [`p MOD scs_k_v39 s`;`q MOD scs_k_v39 s`] [ARITH_RULE`SUC 0=1/\ SUC 1=2/\ SUC 2=3`;cstab;dist])
3825 THEN REPLICATE_TAC (58-48)(POP_ASSUM MP_TAC)
3826 THEN REAL_ARITH_TAC;
3832 MP_TAC DIAG_NOT_IN_EDGES
3833 THEN ASM_REWRITE_TAC[dist;IN]
3835 THEN MRESA_TAC(GEN_ALL (INST_TYPE [`:2+2`,`:M`]Tecoxbm.TECOXBM))[`scs_d_v39 s`;
3836 `(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))`;`u:real^3`;`w:real^3`;`matvec (v:real^3^(2+2))`]
3837 THEN POP_ASSUM MP_TAC
3839 THEN REWRITE_TAC[Dih2k_hypermap.VECMATS_MATVEC_ID]
3840 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_4;IN;B_SY1;ARITH_RULE`2<4`]
3842 THEN POP_ASSUM MATCH_MP_TAC
3844 THEN REWRITE_TAC[IN]
3845 THEN REPEAT RESA_TAC;
3859 POP_ASSUM(fun th-> ASM_TAC
3860 THEN REWRITE_TAC[th]
3862 THEN REPEAT STRIP_TAC
3863 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^(2+3)`
3864 THEN ABBREV_TAC`a=matvec (v:real^3^(2+3))`
3865 THEN MP_TAC(INST_TYPE [`:2+3`,`:M`]V_E_FF_IS_SCS_CASES_5)
3866 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_5;IN]
3868 THEN MP_TAC(INST_TYPE [`:2+3`,`:M`]IN_IS_SCS_CASE_5)
3869 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_5;IN]
3871 THEN SUBGOAL_THEN`{u, w} SUBSET V_SY (v:real^3^(2+3))` ASSUME_TAC;
3877 REWRITE_TAC[SET_RULE`{a,b} SUBSET A<=> a IN A /\ b IN A`]
3878 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`p MOD scs_k_v39 s`;`vv:num->real^3`]
3879 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`q MOD scs_k_v39 s`;`vv:num->real^3`];
3885 SUBGOAL_THEN`&2 <= norm (u - w:real^3)` ASSUME_TAC;
3893 THEN REWRITE_TAC[is_scs_v39;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;scs_diag]
3894 THEN REPEAT RESA_TAC;
3908 REPLICATE_TAC (50-31)(POP_ASSUM MP_TAC)
3909 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3910 THEN MRESAL_TAC th [`p MOD scs_k_v39 s`;`q MOD scs_k_v39 s`] [ARITH_RULE`SUC 0=1/\ SUC 1=2/\ SUC 2=3`;cstab;dist])
3911 THEN MRESAL_TAC DIVISION[`p:num`;`scs_k_v39 s`][ARITH_RULE`~(5=0)`]
3912 THEN MRESAL_TAC DIVISION[`q:num`;`scs_k_v39 s`][ARITH_RULE`~(5=0)`]
3913 THEN REPLICATE_TAC (56-15)(POP_ASSUM MP_TAC)
3914 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3915 THEN MRESAL_TAC th [`p MOD scs_k_v39 s`;`q MOD scs_k_v39 s`] [ARITH_RULE`SUC 0=1/\ SUC 1=2/\ SUC 2=3`;cstab;dist])
3916 THEN REPLICATE_TAC (57-48)(POP_ASSUM MP_TAC)
3917 THEN REAL_ARITH_TAC;
3923 MP_TAC DIAG_NOT_IN_EDGES
3924 THEN ASM_REWRITE_TAC[dist;IN]
3926 THEN MRESA_TAC(GEN_ALL (INST_TYPE [`:2+3`,`:M`]Tecoxbm.TECOXBM))[`scs_d_v39 s`;
3927 `(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))`;`u:real^3`;`w:real^3`;`matvec (v:real^3^(2+3))`]
3928 THEN POP_ASSUM MP_TAC
3930 THEN REWRITE_TAC[Dih2k_hypermap.VECMATS_MATVEC_ID]
3931 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_5;IN;B_SY1;ARITH_RULE`2<5`]
3933 THEN POP_ASSUM MATCH_MP_TAC
3935 THEN REWRITE_TAC[IN]
3936 THEN REPEAT RESA_TAC;
3942 POP_ASSUM(fun th-> ASM_TAC
3943 THEN REWRITE_TAC[th]
3945 THEN REPEAT STRIP_TAC
3946 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^(3+3)`
3947 THEN ABBREV_TAC`a=matvec (v:real^3^(3+3))`
3948 THEN MP_TAC(INST_TYPE [`:3+3`,`:M`]V_E_FF_IS_SCS_CASES_6)
3949 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_6;IN]
3951 THEN MP_TAC(INST_TYPE [`:3+3`,`:M`]IN_IS_SCS_CASE_6)
3952 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_6;IN]
3954 THEN SUBGOAL_THEN`{u, w} SUBSET V_SY (v:real^3^(3+3))` ASSUME_TAC;
3960 REWRITE_TAC[SET_RULE`{a,b} SUBSET A<=> a IN A /\ b IN A`]
3961 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`p MOD scs_k_v39 s`;`vv:num->real^3`]
3962 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`q MOD scs_k_v39 s`;`vv:num->real^3`];
3968 SUBGOAL_THEN`&2 <= norm (u - w:real^3)` ASSUME_TAC;
3976 THEN REWRITE_TAC[is_scs_v39;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;scs_diag]
3977 THEN REPEAT RESA_TAC;
3991 REPLICATE_TAC (50-31)(POP_ASSUM MP_TAC)
3992 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3993 THEN MRESAL_TAC th [`p MOD scs_k_v39 s`;`q MOD scs_k_v39 s`] [ARITH_RULE`SUC 0=1/\ SUC 1=2/\ SUC 2=3`;cstab;dist])
3994 THEN MRESAL_TAC DIVISION[`p:num`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
3995 THEN MRESAL_TAC DIVISION[`q:num`;`scs_k_v39 s`][ARITH_RULE`~(6=0)`]
3996 THEN REPLICATE_TAC (56-15)(POP_ASSUM MP_TAC)
3997 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3998 THEN MRESAL_TAC th [`p MOD scs_k_v39 s`;`q MOD scs_k_v39 s`] [ARITH_RULE`SUC 0=1/\ SUC 1=2/\ SUC 2=3`;cstab;dist])
3999 THEN REPLICATE_TAC (57-48)(POP_ASSUM MP_TAC)
4000 THEN REAL_ARITH_TAC;
4005 MP_TAC DIAG_NOT_IN_EDGES
4006 THEN ASM_REWRITE_TAC[dist;IN]
4008 THEN MRESA_TAC(GEN_ALL (INST_TYPE [`:3+3`,`:M`]Tecoxbm.TECOXBM))[`scs_d_v39 s`;
4009 `(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))`;`u:real^3`;`w:real^3`;`matvec (v:real^3^(3+3))`]
4010 THEN POP_ASSUM MP_TAC
4012 THEN REWRITE_TAC[Dih2k_hypermap.VECMATS_MATVEC_ID]
4013 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_6;IN;B_SY1;ARITH_RULE`2<6`]
4015 THEN POP_ASSUM MATCH_MP_TAC
4017 THEN REWRITE_TAC[IN]
4018 THEN REPEAT RESA_TAC;
4024 let VV_SUC_EQ_RHO_NODE=prove_by_refinement(`scs_k_v39 s =k /\
4025 (vv:num->real^3) p1=u /\
4026 IMAGE (vv:num->real^3) (:num)=V/\
4027 IMAGE (\i. {vv i,(vv:num->real^3) (SUC i)}) (:num) =E/\
4028 IMAGE (\i. (vv i,(vv:num->real^3) (SUC i))) (:num)=FF /\
4030 scs_diag (scs_k_v39 s) p q /\
4033 (!m. ITER m (rho_node1 FF) u= vv (m+p1))`,
4037 ASM_REWRITE_TAC[ITER;ARITH_RULE`0+p=p`];
4039 ASM_REWRITE_TAC[ITER]
4040 THEN SUBGOAL_THEN`(vv:num->real^3) (m+p1), (vv:num->real^3) (SUC m+p1) IN FF ` ASSUME_TAC;
4043 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
4044 THEN EXISTS_TAC`m+p1:num`
4045 THEN REWRITE_TAC[ARITH_RULE`SUC m+p= SUC(m+p)`;SET_RULE`(a:num)IN(:num)`];
4047 MATCH_MP_TAC(GEN_ALL Local_lemmas.DETER_RHO_NODE)
4048 THEN EXISTS_TAC`V:real^3->bool`
4049 THEN EXISTS_TAC`E:(real^3->bool)->bool`
4050 THEN ASM_REWRITE_TAC[]
4051 THEN MP_TAC SCS_K_PRIME_CASE_3
4053 THEN POP_ASSUM(fun th-> ASM_TAC
4055 THEN MP_TAC(ARITH_RULE`3<k==> ~(k<=3)`))
4056 THEN ASM_REWRITE_TAC[scs_diag;BBs_v39;LET_DEF;LET_END_DEF;convex_local_fan]
4057 THEN REPEAT RESA_TAC]);;
4061 let W_EW_K_SCS_ADD_P=prove_by_refinement(
4062 ` scs_half_slice_v39 s p q d' mkj= s' /\
4063 scs_k_v39 s'=k' /\ scs_k_v39 s =k /\
4064 (vv:num->real^3) (p MOD k)=u /\
4065 (vv:num->real^3) (q MOD k)=w /\
4067 scs_diag (scs_k_v39 s) p q /\
4069 ==> vv (k' - 1 + p MOD k) = w`,
4071 ABBREV_TAC`V= IMAGE (vv:num->real^3) (:num)`
4072 THEN ABBREV_TAC`E= IMAGE (\i. {vv i,(vv:num->real^3) (SUC i)}) (:num)`
4073 THEN ABBREV_TAC`FF= IMAGE (\i. (vv i,(vv:num->real^3) (SUC i))) (:num)`
4074 THEN REPEAT STRIP_TAC
4075 THEN MP_TAC SCS_K_PRIME_CASE_3
4077 THEN MP_TAC(ARITH_RULE`3<scs_k_v39 s ==> ~(scs_k_v39 s<=3)`)
4079 THEN POP_ASSUM (fun th->
4080 REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
4082 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;scs_half_slice_v39;is_scs_v39;scs_diag;scs_v39_explicit]
4083 THEN REPEAT RESA_TAC
4084 THEN REPLICATE_TAC (1) (POP_ASSUM MP_TAC)
4085 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4088 THEN REWRITE_TAC[convex_local_fan]
4090 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`p MOD scs_k_v39 s`;`vv:num->real^3`]
4091 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`q MOD scs_k_v39 s`;`vv:num->real^3`]
4092 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`;`u:real^3`;`w:real^3`]
4093 THEN SUBGOAL_THEN`(!i. scs_b_v39 s i (SUC i) <= cstab)`ASSUME_TAC;
4095 REPLICATE_TAC (45-27)(POP_ASSUM MP_TAC)
4096 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4097 THEN MATCH_MP_TAC th)
4098 THEN ASM_REWRITE_TAC[];
4100 REPLICATE_TAC (43-3)(POP_ASSUM MP_TAC)
4101 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4104 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
4105 THEN ASM_SIMP_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
4107 THEN MRESA_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`p:num`;`q:num`;`d':real`;`scs_J_v39 s' p q`]
4108 THEN POP_ASSUM MP_TAC
4109 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;scs_half_slice_v39]
4110 THEN ASM_SIMP_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
4112 THEN MP_TAC(ARITH_RULE`3<=k==> ~(k=0)`)
4114 THEN MRESA_TAC DIVISION[`p:num`;`k:num`]
4115 THEN MP_TAC(ARITH_RULE`p MOD k< k==> 0< q + 1 + k - p MOD k`)
4117 THEN MP_TAC(ARITH_RULE`3<=k/\ 3<= (q + 1 + k - p MOD k) MOD k /\ p MOD k<k ==>
4118 (((q + 1 + k - p MOD k) MOD k - 1 + p MOD k) + k)
4119 =(q + 1 + k - p MOD k) MOD k +(k- 1 + p MOD k)
4122 THEN REPLICATE_TAC (52-32)(POP_ASSUM MP_TAC)
4123 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4125 THEN REWRITE_TAC[periodic]
4127 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(q + 1 + k - p MOD k) MOD k - 1 + p MOD k`
4128 THEN POP_ASSUM(fun th1-> REWRITE_TAC[SYM th1])
4130 THEN MRESA_TAC MOD_MOD_REFL[`(q + 1 + k - p MOD k)`;`k:num`]
4131 THEN MRESA_TAC MOD_ADD_MOD[`(q + 1 + k - p MOD k) :num`;`k - 1 + p MOD k:num`;`scs_k_v39 s`]
4132 THEN MP_TAC(ARITH_RULE`p MOD k< k /\ 3<=k==> (q + 1 + k - p MOD k) + k - 1 + p MOD k =q+ 2*k`)
4134 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;periodic]
4135 THEN POP_ASSUM(fun th-> MRESA1_TAC th`q :num` THEN MRESA1_TAC th`q +2*k:num` THEN MRESA1_TAC th `((q + 1 + k - p MOD k) MOD k + k - 1 + p MOD k):num`)
4136 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4137 THEN MRESA_TAC MOD_ADD_MOD[`(q + 1 + k - p MOD k) MOD k:num`;`k - 1 + p MOD k:num`;`scs_k_v39 s`]
4138 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
4139 THEN REPLICATE_TAC (5)(REMOVE_ASSUM_TAC)
4140 THEN POP_ASSUM(fun th-> MRESA1_TAC th`q:num` THEN MRESAL1_TAC th`q+k:num`[ARITH_RULE`(A+B)+B=A+2*B`])]);;
4144 let VV_INJ=prove(` scs_k_v39 s =k /\
4147 ==>(!i j. i<k /\ j< k /\ ~(i=j)==> ~(vv i= vv j))`,
4148 REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4149 THEN REPEAT STRIP_TAC
4150 THEN REPLICATE_TAC (5)(POP_ASSUM MP_TAC)
4151 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4152 THEN MRESAL_TAC th[`i:num`;`j:num`][VECTOR_ARITH`a-a= vec 0`;NORM_0])
4153 THEN REPLICATE_TAC (29-15)(POP_ASSUM MP_TAC)
4154 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4155 THEN MRESA_TAC th[`i:num`;`j:num`])
4156 THEN REPLICATE_TAC (3)(POP_ASSUM MP_TAC)
4157 THEN REAL_ARITH_TAC);;
4162 let CARD_V_EQ_SCS_K=prove_by_refinement(
4164 IMAGE (vv:num->real^3) (:num)=V/\
4166 scs_diag (scs_k_v39 s) p q /\
4171 THEN MP_TAC IS_SCS_STABLE_SYSTEM
4172 THEN ASM_REWRITE_TAC[ARITH_RULE`3<4`]
4173 THEN MP_TAC SCS_K_PRIME_CASE_3
4175 THEN MP_TAC SCS_K_LE_6
4178 THEN ABBREV_TAC`s1 =stable_sy((scs_k_v39 s),(scs_d_v39 s),(0..scs_k_v39 s - 1),
4179 (change_type_v3 (scs_a_v39 s)),
4180 (change_type_v3 (scs_b_v39 s)),
4181 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s)),
4182 (\i. (1 + i) MOD scs_k_v39 s))`
4183 THEN MRESA_TAC stable_sy_explicit[`(scs_k_v39 s)`;`(scs_d_v39 s)`;`(0..scs_k_v39 s - 1)`;`
4184 (change_type_v3 (scs_a_v39 s))`;`
4185 (change_type_v3 (scs_b_v39 s))`;`
4186 (change_type_v2 (scs_J_v39 s) (scs_k_v39 s))`;`
4187 (\i. (1 + i) MOD scs_k_v39 s)`]
4188 THEN MP_TAC(ARITH_RULE`3 < scs_k_v39 s /\ scs_k_v39 s<=6 ==> scs_k_v39 s=4 \/
4189 scs_k_v39 s=5 \/ scs_k_v39 s=6`)
4192 POP_ASSUM(fun th-> ASM_TAC
4193 THEN REWRITE_TAC[th]
4195 THEN REPEAT STRIP_TAC
4196 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^(2+2)`
4197 THEN ABBREV_TAC`a=matvec (v:real^3^(2+2))`
4198 THEN MP_TAC(INST_TYPE [`:2+2`,`:M`]V_E_FF_IS_SCS_CASES_4)
4199 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_4;IN]
4201 THEN MRESAL_TAC (INST_TYPE [`:2+2`,`:M`]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)
4202 /\ SUC 4 MOD 4= 1 /\ SUC 1 MOD 4= 2 /\ SUC 2 MOD 4= 3/\ SUC 3 MOD 4= 0/\ ~(3=1)/\ ~(1=0)`;Basics.DIMINDEX_4]
4204 THEN REWRITE_TAC[V_SY;rows;Basics.DIMINDEX_4;ARITH_RULE`1<=i /\ i<=4 <=> i=1\/ i=2\/ i=3 \/ i=4`;SET_RULE`{row i v | i = 1 \/ i = 2 \/ i = 3 \/ i = 4}={row 1 v, row 2 v, row 3 v,row 4 v}`]
4205 THEN ASM_REWRITE_TAC[]
4208 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`1`;`2`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<4/\ 1<4/\ 2<4/\ 3<4`]
4209 THEN MRESAL_TAC th[`1`;`3`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<4/\ 1<4/\ 2<4/\ 3<4`]
4210 THEN MRESAL_TAC th[`1`;`0`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<4/\ 1<4/\ 2<4/\ 3<4`]
4211 THEN MRESAL_TAC th[`2`;`0`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<4/\ 1<4/\ 2<4/\ 3<4`]
4212 THEN MRESAL_TAC th[`3`;`0`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<4/\ 1<4/\ 2<4/\ 3<4`]
4213 THEN MRESAL_TAC th[`2`;`3`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<4/\ 1<4/\ 2<4/\ 3<4`])
4214 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
4215 IN_INSERT; NOT_IN_EMPTY]
4216 THEN ASM_REWRITE_TAC[]
4219 POP_ASSUM(fun th-> ASM_TAC
4220 THEN REWRITE_TAC[th]
4222 THEN REPEAT STRIP_TAC
4223 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^(2+3)`
4224 THEN ABBREV_TAC`a=matvec (v:real^3^(2+3))`
4225 THEN MP_TAC(INST_TYPE [`:2+3`,`:M`]V_E_FF_IS_SCS_CASES_5)
4226 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_5;IN]
4228 THEN MRESAL_TAC (INST_TYPE [`:2+3`,`:M`]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)
4229 /\ SUC 0 MOD 5= 1 /\ SUC 1 MOD 5= 2 /\ SUC 2 MOD 5= 3/\ SUC 3 MOD 5= 4
4230 /\ SUC 4 MOD 5= 0 /\ SUC 5 MOD 5 = 1 /\ ~(3=1)/\ ~(1=0)`;SET_RULE`(a:num) IN (:num)`;Basics.DIMINDEX_5]
4232 THEN REWRITE_TAC[V_SY;rows;Basics.DIMINDEX_5;ARITH_RULE`1<=i /\ i<=5 <=> i=1\/ i=2\/ i=3 \/ i=4 \/ i=5`;SET_RULE`{row i v | i = 1 \/ i = 2 \/ i = 3 \/ i = 4\/ i=5}={row 1 v, row 2 v, row 3 v,row 4 v, row 5 v}`]
4233 THEN ASM_REWRITE_TAC[]
4236 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`1`;`2`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<5/\ 1<5/\ 2<5/\ 3<5/\ 4<5 /\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)`]
4237 THEN MRESAL_TAC th[`1`;`3`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<5/\ 1<5/\ 2<5/\ 3<5/\ 4<5 /\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)`]
4238 THEN MRESAL_TAC th[`1`;`0`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<5/\ 1<5/\ 2<5/\ 3<5/\ 4<5 /\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)`]
4239 THEN MRESAL_TAC th[`2`;`0`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<5/\ 1<5/\ 2<5/\ 3<5/\ 4<5 /\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)`]
4240 THEN MRESAL_TAC th[`3`;`0`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<5/\ 1<5/\ 2<5/\ 3<5/\ 4<5 /\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)`]
4241 THEN MRESAL_TAC th[`2`;`3`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<5/\ 1<5/\ 2<5/\ 3<5/\ 4<5 /\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)`]
4242 THEN MRESAL_TAC th[`1`;`4`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<5/\ 1<5/\ 2<5/\ 3<5/\ 4<5 /\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)`]
4243 THEN MRESAL_TAC th[`2`;`4`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<5/\ 1<5/\ 2<5/\ 3<5/\ 4<5 /\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)`]
4244 THEN MRESAL_TAC th[`3`;`4`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<5/\ 1<5/\ 2<5/\ 3<5/\ 4<5 /\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)`]
4245 THEN MRESAL_TAC th[`0`;`4`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<5/\ 1<5/\ 2<5/\ 3<5/\ 4<5 /\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)`])
4246 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
4247 IN_INSERT; NOT_IN_EMPTY]
4248 THEN ASM_REWRITE_TAC[]
4251 POP_ASSUM(fun th-> ASM_TAC
4252 THEN REWRITE_TAC[th]
4254 THEN REPEAT STRIP_TAC
4255 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^(3+3)`
4256 THEN ABBREV_TAC`a=matvec (v:real^3^(3+3))`
4257 THEN MP_TAC(INST_TYPE [`:3+3`,`:M`]V_E_FF_IS_SCS_CASES_6)
4258 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_6;IN]
4260 THEN MRESAL_TAC (INST_TYPE [`:3+3`,`:M`]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)
4261 /\ SUC 0 MOD 6= 1 /\ SUC 1 MOD 6= 2 /\ SUC 2 MOD 6= 3/\ SUC 3 MOD 6= 4
4262 /\ SUC 4 MOD 6= 5 /\ SUC 5 MOD 6 = 0 /\ SUC 6 MOD 6 =1 /\ ~(3=1)/\ ~(1=0)`;Basics.DIMINDEX_6]
4264 THEN REWRITE_TAC[V_SY;rows;Basics.DIMINDEX_6;ARITH_RULE`1<=i /\ i<=6 <=> i=1\/ i=2\/ i=3 \/ i=4 \/ i=5\/ i=6`;SET_RULE`{row i v | i = 1 \/ i = 2 \/ i = 3 \/ i = 4\/ i=5 \/ i=6}={row 1 v, row 2 v, row 3 v,row 4 v, row 5 v, row 6 v}`]
4265 THEN ASM_REWRITE_TAC[]
4268 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`1`;`2`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0) /\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)/\ 0<6/\ 1<6/\ 2<6/\ 3<6/\ 4<6/\ 5<6 /\ ~(0=5) /\ ~(1=5) /\ ~(2=5)/\ ~(3=5)/\ ~(4=5)`]
4269 THEN MRESAL_TAC th[`1`;`3`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)/\ 0<6/\ 1<6/\ 2<6/\ 3<6/\ 4<6/\ 5<6 /\ ~(0=5) /\ ~(1=5) /\ ~(2=5)/\ ~(3=5)/\ ~(4=5)`]
4270 THEN MRESAL_TAC th[`1`;`0`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)/\ 0<6/\ 1<6/\ 2<6/\ 3<6/\ 4<6/\ 5<6 /\ ~(0=5) /\ ~(1=5) /\ ~(2=5)/\ ~(3=5)/\ ~(4=5)`]
4271 THEN MRESAL_TAC th[`2`;`0`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)/\ 0<6/\ 1<6/\ 2<6/\ 3<6/\ 4<6/\ 5<6 /\ ~(0=5) /\ ~(1=5) /\ ~(2=5)/\ ~(3=5)/\ ~(4=5)`]
4272 THEN MRESAL_TAC th[`3`;`0`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)/\ 0<6/\ 1<6/\ 2<6/\ 3<6/\ 4<6/\ 5<6 /\ ~(0=5) /\ ~(1=5) /\ ~(2=5)/\ ~(3=5)/\ ~(4=5)`]
4273 THEN MRESAL_TAC th[`2`;`3`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)/\ 0<6/\ 1<6/\ 2<6/\ 3<6/\ 4<6/\ 5<6 /\ ~(0=5) /\ ~(1=5) /\ ~(2=5)/\ ~(3=5)/\ ~(4=5)`]
4274 THEN MRESAL_TAC th[`1`;`4`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)/\ 0<6/\ 1<6/\ 2<6/\ 3<6/\ 4<6/\ 5<6 /\ ~(0=5) /\ ~(1=5) /\ ~(2=5)/\ ~(3=5)/\ ~(4=5)`]
4275 THEN MRESAL_TAC th[`2`;`4`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)/\ 0<6/\ 1<6/\ 2<6/\ 3<6/\ 4<6/\ 5<6 /\ ~(0=5) /\ ~(1=5) /\ ~(2=5)/\ ~(3=5)/\ ~(4=5)`]
4276 THEN MRESAL_TAC th[`3`;`4`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)/\ 0<6/\ 1<6/\ 2<6/\ 3<6/\ 4<6/\ 5<6 /\ ~(0=5) /\ ~(1=5) /\ ~(2=5)/\ ~(3=5)/\ ~(4=5)`]
4277 THEN MRESAL_TAC th[`0`;`4`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)/\ 0<6/\ 1<6/\ 2<6/\ 3<6/\ 4<6/\ 5<6 /\ ~(0=5) /\ ~(1=5) /\ ~(2=5)/\ ~(3=5)/\ ~(4=5)`]
4278 THEN MRESAL_TAC th[`1`;`5`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)/\ 0<6/\ 1<6/\ 2<6/\ 3<6/\ 4<6/\ 5<6 /\ ~(0=5) /\ ~(1=5) /\ ~(2=5)/\ ~(3=5)/\ ~(4=5)`]
4279 THEN MRESAL_TAC th[`2`;`5`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)/\ 0<6/\ 1<6/\ 2<6/\ 3<6/\ 4<6/\ 5<6 /\ ~(0=5) /\ ~(1=5) /\ ~(2=5)/\ ~(3=5)/\ ~(4=5)`]
4280 THEN MRESAL_TAC th[`3`;`5`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)/\ 0<6/\ 1<6/\ 2<6/\ 3<6/\ 4<6/\ 5<6 /\ ~(0=5) /\ ~(1=5) /\ ~(2=5)/\ ~(3=5)/\ ~(4=5)`]
4281 THEN MRESAL_TAC th[`0`;`5`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)/\ 0<6/\ 1<6/\ 2<6/\ 3<6/\ 4<6/\ 5<6 /\ ~(0=5) /\ ~(1=5) /\ ~(2=5)/\ ~(3=5)/\ ~(4=5)`]
4282 THEN MRESAL_TAC th[`4`;`5`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ ~(3=4)/\ ~(1=4)/\ ~(2=4)/\ ~(0=4)/\ 0<6/\ 1<6/\ 2<6/\ 3<6/\ 4<6/\ 5<6 /\ ~(0=5) /\ ~(1=5) /\ ~(2=5)/\ ~(3=5)/\ ~(4=5)`])
4283 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
4284 IN_INSERT; NOT_IN_EMPTY]
4285 THEN ASM_REWRITE_TAC[]
4290 let V_PRIME_EQ_V_vv= prove_by_refinement(
4291 ` scs_half_slice_v39 s p q d' mkj= s' /\
4292 scs_half_slice_v39 s q p d'' mkj =s''/\
4293 scs_k_v39 s'=k' /\ scs_k_v39 s =k /\
4294 (vv:num->real^3) (p MOD k)=u /\
4295 (vv:num->real^3) (q MOD k)=w /\
4296 IMAGE (vv:num->real^3) (:num)=V/\
4297 IMAGE (\i. {vv i,(vv:num->real^3) (SUC i)}) (:num) =E/\
4298 IMAGE (\i. (vv i,(vv:num->real^3) (SUC i))) (:num)=FF /\
4299 norm (u - w) <= cstab /\
4301 scs_diag (scs_k_v39 s) p q /\
4304 IMAGE (\i. vv (i MOD k' + p MOD k)) (:num)=v_prime V
4305 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
4309 THEN MP_TAC SCS_K_PRIME_CASE_3
4311 THEN MP_TAC(ARITH_RULE`3<scs_k_v39 s ==> ~(scs_k_v39 s<=3) `)
4313 THEN POP_ASSUM (fun th->
4314 REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
4316 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;scs_half_slice_v39;is_scs_v39;scs_diag;scs_v39_explicit]
4317 THEN REPEAT RESA_TAC
4318 THEN REPLICATE_TAC (1) (POP_ASSUM MP_TAC)
4319 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4322 THEN REWRITE_TAC[convex_local_fan]
4324 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`p MOD scs_k_v39 s`;`vv:num->real^3`]
4325 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`q MOD scs_k_v39 s`;`vv:num->real^3`]
4326 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`;`u:real^3`;`w:real^3`]
4327 THEN SUBGOAL_THEN`(!i. scs_b_v39 s i (SUC i) <= cstab)`ASSUME_TAC;
4329 REPLICATE_TAC (45-27)(POP_ASSUM MP_TAC)
4330 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4331 THEN MATCH_MP_TAC th)
4332 THEN ASM_REWRITE_TAC[];
4335 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4337 THEN MP_TAC TECOXBMv2
4338 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4340 THEN MRESA_TAC(GEN_ALL Local_lemmas1.PROVE_THE_SLICE_ASSUMPTION)[`FF:real^3#real^3->bool`;`E:(real^3->bool)->bool`;`V:real^3->bool`;`u:real^3`;`w:real^3`]
4341 THEN MRESA_TAC (GEN_ALL Nkezbfc_local.COMPATIBLE_BW_TWO_LEMMAS)
4342 [`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (u,rho_node1 FF u)`;`(E:(real^3->bool)->bool)`;`FF:real^3#real^3->bool`;`u:real^3`;`w:real^3`;]
4343 THEN REWRITE_TAC[slicev]
4344 THEN MP_TAC W_EW_K_SCS_ADD_P
4345 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4347 THEN SUBGOAL_THEN`order (rho_node1 FF) u w= k'-1` ASSUME_TAC;
4349 MATCH_MP_TAC Nkezbfc_local.UNIQUE_ORDER
4350 THEN ASM_REWRITE_TAC[]
4351 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE)[`scs_k_v39 s`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`p:num`;`q:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`u:real^3`;`vv:num->real^3`;`p:num MOD k`]
4352 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4355 THEN REPLICATE_TAC (2)(POP_ASSUM MP_TAC)
4356 THEN POP_ASSUM(fun th-> REPLICATE_TAC 2 STRIP_TAC
4357 THEN MRESA1_TAC th`k'-1:num` THEN MRESA1_TAC th`i:num`)
4358 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4359 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4360 THEN MP_TAC CARD_V_EQ_SCS_K
4361 THEN MP_TAC SCS_K_PRIME_LE_GE
4362 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4365 THEN MP_TAC(ARITH_RULE`3<=k' /\ k'<k ==> k'-1<k`)
4367 THEN MRESA_TAC(GEN_ALL Local_lemmas.LOFA_IMP_DIS_ELMS23)
4368 [`E:(real^3->bool)->bool`;`V:real^3->bool`;`FF:real^3#real^3->bool`;`u:real^3`;]
4369 THEN POP_ASSUM(fun th-> MRESA_TAC th[`i:num`;`k'-1`]);
4371 ASM_REWRITE_TAC[IMAGE;IN_ELIM_THM;EXTENSION]
4376 THEN ASM_REWRITE_TAC[]
4377 THEN MP_TAC SCS_K_PRIME_LE_GE
4378 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4380 THEN MP_TAC(ARITH_RULE`3<=k/\ 3<=k' ==> ~(k=0) /\ ~(k'=0)`)
4382 THEN MRESAL_TAC DIVISION[`x':num`;`k':num`][ARITH_RULE`~(3=0)`]
4383 THEN MP_TAC(ARITH_RULE`x' MOD k'< k' /\ k'<k/\ 3<=k' ==> x' MOD k'< k/\ x' MOD k'<= k'-1`)
4385 THEN MRESA_TAC MOD_LT[`(x') MOD k':num`;`k:num`]
4386 THEN MRESA_TAC MOD_ADD_MOD[`x' MOD k':num`;`p:num`;`k:num`]
4387 THEN EXISTS_TAC`x' MOD k'`
4388 THEN ASM_REWRITE_TAC[ARITH_RULE`0<= a`]
4389 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE)[`scs_k_v39 s`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`p:num`;`q:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`u:real^3`;`vv:num->real^3`;`p:num MOD k`]
4390 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist];
4393 THEN EXISTS_TAC`n':num`
4394 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN(:num)`]
4395 THEN MP_TAC SCS_K_PRIME_LE_GE
4396 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4398 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE)[`scs_k_v39 s`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`p:num`;`q:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`u:real^3`;`vv:num->real^3`;`p:num MOD k`]
4399 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4400 THEN MP_TAC(ARITH_RULE`n'<= k'-1 /\ 3<=k'/\ k'<k==> n'< k'`)
4402 THEN MRESA_TAC MOD_LT[`n':num`;`k':num`]]);;
4406 let E_PRIME_EQ_E_vv= prove_by_refinement(
4407 ` scs_half_slice_v39 s p q d' mkj= s' /\
4408 scs_half_slice_v39 s q p d'' mkj =s''/\
4409 scs_k_v39 s'=k' /\ scs_k_v39 s =k /\
4410 (vv:num->real^3) (p MOD k)=u /\
4411 (vv:num->real^3) (q MOD k)=w /\
4412 IMAGE (vv:num->real^3) (:num)=V/\
4413 IMAGE (\i. {vv i,(vv:num->real^3) (SUC i)}) (:num) =E/\
4414 IMAGE (\i. (vv i,(vv:num->real^3) (SUC i))) (:num)=FF /\
4415 norm (u - w) <= cstab /\
4417 scs_diag (scs_k_v39 s) p q /\
4420 IMAGE (\i. {vv (i MOD k' + p MOD k), vv (SUC i MOD k' + p MOD k)}) (:num) =
4421 e_prime (E UNION {{u, w}})
4422 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
4425 THEN MP_TAC SCS_K_PRIME_CASE_3
4427 THEN MP_TAC(ARITH_RULE`3<scs_k_v39 s ==> ~(scs_k_v39 s<=3) `)
4429 THEN POP_ASSUM (fun th->
4430 REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
4432 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;scs_half_slice_v39;is_scs_v39;scs_diag;scs_v39_explicit]
4433 THEN REPEAT RESA_TAC
4434 THEN REPLICATE_TAC (1) (POP_ASSUM MP_TAC)
4435 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4438 THEN REWRITE_TAC[convex_local_fan]
4440 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`p MOD scs_k_v39 s`;`vv:num->real^3`]
4441 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`q MOD scs_k_v39 s`;`vv:num->real^3`]
4442 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`;`u:real^3`;`w:real^3`]
4443 THEN SUBGOAL_THEN`(!i. scs_b_v39 s i (SUC i) <= cstab)`ASSUME_TAC;
4446 REPLICATE_TAC (45-27)(POP_ASSUM MP_TAC)
4447 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4448 THEN MATCH_MP_TAC th)
4449 THEN ASM_REWRITE_TAC[];
4453 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4455 THEN MP_TAC TECOXBMv2
4456 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4458 THEN MRESA_TAC(GEN_ALL Local_lemmas1.PROVE_THE_SLICE_ASSUMPTION)[`FF:real^3#real^3->bool`;`E:(real^3->bool)->bool`;`V:real^3->bool`;`u:real^3`;`w:real^3`]
4459 THEN MRESA_TAC (GEN_ALL Nkezbfc_local.COMPATIBLE_BW_TWO_LEMMAS)
4460 [`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (u,rho_node1 FF u)`;`(E:(real^3->bool)->bool)`;`FF:real^3#real^3->bool`;`u:real^3`;`w:real^3`;]
4461 THEN REWRITE_TAC[slicee]
4462 THEN MP_TAC W_EW_K_SCS_ADD_P
4463 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4465 THEN SUBGOAL_THEN`order (rho_node1 FF) u w= k'-1` ASSUME_TAC;
4468 MATCH_MP_TAC Nkezbfc_local.UNIQUE_ORDER
4469 THEN ASM_REWRITE_TAC[]
4470 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE)[`scs_k_v39 s`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`p:num`;`q:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`u:real^3`;`vv:num->real^3`;`p:num MOD k`]
4471 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4474 THEN REPLICATE_TAC (2)(POP_ASSUM MP_TAC)
4475 THEN POP_ASSUM(fun th-> REPLICATE_TAC 2 STRIP_TAC
4476 THEN MRESA1_TAC th`k'-1:num` THEN MRESA1_TAC th`i:num`)
4477 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4478 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4479 THEN MP_TAC CARD_V_EQ_SCS_K
4480 THEN MP_TAC SCS_K_PRIME_LE_GE
4481 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4484 THEN MP_TAC(ARITH_RULE`3<=k' /\ k'<k ==> k'-1<k`)
4486 THEN MRESA_TAC(GEN_ALL Local_lemmas.LOFA_IMP_DIS_ELMS23)
4487 [`E:(real^3->bool)->bool`;`V:real^3->bool`;`FF:real^3#real^3->bool`;`u:real^3`;]
4488 THEN POP_ASSUM(fun th-> MRESA_TAC th[`i:num`;`k'-1`]);
4494 ASM_REWRITE_TAC[IMAGE;IN_ELIM_THM;EXTENSION;UNION]
4496 THEN REWRITE_TAC[GSYM EXTENSION]
4502 MP_TAC V_PRIME_EQ_V_vv
4503 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4505 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4507 THEN ASM_REWRITE_TAC[IMAGE;IN_ELIM_THM;DELETE;IN_SING]
4508 THEN MP_TAC SCS_K_PRIME_LE_GE
4509 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4511 THEN MP_TAC(ARITH_RULE`3<=k/\ 3<=k' ==> ~(k=0) /\ ~(k'=0)`)
4513 THEN MRESAL_TAC DIVISION[`x':num`;`k':num`][ARITH_RULE`~(3=0)`]
4514 THEN MP_TAC(ARITH_RULE`x' MOD k'< k' /\ k'<k/\ 3<=k' ==> x' MOD k'< k/\ x' MOD k'<= k'-1/\ k'-1<k'/\ SUC(k'-1)=k'/\ 1<k'`)
4516 THEN MP_TAC(ARITH_RULE`x' MOD k'<= k'-1 /\3<=k' ==> x' MOD k' = k'-1\/ x' MOD k'< k'-1`)
4520 MRESA_TAC MOD_LT[`k'-1:num`;`k':num`]
4521 THEN MRESA_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`x':num`;`k'-1`;`k':num`]
4522 THEN MRESAL_TAC MOD_MULT[`k':num`;`1:num`][ARITH_RULE`k'*1 =k'/\ 0+A=A`]
4527 MATCH_MP_TAC(SET_RULE`A==> A\/B`)
4528 THEN EXISTS_TAC`(vv:num->real^3) (x' MOD k' + p MOD k)`
4529 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE)[`scs_k_v39 s`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`p:num`;`q:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`(vv (x' MOD k' + p MOD k)):real^3`;`vv:num->real^3`;`x' MOD k'+p:num MOD k`]
4530 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4531 THEN POP_ASSUM (fun th-> MRESAL1_TAC th` SUC 0`[ITER])
4532 THEN REWRITE_TAC[ARITH_RULE`SUC 0=1`;ADD1]
4533 THEN MRESA_TAC MOD_LT[`1`;`k':num`]
4534 THEN MP_TAC(ARITH_RULE`3<=k' /\ x' MOD k'<k'-1==> 1+x' MOD k'<k'`)
4536 THEN MRESA_TAC MOD_LT[`1+x' MOD k'`;`k':num`]
4537 THEN MRESA_TAC MOD_ADD_MOD[`1`;`x':num`;`k':num`]
4538 THEN ASM_REWRITE_TAC[(ARITH_RULE`1 + x' MOD k' + p MOD k =(1 + x' MOD k') + p MOD k`);ADD_SYM]
4544 THEN ASM_REWRITE_TAC[]
4548 MRESA_TAC DIVISION[`x' MOD k' + p MOD k`;`k:num`]
4549 THEN MRESA_TAC DIVISION[`k' - 1 + p MOD k`;`k:num`]
4551 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4553 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(x' MOD k' +p MOD k)MOD k`;`(k'-1+p MOD k) MOD k`])
4554 THEN ONCE_REWRITE_TAC[ADD_SYM]
4556 THEN REWRITE_TAC[periodic;]
4557 THEN REPEAT STRIP_TAC
4558 THEN POP_ASSUM MP_TAC
4559 THEN POP_ASSUM MP_TAC
4560 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;periodic]
4561 THEN POP_ASSUM(fun th-> MRESA1_TAC th `y + p MOD k:num`)
4562 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
4563 THEN MP_TAC(SET_RULE`~((x' MOD k' + p MOD k) MOD k = (k' - 1 + p MOD k) MOD k)
4564 \/ ((x' MOD k' + p MOD k) MOD k = (k' - 1 + p MOD k) MOD k)`)
4566 THEN MRESAL_TAC(GEN_ALL Hdplygy.MOD_EQ_MOD)[`x' MOD k':num`;`k'-1`;`p MOD k`;`k:num`][]
4567 THEN POP_ASSUM MP_TAC
4568 THEN ONCE_REWRITE_TAC[ADD_SYM]
4570 THEN MRESA_TAC MOD_LT[`x' MOD k'`;`k:num`]
4571 THEN MP_TAC(ARITH_RULE`3<=k' /\k'<k/\ x' MOD k' < k' - 1==> k'-1<k/\ ~(x' MOD k' = k' - 1)`)
4573 THEN MRESA_TAC MOD_LT[`k'-1`;`k:num`]
4580 ASM_REWRITE_TAC[slicev;IN_ELIM_THM;DELETE;IN_SING]
4585 MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE)[`scs_k_v39 s`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`p:num`;`q:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`(vv ( p MOD k)):real^3`;`vv:num->real^3`;`p:num MOD k`]
4586 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4587 THEN POP_ASSUM (fun th-> MRESA1_TAC th` n':num`
4588 THEN MRESAL1_TAC th` SUC n'`[ITER] )
4589 THEN EXISTS_TAC`n':num`
4590 THEN ASM_REWRITE_TAC[SET_RULE`(a:num) IN(:num)`]
4591 THEN MP_TAC(ARITH_RULE`n'<= k'-1 ==> n'=k'-1 \/ (SUC n'<k'/\ n'<k')`)
4596 POP_ASSUM(fun th-> ASM_TAC
4597 THEN REWRITE_TAC[th]
4598 THEN REPEAT RESA_TAC)
4602 MRESA_TAC MOD_LT[`n':num`;`k':num`]
4603 THEN MRESA_TAC MOD_LT[`SUC n':num`;`k':num`]
4608 THEN EXISTS_TAC`k'-1`
4609 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`]
4610 THEN MP_TAC SCS_K_PRIME_LE_GE
4611 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4613 THEN MP_TAC(ARITH_RULE`3<=k' /\k'<k==> k'-1<k' /\ SUC(k'-1)=k' /\ ~(k'=0)`)
4615 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
4616 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A/\ 0+A=A`]
4622 let F_PRIME_EQ_F_vv= prove_by_refinement(
4623 ` scs_half_slice_v39 s p q d' mkj= s' /\
4624 scs_half_slice_v39 s q p d'' mkj =s''/\
4625 scs_k_v39 s'=k' /\ scs_k_v39 s =k /\
4626 (vv:num->real^3) (p MOD k)=u /\
4627 (vv:num->real^3) (q MOD k)=w /\
4628 IMAGE (vv:num->real^3) (:num)=V/\
4629 IMAGE (\i. {vv i,(vv:num->real^3) (SUC i)}) (:num) =E/\
4630 IMAGE (\i. (vv i,(vv:num->real^3) (SUC i))) (:num)=FF /\
4631 norm (u - w) <= cstab /\
4633 scs_diag (scs_k_v39 s) p q /\
4636 IMAGE (\i. vv (i MOD k' + p MOD k),vv (SUC i MOD k' + p MOD k)) (:num)
4637 = face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)
4641 THEN MP_TAC SCS_K_PRIME_CASE_3
4643 THEN MP_TAC(ARITH_RULE`3<scs_k_v39 s ==> ~(scs_k_v39 s<=3) `)
4645 THEN POP_ASSUM (fun th->
4646 REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
4648 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;scs_half_slice_v39;is_scs_v39;scs_diag;scs_v39_explicit]
4649 THEN REPEAT RESA_TAC
4650 THEN REPLICATE_TAC (1) (POP_ASSUM MP_TAC)
4651 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4654 THEN REWRITE_TAC[convex_local_fan]
4656 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`p MOD scs_k_v39 s`;`vv:num->real^3`]
4657 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`q MOD scs_k_v39 s`;`vv:num->real^3`]
4658 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`;`u:real^3`;`w:real^3`]
4659 THEN SUBGOAL_THEN`(!i. scs_b_v39 s i (SUC i) <= cstab)`ASSUME_TAC;
4662 REPLICATE_TAC (45-27)(POP_ASSUM MP_TAC)
4663 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4664 THEN MATCH_MP_TAC th)
4665 THEN ASM_REWRITE_TAC[];
4669 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4671 THEN MP_TAC TECOXBMv2
4672 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4674 THEN MRESA_TAC(GEN_ALL Local_lemmas1.PROVE_THE_SLICE_ASSUMPTION)[`FF:real^3#real^3->bool`;`E:(real^3->bool)->bool`;`V:real^3->bool`;`u:real^3`;`w:real^3`]
4675 THEN MRESA_TAC (GEN_ALL Nkezbfc_local.COMPATIBLE_BW_TWO_LEMMAS)
4676 [`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (u,rho_node1 FF u)`;`(E:(real^3->bool)->bool)`;`FF:real^3#real^3->bool`;`u:real^3`;`w:real^3`;]
4677 THEN REWRITE_TAC[slicef]
4678 THEN MP_TAC W_EW_K_SCS_ADD_P
4679 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4681 THEN SUBGOAL_THEN`order (rho_node1 FF) u w= k'-1` ASSUME_TAC;
4684 MATCH_MP_TAC Nkezbfc_local.UNIQUE_ORDER
4685 THEN ASM_REWRITE_TAC[]
4686 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE)[`scs_k_v39 s`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`p:num`;`q:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`u:real^3`;`vv:num->real^3`;`p:num MOD k`]
4687 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4690 THEN REPLICATE_TAC (2)(POP_ASSUM MP_TAC)
4691 THEN POP_ASSUM(fun th-> REPLICATE_TAC 2 STRIP_TAC
4692 THEN MRESA1_TAC th`k'-1:num` THEN MRESA1_TAC th`i:num`)
4693 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4694 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4695 THEN MP_TAC CARD_V_EQ_SCS_K
4696 THEN MP_TAC SCS_K_PRIME_LE_GE
4697 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4700 THEN MP_TAC(ARITH_RULE`3<=k' /\ k'<k ==> k'-1<k`)
4702 THEN MRESA_TAC(GEN_ALL Local_lemmas.LOFA_IMP_DIS_ELMS23)
4703 [`E:(real^3->bool)->bool`;`V:real^3->bool`;`FF:real^3#real^3->bool`;`u:real^3`;]
4704 THEN POP_ASSUM(fun th-> MRESA_TAC th[`i:num`;`k'-1`]);
4710 ASM_REWRITE_TAC[IMAGE;IN_ELIM_THM;EXTENSION;UNION]
4712 THEN REWRITE_TAC[GSYM EXTENSION]
4718 MP_TAC V_PRIME_EQ_V_vv
4719 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4721 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4723 THEN ASM_REWRITE_TAC[IMAGE;IN_ELIM_THM;DELETE;IN_SING]
4724 THEN MP_TAC SCS_K_PRIME_LE_GE
4725 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4727 THEN MP_TAC(ARITH_RULE`3<=k/\ 3<=k' ==> ~(k=0) /\ ~(k'=0)`)
4729 THEN MRESAL_TAC DIVISION[`x':num`;`k':num`][ARITH_RULE`~(3=0)`]
4730 THEN MP_TAC(ARITH_RULE`x' MOD k'< k' /\ k'<k/\ 3<=k' ==> x' MOD k'< k/\ x' MOD k'<= k'-1/\ k'-1<k'/\ SUC(k'-1)=k'/\ 1<k'`)
4732 THEN MP_TAC(ARITH_RULE`x' MOD k'<= k'-1 /\3<=k' ==> x' MOD k' = k'-1\/ x' MOD k'< k'-1`)
4736 MRESA_TAC MOD_LT[`k'-1:num`;`k':num`]
4737 THEN MRESA_TAC(GEN_ALL IMP_SUC_MOD_EQ)[`x':num`;`k'-1`;`k':num`]
4738 THEN MRESAL_TAC MOD_MULT[`k':num`;`1:num`][ARITH_RULE`k'*1 =k'/\ 0+A=A`]
4743 MATCH_MP_TAC(SET_RULE`A==> A\/B`)
4744 THEN EXISTS_TAC`(vv:num->real^3) (x' MOD k' + p MOD k)`
4745 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE)[`scs_k_v39 s`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`p:num`;`q:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`(vv (x' MOD k' + p MOD k)):real^3`;`vv:num->real^3`;`x' MOD k'+p:num MOD k`]
4746 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4747 THEN POP_ASSUM (fun th-> MRESAL1_TAC th` SUC 0`[ITER])
4748 THEN REWRITE_TAC[ARITH_RULE`SUC 0=1`;ADD1]
4749 THEN MRESA_TAC MOD_LT[`1`;`k':num`]
4750 THEN MP_TAC(ARITH_RULE`3<=k' /\ x' MOD k'<k'-1==> 1+x' MOD k'<k'`)
4752 THEN MRESA_TAC MOD_LT[`1+x' MOD k'`;`k':num`]
4753 THEN MRESA_TAC MOD_ADD_MOD[`1`;`x':num`;`k':num`]
4754 THEN ASM_REWRITE_TAC[(ARITH_RULE`1 + x' MOD k' + p MOD k =(1 + x' MOD k') + p MOD k`);ADD_SYM]
4760 THEN ASM_REWRITE_TAC[]
4764 MRESA_TAC DIVISION[`x' MOD k' + p MOD k`;`k:num`]
4765 THEN MRESA_TAC DIVISION[`k' - 1 + p MOD k`;`k:num`]
4767 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4769 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(x' MOD k' +p MOD k)MOD k`;`(k'-1+p MOD k) MOD k`])
4770 THEN ONCE_REWRITE_TAC[ADD_SYM]
4772 THEN REWRITE_TAC[periodic;]
4773 THEN REPEAT STRIP_TAC
4774 THEN POP_ASSUM MP_TAC
4775 THEN POP_ASSUM MP_TAC
4776 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;periodic]
4777 THEN POP_ASSUM(fun th-> MRESA1_TAC th `y + p MOD k:num`)
4778 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
4779 THEN MP_TAC(SET_RULE`~((x' MOD k' + p MOD k) MOD k = (k' - 1 + p MOD k) MOD k)
4780 \/ ((x' MOD k' + p MOD k) MOD k = (k' - 1 + p MOD k) MOD k)`)
4782 THEN MRESAL_TAC(GEN_ALL Hdplygy.MOD_EQ_MOD)[`x' MOD k':num`;`k'-1`;`p MOD k`;`k:num`][]
4783 THEN POP_ASSUM MP_TAC
4784 THEN ONCE_REWRITE_TAC[ADD_SYM]
4786 THEN MRESA_TAC MOD_LT[`x' MOD k'`;`k:num`]
4787 THEN MP_TAC(ARITH_RULE`3<=k' /\k'<k/\ x' MOD k' < k' - 1==> k'-1<k/\ ~(x' MOD k' = k' - 1)`)
4789 THEN MRESA_TAC MOD_LT[`k'-1`;`k:num`]
4796 ASM_REWRITE_TAC[slicev;IN_ELIM_THM;DELETE;IN_SING]
4801 MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE)[`scs_k_v39 s`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`p:num`;`q:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`(vv ( p MOD k)):real^3`;`vv:num->real^3`;`p:num MOD k`]
4802 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4803 THEN POP_ASSUM (fun th-> MRESA1_TAC th` n':num`
4804 THEN MRESAL1_TAC th` SUC n'`[ITER] )
4805 THEN EXISTS_TAC`n':num`
4806 THEN ASM_REWRITE_TAC[SET_RULE`(a:num) IN(:num)`]
4807 THEN MP_TAC(ARITH_RULE`n'<= k'-1 ==> n'=k'-1 \/ (SUC n'<k'/\ n'<k')`)
4812 POP_ASSUM(fun th-> ASM_TAC
4813 THEN REWRITE_TAC[th]
4814 THEN REPEAT RESA_TAC)
4818 MRESA_TAC MOD_LT[`n':num`;`k':num`]
4819 THEN MRESA_TAC MOD_LT[`SUC n':num`;`k':num`]
4824 THEN EXISTS_TAC`k'-1`
4825 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`]
4826 THEN MP_TAC SCS_K_PRIME_LE_GE
4827 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
4829 THEN MP_TAC(ARITH_RULE`3<=k' /\k'<k==> k'-1<k' /\ SUC(k'-1)=k' /\ ~(k'=0)`)
4831 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
4832 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A/\ 0+A=A`]
4838 let QKNVMLB1_LE4F= prove_by_refinement(
4839 ` s' = scs_half_slice_v39 s p q d' mkj /\
4840 s'' = scs_half_slice_v39 s q p d'' mkj /\
4841 vv' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s')+p MOD (scs_k_v39 s)))
4842 /\ is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q
4845 (4<scs_k_v39 s /\ scs_bm_v39 s p q <= cstab)
4851 THEN POP_ASSUM MP_TAC
4852 (*THEN MP_TAC SCS_HALF_SLICE_IS_SCS
4854 THEN MRESA_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`p:num`;`q:num`;`d':real`;`scs_J_v39 s' p q`]
4855 THEN POP_ASSUM MP_TAC
4856 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;]
4857 THEN MP_TAC SCS_K_PRIME_CASE_3
4859 THEN MP_TAC(ARITH_RULE`3<scs_k_v39 s ==> ~(scs_k_v39 s<=3)`)
4861 THEN REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
4862 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;scs_half_slice_v39;is_scs_v39;scs_diag;scs_v39_explicit]
4863 THEN ABBREV_TAC`k'=(q + 1 + scs_k_v39 s - p MOD scs_k_v39 s) MOD scs_k_v39 s`
4864 THEN ABBREV_TAC`k= scs_k_v39 s`
4865 THEN REPEAT RESA_TAC;
4868 THEN REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
4869 THEN REPEAT STRIP_TAC
4870 THEN ASM_REWRITE_TAC[]
4871 THEN REPLICATE_TAC (51-38) (POP_ASSUM MP_TAC)
4872 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4873 THEN MATCH_MP_TAC th)
4874 THEN EXISTS_TAC`((x') MOD k'+p MOD k)`
4875 THEN REWRITE_TAC[SET_RULE`(a:num) IN (:num)`];
4879 REWRITE_TAC[periodic;]
4881 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k':num`;`i:num`][ARITH_RULE`1 * k' + i = (i+k')`]
4885 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
4890 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
4891 THEN POP_ASSUM(fun th-> MRESA_TAC th[`((i) MOD k'+p MOD k)`;`((j) MOD k'+p MOD k)`])
4894 THEN SUBGOAL_THEN`scs_am_v39 s ((i) MOD k'+p MOD k) ((j) MOD k'+p MOD k)
4895 =scs_am_v39 s p q`ASSUME_TAC;
4898 MP_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1}
4899 ==> (i MOD k' =0 /\ j MOD k'=k'-1)\/ (i MOD k' =k'-1 /\ j MOD k'=0)`)
4901 THEN REWRITE_TAC[ARITH_RULE`0+p=p`]
4903 THEN REWRITE_TAC[periodic2;]
4904 THEN REPEAT STRIP_TAC
4905 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0) /\ 0<scs_k_v39 s`)
4907 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_am_v39 s p`][ARITH_RULE`~(4=0)`;periodic]
4908 THEN POP_ASSUM(fun th-> MRESA1_TAC th `k'+(k-1)+p MOD k:num`)
4909 THEN POP_ASSUM MP_TAC
4910 THEN MRESA_TAC MOD_LT[`k':num`;`k:num`]
4911 THEN MRESA_TAC MOD_ADD_MOD[`k':num`;`k-1+p MOD k`;`k:num`]
4912 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4913 THEN REMOVE_ASSUM_TAC
4914 THEN MRESA_TAC MOD_ADD_MOD[`q + 1 + k - p MOD k`;`k-1+p MOD k`;`k:num`]
4916 THEN MRESA_TAC DIVISION[`p:num`;`k:num`]
4917 THEN MP_TAC(ARITH_RULE`p MOD k< k==>(((q + 1 + k - p MOD k) + k - 1 + p MOD k))
4920 THEN MRESA_TAC MOD_EQ[`q+2*k`;`q:num`;`k:num`;`2`]
4921 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_am_v39 s p`][ARITH_RULE`~(4=0)`;periodic]
4922 THEN POP_ASSUM(fun th-> MRESA1_TAC th `q:num`)
4923 THEN REPLICATE_TAC (60-14) (POP_ASSUM MP_TAC)
4924 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4925 THEN MP_TAC(ARITH_RULE`0<k/\ 3<= k'==> (k' - 1 + p MOD k) + k =k' + k - 1 + p MOD k`)
4927 THEN MRESA_TAC th[`k'-1+p MOD k`;`p:num`]
4928 THEN REMOVE_ASSUM_TAC
4930 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_am_v39 s (k' - 1 + p MOD k)`][ARITH_RULE`~(4=0)`;periodic]
4931 THEN POP_ASSUM(fun th-> MRESA1_TAC th `p:num`)
4934 POP_ASSUM(fun th1->ASM_REWRITE_TAC[SYM th1])
4942 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
4947 THEN REPLICATE_TAC 1 (POP_ASSUM MP_TAC)
4948 THEN POP_ASSUM(fun th-> MRESA_TAC th[`((i) MOD k'+p MOD k)`;`((j) MOD k'+p MOD k)`])
4950 THEN SUBGOAL_THEN`scs_bm_v39 s ((i) MOD k'+p MOD k) ((j) MOD k'+p MOD k)
4951 =scs_bm_v39 s p q`ASSUME_TAC;
4954 MP_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1}
4955 ==> (i MOD k' =0 /\ j MOD k'=k'-1)\/ (i MOD k' =k'-1 /\ j MOD k'=0)`)
4957 THEN REWRITE_TAC[ARITH_RULE`0+p=p`]
4959 THEN REWRITE_TAC[periodic2;]
4960 THEN REPEAT STRIP_TAC
4961 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0) /\ 0<scs_k_v39 s`)
4963 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_bm_v39 s p`][ARITH_RULE`~(4=0)`;periodic]
4964 THEN POP_ASSUM(fun th-> MRESA1_TAC th `k'+(k-1)+p MOD k:num`)
4965 THEN POP_ASSUM MP_TAC
4966 THEN MRESA_TAC MOD_LT[`k':num`;`k:num`]
4967 THEN MRESA_TAC MOD_ADD_MOD[`k':num`;`k-1+p MOD k`;`k:num`]
4968 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4969 THEN REMOVE_ASSUM_TAC
4970 THEN MRESA_TAC MOD_ADD_MOD[`q + 1 + k - p MOD k`;`k-1+p MOD k`;`k:num`]
4972 THEN MRESA_TAC DIVISION[`p:num`;`k:num`]
4973 THEN MP_TAC(ARITH_RULE`p MOD k< k==>(((q + 1 + k - p MOD k) + k - 1 + p MOD k))
4976 THEN MRESA_TAC MOD_EQ[`q+2*k`;`q:num`;`k:num`;`2`]
4977 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_bm_v39 s p`][ARITH_RULE`~(4=0)`;periodic]
4978 THEN POP_ASSUM(fun th-> MRESA1_TAC th `q:num`)
4979 THEN REPLICATE_TAC (60-15) (POP_ASSUM MP_TAC)
4980 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4981 THEN MP_TAC(ARITH_RULE`0<k/\ 3<= k'==> (k' - 1 + p MOD k) + k =k' + k - 1 + p MOD k`)
4983 THEN MRESA_TAC th[`k'-1+p MOD k`;`p:num`]
4984 THEN REMOVE_ASSUM_TAC
4986 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_bm_v39 s (k' - 1 + p MOD k)`][ARITH_RULE`~(4=0)`;periodic]
4987 THEN POP_ASSUM(fun th-> MRESA1_TAC th `p:num`)
4990 POP_ASSUM(fun th1->ASM_REWRITE_TAC[SYM th1])
4999 ABBREV_TAC`u= (vv:num->real^3) (p MOD k)`
5000 THEN ABBREV_TAC `w= (vv:num->real^3) (q MOD k)`
5001 THEN ABBREV_TAC`V= IMAGE (vv:num->real^3) (:num)`
5002 THEN ABBREV_TAC`E= IMAGE (\i. {vv i,(vv:num->real^3) (SUC i)}) (:num)`
5003 THEN ABBREV_TAC`FF= IMAGE (\i. (vv i,(vv:num->real^3) (SUC i))) (:num)`
5004 THEN MP_TAC(ARITH_RULE`3<=k'==> k'<=3 \/ ~(k'<=3)`)
5006 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`p MOD scs_k_v39 s`;`vv:num->real^3`]
5007 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`q MOD scs_k_v39 s`;`vv:num->real^3`]
5008 THEN SUBGOAL_THEN`(!i. scs_b_v39 s i (SUC i) <= cstab)`ASSUME_TAC
5013 REPLICATE_TAC (57-23)(POP_ASSUM MP_TAC)
5014 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
5015 THEN MATCH_MP_TAC th)
5016 THEN ASM_REWRITE_TAC[];
5018 SUBGOAL_THEN`norm (u - w:real^3) <= cstab`ASSUME_TAC
5022 MP_TAC(ARITH_RULE`3<=k==> ~(k=0)`)
5025 THEN REWRITE_TAC[periodic2;]
5026 THEN REPEAT STRIP_TAC
5027 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_bm_v39 s (p)`][ARITH_RULE`~(4=0)`;periodic]
5028 THEN POP_ASSUM(fun th-> MRESA1_TAC th `q:num`)
5029 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_bm_v39 s (q MOD k)`][ARITH_RULE`~(4=0)`;periodic]
5030 THEN POP_ASSUM(fun th-> MRESA1_TAC th `p:num`)
5031 THEN REPLICATE_TAC (61-49)(POP_ASSUM MP_TAC)
5032 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
5033 THEN MRESAL_TAC th [`p MOD scs_k_v39 s`;`q MOD scs_k_v39 s`] [ARITH_RULE`SUC 0=1/\ SUC 1=2/\ SUC 2=3`;dist])
5034 THEN POP_ASSUM MP_TAC
5035 THEN REPLICATE_TAC (60-32)(POP_ASSUM MP_TAC)
5036 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
5038 THEN POP_ASSUM MP_TAC
5044 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
5046 THEN MP_TAC TECOXBMv2
5047 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
5049 THEN MRESA_TAC(GEN_ALL Local_lemmas1.EJRCFJD)[`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))`;`(E:(real^3->bool)->bool)`;`w:real^3`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (u,rho_node1 FF u)`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (w,rho_node1 FF w)`;`FF:real^3#real^3->bool`;`u:real^3`]
5050 THEN MP_TAC F_PRIME_EQ_F_vv
5051 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
5053 THEN MP_TAC E_PRIME_EQ_E_vv
5054 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
5056 THEN MP_TAC V_PRIME_EQ_V_vv
5057 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
5059 THEN ASM_REWRITE_TAC[]]);;
5064 let QKNVMLB1_EQ4F= prove_by_refinement(
5065 ` s' = scs_half_slice_v39 s p q d' mkj /\
5066 s'' = scs_half_slice_v39 s q p d'' mkj /\
5067 vv' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s')+p MOD (scs_k_v39 s)))
5068 /\ is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q
5071 (4=scs_k_v39 s /\ scs_bm_v39 s p q <= &4)
5077 THEN POP_ASSUM MP_TAC
5078 (*THEN MP_TAC SCS_HALF_SLICE_IS_SCS
5080 THEN MRESA_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`p:num`;`q:num`;`d':real`;`scs_J_v39 s' p q`]
5081 THEN POP_ASSUM MP_TAC
5082 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;]
5083 THEN MP_TAC SCS_K_PRIME_CASE_3
5085 THEN MP_TAC(ARITH_RULE`3<scs_k_v39 s ==> ~(scs_k_v39 s<=3)`)
5087 THEN REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
5088 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;scs_half_slice_v39;is_scs_v39;scs_diag;scs_v39_explicit]
5089 THEN ABBREV_TAC`k'=(q + 1 + scs_k_v39 s - p MOD scs_k_v39 s) MOD scs_k_v39 s`
5090 THEN ABBREV_TAC`k= scs_k_v39 s`
5091 THEN REPEAT RESA_TAC;
5094 THEN REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
5095 THEN REPEAT STRIP_TAC
5096 THEN ASM_REWRITE_TAC[]
5097 THEN REPLICATE_TAC (51-38) (POP_ASSUM MP_TAC)
5098 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
5099 THEN MATCH_MP_TAC th)
5100 THEN EXISTS_TAC`((x') MOD k'+p MOD k)`
5101 THEN ASM_REWRITE_TAC[SET_RULE`(a:num) IN (:num)`];
5104 REWRITE_TAC[periodic;]
5106 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k':num`;`i:num`][ARITH_RULE`1 * k' + i = (i+k')`];
5108 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
5111 THEN REPLICATE_TAC 2 (POP_ASSUM MP_TAC)
5112 THEN POP_ASSUM(fun th-> MRESA_TAC th[`((i) MOD k'+p MOD k)`;`((j) MOD k'+p MOD k)`])
5115 THEN SUBGOAL_THEN`scs_am_v39 s ((i) MOD k'+p MOD k) ((j) MOD k'+p MOD k)
5116 =scs_am_v39 s p q`ASSUME_TAC;
5118 MP_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1}
5119 ==> (i MOD k' =0 /\ j MOD k'=k'-1)\/ (i MOD k' =k'-1 /\ j MOD k'=0)`)
5121 THEN REWRITE_TAC[ARITH_RULE`0+p=p`]
5123 THEN REWRITE_TAC[periodic2;]
5124 THEN REPEAT STRIP_TAC
5125 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0) /\ 0<scs_k_v39 s`)
5127 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_am_v39 s p`][ARITH_RULE`~(4=0)`;periodic]
5128 THEN POP_ASSUM(fun th-> MRESA1_TAC th `k'+(k-1)+p MOD k:num`)
5129 THEN POP_ASSUM MP_TAC
5130 THEN MRESA_TAC MOD_LT[`k':num`;`k:num`]
5131 THEN MRESA_TAC MOD_ADD_MOD[`k':num`;`k-1+p MOD k`;`k:num`]
5132 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5133 THEN REMOVE_ASSUM_TAC
5134 THEN MRESA_TAC MOD_ADD_MOD[`q + 1 + k - p MOD k`;`k-1+p MOD k`;`k:num`]
5136 THEN MRESA_TAC DIVISION[`p:num`;`k:num`]
5137 THEN MP_TAC(ARITH_RULE`p MOD k< k==>(((q + 1 + k - p MOD k) + k - 1 + p MOD k))
5140 THEN MRESA_TAC MOD_EQ[`q+2*k`;`q:num`;`k:num`;`2`]
5141 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_am_v39 s p`][ARITH_RULE`~(4=0)`;periodic]
5142 THEN POP_ASSUM(fun th-> MRESA1_TAC th `q:num`)
5143 THEN REPLICATE_TAC (60-14) (POP_ASSUM MP_TAC)
5144 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
5145 THEN MP_TAC(ARITH_RULE`0<k/\ 3<= k'==> (k' - 1 + p MOD k) + k =k' + k - 1 + p MOD k`)
5147 THEN MRESA_TAC th[`k'-1+p MOD k`;`p:num`]
5148 THEN REMOVE_ASSUM_TAC
5150 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_am_v39 s (k' - 1 + p MOD k)`][ARITH_RULE`~(4=0)`;periodic]
5151 THEN POP_ASSUM(fun th-> MRESA1_TAC th `p:num`);
5153 POP_ASSUM(fun th1->ASM_REWRITE_TAC[SYM th1]);
5157 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
5160 THEN REPLICATE_TAC 1 (POP_ASSUM MP_TAC)
5161 THEN POP_ASSUM(fun th-> MRESA_TAC th[`((i) MOD k'+p MOD k)`;`((j) MOD k'+p MOD k)`])
5163 THEN SUBGOAL_THEN`scs_bm_v39 s ((i) MOD k'+p MOD k) ((j) MOD k'+p MOD k)
5164 =scs_bm_v39 s p q`ASSUME_TAC;
5166 MP_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k' - 1}
5167 ==> (i MOD k' =0 /\ j MOD k'=k'-1)\/ (i MOD k' =k'-1 /\ j MOD k'=0)`)
5169 THEN REWRITE_TAC[ARITH_RULE`0+p=p`]
5171 THEN REWRITE_TAC[periodic2;]
5172 THEN REPEAT STRIP_TAC
5173 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s ==> ~(scs_k_v39 s = 0) /\ 0<scs_k_v39 s`)
5175 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_bm_v39 s p`][ARITH_RULE`~(4=0)`;periodic]
5176 THEN POP_ASSUM(fun th-> MRESA1_TAC th `k'+(k-1)+p MOD k:num`)
5177 THEN POP_ASSUM MP_TAC
5178 THEN MRESA_TAC MOD_LT[`k':num`;`k:num`]
5179 THEN MRESA_TAC MOD_ADD_MOD[`k':num`;`k-1+p MOD k`;`k:num`]
5180 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5181 THEN REMOVE_ASSUM_TAC
5182 THEN MRESA_TAC MOD_ADD_MOD[`q + 1 + k - p MOD k`;`k-1+p MOD k`;`k:num`]
5184 THEN MRESA_TAC DIVISION[`p:num`;`k:num`]
5185 THEN MP_TAC(ARITH_RULE`p MOD k< k==>(((q + 1 + k - p MOD k) + k - 1 + p MOD k))
5188 THEN MRESA_TAC MOD_EQ[`q+2*k`;`q:num`;`k:num`;`2`]
5189 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_bm_v39 s p`][ARITH_RULE`~(4=0)`;periodic]
5190 THEN POP_ASSUM(fun th-> MRESA1_TAC th `q:num`)
5191 THEN REPLICATE_TAC (60-15) (POP_ASSUM MP_TAC)
5192 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
5193 THEN MP_TAC(ARITH_RULE`0<k/\ 3<= k'==> (k' - 1 + p MOD k) + k =k' + k - 1 + p MOD k`)
5195 THEN MRESA_TAC th[`k'-1+p MOD k`;`p:num`]
5196 THEN REMOVE_ASSUM_TAC
5198 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_bm_v39 s (k' - 1 + p MOD k)`][ARITH_RULE`~(4=0)`;periodic]
5199 THEN POP_ASSUM(fun th-> MRESA1_TAC th `p:num`);
5201 POP_ASSUM(fun th1->ASM_REWRITE_TAC[SYM th1]);
5205 MP_TAC SCS_K_PRIME_CASE_4
5206 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
5208 THEN REPLICATE_TAC (50-31)(POP_ASSUM MP_TAC)
5209 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[SYM th]
5210 THEN REPEAT RESA_TAC)
5211 THEN POP_ASSUM MP_TAC
5212 THEN SUBGOAL_THEN`(!i. scs_b_v39 s i (SUC i) <= cstab)`ASSUME_TAC;
5214 REPLICATE_TAC (48-23)(POP_ASSUM MP_TAC)
5215 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
5216 THEN MATCH_MP_TAC th)
5217 THEN ASM_REWRITE_TAC[];
5223 let QKNVMLB1=prove_by_refinement(
5224 ` (let s' = scs_half_slice_v39 s p q d' mkj in
5225 let vv' = (\i. vv (i MOD (scs_k_v39 s')+ p MOD (scs_k_v39 s))) in
5227 scs_bm_v39 s p q < &4 /\
5228 ((scs_k_v39 s = 4) \/ scs_bm_v39 s p q <= cstab) /\
5229 is_scs_v39 s /\ d' < #0.9 /\ scs_diag (scs_k_v39 s) p q ==>
5232 THEN REWRITE_TAC[LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;]
5235 ABBREV_TAC`s' = scs_half_slice_v39 s p q d' mkj`
5236 THEN ABBREV_TAC`s'' = scs_half_slice_v39 s q p d'' mkj`
5237 THEN ABBREV_TAC`vv' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s')+ p MOD (scs_k_v39 s)))`
5238 THEN MP_TAC(REAL_ARITH`scs_bm_v39 s p q < &4==> scs_bm_v39 s p q <= &4`)
5240 THEN MP_TAC QKNVMLB1_EQ4F
5243 ABBREV_TAC`s' = scs_half_slice_v39 s p q d' mkj`
5244 THEN ABBREV_TAC`s'' = scs_half_slice_v39 s q p d'' mkj`
5245 THEN ABBREV_TAC`vv' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s')+ p MOD (scs_k_v39 s)))`
5246 THEN MP_TAC SCS_K_PRIME_CASE_3
5248 THEN MP_TAC(ARITH_RULE`3 < scs_k_v39 s ==> scs_k_v39 s =4 \/ 4 < scs_k_v39 s`)
5252 THEN REWRITE_TAC[cstab]
5253 THEN REPEAT STRIP_TAC
5254 THEN MP_TAC(REAL_ARITH`scs_bm_v39 s p q <= #3.01 ==> scs_bm_v39 s p q <= &4`)
5256 THEN MP_TAC QKNVMLB1_EQ4F
5259 MP_TAC QKNVMLB1_LE4F
5265 let DIAG_IS_NOT_EAR=prove(`is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q
5266 ==> ~(is_ear_v39 s)`,
5268 THEN MP_TAC SCS_K_PRIME_CASE_3
5270 THEN REWRITE_TAC[is_ear_v39]
5271 THEN POP_ASSUM (fun th-> STRIP_TAC
5273 THEN ASM_REWRITE_TAC[])
5278 let SCS_J_DIAG_EQ=prove(`s'= scs_half_slice_v39 s p q d' mkj /\
5279 s''= scs_half_slice_v39 s q p d'' mkj /\
5280 is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q /\
5281 is_scs_slice_v39 s s' s'' p q
5283 scs_J_v39 s' 0 (scs_k_v39 s' - 1) =scs_J_v39 s'' 0 (scs_k_v39 s'' - 1)`,
5284 ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ]
5286 THEN ABBREV_TAC`k'=(q + 1 + scs_k_v39 s - p MOD scs_k_v39 s) MOD scs_k_v39 s`
5287 THEN ABBREV_TAC`k''=(p + 1 + scs_k_v39 s - q MOD scs_k_v39 s) MOD scs_k_v39 s`
5288 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
5289 THEN MP_TAC SCS_K_PRIME_LE_GE
5290 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
5292 THEN MRESAL_TAC(GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`q:num`;`p:num`;`d'':real`;`mkj:bool`]
5293 [MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
5294 THEN MP_TAC(ARITH_RULE`3<=k' /\ 3<=k''==>0< k' /\ k'-1<k'/\ 0< k'' /\ k''-1<k''`)
5296 THEN MRESA_TAC MOD_LT[`0`;`k':num`]
5297 THEN MRESA_TAC MOD_LT[`0`;`k'':num`]
5298 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
5299 THEN MRESA_TAC MOD_LT[`k''-1`;`k'':num`]);;
5303 let DIAG_NOT_IN_SCS_J=prove(` is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q
5304 ==> ~(scs_J_v39 s p q)`,
5305 ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ]
5307 THEN REPLICATE_TAC (22-17) (POP_ASSUM MP_TAC)
5308 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
5309 THEN MRESAL_TAC th[`p:num`;`q:num`][ADD1;ARITH_RULE`1+i=i+1`]));;
5312 let SCS_J_PRIME_SUBSET_SCS_J=prove_by_refinement(
5313 `scs_half_slice_v39 s p q d' mkj =s'/\
5314 is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q /\
5315 i< scs_k_v39 s'-1 /\ scs_J_v39 s' i (SUC i)
5316 ==> scs_J_v39 s ((i+ p MOD scs_k_v39 s)MOD scs_k_v39 s) (SUC ((i + p MOD scs_k_v39 s)MOD scs_k_v39 s))`,
5318 THEN POP_ASSUM MP_TAC
5319 THEN POP_ASSUM MP_TAC
5321 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
5322 THEN ABBREV_TAC`k'=(q + 1 + scs_k_v39 s - p MOD scs_k_v39 s) MOD scs_k_v39 s`
5324 THEN ABBREV_TAC`k= scs_k_v39 s`
5325 THEN MP_TAC SCS_K_PRIME_CASE_3
5327 THEN MRESAL_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`p:num`;`q:num`;`d':real`;`scs_J_v39 s' p q`][MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
5328 THEN MP_TAC(ARITH_RULE`i<k'-1/\ k'< k==> i<k'/\ SUC i<k'/\ i<k/\ SUC i<k`)
5330 THEN MRESA_TAC MOD_LT[`i:num`;`k':num`]
5331 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
5332 THEN MRESA_TAC MOD_LT[`SUC i:num`;`k':num`]
5333 THEN MRESA_TAC MOD_LT[`SUC i:num`;`k:num`]
5334 THEN MP_TAC(SET_RULE`{i, SUC i} = {0, k' - 1} \/ ~({i, SUC i} = {0, k' - 1})`)
5337 MP_TAC(SET_RULE`{i, SUC i} = {0, k' - 1} ==> (i=0 /\ SUC i= k'-1) \/ (i= k'-1 /\ SUC i=0)`)
5340 REWRITE_TAC[ADD1;ARITH_RULE`SUC i+A=SUC(i+A)`];
5343 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0 = k' - 1<=> k'=2`]
5344 THEN REPLICATE_TAC (19-7) (POP_ASSUM MP_TAC)
5345 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
5347 THEN ASM_REWRITE_TAC[]
5355 THEN REWRITE_TAC[periodic;periodic2;is_scs_v39]
5356 THEN REPEAT STRIP_TAC
5357 THEN MP_TAC(ARITH_RULE`3<k==> ~(k=0)/\ 1<k /\ 1 + (i + p) MOD k =SUC((i+p) MOD k)/\ 1 + i + p= SUC i+p`)
5359 THEN MRESA_TAC MOD_LT[`1`;`k:num`]
5360 THEN MRESA_TAC MOD_ADD_MOD[`i:num`;`p:num`;`k:num`]
5361 THEN MRESA_TAC MOD_ADD_MOD[`SUC i:num`;`p:num`;`k:num`]
5362 THEN MRESA_TAC MOD_ADD_MOD[`1:num`;`i+p:num`;`k:num`]
5363 THEN MRESAL_TAC (GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_J_v39 s (SUC i + p MOD k)`][periodic;ARITH_RULE`1 MOD 4=1 /\ SUC 1=2/\ 1<4/\ ~(4=0)`]
5364 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(i + p MOD k):num`)
5365 THEN MRESAL_TAC (GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_J_v39 s ((i + p MOD k) MOD k)`][periodic;ARITH_RULE`1 MOD 4=1 /\ SUC 1=2/\ 1<4/\ ~(4=0)`]
5366 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(SUC i + p MOD k):num`
5367 THEN MRESA1_TAC th`SUC((i+p) MOD k)`)]);;
5371 let INTER_SLICE_SCS_EMPTY1=prove_by_refinement(
5372 ` scs_half_slice_v39 s p q d' mkj =s'/\
5373 scs_half_slice_v39 s q p d'' mkj =s'' /\
5374 is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q /\
5375 p MOD scs_k_v39 s <q MOD scs_k_v39 s
5377 {(i + p MOD scs_k_v39 s) MOD scs_k_v39 s | i < scs_k_v39 s'-1 }
5378 INTER {(i + q MOD scs_k_v39 s)MOD scs_k_v39 s | i < scs_k_v39 s''-1 }={}
5381 REWRITE_TAC[SET_RULE`A INTER B={}<=> ~(?a. a IN A INTER B)`;INTER]
5384 THEN EXPAND_TAC"s''"
5385 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39;IN_ELIM_THM]
5386 THEN ABBREV_TAC`k'=(q + 1 + scs_k_v39 s - p MOD scs_k_v39 s) MOD scs_k_v39 s`
5387 THEN ABBREV_TAC`k''=(p + 1 + scs_k_v39 s - q MOD scs_k_v39 s) MOD scs_k_v39 s`
5388 THEN ABBREV_TAC`k= scs_k_v39 s`
5389 THEN REPEAT STRIP_TAC
5390 THEN POP_ASSUM (fun th->ASM_TAC
5391 THEN REWRITE_TAC[th]
5392 THEN REPEAT STRIP_TAC)
5393 THEN MRESAL_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`p:num`;`q:num`;`d':real`;`scs_J_v39 s' p q`][MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39;IN_ELIM_THM]
5394 THEN SUBGOAL_THEN`(k'-1 +p MOD k) <= q MOD k `ASSUME_TAC;
5396 MP_TAC(ARITH_RULE`3<= k' /\ k'<k /\ p MOD k< q MOD k ==> ~(k=0)/\ (q +k -p MOD k)+1=q + 1 + k - p MOD k/\ 1<k `)
5398 THEN MRESA_TAC MOD_LE[`q:num`;`k:num`]
5399 THEN MRESA_TAC DIVISION[`p:num`;`k:num`]
5400 THEN MP_TAC(ARITH_RULE`q MOD k <= q /\ p MOD k< q MOD k/\ p MOD k< k ==> q+k- p MOD k= 1*k + (q- p MOD k)`)
5402 THEN MRESA_TAC MOD_MULT_ADD[`1`;`k:num`;`q-p MOD k`]
5403 THEN MRESA_TAC MOD_LT[`1`;`k:num`]
5404 THEN MRESA_TAC DIVISION[`q:num`;`k:num`]
5405 THEN MRESA_TAC MOD_ADD_MOD[`q+k-p MOD k`;`1`;`k:num`]
5406 THEN POP_ASSUM MP_TAC
5407 THEN REMOVE_ASSUM_TAC
5408 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
5409 THEN MP_TAC(ARITH_RULE`q MOD k <= q /\ p MOD k< q MOD k/\ p MOD k< k ==> (q DIV k * k + q MOD k)- p MOD k= (q DIV k)*k + (q MOD k- p MOD k)`)
5411 THEN MRESA_TAC MOD_MULT_ADD[`q DIV k `;`k:num`;`q MOD k-p MOD k`]
5412 THEN MRESA_TAC DIVISION[`q:num`;`k:num`]
5413 THEN MP_TAC(ARITH_RULE` p MOD k< q MOD k/\ q MOD k< k ==> q MOD k- p MOD k<k`)
5415 THEN MRESA_TAC MOD_LT[`q MOD k - p MOD k`;`k:num`]
5417 THEN MRESA_TAC MOD_LE[`q MOD k - p MOD k +1:num`;`k:num`]
5418 THEN MP_TAC(ARITH_RULE`k' <= q MOD k - p MOD k + 1
5419 /\ 3<= k' ==> k' -1 + p MOD k <= q MOD k`)
5421 THEN REPLICATE_TAC (32-26) (POP_ASSUM MP_TAC)
5422 THEN POP_ASSUM(fun th->
5424 THEN ONCE_REWRITE_TAC[SYM th] THEN ASSUME_TAC(SYM th))
5425 THEN ASM_REWRITE_TAC[];
5427 MP_TAC(ARITH_RULE`3<= k' /\ k'<k /\ p MOD k< q MOD k ==> ~(k=0)/\ (q +k -p MOD k)+1=q + 1 + k - p MOD k/\ 1<k `)
5429 THEN MRESA_TAC DIVISION[`q:num`;`k:num`]
5430 THEN MP_TAC(ARITH_RULE`i< k'-1 /\ k'-1 + p MOD k <= q MOD k/\ 3<=k' /\ q MOD k < k
5431 ==> i + p MOD k < q MOD k/\ i + p MOD k<k`)
5433 THEN SUBGOAL_THEN`(k'' +q MOD k) <= k+ p MOD k+1 `ASSUME_TAC;
5435 MP_TAC(ARITH_RULE`(p +k -q MOD k)+1=(p + 1 + k - q MOD k) `)
5437 THEN EXPAND_TAC"k''"
5438 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5439 THEN MRESA_TAC MOD_LT[`1`;`k:num`]
5440 THEN MRESA_TAC MOD_ADD_MOD[`p+k-q MOD k`;`1`;`k:num`]
5441 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5442 THEN MRESA_TAC DIVISION[`p:num`;`k:num`]
5443 THEN REMOVE_ASSUM_TAC
5444 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th]
5445 THEN MP_TAC(ARITH_RULE`(p DIV k * k + p MOD k) + k - q MOD k= (p DIV k)*k + (p MOD k + k - q MOD k)`)
5447 THEN MRESA_TAC MOD_MULT_ADD[`p DIV k `;`k:num`;`p MOD k + k - q MOD k`]
5448 THEN ONCE_REWRITE_TAC[SYM th])
5449 THEN MRESA_TAC MOD_LE[`p MOD k + k - q MOD k:num`;`k:num`]
5450 THEN MRESA_TAC MOD_LE[`(p MOD k + k - q MOD k) MOD k +1:num`;`k:num`]
5451 THEN MP_TAC(ARITH_RULE`(p MOD k + k - q MOD k) MOD k <= p MOD k + k - q MOD k
5452 /\ ((p MOD k + k - q MOD k) MOD k + 1) MOD k <=
5453 (p MOD k + k - q MOD k) MOD k + 1 /\ q MOD k <k
5454 ==> ((p MOD k + k - q MOD k) MOD k + 1) MOD k + q MOD k <= k+ p MOD k +1`)
5458 THEN REWRITE_TAC[scs_diag]
5459 THEN REPEAT STRIP_TAC
5460 THEN MRESAL_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`q:num`;`p:num`;`d'':real`;`scs_J_v39 s' p q`][MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;scs_diag;is_scs_v39;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39;IN_ELIM_THM]
5461 THEN MP_TAC(ARITH_RULE`i'<k''-1 /\ 3<= k'' /\ k'' + q MOD k <= k + p MOD k + 1
5462 ==> i'+ q MOD k < k + p MOD k `)
5464 THEN MP_TAC(ARITH_RULE`i'+ q MOD k< k \/ k <= i' + q MOD k `)
5467 MRESA_TAC MOD_LT[`i' + q MOD k`;`k:num`]
5468 THEN MRESA_TAC MOD_LT[`i + p MOD k`;`k:num`]
5469 THEN MP_TAC(ARITH_RULE`q MOD k<= i'+ q MOD k`)
5471 THEN POP_ASSUM MP_TAC
5473 THEN ASM_REWRITE_TAC[ARITH_RULE`~(q MOD k <= i + p MOD k)<=> i + p MOD k< q MOD k`];
5475 MRESA_TAC DIVISION[`p:num`;`k:num`]
5477 MP_TAC(ARITH_RULE`i' + q MOD k < k + p MOD k
5478 /\ k <= i' + q MOD k /\ p MOD k<k
5479 ==> 1 * k + (i' + q MOD k) - k = i' + q MOD k /\ (i' + q MOD k) - k <k /\ (i' + q MOD k) - k < p MOD k`)
5481 THEN MRESA_TAC MOD_LT[`(i' + q MOD k)-k`;`k:num`]
5482 THEN MRESA_TAC MOD_LT[`i + p MOD k`;`k:num`]
5483 THEN MRESA_TAC MOD_MULT_ADD[`1 `;`k:num`;`(i' + q MOD k) -k`]
5484 THEN MP_TAC(ARITH_RULE`i< k'-1 /\ k'-1 + p MOD k <= q MOD k/\ 3<=k' /\ q MOD k < k
5485 ==> p MOD k <= i + p MOD k/\ i + p MOD k < q MOD k/\ i + p MOD k<k`)
5487 THEN POP_ASSUM MP_TAC
5488 THEN REMOVE_ASSUM_TAC
5489 THEN REMOVE_ASSUM_TAC
5490 THEN REMOVE_ASSUM_TAC
5491 THEN POP_ASSUM MP_TAC
5495 let INTER_SLICE_SCS_EMPTY=prove(` scs_half_slice_v39 s p q d' mkj =s'/\
5496 scs_half_slice_v39 s q p d'' mkj =s'' /\
5497 is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q
5499 {(i + p MOD scs_k_v39 s) MOD scs_k_v39 s | i < scs_k_v39 s'-1 }
5500 INTER {(i + q MOD scs_k_v39 s)MOD scs_k_v39 s | i < scs_k_v39 s''-1 }={}
5502 REWRITE_TAC[scs_diag]
5504 THEN MP_TAC(ARITH_RULE`~(p MOD scs_k_v39 s = q MOD scs_k_v39 s)
5505 ==> (p MOD scs_k_v39 s < q MOD scs_k_v39 s)\/ (q MOD scs_k_v39 s < p MOD scs_k_v39 s)`)
5508 MATCH_MP_TAC INTER_SLICE_SCS_EMPTY1
5509 THEN ASM_REWRITE_TAC[scs_diag];
5510 ONCE_REWRITE_TAC[SET_RULE`A INTER B= B INTER A`]
5511 THEN MATCH_MP_TAC (GEN_ALL INTER_SLICE_SCS_EMPTY1)
5512 THEN ASM_REWRITE_TAC[scs_diag]
5513 THEN EXISTS_TAC`d'':real`
5514 THEN EXISTS_TAC`d':real`
5515 THEN EXISTS_TAC`mkj:bool`
5516 THEN ASM_REWRITE_TAC[]]);;
5522 let QKNVMLB2 = prove_by_refinement(
5523 ` scs_half_slice_v39 s p q d' mkj =s'/\
5524 scs_half_slice_v39 s q p d'' mkj =s'' /\
5525 vv' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s')+p MOD (scs_k_v39 s)))
5527 vv'' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s'')+q MOD (scs_k_v39 s)))
5530 is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q /\
5531 is_scs_slice_v39 s s' s'' p q /\
5532 scs_d_v39 s <= d' + d'' ==>
5533 dsv_v39 s vv <= dsv_v39 s' vv' + dsv_v39 s'' vv''`,
5537 THEN POP_ASSUM MP_TAC
5538 (*THEN MP_TAC SCS_HALF_SLICE_IS_SCS
5540 THEN MRESA_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`p:num`;`q:num`;`d':real`;`scs_J_v39 s' p q`]
5541 THEN POP_ASSUM MP_TAC
5542 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;]
5543 THEN MRESA_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`q:num`;`p:num`;`d'':real`;`scs_J_v39 s' p q`]
5544 THEN POP_ASSUM MP_TAC
5545 THEN ASM_REWRITE_TAC[LET_DEF;LET_END_DEF;]
5546 THEN MP_TAC SCS_K_PRIME_CASE_3
5548 THEN MP_TAC DIAG_IS_NOT_EAR
5550 THEN MP_TAC(ARITH_RULE`3<scs_k_v39 s ==> ~(scs_k_v39 s<=3)`)
5552 THEN MP_TAC DIAG_NOT_IN_SCS_J
5554 THEN REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
5555 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;]
5556 THEN ABBREV_TAC`k'=(q + 1 + scs_k_v39 s - p MOD scs_k_v39 s) MOD scs_k_v39 s`
5557 THEN ABBREV_TAC`k''=(p + 1 + scs_k_v39 s - q MOD scs_k_v39 s) MOD scs_k_v39 s`
5558 THEN ABBREV_TAC`k= scs_k_v39 s`
5559 THEN REPEAT RESA_TAC
5565 REPLICATE_TAC (49-37) (POP_ASSUM MP_TAC)
5566 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN ASSUME_TAC(SYM th))
5567 THEN REPEAT STRIP_TAC
5568 THEN REPLICATE_TAC (7) (POP_ASSUM MP_TAC)
5569 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
5570 THEN REPEAT RESA_TAC
5571 THEN SUBGOAL_THEN`FINITE {i | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)}
5576 MATCH_MP_TAC FINITE_SUBSET
5577 THEN EXISTS_TAC`0.. (scs_k_v39 s' -1)`
5578 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
5582 SUBGOAL_THEN`{i | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)} INTER
5583 {i| i=scs_k_v39 s' - 1/\ scs_J_v39 s' (scs_k_v39 s' - 1) (SUC (scs_k_v39 s' - 1)) }={}` ASSUME_TAC
5587 REWRITE_TAC[INTER;SET_RULE`A={}<=> ~(?a. a IN A)`;IN_ELIM_THM;IN_SING]
5592 SUBGOAL_THEN`{i | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)} UNION
5593 {i| i=scs_k_v39 s' - 1/\ scs_J_v39 s' (scs_k_v39 s' - 1) (SUC(scs_k_v39 s'-1)) }={i | i < scs_k_v39 s' /\ scs_J_v39 s' i (SUC i)}`
5597 REWRITE_TAC[UNION;IN_SING;IN_ELIM_THM;EXTENSION]
5599 THEN EXPAND_TAC "s'"
5600 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
5601 THEN ASM_REWRITE_TAC[]
5602 THEN REPLICATE_TAC (47-43) REMOVE_ASSUM_TAC
5610 REPLICATE_TAC (47-40) (POP_ASSUM MP_TAC)
5616 MP_TAC(ARITH_RULE`3<=k' ==>SUC (k' - 1) =k'/\ k'-1<k'`)
5622 THEN MP_TAC(ARITH_RULE`x<k' /\ 3<= k' ==> x< k'-1 \/ (x=k'-1)`)
5624 THEN POP_ASSUM (fun th->
5626 THEN REWRITE_TAC[th]
5633 {i | i = scs_k_v39 s' - 1 /\
5634 scs_J_v39 s' (scs_k_v39 s' - 1) (SUC (scs_k_v39 s' - 1))}`ASSUME_TAC
5638 MATCH_MP_TAC FINITE_SUBSET
5639 THEN EXISTS_TAC`{(scs_k_v39 s' -1)}`
5640 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_SING;FINITE_SING]
5645 MRESAL_TAC SUM_INCL_EXCL[`{i | i < scs_k_v39 s'-1 /\ scs_J_v39 s' i (SUC i)}`;`{i| i=scs_k_v39 s' - 1/\ scs_J_v39 s' (scs_k_v39 s' - 1) (SUC(scs_k_v39 s'-1)) }`;`(\i. cstab -
5647 ((vv:num->real^3) (i MOD scs_k_v39 s' + p MOD k),
5648 vv (SUC i MOD scs_k_v39 s' + p MOD k)))`][FINITE_SING;SUM_SING;SUM_CLAUSES;REAL_ARITH`a+ &0=a`]
5649 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5650 THEN SUBGOAL_THEN`FINITE {i | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}
5655 MATCH_MP_TAC FINITE_SUBSET
5656 THEN EXISTS_TAC`0.. (scs_k_v39 s'' -1)`
5657 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
5661 SUBGOAL_THEN`{i | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)} INTER
5662 {i| i=scs_k_v39 s'' - 1/\ scs_J_v39 s'' (scs_k_v39 s'' - 1) (SUC (scs_k_v39 s'' - 1)) }={}` ASSUME_TAC
5666 REWRITE_TAC[INTER;SET_RULE`A={}<=> ~(?a. a IN A)`;IN_ELIM_THM;IN_SING]
5671 SUBGOAL_THEN`{i | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)} UNION
5672 {i| i=scs_k_v39 s'' - 1/\ scs_J_v39 s'' (scs_k_v39 s'' - 1) (SUC(scs_k_v39 s''-1)) }={i | i < scs_k_v39 s'' /\ scs_J_v39 s'' i (SUC i)}`
5676 REWRITE_TAC[UNION;IN_SING;IN_ELIM_THM;EXTENSION]
5678 THEN EXPAND_TAC "s''"
5679 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
5680 THEN ASM_REWRITE_TAC[]
5681 THEN REPLICATE_TAC (47-43) REMOVE_ASSUM_TAC
5689 REPLICATE_TAC (47-40) (POP_ASSUM MP_TAC)
5695 MP_TAC(ARITH_RULE`3<=k'' ==>SUC (k'' - 1) =k''/\ k''-1<k''`)
5701 THEN MP_TAC(ARITH_RULE`x<k'' /\ 3<= k'' ==> x< k''-1 \/ (x=k''-1)`)
5703 THEN POP_ASSUM (fun th->
5705 THEN REWRITE_TAC[th]
5712 {i | i = scs_k_v39 s'' - 1 /\
5713 scs_J_v39 s'' (scs_k_v39 s'' - 1) (SUC (scs_k_v39 s'' - 1))}`ASSUME_TAC
5717 MATCH_MP_TAC FINITE_SUBSET
5718 THEN EXISTS_TAC`{(scs_k_v39 s'' -1)}`
5719 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_SING;FINITE_SING]
5724 MRESAL_TAC SUM_INCL_EXCL[`{i | i < scs_k_v39 s''-1 /\ scs_J_v39 s'' i (SUC i)}`;`{i| i=scs_k_v39 s'' - 1/\ scs_J_v39 s'' (scs_k_v39 s'' - 1) (SUC(scs_k_v39 s''-1)) }`;`(\i. cstab -
5726 ((vv:num->real^3) (i MOD scs_k_v39 s'' + q MOD k),
5727 vv (SUC i MOD scs_k_v39 s'' + q MOD k)))`][FINITE_SING;SUM_SING;SUM_CLAUSES;REAL_ARITH`a+ &0=a`]
5728 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5729 THEN SUBGOAL_THEN`sum
5730 {i | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)}
5733 (vv (i MOD scs_k_v39 s' + p MOD k),
5734 (vv:num->real^3) (SUC i MOD scs_k_v39 s' + p MOD k)))
5736 {(i + p MOD scs_k_v39 s) MOD scs_k_v39 s | i < scs_k_v39 s'-1
5737 /\ scs_J_v39 s' i (SUC i)}
5741 vv (SUC i )))`ASSUME_TAC
5746 MATCH_MP_TAC SUM_EQ_GENERAL
5747 THEN REWRITE_TAC[IN_ELIM_THM]
5748 THEN EXISTS_TAC`(\i. (i + p MOD scs_k_v39 s) MOD scs_k_v39 s)`
5749 THEN ASM_REWRITE_TAC[EXISTS_UNIQUE]
5750 THEN REPEAT RESA_TAC;
5754 THEN ASM_REWRITE_TAC[]
5760 THEN REPLICATE_TAC (47-40) (POP_ASSUM MP_TAC)
5761 THEN EXPAND_TAC "s'"
5762 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
5763 THEN ASM_REWRITE_TAC[]
5764 THEN REPEAT STRIP_TAC
5765 THEN MP_TAC(ARITH_RULE`i<k'-1/\ y'<k'-1 /\ k'< k/\ 3<=k' ==> i<k /\ y'<k/\ ~(k=0)`)
5767 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
5768 THEN MRESA_TAC MOD_LT[`y':num`;`k:num`]
5769 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`i:num`;`y':num`;`p MOD k`;`k:num`][ADD_SYM];
5774 THEN ASM_REWRITE_TAC[]
5779 THEN POP_ASSUM MP_TAC
5780 THEN EXPAND_TAC "s'"
5781 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
5782 THEN ASM_REWRITE_TAC[]
5783 THEN REPEAT STRIP_TAC
5784 THEN MP_TAC(ARITH_RULE`x<k'-1/\ 3<=k'/\k'<k ==> x<k'/\ ~(k'=0)/\ SUC x< k'/\ ~(k=0)/\ 1<k`)
5786 THEN MRESA_TAC MOD_LT[`x:num`;`k':num`]
5787 THEN MRESA_TAC MOD_LT[`SUC x:num`;`k':num`]
5789 THEN REWRITE_TAC[periodic2;MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
5790 THEN REPEAT STRIP_TAC
5791 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`;periodic]
5792 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x + p MOD k):num`
5793 THEN MRESA1_TAC th ` ((x + p MOD k) +1):num`
5794 THEN MRESA1_TAC th ` SUC ((x + p MOD k) MOD k):num`)
5795 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5796 THEN REWRITE_TAC[ADD1]
5797 THEN MRESA_TAC MOD_LT[`1`;`k:num`]
5798 THEN MRESA_TAC MOD_ADD_MOD[`x+p MOD k`;`1`;`k:num`]
5799 THEN REWRITE_TAC[ARITH_RULE`((x + p MOD k) + 1)= (x+ 1) + p MOD k`]
5806 {i | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}
5809 (vv (i MOD scs_k_v39 s'' + q MOD k),
5810 (vv:num->real^3) (SUC i MOD scs_k_v39 s'' + q MOD k)))
5812 {(i + q MOD scs_k_v39 s) MOD scs_k_v39 s | i < scs_k_v39 s''-1
5813 /\ scs_J_v39 s'' i (SUC i)}
5817 vv (SUC i )))`ASSUME_TAC
5822 MATCH_MP_TAC SUM_EQ_GENERAL
5823 THEN REWRITE_TAC[IN_ELIM_THM]
5824 THEN EXISTS_TAC`(\i. (i + q MOD scs_k_v39 s) MOD scs_k_v39 s)`
5825 THEN ASM_REWRITE_TAC[EXISTS_UNIQUE]
5826 THEN REPEAT RESA_TAC;
5830 THEN ASM_REWRITE_TAC[]
5836 THEN REPLICATE_TAC (47-40) (POP_ASSUM MP_TAC)
5837 THEN EXPAND_TAC "s''"
5838 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
5839 THEN ASM_REWRITE_TAC[]
5840 THEN REPEAT STRIP_TAC
5841 THEN MP_TAC(ARITH_RULE`i<k''-1/\ y'<k''-1 /\ k''< k/\ 3<=k'' ==> i<k /\ y'<k/\ ~(k=0)`)
5843 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
5844 THEN MRESA_TAC MOD_LT[`y':num`;`k:num`]
5845 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`i:num`;`y':num`;`q MOD k`;`k:num`][ADD_SYM];
5850 THEN ASM_REWRITE_TAC[]
5855 THEN POP_ASSUM MP_TAC
5856 THEN EXPAND_TAC "s''"
5857 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
5858 THEN ASM_REWRITE_TAC[]
5859 THEN REPEAT STRIP_TAC
5860 THEN MP_TAC(ARITH_RULE`x<k''-1/\ 3<=k''/\k''<k ==> x<k''/\ ~(k''=0)/\ SUC x< k''/\ ~(k=0)/\ 1<k`)
5862 THEN MRESA_TAC MOD_LT[`x:num`;`k'':num`]
5863 THEN MRESA_TAC MOD_LT[`SUC x:num`;`k'':num`]
5865 THEN REWRITE_TAC[periodic2;MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
5866 THEN REPEAT STRIP_TAC
5867 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`;periodic]
5868 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x + q MOD k):num`
5869 THEN MRESA1_TAC th ` ((x + q MOD k) +1):num`
5870 THEN MRESA1_TAC th ` SUC ((x + q MOD k) MOD k):num`)
5871 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5872 THEN REWRITE_TAC[ADD1]
5873 THEN MRESA_TAC MOD_LT[`1`;`k:num`]
5874 THEN MRESA_TAC MOD_ADD_MOD[`x+q MOD k`;`1`;`k:num`]
5875 THEN REWRITE_TAC[ARITH_RULE`((x + q MOD k) + 1)= (x+ 1) + q MOD k`]
5881 REAL_ARITH`a + b * (-- &1) *c <= (a1 + b * d1 *(c1+c2)) + a2 + b * d2 *(c3+c4)
5882 <=> &0<= (a1+ a2-a) + b*(c+ d1* c1 +d2*c3)+ b*(d1* c2+ d2* c4)`]
5883 THEN MATCH_MP_TAC(REAL_ARITH`&0<=a /\ &0<=b /\ &0<=c==> &0<= a+b+c`)
5887 THEN EXPAND_TAC "s''"
5888 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
5889 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
5897 MATCH_MP_TAC(REAL_ARITH`&0<= a==> &0<= #0.1 *a`)
5898 THEN SUBGOAL_THEN`-- &1<= if is_ear_v39 s' then &1 else -- &1` ASSUME_TAC;
5902 MP_TAC(SET_RULE`is_ear_v39 s' \/ ~(is_ear_v39 s')`)
5904 THEN REAL_ARITH_TAC;
5907 SUBGOAL_THEN`-- &1<= if is_ear_v39 s'' then &1 else -- &1` ASSUME_TAC;
5911 MP_TAC(SET_RULE`is_ear_v39 s'' \/ ~(is_ear_v39 s'')`)
5913 THEN REAL_ARITH_TAC;
5917 SUBGOAL_THEN`&0<= sum {(i + p MOD k) MOD k | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)}
5918 (\i. cstab - dist ((vv:num->real^3) i,vv (SUC i)))`ASSUME_TAC
5923 MATCH_MP_TAC SUM_POS_LE
5924 THEN ASM_REWRITE_TAC[]
5929 MATCH_MP_TAC FINITE_SUBSET
5930 THEN EXISTS_TAC`0.. k`
5931 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG;ARITH_RULE`0<= a`]
5934 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)`)
5936 THEN MRESA_TAC DIVISION[`i + p MOD k`;`k:num`]
5937 THEN POP_ASSUM MP_TAC
5942 REWRITE_TAC[IN_ELIM_THM]
5943 THEN REPEAT RESA_TAC
5945 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist]
5946 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
5947 THEN REPEAT RESA_TAC
5948 THEN REPLICATE_TAC (75-6)(POP_ASSUM MP_TAC)
5949 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
5950 THEN MRESA_TAC th[`(i + p MOD k) MOD k`;`SUC ((i + p MOD k) MOD k)`])
5951 THEN REPLICATE_TAC (76-34)(POP_ASSUM MP_TAC)
5952 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
5953 THEN MRESA1_TAC th`(i + p MOD k) MOD k`)
5954 THEN POP_ASSUM MP_TAC
5955 THEN POP_ASSUM MP_TAC
5962 SUBGOAL_THEN`&0<= sum {(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}
5963 (\i. cstab - dist ((vv:num->real^3) i,vv (SUC i)))`ASSUME_TAC
5968 MATCH_MP_TAC SUM_POS_LE
5969 THEN ASM_REWRITE_TAC[]
5974 MATCH_MP_TAC FINITE_SUBSET
5975 THEN EXISTS_TAC`0.. k`
5976 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG;ARITH_RULE`0<= a`]
5979 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)`)
5981 THEN MRESA_TAC DIVISION[`i + q MOD k`;`k:num`]
5982 THEN POP_ASSUM MP_TAC
5987 REWRITE_TAC[IN_ELIM_THM]
5988 THEN REPEAT RESA_TAC
5990 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist]
5991 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
5992 THEN REPEAT RESA_TAC
5993 THEN REPLICATE_TAC (76-6)(POP_ASSUM MP_TAC)
5994 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
5995 THEN MRESA_TAC th[`(i + q MOD k) MOD k`;`SUC ((i + q MOD k) MOD k)`])
5996 THEN REPLICATE_TAC (77-34)(POP_ASSUM MP_TAC)
5997 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
5998 THEN MRESA1_TAC th`(i + q MOD k) MOD k`)
5999 THEN POP_ASSUM MP_TAC
6000 THEN POP_ASSUM MP_TAC
6006 MRESA_TAC REAL_LE_RMUL[`-- &1`;`(if is_ear_v39 s' then &1 else -- &1)`;`sum {(i + p MOD k) MOD k | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)}
6007 (\i. cstab - dist (vv i,(vv:num->real^3) (SUC i)))`]
6008 THEN MRESA_TAC REAL_LE_RMUL[`-- &1`;`(if is_ear_v39 s'' then &1 else -- &1)`;`sum {(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}
6009 (\i. cstab - dist (vv i,(vv:num->real^3) (SUC i)))`]
6010 THEN SUBGOAL_THEN`FINITE
6011 {(i + p MOD k) MOD k | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)}`ASSUME_TAC
6016 MATCH_MP_TAC FINITE_SUBSET
6017 THEN EXISTS_TAC`0.. k`
6018 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG;ARITH_RULE`0<= a`]
6021 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)`)
6023 THEN MRESA_TAC DIVISION[`i + q MOD k`;`k:num`]
6024 THEN POP_ASSUM MP_TAC
6030 {(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}`ASSUME_TAC
6035 MATCH_MP_TAC FINITE_SUBSET
6036 THEN EXISTS_TAC`0.. k`
6037 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG;ARITH_RULE`0<= a`]
6040 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)`)
6042 THEN MRESA_TAC DIVISION[`i + q MOD k`;`k:num`]
6043 THEN POP_ASSUM MP_TAC
6048 sum {i | i < k /\ scs_J_v39 s i (SUC i)}
6049 (\i. cstab - dist (vv i,vv (SUC i))) -
6050 (sum {(i + p MOD k) MOD k | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)}
6051 (\i. cstab - dist (vv i,vv (SUC i))) +
6052 sum {(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}
6053 (\i. cstab - dist (vv i,(vv:num->real^3) (SUC i))))` ASSUME_TAC
6057 SUBGOAL_THEN`(!i. scs_b_v39 s i (SUC i) <= cstab)`ASSUME_TAC;
6061 REPLICATE_TAC (67-24)(POP_ASSUM MP_TAC)
6062 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6063 THEN MATCH_MP_TAC th)
6064 THEN ASM_REWRITE_TAC[];
6070 MP_TAC INTER_SLICE_SCS_EMPTY
6071 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist]
6072 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
6073 THEN REPLICATE_TAC (68-37)(POP_ASSUM MP_TAC)
6074 THEN POP_ASSUM(fun th->
6076 THEN REWRITE_TAC[th]
6077 THEN ASSUME_TAC th THEN REPEAT RESA_TAC)
6078 THEN SUBGOAL_THEN`{(i + p MOD k) MOD k | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)} INTER
6079 {(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\
6080 scs_J_v39 s'' i (SUC i)}={}`ASSUME_TAC
6085 THEN REWRITE_TAC[INTER;IN_ELIM_THM]
6091 MRESAL_TAC SUM_INCL_EXCL[`{(i + p MOD k) MOD k | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)}`;`{(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}`;`(\i. cstab - dist ((vv:num->real^3) i,vv (SUC i)))`][SUM_CLAUSES;REAL_ARITH`a+ &0=a`;dist]
6092 THEN SUBGOAL_THEN`{(i + p MOD k) MOD k | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)} UNION
6093 {(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}
6094 SUBSET {i | i < k /\ scs_J_v39 s i (SUC i)}`ASSUME_TAC
6099 REWRITE_TAC[UNION;IN_ELIM_THM;SUBSET]
6100 THEN REPEAT RESA_TAC
6106 MP_TAC(ARITH_RULE`3<k==> ~(k=0)`)
6108 THEN MRESA_TAC DIVISION[`i + p MOD k`;`k:num`]
6115 MP_TAC SCS_J_PRIME_SUBSET_SCS_J
6116 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist]
6117 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
6123 MP_TAC(ARITH_RULE`3<k==> ~(k=0)`)
6125 THEN MRESA_TAC DIVISION[`i + q MOD k`;`k:num`]
6130 MRESA_TAC(GEN_ALL SCS_J_PRIME_SUBSET_SCS_J)[`d'':real`;`mkj:bool`;`p:num`;`s'':scs_v39`;`i:num`;`q:num`;`s:scs_v39`]
6131 THEN POP_ASSUM MATCH_MP_TAC
6132 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist]
6133 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`];
6137 SUBGOAL_THEN`FINITE {i | i < k /\ scs_J_v39 s i (SUC i)}` ASSUME_TAC
6141 MATCH_MP_TAC FINITE_SUBSET
6142 THEN EXISTS_TAC`0..k`
6143 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
6148 MRESA_TAC SUM_DIFF[`(\i. cstab - norm (vv i - (vv:num->real^3) (SUC i)))`;`{i | i < k /\ scs_J_v39 s i (SUC i)}`;`{(i + p MOD k) MOD k | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)} UNION
6149 {(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}`;]
6150 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6151 THEN MATCH_MP_TAC SUM_POS_LE
6152 THEN ASM_REWRITE_TAC[]
6157 MATCH_MP_TAC FINITE_SUBSET
6158 THEN EXISTS_TAC`0.. k`
6159 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET; DIFF;IN_ELIM_THM;IN_NUMSEG;ARITH_RULE`0<= a`]
6165 REWRITE_TAC[IN_ELIM_THM;DIFF]
6166 THEN REPEAT RESA_TAC
6168 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist]
6169 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
6170 THEN REPEAT RESA_TAC
6171 THEN REPLICATE_TAC (87-7)(POP_ASSUM MP_TAC)
6172 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6173 THEN MRESA_TAC th[`x:num`;`SUC (x)`])
6174 THEN REPLICATE_TAC (88-78)(POP_ASSUM MP_TAC)
6175 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6176 THEN MRESA1_TAC th`x:num`)
6177 THEN POP_ASSUM MP_TAC
6178 THEN POP_ASSUM MP_TAC
6179 THEN REAL_ARITH_TAC;
6184 MATCH_MP_TAC(REAL_ARITH`-- &1 *a <=c* a /\ -- &1 *b<= d*b /\ &0<= a1-(a+b) ==> &0<= a1+ c*a+d*b`)
6185 THEN ASM_REWRITE_TAC[]
6191 MATCH_MP_TAC(REAL_ARITH`&0<=a ==> &0<= #0.1 *a`)
6192 THEN MP_TAC SCS_J_DIAG_EQ
6193 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;]
6194 THEN ASM_SIMP_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
6195 THEN REPLICATE_TAC (59-31)(POP_ASSUM MP_TAC)
6196 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6197 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
6198 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
6201 THEN REPLICATE_TAC (59-31)(POP_ASSUM MP_TAC)
6202 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6203 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
6204 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
6207 THEN SUBGOAL_THEN`scs_k_v39 s'=k'`ASSUME_TAC
6214 THEN EXPAND_TAC"s''"
6215 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;scs_half_slice_v39]
6216 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
6221 SUBGOAL_THEN`scs_k_v39 s''=k''`ASSUME_TAC
6228 THEN EXPAND_TAC"s''"
6229 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;scs_half_slice_v39]
6230 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
6234 MP_TAC(ARITH_RULE`3<=k'/\ 3<=k'' ==> SUC(k'-1)=k' /\ SUC (k''-1)=k''`)
6236 THEN MP_TAC(SET_RULE`scs_J_v39 s' (scs_k_v39 s' - 1) (SUC (scs_k_v39 s' - 1)) \/ ~(scs_J_v39 s' (scs_k_v39 s' - 1) (SUC (scs_k_v39 s' - 1)))`)
6243 THEN REWRITE_TAC[periodic2]
6244 THEN REPEAT STRIP_TAC
6245 THEN POP_ASSUM MP_TAC
6246 THEN MP_TAC SCS_HALF_SLICE_IS_A_SCS
6247 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2]
6248 THEN ASM_SIMP_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
6249 THEN REPLICATE_TAC (64-58)(POP_ASSUM MP_TAC)
6250 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6251 THEN REPLICATE_TAC (2)(POP_ASSUM MP_TAC)
6252 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
6254 THEN ASM_REWRITE_TAC[])
6255 THEN REPLICATE_TAC (64-58)(POP_ASSUM MP_TAC)
6256 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6257 THEN REPLICATE_TAC (2)(POP_ASSUM MP_TAC)
6258 THEN GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
6261 THEN REPLICATE_TAC (81-72)(POP_ASSUM MP_TAC)
6262 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6263 THEN MRESAL_TAC th[`0`;`k'-1`;][ARITH_RULE`0+A=A`])
6264 THEN SUBGOAL_THEN`(!i. scs_b_v39 s i (SUC i) <= cstab)`ASSUME_TAC;
6268 REPLICATE_TAC (83-24)(POP_ASSUM MP_TAC)
6269 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6270 THEN MATCH_MP_TAC th)
6271 THEN ASM_REWRITE_TAC[];
6277 MRESAL_TAC(GEN_ALL SCS_HALF_SLICE_IS_A_SCS)[`s:scs_v39`;`s':scs_v39`;`q:num`;`p:num`;`s'':scs_v39`]
6278 [MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2]
6279 THEN REPLICATE_TAC (85-35)(POP_ASSUM MP_TAC)
6280 THEN POP_ASSUM(fun th->
6282 THEN REWRITE_TAC[th]
6283 THEN ASSUME_TAC th THEN REPEAT RESA_TAC)
6284 THEN REPLICATE_TAC (85-36)(POP_ASSUM MP_TAC)
6285 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6286 THEN POP_ASSUM MP_TAC
6289 THEN ASM_REWRITE_TAC[SET_RULE`A\/B<=> B\/A`]
6290 THEN REPLICATE_TAC (84-63)(POP_ASSUM MP_TAC)
6291 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6292 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
6293 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
6295 THEN ASM_REWRITE_TAC[])
6296 THEN REPLICATE_TAC (84-62)(POP_ASSUM MP_TAC)
6297 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6298 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
6299 THEN GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
6301 THEN ASM_REWRITE_TAC[REAL_ARITH`a<=b+c<=> a<= c+b`]
6303 THEN REPLICATE_TAC (101-92)(POP_ASSUM MP_TAC)
6304 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6305 THEN MRESAL_TAC th[`0`;`k''-1`;][ARITH_RULE`0+A=A`])
6306 THEN REPLICATE_TAC (102-57)(POP_ASSUM MP_TAC)
6307 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6310 THEN REWRITE_TAC[SET_RULE`{a|a=b}={b}`;SUM_SING]
6311 THEN MP_TAC(ARITH_RULE`3<=k'/\ 3<=k'' ==> (k'-1)<k' /\ (k''-1)<k''`)
6313 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
6314 THEN MRESA_TAC MOD_LT[`k''-1`;`k'':num`]
6315 THEN MRESA_TAC (GEN_ALL W_EW_K_SCS_ADD_P)[
6316 `d':real`;`mkj:bool`;`s':scs_v39`;`(vv:num->real^3)(p MOD k)`;`q:num`;`s:scs_v39`;`(vv:num->real^3)`;`k':num`;`p:num`;`k:num`;`(vv:num->real^3) (q MOD k)`]
6317 THEN MRESA_TAC (GEN_ALL W_EW_K_SCS_ADD_P)[
6318 `d'':real`;`mkj:bool`;`s'':scs_v39`;`(vv:num->real^3)(q MOD k)`;`p:num`;`s:scs_v39`;`(vv:num->real^3)`;`k'':num`;`q:num`;`k:num`;`(vv:num->real^3) (p MOD k)`]
6320 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2]
6321 THEN REPEAT RESA_TAC
6322 THEN MP_TAC(ARITH_RULE`3<=k'/\ 3<=k'' ==> ~(k'=0) /\ ~(k''=0)`)
6324 THEN MRESAL_TAC MOD_MULT[`k':num`;`1:num`][ARITH_RULE`k'*1 =k'/\ 0+A=A`]
6325 THEN MRESAL_TAC MOD_MULT[`k'':num`;`1:num`][ARITH_RULE`k'*1 =k'/\ 0+A=A`]
6326 THEN SUBGOAL_THEN`norm ((vv:num->real^3) (q MOD k) - vv (p MOD k)) =norm (vv (p MOD k) - vv (q MOD k))`ASSUME_TAC
6331 MP_TAC(VECTOR_ARITH`vv (q MOD k) - vv (p MOD k) = --(vv (p MOD k) - (vv:num->real^3) (q MOD k))`)
6333 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
6334 THEN REWRITE_TAC[NORM_NEG];
6338 ASM_REWRITE_TAC[ARITH_RULE`a*b+c*b=(a+c)*b`]
6339 THEN MATCH_MP_TAC REAL_LE_MUL
6344 REPLICATE_TAC (124-92)(POP_ASSUM MP_TAC)
6345 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6354 REPLICATE_TAC (124-92)(POP_ASSUM MP_TAC)
6355 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6362 THEN ASM_REWRITE_TAC[is_ear_v39]
6364 THEN SUBGOAL_THEN`k'-1 IN {i | i < 3 /\ scs_J_v39 s' i (SUC i)}`ASSUME_TAC;
6368 ASM_REWRITE_TAC[IN_ELIM_THM;ARITH_RULE`3-1<3`]
6369 THEN REPLICATE_TAC (132-88)(POP_ASSUM MP_TAC)
6370 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6372 THEN ASM_REWRITE_TAC[]);
6377 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
6379 THEN POP_ASSUM(fun th-> ASM_TAC
6380 THEN REWRITE_TAC[SYM th])
6381 THEN REPEAT STRIP_TAC
6382 THEN SUBGOAL_THEN`d' = scs_d_v39 s' `ASSUME_TAC
6387 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
6392 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;]
6393 THEN REPEAT RESA_TAC
6394 THEN POP_ASSUM MP_TAC
6395 THEN REWRITE_TAC[REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
6397 THEN POP_ASSUM(fun th-> MRESA_TAC th[`2`;`SUC 2`])
6398 THEN POP_ASSUM MP_TAC
6399 THEN REWRITE_TAC[ARITH_RULE`SUC 2 MOD 3=0/\ 0+A=A/\ 2 MOD 3=2`]
6400 THEN REPLICATE_TAC (136-117)(POP_ASSUM MP_TAC)
6401 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6402 THEN POP_ASSUM MP_TAC
6404 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`])
6406 THEN REAL_ARITH_TAC;
6414 THEN ASM_REWRITE_TAC[is_ear_v39]
6416 THEN SUBGOAL_THEN`k''-1 IN {i | i < 3 /\ scs_J_v39 s'' i (SUC i)}`ASSUME_TAC;
6420 ASM_REWRITE_TAC[IN_ELIM_THM;ARITH_RULE`3-1<3`]
6421 THEN REPLICATE_TAC (132-110)(POP_ASSUM MP_TAC)
6422 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6424 THEN ASM_REWRITE_TAC[]);
6429 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
6431 THEN POP_ASSUM(fun th-> ASM_TAC
6432 THEN REWRITE_TAC[SYM th])
6433 THEN REPEAT STRIP_TAC
6434 THEN SUBGOAL_THEN`d'' = scs_d_v39 s'' `ASSUME_TAC
6439 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
6443 MRESAL_TAC (GEN_ALL QKNVMLB1)[`vv:num->real^3`;`s:scs_v39`;`q:num`;`p:num`;`d'':real`;`mkj:bool`]
6444 [MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;]
6445 THEN REPLICATE_TAC (134-9)(POP_ASSUM MP_TAC)
6446 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6447 THEN POP_ASSUM MP_TAC
6450 THEN REWRITE_TAC[REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
6452 THEN POP_ASSUM(fun th-> MRESA_TAC th[`2`;`SUC 2`])
6453 THEN POP_ASSUM MP_TAC
6454 THEN REWRITE_TAC[ARITH_RULE`SUC 2 MOD 3=0/\ 0+A=A/\ 2 MOD 3=2`]
6455 THEN REPLICATE_TAC (136-117)(POP_ASSUM MP_TAC)
6456 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6457 THEN POP_ASSUM MP_TAC
6459 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`])
6461 THEN REAL_ARITH_TAC;
6474 MP_TAC(VECTOR_ARITH`vv (q MOD k) - vv (p MOD k) = --(vv (p MOD k) - (vv:num->real^3) (q MOD k))`)
6476 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
6477 THEN REWRITE_TAC[NORM_NEG];
6481 ASM_REWRITE_TAC[ARITH_RULE`a*b+c*b=(a+c)*b`]
6482 THEN MATCH_MP_TAC REAL_LE_MUL
6487 REPLICATE_TAC (124-92)(POP_ASSUM MP_TAC)
6488 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6497 REPLICATE_TAC (124-92)(POP_ASSUM MP_TAC)
6498 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6505 THEN ASM_REWRITE_TAC[is_ear_v39]
6507 THEN SUBGOAL_THEN`k'-1 IN {i | i < 3 /\ scs_J_v39 s' i (SUC i)}`ASSUME_TAC;
6511 ASM_REWRITE_TAC[IN_ELIM_THM;ARITH_RULE`3-1<3`]
6512 THEN REPLICATE_TAC (132-88)(POP_ASSUM MP_TAC)
6513 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6515 THEN ASM_REWRITE_TAC[]);
6520 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
6522 THEN POP_ASSUM(fun th-> ASM_TAC
6523 THEN REWRITE_TAC[SYM th])
6524 THEN REPEAT STRIP_TAC
6525 THEN SUBGOAL_THEN`d' = scs_d_v39 s' `ASSUME_TAC
6530 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
6535 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;]
6536 THEN REPEAT RESA_TAC
6537 THEN POP_ASSUM MP_TAC
6538 THEN REWRITE_TAC[REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
6540 THEN POP_ASSUM(fun th-> MRESA_TAC th[`2`;`SUC 2`])
6541 THEN POP_ASSUM MP_TAC
6542 THEN REWRITE_TAC[ARITH_RULE`SUC 2 MOD 3=0/\ 0+A=A/\ 2 MOD 3=2`]
6543 THEN REPLICATE_TAC (136-117)(POP_ASSUM MP_TAC)
6544 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6545 THEN POP_ASSUM MP_TAC
6547 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`])
6549 THEN REAL_ARITH_TAC;
6557 THEN ASM_REWRITE_TAC[is_ear_v39]
6559 THEN SUBGOAL_THEN`k''-1 IN {i | i < 3 /\ scs_J_v39 s'' i (SUC i)}`ASSUME_TAC;
6563 ASM_REWRITE_TAC[IN_ELIM_THM;ARITH_RULE`3-1<3`]
6564 THEN REPLICATE_TAC (132-110)(POP_ASSUM MP_TAC)
6565 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6567 THEN ASM_REWRITE_TAC[]);
6572 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
6574 THEN POP_ASSUM(fun th-> ASM_TAC
6575 THEN REWRITE_TAC[SYM th])
6576 THEN REPEAT STRIP_TAC
6577 THEN SUBGOAL_THEN`d'' = scs_d_v39 s'' `ASSUME_TAC
6582 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
6586 MRESAL_TAC (GEN_ALL QKNVMLB1)[`vv:num->real^3`;`s:scs_v39`;`q:num`;`p:num`;`d'':real`;`mkj:bool`]
6587 [MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;]
6588 THEN REPLICATE_TAC (134-9)(POP_ASSUM MP_TAC)
6589 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6590 THEN POP_ASSUM MP_TAC
6593 THEN REWRITE_TAC[REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
6595 THEN POP_ASSUM(fun th-> MRESA_TAC th[`2`;`SUC 2`])
6596 THEN POP_ASSUM MP_TAC
6597 THEN REWRITE_TAC[ARITH_RULE`SUC 2 MOD 3=0/\ 0+A=A/\ 2 MOD 3=2`]
6598 THEN REPLICATE_TAC (136-117)(POP_ASSUM MP_TAC)
6599 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6600 THEN POP_ASSUM MP_TAC
6602 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`])
6604 THEN REAL_ARITH_TAC;
6612 THEN REWRITE_TAC[periodic2]
6613 THEN REPEAT STRIP_TAC
6614 THEN POP_ASSUM MP_TAC
6615 THEN MP_TAC SCS_HALF_SLICE_IS_A_SCS
6616 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2]
6617 THEN ASM_SIMP_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
6618 THEN REPLICATE_TAC (64-58)(POP_ASSUM MP_TAC)
6619 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6620 THEN REPLICATE_TAC (2)(POP_ASSUM MP_TAC)
6621 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
6623 THEN ASM_REWRITE_TAC[])
6624 THEN REPLICATE_TAC (64-58)(POP_ASSUM MP_TAC)
6625 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6626 THEN REPLICATE_TAC (2)(POP_ASSUM MP_TAC)
6627 THEN GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
6630 THEN REPLICATE_TAC (81-72)(POP_ASSUM MP_TAC)
6631 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6632 THEN MRESAL_TAC th[`0`;`k'-1`;][ARITH_RULE`0+A=A`])
6633 THEN SUBGOAL_THEN`(!i. scs_b_v39 s i (SUC i) <= cstab)`ASSUME_TAC;
6637 REPLICATE_TAC (83-24)(POP_ASSUM MP_TAC)
6638 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6639 THEN MATCH_MP_TAC th)
6640 THEN ASM_REWRITE_TAC[];
6646 MRESAL_TAC(GEN_ALL SCS_HALF_SLICE_IS_A_SCS)[`s:scs_v39`;`s':scs_v39`;`q:num`;`p:num`;`s'':scs_v39`]
6647 [MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2]
6648 THEN REPLICATE_TAC (85-35)(POP_ASSUM MP_TAC)
6649 THEN POP_ASSUM(fun th->
6651 THEN REWRITE_TAC[th]
6652 THEN ASSUME_TAC th THEN REPEAT RESA_TAC)
6653 THEN REPLICATE_TAC (85-36)(POP_ASSUM MP_TAC)
6654 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6655 THEN POP_ASSUM MP_TAC
6658 THEN ASM_REWRITE_TAC[SET_RULE`A\/B<=> B\/A`]
6659 THEN REPLICATE_TAC (84-63)(POP_ASSUM MP_TAC)
6660 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6661 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
6662 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
6664 THEN ASM_REWRITE_TAC[])
6665 THEN REPLICATE_TAC (84-62)(POP_ASSUM MP_TAC)
6666 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6667 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
6668 THEN GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
6670 THEN ASM_REWRITE_TAC[REAL_ARITH`a<=b+c<=> a<= c+b`]
6672 THEN REPLICATE_TAC (101-92)(POP_ASSUM MP_TAC)
6673 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6674 THEN MRESAL_TAC th[`0`;`k''-1`;][ARITH_RULE`0+A=A`])
6675 THEN REPLICATE_TAC (102-57)(POP_ASSUM MP_TAC)
6676 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6679 THEN REWRITE_TAC[SET_RULE`{a|F}={}`;SUM_SING;SUM_CLAUSES]
6680 THEN REAL_ARITH_TAC;
6684 (********************************)
6689 REPLICATE_TAC (7) (POP_ASSUM MP_TAC)
6690 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
6691 THEN REPEAT RESA_TAC
6692 THEN SUBGOAL_THEN`FINITE {i | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)}
6697 MATCH_MP_TAC FINITE_SUBSET
6698 THEN EXISTS_TAC`0.. (scs_k_v39 s' -1)`
6699 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
6703 SUBGOAL_THEN`{i | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)} INTER
6704 {i| i=scs_k_v39 s' - 1/\ scs_J_v39 s' (scs_k_v39 s' - 1) (SUC (scs_k_v39 s' - 1)) }={}` ASSUME_TAC
6708 REWRITE_TAC[INTER;SET_RULE`A={}<=> ~(?a. a IN A)`;IN_ELIM_THM;IN_SING]
6713 SUBGOAL_THEN`{i | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)} UNION
6714 {i| i=scs_k_v39 s' - 1/\ scs_J_v39 s' (scs_k_v39 s' - 1) (SUC(scs_k_v39 s'-1)) }={i | i < scs_k_v39 s' /\ scs_J_v39 s' i (SUC i)}`
6718 REWRITE_TAC[UNION;IN_SING;IN_ELIM_THM;EXTENSION]
6720 THEN EXPAND_TAC "s'"
6721 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
6722 THEN ASM_REWRITE_TAC[]
6723 THEN REPLICATE_TAC (47-43) REMOVE_ASSUM_TAC
6731 REPLICATE_TAC (47-40) (POP_ASSUM MP_TAC)
6737 MP_TAC(ARITH_RULE`3<=k' ==>SUC (k' - 1) =k'/\ k'-1<k'`)
6743 THEN MP_TAC(ARITH_RULE`x<k' /\ 3<= k' ==> x< k'-1 \/ (x=k'-1)`)
6745 THEN POP_ASSUM (fun th->
6747 THEN REWRITE_TAC[th]
6754 {i | i = scs_k_v39 s' - 1 /\
6755 scs_J_v39 s' (scs_k_v39 s' - 1) (SUC (scs_k_v39 s' - 1))}`ASSUME_TAC
6759 MATCH_MP_TAC FINITE_SUBSET
6760 THEN EXISTS_TAC`{(scs_k_v39 s' -1)}`
6761 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_SING;FINITE_SING]
6766 MRESAL_TAC SUM_INCL_EXCL[`{i | i < scs_k_v39 s'-1 /\ scs_J_v39 s' i (SUC i)}`;`{i| i=scs_k_v39 s' - 1/\ scs_J_v39 s' (scs_k_v39 s' - 1) (SUC(scs_k_v39 s'-1)) }`;`(\i. cstab -
6768 ((vv:num->real^3) (i MOD scs_k_v39 s' + p MOD k),
6769 vv (SUC i MOD scs_k_v39 s' + p MOD k)))`][FINITE_SING;SUM_SING;SUM_CLAUSES;REAL_ARITH`a+ &0=a`]
6770 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6771 THEN SUBGOAL_THEN`FINITE {i | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}
6776 MATCH_MP_TAC FINITE_SUBSET
6777 THEN EXISTS_TAC`0.. (scs_k_v39 s'' -1)`
6778 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
6782 SUBGOAL_THEN`{i | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)} INTER
6783 {i| i=scs_k_v39 s'' - 1/\ scs_J_v39 s'' (scs_k_v39 s'' - 1) (SUC (scs_k_v39 s'' - 1)) }={}` ASSUME_TAC
6787 REWRITE_TAC[INTER;SET_RULE`A={}<=> ~(?a. a IN A)`;IN_ELIM_THM;IN_SING]
6792 SUBGOAL_THEN`{i | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)} UNION
6793 {i| i=scs_k_v39 s'' - 1/\ scs_J_v39 s'' (scs_k_v39 s'' - 1) (SUC(scs_k_v39 s''-1)) }={i | i < scs_k_v39 s'' /\ scs_J_v39 s'' i (SUC i)}`
6797 REWRITE_TAC[UNION;IN_SING;IN_ELIM_THM;EXTENSION]
6799 THEN EXPAND_TAC "s''"
6800 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
6801 THEN ASM_REWRITE_TAC[]
6802 THEN REPLICATE_TAC (47-43) REMOVE_ASSUM_TAC
6810 REPLICATE_TAC (47-40) (POP_ASSUM MP_TAC)
6816 MP_TAC(ARITH_RULE`3<=k'' ==>SUC (k'' - 1) =k''/\ k''-1<k''`)
6822 THEN MP_TAC(ARITH_RULE`x<k'' /\ 3<= k'' ==> x< k''-1 \/ (x=k''-1)`)
6824 THEN POP_ASSUM (fun th->
6826 THEN REWRITE_TAC[th]
6833 {i | i = scs_k_v39 s'' - 1 /\
6834 scs_J_v39 s'' (scs_k_v39 s'' - 1) (SUC (scs_k_v39 s'' - 1))}`ASSUME_TAC
6838 MATCH_MP_TAC FINITE_SUBSET
6839 THEN EXISTS_TAC`{(scs_k_v39 s'' -1)}`
6840 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_SING;FINITE_SING]
6845 MRESAL_TAC SUM_INCL_EXCL[`{i | i < scs_k_v39 s''-1 /\ scs_J_v39 s'' i (SUC i)}`;`{i| i=scs_k_v39 s'' - 1/\ scs_J_v39 s'' (scs_k_v39 s'' - 1) (SUC(scs_k_v39 s''-1)) }`;`(\i. cstab -
6847 ((vv:num->real^3) (i MOD scs_k_v39 s'' + q MOD k),
6848 vv (SUC i MOD scs_k_v39 s'' + q MOD k)))`][FINITE_SING;SUM_SING;SUM_CLAUSES;REAL_ARITH`a+ &0=a`]
6849 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6850 THEN SUBGOAL_THEN`sum
6851 {i | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)}
6854 (vv (i MOD scs_k_v39 s' + p MOD k),
6855 (vv:num->real^3) (SUC i MOD scs_k_v39 s' + p MOD k)))
6857 {(i + p MOD scs_k_v39 s) MOD scs_k_v39 s | i < scs_k_v39 s'-1
6858 /\ scs_J_v39 s' i (SUC i)}
6862 vv (SUC i )))`ASSUME_TAC
6867 MATCH_MP_TAC SUM_EQ_GENERAL
6868 THEN REWRITE_TAC[IN_ELIM_THM]
6869 THEN EXISTS_TAC`(\i. (i + p MOD scs_k_v39 s) MOD scs_k_v39 s)`
6870 THEN ASM_REWRITE_TAC[EXISTS_UNIQUE]
6871 THEN REPEAT RESA_TAC;
6875 THEN ASM_REWRITE_TAC[]
6881 THEN REPLICATE_TAC (47-40) (POP_ASSUM MP_TAC)
6882 THEN EXPAND_TAC "s'"
6883 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
6884 THEN ASM_REWRITE_TAC[]
6885 THEN REPEAT STRIP_TAC
6886 THEN MP_TAC(ARITH_RULE`i<k'-1/\ y'<k'-1 /\ k'< k/\ 3<=k' ==> i<k /\ y'<k/\ ~(k=0)`)
6888 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
6889 THEN MRESA_TAC MOD_LT[`y':num`;`k:num`]
6890 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`i:num`;`y':num`;`p MOD k`;`k:num`][ADD_SYM];
6895 THEN ASM_REWRITE_TAC[]
6900 THEN POP_ASSUM MP_TAC
6901 THEN EXPAND_TAC "s'"
6902 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
6903 THEN ASM_REWRITE_TAC[]
6904 THEN REPEAT STRIP_TAC
6905 THEN MP_TAC(ARITH_RULE`x<k'-1/\ 3<=k'/\k'<k ==> x<k'/\ ~(k'=0)/\ SUC x< k'/\ ~(k=0)/\ 1<k`)
6907 THEN MRESA_TAC MOD_LT[`x:num`;`k':num`]
6908 THEN MRESA_TAC MOD_LT[`SUC x:num`;`k':num`]
6910 THEN REWRITE_TAC[periodic2;MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
6911 THEN REPEAT STRIP_TAC
6912 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`;periodic]
6913 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x + p MOD k):num`
6914 THEN MRESA1_TAC th ` ((x + p MOD k) +1):num`
6915 THEN MRESA1_TAC th ` SUC ((x + p MOD k) MOD k):num`)
6916 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6917 THEN REWRITE_TAC[ADD1]
6918 THEN MRESA_TAC MOD_LT[`1`;`k:num`]
6919 THEN MRESA_TAC MOD_ADD_MOD[`x+p MOD k`;`1`;`k:num`]
6920 THEN REWRITE_TAC[ARITH_RULE`((x + p MOD k) + 1)= (x+ 1) + p MOD k`]
6927 {i | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}
6930 (vv (i MOD scs_k_v39 s'' + q MOD k),
6931 (vv:num->real^3) (SUC i MOD scs_k_v39 s'' + q MOD k)))
6933 {(i + q MOD scs_k_v39 s) MOD scs_k_v39 s | i < scs_k_v39 s''-1
6934 /\ scs_J_v39 s'' i (SUC i)}
6938 vv (SUC i )))`ASSUME_TAC
6943 MATCH_MP_TAC SUM_EQ_GENERAL
6944 THEN REWRITE_TAC[IN_ELIM_THM]
6945 THEN EXISTS_TAC`(\i. (i + q MOD scs_k_v39 s) MOD scs_k_v39 s)`
6946 THEN ASM_REWRITE_TAC[EXISTS_UNIQUE]
6947 THEN REPEAT RESA_TAC;
6951 THEN ASM_REWRITE_TAC[]
6957 THEN REPLICATE_TAC (47-40) (POP_ASSUM MP_TAC)
6958 THEN EXPAND_TAC "s''"
6959 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
6960 THEN ASM_REWRITE_TAC[]
6961 THEN REPEAT STRIP_TAC
6962 THEN MP_TAC(ARITH_RULE`i<k''-1/\ y'<k''-1 /\ k''< k/\ 3<=k'' ==> i<k /\ y'<k/\ ~(k=0)`)
6964 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
6965 THEN MRESA_TAC MOD_LT[`y':num`;`k:num`]
6966 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`i:num`;`y':num`;`q MOD k`;`k:num`][ADD_SYM];
6971 THEN ASM_REWRITE_TAC[]
6976 THEN POP_ASSUM MP_TAC
6977 THEN EXPAND_TAC "s''"
6978 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
6979 THEN ASM_REWRITE_TAC[]
6980 THEN REPEAT STRIP_TAC
6981 THEN MP_TAC(ARITH_RULE`x<k''-1/\ 3<=k''/\k''<k ==> x<k''/\ ~(k''=0)/\ SUC x< k''/\ ~(k=0)/\ 1<k`)
6983 THEN MRESA_TAC MOD_LT[`x:num`;`k'':num`]
6984 THEN MRESA_TAC MOD_LT[`SUC x:num`;`k'':num`]
6986 THEN REWRITE_TAC[periodic2;MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
6987 THEN REPEAT STRIP_TAC
6988 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num-> real^3`][ARITH_RULE`~(4=0)`;periodic]
6989 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x + q MOD k):num`
6990 THEN MRESA1_TAC th ` ((x + q MOD k) +1):num`
6991 THEN MRESA1_TAC th ` SUC ((x + q MOD k) MOD k):num`)
6992 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6993 THEN REWRITE_TAC[ADD1]
6994 THEN MRESA_TAC MOD_LT[`1`;`k:num`]
6995 THEN MRESA_TAC MOD_ADD_MOD[`x+q MOD k`;`1`;`k:num`]
6996 THEN REWRITE_TAC[ARITH_RULE`((x + q MOD k) + 1)= (x+ 1) + q MOD k`]
7002 REAL_ARITH`a + b * (-- &1) *c <= (a1 + b * d1 *(c1+c2)) + a2 + b * d2 *(c3+c4)
7003 <=> &0<= (a1+ a2-a) + b*(c+ d1* c1 +d2*c3)+ b*(d1* c2+ d2* c4)`]
7004 THEN MATCH_MP_TAC(REAL_ARITH`&0<=a /\ &0<=b /\ &0<=c==> &0<= a+b+c`)
7008 THEN EXPAND_TAC "s''"
7009 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;scs_half_slice_v39]
7010 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
7018 MATCH_MP_TAC(REAL_ARITH`&0<= a==> &0<= #0.1 *a`)
7019 THEN SUBGOAL_THEN`-- &1<= if is_ear_v39 s' then &1 else -- &1` ASSUME_TAC;
7023 MP_TAC(SET_RULE`is_ear_v39 s' \/ ~(is_ear_v39 s')`)
7025 THEN REAL_ARITH_TAC;
7028 SUBGOAL_THEN`-- &1<= if is_ear_v39 s'' then &1 else -- &1` ASSUME_TAC;
7032 MP_TAC(SET_RULE`is_ear_v39 s'' \/ ~(is_ear_v39 s'')`)
7034 THEN REAL_ARITH_TAC;
7038 SUBGOAL_THEN`&0<= sum {(i + p MOD k) MOD k | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)}
7039 (\i. cstab - dist ((vv:num->real^3) i,vv (SUC i)))`ASSUME_TAC
7044 MATCH_MP_TAC SUM_POS_LE
7045 THEN ASM_REWRITE_TAC[]
7050 MATCH_MP_TAC FINITE_SUBSET
7051 THEN EXISTS_TAC`0.. k`
7052 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG;ARITH_RULE`0<= a`]
7055 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)`)
7057 THEN MRESA_TAC DIVISION[`i + p MOD k`;`k:num`]
7058 THEN POP_ASSUM MP_TAC
7063 REWRITE_TAC[IN_ELIM_THM]
7064 THEN REPEAT RESA_TAC
7066 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist]
7067 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
7068 THEN REPEAT RESA_TAC
7069 THEN REPLICATE_TAC (75-6)(POP_ASSUM MP_TAC)
7070 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7071 THEN MRESA_TAC th[`(i + p MOD k) MOD k`;`SUC ((i + p MOD k) MOD k)`])
7072 THEN REPLICATE_TAC (76-34)(POP_ASSUM MP_TAC)
7073 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7074 THEN MRESA1_TAC th`(i + p MOD k) MOD k`)
7075 THEN POP_ASSUM MP_TAC
7076 THEN POP_ASSUM MP_TAC
7083 SUBGOAL_THEN`&0<= sum {(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}
7084 (\i. cstab - dist ((vv:num->real^3) i,vv (SUC i)))`ASSUME_TAC
7089 MATCH_MP_TAC SUM_POS_LE
7090 THEN ASM_REWRITE_TAC[]
7095 MATCH_MP_TAC FINITE_SUBSET
7096 THEN EXISTS_TAC`0.. k`
7097 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG;ARITH_RULE`0<= a`]
7100 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)`)
7102 THEN MRESA_TAC DIVISION[`i + q MOD k`;`k:num`]
7103 THEN POP_ASSUM MP_TAC
7108 REWRITE_TAC[IN_ELIM_THM]
7109 THEN REPEAT RESA_TAC
7111 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist]
7112 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
7113 THEN REPEAT RESA_TAC
7114 THEN REPLICATE_TAC (76-6)(POP_ASSUM MP_TAC)
7115 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7116 THEN MRESA_TAC th[`(i + q MOD k) MOD k`;`SUC ((i + q MOD k) MOD k)`])
7117 THEN REPLICATE_TAC (77-34)(POP_ASSUM MP_TAC)
7118 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7119 THEN MRESA1_TAC th`(i + q MOD k) MOD k`)
7120 THEN POP_ASSUM MP_TAC
7121 THEN POP_ASSUM MP_TAC
7127 MRESA_TAC REAL_LE_RMUL[`-- &1`;`(if is_ear_v39 s' then &1 else -- &1)`;`sum {(i + p MOD k) MOD k | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)}
7128 (\i. cstab - dist (vv i,(vv:num->real^3) (SUC i)))`]
7129 THEN MRESA_TAC REAL_LE_RMUL[`-- &1`;`(if is_ear_v39 s'' then &1 else -- &1)`;`sum {(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}
7130 (\i. cstab - dist (vv i,(vv:num->real^3) (SUC i)))`]
7131 THEN SUBGOAL_THEN`FINITE
7132 {(i + p MOD k) MOD k | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)}`ASSUME_TAC
7137 MATCH_MP_TAC FINITE_SUBSET
7138 THEN EXISTS_TAC`0.. k`
7139 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG;ARITH_RULE`0<= a`]
7142 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)`)
7144 THEN MRESA_TAC DIVISION[`i + q MOD k`;`k:num`]
7145 THEN POP_ASSUM MP_TAC
7151 {(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}`ASSUME_TAC
7156 MATCH_MP_TAC FINITE_SUBSET
7157 THEN EXISTS_TAC`0.. k`
7158 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG;ARITH_RULE`0<= a`]
7161 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)`)
7163 THEN MRESA_TAC DIVISION[`i + q MOD k`;`k:num`]
7164 THEN POP_ASSUM MP_TAC
7169 sum {i | i < k /\ scs_J_v39 s i (SUC i)}
7170 (\i. cstab - dist (vv i,vv (SUC i))) -
7171 (sum {(i + p MOD k) MOD k | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)}
7172 (\i. cstab - dist (vv i,vv (SUC i))) +
7173 sum {(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}
7174 (\i. cstab - dist (vv i,(vv:num->real^3) (SUC i))))` ASSUME_TAC
7178 SUBGOAL_THEN`(!i. scs_b_v39 s i (SUC i) <= cstab)`ASSUME_TAC;
7182 REPLICATE_TAC (67-24)(POP_ASSUM MP_TAC)
7183 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7184 THEN MATCH_MP_TAC th)
7185 THEN ASM_REWRITE_TAC[];
7191 MP_TAC INTER_SLICE_SCS_EMPTY
7192 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist]
7193 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
7194 THEN REPLICATE_TAC (68-37)(POP_ASSUM MP_TAC)
7195 THEN POP_ASSUM(fun th->
7197 THEN REWRITE_TAC[th]
7198 THEN ASSUME_TAC th THEN REPEAT RESA_TAC)
7199 THEN SUBGOAL_THEN`{(i + p MOD k) MOD k | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)} INTER
7200 {(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\
7201 scs_J_v39 s'' i (SUC i)}={}`ASSUME_TAC
7206 THEN REWRITE_TAC[INTER;IN_ELIM_THM]
7212 MRESAL_TAC SUM_INCL_EXCL[`{(i + p MOD k) MOD k | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)}`;`{(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}`;`(\i. cstab - dist ((vv:num->real^3) i,vv (SUC i)))`][SUM_CLAUSES;REAL_ARITH`a+ &0=a`;dist]
7213 THEN SUBGOAL_THEN`{(i + p MOD k) MOD k | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)} UNION
7214 {(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}
7215 SUBSET {i | i < k /\ scs_J_v39 s i (SUC i)}`ASSUME_TAC
7220 REWRITE_TAC[UNION;IN_ELIM_THM;SUBSET]
7221 THEN REPEAT RESA_TAC
7227 MP_TAC(ARITH_RULE`3<k==> ~(k=0)`)
7229 THEN MRESA_TAC DIVISION[`i + p MOD k`;`k:num`]
7236 MP_TAC SCS_J_PRIME_SUBSET_SCS_J
7237 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist]
7238 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
7244 MP_TAC(ARITH_RULE`3<k==> ~(k=0)`)
7246 THEN MRESA_TAC DIVISION[`i + q MOD k`;`k:num`]
7251 MRESA_TAC(GEN_ALL SCS_J_PRIME_SUBSET_SCS_J)[`d'':real`;`mkj:bool`;`p:num`;`s'':scs_v39`;`i:num`;`q:num`;`s:scs_v39`]
7252 THEN POP_ASSUM MATCH_MP_TAC
7253 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist]
7254 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`];
7258 SUBGOAL_THEN`FINITE {i | i < k /\ scs_J_v39 s i (SUC i)}` ASSUME_TAC
7262 MATCH_MP_TAC FINITE_SUBSET
7263 THEN EXISTS_TAC`0..k`
7264 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
7269 MRESA_TAC SUM_DIFF[`(\i. cstab - norm (vv i - (vv:num->real^3) (SUC i)))`;`{i | i < k /\ scs_J_v39 s i (SUC i)}`;`{(i + p MOD k) MOD k | i < scs_k_v39 s' - 1 /\ scs_J_v39 s' i (SUC i)} UNION
7270 {(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}`;]
7271 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7272 THEN MATCH_MP_TAC SUM_POS_LE
7273 THEN ASM_REWRITE_TAC[]
7278 MATCH_MP_TAC FINITE_SUBSET
7279 THEN EXISTS_TAC`0.. k`
7280 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET; DIFF;IN_ELIM_THM;IN_NUMSEG;ARITH_RULE`0<= a`]
7286 REWRITE_TAC[IN_ELIM_THM;DIFF]
7287 THEN REPEAT RESA_TAC
7289 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist]
7290 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
7291 THEN REPEAT RESA_TAC
7292 THEN REPLICATE_TAC (87-7)(POP_ASSUM MP_TAC)
7293 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7294 THEN MRESA_TAC th[`x:num`;`SUC (x)`])
7295 THEN REPLICATE_TAC (88-78)(POP_ASSUM MP_TAC)
7296 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7297 THEN MRESA1_TAC th`x:num`)
7298 THEN POP_ASSUM MP_TAC
7299 THEN POP_ASSUM MP_TAC
7300 THEN REAL_ARITH_TAC;
7305 MATCH_MP_TAC(REAL_ARITH`-- &1 *a <=c* a /\ -- &1 *b<= d*b /\ &0<= a1-(a+b) ==> &0<= a1+ c*a+d*b`)
7306 THEN ASM_REWRITE_TAC[]
7312 MATCH_MP_TAC(REAL_ARITH`&0<=a ==> &0<= #0.1 *a`)
7313 THEN MP_TAC SCS_J_DIAG_EQ
7314 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;]
7315 THEN ASM_SIMP_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
7316 THEN REPLICATE_TAC (59-31)(POP_ASSUM MP_TAC)
7317 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7318 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
7319 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
7322 THEN REPLICATE_TAC (59-31)(POP_ASSUM MP_TAC)
7323 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7324 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
7325 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
7328 THEN SUBGOAL_THEN`scs_k_v39 s'=k'`ASSUME_TAC
7335 THEN EXPAND_TAC"s''"
7336 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;scs_half_slice_v39]
7337 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
7342 SUBGOAL_THEN`scs_k_v39 s''=k''`ASSUME_TAC
7349 THEN EXPAND_TAC"s''"
7350 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;scs_half_slice_v39]
7351 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
7355 MP_TAC(ARITH_RULE`3<=k'/\ 3<=k'' ==> SUC(k'-1)=k' /\ SUC (k''-1)=k''`)
7357 THEN MP_TAC(SET_RULE`scs_J_v39 s' (scs_k_v39 s' - 1) (SUC (scs_k_v39 s' - 1)) \/ ~(scs_J_v39 s' (scs_k_v39 s' - 1) (SUC (scs_k_v39 s' - 1)))`)
7364 THEN REWRITE_TAC[periodic2]
7365 THEN REPEAT STRIP_TAC
7366 THEN POP_ASSUM MP_TAC
7367 THEN MP_TAC SCS_HALF_SLICE_IS_A_SCS
7368 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2]
7369 THEN ASM_SIMP_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
7370 THEN REPLICATE_TAC (64-58)(POP_ASSUM MP_TAC)
7371 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7372 THEN REPLICATE_TAC (2)(POP_ASSUM MP_TAC)
7373 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
7375 THEN ASM_REWRITE_TAC[])
7376 THEN REPLICATE_TAC (64-58)(POP_ASSUM MP_TAC)
7377 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7378 THEN REPLICATE_TAC (2)(POP_ASSUM MP_TAC)
7379 THEN GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
7382 THEN REPLICATE_TAC (81-72)(POP_ASSUM MP_TAC)
7383 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7384 THEN MRESAL_TAC th[`0`;`k'-1`;][ARITH_RULE`0+A=A`])
7385 THEN SUBGOAL_THEN`(!i. scs_b_v39 s i (SUC i) <= cstab)`ASSUME_TAC;
7389 REPLICATE_TAC (83-24)(POP_ASSUM MP_TAC)
7390 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7391 THEN MATCH_MP_TAC th)
7392 THEN ASM_REWRITE_TAC[];
7398 MRESAL_TAC(GEN_ALL SCS_HALF_SLICE_IS_A_SCS)[`s:scs_v39`;`s':scs_v39`;`q:num`;`p:num`;`s'':scs_v39`]
7399 [MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2]
7400 THEN REPLICATE_TAC (85-35)(POP_ASSUM MP_TAC)
7401 THEN POP_ASSUM(fun th->
7403 THEN REWRITE_TAC[th]
7404 THEN ASSUME_TAC th THEN REPEAT RESA_TAC)
7405 THEN REPLICATE_TAC (85-36)(POP_ASSUM MP_TAC)
7406 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7407 THEN POP_ASSUM MP_TAC
7410 THEN ASM_REWRITE_TAC[SET_RULE`A\/B<=> B\/A`]
7411 THEN REPLICATE_TAC (84-63)(POP_ASSUM MP_TAC)
7412 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7413 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
7414 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
7416 THEN ASM_REWRITE_TAC[])
7417 THEN REPLICATE_TAC (84-62)(POP_ASSUM MP_TAC)
7418 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7419 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
7420 THEN GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
7422 THEN ASM_REWRITE_TAC[REAL_ARITH`a<=b+c<=> a<= c+b`]
7424 THEN REPLICATE_TAC (101-92)(POP_ASSUM MP_TAC)
7425 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7426 THEN MRESAL_TAC th[`0`;`k''-1`;][ARITH_RULE`0+A=A`])
7427 THEN REPLICATE_TAC (102-57)(POP_ASSUM MP_TAC)
7428 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7431 THEN REWRITE_TAC[SET_RULE`{a|a=b}={b}`;SUM_SING]
7432 THEN MP_TAC(ARITH_RULE`3<=k'/\ 3<=k'' ==> (k'-1)<k' /\ (k''-1)<k''`)
7434 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
7435 THEN MRESA_TAC MOD_LT[`k''-1`;`k'':num`]
7436 THEN MRESA_TAC (GEN_ALL W_EW_K_SCS_ADD_P)[
7437 `d':real`;`mkj:bool`;`s':scs_v39`;`(vv:num->real^3)(p MOD k)`;`q:num`;`s:scs_v39`;`(vv:num->real^3)`;`k':num`;`p:num`;`k:num`;`(vv:num->real^3) (q MOD k)`]
7438 THEN MRESA_TAC (GEN_ALL W_EW_K_SCS_ADD_P)[
7439 `d'':real`;`mkj:bool`;`s'':scs_v39`;`(vv:num->real^3)(q MOD k)`;`p:num`;`s:scs_v39`;`(vv:num->real^3)`;`k'':num`;`q:num`;`k:num`;`(vv:num->real^3) (p MOD k)`]
7441 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2]
7442 THEN REPEAT RESA_TAC
7443 THEN MP_TAC(ARITH_RULE`3<=k'/\ 3<=k'' ==> ~(k'=0) /\ ~(k''=0)`)
7445 THEN MRESAL_TAC MOD_MULT[`k':num`;`1:num`][ARITH_RULE`k'*1 =k'/\ 0+A=A`]
7446 THEN MRESAL_TAC MOD_MULT[`k'':num`;`1:num`][ARITH_RULE`k'*1 =k'/\ 0+A=A`]
7447 THEN SUBGOAL_THEN`norm ((vv:num->real^3) (q MOD k) - vv (p MOD k)) =norm (vv (p MOD k) - vv (q MOD k))`ASSUME_TAC
7452 MP_TAC(VECTOR_ARITH`vv (q MOD k) - vv (p MOD k) = --(vv (p MOD k) - (vv:num->real^3) (q MOD k))`)
7454 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
7455 THEN REWRITE_TAC[NORM_NEG];
7459 ASM_REWRITE_TAC[ARITH_RULE`a*b+c*b=(a+c)*b`]
7460 THEN MATCH_MP_TAC REAL_LE_MUL
7465 REPLICATE_TAC (124-92)(POP_ASSUM MP_TAC)
7466 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7475 REPLICATE_TAC (124-92)(POP_ASSUM MP_TAC)
7476 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7483 THEN ASM_REWRITE_TAC[is_ear_v39]
7485 THEN SUBGOAL_THEN`k'-1 IN {i | i < 3 /\ scs_J_v39 s' i (SUC i)}`ASSUME_TAC;
7489 ASM_REWRITE_TAC[IN_ELIM_THM;ARITH_RULE`3-1<3`]
7490 THEN REPLICATE_TAC (132-88)(POP_ASSUM MP_TAC)
7491 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7493 THEN ASM_REWRITE_TAC[]);
7498 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
7500 THEN POP_ASSUM(fun th-> ASM_TAC
7501 THEN REWRITE_TAC[SYM th])
7502 THEN REPEAT STRIP_TAC
7503 THEN SUBGOAL_THEN`d' = scs_d_v39 s' `ASSUME_TAC
7508 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
7513 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;]
7514 THEN REPEAT RESA_TAC
7515 THEN POP_ASSUM MP_TAC
7516 THEN REWRITE_TAC[REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
7518 THEN POP_ASSUM(fun th-> MRESA_TAC th[`2`;`SUC 2`])
7519 THEN POP_ASSUM MP_TAC
7520 THEN REWRITE_TAC[ARITH_RULE`SUC 2 MOD 3=0/\ 0+A=A/\ 2 MOD 3=2`]
7521 THEN REPLICATE_TAC (136-117)(POP_ASSUM MP_TAC)
7522 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7523 THEN POP_ASSUM MP_TAC
7525 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`])
7527 THEN REAL_ARITH_TAC;
7535 THEN ASM_REWRITE_TAC[is_ear_v39]
7537 THEN SUBGOAL_THEN`k''-1 IN {i | i < 3 /\ scs_J_v39 s'' i (SUC i)}`ASSUME_TAC;
7541 ASM_REWRITE_TAC[IN_ELIM_THM;ARITH_RULE`3-1<3`]
7542 THEN REPLICATE_TAC (132-110)(POP_ASSUM MP_TAC)
7543 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7545 THEN ASM_REWRITE_TAC[]);
7550 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
7552 THEN POP_ASSUM(fun th-> ASM_TAC
7553 THEN REWRITE_TAC[SYM th])
7554 THEN REPEAT STRIP_TAC
7555 THEN SUBGOAL_THEN`d'' = scs_d_v39 s'' `ASSUME_TAC
7560 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
7564 MRESAL_TAC (GEN_ALL QKNVMLB1)[`vv:num->real^3`;`s:scs_v39`;`q:num`;`p:num`;`d'':real`;`mkj:bool`]
7565 [MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;]
7566 THEN REPLICATE_TAC (134-9)(POP_ASSUM MP_TAC)
7567 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7568 THEN POP_ASSUM MP_TAC
7571 THEN REWRITE_TAC[REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
7573 THEN POP_ASSUM(fun th-> MRESA_TAC th[`2`;`SUC 2`])
7574 THEN POP_ASSUM MP_TAC
7575 THEN REWRITE_TAC[ARITH_RULE`SUC 2 MOD 3=0/\ 0+A=A/\ 2 MOD 3=2`]
7576 THEN REPLICATE_TAC (136-117)(POP_ASSUM MP_TAC)
7577 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7578 THEN POP_ASSUM MP_TAC
7580 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`])
7582 THEN REAL_ARITH_TAC;
7595 MP_TAC(VECTOR_ARITH`vv (q MOD k) - vv (p MOD k) = --(vv (p MOD k) - (vv:num->real^3) (q MOD k))`)
7597 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
7598 THEN REWRITE_TAC[NORM_NEG];
7602 ASM_REWRITE_TAC[ARITH_RULE`a*b+c*b=(a+c)*b`]
7603 THEN MATCH_MP_TAC REAL_LE_MUL
7608 REPLICATE_TAC (124-92)(POP_ASSUM MP_TAC)
7609 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7618 REPLICATE_TAC (124-92)(POP_ASSUM MP_TAC)
7619 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7626 THEN ASM_REWRITE_TAC[is_ear_v39]
7628 THEN SUBGOAL_THEN`k'-1 IN {i | i < 3 /\ scs_J_v39 s' i (SUC i)}`ASSUME_TAC;
7632 ASM_REWRITE_TAC[IN_ELIM_THM;ARITH_RULE`3-1<3`]
7633 THEN REPLICATE_TAC (132-88)(POP_ASSUM MP_TAC)
7634 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7636 THEN ASM_REWRITE_TAC[]);
7641 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
7643 THEN POP_ASSUM(fun th-> ASM_TAC
7644 THEN REWRITE_TAC[SYM th])
7645 THEN REPEAT STRIP_TAC
7646 THEN SUBGOAL_THEN`d' = scs_d_v39 s' `ASSUME_TAC
7651 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
7656 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;]
7657 THEN REPEAT RESA_TAC
7658 THEN POP_ASSUM MP_TAC
7659 THEN REWRITE_TAC[REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
7661 THEN POP_ASSUM(fun th-> MRESA_TAC th[`2`;`SUC 2`])
7662 THEN POP_ASSUM MP_TAC
7663 THEN REWRITE_TAC[ARITH_RULE`SUC 2 MOD 3=0/\ 0+A=A/\ 2 MOD 3=2`]
7664 THEN REPLICATE_TAC (136-117)(POP_ASSUM MP_TAC)
7665 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7666 THEN POP_ASSUM MP_TAC
7668 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`])
7670 THEN REAL_ARITH_TAC;
7678 THEN ASM_REWRITE_TAC[is_ear_v39]
7680 THEN SUBGOAL_THEN`k''-1 IN {i | i < 3 /\ scs_J_v39 s'' i (SUC i)}`ASSUME_TAC;
7684 ASM_REWRITE_TAC[IN_ELIM_THM;ARITH_RULE`3-1<3`]
7685 THEN REPLICATE_TAC (132-110)(POP_ASSUM MP_TAC)
7686 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7688 THEN ASM_REWRITE_TAC[]);
7693 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
7695 THEN POP_ASSUM(fun th-> ASM_TAC
7696 THEN REWRITE_TAC[SYM th])
7697 THEN REPEAT STRIP_TAC
7698 THEN SUBGOAL_THEN`d'' = scs_d_v39 s'' `ASSUME_TAC
7703 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
7707 MRESAL_TAC (GEN_ALL QKNVMLB1)[`vv:num->real^3`;`s:scs_v39`;`q:num`;`p:num`;`d'':real`;`mkj:bool`]
7708 [MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;]
7709 THEN REPLICATE_TAC (134-9)(POP_ASSUM MP_TAC)
7710 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7711 THEN POP_ASSUM MP_TAC
7714 THEN REWRITE_TAC[REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
7716 THEN POP_ASSUM(fun th-> MRESA_TAC th[`2`;`SUC 2`])
7717 THEN POP_ASSUM MP_TAC
7718 THEN REWRITE_TAC[ARITH_RULE`SUC 2 MOD 3=0/\ 0+A=A/\ 2 MOD 3=2`]
7719 THEN REPLICATE_TAC (136-117)(POP_ASSUM MP_TAC)
7720 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7721 THEN POP_ASSUM MP_TAC
7723 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`])
7725 THEN REAL_ARITH_TAC;
7733 THEN REWRITE_TAC[periodic2]
7734 THEN REPEAT STRIP_TAC
7735 THEN POP_ASSUM MP_TAC
7736 THEN MP_TAC SCS_HALF_SLICE_IS_A_SCS
7737 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2]
7738 THEN ASM_SIMP_TAC[REAL_ARITH`&0<= A+B -C<=> C<= A+B`]
7739 THEN REPLICATE_TAC (64-58)(POP_ASSUM MP_TAC)
7740 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7741 THEN REPLICATE_TAC (2)(POP_ASSUM MP_TAC)
7742 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
7744 THEN ASM_REWRITE_TAC[])
7745 THEN REPLICATE_TAC (64-58)(POP_ASSUM MP_TAC)
7746 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7747 THEN REPLICATE_TAC (2)(POP_ASSUM MP_TAC)
7748 THEN GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
7751 THEN REPLICATE_TAC (81-72)(POP_ASSUM MP_TAC)
7752 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7753 THEN MRESAL_TAC th[`0`;`k'-1`;][ARITH_RULE`0+A=A`])
7754 THEN SUBGOAL_THEN`(!i. scs_b_v39 s i (SUC i) <= cstab)`ASSUME_TAC;
7758 REPLICATE_TAC (83-24)(POP_ASSUM MP_TAC)
7759 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7760 THEN MATCH_MP_TAC th)
7761 THEN ASM_REWRITE_TAC[];
7767 MRESAL_TAC(GEN_ALL SCS_HALF_SLICE_IS_A_SCS)[`s:scs_v39`;`s':scs_v39`;`q:num`;`p:num`;`s'':scs_v39`]
7768 [MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2]
7769 THEN REPLICATE_TAC (85-35)(POP_ASSUM MP_TAC)
7770 THEN POP_ASSUM(fun th->
7772 THEN REWRITE_TAC[th]
7773 THEN ASSUME_TAC th THEN REPEAT RESA_TAC)
7774 THEN REPLICATE_TAC (85-36)(POP_ASSUM MP_TAC)
7775 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7776 THEN POP_ASSUM MP_TAC
7779 THEN ASM_REWRITE_TAC[SET_RULE`A\/B<=> B\/A`]
7780 THEN REPLICATE_TAC (84-63)(POP_ASSUM MP_TAC)
7781 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7782 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
7783 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
7785 THEN ASM_REWRITE_TAC[])
7786 THEN REPLICATE_TAC (84-62)(POP_ASSUM MP_TAC)
7787 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7788 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
7789 THEN GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
7791 THEN ASM_REWRITE_TAC[REAL_ARITH`a<=b+c<=> a<= c+b`]
7793 THEN REPLICATE_TAC (101-92)(POP_ASSUM MP_TAC)
7794 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7795 THEN MRESAL_TAC th[`0`;`k''-1`;][ARITH_RULE`0+A=A`])
7796 THEN REPLICATE_TAC (102-57)(POP_ASSUM MP_TAC)
7797 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7800 THEN REWRITE_TAC[SET_RULE`{a|F}={}`;SUM_SING;SUM_CLAUSES]
7801 THEN REAL_ARITH_TAC;
7810 let DIST_DIAG_LE_CSTAB= prove_by_refinement(
7811 `~(scs_k_v39 s =4 /\ ~(scs_J_v39 s' 0 (scs_k_v39 s' - 1)))/\
7812 scs_half_slice_v39 s p q d' mkj =s'/\
7813 scs_half_slice_v39 s q p d'' mkj =s'' /\
7815 is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q /\
7816 is_scs_slice_v39 s s' s'' p q
7818 norm(vv (p MOD (scs_k_v39 s)) - vv (q MOD (scs_k_v39 s)))<= cstab`,
7822 THEN MP_TAC SCS_K_PRIME_CASE_3
7823 THEN REWRITE_TAC[taustar_v39;LET_DEF;LET_END_DEF;]
7825 THEN ABBREV_TAC`k=scs_k_v39 s`
7826 THEN MP_TAC(ARITH_RULE`3<k==> ~(k<=3)`)
7828 THEN MP_TAC SCS_K_LE_6
7831 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ]
7832 THEN REPEAT RESA_TAC
7833 THEN REPLICATE_TAC (48-5)(POP_ASSUM MP_TAC)
7834 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7836 THEN ASM_REWRITE_TAC[])
7838 THEN ABBREV_TAC`k'=scs_k_v39 s'`
7839 THEN ABBREV_TAC`k''=scs_k_v39 s''`
7840 THEN MP_TAC(SET_RULE`scs_J_v39 s' 0 (scs_k_v39 s' - 1) \/ ~(scs_J_v39 s' 0 (scs_k_v39 s' - 1) )`)
7845 REPLICATE_TAC (52)(POP_ASSUM MP_TAC)
7846 THEN REMOVE_ASSUM_TAC
7847 THEN REPEAT STRIP_TAC
7848 THEN REPLICATE_TAC (51-43)(POP_ASSUM MP_TAC)
7849 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7851 THEN ASM_REWRITE_TAC[])
7860 THEN ASM_REWRITE_TAC[is_ear_v39;is_scs_v39;periodic2]
7862 THEN SUBGOAL_THEN`k'-1 IN {i | i < 3 /\ scs_J_v39 s' i (SUC i)}`ASSUME_TAC;
7868 ASM_REWRITE_TAC[IN_ELIM_THM;ARITH_RULE`3-1<3`]
7869 THEN REPLICATE_TAC (77-60)(POP_ASSUM MP_TAC)
7870 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7871 THEN MRESAL_TAC th[`0`;`3-1`][ARITH_RULE`0+3=3`]
7872 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`])
7873 THEN REPLICATE_TAC (78-50)(POP_ASSUM MP_TAC)
7874 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7876 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`])
7882 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
7884 THEN POP_ASSUM(fun th-> ASM_TAC
7885 THEN REWRITE_TAC[SYM th])
7886 THEN REPEAT STRIP_TAC
7887 THEN REPLICATE_TAC (77-5)(POP_ASSUM MP_TAC)
7888 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7890 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`])
7892 THEN SUBGOAL_THEN`d' = scs_d_v39 s' `ASSUME_TAC
7898 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
7903 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
7905 THEN POP_ASSUM(fun th-> MRESA_TAC th[`2`;`SUC 2`])
7906 THEN POP_ASSUM MP_TAC
7907 THEN REWRITE_TAC[ARITH_RULE`SUC 2 MOD 3=0/\ 0+A=A/\ 2 MOD 3=2`;dist]
7908 THEN MRESAL_TAC (GEN_ALL W_EW_K_SCS_ADD_P)[
7909 `d':real`;`mkj:bool`;`s':scs_v39`;`(vv:num->real^3)(p MOD k)`;`q:num`;`s:scs_v39`;`(vv:num->real^3)`;`k':num`;`p:num`;`k:num`;`(vv:num->real^3) (q MOD k)`][MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;ARITH_RULE`3-1=2`]
7910 THEN SUBGOAL_THEN`norm ((vv:num->real^3) (q MOD k) - vv (p MOD k)) =norm (vv (p MOD k) - vv (q MOD k))`ASSUME_TAC
7915 MP_TAC(VECTOR_ARITH`vv (q MOD k) - vv (p MOD k) = --(vv (p MOD k) - (vv:num->real^3) (q MOD k))`)
7917 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
7918 THEN REWRITE_TAC[NORM_NEG];
7925 MP_TAC SCS_J_DIAG_EQ
7926 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;is_ear_v39]
7927 THEN REPLICATE_TAC (51-36)(POP_ASSUM MP_TAC)
7928 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7929 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
7930 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
7931 THEN ASM_REWRITE_TAC[]
7933 THEN REPLICATE_TAC (51-36)(POP_ASSUM MP_TAC)
7934 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7935 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
7936 THEN GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
7937 THEN ASM_REWRITE_TAC[]
7940 THEN REPLICATE_TAC (51-48)(POP_ASSUM MP_TAC)
7941 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7943 THEN ASM_REWRITE_TAC[is_ear_v39;is_scs_v39;periodic2]
7945 THEN SUBGOAL_THEN`k''-1 IN {i | i < 3 /\ scs_J_v39 s'' i (SUC i)}`ASSUME_TAC;
7951 ASM_REWRITE_TAC[IN_ELIM_THM;ARITH_RULE`3-1<3`]
7952 THEN REPLICATE_TAC (78-61)(POP_ASSUM MP_TAC)
7953 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7954 THEN MRESAL_TAC th[`0`;`3-1`][ARITH_RULE`0+3=3`]
7955 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`])
7956 THEN REPLICATE_TAC (79-51)(POP_ASSUM MP_TAC)
7957 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7959 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`])
7967 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
7969 THEN POP_ASSUM(fun th-> ASM_TAC
7970 THEN REWRITE_TAC[SYM th])
7971 THEN REPEAT STRIP_TAC
7972 THEN REPLICATE_TAC (78-5)(POP_ASSUM MP_TAC)
7973 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7975 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`])
7977 THEN SUBGOAL_THEN`d'' = scs_d_v39 s'' `ASSUME_TAC
7983 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
7987 MRESAL_TAC (GEN_ALL QKNVMLB1)[`vv:num->real^3`;`s:scs_v39`;`q:num`;`p:num`;`d'':real`;`mkj:bool`]
7988 [MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
7989 THEN REPLICATE_TAC (80-41)(POP_ASSUM MP_TAC)
7990 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`;SYM th]
7991 THEN REWRITE_TAC[th]
7993 THEN REPEAT RESA_TAC
7994 THEN POP_ASSUM(fun th-> MRESA_TAC th[`2`;`SUC 2`])
7995 THEN POP_ASSUM MP_TAC
7996 THEN REWRITE_TAC[ARITH_RULE`SUC 2 MOD 3=0/\ 0+A=A/\ 2 MOD 3=2`;dist]
7997 THEN MRESAL_TAC (GEN_ALL W_EW_K_SCS_ADD_P)[
7998 `d'':real`;`mkj:bool`;`s'':scs_v39`;`(vv:num->real^3)(q MOD k)`;`p:num`;`s:scs_v39`;`(vv:num->real^3)`;`k'':num`;`q:num`;`k:num`;`(vv:num->real^3) (p MOD k)`][MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;ARITH_RULE`3-1=2`]
8005 REPLICATE_TAC (52)(POP_ASSUM MP_TAC)
8006 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8008 THEN ASM_REWRITE_TAC[])
8016 REPLICATE_TAC (52-6)(POP_ASSUM MP_TAC)
8017 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8019 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`])
8021 THEN SUBGOAL_THEN`d' = scs_d_v39 s' `ASSUME_TAC
8027 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
8031 SUBGOAL_THEN` (q+1+k -p MOD k)MOD k =scs_k_v39 s'` ASSUME_TAC
8036 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
8037 THEN ASM_REWRITE_TAC[]
8042 MRESA_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`p:num`;`q:num`;`d':real`;`scs_J_v39 s' p q`]
8043 THEN POP_ASSUM MP_TAC
8044 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;scs_half_slice_v39;PAIR_EQ;REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
8046 THEN MP_TAC(ARITH_RULE`3<= k' /\ k'<k ==> 0<k' /\ ~(k=0) /\ k'-1<k'`)
8048 THEN MRESA_TAC MOD_LT[`0`;`k':num`]
8049 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
8050 THEN MRESAL_TAC (GEN_ALL W_EW_K_SCS_ADD_P)[
8051 `d':real`;`mkj:bool`;`s':scs_v39`;`(vv:num->real^3)(p MOD k)`;`q:num`;`s:scs_v39`;`(vv:num->real^3)`;`k':num`;`p:num`;`k:num`;`(vv:num->real^3) (q MOD k)`][MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;ARITH_RULE`3-1=2`]
8052 THEN MP_TAC QKNVMLB1
8053 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
8055 THEN REMOVE_ASSUM_TAC
8056 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`0`;`k'-1`][ARITH_RULE`0+A=A`;dist])
8057 THEN POP_ASSUM MP_TAC
8059 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
8060 THEN ASM_REWRITE_TAC[]
8061 THEN REPLICATE_TAC (66-42)(POP_ASSUM MP_TAC)
8062 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8063 THEN POP_ASSUM MP_TAC
8065 THEN ASM_REWRITE_TAC[cstab])
8066 THEN REAL_ARITH_TAC;
8070 REPLICATE_TAC (52-6)(POP_ASSUM MP_TAC)
8071 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8073 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`])
8075 THEN SUBGOAL_THEN`d' = scs_d_v39 s' `ASSUME_TAC
8081 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
8085 SUBGOAL_THEN` (q+1+k -p MOD k)MOD k =scs_k_v39 s'` ASSUME_TAC
8090 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
8091 THEN ASM_REWRITE_TAC[]
8096 MRESA_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`p:num`;`q:num`;`d':real`;`scs_J_v39 s' p q`]
8097 THEN POP_ASSUM MP_TAC
8098 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;scs_half_slice_v39;PAIR_EQ;REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
8100 THEN MP_TAC(ARITH_RULE`3<= k' /\ k'<k ==> 0<k' /\ ~(k=0) /\ k'-1<k'`)
8102 THEN MRESA_TAC MOD_LT[`0`;`k':num`]
8103 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
8104 THEN MRESAL_TAC (GEN_ALL W_EW_K_SCS_ADD_P)[
8105 `d':real`;`mkj:bool`;`s':scs_v39`;`(vv:num->real^3)(p MOD k)`;`q:num`;`s:scs_v39`;`(vv:num->real^3)`;`k':num`;`p:num`;`k:num`;`(vv:num->real^3) (q MOD k)`][MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;ARITH_RULE`3-1=2`]
8106 THEN MP_TAC QKNVMLB1
8107 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
8109 THEN REMOVE_ASSUM_TAC
8110 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`0`;`k'-1`][ARITH_RULE`0+A=A`;dist])
8111 THEN POP_ASSUM MP_TAC
8113 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
8114 THEN ASM_REWRITE_TAC[]
8115 THEN REPLICATE_TAC (66-42)(POP_ASSUM MP_TAC)
8116 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8117 THEN POP_ASSUM MP_TAC
8119 THEN ASM_REWRITE_TAC[cstab])
8120 THEN REAL_ARITH_TAC;
8128 let VV_SUC_EQ_RHO_NODE_PRIME=prove_by_refinement(`scs_k_v39 s =k /\
8129 (vv:num->real^3) p1=u /\
8130 IMAGE (vv:num->real^3) (:num)=V/\
8131 IMAGE (\i. {vv i,(vv:num->real^3) (SUC i)}) (:num) =E/\
8132 IMAGE (\i. (vv i,(vv:num->real^3) (SUC i))) (:num)=FF /\
8133 is_scs_v39 s /\ ~(k<=3)/\
8136 (!m. ITER m (rho_node1 FF) u= vv (m+p1))`,
8141 ASM_REWRITE_TAC[ITER;ARITH_RULE`0+p=p`];
8143 ASM_REWRITE_TAC[ITER]
8144 THEN SUBGOAL_THEN`(vv:num->real^3) (m+p1), (vv:num->real^3) (SUC m+p1) IN FF ` ASSUME_TAC;
8147 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
8148 THEN EXISTS_TAC`m+p1:num`
8149 THEN REWRITE_TAC[ARITH_RULE`SUC m+p= SUC(m+p)`;SET_RULE`(a:num)IN(:num)`];
8151 MATCH_MP_TAC(GEN_ALL Local_lemmas.DETER_RHO_NODE)
8152 THEN EXISTS_TAC`V:real^3->bool`
8153 THEN EXISTS_TAC`E:(real^3->bool)->bool`
8154 THEN ASM_REWRITE_TAC[]
8155 THEN MP_TAC SCS_K_PRIME_CASE_3
8157 THEN POP_ASSUM(fun th-> ASM_TAC
8159 THEN ASM_REWRITE_TAC[scs_diag;BBs_v39;LET_DEF;LET_END_DEF;convex_local_fan]
8160 THEN REPEAT RESA_TAC]);;
8163 let SUM_AZIM_EQ_ANGLE_LE4=prove_by_refinement(
8164 ` ~(scs_k_v39 s<=3)/\
8167 (vv:num->real^3) (p MOD (scs_k_v39 s))=u /\
8168 IMAGE (vv:num->real^3) (:num)=V/\
8169 IMAGE (\i. {vv i,(vv:num->real^3) (SUC i)}) (:num)=E/\
8170 IMAGE (\i. (vv i,(vv:num->real^3) (SUC i))) (:num)=FF
8172 sum {i | i < scs_k_v39 s}
8173 (\i. rho_fun (norm ((vv:num->real^3) (i+p MOD scs_k_v39 s))) *
8174 interior_angle1 (vec 0) FF (ITER i (rho_node1 FF) u))
8175 =sum FF (\e. rho_fun (norm (FST e)) * azim_in_fan e E)
8178 MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`p MOD scs_k_v39 s`;`vv:num->real^3`]
8180 THEN ASM_REWRITE_TAC[MMs_v39;BBprime_v39;BBprime2_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
8181 THEN ABBREV_TAC`k= scs_k_v39 s`
8182 THEN REPEAT RESA_TAC;
8184 REPLICATE_TAC (30-2)(POP_ASSUM MP_TAC)
8185 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8187 THEN ASM_REWRITE_TAC[];
8189 MATCH_MP_TAC SUM_EQ_GENERAL
8190 THEN EXISTS_TAC`(\i. (vv:num->real^3) (i+ p MOD k), vv (SUC i + p MOD k))`
8191 THEN MP_TAC(ARITH_RULE`3<= k ==> ~(k=0) /\ 1<k`)
8196 THEN REWRITE_TAC[IN_ELIM_THM; IMAGE;EXISTS_UNIQUE]
8197 THEN ASM_REWRITE_TAC[PAIR_EQ]
8198 THEN REPEAT RESA_TAC
8199 THEN EXISTS_TAC`(x MOD k + k -p MOD k) MOD k`
8200 THEN ASM_REWRITE_TAC[ARITH_RULE`A-0=A`;PAIR_EQ]
8201 THEN MRESA_TAC DIVISION[`x MOD k + k - p MOD k:num`;`k:num`]
8202 THEN MRESA_TAC DIVISION[`p:num`;`k:num`]
8203 THEN MRESA_TAC MOD_LT[`p MOD k`;`k:num`]
8204 THEN MRESA_TAC MOD_MOD_REFL[`x:num`;`k:num`]
8205 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`k:num`;`x MOD k`][ARITH_RULE`1 * k + x MOD k = x MOD k +k`]
8206 THEN MRESA_TAC MOD_ADD_MOD[`x MOD k + k - p MOD k:num`;`p MOD k:num`;`k:num`]
8207 THEN MP_TAC(ARITH_RULE`1<k/\ p MOD k<k ==>(x MOD k+ k- p MOD k) + p MOD k = x MOD k+k /\ (x + p MOD k) + k- p MOD k= x+k`)
8209 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;]
8210 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x MOD k + k - p MOD k) MOD k + p MOD k:num`
8211 THEN MRESA1_TAC th ` x:num`)
8212 THEN MRESA_TAC MOD_ADD_MOD[`x:num`;`1`;`k:num`]
8213 THEN MRESA_TAC MOD_ADD_MOD[`(x MOD k + k - p MOD k) MOD k + p MOD k`;`1`;`k:num`]
8214 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;ARITH_RULE`SUC ((x MOD k + k - p MOD k) MOD k) + p MOD k = ((x MOD k + k - p MOD k) MOD k + p MOD k)+1`]
8215 THEN POP_ASSUM(fun th-> MRESA1_TAC th `((x MOD k + k - p MOD k) MOD k + p MOD k)+1:num`
8216 THEN MRESA1_TAC th ` x+1:num`)
8217 THEN REWRITE_TAC[ADD1]
8218 THEN REPEAT STRIP_TAC
8219 THEN MRESA_TAC DIVISION[`x:num`;`k:num`]
8220 THEN MRESA_TAC DIVISION[`y' + p MOD k:num`;`k:num`]
8221 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;]
8222 THEN POP_ASSUM(fun th-> MRESA1_TAC th `y' + p MOD k:num`)
8224 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;scs_half_slice_v39;PAIR_EQ;REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`;dist]
8226 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(y'+ p MOD k) MOD k:num`;`(x MOD k + k)MOD k`])
8227 THEN MRESA_TAC MOD_LT[`y':num`;`k:num`]
8228 THEN MRESAL_TAC(GEN_ALL Hdplygy.MOD_EQ_MOD)[`y':num`;`x MOD k + k- p MOD k`;`p MOD k`;`k:num`][]
8229 THEN POP_ASSUM MP_TAC
8230 THEN ONCE_REWRITE_TAC[ADD_SYM]
8233 REWRITE_TAC[IN_ELIM_THM;]
8234 THEN REPEAT STRIP_TAC;
8237 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
8238 THEN EXISTS_TAC`x+ p MOD k`
8239 THEN REWRITE_TAC[SET_RULE`(a:num)IN (:num)`;ADD1;ARITH_RULE`(x + 1) + p MOD k= (x + p MOD k)+1`];
8241 MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE_PRIME)[`V:real^3->bool`;`E:(real^3->bool)->bool`;`k:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`u:real^3`;`vv:num->real^3`;`p:num MOD k`]
8242 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
8243 THEN SUBGOAL_THEN`(vv:num->real^3) (x + p MOD k) IN V`ASSUME_TAC;
8246 THEN REWRITE_TAC[IN_ELIM_THM;IMAGE]
8247 THEN EXISTS_TAC`x+ p MOD k`
8248 THEN REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
8250 REPLICATE_TAC (35-6)(POP_ASSUM MP_TAC)
8251 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8253 THEN ASM_REWRITE_TAC[]
8255 THEN MP_TAC Nkezbfc_local.CONVEX_LOFA_IMP_INANGLE_EQ_AZIM
8257 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(vv:num->real^3) (x + p MOD k )`])
8258 THEN REPLICATE_TAC (3) REMOVE_ASSUM_TAC
8259 THEN POP_ASSUM(fun th-> ASSUME_TAC th
8260 THEN MRESAL1_TAC th`SUC x`[ITER])]);;
8276 let V_SLICE_EQ_NUMSEG=prove_by_refinement(
8277 ` IMAGE (\i. (vv i,(vv:num->real^3) (SUC i))) (:num) = FF/\
8282 scs_half_slice_v39 s p q d' mkj =s'/\
8284 is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q /\
8285 is_scs_slice_v39 s s' s'' p q ==>
8287 ITER i (rho_node1 FF) u IN IMAGE (\i. vv (i MOD k' + p MOD k)) (:num)}
8290 REWRITE_TAC[MMs_v39;BBprime_v39;BBprime2_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
8291 THEN REPEAT STRIP_TAC
8292 THEN REWRITE_TAC[EXTENSION;IN_ELIM_THM;IMAGE]
8293 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE)[`scs_k_v39 s`;`IMAGE (vv:num->real^3) (:num)`;`IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`;`p:num`;`q:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`(vv:num->real^3) (p MOD k)`;`vv:num->real^3`;`p:num MOD k`]
8294 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
8295 THEN SUBGOAL_THEN` (q+1+k -p MOD k)MOD k =scs_k_v39 s'` ASSUME_TAC;
8298 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
8299 THEN ASM_REWRITE_TAC[];
8301 MRESAL_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`p:num`;`q:num`;`d':real`;`scs_J_v39 s' p q`]
8302 [MMs_v39;BBprime_v39;BBprime2_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
8306 MP_TAC(ARITH_RULE`3 <= scs_k_v39 s ==> ~(scs_k_v39 s=0)`)
8309 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;]
8310 THEN POP_ASSUM(fun th-> MRESA1_TAC th `x + p MOD k:num`
8311 THEN MRESA1_TAC th `x' MOD k'+ p MOD k:num`)
8312 THEN MRESA_TAC DIVISION[`x+ p MOD k`;`k:num`]
8313 THEN MRESA_TAC DIVISION[`x' MOD k'+ p MOD k`;`k:num`]
8315 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;scs_half_slice_v39;PAIR_EQ;REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`;dist]
8317 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(x' MOD k'+ p MOD k) MOD k:num`;`(x + p MOD k)MOD k`])
8318 THEN MRESAL_TAC(GEN_ALL Hdplygy.MOD_EQ_MOD)[`x' MOD k':num`;`x:num`;`p MOD k`;`k:num`][]
8319 THEN POP_ASSUM MP_TAC
8320 THEN ONCE_REWRITE_TAC[ADD_SYM]
8321 THEN MRESA_TAC MOD_LT[`x:num`;`k:num`]
8322 THEN MP_TAC(ARITH_RULE`3<=k' ==> ~(k'=0)`)
8324 THEN MRESA_TAC DIVISION[`x':num`;`k':num`]
8325 THEN MP_TAC(ARITH_RULE`3<=k'/\ k'<k /\ x' MOD k'< k' ==> x' MOD k'< k`)
8327 THEN MRESA_TAC MOD_LT[`x' MOD k':num`;`k:num`]
8329 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
8334 THEN POP_ASSUM MP_TAC
8338 THEN MRESA_TAC MOD_LT[`x:num`;`k':num`]
8339 THEN REWRITE_TAC[SET_RULE`(x:num)IN(:num)`];
8342 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
8343 THEN ASM_REWRITE_TAC[];
8345 MRESAL_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`p:num`;`q:num`;`d':real`;`scs_J_v39 s' p q`]
8346 [MMs_v39;BBprime_v39;BBprime2_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
8351 MP_TAC(ARITH_RULE`3 <= scs_k_v39 s ==> ~(scs_k_v39 s=0)`)
8354 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;]
8355 THEN POP_ASSUM(fun th-> MRESA1_TAC th `x + p MOD k:num`
8356 THEN MRESA1_TAC th `x' MOD k'+ p MOD k:num`)
8357 THEN MRESA_TAC DIVISION[`x+ p MOD k`;`k:num`]
8358 THEN MRESA_TAC DIVISION[`x' MOD k'+ p MOD k`;`k:num`]
8360 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;scs_half_slice_v39;PAIR_EQ;REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`;dist]
8362 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(x' MOD k'+ p MOD k) MOD k:num`;`(x + p MOD k)MOD k`])
8363 THEN MRESAL_TAC(GEN_ALL Hdplygy.MOD_EQ_MOD)[`x' MOD k':num`;`x:num`;`p MOD k`;`k:num`][]
8364 THEN POP_ASSUM MP_TAC
8365 THEN ONCE_REWRITE_TAC[ADD_SYM]
8366 THEN MRESA_TAC MOD_LT[`x:num`;`k:num`]
8367 THEN MP_TAC(ARITH_RULE`3<=k' ==> ~(k'=0)`)
8369 THEN MRESA_TAC DIVISION[`x':num`;`k':num`]
8370 THEN MP_TAC(ARITH_RULE`3<=k'/\ k'<k /\ x' MOD k'< k' ==> x' MOD k'< k`)
8372 THEN MRESA_TAC MOD_LT[`x' MOD k':num`;`k:num`]
8374 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
8379 THEN POP_ASSUM MP_TAC
8383 THEN MRESA_TAC MOD_LT[`x:num`;`k':num`]
8384 THEN REWRITE_TAC[SET_RULE`(x:num)IN(:num)`]]);;
8393 let SCS_SLICE_SYM= prove_by_refinement(`
8394 is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q==>
8395 (is_scs_slice_v39 s s' s'' p q <=> is_scs_slice_v39 s s'' s' q p)`,
8398 REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;
8399 is_scs_slice_v39;scs_slice_v39;PAIR_EQ]
8404 THEN MRESAL_TAC(GEN_ALL SCS_J_DIAG_EQ)[`scs_d_v39 s'`;`scs_d_v39 s''`;`scs_J_v39 s' 0 (scs_k_v39 s' - 1):bool`;`s:scs_v39`;`p:num`;`q:num`;`s':scs_v39`;`s'':scs_v39`]
8405 [MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;
8406 is_scs_slice_v39;scs_slice_v39;PAIR_EQ]
8407 THEN POP_ASSUM MP_TAC
8408 THEN REWRITE_TAC[SET_RULE`(A/\ B/\A /\B==>C)<=>(A/\B==>C) `]
8409 THEN REPLICATE_TAC (30-23)(POP_ASSUM MP_TAC)
8410 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
8411 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
8412 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
8415 THEN REPLICATE_TAC (30-23)(POP_ASSUM MP_TAC)
8416 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
8417 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
8418 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
8421 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;REAL_ARITH`a<=b+c <=> a<= c+b`;
8422 SET_RULE`(A==> B\/C)<=> (A==>C\/B)`])
8425 POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
8429 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
8432 POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
8436 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
8440 THEN MRESAL_TAC(GEN_ALL SCS_J_DIAG_EQ)[`scs_d_v39 s''`;`scs_d_v39 s'`;`scs_J_v39 s'' 0 (scs_k_v39 s'' - 1):bool`;`s:scs_v39`;`q:num`;`p:num`;`s'':scs_v39`;`s':scs_v39`]
8441 [MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;
8442 is_scs_slice_v39;scs_slice_v39;PAIR_EQ]
8443 THEN POP_ASSUM MP_TAC
8444 THEN REWRITE_TAC[SET_RULE`(A/\ B/\A /\B==>C)<=>(A/\B==>C) `]
8445 THEN REPLICATE_TAC (30-23)(POP_ASSUM MP_TAC)
8446 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
8447 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
8448 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
8451 THEN REPLICATE_TAC (30-23)(POP_ASSUM MP_TAC)
8452 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
8453 THEN REPLICATE_TAC (1)(POP_ASSUM MP_TAC)
8454 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
8457 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;])
8462 POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
8466 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
8471 ONCE_REWRITE_TAC[REAL_ARITH`a<=b+c <=> a<= c+b`]
8472 THEN ASM_REWRITE_TAC[];
8474 ONCE_REWRITE_TAC[SET_RULE`(A==> B\/C)<=> (A==>C\/B)`]
8475 THEN ASM_REWRITE_TAC[];
8479 POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
8483 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
8488 ONCE_REWRITE_TAC[REAL_ARITH`a<=b+c <=> a<= c+b`]
8489 THEN ASM_REWRITE_TAC[];
8491 ONCE_REWRITE_TAC[SET_RULE`(A==> B\/C)<=> (A==>C\/B)`]
8492 THEN ASM_REWRITE_TAC[]]);;
8496 let SUM_NUMSEG2=prove(`!t. sum(0..2) t = t(0) +t(1) + t(2)`,
8497 REWRITE_TAC[num_CONV `1`;num_CONV `2`; SUM_CLAUSES_NUMSEG] THEN
8498 REWRITE_TAC[SUM_SING_NUMSEG; ARITH; REAL_ADD_ASSOC]);;
8502 let NUMSEG_2=prove(`{i| i<3}=0..2`,
8503 REWRITE_TAC[EXTENSION;IN_NUMSEG;IN_ELIM_THM]
8507 let SUM_NUMSEG3=prove(`!t. sum(0..3) t = t(0) +t(1) + t(2)+ t(3)`,
8508 REWRITE_TAC[num_CONV `1`;num_CONV `2`;num_CONV `3`; SUM_CLAUSES_NUMSEG] THEN
8509 REWRITE_TAC[SUM_SING_NUMSEG; ARITH; REAL_ADD_ASSOC]);;
8513 let NUMSEG_3=prove(`{i| i<4}=0..3`,
8514 REWRITE_TAC[EXTENSION;IN_NUMSEG;IN_ELIM_THM]
8519 let SUM_AZIM_EQ_ANGLE_EQ4=prove_by_refinement(
8521 scs_half_slice_v39 s p q d' mkj =s'/\
8522 scs_half_slice_v39 s q p d'' mkj =s'' /\
8523 vv' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s')+p MOD (scs_k_v39 s)))
8525 vv'' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s'')+q MOD (scs_k_v39 s)))
8528 is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q /\
8529 is_scs_slice_v39 s s' s'' p q /\
8530 scs_k_v39 s' =k' /\ scs_k_v39 s =k
8531 /\(vv:num->real^3) (p MOD k)=u /\
8532 (vv:num->real^3) (q MOD k)=w /\
8533 IMAGE (vv:num->real^3) (:num)=V/\
8534 IMAGE (\i. {vv i,(vv:num->real^3) (SUC i)}) (:num) =E/\
8535 IMAGE (\i. (vv i,(vv:num->real^3) (SUC i))) (:num)=FF /\
8536 norm (u - w) <= cstab /\
8539 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)),
8540 e_prime (E UNION {{u, w}})
8541 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)),
8542 face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
8544 tau3 (vv (0 MOD k' + p MOD k)) (vv (1 MOD k' + p MOD k))
8545 (vv (2 MOD k' + p MOD k))
8547 (\i. rho_fun (norm (vv (i + p MOD k))) *
8548 interior_angle1 (vec 0)
8549 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
8550 (ITER i (rho_node1 FF) u))
8553 REWRITE_TAC[LET_DEF;LET_END_DEF;tau3;MMs_v39;BBprime2_v39;BBprime_v39;]
8555 THEN MATCH_MP_TAC(REAL_ARITH`a1+a2+a3=b==> a1+a2+a3-c= b-c`)
8556 THEN ASM_REWRITE_TAC[NUMSEG_2;SUM_NUMSEG2;ARITH_RULE`0 MOD 3=0/\1 MOD 3=1/\ 2 MOD 3=2`;Appendix.rho_rho_fun]
8557 THEN MP_TAC V_PRIME_EQ_V_vv
8559 THEN MP_TAC E_PRIME_EQ_E_vv
8561 THEN MP_TAC F_PRIME_EQ_F_vv
8563 THEN MP_TAC SCS_HALF_SLICE_IS_A_SCS
8565 THEN SUBGOAL_THEN`BBs_v39 s' vv'`ASSUME_TAC;
8569 THEN REWRITE_TAC[MMs_v39;BBprime2_v39;BBprime_v39;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;]
8571 THEN POP_ASSUM MATCH_MP_TAC
8573 THEN REWRITE_TAC[LET_DEF;LET_END_DEF;tau3;MMs_v39;BBprime2_v39;BBprime_v39;is_scs_slice_v39]
8574 THEN REPEAT RESA_TAC
8575 THEN SUBGOAL_THEN`d' = scs_d_v39 s'`ASSUME_TAC
8580 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
8581 THEN ASM_REWRITE_TAC[];
8590 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
8591 THEN ASM_REWRITE_TAC[];
8602 MRESAL_TAC (GEN_ALL(INST_TYPE [`:3`,`:M`]V_E_FF_IS_SCS_CASES_3))[`s':scs_v39`;`vv':num->real^3`]
8604 THEN MRESA_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE)[`scs_k_v39 s`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`p:num`;`q:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`u:real^3`;`vv:num->real^3`;`p:num MOD k`]
8605 THEN MRESA_TAC (GEN_ALL Nkezbfc_local.CONVEX_LOFA_IMP_INANGLE_EQ_AZIM_IVS)
8606 [`e_prime (E UNION {{u, w}})
8607 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
8609 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
8610 `face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)`]
8611 THEN MATCH_MP_TAC(REAL_ARITH`a1= b1 /\ a2= b2 /\a3= b3 ==> a1+a2+a3= b1+b2+b3`)
8612 THEN REPEAT STRIP_TAC
8613 THEN REWRITE_TAC[REAL_EQ_MUL_LCANCEL]
8614 THEN MATCH_MP_TAC(SET_RULE`A==>B\/A`)
8619 THEN SUBGOAL_THEN`vv (0 + p MOD k) IN
8621 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8625 REPLICATE_TAC (33-26)(POP_ASSUM MP_TAC)
8626 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8627 THEN REWRITE_TAC[SYM th;IN_ELIM_THM;IMAGE])
8629 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
8635 SUBGOAL_THEN`vv (1 + p MOD k) IN
8637 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8641 REPLICATE_TAC (34-26)(POP_ASSUM MP_TAC)
8642 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8643 THEN REWRITE_TAC[SYM th;IN_ELIM_THM;IMAGE])
8645 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
8648 SUBGOAL_THEN`vv (2 + p MOD k) IN
8650 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8654 REPLICATE_TAC (35-26)(POP_ASSUM MP_TAC)
8655 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8656 THEN REWRITE_TAC[SYM th;IN_ELIM_THM;IMAGE])
8658 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
8661 REPLICATE_TAC (3)(POP_ASSUM MP_TAC)
8662 THEN REPLICATE_TAC (4) RESA_TAC
8663 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(vv:num->real^3) (0 + p MOD k)`)
8664 THEN SUBGOAL_THEN`(rho_node1
8665 {(vv (0 MOD 3 + p MOD k),vv (1 MOD 3 + p MOD k)), (vv (1 MOD 3 + p MOD k),
8666 vv (2 MOD 3 + p MOD k)),
8667 (vv (2 MOD 3 + p MOD k),
8668 vv (0 MOD 3 + p MOD k))}
8669 (vv (0 + p MOD k))) = (vv:num->real^3) (1 MOD 3 + p MOD k)`ASSUME_TAC
8673 MATCH_MP_TAC (GEN_ALL Local_lemmas.DETER_RHO_NODE)
8674 THEN EXISTS_TAC`v_prime V
8675 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8676 THEN EXISTS_TAC`e_prime (E UNION {{u, w}})
8677 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8678 THEN ASM_REWRITE_TAC[]
8679 THEN REPLICATE_TAC (37-25)(POP_ASSUM MP_TAC)
8680 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
8682 THEN ASM_REWRITE_TAC[convex_local_fan]
8684 THEN REWRITE_TAC[SET_RULE`a IN {a1,b,c} <=> a=a1\/ a=b\/ a=c`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
8690 THEN SUBGOAL_THEN`(ivs_rho_node1
8691 {(vv (0 MOD 3 + p MOD k),vv (1 MOD 3 + p MOD k)), (vv (1 MOD 3 + p MOD k),
8692 vv (2 MOD 3 + p MOD k)),
8693 (vv (2 MOD 3 + p MOD k),
8694 vv (0 MOD 3 + p MOD k))}
8695 (vv (0 + p MOD k))) = (vv:num->real^3) (2 MOD 3 + p MOD k)`ASSUME_TAC
8699 MATCH_MP_TAC (GEN_ALL Local_lemmas.IVS_RHO_NODE1_DETE)
8700 THEN EXISTS_TAC`v_prime V
8701 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8702 THEN EXISTS_TAC`e_prime (E UNION {{u, w}})
8703 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8704 THEN ASM_REWRITE_TAC[]
8705 THEN REPLICATE_TAC (38-25)(POP_ASSUM MP_TAC)
8706 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
8708 THEN ASM_REWRITE_TAC[convex_local_fan]
8710 THEN REWRITE_TAC[SET_RULE`a IN {a1,b,c} <=> a=a1\/ a=b\/ a=c`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
8714 SUBGOAL_THEN`(rho_node1
8715 {(vv (0 MOD 3 + p MOD k),vv (1 MOD 3 + p MOD k)), (vv (1 MOD 3 + p MOD k),
8716 vv (2 MOD 3 + p MOD k)),
8717 (vv (2 MOD 3 + p MOD k),
8718 vv (0 MOD 3 + p MOD k))}
8719 (vv (2 + p MOD k))) = (vv:num->real^3) (0 MOD 3 + p MOD k)`ASSUME_TAC
8723 MATCH_MP_TAC (GEN_ALL Local_lemmas.DETER_RHO_NODE)
8724 THEN EXISTS_TAC`v_prime V
8725 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8726 THEN EXISTS_TAC`e_prime (E UNION {{u, w}})
8727 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8728 THEN ASM_REWRITE_TAC[]
8729 THEN REPLICATE_TAC (39-25)(POP_ASSUM MP_TAC)
8730 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
8732 THEN ASM_REWRITE_TAC[convex_local_fan]
8734 THEN REWRITE_TAC[SET_RULE`a IN {a1,b,c} <=> a=a1\/ a=b\/ a=c`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
8739 ASM_REWRITE_TAC[ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
8740 THEN MRESA_TAC (GEN_ALL Local_lemmas.IN_V_IMP_AZIM_LESS_PI)[`e_prime (E UNION {{u, w}})
8741 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
8743 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
8744 `face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)`;`(vv:num->real^3) (0 + p MOD k)`]
8745 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(vv:num->real^3) (2 + p MOD k)`)
8746 THEN POP_ASSUM MP_TAC
8747 THEN REWRITE_TAC[ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
8749 THEN SUBGOAL_THEN` local_fan
8751 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)),
8752 e_prime (E UNION {{u, w}})
8753 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)),
8754 face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
8759 THEN REWRITE_TAC[convex_local_fan]
8760 THEN REPEAT RESA_TAC
8764 MRESA_TAC (GEN_ALL Local_lemmas.LOCAL_FAN_CHARACTER_OF_RHO_NODE2)
8765 [`e_prime (E UNION {{u, w}})
8766 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
8768 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
8769 `face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)`;`(vv:num->real^3) (0 + p MOD k)`]
8770 THEN POP_ASSUM MP_TAC
8771 THEN REWRITE_TAC[ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
8773 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOCAL_FAN_CHARACTER_OF_RHO_NODE2)
8774 [`e_prime (E UNION {{u, w}})
8775 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
8777 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
8778 `face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)`;`(vv:num->real^3) (2 + p MOD k)`]THEN POP_ASSUM MP_TAC
8779 THEN REWRITE_TAC[ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
8780 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
8782 THEN MRESA_TAC (GEN_ALL Local_lemmas.AZIM_LE_PI_EQ_DIHV)[`vec 0:real^3`;`(vv:num->real^3) (0 + p MOD k)`;`(vv:num->real^3) (1 + p MOD k)`;`(vv:num->real^3) (2 + p MOD k)`]
8788 (******************)
8791 THEN SUBGOAL_THEN`vv (0 + p MOD k) IN
8793 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8797 REPLICATE_TAC (33-26)(POP_ASSUM MP_TAC)
8798 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8799 THEN REWRITE_TAC[SYM th;IN_ELIM_THM;IMAGE])
8801 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
8807 SUBGOAL_THEN`vv (1 + p MOD k) IN
8809 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8813 REPLICATE_TAC (34-26)(POP_ASSUM MP_TAC)
8814 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8815 THEN REWRITE_TAC[SYM th;IN_ELIM_THM;IMAGE])
8817 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
8820 SUBGOAL_THEN`vv (2 + p MOD k) IN
8822 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8826 REPLICATE_TAC (35-26)(POP_ASSUM MP_TAC)
8827 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8828 THEN REWRITE_TAC[SYM th;IN_ELIM_THM;IMAGE])
8830 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
8833 REPLICATE_TAC (3)(POP_ASSUM MP_TAC)
8834 THEN REPLICATE_TAC (4) RESA_TAC
8835 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(vv:num->real^3) (1 + p MOD k)`)
8836 THEN SUBGOAL_THEN`(rho_node1
8837 {(vv (0 MOD 3 + p MOD k),vv (1 MOD 3 + p MOD k)), (vv (1 MOD 3 + p MOD k),
8838 vv (2 MOD 3 + p MOD k)),
8839 (vv (2 MOD 3 + p MOD k),
8840 vv (0 MOD 3 + p MOD k))}
8841 (vv (1 + p MOD k))) = (vv:num->real^3) (2 MOD 3 + p MOD k)`ASSUME_TAC
8845 MATCH_MP_TAC (GEN_ALL Local_lemmas.DETER_RHO_NODE)
8846 THEN EXISTS_TAC`v_prime V
8847 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8848 THEN EXISTS_TAC`e_prime (E UNION {{u, w}})
8849 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8850 THEN ASM_REWRITE_TAC[]
8851 THEN REPLICATE_TAC (37-25)(POP_ASSUM MP_TAC)
8852 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
8854 THEN ASM_REWRITE_TAC[convex_local_fan]
8856 THEN REWRITE_TAC[SET_RULE`a IN {a1,b,c} <=> a=a1\/ a=b\/ a=c`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
8862 THEN SUBGOAL_THEN`(ivs_rho_node1
8863 {(vv (0 MOD 3 + p MOD k),vv (1 MOD 3 + p MOD k)), (vv (1 MOD 3 + p MOD k),
8864 vv (2 MOD 3 + p MOD k)),
8865 (vv (2 MOD 3 + p MOD k),
8866 vv (0 MOD 3 + p MOD k))}
8867 (vv (1 + p MOD k))) = (vv:num->real^3) (0 MOD 3 + p MOD k)`ASSUME_TAC
8871 MATCH_MP_TAC (GEN_ALL Local_lemmas.IVS_RHO_NODE1_DETE)
8872 THEN EXISTS_TAC`v_prime V
8873 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8874 THEN EXISTS_TAC`e_prime (E UNION {{u, w}})
8875 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8876 THEN ASM_REWRITE_TAC[]
8877 THEN REPLICATE_TAC (38-25)(POP_ASSUM MP_TAC)
8878 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
8880 THEN ASM_REWRITE_TAC[convex_local_fan]
8882 THEN REWRITE_TAC[SET_RULE`a IN {a1,b,c} <=> a=a1\/ a=b\/ a=c`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
8886 SUBGOAL_THEN`(rho_node1
8887 {(vv (0 MOD 3 + p MOD k),vv (1 MOD 3 + p MOD k)), (vv (1 MOD 3 + p MOD k),
8888 vv (2 MOD 3 + p MOD k)),
8889 (vv (2 MOD 3 + p MOD k),
8890 vv (0 MOD 3 + p MOD k))}
8891 (vv (0 + p MOD k))) = (vv:num->real^3) (1 MOD 3 + p MOD k)`ASSUME_TAC
8895 MATCH_MP_TAC (GEN_ALL Local_lemmas.DETER_RHO_NODE)
8896 THEN EXISTS_TAC`v_prime V
8897 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8898 THEN EXISTS_TAC`e_prime (E UNION {{u, w}})
8899 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8900 THEN ASM_REWRITE_TAC[]
8901 THEN REPLICATE_TAC (39-25)(POP_ASSUM MP_TAC)
8902 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
8904 THEN ASM_REWRITE_TAC[convex_local_fan]
8906 THEN REWRITE_TAC[SET_RULE`a IN {a1,b,c} <=> a=a1\/ a=b\/ a=c`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
8911 ASM_REWRITE_TAC[ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
8912 THEN MRESA_TAC (GEN_ALL Local_lemmas.IN_V_IMP_AZIM_LESS_PI)[`e_prime (E UNION {{u, w}})
8913 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
8915 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
8916 `face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)`;`(vv:num->real^3) (1 + p MOD k)`]
8917 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(vv:num->real^3) (0 + p MOD k)`)
8918 THEN POP_ASSUM MP_TAC
8919 THEN REWRITE_TAC[ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
8921 THEN SUBGOAL_THEN` local_fan
8923 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)),
8924 e_prime (E UNION {{u, w}})
8925 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)),
8926 face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
8931 THEN REWRITE_TAC[convex_local_fan]
8932 THEN REPEAT RESA_TAC
8936 MRESA_TAC (GEN_ALL Local_lemmas.LOCAL_FAN_CHARACTER_OF_RHO_NODE2)
8937 [`e_prime (E UNION {{u, w}})
8938 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
8940 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
8941 `face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)`;`(vv:num->real^3) (1 + p MOD k)`]
8942 THEN POP_ASSUM MP_TAC
8943 THEN REWRITE_TAC[ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
8945 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOCAL_FAN_CHARACTER_OF_RHO_NODE2)
8946 [`e_prime (E UNION {{u, w}})
8947 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
8949 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
8950 `face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)`;`(vv:num->real^3) (0 + p MOD k)`]THEN POP_ASSUM MP_TAC
8951 THEN REWRITE_TAC[ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
8952 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
8954 THEN MRESA_TAC (GEN_ALL Local_lemmas.AZIM_LE_PI_EQ_DIHV)[`vec 0:real^3`;`(vv:num->real^3) (1 + p MOD k)`;`(vv:num->real^3) (2 + p MOD k)`;`(vv:num->real^3) (0 + p MOD k)`]
8962 THEN SUBGOAL_THEN`vv (0 + p MOD k) IN
8964 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8968 REPLICATE_TAC (33-26)(POP_ASSUM MP_TAC)
8969 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8970 THEN REWRITE_TAC[SYM th;IN_ELIM_THM;IMAGE])
8972 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
8978 SUBGOAL_THEN`vv (1 + p MOD k) IN
8980 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8984 REPLICATE_TAC (34-26)(POP_ASSUM MP_TAC)
8985 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8986 THEN REWRITE_TAC[SYM th;IN_ELIM_THM;IMAGE])
8988 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
8991 SUBGOAL_THEN`vv (2 + p MOD k) IN
8993 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8997 REPLICATE_TAC (35-26)(POP_ASSUM MP_TAC)
8998 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8999 THEN REWRITE_TAC[SYM th;IN_ELIM_THM;IMAGE])
9001 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
9004 REPLICATE_TAC (3)(POP_ASSUM MP_TAC)
9005 THEN REPLICATE_TAC (4) RESA_TAC
9006 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(vv:num->real^3) (2 + p MOD k)`)
9007 THEN SUBGOAL_THEN`(rho_node1
9008 {(vv (0 MOD 3 + p MOD k),vv (1 MOD 3 + p MOD k)), (vv (1 MOD 3 + p MOD k),
9009 vv (2 MOD 3 + p MOD k)),
9010 (vv (2 MOD 3 + p MOD k),
9011 vv (0 MOD 3 + p MOD k))}
9012 (vv (2 + p MOD k))) = (vv:num->real^3) (0 MOD 3 + p MOD k)`ASSUME_TAC
9016 MATCH_MP_TAC (GEN_ALL Local_lemmas.DETER_RHO_NODE)
9017 THEN EXISTS_TAC`v_prime V
9018 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
9019 THEN EXISTS_TAC`e_prime (E UNION {{u, w}})
9020 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
9021 THEN ASM_REWRITE_TAC[]
9022 THEN REPLICATE_TAC (37-25)(POP_ASSUM MP_TAC)
9023 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
9025 THEN ASM_REWRITE_TAC[convex_local_fan]
9027 THEN REWRITE_TAC[SET_RULE`a IN {a1,b,c} <=> a=a1\/ a=b\/ a=c`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
9033 THEN SUBGOAL_THEN`(ivs_rho_node1
9034 {(vv (0 MOD 3 + p MOD k),vv (1 MOD 3 + p MOD k)), (vv (1 MOD 3 + p MOD k),
9035 vv (2 MOD 3 + p MOD k)),
9036 (vv (2 MOD 3 + p MOD k),
9037 vv (0 MOD 3 + p MOD k))}
9038 (vv (2 + p MOD k))) = (vv:num->real^3) (1 MOD 3 + p MOD k)`ASSUME_TAC
9042 MATCH_MP_TAC (GEN_ALL Local_lemmas.IVS_RHO_NODE1_DETE)
9043 THEN EXISTS_TAC`v_prime V
9044 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
9045 THEN EXISTS_TAC`e_prime (E UNION {{u, w}})
9046 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
9047 THEN ASM_REWRITE_TAC[]
9048 THEN REPLICATE_TAC (38-25)(POP_ASSUM MP_TAC)
9049 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
9051 THEN ASM_REWRITE_TAC[convex_local_fan]
9053 THEN REWRITE_TAC[SET_RULE`a IN {a1,b,c} <=> a=a1\/ a=b\/ a=c`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
9057 SUBGOAL_THEN`(rho_node1
9058 {(vv (0 MOD 3 + p MOD k),vv (1 MOD 3 + p MOD k)), (vv (1 MOD 3 + p MOD k),
9059 vv (2 MOD 3 + p MOD k)),
9060 (vv (2 MOD 3 + p MOD k),
9061 vv (0 MOD 3 + p MOD k))}
9062 (vv (1 + p MOD k))) = (vv:num->real^3) (2 MOD 3 + p MOD k)`ASSUME_TAC
9066 MATCH_MP_TAC (GEN_ALL Local_lemmas.DETER_RHO_NODE)
9067 THEN EXISTS_TAC`v_prime V
9068 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
9069 THEN EXISTS_TAC`e_prime (E UNION {{u, w}})
9070 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
9071 THEN ASM_REWRITE_TAC[]
9072 THEN REPLICATE_TAC (39-25)(POP_ASSUM MP_TAC)
9073 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
9075 THEN ASM_REWRITE_TAC[convex_local_fan]
9077 THEN REWRITE_TAC[SET_RULE`a IN {a1,b,c} <=> a=a1\/ a=b\/ a=c`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
9082 ASM_REWRITE_TAC[ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
9083 THEN MRESA_TAC (GEN_ALL Local_lemmas.IN_V_IMP_AZIM_LESS_PI)[`e_prime (E UNION {{u, w}})
9084 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
9086 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
9087 `face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)`;`(vv:num->real^3) (2 + p MOD k)`]
9088 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(vv:num->real^3) (1 + p MOD k)`)
9089 THEN POP_ASSUM MP_TAC
9090 THEN REWRITE_TAC[ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
9092 THEN SUBGOAL_THEN` local_fan
9094 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)),
9095 e_prime (E UNION {{u, w}})
9096 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)),
9097 face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
9102 THEN REWRITE_TAC[convex_local_fan]
9103 THEN REPEAT RESA_TAC
9107 MRESA_TAC (GEN_ALL Local_lemmas.LOCAL_FAN_CHARACTER_OF_RHO_NODE2)
9108 [`e_prime (E UNION {{u, w}})
9109 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
9111 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
9112 `face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)`;`(vv:num->real^3) (2 + p MOD k)`]
9113 THEN POP_ASSUM MP_TAC
9114 THEN REWRITE_TAC[ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
9116 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOCAL_FAN_CHARACTER_OF_RHO_NODE2)
9117 [`e_prime (E UNION {{u, w}})
9118 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
9120 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
9121 `face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)`;`(vv:num->real^3) (1 + p MOD k)`]THEN POP_ASSUM MP_TAC
9122 THEN REWRITE_TAC[ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`]
9123 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
9125 THEN MRESA_TAC (GEN_ALL Local_lemmas.AZIM_LE_PI_EQ_DIHV)[`vec 0:real^3`;`(vv:num->real^3) (2 + p MOD k)`;`(vv:num->real^3) (0 + p MOD k)`;`(vv:num->real^3) (1 + p MOD k)`]
9133 let CARD_FF_EQ_CARD_SLICE_FF= prove_by_refinement(
9134 `convex_local_fan (V,E,FF) /\
9138 (!x. x IN FF ==> aff_gt {vec 0} {v, w} SUBSET wedge_in_fan_gt x E) /\
9139 HS = hypermap (HYP (vec 0,V,E UNION {{v, w}})) /\
9140 fv = face HS (v,rho_node1 FF v) /\
9141 fw = face HS (w,rho_node1 FF w)
9142 ==> CARD FF = CARD fv + CARD fw -2`,
9145 THEN MP_TAC Local_lemmas1.PROVE_THE_SLICE_ASSUMPTION
9147 THEN POP_ASSUM(fun th-> MRESA_TAC th[`v:real^3`;`w:real^3`])
9148 THEN POP_ASSUM MP_TAC
9149 THEN REWRITE_TAC[DIFF;IN_ELIM_THM;IN_SING]
9150 THEN ONCE_REWRITE_TAC[SET_RULE`~(a=b)<=> ~(b=a)`]
9152 THEN MP_TAC Nkezbfc_local.COMPATIBLE_BW_TWO_LEMMAS
9154 THEN SUBGOAL_THEN`{{w, v}} = {{v,w:real^3}}` ASSUME_TAC;
9156 REWRITE_TAC[EXTENSION;IN_SING]
9159 MRESA_TAC (GEN_ALL Nkezbfc_local.COMPATIBLE_BW_TWO_LEMMAS)
9160 [`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{v, w}}))`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{v, w}}))) (w,rho_node1 FF w)`;`(E:(real^3->bool)->bool)`;`FF:real^3#real^3->bool`;`w:real^3`;`v:real^3`;]
9161 THEN POP_ASSUM MP_TAC
9162 THEN ONCE_REWRITE_TAC[SET_RULE`~(a=b)<=> ~(b=a)`]
9163 THEN ONCE_REWRITE_TAC[SET_RULE`{a,b}={b,a}`]
9164 THEN ASM_REWRITE_TAC[]
9165 THEN ONCE_REWRITE_TAC[SET_RULE`{a,b}={b,a}`]
9167 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`;]
9168 THEN MP_TAC Local_lemmas1.EJRCFJD
9170 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOFA_IMP_CARD_FF_V_EQ)
9171 [`E:(real^3->bool)->bool`;`FF:real^3#real^3->bool`;`V:real^3->bool`]
9172 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOFA_IMP_CARD_FF_V_EQ)
9173 [`e_prime (E UNION {{v, w}})
9174 (face (hypermap (HYP (vec 0,V,E UNION {{v, w}}))) (w,rho_node1 FF w))`;`face (hypermap (HYP (vec 0,V,E UNION {{v, w}}))) (w,rho_node1 FF w)`;`v_prime V
9175 (face (hypermap (HYP (vec 0,V,E UNION {{v, w}}))) (w,rho_node1 FF w))`]
9176 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOFA_IMP_CARD_FF_V_EQ)
9177 [`e_prime (E UNION {{v, w}})
9178 (face (hypermap (HYP (vec 0,V,E UNION {{v, w}}))) (v,rho_node1 FF v))`;`face (hypermap (HYP (vec 0,V,E UNION {{v, w}}))) (v,rho_node1 FF v)`;`v_prime V
9179 (face (hypermap (HYP (vec 0,V,E UNION {{v, w}}))) (v,rho_node1 FF v))`]
9181 THEN REWRITE_TAC[convex_local_fan]
9182 THEN REPEAT RESA_TAC
9183 THEN REPLICATE_TAC (25-16)(POP_ASSUM MP_TAC)
9184 THEN POP_ASSUM(fun th-> ASM_TAC
9185 THEN REWRITE_TAC[th]
9187 THEN REPEAT RESA_TAC)
9188 THEN REPLICATE_TAC (25-13)(POP_ASSUM MP_TAC)
9189 THEN POP_ASSUM(fun th-> ASM_TAC
9190 THEN REWRITE_TAC[th]
9192 THEN REPEAT RESA_TAC)]);;
9196 let CARD_SLICE_FF_LE_3= prove_by_refinement(
9197 `convex_local_fan (V,E,FF) /\
9201 (!x. x IN FF ==> aff_gt {vec 0} {v, w} SUBSET wedge_in_fan_gt x E) /\
9202 HS = hypermap (HYP (vec 0,V,E UNION {{v, w}})) /\
9203 fv = face HS (v,rho_node1 FF v) /\
9204 fw = face HS (w,rho_node1 FF w)
9205 ==> 3<= CARD fv /\ 3<= CARD fw`,
9208 THEN MP_TAC Local_lemmas1.PROVE_THE_SLICE_ASSUMPTION
9210 THEN POP_ASSUM(fun th-> MRESA_TAC th[`v:real^3`;`w:real^3`])
9211 THEN POP_ASSUM MP_TAC
9212 THEN REWRITE_TAC[DIFF;IN_ELIM_THM;IN_SING]
9213 THEN ONCE_REWRITE_TAC[SET_RULE`~(a=b)<=> ~(b=a)`]
9215 THEN MP_TAC Nkezbfc_local.COMPATIBLE_BW_TWO_LEMMAS
9217 THEN SUBGOAL_THEN`{{w, v}} = {{v,w:real^3}}` ASSUME_TAC;
9219 REWRITE_TAC[EXTENSION;IN_SING]
9222 MRESA_TAC (GEN_ALL Nkezbfc_local.COMPATIBLE_BW_TWO_LEMMAS)
9223 [`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{v, w}}))`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{v, w}}))) (w,rho_node1 FF w)`;`(E:(real^3->bool)->bool)`;`FF:real^3#real^3->bool`;`w:real^3`;`v:real^3`;]
9224 THEN POP_ASSUM MP_TAC
9225 THEN ONCE_REWRITE_TAC[SET_RULE`~(a=b)<=> ~(b=a)`]
9226 THEN ONCE_REWRITE_TAC[SET_RULE`{a,b}={b,a}`]
9227 THEN ASM_REWRITE_TAC[]
9228 THEN ONCE_REWRITE_TAC[SET_RULE`{a,b}={b,a}`]
9230 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`;]
9231 THEN MP_TAC Local_lemmas1.EJRCFJD
9233 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOFA_IMP_CARD_FF_V_EQ)
9234 [`E:(real^3->bool)->bool`;`FF:real^3#real^3->bool`;`V:real^3->bool`]
9235 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOFA_IMP_CARD_FF_V_EQ)
9236 [`e_prime (E UNION {{v, w}})
9237 (face (hypermap (HYP (vec 0,V,E UNION {{v, w}}))) (w,rho_node1 FF w))`;`face (hypermap (HYP (vec 0,V,E UNION {{v, w}}))) (w,rho_node1 FF w)`;`v_prime V
9238 (face (hypermap (HYP (vec 0,V,E UNION {{v, w}}))) (w,rho_node1 FF w))`]
9239 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOFA_IMP_CARD_FF_V_EQ)
9240 [`e_prime (E UNION {{v, w}})
9241 (face (hypermap (HYP (vec 0,V,E UNION {{v, w}}))) (v,rho_node1 FF v))`;`face (hypermap (HYP (vec 0,V,E UNION {{v, w}}))) (v,rho_node1 FF v)`;`v_prime V
9242 (face (hypermap (HYP (vec 0,V,E UNION {{v, w}}))) (v,rho_node1 FF v))`]
9244 THEN REWRITE_TAC[convex_local_fan]
9245 THEN REPEAT RESA_TAC
9246 THEN REPLICATE_TAC (25-16)(POP_ASSUM MP_TAC)
9247 THEN POP_ASSUM(fun th-> ASM_TAC
9248 THEN REWRITE_TAC[th]
9250 THEN REPEAT RESA_TAC)
9251 THEN REPLICATE_TAC (25-13)(POP_ASSUM MP_TAC)
9252 THEN POP_ASSUM(fun th-> ASM_TAC
9253 THEN REWRITE_TAC[th]
9255 THEN REPEAT RESA_TAC)
9256 THEN MRESA_TAC (GEN_ALL Nkezbfc_local.CARD_VERTEX_GE_3_LOCAL_FAN)
9257 [`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`]
9258 THEN POP_ASSUM MP_TAC
9259 THEN MRESA_TAC (GEN_ALL Nkezbfc_local.CARD_VERTEX_GE_3_LOCAL_FAN)
9260 [`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`]
9261 THEN POP_ASSUM MP_TAC
9262 THEN REWRITE_TAC[convex_local_fan]
9267 let CARD_FF_EQ_SCS_K_3=prove(
9269 IMAGE (\i. vv i,vv (SUC i)) (:num)=FF/\
9275 THEN MRESAL_TAC (GEN_ALL(INST_TYPE [`:3`,`:M`]V_E_FF_IS_SCS_CASES_3))[`s:scs_v39`;`vv:num->real^3`]
9279 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`1`;`2`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<3/\ 1<3/\ 2<3/\ 3<4`]
9280 THEN MRESAL_TAC th[`1`;`0`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<3/\ 1<3/\ 2<3/\ 3<4`]
9281 THEN MRESAL_TAC th[`2`;`0`][ARITH_RULE`~(1=2)/\ ~(1=0) /\ ~(1=3)/\ ~(2=3)/\ ~(2=0)/\ ~(3=0)/\ 0<3/\ 1<3/\ 2<3/\ 3<4`])
9282 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
9283 IN_INSERT; NOT_IN_EMPTY;PAIR_EQ]
9284 THEN ASM_REWRITE_TAC[]
9289 let QKNVMLB3_LE4=prove_by_refinement(
9290 `~(scs_k_v39 s =4 /\ ~(scs_J_v39 s' 0 (scs_k_v39 s' - 1)))/\
9291 scs_half_slice_v39 s p q d' mkj =s'/\
9292 scs_half_slice_v39 s q p d'' mkj =s'' /\
9293 vv' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s')+p MOD (scs_k_v39 s)))
9295 vv'' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s'')+q MOD (scs_k_v39 s)))
9298 is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q /\
9299 is_scs_slice_v39 s s' s'' p q /\
9300 scs_d_v39 s <= d' + d'' ==>
9301 taustar_v39 s' vv' + taustar_v39 s'' vv'' <= taustar_v39 s vv`,
9302 [REWRITE_TAC[taustar_v39;LET_DEF;LET_END_DEF;scs_diag]
9304 THEN MP_TAC SCS_K_PRIME_CASE_3
9305 THEN REWRITE_TAC[taustar_v39;LET_DEF;LET_END_DEF;scs_diag]
9307 THEN ABBREV_TAC`k=scs_k_v39 s`
9308 THEN ABBREV_TAC`k'=scs_k_v39 s'`
9309 THEN ABBREV_TAC`k''=scs_k_v39 s''`
9310 THEN MP_TAC(ARITH_RULE`3<k==> ~(k<=3)`)
9312 THEN MP_TAC SCS_K_LE_6
9314 THEN ABBREV_TAC`u= (vv:num->real^3) (p MOD k)`
9315 THEN ABBREV_TAC `w= (vv:num->real^3) (q MOD k)`
9316 THEN ABBREV_TAC`V= IMAGE (vv:num->real^3) (:num)`
9317 THEN ABBREV_TAC`E= IMAGE (\i. {vv i,(vv:num->real^3) (SUC i)}) (:num)`
9318 THEN ABBREV_TAC`FF= IMAGE (\i. (vv i,(vv:num->real^3) (SUC i))) (:num)`
9319 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`p MOD scs_k_v39 s`;`vv:num->real^3`]
9320 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`q MOD scs_k_v39 s`;`vv:num->real^3`]
9322 THEN REPLICATE_TAC 2 STRIP_TAC
9323 THEN ASM_REWRITE_TAC[MMs_v39;BBprime_v39;BBprime2_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
9324 THEN REPEAT RESA_TAC
9328 REPLICATE_TAC (54-8)(POP_ASSUM MP_TAC)
9329 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
9331 THEN ASM_REWRITE_TAC[];
9335 REPLICATE_TAC (54-8)(POP_ASSUM MP_TAC)
9336 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
9338 THEN ASM_REWRITE_TAC[]
9340 THEN SUBGOAL_THEN`(!i. scs_b_v39 s i (SUC i) <= cstab)`ASSUME_TAC;
9344 REPLICATE_TAC (54-32)(POP_ASSUM MP_TAC)
9345 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
9346 THEN MATCH_MP_TAC th)
9347 THEN ASM_REWRITE_TAC[];
9350 REPLICATE_TAC (55-8)(POP_ASSUM MP_TAC)
9351 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
9353 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`])
9355 THEN MP_TAC NOT_EQ_DIAG
9356 THEN MP_TAC DIST_DIAG_LE_CSTAB
9357 THEN MP_TAC CARD_V_EQ_SCS_K
9358 THEN ASM_REWRITE_TAC[MMs_v39;BBprime_v39;BBprime2_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
9360 THEN REPEAT RESA_TAC
9361 THEN MP_TAC TECOXBMv2
9362 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;tau_fun]
9364 THEN MRESA_TAC(GEN_ALL Local_lemmas1.EJRCFJD)[`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))`;`(E:(real^3->bool)->bool)`;`w:real^3`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (u,rho_node1 FF u)`;`V:real^3->bool`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (w,rho_node1 FF w)`;`FF:real^3#real^3->bool`;`u:real^3`]
9365 THEN POP_ASSUM MP_TAC
9366 THEN MP_TAC V_PRIME_EQ_V_vv
9367 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
9369 THEN POP_ASSUM(fun th-> ASSUME_TAC(SYM th))
9370 THEN MRESA_TAC (GEN_ALL V_PRIME_EQ_V_vv)
9371 [`d'':real`;`d':real`;`mkj:bool`;`s':scs_v39`;`s'':scs_v39`;`p:num`;`s:scs_v39`; `vv:num->real^3`;`k'':num`;`q:num`;`k:num`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`u:real^3`;`FF:real^3#real^3->bool`;`w:real^3`]
9372 THEN POP_ASSUM MP_TAC
9373 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39;]
9374 THEN ONCE_REWRITE_TAC[VECTOR_ARITH`u-w= --(w-u):real^3`]
9375 THEN ASM_REWRITE_TAC[NORM_NEG]
9376 THEN SUBGOAL_THEN`{{w, u}} = {{u,w:real^3}}` ASSUME_TAC
9379 REWRITE_TAC[EXTENSION;IN_SING]
9384 THEN POP_ASSUM(fun th-> ASSUME_TAC(SYM th))
9386 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(\i. rho_fun (norm ((vv:num->real^3) (i+ p MOD k))))`)
9387 THEN SUBGOAL_THEN` sum {i | i < k}
9388 (\i. rho_fun (norm ((vv:num->real^3) (i+p MOD k))) *
9389 interior_angle1 (vec 0) FF (ITER i (rho_node1 FF) u))
9390 =sum FF (\e. rho_fun (norm (FST e)) * azim_in_fan e E)
9396 MATCH_MP_TAC SUM_EQ_GENERAL
9397 THEN EXISTS_TAC`(\i. (vv:num->real^3) (i+ p MOD k), vv (SUC i + p MOD k))`
9398 THEN SUBGOAL_THEN` (q+1+k -p MOD k)MOD k =scs_k_v39 s'` ASSUME_TAC;
9403 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
9404 THEN ASM_REWRITE_TAC[]
9407 MRESA_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`p:num`;`q:num`;`d':real`;`scs_J_v39 s' p q`]
9408 THEN POP_ASSUM MP_TAC
9409 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;scs_half_slice_v39;PAIR_EQ;REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
9411 THEN MP_TAC(ARITH_RULE`3<= k' /\ k'<k ==> 0<k' /\ ~(k=0) /\ k'-1<k'/\ 1<k`)
9417 THEN REWRITE_TAC[IN_ELIM_THM; IMAGE;EXISTS_UNIQUE]
9418 THEN ASM_REWRITE_TAC[PAIR_EQ]
9419 THEN REPEAT RESA_TAC
9420 THEN EXISTS_TAC`(x MOD k + k -p MOD k) MOD k`
9421 THEN ASM_REWRITE_TAC[ARITH_RULE`A-0=A`;PAIR_EQ]
9422 THEN MRESA_TAC DIVISION[`x MOD k + k - p MOD k:num`;`k:num`]
9423 THEN MRESA_TAC DIVISION[`p:num`;`k:num`]
9424 THEN MRESA_TAC MOD_LT[`p MOD k`;`k:num`]
9425 THEN MRESA_TAC MOD_MOD_REFL[`x:num`;`k:num`]
9426 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`k:num`;`x MOD k`][ARITH_RULE`1 * k + x MOD k = x MOD k +k`]
9427 THEN MRESA_TAC MOD_ADD_MOD[`x MOD k + k - p MOD k:num`;`p MOD k:num`;`k:num`]
9428 THEN MP_TAC(ARITH_RULE`1<k/\ p MOD k<k ==>(x MOD k+ k- p MOD k) + p MOD k = x MOD k+k /\ (x + p MOD k) + k- p MOD k= x+k`)
9430 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;]
9431 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x MOD k + k - p MOD k) MOD k + p MOD k:num`
9432 THEN MRESA1_TAC th ` x:num`)
9433 THEN MRESA_TAC MOD_ADD_MOD[`x:num`;`1`;`k:num`]
9434 THEN MRESA_TAC MOD_ADD_MOD[`(x MOD k + k - p MOD k) MOD k + p MOD k`;`1`;`k:num`]
9435 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;ARITH_RULE`SUC ((x MOD k + k - p MOD k) MOD k) + p MOD k = ((x MOD k + k - p MOD k) MOD k + p MOD k)+1`]
9436 THEN POP_ASSUM(fun th-> MRESA1_TAC th `((x MOD k + k - p MOD k) MOD k + p MOD k)+1:num`
9437 THEN MRESA1_TAC th ` x+1:num`)
9438 THEN REWRITE_TAC[ADD1]
9439 THEN REPEAT STRIP_TAC
9440 THEN MRESA_TAC DIVISION[`x:num`;`k:num`]
9441 THEN MRESA_TAC DIVISION[`y' + p MOD k:num`;`k:num`]
9442 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;]
9443 THEN POP_ASSUM(fun th-> MRESA1_TAC th `y' + p MOD k:num`)
9445 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;scs_half_slice_v39;PAIR_EQ;REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`;dist]
9447 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(y'+ p MOD k) MOD k:num`;`(x MOD k + k)MOD k`])
9448 THEN MRESA_TAC MOD_LT[`y':num`;`k:num`]
9449 THEN MRESAL_TAC(GEN_ALL Hdplygy.MOD_EQ_MOD)[`y':num`;`x MOD k + k- p MOD k`;`p MOD k`;`k:num`][]
9450 THEN POP_ASSUM MP_TAC
9451 THEN ONCE_REWRITE_TAC[ADD_SYM]
9459 REWRITE_TAC[IN_ELIM_THM;]
9460 THEN REPEAT STRIP_TAC;
9464 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
9465 THEN EXISTS_TAC`x+ p MOD k`
9466 THEN REWRITE_TAC[SET_RULE`(a:num)IN (:num)`;ADD1;ARITH_RULE`(x + 1) + p MOD k= (x + p MOD k)+1`]
9472 MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE)[`scs_k_v39 s`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`p:num`;`q:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`u:real^3`;`vv:num->real^3`;`p:num MOD k`]
9473 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
9474 THEN SUBGOAL_THEN`(vv:num->real^3) (x + p MOD k) IN V`ASSUME_TAC
9478 THEN REWRITE_TAC[IN_ELIM_THM;IMAGE]
9479 THEN EXISTS_TAC`x+ p MOD k`
9480 THEN REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
9482 MP_TAC Nkezbfc_local.CONVEX_LOFA_IMP_INANGLE_EQ_AZIM
9484 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(vv:num->real^3) (x + p MOD k )`])
9485 THEN REMOVE_ASSUM_TAC
9486 THEN REMOVE_ASSUM_TAC
9487 THEN POP_ASSUM(fun th-> ASSUME_TAC th
9488 THEN MRESAL1_TAC th`SUC x`[ITER])
9498 POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
9499 THEN MP_TAC F_PRIME_EQ_F_vv
9500 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
9502 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[th])
9503 THEN MRESAL_TAC (GEN_ALL F_PRIME_EQ_F_vv)[`d'':real`;`d':real`;`mkj:bool`;`s':scs_v39`;`s'':scs_v39`;`p:num`;`s:scs_v39`;`vv:num->real^3`;`k'':num`;`q:num`;`k:num`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`u:real^3`;`FF:real^3#real^3->bool`;`w:real^3`]
9504 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
9505 THEN POP_ASSUM MP_TAC
9506 THEN ONCE_REWRITE_TAC[VECTOR_ARITH`u-w= --(w-u):real^3`]
9507 THEN ASM_REWRITE_TAC[NORM_NEG]
9509 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[th])
9510 THEN MP_TAC V_SLICE_EQ_NUMSEG
9511 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
9513 THEN MP_TAC SCS_SLICE_SYM
9514 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39;]
9516 THEN MRESAL_TAC(GEN_ALL V_SLICE_EQ_NUMSEG)[
9517 `d'':real`;`mkj:bool`;`s:scs_v39`;`s'':scs_v39`;`s':scs_v39`;`p:num`;`FF:real^3#real^3->bool`;`w:real^3`;`vv:num->real^3`;`q:num`;`k:num`;`k'':num`]
9518 [MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39;]
9519 THEN SUBGOAL_THEN`sum
9521 ITER i (rho_node1 FF) u IN IMAGE (\i. vv (i MOD k'' + q MOD k)) (:num)}
9522 (\i. rho_fun (norm ((vv:num->real^3) (i + p MOD k))) *
9523 interior_angle1 (vec 0)
9524 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))
9525 (ITER i (rho_node1 FF) u))
9528 ITER i (rho_node1 FF) w IN IMAGE (\i. vv (i MOD k'' + q MOD k)) (:num)}
9529 (\i. rho_fun (norm (vv (i + q MOD k))) *
9530 interior_angle1 (vec 0)
9531 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))
9532 (ITER i (rho_node1 FF) w))` ASSUME_TAC
9537 MATCH_MP_TAC SUM_EQ_GENERAL
9538 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE)[`scs_k_v39 s`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`p:num`;`q:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`u:real^3`;`vv:num->real^3`;`p:num MOD k`]
9539 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
9540 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE)[`scs_k_v39 s`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`p:num`;`q:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`w:real^3`;`vv:num->real^3`;`q:num MOD k`]
9541 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
9542 THEN MP_TAC SCS_K_PRIME_LE_GE
9543 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
9545 THEN SUBGOAL_THEN` (p+1+k -q MOD k)MOD k =scs_k_v39 s''` ASSUME_TAC;
9549 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
9550 THEN ASM_REWRITE_TAC[]
9554 MRESAL_TAC (GEN_ALL SCS_K_PRIME_LE_GE)[`s:scs_v39`;`q:num`;`p:num`;`d'':real`;`scs_J_v39 s' p q`]
9555 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39;IN_ELIM_THM;IMAGE]
9556 THEN MP_TAC(ARITH_RULE`3<=k'/\ k'<k ==> ~(k=0)`)
9558 THEN MP_TAC(ARITH_RULE`p MOD k<= q MOD k \/ q MOD k<= p MOD k`)
9562 EXISTS_TAC`(\i. (i+ p MOD k + k - q MOD k) MOD k)`
9567 REWRITE_TAC[IN_ELIM_THM; IMAGE;EXISTS_UNIQUE]
9568 THEN REPEAT STRIP_TAC
9569 THEN EXISTS_TAC`(y + q MOD k - p MOD k) MOD k `
9570 THEN MRESA_TAC DIVISION[`q:num`;`k:num`]
9571 THEN MRESA_TAC DIVISION[`p:num`;`k:num`]
9572 THEN MRESA_TAC DIVISION[`y + q MOD k - p MOD k:num`;`k:num`]
9573 THEN MP_TAC(ARITH_RULE`y<k'' /\ k''<k/\ q MOD k<k /\ p MOD k<= q MOD k /\ ~(p MOD k = q MOD k) ==> y<k:num /\ p MOD k + k - q MOD k =k -(q MOD k - p MOD k)
9574 /\ k- (q MOD k - p MOD k)<k /\ (y + q MOD k - p MOD k) + k - (q MOD k - p MOD k) = y+ k/\ (y + q MOD k - p MOD k) + p MOD k= y + q MOD k
9577 THEN MRESA_TAC MOD_LT[`y:num`;`k'':num`]
9578 THEN MRESA_TAC MOD_LT[`y:num`;`k:num`]
9579 THEN MRESA_TAC MOD_LT[`p MOD k:num`;`k:num`]
9580 THEN MRESA_TAC MOD_LT[`k-(q MOD k- p MOD k):num`;`k:num`]
9581 THEN MRESA_TAC MOD_ADD_MOD[`y + q MOD k- p MOD k`;`k -(q MOD k - p MOD k)`;`k:num`]
9582 THEN MRESA_TAC MOD_ADD_MOD[`y + q MOD k- p MOD k`;`(p MOD k)`;`k:num`]
9583 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`y:num`][ARITH_RULE`1 * k' + i = (i+k')`]
9584 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;]
9585 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(y + q MOD k - p MOD k) MOD k + p MOD k:num`
9586 THEN MRESA1_TAC th`y+ q MOD k`)
9593 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN(:num)`]
9597 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM th])
9598 THEN MP_TAC(ARITH_RULE`y<k'' /\ k''<k/\ q MOD k<k /\ p MOD k<= q MOD k /\ ~(p MOD k = q MOD k) ==> (y' + k - (q MOD k - p MOD k)) + q MOD k - p MOD k = y'+k /\ q MOD k - p MOD k < k`)
9600 THEN MRESA_TAC MOD_LT[`q MOD k - p MOD k`;`k:num`]
9601 THEN MRESA_TAC MOD_ADD_MOD[`y' + k - (q MOD k - p MOD k)`;`q MOD k - p MOD k`;`k:num`]
9602 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`y':num`][ARITH_RULE`1 * k' + i = (i+k')`]
9603 THEN MRESA_TAC MOD_LT[`y':num`;`k:num`]
9610 MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;]
9611 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x + p MOD k):num`
9612 THEN MRESA1_TAC th`x' MOD k''+ q MOD k`)
9613 THEN MP_TAC(ARITH_RULE`3<= k'' ==> ~(k''=0)`)
9615 THEN MRESA_TAC DIVISION[`q:num`;`k:num`]
9616 THEN MRESA_TAC DIVISION[`x':num`;`k'':num`]
9617 THEN MRESA_TAC DIVISION[`x +p MOD k`;`k:num`]
9618 THEN MRESA_TAC DIVISION[`x' MOD k'' +q MOD k`;`k:num`]
9619 THEN MP_TAC(ARITH_RULE`p MOD k<= q MOD k /\ q MOD k < k/\ x' MOD k''<k'' /\ k''<k ==> p MOD k + x' MOD k''+ q MOD k - p MOD k = q MOD k +x' MOD k'' /\ (p MOD k + k - q MOD k) + q MOD k - p MOD k + x' MOD k'' = k + x' MOD k'' /\ x' MOD k'' < k`)
9622 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;scs_half_slice_v39;PAIR_EQ;REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`;dist]
9624 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(x+ p MOD k) MOD k:num`;`(x' MOD k'' + q MOD k)MOD k`])
9625 THEN MRESAL_TAC(GEN_ALL Hdplygy.MOD_EQ_MOD)[`x:num`;`x' MOD k'' + q MOD k - p MOD k`;`p MOD k`;`k:num`][]
9626 THEN POP_ASSUM MP_TAC
9627 THEN ONCE_REWRITE_TAC[ADD_SYM]
9629 THEN MRESA_TAC MOD_ADD_MOD[`(p MOD k + k - q MOD k)`;`x:num`;`k:num`]
9630 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
9631 THEN MRESA_TAC MOD_ADD_MOD[`(p MOD k + k - q MOD k)`;`q MOD k - p MOD k + x' MOD k'':num`;`k:num`]
9632 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`x' MOD k'':num`][ARITH_RULE`1 * k' + i = (k' +i)`]
9633 THEN MRESA_TAC MOD_LT[`x' MOD k''`;`k:num`];
9637 MRESA_TAC DIVISION[`q:num`;`k:num`]
9638 THEN MP_TAC(ARITH_RULE`q MOD k< k ==>(x + p MOD k + k - q MOD k) + q MOD k =
9639 ((x + p MOD k) + k) `)
9641 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`x+ p MOD k:num`][ARITH_RULE`1 * k' + i = (i+ k')`]
9642 THEN MRESA_TAC MOD_LT[`q MOD k`;`k:num`]
9643 THEN MRESA_TAC MOD_ADD_MOD[`(x + p MOD k + k - q MOD k)`;`q MOD k:num`;`k:num`]
9644 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;]
9645 THEN POP_ASSUM(fun th->
9646 MRESA1_TAC th`x+ p MOD k`
9647 THEN MRESA1_TAC th `(x + p MOD k + k - q MOD k) MOD k + q MOD k:num`
9649 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
9650 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
9658 EXISTS_TAC`(\i. (i+ p MOD k - q MOD k) MOD k)`
9663 REWRITE_TAC[IN_ELIM_THM; IMAGE;EXISTS_UNIQUE]
9664 THEN REPEAT STRIP_TAC
9665 THEN EXISTS_TAC`(y + q MOD k +k - p MOD k) MOD k `
9666 THEN MRESA_TAC DIVISION[`p:num`;`k:num`]
9667 THEN MRESA_TAC DIVISION[`q:num`;`k:num`]
9668 THEN MRESA_TAC DIVISION[`y + q MOD k +k - p MOD k:num`;`k:num`]
9669 THEN MP_TAC(ARITH_RULE`y<k'' /\ k''<k/\ p MOD k<k /\ q MOD k<= p MOD k /\ ~(q MOD k = p MOD k) ==> y<k:num /\ (y + q MOD k + k - p MOD k) + p MOD k - q MOD k =y+k/\ p MOD k - q MOD k < k /\ (y + q MOD k + k - p MOD k) + p MOD k = (y + q MOD k) + k
9672 THEN MRESA_TAC MOD_LT[`y:num`;`k'':num`]
9673 THEN MRESA_TAC MOD_LT[`y:num`;`k:num`]
9674 THEN MRESA_TAC MOD_LT[`p MOD k:num`;`k:num`]
9675 THEN MRESA_TAC MOD_LT[`(p MOD k- q MOD k):num`;`k:num`]
9676 THEN MRESA_TAC MOD_ADD_MOD[`y+q MOD k +k - p MOD k`;`(p MOD k - q MOD k)`;`k:num`]
9677 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`y:num`][ARITH_RULE`1 * k' + i = (i+k')`]
9678 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`y+ q MOD k:num`][ARITH_RULE`1 * k' + i = (i+k')`]
9679 THEN MRESA_TAC MOD_ADD_MOD[`y+q MOD k +k - p MOD k`;`p MOD k `;`k:num`]
9680 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;]
9681 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y+ q MOD k` THEN MRESA1_TAC th `((y + q MOD k + k - p MOD k) MOD k + p MOD k):num`
9689 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN(:num)`]
9690 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
9694 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM th])
9695 THEN MP_TAC(ARITH_RULE`y<k'' /\ k''<k/\ p MOD k<k /\ q MOD k<= p MOD k /\ ~(q MOD k = p MOD k) ==> q MOD k + k - p MOD k< k/\ (y' + p MOD k - q MOD k) + q MOD k + k - p MOD k = y'+k`)
9697 THEN MRESA_TAC MOD_LT[`q MOD k + k - p MOD k`;`k:num`]
9698 THEN MRESA_TAC MOD_ADD_MOD[`y' + p MOD k - q MOD k`;`q MOD k + k - p MOD k`;`k:num`]
9699 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`y':num`][ARITH_RULE`1 * k' + i = (i+k')`]
9700 THEN MRESA_TAC MOD_LT[`y':num`;`k:num`]
9711 MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;]
9712 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(x + p MOD k):num`
9713 THEN MRESA1_TAC th`x' MOD k''+ q MOD k`)
9714 THEN MP_TAC(ARITH_RULE`3<= k'' ==> ~(k''=0)`)
9716 THEN MRESA_TAC DIVISION[`x +p MOD k`;`k:num`]
9717 THEN MRESA_TAC DIVISION[`x' MOD k'' +q MOD k`;`k:num`]
9718 THEN MRESA_TAC DIVISION[`x':num`;`k'':num`]
9720 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;scs_half_slice_v39;PAIR_EQ;REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`;dist]
9722 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(x+ p MOD k) MOD k:num`;`(x' MOD k'' + q MOD k)MOD k`])
9723 THEN MP_TAC(ARITH_RULE`q MOD k<= p MOD k /\ x' MOD k''< k'' /\ k''<k ==> (x + p MOD k - q MOD k) + q MOD k = x + p MOD k /\ x' MOD k''< k`)
9725 THEN MRESAL_TAC(GEN_ALL Hdplygy.MOD_EQ_MOD)[`x + p MOD k - q MOD k`;`x' MOD k'' `;`q MOD k`;`k:num`][]
9726 THEN POP_ASSUM MP_TAC
9727 THEN ONCE_REWRITE_TAC[ADD_SYM]
9729 THEN MRESA_TAC MOD_LT[`x' MOD k''`;`k:num`];
9734 MRESA_TAC DIVISION[`q:num`;`k:num`]
9735 THEN MP_TAC(ARITH_RULE`q MOD k<= p MOD k ==> (x + p MOD k - q MOD k) + q MOD k =
9738 THEN MRESA_TAC MOD_LT[`q MOD k`;`k:num`]
9739 THEN MRESA_TAC MOD_ADD_MOD[`(x + p MOD k - q MOD k)`;`q MOD k:num`;`k:num`]
9740 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;]
9741 THEN POP_ASSUM(fun th->
9742 MRESA1_TAC th`x+ p MOD k`
9743 THEN MRESA1_TAC th `((x + p MOD k - q MOD k) MOD k + q MOD k):num`
9745 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
9746 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
9751 THEN MP_TAC E_PRIME_EQ_E_vv
9752 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
9754 THEN MRESA_TAC (GEN_ALL E_PRIME_EQ_E_vv)
9755 [`d'':real`;`d':real`;`mkj:bool`;`s':scs_v39`;`s'':scs_v39`;`p:num`;`s:scs_v39`; `vv:num->real^3`;`k'':num`;`q:num`;`k:num`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`u:real^3`;`FF:real^3#real^3->bool`;`w:real^3`]
9756 THEN POP_ASSUM MP_TAC
9757 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39;]
9758 THEN ONCE_REWRITE_TAC[VECTOR_ARITH`u-w= --(w-u):real^3`]
9759 THEN ASM_REWRITE_TAC[NORM_NEG]
9761 THEN MP_TAC F_PRIME_EQ_F_vv
9762 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
9764 THEN MRESA_TAC (GEN_ALL F_PRIME_EQ_F_vv)
9765 [`d'':real`;`d':real`;`mkj:bool`;`s':scs_v39`;`s'':scs_v39`;`p:num`;`s:scs_v39`; `vv:num->real^3`;`k'':num`;`q:num`;`k:num`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`u:real^3`;`FF:real^3#real^3->bool`;`w:real^3`]
9766 THEN POP_ASSUM MP_TAC
9767 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39;]
9768 THEN ONCE_REWRITE_TAC[VECTOR_ARITH`u-w= --(w-u):real^3`]
9769 THEN ASM_REWRITE_TAC[NORM_NEG]
9771 THEN SUBGOAL_THEN`BBs_v39 s' vv'`ASSUME_TAC;
9776 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;]
9778 THEN POP_ASSUM MATCH_MP_TAC
9780 THEN REWRITE_TAC[LET_DEF;LET_END_DEF;tau3;MMs_v39;BBprime2_v39;BBprime_v39;is_scs_slice_v39]
9781 THEN REPEAT RESA_TAC
9782 THEN SUBGOAL_THEN`d' = scs_d_v39 s'`ASSUME_TAC
9787 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
9788 THEN ASM_REWRITE_TAC[];
9798 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
9799 THEN ASM_REWRITE_TAC[];
9809 SUBGOAL_THEN`BBs_v39 s'' vv''`ASSUME_TAC;
9813 MRESAL_TAC (GEN_ALL QKNVMLB1)[`vv:num->real^3`;`s:scs_v39`;`q:num`;`p:num`;`d'':real`;`mkj:bool`]
9814 [MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;]
9815 THEN POP_ASSUM MATCH_MP_TAC
9817 THEN REWRITE_TAC[LET_DEF;LET_END_DEF;tau3;MMs_v39;BBprime2_v39;BBprime_v39;is_scs_slice_v39]
9818 THEN REPEAT RESA_TAC
9819 THEN SUBGOAL_THEN`d'' = scs_d_v39 s''`ASSUME_TAC
9824 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
9825 THEN ASM_REWRITE_TAC[];
9835 THEN REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;PAIR_EQ;dist;periodic2;scs_half_slice_v39]
9836 THEN ASM_REWRITE_TAC[];
9848 MP_TAC SCS_HALF_SLICE_IS_A_SCS
9849 THEN ASM_REWRITE_TAC[is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
9851 THEN MRESAL_TAC (GEN_ALL SCS_HALF_SLICE_IS_A_SCS)[`s:scs_v39`;`s':scs_v39`;`q:num`;`p:num`;`s'':scs_v39`]
9852 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
9853 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE_PRIME)[`V:real^3->bool`;`E:(real^3->bool)->bool`;`k:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`u:real^3`;`vv:num->real^3`;`p:num MOD k`]
9854 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
9855 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE_PRIME)[`V:real^3->bool`;`E:(real^3->bool)->bool`;`k:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`w:real^3`;`vv:num->real^3`;`q:num MOD k`]
9856 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
9857 THEN MP_TAC(ARITH_RULE`~(k'<= 3)\/ k'<= 3 `)
9861 MP_TAC(ARITH_RULE`~(k''<= 3)\/ k''<= 3 `)
9867 MP_TAC(ARITH_RULE`3<=k'==> ~(k'=0)/\ 0<k'`)
9869 THEN MRESA_TAC MOD_LT[`0`;`k':num`]
9870 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE_PRIME)[`v_prime V
9871 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;`e_prime (E UNION {{u, w}})
9872 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;`k':num`;`s':scs_v39`;`face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)`;`u:real^3`;`vv':num->real^3`;`0:num MOD k'`]
9873 [is_scs_v39;scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3/\ 0+A=A`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;mk_unadorned_v39;scs_diag;dist]
9874 THEN MRESAL_TAC (GEN_ALL SUM_AZIM_EQ_ANGLE_LE4)
9876 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
9877 `vv':num->real^3`;`0`;`s':scs_v39`;`u:real^3`;`face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)`;`e_prime (E UNION {{u, w}})
9878 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;]
9879 [is_scs_v39;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)/\ 0+A=A/\ A+0=A`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
9880 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
9881 THEN SUBGOAL_THEN`sum {i | i < k'}
9882 (\i. rho_fun (norm (vv (i MOD k' + p MOD k))) *
9883 interior_angle1 (vec 0)
9884 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
9885 (vv (i MOD k' + p MOD k)))
9887 (\i. rho_fun (norm (vv (i + p MOD k))) *
9888 interior_angle1 (vec 0)
9889 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
9890 (vv (i + p MOD k)))` ASSUME_TAC
9895 THEN REWRITE_TAC[IN_ELIM_THM]
9896 THEN REPEAT RESA_TAC
9897 THEN MRESA_TAC MOD_LT[`x:num`;`k':num`];
9902 MP_TAC(ARITH_RULE`3<=k''==> ~(k''=0)/\ 0<k''`)
9904 THEN MRESA_TAC MOD_LT[`0`;`k'':num`]
9905 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE_PRIME)[`v_prime V
9906 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))`;`e_prime (E UNION {{u, w}})
9907 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))`;`k'':num`;`s'':scs_v39`;`face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)`;`w:real^3`;`vv'':num->real^3`;`0:num MOD k'`]
9908 [is_scs_v39;scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3/\ 0+A=A`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;mk_unadorned_v39;scs_diag;dist]
9909 THEN MRESAL_TAC (GEN_ALL SUM_AZIM_EQ_ANGLE_LE4)
9911 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))`;
9912 `vv'':num->real^3`;`0`;`s'':scs_v39`;`w:real^3`;`face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)`;`e_prime (E UNION {{u, w}})
9913 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))`;]
9914 [is_scs_v39;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)/\ 0+A=A/\ A+0=A`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
9915 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
9916 THEN SUBGOAL_THEN`sum {i | i < k''}
9917 (\i. rho_fun (norm (vv (i MOD k'' + q MOD k))) *
9918 interior_angle1 (vec 0)
9919 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))
9920 (vv (i MOD k'' + q MOD k)))
9922 (\i. rho_fun (norm (vv (i + q MOD k))) *
9923 interior_angle1 (vec 0)
9924 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))
9925 (vv (i + q MOD k)))` ASSUME_TAC
9930 THEN REWRITE_TAC[IN_ELIM_THM]
9931 THEN REPEAT RESA_TAC
9932 THEN MRESA_TAC MOD_LT[`x:num`;`k'':num`];
9942 MRESA_TAC (GEN_ALL CARD_FF_EQ_CARD_SLICE_FF)
9943 [`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`u:real^3`;`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))`;`w:real^3`;`FF:real^3#real^3->bool`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (u,rho_node1 FF u)`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (w,rho_node1 FF w)`]
9944 THEN MRESA_TAC (GEN_ALL CARD_SLICE_FF_LE_3)[`V:real^3->bool`;`E:(real^3->bool)->bool`;`u:real^3`;`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))`;`FF:real^3#real^3->bool`;`w:real^3`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (u,rho_node1 FF u)`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (w,rho_node1 FF w)`]
9945 THEN MP_TAC(ARITH_RULE`
9947 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
9949 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))
9951 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)) +
9953 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)) -
9957 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)) -2)+
9959 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)) -
9962 THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD]
9963 THEN MP_TAC QKNVMLB2
9964 THEN REWRITE_TAC[MMs_v39;BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3/\ 0+A=A`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;mk_unadorned_v39;scs_diag;dist]
9966 THEN MATCH_MP_TAC(REAL_ARITH`d2<= d+d1 ==> a-c*b-d + a1-c*b1-d1<= (a+a1) - c*(b+b1)-d2`)
9967 THEN ASM_REWRITE_TAC[]
9972 (******3<k' /\ k''=3 ********)
9974 MP_TAC(ARITH_RULE`3<=k'==> ~(k'=0)/\ 0<k'`)
9976 THEN MRESA_TAC MOD_LT[`0`;`k':num`]
9977 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE_PRIME)[`v_prime V
9978 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;`e_prime (E UNION {{u, w}})
9979 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;`k':num`;`s':scs_v39`;`face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)`;`u:real^3`;`vv':num->real^3`;`0:num MOD k'`]
9980 [is_scs_v39;scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3/\ 0+A=A`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;mk_unadorned_v39;scs_diag;dist]
9981 THEN MRESAL_TAC (GEN_ALL SUM_AZIM_EQ_ANGLE_LE4)
9983 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;
9984 `vv':num->real^3`;`0`;`s':scs_v39`;`u:real^3`;`face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)`;`e_prime (E UNION {{u, w}})
9985 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`;]
9986 [is_scs_v39;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)/\ 0+A=A/\ A+0=A`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
9987 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
9988 THEN SUBGOAL_THEN`sum {i | i < k'}
9989 (\i. rho_fun (norm (vv (i MOD k' + p MOD k))) *
9990 interior_angle1 (vec 0)
9991 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
9992 (vv (i MOD k' + p MOD k)))
9994 (\i. rho_fun (norm (vv (i + p MOD k))) *
9995 interior_angle1 (vec 0)
9996 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
9997 (vv (i + p MOD k)))` ASSUME_TAC
10001 MATCH_MP_TAC SUM_EQ
10002 THEN REWRITE_TAC[IN_ELIM_THM]
10003 THEN REPEAT RESA_TAC
10004 THEN MRESA_TAC MOD_LT[`x:num`;`k':num`];
10007 MP_TAC(ARITH_RULE`(k''<=3) /\ 3<= k'' ==> k''=3`)
10009 THEN REPLICATE_TAC (125-61)(POP_ASSUM MP_TAC)
10010 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
10012 THEN ASM_REWRITE_TAC[]
10014 THEN MRESA_TAC (GEN_ALL SUM_AZIM_EQ_ANGLE_EQ4)
10015 [`d'':real`;`d':real`;`mkj:bool`;`vv'':num->real^3`;`vv':num->real^3`;`s':scs_v39`;`s'':scs_v39`;`s:scs_v39`;`p:num`;`k'':num`;`vv:num->real^3`;`q:num`;`k:num`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`u:real^3`;`FF:real^3#real^3->bool`;`w:real^3`]
10016 THEN POP_ASSUM MP_TAC
10017 THEN ASM_REWRITE_TAC[MMs_v39;BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39;]
10018 THEN ONCE_REWRITE_TAC[VECTOR_ARITH`u-w= --(w-u):real^3`]
10019 THEN ASM_REWRITE_TAC[NORM_NEG]
10028 MRESA_TAC (GEN_ALL CARD_FF_EQ_CARD_SLICE_FF)
10029 [`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`u:real^3`;`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))`;`w:real^3`;`FF:real^3#real^3->bool`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (u,rho_node1 FF u)`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (w,rho_node1 FF w)`]
10030 THEN MRESA_TAC (GEN_ALL CARD_SLICE_FF_LE_3)[`V:real^3->bool`;`E:(real^3->bool)->bool`;`u:real^3`;`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))`;`FF:real^3#real^3->bool`;`w:real^3`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (u,rho_node1 FF u)`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (w,rho_node1 FF w)`]
10031 THEN MP_TAC(ARITH_RULE`
10033 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
10035 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))
10037 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)) +
10039 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)) -
10043 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)) -2)+
10045 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)) -
10048 THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD]
10049 THEN MP_TAC QKNVMLB2
10050 THEN REWRITE_TAC[MMs_v39;BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3/\ 0+A=A`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;mk_unadorned_v39;scs_diag;dist]
10052 THEN REPLICATE_TAC (131-124)(POP_ASSUM MP_TAC)
10053 THEN POP_ASSUM(fun th-> ASM_TAC
10054 THEN ASM_REWRITE_TAC[th]
10056 THEN REPEAT STRIP_TAC)
10057 THEN MRESAL_TAC(GEN_ALL CARD_FF_EQ_SCS_K_3)[`k'':num`;`s'':scs_v39`;`vv'':num->real^3`;`face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)`][MMs_v39;BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3/\ 0+A=A`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3) /\ 3-2=1`;mk_unadorned_v39;scs_diag;dist]
10058 THEN MATCH_MP_TAC(REAL_ARITH`d2<= d+d1 ==> a-c*b-d + a1-c-d1<= (a+a1) - c*(b+ &1)-d2`)
10059 THEN ASM_REWRITE_TAC[]
10065 MP_TAC(ARITH_RULE`~(k''<= 3)\/ k''<= 3 `)
10068 (********k'=3 /\ 3< k''***********)
10072 MP_TAC(ARITH_RULE`3<=k''==> ~(k''=0)/\ 0<k''`)
10074 THEN MRESA_TAC MOD_LT[`0`;`k'':num`]
10075 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE_PRIME)[`v_prime V
10076 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))`;`e_prime (E UNION {{u, w}})
10077 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))`;`k'':num`;`s'':scs_v39`;`face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)`;`w:real^3`;`vv'':num->real^3`;`0:num MOD k''`]
10078 [is_scs_v39;scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3/\ 0+A=A`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;mk_unadorned_v39;scs_diag;dist]
10079 THEN MRESAL_TAC (GEN_ALL SUM_AZIM_EQ_ANGLE_LE4)
10081 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))`;
10082 `vv'':num->real^3`;`0`;`s'':scs_v39`;`w:real^3`;`face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)`;`e_prime (E UNION {{u, w}})
10083 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))`;]
10084 [is_scs_v39;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)/\ 0+A=A/\ A+0=A`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39]
10085 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10086 THEN SUBGOAL_THEN`sum {i | i < k''}
10087 (\i. rho_fun (norm (vv (i MOD k'' + q MOD k))) *
10088 interior_angle1 (vec 0)
10089 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))
10090 (vv (i MOD k'' + q MOD k)))
10092 (\i. rho_fun (norm (vv (i + q MOD k))) *
10093 interior_angle1 (vec 0)
10094 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))
10095 (vv (i + q MOD k)))` ASSUME_TAC
10099 MATCH_MP_TAC SUM_EQ
10100 THEN REWRITE_TAC[IN_ELIM_THM]
10101 THEN REPEAT RESA_TAC
10102 THEN MRESA_TAC MOD_LT[`x:num`;`k'':num`];
10111 MP_TAC(ARITH_RULE`(k'<=3) /\ 3<= k' ==> k'=3`)
10113 THEN REPLICATE_TAC (125-60)(POP_ASSUM MP_TAC)
10114 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
10116 THEN ASM_REWRITE_TAC[]
10118 THEN MRESA_TAC (GEN_ALL SUM_AZIM_EQ_ANGLE_EQ4)
10119 [`d':real`;`d'':real`;`mkj:bool`;`vv':num->real^3`;`vv'':num->real^3`;`s'':scs_v39`;`s':scs_v39`;`s:scs_v39`;`q:num`;`k':num`;`vv:num->real^3`;`p:num`;`k:num`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`;`FF:real^3#real^3->bool`;`u:real^3`]
10120 THEN POP_ASSUM MP_TAC
10121 THEN ASM_REWRITE_TAC[MMs_v39;BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39;]
10122 THEN ONCE_REWRITE_TAC[VECTOR_ARITH`u-w= --(w-u):real^3`]
10123 THEN ASM_REWRITE_TAC[NORM_NEG]
10130 MRESA_TAC (GEN_ALL CARD_FF_EQ_CARD_SLICE_FF)
10131 [`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`u:real^3`;`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))`;`w:real^3`;`FF:real^3#real^3->bool`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (u,rho_node1 FF u)`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (w,rho_node1 FF w)`]
10132 THEN MRESA_TAC (GEN_ALL CARD_SLICE_FF_LE_3)[`V:real^3->bool`;`E:(real^3->bool)->bool`;`u:real^3`;`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))`;`FF:real^3#real^3->bool`;`w:real^3`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (u,rho_node1 FF u)`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (w,rho_node1 FF w)`]
10133 THEN MP_TAC(ARITH_RULE`
10135 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
10137 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))
10139 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)) +
10141 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)) -
10145 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)) -2)+
10147 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)) -
10150 THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD]
10151 THEN MP_TAC QKNVMLB2
10152 THEN REWRITE_TAC[MMs_v39;BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3/\ 0+A=A`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;mk_unadorned_v39;scs_diag;dist]
10154 THEN REPLICATE_TAC (131-124)(POP_ASSUM MP_TAC)
10155 THEN POP_ASSUM(fun th-> ASM_TAC
10156 THEN ASM_REWRITE_TAC[th]
10158 THEN REPEAT STRIP_TAC)
10159 THEN MRESAL_TAC(GEN_ALL CARD_FF_EQ_SCS_K_3)[`k':num`;`s':scs_v39`;`vv':num->real^3`;`face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)`][MMs_v39;BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3/\ 0+A=A`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3) /\ 3-2=1`;mk_unadorned_v39;scs_diag;dist]
10160 THEN MATCH_MP_TAC(REAL_ARITH`d2<= d+d1 ==> a-c-d + a1-c*b-d1<= (a+a1) - c*(&1+b)-d2`)
10161 THEN ASM_REWRITE_TAC[]
10165 (*********k'=3 /\ k''=3********)
10170 MP_TAC(ARITH_RULE`(k'<=3) /\ 3<= k' ==> k'=3`)
10172 THEN REPLICATE_TAC (120-60)(POP_ASSUM MP_TAC)
10173 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
10175 THEN ASM_REWRITE_TAC[]
10177 THEN MRESA_TAC (GEN_ALL SUM_AZIM_EQ_ANGLE_EQ4)
10178 [`d':real`;`d'':real`;`mkj:bool`;`vv':num->real^3`;`vv'':num->real^3`;`s'':scs_v39`;`s':scs_v39`;`s:scs_v39`;`q:num`;`k':num`;`vv:num->real^3`;`p:num`;`k:num`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`;`FF:real^3#real^3->bool`;`u:real^3`]
10179 THEN POP_ASSUM MP_TAC
10180 THEN ASM_REWRITE_TAC[MMs_v39;BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39;]
10181 THEN ONCE_REWRITE_TAC[VECTOR_ARITH`u-w= --(w-u):real^3`]
10182 THEN ASM_REWRITE_TAC[NORM_NEG]
10188 MP_TAC(ARITH_RULE`(k''<=3) /\ 3<= k'' ==> k''=3`)
10190 THEN REPLICATE_TAC (122-60)(POP_ASSUM MP_TAC)
10191 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
10193 THEN ASM_REWRITE_TAC[]
10195 THEN MRESA_TAC (GEN_ALL SUM_AZIM_EQ_ANGLE_EQ4)
10196 [`d'':real`;`d':real`;`mkj:bool`;`vv'':num->real^3`;`vv':num->real^3`;`s':scs_v39`;`s'':scs_v39`;`s:scs_v39`;`p:num`;`k'':num`;`vv:num->real^3`;`q:num`;`k:num`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`u:real^3`;`FF:real^3#real^3->bool`;`w:real^3`]
10197 THEN POP_ASSUM MP_TAC
10198 THEN ASM_REWRITE_TAC[MMs_v39;BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;scs_half_slice_v39;]
10199 THEN ONCE_REWRITE_TAC[VECTOR_ARITH`u-w= --(w-u):real^3`]
10200 THEN ASM_REWRITE_TAC[NORM_NEG]
10207 MRESA_TAC (GEN_ALL CARD_FF_EQ_CARD_SLICE_FF)
10208 [`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`u:real^3`;`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))`;`w:real^3`;`FF:real^3#real^3->bool`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (u,rho_node1 FF u)`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (w,rho_node1 FF w)`]
10209 THEN MRESA_TAC (GEN_ALL CARD_SLICE_FF_LE_3)[`V:real^3->bool`;`E:(real^3->bool)->bool`;`u:real^3`;`hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))`;`FF:real^3#real^3->bool`;`w:real^3`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (u,rho_node1 FF u)`;`face (hypermap (HYP (vec 0,V,(E:(real^3->bool)->bool) UNION {{u, w}}))) (w,rho_node1 FF w)`]
10210 THEN MP_TAC(ARITH_RULE`
10212 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
10214 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))
10216 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)) +
10218 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)) -
10222 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)) -2)+
10224 (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)) -
10227 THEN REWRITE_TAC[GSYM REAL_OF_NUM_ADD]
10228 THEN MP_TAC QKNVMLB2
10229 THEN REWRITE_TAC[MMs_v39;BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3/\ 0+A=A`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;mk_unadorned_v39;scs_diag;dist]
10231 THEN REPLICATE_TAC (128-118)(POP_ASSUM MP_TAC)
10232 THEN POP_ASSUM(fun th-> ASM_TAC
10233 THEN ASM_REWRITE_TAC[th]
10235 THEN REPEAT STRIP_TAC)
10236 THEN MRESAL_TAC(GEN_ALL CARD_FF_EQ_SCS_K_3)[`k':num`;`s':scs_v39`;`vv':num->real^3`;`face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)`][MMs_v39;BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3/\ 0+A=A`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3) /\ 3-2=1`;mk_unadorned_v39;scs_diag;dist]
10237 THEN REPLICATE_TAC (128-120)(POP_ASSUM MP_TAC)
10238 THEN POP_ASSUM(fun th-> ASM_TAC
10239 THEN ASM_REWRITE_TAC[th]
10241 THEN REPEAT STRIP_TAC)
10242 THEN MRESAL_TAC(GEN_ALL CARD_FF_EQ_SCS_K_3)[`k'':num`;`s'':scs_v39`;`vv'':num->real^3`;`face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)`][MMs_v39;BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3/\ 0+A=A`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3) /\ 3-2=1`;mk_unadorned_v39;scs_diag;dist]
10243 THEN MATCH_MP_TAC(REAL_ARITH`d2<= d+d1 ==> a-c-d + a1-c-d1<= (a+a1) - c*(&1+ &1)-d2`)
10244 THEN ASM_REWRITE_TAC[]
10254 let DIAGE_VAL_P_Q=prove(`~(p MOD 4 = q MOD 4)/\
10255 ~(SUC p MOD 4 = q MOD 4)/\
10256 ~(p MOD 4 = SUC q MOD 4)
10257 ==> q MOD 4=(p MOD 4 +2) MOD 4`,
10258 MRESAL_TAC DIVISION[`p:num`;`4`][ARITH_RULE`~(4=0)`;ADD1]
10259 THEN MP_TAC(ARITH_RULE`p MOD 4<4==> p MOD 4=0 \/ p MOD 4=1 \/ p MOD 4=2 \/ p MOD 4=3`)
10261 THEN MRESAL_TAC DIVISION[`q:num`;`4`][ARITH_RULE`~(4=0)`;ADD1]
10262 THEN MP_TAC(ARITH_RULE`q MOD 4<4==> q MOD 4=0 \/ q MOD 4=1 \/ q MOD 4=2 \/ q MOD 4=3`)
10264 THEN MRESAL_TAC MOD_ADD_MOD[`p:num`;`1`;`4`][ARITH_RULE`~(4=0)`]
10265 THEN MRESAL_TAC MOD_ADD_MOD[`q:num`;`1`;`4`][ARITH_RULE`~(4=0)`]
10266 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10267 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10272 let QKNVMLB3_Eq4=prove_by_refinement(
10273 `(scs_k_v39 s =4 /\ ~(scs_J_v39 s' 0 (scs_k_v39 s' - 1)))/\
10274 scs_half_slice_v39 s p q d' mkj =s'/\
10275 scs_half_slice_v39 s q p d'' mkj =s'' /\
10276 vv' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s')+p MOD (scs_k_v39 s)))
10278 vv'' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s'')+q MOD (scs_k_v39 s)))
10281 is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q /\
10282 is_scs_slice_v39 s s' s'' p q /\
10283 scs_d_v39 s <= d' + d'' ==>
10284 taustar_v39 s' vv' + taustar_v39 s'' vv'' <= taustar_v39 s vv`,
10286 REWRITE_TAC[taustar_v39;LET_DEF;LET_END_DEF;scs_diag]
10288 THEN MP_TAC SCS_K_PRIME_CASE_3
10289 THEN REWRITE_TAC[taustar_v39;LET_DEF;LET_END_DEF;scs_diag]
10291 THEN ABBREV_TAC`k=scs_k_v39 s`
10292 THEN ABBREV_TAC`k'=scs_k_v39 s'`
10293 THEN ABBREV_TAC`k''=scs_k_v39 s''`
10294 THEN MP_TAC(ARITH_RULE`3<k==> ~(k<=3)`)
10296 THEN MP_TAC SCS_K_LE_6
10298 THEN ABBREV_TAC`u= (vv:num->real^3) (p MOD k)`
10299 THEN ABBREV_TAC `w= (vv:num->real^3) (q MOD k)`
10300 THEN ABBREV_TAC`V= IMAGE (vv:num->real^3) (:num)`
10301 THEN ABBREV_TAC`E= IMAGE (\i. {vv i,(vv:num->real^3) (SUC i)}) (:num)`
10302 THEN ABBREV_TAC`FF= IMAGE (\i. (vv i,(vv:num->real^3) (SUC i))) (:num)`
10303 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`p MOD scs_k_v39 s`;`vv:num->real^3`]
10304 THEN MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`q MOD scs_k_v39 s`;`vv:num->real^3`]
10306 THEN REPLICATE_TAC 2 STRIP_TAC
10307 THEN ASM_REWRITE_TAC[MMs_v39;BBprime_v39;BBprime2_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist;]
10308 THEN REPEAT RESA_TAC
10312 REPLICATE_TAC (54-9)(POP_ASSUM MP_TAC)
10313 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
10315 THEN ASM_REWRITE_TAC[ARITH_RULE`~(4<=3)`]
10323 MP_TAC SCS_K_PRIME_CASE_4
10324 THEN ASM_REWRITE_TAC[MMs_v39;BBprime_v39;BBprime2_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
10326 THEN MRESAL_TAC(GEN_ALL SCS_K_PRIME_CASE_4)
10327 [`d'':real`;`mkj:bool`;`s:scs_v39`;`q:num`;`p:num`;`s'':scs_v39`]
10328 [MMs_v39;BBprime_v39;BBprime2_v39;is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
10329 THEN MATCH_MP_TAC(REAL_ARITH`a2=a+a1 /\ b2<= b+b1==>a-b+a1-b1<=a2-b2`)
10330 THEN MP_TAC QKNVMLB2
10331 THEN REWRITE_TAC[MMs_v39;BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3/\ 0+A=A`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;mk_unadorned_v39;scs_diag;dist]
10333 THEN REWRITE_TAC[tau_fun]
10334 THEN SUBGOAL_THEN`local_fan(V,E,FF)`ASSUME_TAC
10338 REPLICATE_TAC (57-9)(POP_ASSUM MP_TAC)
10339 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
10341 THEN REWRITE_TAC[convex_local_fan]
10342 THEN ASM_REWRITE_TAC[ARITH_RULE`~(4<=3)`]
10343 THEN REPEAT RESA_TAC
10346 MP_TAC Local_lemmas.LOFA_IMP_CARD_FF_V_EQ
10348 THEN MP_TAC CARD_V_EQ_SCS_K
10349 THEN REWRITE_TAC[MMs_v39;BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3/\ 4-2=2`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;mk_unadorned_v39;scs_diag;dist;Basics.DIMINDEX_4;IN]
10351 THEN REWRITE_TAC[ARITH_RULE`4-2=2`]
10352 THEN MP_TAC SUM_AZIM_EQ_ANGLE_LE4
10354 ASM_REWRITE_TAC[MMs_v39;BBprime2_v39;BBprime_v39;BBs_v39;is_scs_v39;scs_k_v39_explicit;scs_d_v39_explicit;scs_a_v39_explicit;scs_b_v39_explicit;BBs_v39;ARITH_RULE`3<=3/\ ~(4<=3)`;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;mk_unadorned_v39;scs_diag;dist;Basics.DIMINDEX_4;IN]
10356 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;NUMSEG_3;SUM_NUMSEG3])
10357 THEN MRESAL_TAC(GEN_ALL VV_SUC_EQ_RHO_NODE)[`scs_k_v39 s`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`p:num`;`q:num`;`s:scs_v39`;`FF:real^3#real^3->bool`;`u:real^3`;`vv:num->real^3`;`p:num MOD k`]
10358 [is_scs_v39;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)`;mk_unadorned_v39;scs_diag;dist]
10359 THEN REPLICATE_TAC (61-9)(POP_ASSUM MP_TAC)
10360 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
10362 THEN ASM_REWRITE_TAC[ARITH_RULE`~(4<=3)`]
10363 THEN REPEAT RESA_TAC
10364 THEN SUBGOAL_THEN`(vv:num->real^3) (0+p MOD 4) IN V`ASSUME_TAC
10368 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
10369 THEN EXISTS_TAC`0+p MOD 4`
10370 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`];
10372 SUBGOAL_THEN`(vv:num->real^3) (1+p MOD 4) IN V`ASSUME_TAC
10376 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
10377 THEN EXISTS_TAC`1+p MOD 4`
10378 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`];
10381 SUBGOAL_THEN`(vv:num->real^3) (2+p MOD 4) IN V`ASSUME_TAC
10385 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
10386 THEN EXISTS_TAC`2+p MOD 4`
10387 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`];
10389 SUBGOAL_THEN`(vv:num->real^3) (3+p MOD 4) IN V`ASSUME_TAC
10393 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
10394 THEN EXISTS_TAC`3+p MOD 4`
10395 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`];
10397 MP_TAC Nkezbfc_local.CONVEX_LOFA_IMP_INANGLE_EQ_AZIM_IVS
10399 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(vv:num->real^3) (0+p MOD 4)`
10400 THEN MRESA1_TAC th`(vv:num->real^3) (1+p MOD 4)`
10401 THEN MRESA1_TAC th`(vv:num->real^3) (2+p MOD 4)`
10402 THEN MRESA1_TAC th`(vv:num->real^3) (3+p MOD 4)`)
10403 THEN SUBGOAL_THEN`(rho_node1 FF (vv (0 + p MOD 4))) =vv (1 + p MOD 4)`ASSUME_TAC;
10408 MATCH_MP_TAC (GEN_ALL Local_lemmas.DETER_RHO_NODE)
10409 THEN EXISTS_TAC`V:real^3->bool`
10410 THEN EXISTS_TAC`E:(real^3->bool)->bool`
10411 THEN ASM_REWRITE_TAC[]
10412 THEN EXPAND_TAC"FF"
10413 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
10414 THEN EXISTS_TAC`0+p MOD 4`
10415 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`SUC(0+p MOD 4)= 1+ p MOD 4`];
10418 SUBGOAL_THEN`(rho_node1 FF (vv (1 + p MOD 4))) =vv (2 + p MOD 4)`ASSUME_TAC;
10423 MATCH_MP_TAC (GEN_ALL Local_lemmas.DETER_RHO_NODE)
10424 THEN EXISTS_TAC`V:real^3->bool`
10425 THEN EXISTS_TAC`E:(real^3->bool)->bool`
10426 THEN ASM_REWRITE_TAC[]
10427 THEN EXPAND_TAC"FF"
10428 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
10429 THEN EXISTS_TAC`1+p MOD 4`
10430 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`SUC(1+p MOD 4)= 2+ p MOD 4`];
10434 SUBGOAL_THEN`(rho_node1 FF (vv (2 + p MOD 4))) =vv (3 + p MOD 4)`ASSUME_TAC;
10439 MATCH_MP_TAC (GEN_ALL Local_lemmas.DETER_RHO_NODE)
10440 THEN EXISTS_TAC`V:real^3->bool`
10441 THEN EXISTS_TAC`E:(real^3->bool)->bool`
10442 THEN ASM_REWRITE_TAC[]
10443 THEN EXPAND_TAC"FF"
10444 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
10445 THEN EXISTS_TAC`2+p MOD 4`
10446 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`SUC(2+p MOD 4)= 3+ p MOD 4`];
10452 SUBGOAL_THEN`(rho_node1 FF (vv (3 + p MOD 4))) =vv (0 + p MOD 4)`ASSUME_TAC;
10457 MATCH_MP_TAC (GEN_ALL Local_lemmas.DETER_RHO_NODE)
10458 THEN EXISTS_TAC`V:real^3->bool`
10459 THEN EXISTS_TAC`E:(real^3->bool)->bool`
10460 THEN ASM_REWRITE_TAC[]
10461 THEN EXPAND_TAC"FF"
10462 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
10463 THEN EXISTS_TAC`3+p MOD 4`
10464 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`SUC(3+p MOD 4)= 4+ p MOD 4/\ 0+A=A`]
10465 THEN MRESAL_TAC MOD_MOD_REFL[`p:num`;`k:num`][ARITH_RULE`~(4=0)`;]
10466 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`k:num`;`p MOD k`][ARITH_RULE`1 * k + x MOD k = k+ x MOD k`]
10467 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;]
10468 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(4+ p MOD 4)`) ;
10471 SUBGOAL_THEN`(ivs_rho_node1 FF (vv (0 + p MOD 4))) =vv (3 + p MOD 4)`ASSUME_TAC
10476 MATCH_MP_TAC (GEN_ALL Local_lemmas.IVS_RHO_NODE1_DETE)
10477 THEN EXISTS_TAC`V:real^3->bool`
10478 THEN EXISTS_TAC`E:(real^3->bool)->bool`
10479 THEN ASM_REWRITE_TAC[]
10480 THEN EXPAND_TAC"FF"
10481 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
10482 THEN EXISTS_TAC`3+p MOD 4`
10483 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`SUC(3+p MOD 4)= 4+ p MOD 4/\ 0+A=A`]
10484 THEN MRESAL_TAC MOD_MOD_REFL[`p:num`;`k:num`][ARITH_RULE`~(4=0)`;]
10485 THEN MRESAL_TAC MOD_MULT_ADD[`1`;`k:num`;`p MOD k`][ARITH_RULE`1 * k + x MOD k = k+ x MOD k`]
10486 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;]
10487 THEN POP_ASSUM(fun th-> MRESA1_TAC th `(4+ p MOD 4)`) ;
10494 SUBGOAL_THEN`(ivs_rho_node1 FF (vv (3 + p MOD 4))) =vv (2 + p MOD 4)`ASSUME_TAC;
10499 MATCH_MP_TAC (GEN_ALL Local_lemmas.IVS_RHO_NODE1_DETE)
10500 THEN EXISTS_TAC`V:real^3->bool`
10501 THEN EXISTS_TAC`E:(real^3->bool)->bool`
10502 THEN ASM_REWRITE_TAC[]
10503 THEN EXPAND_TAC"FF"
10504 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
10505 THEN EXISTS_TAC`2+p MOD 4`
10506 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`SUC(2+p MOD 4)= 3+ p MOD 4`];
10514 SUBGOAL_THEN`(ivs_rho_node1 FF (vv (1 + p MOD 4))) =vv (0 + p MOD 4)`ASSUME_TAC;
10519 MATCH_MP_TAC (GEN_ALL Local_lemmas.IVS_RHO_NODE1_DETE)
10520 THEN EXISTS_TAC`V:real^3->bool`
10521 THEN EXISTS_TAC`E:(real^3->bool)->bool`
10522 THEN ASM_REWRITE_TAC[]
10523 THEN EXPAND_TAC"FF"
10524 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
10525 THEN EXISTS_TAC`0+p MOD 4`
10526 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`SUC(0+p MOD 4)= 1+ p MOD 4`];
10529 SUBGOAL_THEN`(ivs_rho_node1 FF (vv (2 + p MOD 4))) =vv (1 + p MOD 4)`ASSUME_TAC;
10534 MATCH_MP_TAC (GEN_ALL Local_lemmas.IVS_RHO_NODE1_DETE)
10535 THEN EXISTS_TAC`V:real^3->bool`
10536 THEN EXISTS_TAC`E:(real^3->bool)->bool`
10537 THEN ASM_REWRITE_TAC[]
10538 THEN EXPAND_TAC"FF"
10539 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
10540 THEN EXISTS_TAC`1+p MOD 4`
10541 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`SUC(1+p MOD 4)= 2+ p MOD 4`];
10545 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;scs_half_slice_v39;PAIR_EQ;REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`;dist]
10546 THEN STRIP_TAC THEN SUBGOAL_THEN`(!i j. i < 4 /\ j < 4 /\ vv i = (vv:num->real^3) j ==> (i = j))`ASSUME_TAC
10551 THEN POP_ASSUM(fun th->
10553 THEN MRESA_TAC th[`i:num`;`j:num`])
10558 SUBGOAL_THEN`dist(vv 0, vv 1) < &4 /\
10559 dist(vv 0, vv 3) < &4 /\
10560 dist(vv 1,vv 2) < &4 /\
10561 dist(vv 2,(vv:num->real^3) 3) < &4 `ASSUME_TAC
10566 THEN REPLICATE_TAC (79-16) (POP_ASSUM MP_TAC)
10567 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
10568 THEN MRESA_TAC th[`0`;`1`]
10569 THEN MRESA_TAC th[`0`;`3`]
10570 THEN MRESA_TAC th[`1`;`2`]
10571 THEN MRESA_TAC th[`2`;`3`])
10572 THEN REPLICATE_TAC (82-32) (POP_ASSUM MP_TAC)
10573 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
10574 THEN MRESAL1_TAC th`0`[ARITH_RULE`SUC 0=1`]
10575 THEN MRESAL1_TAC th`1`[ARITH_RULE`SUC 1=2`]
10576 THEN MRESAL1_TAC th`2`[ARITH_RULE`SUC 2=3`]
10577 THEN MRESAL1_TAC th`3`[ARITH_RULE`SUC 3=4`])
10579 THEN REWRITE_TAC[periodic2;]
10580 THEN REPEAT STRIP_TAC
10581 THEN REPLICATE_TAC (85-28) (POP_ASSUM MP_TAC)
10582 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
10583 THEN MRESA_TAC th[`0`;`1`]
10584 THEN MRESA_TAC th[`0`;`3`]
10585 THEN MRESA_TAC th[`1`;`2`]
10586 THEN MRESA_TAC th[`2`;`3`])
10587 THEN REPLICATE_TAC (96-76) (POP_ASSUM MP_TAC)
10588 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s 3`][ARITH_RULE`~(4=0)`;periodic]
10589 THEN POP_ASSUM(fun th-> MRESAL1_TAC th `4:num`[ARITH_RULE`4 MOD 4=0`])
10590 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;cstab])
10591 THEN REAL_ARITH_TAC;
10597 REPLICATE_TAC (80-7) (POP_ASSUM MP_TAC)
10598 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
10601 THEN SUBGOAL_THEN`!i j. ~(vv i = vv j) ==> &2 <= dist(vv i,(vv:num->real^3) j) ` ASSUME_TAC
10607 THEN REPEAT GEN_TAC
10608 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;]
10609 THEN POP_ASSUM(fun th-> MRESAL1_TAC th `i:num`[ARITH_RULE`4 MOD 4=0`]
10610 THEN MRESAL1_TAC th `j:num`[ARITH_RULE`4 MOD 4=0`])
10611 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10612 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10613 THEN MRESAL_TAC DIVISION[`i:num`;`4`][ARITH_RULE`~(4=0)`]
10614 THEN MRESAL_TAC DIVISION[`j:num`;`4`][ARITH_RULE`~(4=0)`]
10615 THEN MP_TAC(SET_RULE`i MOD 4= j MOD 4\/ ~(i MOD 4= j MOD 4)`)
10619 REPLICATE_TAC (85-78) (POP_ASSUM MP_TAC)
10620 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
10621 THEN POP_ASSUM MP_TAC
10622 THEN MRESA_TAC th[`i MOD 4`;`j MOD 4`])
10626 REPLICATE_TAC (85-30) (POP_ASSUM MP_TAC)
10627 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
10628 THEN MRESA_TAC th[`i MOD 4`;`j MOD 4`])
10629 THEN REPLICATE_TAC (85-7) (POP_ASSUM MP_TAC)
10630 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
10631 THEN MRESA_TAC th[`i MOD 4`;`j MOD 4`])
10632 THEN REPLICATE_TAC (3) (POP_ASSUM MP_TAC)
10633 THEN REAL_ARITH_TAC;
10636 SUBGOAL_THEN`dist((vv:num->real^3) (p MOD 4), vv (q MOD 4))< &4`ASSUME_TAC
10642 THEN REPLICATE_TAC (81-39) (POP_ASSUM MP_TAC)
10643 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
10645 THEN ASM_REWRITE_TAC[MMs_v39; BBprime2_v39;BBprime_v39;BBs_v39;LET_DEF;LET_END_DEF;is_scs_v39;scs_diag;scs_v39_explicit;is_scs_slice_v39;dsv_v39;scs_slice_v39;scs_half_slice_v39;PAIR_EQ;REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`~(4<=3)`;dist]
10647 THEN REPLICATE_TAC (87-15) (POP_ASSUM MP_TAC)
10648 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
10649 THEN MRESA_TAC th[`p MOD 4`;`q MOD 4`])
10651 THEN REWRITE_TAC[periodic2;]
10652 THEN REPEAT STRIP_TAC
10653 THEN REPLICATE_TAC (3) (POP_ASSUM MP_TAC)
10654 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_bm_v39 s p`][ARITH_RULE`~(4=0)`;periodic]
10655 THEN POP_ASSUM(fun th-> MRESAL1_TAC th `q:num`[ARITH_RULE`4 MOD 4=0`])
10656 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_bm_v39 s (q MOD 4)`][ARITH_RULE`~(4=0)`;periodic]
10657 THEN POP_ASSUM(fun th-> MRESAL1_TAC th `p:num`[ARITH_RULE`4 MOD 4=0`])
10658 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10659 THEN REAL_ARITH_TAC;
10663 THEN MRESAL_TAC DIVISION[`p:num`;`4`][ARITH_RULE`~(4=0)`]
10664 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_RULE`~(4=0)`;]
10665 THEN POP_ASSUM(fun th-> MRESAL1_TAC th `4:num`[ARITH_RULE`4 MOD 4=0`]
10666 THEN MRESAL1_TAC th`5`[ARITH_RULE`5 MOD 4=1`]
10667 THEN MRESAL1_TAC th`6`[ARITH_RULE`6 MOD 4=2`])
10668 THEN POP_ASSUM(fun th->
10669 POP_ASSUM (fun th1->
10670 POP_ASSUM(fun th2-> ASSUME_TAC(SYM th2))
10671 THEN ASSUME_TAC(SYM th1))
10672 THEN ASSUME_TAC (SYM th))
10673 THEN MP_TAC(ARITH_RULE`p MOD 4<4==> p MOD 4=0 \/ p MOD 4=1 \/ p MOD 4=2 \/ p MOD 4=3`)
10678 MP_TAC DIAGE_VAL_P_Q
10680 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1 /\ 2 MOD 3=2/\ A+0=A /\ 0+A=A/\ 1+2=3/\ 2 MOD 4=2 /\ 3 MOD 4=3/\ 2+2=4`;SET_RULE`(A /\ B) ==> B`]
10681 THEN POP_ASSUM(fun th->
10682 POP_ASSUM(fun th1->
10684 THEN REWRITE_TAC[th;th1;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1 /\ 2 MOD 3=2/\ A+0=A /\ 0+A=A/\ 1+2=3/\ 2 MOD 4=2 /\ 3 MOD 4=3/\ 2+2=4`;]))
10685 THEN REPEAT STRIP_TAC
10686 THEN MRESAL1_TAC (GEN_ALL Terminal.vv_quad_split012)`vv:num->real^3`[LET_DEF;LET_END_DEF;]
10691 MP_TAC DIAGE_VAL_P_Q
10693 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1 /\ 2 MOD 3=2/\ A+0=A /\ 0+A=A/\ 1+2=3/\ 2 MOD 4=2 /\ 3 MOD 4=3/\ 2+2=4/\ 1+1=2 /\ 2+1=3/\ 1+3=4/\ 2+3=5/\3+1=4`;SET_RULE`(B /\ A) ==> B`]
10694 THEN POP_ASSUM(fun th->
10695 POP_ASSUM(fun th1->
10697 THEN REWRITE_TAC[th;th1;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1 /\ 2 MOD 3=2/\ A+0=A /\ 0+A=A/\ 1+2=3/\ 2 MOD 4=2 /\ 3 MOD 4=3/\ 2+2=4`;]))
10698 THEN REPEAT STRIP_TAC
10699 THEN MRESAL1_TAC (GEN_ALL Terminal.vv_quad_split123)`vv:num->real^3`[LET_DEF;LET_END_DEF;]
10700 THEN POP_ASSUM MP_TAC
10701 THEN REAL_ARITH_TAC
10706 MP_TAC DIAGE_VAL_P_Q
10708 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1 /\ 2 MOD 3=2/\ A+0=A /\ 0+A=A/\ 1+2=3/\ 2 MOD 4=2 /\ 3 MOD 4=3/\ 2+2=4/\ 1+1=2 /\ 2+1=3/\ 1+3=4/\ 2+3=5/\3+1=4/\ 3+2=5/\ 4 MOD 4=0`;SET_RULE`(B /\ A) ==> B`]
10709 THEN POP_ASSUM(fun th->
10710 POP_ASSUM(fun th1->
10712 THEN REWRITE_TAC[th;th1;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1 /\ 2 MOD 3=2/\ A+0=A /\ 0+A=A/\ 1+2=3/\ 2 MOD 4=2 /\ 3 MOD 4=3/\ 2+2=4/\ 1+1=2 /\ 2+1=3/\ 1+3=4/\ 2+3=5/\3+1=4/\ 3+2=5/\ 4 MOD 4=0`;]))
10713 THEN REPEAT STRIP_TAC
10714 THEN MRESAL1_TAC (GEN_ALL Terminal.vv_quad_split012)`vv:num->real^3`[LET_DEF;LET_END_DEF;DIST_SYM]
10715 THEN POP_ASSUM MP_TAC
10716 THEN REAL_ARITH_TAC;
10721 MP_TAC DIAGE_VAL_P_Q
10723 THEN POP_ASSUM MP_TAC
10724 THEN ASM_REWRITE_TAC[ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1 /\ 2 MOD 3=2/\ A+0=A /\ 0+A=A/\ 1+2=3/\ 2 MOD 4=2 /\ 3 MOD 4=3/\ 2+2=4/\ 1+1=2 /\ 2+1=3/\ 1+3=4/\ 2+3=5/\3+1=4/\ 3+2=5/\ 4 MOD 4=0/\ 5 MOD 4=1/\ 3+3=6`;]
10726 THEN POP_ASSUM(fun th->
10727 POP_ASSUM(fun th1->
10729 THEN REWRITE_TAC[th;th1;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1 /\ 2 MOD 3=2/\ A+0=A /\ 0+A=A/\ 1+2=3/\ 2 MOD 4=2 /\ 3 MOD 4=3/\ 2+2=4/\ 1+1=2 /\ 2+1=3/\ 1+3=4/\ 2+3=5/\3+1=4/\ 3+2=5/\ 4 MOD 4=0`;]))
10730 THEN REPEAT STRIP_TAC
10731 THEN MRESAL1_TAC (GEN_ALL Terminal.vv_quad_split123)`vv:num->real^3`[LET_DEF;LET_END_DEF;DIST_SYM]
10732 THEN POP_ASSUM MP_TAC
10733 THEN REAL_ARITH_TAC;
10739 let QKNVMLB3=prove(` scs_half_slice_v39 s p q d' mkj =s'/\
10740 scs_half_slice_v39 s q p d'' mkj =s'' /\
10741 vv' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s')+p MOD (scs_k_v39 s)))
10743 vv'' = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s'')+q MOD (scs_k_v39 s)))
10746 is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q /\
10747 is_scs_slice_v39 s s' s'' p q /\
10748 scs_d_v39 s <= d' + d'' ==>
10749 taustar_v39 s' vv' + taustar_v39 s'' vv'' <= taustar_v39 s vv`,
10750 MP_TAC(SET_RULE`~(scs_k_v39 s =4 /\ ~(scs_J_v39 s' 0 (scs_k_v39 s' - 1)))\/
10751 (scs_k_v39 s =4 /\ ~(scs_J_v39 s' 0 (scs_k_v39 s' - 1)))`)
10755 MP_TAC QKNVMLB3_LE4
10757 MP_TAC QKNVMLB3_Eq4
10767 let check_completeness_claimA_concl =
10768 Ineq.mk_tplate `\x. scs_arrow_v13 (set_of_list x)