Update from HH
[Flyspeck/.git] / text_formalization / local / QKNVMLB.hl
1 (* ========================================================================== *)
2 (* FLYSPECK - BOOK FORMALIZATION                                              *)
3 (*                                                                            *)
4 (* Chapter: Local Fan                                              *)
5 (* Author: Hoang Le Truong                                        *)
6 (* Date: 2012-04-01                                                           *)
7 (* ========================================================================= *)
8
9
10 (*
11 remaining conclusions from appendix to Local Fan chapter
12 *)
13
14
15 module Qknvmlb = struct
16
17 open Polyhedron;;
18 open Sphere;;
19 open Topology;;         
20 open Fan_misc;;
21 open Planarity;; 
22 open Conforming;;
23 open Hypermap;;
24 open Fan;;
25 open Topology;;
26 open Wrgcvdr_cizmrrh;;
27 open Local_lemmas;;
28 open Collect_geom;;
29 open Dih2k_hypermap;;
30 open Wjscpro;;
31 open Tecoxbm;;
32 open Hdplygy;;
33 open Nkezbfc_local;;
34 open Flyspeck_constants;;
35 open Gbycpxs;;
36 open Pcrttid;;
37 open Local_lemmas;;
38 open Pack_defs;;
39
40 open Hales_tactic;;
41
42 open Appendix;;
43
44
45
46
47
48 open Hypermap;;
49 open Fan;;
50 open Wrgcvdr_cizmrrh;;
51 open Local_lemmas;;
52 open Flyspeck_constants;;
53 open Pack_defs;;
54
55 open Hales_tactic;;
56
57 open Appendix;;
58
59
60 open Zithlqn;;
61
62
63 open Xwitccn;;
64
65 open Ayqjtmd;;
66
67 open Jkqewgv;;
68
69
70 let MOD_EQ_IMP_MOD_EQ_0=prove(
71 `~(k=0)/\ p MOD k = q MOD k/\ q<= p
72  ==> (p-q) MOD k =0`,
73 REPEAT STRIP_TAC
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
78  /\ q<=p
79 ==> p-q = (p DIV k *k - q DIV k *k)`)
80 THEN ASM_REWRITE_TAC[]
81 THEN POP_ASSUM(fun th-> 
82 REMOVE_ASSUM_TAC
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])
85 THEN REWRITE_TAC[]
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]
90 THEN RESA_TAC
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[]);;
94
95
96 let SCS_K_PRIME_CASE_4=prove(`s' = scs_half_slice_v39 s p q d' mkj
97 /\ is_scs_v39 s
98 /\ scs_k_v39 s=4
99 /\ scs_diag (scs_k_v39 s) p q
100 ==> scs_k_v39 s' =3`,
101
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
106 THEN REWRITE_TAC[th]
107 THEN REPEAT STRIP_TAC)
108 THEN POP_ASSUM(fun th-> ASM_TAC
109 THEN REWRITE_TAC[th]
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`)
115 THEN RESA_TAC
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`]
118 in
119
120 REPEAT STRIP_TAC
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]
123 THEN STRIP_TAC
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`)
126 THEN RESA_TAC
127 THENL[
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`]);;
132
133
134
135
136
137
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
141 /\ is_scs_v39 s
142 /\ scs_k_v39 s=5
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
149 THEN REWRITE_TAC[th]
150 THEN REPEAT STRIP_TAC)
151 THEN POP_ASSUM(fun th-> ASM_TAC
152 THEN REWRITE_TAC[th]
153 THEN REPEAT STRIP_TAC
154 THEN ASSUME_TAC th)
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`)
158 THEN RESA_TAC
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])
171 in
172
173 REPEAT STRIP_TAC
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]
176 THEN STRIP_TAC
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`)
179 THEN RESA_TAC
180 THENL[
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`]);;
186
187
188
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
192 /\ is_scs_v39 s
193 /\ scs_k_v39 s=6
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
200 THEN REWRITE_TAC[th]
201 THEN REPEAT STRIP_TAC)
202 THEN POP_ASSUM(fun th-> ASM_TAC
203 THEN REWRITE_TAC[th]
204 THEN REPEAT STRIP_TAC
205 THEN ASSUME_TAC th)
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`)
209 THEN RESA_TAC
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])
224 in
225
226
227 REPEAT STRIP_TAC
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]
230 THEN STRIP_TAC
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`)
233 THEN RESA_TAC
234 THENL[
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`]);;
241
242
243
244
245 let SCS_K_PRIME_CASE_3=prove(`is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q 
246 ==>  3< scs_k_v39 s`,
247 let LEMMA_TAC=
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`)
252 THEN RESA_TAC
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`]
254 in
255
256 REWRITE_TAC[LET_DEF;LET_END_DEF;scs_half_slice_v39;is_scs_v39;scs_diag;scs_v39_explicit]
257 THEN STRIP_TAC
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[]
260 THEN STRIP_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`)
266 THEN RESA_TAC
267 THENL[LEMMA_TAC `0` `2`;
268 LEMMA_TAC `1` `0`;
269 LEMMA_TAC `2` `1`]);;
270
271
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 
274 ==> 
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;]
277 THEN STRIP_TAC
278 THEN MP_TAC SCS_K_PRIME_CASE_3
279 THEN RESA_TAC
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]
284 THEN ASSUME_TAC th
285 THEN STRIP_TAC)
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`)
289 THEN RESA_TAC
290 THENL[
291 MP_TAC SCS_K_PRIME_CASE_4
292 THEN RESA_TAC
293 THEN ARITH_TAC;
294 MP_TAC SCS_K_PRIME_CASE_5
295 THEN RESA_TAC
296 THEN ARITH_TAC;
297 MP_TAC SCS_K_PRIME_CASE_6
298 THEN RESA_TAC
299 THEN ARITH_TAC]);;
300
301
302
303
304
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
309 /\ 
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 
313 /\
314 d'< #0.9 /\ 
315 scs_bm_v39 s p q < &4 /\
316 (4<scs_k_v39 s ==> scs_bm_v39 s p q <= cstab)
317 ==> 
318         is_scs_v39 s'`,
319   (* {{{ proof *)
320 [
321 STRIP_TAC
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;
329
330
331
332 REWRITE_TAC[periodic]
333 THEN SET_TAC[]
334 ;
335
336
337 REWRITE_TAC[periodic]
338 THEN SET_TAC[]
339 ;
340
341
342 REWRITE_TAC[periodic]
343 THEN SET_TAC[]
344 ;
345
346
347 REWRITE_TAC[periodic]
348 THEN SET_TAC[]
349 ;
350
351
352 REWRITE_TAC[periodic2]
353 THEN REPEAT STRIP_TAC
354 ;
355
356
357
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'`]
360 ;
361
362
363
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'`]
366 ;
367
368
369
370 REWRITE_TAC[periodic2]
371 THEN REPEAT STRIP_TAC
372 ;
373
374
375
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'`];
378
379
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'`];
382
383
384
385
386
387 REWRITE_TAC[periodic2]
388 THEN REPEAT STRIP_TAC;
389
390
391
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'`];
394
395
396
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'`];
399
400
401
402
403 REWRITE_TAC[periodic2]
404 THEN REPEAT STRIP_TAC
405 ;
406
407
408
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'`];
411
412
413
414
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'`]
417 ;
418
419
420
421 REWRITE_TAC[periodic2]
422 THEN REPEAT STRIP_TAC
423 ;
424
425
426
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'`];
429
430
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'`];
433
434
435
436 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
437 THEN REWRITE_TAC[];
438
439
440 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
441 THEN REWRITE_TAC[];
442
443
444 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
445 THEN REWRITE_TAC[];
446
447
448 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
449 THEN REWRITE_TAC[];
450
451
452
453 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
454 THEN REWRITE_TAC[];
455
456
457
458
459 REAL_ARITH_TAC;
460
461
462
463 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
464
465
466
467 ASM_REWRITE_TAC[];
468
469
470 ASM_REWRITE_TAC[]
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)
474 THEN REAL_ARITH_TAC
475 ;
476
477
478
479 REAL_ARITH_TAC;
480
481
482
483 MP_TAC(ARITH_RULE`3<=k' ==> ~(0=k'-1)`)
484 THEN RESA_TAC
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})`);
486
487
488
489 MP_TAC(SET_RULE`{i MOD k', i MOD k'} = {0, k'-1}==> i MOD k'= 0 /\  i MOD k'=  k'-1`)
490 THEN RESA_TAC
491 THEN POP_ASSUM MP_TAC
492 THEN RESA_TAC;
493
494
495
496 ASM_REWRITE_TAC[];
497
498
499
500
501 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
502
503
504
505 ASM_REWRITE_TAC[]
506 THEN ASM_TAC
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)`)
510 THEN RESA_TAC
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)
526 THEN REAL_ARITH_TAC;
527
528
529
530 ASM_REWRITE_TAC[]
531 THEN ASM_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)`)
535 THEN RESA_TAC
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)`]
547 THEN STRIP_TAC
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`)
554 THEN RESA_TAC
555 THEN MRESA_TAC MOD_LT[`i:num`;`scs_k_v39 s`]
556 THEN MRESA_TAC MOD_LT[`j:num`;`scs_k_v39 s`]
557 ;
558
559
560
561
562
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})`);
564
565
566 ASM_REWRITE_TAC[]
567 ;
568
569
570
571 ASM_REWRITE_TAC[]
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`)
574 THEN RESA_TAC
575 THEN ASM_TAC
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)`)
579 THEN RESA_TAC
580 THEN MP_TAC(ARITH_RULE`(i ) MOD 3 < 3 ==> (i ) MOD 3 =0 \/ (i ) MOD 3 =1 \/ (i ) MOD 3 =2`)
581 THEN RESA_TAC
582 ;
583
584
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
590 THEN REAL_ARITH_TAC;
591
592
593
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
599 THEN REAL_ARITH_TAC;
600
601
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
609 THEN SET_TAC[];
610
611
612
613
614
615
616
617
618
619
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})`);
621
622
623 ASM_REWRITE_TAC[]
624 THEN MP_TAC(ARITH_RULE`3<k' /\ k'< scs_k_v39 s ==> 4< scs_k_v39 s`)
625 THEN RESA_TAC
626 THEN REPLICATE_TAC (6) (POP_ASSUM MP_TAC)
627 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
628 THEN MP_TAC th)
629 THEN RESA_TAC
630 ;
631
632
633
634 ASM_REWRITE_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'`)
636 THEN RESA_TAC
637 THEN MRESAL_TAC DIVISION[`i:num`;`k':num`][ARITH_RULE`~(3=0)`]
638 THEN ASM_TAC
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)`)
642 THEN RESA_TAC
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' `)
648 THEN RESA_TAC
649 ;
650
651
652
653
654 MRESA_TAC MOD_LT[`k'-1`;`k':num`]
655 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
656 THEN 
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 
665 THEN SET_TAC[];
666
667
668
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[];
674
675
676
677 POP_ASSUM MP_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})`)
679 ;
680
681
682 ASM_REWRITE_TAC[];
683
684
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)`)
686 THEN RESA_TAC;
687
688
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'`)
690 THEN RESA_TAC
691 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
692 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
693 THEN 
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)  `]
695 ;
696
697
698
699
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)`)
701 THEN RESA_TAC
702 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
703 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
704 THEN 
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)  `]
706 ;
707
708
709
710 ASM_REWRITE_TAC[]
711 THEN STRIP_TAC
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`])
715
716 ;
717
718
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)`)
720 THEN RESA_TAC
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`)
727 THEN RESA_TAC
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`]
730 THEN RESA_TAC
731 THEN MP_TAC(ARITH_RULE`3<=k' /\ i MOD k' < k' ==> i MOD k' =k'-1 \/ i MOD k' +1 < k' `)
732 THEN RESA_TAC
733 ;
734
735
736
737
738
739
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 
746 THEN ARITH_TAC;
747
748
749
750 REWRITE_TAC[ADD1]
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`]
755 ;
756
757
758
759
760
761
762
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)`)
764 THEN RESA_TAC
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`)
771 THEN RESA_TAC
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`]
774 THEN RESA_TAC
775 THEN MP_TAC(ARITH_RULE`3<=k' /\ j MOD k' < k' ==> j MOD k' =k'-1 \/ j MOD k' +1 < k' `)
776 THEN RESA_TAC
777 ;
778
779
780
781
782
783
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 
790 THEN ARITH_TAC;
791
792
793
794 REWRITE_TAC[ADD1]
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`]
799 ;
800
801
802
803
804
805
806 POP_ASSUM MP_TAC
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})`)
808 ;
809
810
811
812
813 ASM_REWRITE_TAC[]
814 THEN REPLICATE_TAC (33)(POP_ASSUM MP_TAC)
815 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
816 THEN MP_TAC th) 
817 THEN ASM_REWRITE_TAC[];
818
819
820
821 ASM_REWRITE_TAC[]
822 THEN STRIP_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)`]) 
826 ;
827
828
829
830 POP_ASSUM MP_TAC
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})`)
832 ;
833
834
835
836
837 ASM_REWRITE_TAC[]
838 THEN REPLICATE_TAC (33)(POP_ASSUM MP_TAC)
839 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
840 THEN MP_TAC th) 
841 THEN ASM_REWRITE_TAC[];
842
843
844
845 ASM_REWRITE_TAC[]
846 THEN STRIP_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)`]) 
850 ;
851
852
853
854 SUBGOAL_THEN`IMAGE (\x.  (x+p MOD scs_k_v39 s )MOD scs_k_v39 s  ) {i | i < k' /\
855       (&2 * h0 <
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)) \/
860        &2 <
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;
867
868
869
870
871 REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING;IMAGE]
872 THEN GEN_TAC
873 THEN RESA_TAC;
874
875
876 REMOVE_ASSUM_TAC
877 THEN POP_ASSUM MP_TAC
878 THEN MP_TAC(ARITH_RULE`x'<k'==> x'= k'-1\/ SUC x' < k' `)
879 THEN RESA_TAC
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})`)
883  ;
884
885
886
887
888 MP_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} ==> (x' =0 /\ SUC x' = k'-1)\/ (x' =k'-1/\ SUC x' =0)`)
889 THEN RESA_TAC
890 THEN POP_ASSUM MP_TAC
891 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0= k'-1<=> k'=2`]
892 THEN STRIP_TAC
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])
897 THEN ARITH_TAC
898 ;
899
900
901
902
903
904 ASM_REWRITE_TAC[]
905 THEN STRIP_TAC
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`)
908 THEN RESA_TAC
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
917 THEN MP_TAC th)
918 THEN ASM_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`]
932 THEN STRIP_TAC
933 THEN ASM_REWRITE_TAC[ARITH_RULE`(x' + p) + 1=(x' + 1) + p`]
934 ;
935
936
937
938
939 REMOVE_ASSUM_TAC
940 THEN POP_ASSUM MP_TAC
941 THEN MP_TAC(ARITH_RULE`x'<k'==> x'= k'-1\/ SUC x' < k' `)
942 THEN RESA_TAC
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})`)
946  ;
947
948
949
950
951 MP_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} ==> (x' =0 /\ SUC x' = k'-1)\/ (x' =k'-1/\ SUC x' =0)`)
952 THEN RESA_TAC
953 THEN POP_ASSUM MP_TAC
954 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0= k'-1<=> k'=2`]
955 THEN STRIP_TAC
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])
960 THEN ARITH_TAC
961 ;
962
963
964
965
966
967 ASM_REWRITE_TAC[]
968 THEN STRIP_TAC
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`)
971 THEN RESA_TAC
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
980 THEN MP_TAC th)
981 THEN ASM_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`]
995 THEN STRIP_TAC
996 THEN ASM_REWRITE_TAC[ARITH_RULE`(x' + p) + 1=(x' + 1) + p`]
997 ;
998
999
1000
1001
1002 SUBGOAL_THEN`CARD(IMAGE (\x.  (x+p MOD scs_k_v39 s )MOD scs_k_v39 s  ) {i | i < k' /\
1003       (&2 * h0 <
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)) \/
1008        &2 <
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' /\
1014       (&2 * h0 <
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)) \/
1019        &2 <
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
1024 ;
1025
1026
1027
1028
1029 MATCH_MP_TAC CARD_IMAGE_INJ
1030 THEN STRIP_TAC;
1031
1032
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`)
1037 THEN RESA_TAC
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]
1041 ;
1042
1043
1044 MATCH_MP_TAC FINITE_SUBSET
1045 THEN EXISTS_TAC`0.. k'`
1046 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
1047 THEN ARITH_TAC;
1048
1049
1050
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
1056 ;
1057
1058
1059
1060
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]
1065 THEN ARITH_TAC;
1066
1067
1068 MRESA_TAC CARD_SUBSET[`IMAGE (\x.  (x+p MOD scs_k_v39 s )MOD scs_k_v39 s  ) {i | i < k' /\
1069       (&2 * h0 <
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)) \/
1074        &2 <
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
1083 ;
1084
1085
1086
1087
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]
1092 THEN ARITH_TAC;
1093
1094
1095
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)
1116       {i | i < k' /\
1117            (&2 * h0 <
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)) \/
1122             &2 <
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`)
1128 THEN RESA_TAC;]);;
1129
1130
1131
1132
1133
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
1137 /\ 
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 
1141 /\
1142 d'< #0.9 /\ 
1143 scs_bm_v39 s p q < &4 /\
1144  scs_k_v39 s =4
1145 ==> 
1146         is_scs_v39 s'`,
1147 [STRIP_TAC
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;
1155
1156 REWRITE_TAC[periodic]
1157 THEN SET_TAC[]
1158 ;
1159 REWRITE_TAC[periodic]
1160 THEN SET_TAC[]
1161 ;
1162 REWRITE_TAC[periodic]
1163 THEN SET_TAC[]
1164 ;
1165 REWRITE_TAC[periodic]
1166 THEN SET_TAC[]
1167 ;
1168 REWRITE_TAC[periodic2]
1169 THEN REPEAT STRIP_TAC
1170 ;
1171
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'`]
1174 ;
1175
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'`]
1178 ;
1179
1180 REWRITE_TAC[periodic2]
1181 THEN REPEAT STRIP_TAC
1182 ;
1183
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'`];
1188
1189
1190
1191 REWRITE_TAC[periodic2]
1192 THEN REPEAT STRIP_TAC;
1193
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'`];
1196
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'`];
1199
1200
1201 REWRITE_TAC[periodic2]
1202 THEN REPEAT STRIP_TAC
1203 ;
1204
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'`];
1207
1208
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'`]
1211 ;
1212
1213 REWRITE_TAC[periodic2]
1214 THEN REPEAT STRIP_TAC
1215 ;
1216
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'`];
1221
1222 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1223 THEN REWRITE_TAC[];
1224 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1225 THEN REWRITE_TAC[];
1226 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1227 THEN REWRITE_TAC[];
1228 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1229 THEN REWRITE_TAC[];
1230
1231 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1232 THEN REWRITE_TAC[];
1233
1234
1235 REAL_ARITH_TAC;
1236
1237 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
1238
1239 ASM_REWRITE_TAC[];
1240 ASM_REWRITE_TAC[]
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;
1246
1247 REAL_ARITH_TAC;
1248
1249 MP_TAC(ARITH_RULE`3<=k' ==> ~(0=k'-1)`)
1250 THEN RESA_TAC
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})`);
1252
1253 MP_TAC(SET_RULE`{i MOD k', i MOD k'} = {0, k'-1}==> i MOD k'= 0 /\  i MOD k'=  k'-1`)
1254 THEN RESA_TAC
1255 THEN POP_ASSUM MP_TAC
1256 THEN RESA_TAC;
1257
1258 ASM_REWRITE_TAC[];
1259
1260
1261 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
1262
1263 ASM_REWRITE_TAC[]
1264 THEN ASM_TAC
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)`)
1268 THEN RESA_TAC
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;
1285
1286 ASM_REWRITE_TAC[]
1287 THEN ASM_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)`)
1291 THEN RESA_TAC
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)`]
1303 THEN STRIP_TAC
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`)
1310 THEN RESA_TAC
1311 THEN MRESA_TAC MOD_LT[`i:num`;`scs_k_v39 s`]
1312 THEN MRESA_TAC MOD_LT[`j:num`;`scs_k_v39 s`]
1313 ;
1314
1315
1316
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})`);
1318 ASM_REWRITE_TAC[]
1319 ;
1320
1321 ASM_REWRITE_TAC[]
1322 THEN MRESAL_TAC DIVISION[`i:num`;`k':num`][ARITH_RULE`~(3=0)`]
1323 THEN ASM_TAC
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)`)
1327 THEN RESA_TAC
1328 THEN MP_TAC(ARITH_RULE`(i ) MOD 3 < 3 ==> (i ) MOD 3 =0 \/ (i ) MOD 3 =1 \/ (i ) MOD 3 =2`)
1329 THEN RESA_TAC
1330 ;
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;
1337
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
1351 THEN SET_TAC[];
1352
1353
1354 POP_ASSUM MP_TAC
1355 THEN POP_ASSUM MP_TAC
1356 THEN ARITH_TAC
1357 ;
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367 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})`)
1369 ;
1370 ASM_REWRITE_TAC[];
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)`)
1372 THEN RESA_TAC;
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'`)
1374 THEN RESA_TAC
1375 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
1376 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
1377 THEN 
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)  `]
1379 ;
1380
1381
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)`)
1383 THEN RESA_TAC
1384 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
1385 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
1386 THEN 
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)  `]
1388 ;
1389
1390 ASM_REWRITE_TAC[]
1391 THEN STRIP_TAC
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`])
1395
1396 ;
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)`)
1398 THEN RESA_TAC
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`)
1405 THEN RESA_TAC
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`]
1408 THEN RESA_TAC
1409 THEN MP_TAC(ARITH_RULE`3<=k' /\ i MOD k' < k' ==> i MOD k' =k'-1 \/ i MOD k' +1 < k' `)
1410 THEN RESA_TAC
1411 ;
1412
1413
1414
1415
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 
1422 THEN ARITH_TAC;
1423
1424 REWRITE_TAC[ADD1]
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`]
1429 ;
1430
1431
1432
1433
1434
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)`)
1436 THEN RESA_TAC
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`)
1443 THEN RESA_TAC
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`]
1446 THEN RESA_TAC
1447 THEN MP_TAC(ARITH_RULE`3<=k' /\ j MOD k' < k' ==> j MOD k' =k'-1 \/ j MOD k' +1 < k' `)
1448 THEN RESA_TAC
1449 ;
1450
1451
1452
1453
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 
1460 THEN ARITH_TAC;
1461
1462 REWRITE_TAC[ADD1]
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`]
1467 ;
1468
1469
1470
1471
1472 POP_ASSUM MP_TAC
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})`)
1474 ;
1475
1476
1477 ASM_REWRITE_TAC[]
1478 THEN REPLICATE_TAC (33)(POP_ASSUM MP_TAC)
1479 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1480 THEN MP_TAC th) 
1481 THEN ASM_REWRITE_TAC[];
1482
1483 ASM_REWRITE_TAC[]
1484 THEN STRIP_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)`]) 
1488 ;
1489
1490 POP_ASSUM MP_TAC
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})`)
1492 ;
1493
1494
1495 ASM_REWRITE_TAC[]
1496 THEN REPLICATE_TAC (33)(POP_ASSUM MP_TAC)
1497 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
1498 THEN MP_TAC th) 
1499 THEN ASM_REWRITE_TAC[];
1500
1501 ASM_REWRITE_TAC[]
1502 THEN STRIP_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)`]) 
1506 ;
1507
1508 SUBGOAL_THEN`IMAGE (\x.  (x+p MOD scs_k_v39 s )MOD scs_k_v39 s  ) {i | i < k' /\
1509       (&2 * h0 <
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)) \/
1514        &2 <
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;
1521
1522
1523 REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING;IMAGE]
1524 THEN GEN_TAC
1525 THEN RESA_TAC;
1526 REMOVE_ASSUM_TAC
1527 THEN POP_ASSUM MP_TAC
1528 THEN MP_TAC(ARITH_RULE`x'<k'==> x'= k'-1\/ SUC x' < k' `)
1529 THEN RESA_TAC
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})`)
1533  ;
1534
1535
1536 MP_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} ==> (x' =0 /\ SUC x' = k'-1)\/ (x' =k'-1/\ SUC x' =0)`)
1537 THEN RESA_TAC
1538 THEN POP_ASSUM MP_TAC
1539 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0= k'-1<=> k'=2`]
1540 THEN STRIP_TAC
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])
1545 THEN ARITH_TAC
1546 ;
1547
1548
1549
1550 ASM_REWRITE_TAC[]
1551 THEN STRIP_TAC
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`)
1554 THEN RESA_TAC
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
1563 THEN MP_TAC th)
1564 THEN ASM_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`]
1578 THEN STRIP_TAC
1579 THEN ASM_REWRITE_TAC[ARITH_RULE`(x' + p) + 1=(x' + 1) + p`]
1580 ;
1581
1582
1583 REMOVE_ASSUM_TAC
1584 THEN POP_ASSUM MP_TAC
1585 THEN MP_TAC(ARITH_RULE`x'<k'==> x'= k'-1\/ SUC x' < k' `)
1586 THEN RESA_TAC
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})`)
1590  ;
1591
1592
1593 MP_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} ==> (x' =0 /\ SUC x' = k'-1)\/ (x' =k'-1/\ SUC x' =0)`)
1594 THEN RESA_TAC
1595 THEN POP_ASSUM MP_TAC
1596 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0= k'-1<=> k'=2`]
1597 THEN STRIP_TAC
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])
1602 THEN ARITH_TAC
1603 ;
1604
1605
1606
1607 ASM_REWRITE_TAC[]
1608 THEN STRIP_TAC
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`)
1611 THEN RESA_TAC
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
1620 THEN MP_TAC th)
1621 THEN ASM_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`]
1635 THEN STRIP_TAC
1636 THEN ASM_REWRITE_TAC[ARITH_RULE`(x' + p) + 1=(x' + 1) + p`]
1637 ;
1638
1639
1640 SUBGOAL_THEN`CARD(IMAGE (\x.  (x+p MOD scs_k_v39 s )MOD scs_k_v39 s  ) {i | i < k' /\
1641       (&2 * h0 <
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)) \/
1646        &2 <
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' /\
1652       (&2 * h0 <
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)) \/
1657        &2 <
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
1662 ;
1663
1664
1665 MATCH_MP_TAC CARD_IMAGE_INJ
1666 THEN STRIP_TAC;
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`)
1671 THEN RESA_TAC
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]
1675 ;
1676 MATCH_MP_TAC FINITE_SUBSET
1677 THEN EXISTS_TAC`0.. k'`
1678 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
1679 THEN ARITH_TAC;
1680 POP_ASSUM MP_TAC
1681 THEN RESA_TAC
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
1687 ;
1688
1689
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]
1694 THEN ARITH_TAC;
1695 POP_ASSUM MP_TAC
1696 THEN RESA_TAC
1697 THEN MRESA_TAC CARD_SUBSET[`IMAGE (\x.  (x+p MOD scs_k_v39 s )MOD scs_k_v39 s  ) {i | i < k' /\
1698       (&2 * h0 <
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)) \/
1703        &2 <
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
1712 ;
1713
1714
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]
1719 THEN ARITH_TAC;
1720
1721 POP_ASSUM MP_TAC
1722 THEN RESA_TAC
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)
1741      {i | i < k' /\
1742           (&2 * h0 <
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)) \/
1746            &2 <
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[]
1752 THEN ARITH_TAC;]);;
1753
1754
1755
1756
1757
1758 let IS_EAR_IS_SCS=prove(`is_ear_v39 s
1759 ==> is_scs_v39 s`,
1760 REWRITE_TAC[is_ear_v39;is_scs_v39]
1761 THEN RESA_TAC);;
1762
1763
1764
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
1769 /\ 
1770 (is_ear_v39 s'')
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 
1773 /\
1774 d'< #0.9 /\ 
1775 scs_bm_v39 s p q < &4 /\
1776  scs_k_v39 s =4
1777 ==> 
1778         is_scs_v39 s'`,
1779 [
1780 STRIP_TAC
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;
1788
1789 REWRITE_TAC[periodic]
1790 THEN SET_TAC[]
1791 ;
1792 REWRITE_TAC[periodic]
1793 THEN SET_TAC[]
1794 ;
1795 REWRITE_TAC[periodic]
1796 THEN SET_TAC[]
1797 ;
1798 REWRITE_TAC[periodic]
1799 THEN SET_TAC[]
1800 ;
1801 REWRITE_TAC[periodic2]
1802 THEN REPEAT STRIP_TAC
1803 ;
1804
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'`]
1807 ;
1808
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'`]
1811 ;
1812
1813 REWRITE_TAC[periodic2]
1814 THEN REPEAT STRIP_TAC
1815 ;
1816
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'`];
1821
1822
1823
1824 REWRITE_TAC[periodic2]
1825 THEN REPEAT STRIP_TAC;
1826
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'`];
1829
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'`];
1832
1833
1834 REWRITE_TAC[periodic2]
1835 THEN REPEAT STRIP_TAC
1836 ;
1837
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'`];
1840
1841
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'`]
1844 ;
1845
1846 REWRITE_TAC[periodic2]
1847 THEN REPEAT STRIP_TAC
1848 ;
1849
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'`];
1854
1855 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1856 THEN REWRITE_TAC[];
1857 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1858 THEN REWRITE_TAC[];
1859 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1860 THEN REWRITE_TAC[];
1861 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1862 THEN REWRITE_TAC[];
1863
1864 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
1865 THEN REWRITE_TAC[];
1866
1867
1868 REAL_ARITH_TAC;
1869
1870 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
1871
1872 ASM_REWRITE_TAC[];
1873 ASM_REWRITE_TAC[]
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;
1879
1880 REAL_ARITH_TAC;
1881
1882 MP_TAC(ARITH_RULE`3<=k' ==> ~(0=k'-1)`)
1883 THEN RESA_TAC
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})`);
1885
1886 MP_TAC(SET_RULE`{i MOD k', i MOD k'} = {0, k'-1}==> i MOD k'= 0 /\  i MOD k'=  k'-1`)
1887 THEN RESA_TAC
1888 THEN POP_ASSUM MP_TAC
1889 THEN RESA_TAC;
1890
1891 ASM_REWRITE_TAC[];
1892
1893
1894 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
1895
1896 ASM_REWRITE_TAC[]
1897 THEN ASM_TAC
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)`)
1901 THEN RESA_TAC
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;
1918
1919 ASM_REWRITE_TAC[]
1920 THEN ASM_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)`)
1924 THEN RESA_TAC
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)`]
1936 THEN STRIP_TAC
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`)
1943 THEN RESA_TAC
1944 THEN MRESA_TAC MOD_LT[`i:num`;`scs_k_v39 s`]
1945 THEN MRESA_TAC MOD_LT[`j:num`;`scs_k_v39 s`]
1946 ;
1947
1948
1949
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})`);
1951 ASM_REWRITE_TAC[]
1952 ;
1953
1954 ASM_REWRITE_TAC[]
1955 THEN MRESAL_TAC DIVISION[`i:num`;`k':num`][ARITH_RULE`~(3=0)`]
1956 THEN ASM_TAC
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)`)
1960 THEN RESA_TAC
1961 THEN MP_TAC(ARITH_RULE`(i ) MOD 3 < 3 ==> (i ) MOD 3 =0 \/ (i ) MOD 3 =1 \/ (i ) MOD 3 =2`)
1962 THEN RESA_TAC
1963 ;
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;
1970
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
1984 THEN SET_TAC[];
1985
1986
1987 POP_ASSUM MP_TAC
1988 THEN POP_ASSUM MP_TAC
1989 THEN ARITH_TAC
1990 ;
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000 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})`)
2002 ;
2003 ASM_REWRITE_TAC[];
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)`)
2005 THEN RESA_TAC;
2006
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'`)
2008 THEN RESA_TAC
2009 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
2010 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
2011 THEN 
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)  `]
2013 ;
2014
2015
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)`)
2017 THEN RESA_TAC
2018 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
2019 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
2020 THEN 
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)  `]
2022 ;
2023
2024 ASM_REWRITE_TAC[]
2025 THEN STRIP_TAC
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`])
2029
2030 ;
2031
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)`)
2033 THEN RESA_TAC
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`)
2040 THEN RESA_TAC
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`]
2043 THEN RESA_TAC
2044 THEN MP_TAC(ARITH_RULE`3<=k' /\ i MOD k' < k' ==> i MOD k' =k'-1 \/ i MOD k' +1 < k' `)
2045 THEN RESA_TAC
2046 ;
2047
2048
2049
2050
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 
2057 THEN ARITH_TAC;
2058
2059 REWRITE_TAC[ADD1]
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`]
2064 ;
2065
2066
2067
2068
2069
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)`)
2071 THEN RESA_TAC
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`)
2078 THEN RESA_TAC
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`]
2081 THEN RESA_TAC
2082 THEN MP_TAC(ARITH_RULE`3<=k' /\ j MOD k' < k' ==> j MOD k' =k'-1 \/ j MOD k' +1 < k' `)
2083 THEN RESA_TAC
2084 ;
2085
2086
2087
2088
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 
2095 THEN ARITH_TAC;
2096
2097 REWRITE_TAC[ADD1]
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`]
2102 ;
2103
2104
2105
2106
2107 POP_ASSUM MP_TAC
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})`)
2109 ;
2110
2111
2112 ASM_REWRITE_TAC[]
2113 THEN STRIP_TAC
2114 THEN REPLICATE_TAC (36-3)(POP_ASSUM MP_TAC)
2115 THEN POP_ASSUM (fun th->  REPEAT STRIP_TAC
2116 THEN MP_TAC th
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])
2118 THEN STRIP_TAC
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}
2122             then T
2123             else scs_J_v39 s (i MOD k'' + q MOD 4) (SUC i MOD k'' + q MOD 4))}` ASSUME_TAC
2124 ;
2125
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 `];
2128
2129 POP_ASSUM MP_TAC
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
2133 THEN MP_TAC th) 
2134 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2 /\ 2<3 /\ 2 MOD 3=2/\ SUC 2=3/\ 3 MOD 3=0 `];
2135
2136
2137
2138
2139
2140
2141
2142 ASM_REWRITE_TAC[]
2143 THEN STRIP_TAC
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)`]) 
2147 ;
2148
2149 POP_ASSUM MP_TAC
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})`)
2151 ;
2152
2153
2154 ASM_REWRITE_TAC[]
2155 THEN STRIP_TAC
2156 THEN REPLICATE_TAC (36-3)(POP_ASSUM MP_TAC)
2157 THEN POP_ASSUM (fun th->  REPEAT STRIP_TAC
2158 THEN MP_TAC th
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])
2160 THEN STRIP_TAC
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}
2164             then T
2165             else scs_J_v39 s (i MOD k'' + q MOD 4) (SUC i MOD k'' + q MOD 4))}` ASSUME_TAC
2166 ;
2167
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 `];
2170
2171 POP_ASSUM MP_TAC
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
2175 THEN MP_TAC th) 
2176 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2 /\ 2<3 /\ 2 MOD 3=2/\ SUC 2=3/\ 3 MOD 3=0 `]
2177 THEN RESA_TAC;
2178
2179
2180
2181 ASM_REWRITE_TAC[]
2182 THEN STRIP_TAC
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)`]) 
2186 ;
2187
2188 SUBGOAL_THEN`IMAGE (\x.  (x+p MOD scs_k_v39 s )MOD scs_k_v39 s  ) {i | i < k' /\
2189       (&2 * h0 <
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)) \/
2194        &2 <
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;
2201
2202
2203 REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING;IMAGE]
2204 THEN GEN_TAC
2205 THEN RESA_TAC;
2206 REMOVE_ASSUM_TAC
2207 THEN POP_ASSUM MP_TAC
2208 THEN MP_TAC(ARITH_RULE`x'<k'==> x'= k'-1\/ SUC x' < k' `)
2209 THEN RESA_TAC
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})`)
2213  ;
2214
2215
2216 MP_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} ==> (x' =0 /\ SUC x' = k'-1)\/ (x' =k'-1/\ SUC x' =0)`)
2217 THEN RESA_TAC
2218 THEN POP_ASSUM MP_TAC
2219 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0= k'-1<=> k'=2`]
2220 THEN STRIP_TAC
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])
2225 THEN ARITH_TAC
2226 ;
2227
2228
2229
2230 ASM_REWRITE_TAC[]
2231 THEN STRIP_TAC
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`)
2234 THEN RESA_TAC
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
2243 THEN MP_TAC th)
2244 THEN ASM_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`]
2258 THEN STRIP_TAC
2259 THEN ASM_REWRITE_TAC[ARITH_RULE`(x' + p) + 1=(x' + 1) + p`]
2260 ;
2261
2262
2263 REMOVE_ASSUM_TAC
2264 THEN POP_ASSUM MP_TAC
2265 THEN MP_TAC(ARITH_RULE`x'<k'==> x'= k'-1\/ SUC x' < k' `)
2266 THEN RESA_TAC
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})`)
2270  ;
2271
2272
2273 MP_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} ==> (x' =0 /\ SUC x' = k'-1)\/ (x' =k'-1/\ SUC x' =0)`)
2274 THEN RESA_TAC
2275 THEN POP_ASSUM MP_TAC
2276 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0= k'-1<=> k'=2`]
2277 THEN STRIP_TAC
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])
2282 THEN ARITH_TAC
2283 ;
2284
2285
2286
2287 ASM_REWRITE_TAC[]
2288 THEN STRIP_TAC
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`)
2291 THEN RESA_TAC
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
2300 THEN MP_TAC th)
2301 THEN ASM_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`]
2315 THEN STRIP_TAC
2316 THEN ASM_REWRITE_TAC[ARITH_RULE`(x' + p) + 1=(x' + 1) + p`]
2317 ;
2318
2319
2320 SUBGOAL_THEN`CARD(IMAGE (\x.  (x+p MOD scs_k_v39 s )MOD scs_k_v39 s  ) {i | i < k' /\
2321       (&2 * h0 <
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)) \/
2326        &2 <
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' /\
2332       (&2 * h0 <
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)) \/
2337        &2 <
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
2342 ;
2343
2344
2345 MATCH_MP_TAC CARD_IMAGE_INJ
2346 THEN STRIP_TAC;
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`)
2351 THEN RESA_TAC
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]
2355 ;
2356 MATCH_MP_TAC FINITE_SUBSET
2357 THEN EXISTS_TAC`0.. k'`
2358 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
2359 THEN ARITH_TAC;
2360 POP_ASSUM MP_TAC
2361 THEN RESA_TAC
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
2367 ;
2368
2369
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]
2374 THEN ARITH_TAC;
2375 POP_ASSUM MP_TAC
2376 THEN RESA_TAC
2377 THEN MRESA_TAC CARD_SUBSET[`IMAGE (\x.  (x+p MOD scs_k_v39 s )MOD scs_k_v39 s  ) {i | i < k' /\
2378       (&2 * h0 <
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)) \/
2383        &2 <
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
2392 ;
2393
2394
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]
2399 THEN ARITH_TAC;
2400
2401 POP_ASSUM MP_TAC
2402 THEN RESA_TAC
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)
2421      {i | i < k' /\
2422           (&2 * h0 <
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)) \/
2426            &2 <
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[]
2432 THEN ARITH_TAC]);;
2433
2434
2435
2436
2437
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
2442 /\ 
2443 (is_ear_v39 s'')
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 
2446 /\
2447 d'< #0.9 /\ 
2448 scs_bm_v39 s p q < &4 /\
2449 (4<scs_k_v39 s ==> scs_bm_v39 s p q <= cstab)
2450 ==> 
2451         is_scs_v39 s'`,
2452 [
2453 STRIP_TAC
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;
2461
2462
2463
2464 REWRITE_TAC[periodic]
2465 THEN SET_TAC[]
2466 ;
2467
2468
2469 REWRITE_TAC[periodic]
2470 THEN SET_TAC[]
2471 ;
2472
2473
2474 REWRITE_TAC[periodic]
2475 THEN SET_TAC[]
2476 ;
2477
2478
2479 REWRITE_TAC[periodic]
2480 THEN SET_TAC[]
2481 ;
2482
2483
2484 REWRITE_TAC[periodic2]
2485 THEN REPEAT STRIP_TAC
2486 ;
2487
2488
2489
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'`]
2492 ;
2493
2494
2495
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'`]
2498 ;
2499
2500
2501
2502 REWRITE_TAC[periodic2]
2503 THEN REPEAT STRIP_TAC
2504 ;
2505
2506
2507
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'`];
2510
2511
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'`];
2514
2515
2516
2517
2518
2519 REWRITE_TAC[periodic2]
2520 THEN REPEAT STRIP_TAC;
2521
2522
2523
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'`];
2526
2527
2528
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'`];
2531
2532
2533
2534
2535 REWRITE_TAC[periodic2]
2536 THEN REPEAT STRIP_TAC
2537 ;
2538
2539
2540
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'`];
2543
2544
2545
2546
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'`]
2549 ;
2550
2551
2552
2553 REWRITE_TAC[periodic2]
2554 THEN REPEAT STRIP_TAC
2555 ;
2556
2557
2558
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'`];
2561
2562
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'`];
2565
2566
2567
2568 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
2569 THEN REWRITE_TAC[];
2570
2571
2572 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
2573 THEN REWRITE_TAC[];
2574
2575
2576 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
2577 THEN REWRITE_TAC[];
2578
2579
2580 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
2581 THEN REWRITE_TAC[];
2582
2583
2584
2585 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`({A,B}={C,D})<=> ({B,A}={C,D}) `]
2586 THEN REWRITE_TAC[];
2587
2588
2589
2590
2591 REAL_ARITH_TAC;
2592
2593
2594
2595 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
2596
2597
2598
2599 ASM_REWRITE_TAC[];
2600
2601
2602 ASM_REWRITE_TAC[]
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)
2606 THEN REAL_ARITH_TAC
2607 ;
2608
2609
2610
2611 REAL_ARITH_TAC;
2612
2613
2614
2615 MP_TAC(ARITH_RULE`3<=k' ==> ~(0=k'-1)`)
2616 THEN RESA_TAC
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})`);
2618
2619
2620
2621 MP_TAC(SET_RULE`{i MOD k', i MOD k'} = {0, k'-1}==> i MOD k'= 0 /\  i MOD k'=  k'-1`)
2622 THEN RESA_TAC
2623 THEN POP_ASSUM MP_TAC
2624 THEN RESA_TAC;
2625
2626
2627
2628 ASM_REWRITE_TAC[];
2629
2630
2631
2632
2633 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
2634
2635
2636
2637 ASM_REWRITE_TAC[]
2638 THEN ASM_TAC
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)`)
2642 THEN RESA_TAC
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;
2659
2660
2661
2662 ASM_REWRITE_TAC[]
2663 THEN ASM_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)`)
2667 THEN RESA_TAC
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)`]
2679 THEN STRIP_TAC
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`)
2686 THEN RESA_TAC
2687 THEN MRESA_TAC MOD_LT[`i:num`;`scs_k_v39 s`]
2688 THEN MRESA_TAC MOD_LT[`j:num`;`scs_k_v39 s`]
2689 ;
2690
2691
2692
2693
2694
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})`);
2696
2697
2698 ASM_REWRITE_TAC[]
2699 ;
2700
2701
2702
2703 ASM_REWRITE_TAC[]
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`)
2706 THEN RESA_TAC
2707 THEN ASM_TAC
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)`)
2711 THEN RESA_TAC
2712 THEN MP_TAC(ARITH_RULE`(i ) MOD 3 < 3 ==> (i ) MOD 3 =0 \/ (i ) MOD 3 =1 \/ (i ) MOD 3 =2`)
2713 THEN RESA_TAC
2714 ;
2715
2716
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;
2723
2724
2725
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;
2732
2733
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
2741 THEN SET_TAC[];
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
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})`);
2753
2754
2755 ASM_REWRITE_TAC[]
2756 THEN MP_TAC(ARITH_RULE`3<k' /\ k'< scs_k_v39 s ==> 4< scs_k_v39 s`)
2757 THEN RESA_TAC
2758 THEN REPLICATE_TAC (6) (POP_ASSUM MP_TAC)
2759 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
2760 THEN MP_TAC th)
2761 THEN RESA_TAC
2762 ;
2763
2764
2765
2766 ASM_REWRITE_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'`)
2768 THEN RESA_TAC
2769 THEN MRESAL_TAC DIVISION[`i:num`;`k':num`][ARITH_RULE`~(3=0)`]
2770 THEN ASM_TAC
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)`)
2774 THEN RESA_TAC
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' `)
2780 THEN RESA_TAC
2781 ;
2782
2783
2784
2785
2786 MRESA_TAC MOD_LT[`k'-1`;`k':num`]
2787 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
2788 THEN 
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 
2797 THEN SET_TAC[];
2798
2799
2800
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[];
2806
2807
2808
2809 POP_ASSUM MP_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})`)
2811 ;
2812
2813
2814 ASM_REWRITE_TAC[];
2815
2816
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)`)
2818 THEN RESA_TAC;
2819
2820
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'`)
2822 THEN RESA_TAC
2823 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
2824 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
2825 THEN 
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)  `]
2827 ;
2828
2829
2830
2831
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)`)
2833 THEN RESA_TAC
2834 THEN MRESA_TAC MOD_LT[`k'-1`;`k':num`]
2835 THEN MRESAL_TAC MOD_MULT[`k':num`;`1`][ARITH_RULE`A* 1=A`]
2836 THEN 
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)  `]
2838 ;
2839
2840
2841
2842 ASM_REWRITE_TAC[]
2843 THEN STRIP_TAC
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`])
2847
2848 ;
2849
2850
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)`)
2852 THEN RESA_TAC
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`)
2859 THEN RESA_TAC
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`]
2862 THEN RESA_TAC
2863 THEN MP_TAC(ARITH_RULE`3<=k' /\ i MOD k' < k' ==> i MOD k' =k'-1 \/ i MOD k' +1 < k' `)
2864 THEN RESA_TAC
2865 ;
2866
2867
2868
2869
2870
2871
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 
2878 THEN ARITH_TAC;
2879
2880
2881
2882 REWRITE_TAC[ADD1]
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`]
2887 ;
2888
2889
2890
2891
2892
2893
2894
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)`)
2896 THEN RESA_TAC
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`)
2903 THEN RESA_TAC
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`]
2906 THEN RESA_TAC
2907 THEN MP_TAC(ARITH_RULE`3<=k' /\ j MOD k' < k' ==> j MOD k' =k'-1 \/ j MOD k' +1 < k' `)
2908 THEN RESA_TAC
2909 ;
2910
2911
2912
2913
2914
2915
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 
2922 THEN ARITH_TAC;
2923
2924
2925
2926 REWRITE_TAC[ADD1]
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`]
2931 ;
2932
2933
2934
2935
2936
2937
2938 POP_ASSUM MP_TAC
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})`)
2940 ;
2941
2942
2943
2944
2945 ASM_REWRITE_TAC[]
2946 THEN STRIP_TAC
2947 THEN REPLICATE_TAC (36-3)(POP_ASSUM MP_TAC)
2948 THEN POP_ASSUM (fun th->  REPEAT STRIP_TAC
2949 THEN MP_TAC th
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])
2951 THEN STRIP_TAC
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}
2955             then T
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
2958 ;
2959
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}`];
2962
2963
2964 POP_ASSUM MP_TAC
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
2968 THEN MP_TAC th) 
2969 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2 /\ 2<3 /\ 2 MOD 3=2/\ SUC 2=3/\ 3 MOD 3=0 `]
2970 THEN RESA_TAC;
2971
2972
2973
2974
2975
2976 ASM_REWRITE_TAC[]
2977 THEN STRIP_TAC
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)`]) 
2981 ;
2982
2983
2984
2985 POP_ASSUM MP_TAC
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})`)
2987 ;
2988
2989
2990
2991
2992 ASM_REWRITE_TAC[]
2993 THEN STRIP_TAC
2994 THEN REPLICATE_TAC (36-3)(POP_ASSUM MP_TAC)
2995 THEN POP_ASSUM (fun th->  REPEAT STRIP_TAC
2996 THEN MP_TAC th
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])
2998 THEN STRIP_TAC
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}
3002             then T
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
3005 ;
3006
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}`];
3009
3010
3011 POP_ASSUM MP_TAC
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
3015 THEN MP_TAC th) 
3016 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2 /\ 2<3 /\ 2 MOD 3=2/\ SUC 2=3/\ 3 MOD 3=0 `]
3017 THEN RESA_TAC;
3018
3019
3020
3021
3022 ASM_REWRITE_TAC[]
3023 THEN STRIP_TAC
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)`]) 
3027 ;
3028
3029
3030
3031 SUBGOAL_THEN`IMAGE (\x.  (x+p MOD scs_k_v39 s )MOD scs_k_v39 s  ) {i | i < k' /\
3032       (&2 * h0 <
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)) \/
3037        &2 <
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;
3044
3045
3046
3047
3048 REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING;IMAGE]
3049 THEN GEN_TAC
3050 THEN RESA_TAC;
3051
3052
3053 REMOVE_ASSUM_TAC
3054 THEN POP_ASSUM MP_TAC
3055 THEN MP_TAC(ARITH_RULE`x'<k'==> x'= k'-1\/ SUC x' < k' `)
3056 THEN RESA_TAC
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})`)
3060  ;
3061
3062
3063
3064
3065 MP_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} ==> (x' =0 /\ SUC x' = k'-1)\/ (x' =k'-1/\ SUC x' =0)`)
3066 THEN RESA_TAC
3067 THEN POP_ASSUM MP_TAC
3068 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0= k'-1<=> k'=2`]
3069 THEN STRIP_TAC
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])
3074 THEN ARITH_TAC
3075 ;
3076
3077
3078
3079
3080
3081 ASM_REWRITE_TAC[]
3082 THEN STRIP_TAC
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`)
3085 THEN RESA_TAC
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
3094 THEN MP_TAC th)
3095 THEN ASM_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`]
3109 THEN STRIP_TAC
3110 THEN ASM_REWRITE_TAC[ARITH_RULE`(x' + p) + 1=(x' + 1) + p`]
3111 ;
3112
3113
3114
3115
3116 REMOVE_ASSUM_TAC
3117 THEN POP_ASSUM MP_TAC
3118 THEN MP_TAC(ARITH_RULE`x'<k'==> x'= k'-1\/ SUC x' < k' `)
3119 THEN RESA_TAC
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})`)
3123  ;
3124
3125
3126
3127
3128 MP_TAC(SET_RULE`{x', SUC x'} = {0, k' - 1} ==> (x' =0 /\ SUC x' = k'-1)\/ (x' =k'-1/\ SUC x' =0)`)
3129 THEN RESA_TAC
3130 THEN POP_ASSUM MP_TAC
3131 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0= k'-1<=> k'=2`]
3132 THEN STRIP_TAC
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])
3137 THEN ARITH_TAC
3138 ;
3139
3140
3141
3142
3143
3144 ASM_REWRITE_TAC[]
3145 THEN STRIP_TAC
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`)
3148 THEN RESA_TAC
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
3157 THEN MP_TAC th)
3158 THEN ASM_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`]
3172 THEN STRIP_TAC
3173 THEN ASM_REWRITE_TAC[ARITH_RULE`(x' + p) + 1=(x' + 1) + p`]
3174 ;
3175
3176
3177
3178
3179 SUBGOAL_THEN`CARD(IMAGE (\x.  (x+p MOD scs_k_v39 s )MOD scs_k_v39 s  ) {i | i < k' /\
3180       (&2 * h0 <
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)) \/
3185        &2 <
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' /\
3191       (&2 * h0 <
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)) \/
3196        &2 <
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
3201 ;
3202
3203
3204
3205
3206 MATCH_MP_TAC CARD_IMAGE_INJ
3207 THEN STRIP_TAC;
3208
3209
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`)
3214 THEN RESA_TAC
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]
3218 ;
3219
3220
3221 MATCH_MP_TAC FINITE_SUBSET
3222 THEN EXISTS_TAC`0.. k'`
3223 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
3224 THEN ARITH_TAC;
3225
3226
3227
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
3233 ;
3234
3235
3236
3237
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]
3242 THEN ARITH_TAC;
3243
3244
3245 MRESA_TAC CARD_SUBSET[`IMAGE (\x.  (x+p MOD scs_k_v39 s )MOD scs_k_v39 s  ) {i | i < k' /\
3246       (&2 * h0 <
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)) \/
3251        &2 <
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
3260 ;
3261
3262
3263
3264
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]
3269 THEN ARITH_TAC;
3270
3271
3272
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)
3292       {i | i < k' /\
3293            (&2 * h0 <
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)) \/
3298             &2 <
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`)
3304 THEN RESA_TAC]);;
3305
3306
3307
3308
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
3312 ==> is_scs_v39 s'`,
3313   (* {{{ proof *)
3314 [
3315 STRIP_TAC
3316 THEN POP_ASSUM MP_TAC
3317 THEN MP_TAC SCS_K_PRIME_CASE_3
3318 THEN RESA_TAC
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))`)
3320 THEN RESA_TAC;
3321
3322 ASM_REWRITE_TAC[is_scs_slice_v39;LET_DEF;LET_END_DEF;scs_diag;scs_v39_explicit;scs_slice_v39;PAIR_EQ]
3323 THEN STRIP_TAC
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;
3332
3333 DISJ_CASES_TAC(SET_RULE`~(scs_J_v39 s' 0 (k'-1)) \/  scs_J_v39 s' 0 (k'-1)`);
3334
3335 MP_TAC SCS_HALF_SLICE_IS_SCS_4
3336 THEN ASM_REWRITE_TAC[scs_diag]
3337 THEN POP_ASSUM MP_TAC
3338 THEN RESA_TAC;
3339
3340 REPLICATE_TAC 6 (POP_ASSUM MP_TAC)
3341 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3342 THEN MP_TAC th
3343 THEN POP_ASSUM MP_TAC
3344 THEN RESA_TAC)
3345 THEN STRIP_TAC;
3346
3347 MATCH_MP_TAC IS_EAR_IS_SCS
3348 THEN ASM_REWRITE_TAC[];
3349
3350 MP_TAC SCS_HALF_SLICE_IS_SCS_4_PRIME
3351 THEN ASM_REWRITE_TAC[scs_diag]
3352 THEN RESA_TAC
3353 THEN REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
3354 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3355 THEN POP_ASSUM MP_TAC
3356 THEN MP_TAC th)
3357 THEN RESA_TAC;
3358
3359 ASM_REWRITE_TAC[is_scs_slice_v39;LET_DEF;LET_END_DEF;scs_diag;scs_v39_explicit;scs_slice_v39;PAIR_EQ]
3360 THEN STRIP_TAC
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;
3369
3370 DISJ_CASES_TAC(SET_RULE`~(scs_J_v39 s' 0 (k'-1)) \/  scs_J_v39 s' 0 (k'-1)`);
3371
3372 MP_TAC SCS_HALF_SLICE_IS_SCS
3373 THEN ASM_REWRITE_TAC[scs_diag]
3374 THEN POP_ASSUM MP_TAC
3375 THEN RESA_TAC;
3376
3377 REPLICATE_TAC 6 (POP_ASSUM MP_TAC)
3378 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3379 THEN MP_TAC th
3380 THEN POP_ASSUM MP_TAC
3381 THEN RESA_TAC)
3382 THEN STRIP_TAC;
3383
3384 MATCH_MP_TAC IS_EAR_IS_SCS
3385 THEN ASM_REWRITE_TAC[];
3386
3387 MP_TAC SCS_HALF_SLICE_IS_SCS_PRIME
3388 THEN ASM_REWRITE_TAC[scs_diag]
3389 THEN RESA_TAC
3390 THEN REPLICATE_TAC 4 (POP_ASSUM MP_TAC)
3391 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3392 THEN POP_ASSUM MP_TAC
3393 THEN MP_TAC th)
3394 THEN RESA_TAC]);;
3395
3396
3397
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
3400 /\ BBs_v39 s vv
3401  ==> ~(vv (p MOD (scs_k_v39 s)) =vv (q MOD (scs_k_v39 s)))`,
3402 STRIP_TAC
3403 THEN POP_ASSUM(fun thH-> 
3404 ASSUME_TAC thH
3405 THEN MP_TAC SCS_K_PRIME_CASE_3
3406 THEN RESA_TAC
3407 THEN POP_ASSUM(fun th->  ASM_TAC
3408 THEN ASSUME_TAC th
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;]
3411 THEN RESA_TAC
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}`] 
3419 THEN STRIP_TAC
3420 THEN MRESA_TAC th3[`(vv:num->real^3) (p MOD k)`;`vec 0:real^3`;`(vv:num->real^3) (q MOD k)`]);;
3421
3422
3423
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`
3427 THEN SET_TAC[]);;
3428
3429
3430
3431 let SUC_MOD_NOT_EQ=prove(` 1<k ==> !i. ~(i MOD k= SUC i MOD k)`,
3432 STRIP_TAC
3433 THEN INDUCT_TAC
3434 THENL[ MP_TAC(ARITH_RULE`1<k==> 0<k/\ SUC 0=1`)
3435 THEN RESA_TAC
3436 THEN MRESA_TAC MOD_LT[`0`;`k:num`]
3437 THEN MRESAL_TAC MOD_LT[`1`;`k:num`][ADD1]
3438 THEN ARITH_TAC;
3439 POP_ASSUM MP_TAC
3440 THEN REWRITE_TAC[ADD1]
3441 THEN MP_TAC(ARITH_RULE`1<k ==> ~(k=0)/\ SUC 0=1/\ i<= i+1 `)
3442 THEN RESA_TAC
3443 THEN STRIP_TAC
3444 THEN MRESAL_TAC (GEN_ALL Hdplygy.MOD_EQ_MOD1)[`i+1:num`;`i:num`;`1`;`k:num`][ADD_SYM]]);;
3445
3446
3447 let IS_SCS_NOT_COLLINEAR_BBs_CASE_LE_PRIME_3=prove_by_refinement(
3448 `3< scs_k_v39 s/\ is_scs_v39 s
3449 /\ vv IN BBs_v39 s
3450 ==> ~collinear{vec 0, vv (i MOD (scs_k_v39 s)) ,vv ((SUC i) MOD (scs_k_v39 s))}`,
3451 [
3452
3453 REWRITE_TAC[Local_lemmas.collinear_fan22;aff;AFFINE_HULL_2;IN_ELIM_THM;VECTOR_ARITH`A % vec 0+B=B`;cstab]
3454 THEN STRIP_TAC
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`]
3456 THEN RESA_TAC
3457 THEN ASM_TAC
3458 THEN REWRITE_TAC[IN]
3459 THEN STRIP_TAC
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->
3462 STRIP_TAC
3463 THEN ASSUME_TAC th)
3464 THEN REPEAT STRIP_TAC;
3465
3466 MP_TAC(ARITH_RULE`3 < scs_k_v39 s==> ~(scs_k_v39 s <= 3)`)
3467 THEN RESA_TAC;
3468
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`)
3472 THEN RESA_TAC
3473 THEN STRIP_TAC
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
3478 THEN RESA_TAC
3479 THEN POP_ASSUM(fun th-> MRESA1_TAC th`i:num`)
3480 THEN STRIP_TAC
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
3487 THEN MP_TAC th)
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
3495 THEN MP_TAC th)
3496 THEN SUBGOAL_THEN`(?x. x IN (:num) /\ vv (i MOD k) = (vv:num->real^3) x)`ASSUME_TAC;
3497
3498 EXISTS_TAC`i MOD k`
3499 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
3500
3501
3502 SUBGOAL_THEN`(?x. x IN (:num) /\ vv ((SUC i) MOD k) = (vv:num->real^3) x)`ASSUME_TAC;
3503
3504 EXISTS_TAC`SUC(i) MOD k`
3505 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN (:num)`];
3506
3507 REWRITE_TAC[IMAGE;SUBSET;IN_ELIM_THM]
3508 THEN STRIP_TAC
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)`)
3512 THEN STRIP_TAC;
3513
3514  MP_TAC(REAL_ARITH`&0<= v\/ &0<= --( v)`)
3515 THEN STRIP_TAC;
3516
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;
3530
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[])
3547 THEN ASM_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
3561 THEN MP_TAC th)
3562 THEN ASM_REWRITE_TAC[cstab]
3563 THEN REAL_ARITH_TAC;
3564
3565 MP_TAC(REAL_ARITH`&0<= v\/ &0<= --( v)`)
3566 THEN STRIP_TAC;
3567
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
3581 THEN MP_TAC th)
3582 THEN POP_ASSUM MP_TAC
3583 THEN ASM_REWRITE_TAC[h0]
3584 THEN REAL_ARITH_TAC;
3585
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
3599 THEN MP_TAC th)
3600 THEN REPLICATE_TAC (44-32)(POP_ASSUM MP_TAC)
3601 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
3602 THEN MP_TAC th)
3603 THEN POP_ASSUM MP_TAC
3604 THEN ASM_REWRITE_TAC[]
3605 THEN REAL_ARITH_TAC;]);;
3606   (* }}} *)
3607
3608
3609
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) 
3616 /\ BBs_v39 s vv
3617 ==> ~({u,w} IN E)`,
3618 [RESA_TAC
3619 THEN MP_TAC SCS_K_PRIME_CASE_3
3620 THEN RESA_TAC
3621 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM;scs_diag]
3622 THEN STRIP_TAC
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))`)
3624 THEN RESA_TAC;
3625
3626 ASM_TAC
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;
3629
3630 MP_TAC(ARITH_RULE`3< scs_k_v39 s==> ~(scs_k_v39 s<= 3)`)
3631 THEN RESA_TAC;
3632
3633 POP_ASSUM MP_TAC
3634 THEN POP_ASSUM MP_TAC
3635 THEN MP_TAC(ARITH_RULE`3< scs_k_v39 s==> ~(scs_k_v39 s= 0)`)
3636 THEN RESA_TAC
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)`)
3655 THEN RESA_TAC;
3656
3657 REAL_ARITH_TAC;
3658
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)`)
3660 THEN RESA_TAC;
3661
3662 REAL_ARITH_TAC;
3663
3664 REPEAT STRIP_TAC
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`][];
3670
3671 ASM_TAC
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;
3674
3675 MP_TAC(ARITH_RULE`3< scs_k_v39 s==> ~(scs_k_v39 s<= 3)`)
3676 THEN RESA_TAC;
3677
3678 POP_ASSUM MP_TAC
3679 THEN POP_ASSUM MP_TAC
3680 THEN MP_TAC(ARITH_RULE`3< scs_k_v39 s==> ~(scs_k_v39 s= 0)`)
3681 THEN RESA_TAC
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)`)
3700 THEN RESA_TAC;
3701
3702 REAL_ARITH_TAC;
3703
3704
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)`)
3706 THEN RESA_TAC;
3707
3708 REAL_ARITH_TAC;
3709
3710
3711 REPEAT STRIP_TAC
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`][]]);;
3717
3718
3719
3720
3721
3722
3723
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);;
3727
3728
3729
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 /\
3738  BBs_v39 s vv
3739  ==> 
3740 (!x. x IN FF ==> aff_gt {vec 0} {u, w} SUBSET wedge_in_fan_gt x E)`,
3741 [
3742 REWRITE_TAC[dist]
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
3747 THEN RESA_TAC
3748 THEN MP_TAC SCS_K_LE_6
3749 THEN RESA_TAC
3750 THEN STRIP_TAC
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`)
3763 THEN RESA_TAC;
3764
3765
3766
3767
3768 POP_ASSUM(fun th-> ASM_TAC
3769 THEN REWRITE_TAC[th]
3770 THEN ASSUME_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]
3776 THEN STRIP_TAC 
3777 THEN MP_TAC(INST_TYPE [`:2+2`,`:M`]IN_IS_SCS_CASE_4)
3778 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_4;IN]
3779 THEN STRIP_TAC 
3780 THEN SUBGOAL_THEN`{u, w} SUBSET V_SY (v:real^3^(2+2))` ASSUME_TAC;
3781
3782
3783
3784
3785
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`];
3789
3790
3791
3792
3793
3794 SUBGOAL_THEN`&2 <= norm (u - w:real^3)` ASSUME_TAC;
3795
3796
3797
3798
3799
3800
3801 ASM_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;
3804
3805
3806
3807
3808
3809 ASM_TAC
3810 THEN ARITH_TAC;
3811
3812
3813
3814
3815
3816
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;
3827
3828
3829
3830
3831
3832 MP_TAC DIAG_NOT_IN_EDGES
3833 THEN ASM_REWRITE_TAC[dist;IN]
3834 THEN STRIP_TAC
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
3838 THEN EXPAND_TAC"a"
3839 THEN REWRITE_TAC[Dih2k_hypermap.VECMATS_MATVEC_ID]
3840 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_4;IN;B_SY1;ARITH_RULE`2<4`]
3841 THEN STRIP_TAC 
3842 THEN POP_ASSUM MATCH_MP_TAC
3843 THEN ASM_TAC
3844 THEN REWRITE_TAC[IN]
3845 THEN REPEAT RESA_TAC;
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859 POP_ASSUM(fun th-> ASM_TAC
3860 THEN REWRITE_TAC[th]
3861 THEN ASSUME_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]
3867 THEN STRIP_TAC 
3868 THEN MP_TAC(INST_TYPE [`:2+3`,`:M`]IN_IS_SCS_CASE_5)
3869 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_5;IN]
3870 THEN STRIP_TAC 
3871 THEN SUBGOAL_THEN`{u, w} SUBSET V_SY (v:real^3^(2+3))` ASSUME_TAC;
3872
3873
3874
3875
3876
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`];
3880
3881
3882
3883
3884
3885 SUBGOAL_THEN`&2 <= norm (u - w:real^3)` ASSUME_TAC;
3886
3887
3888
3889
3890
3891
3892 ASM_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;
3895
3896
3897
3898
3899
3900 ASM_TAC
3901 THEN ARITH_TAC;
3902
3903
3904
3905
3906
3907
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;
3918
3919
3920
3921
3922
3923 MP_TAC DIAG_NOT_IN_EDGES
3924 THEN ASM_REWRITE_TAC[dist;IN]
3925 THEN STRIP_TAC
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
3929 THEN EXPAND_TAC"a"
3930 THEN REWRITE_TAC[Dih2k_hypermap.VECMATS_MATVEC_ID]
3931 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_5;IN;B_SY1;ARITH_RULE`2<5`]
3932 THEN STRIP_TAC 
3933 THEN POP_ASSUM MATCH_MP_TAC
3934 THEN ASM_TAC
3935 THEN REWRITE_TAC[IN]
3936 THEN REPEAT RESA_TAC;
3937
3938
3939
3940
3941
3942 POP_ASSUM(fun th-> ASM_TAC
3943 THEN REWRITE_TAC[th]
3944 THEN ASSUME_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]
3950 THEN STRIP_TAC 
3951 THEN MP_TAC(INST_TYPE [`:3+3`,`:M`]IN_IS_SCS_CASE_6)
3952 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_6;IN]
3953 THEN STRIP_TAC 
3954 THEN SUBGOAL_THEN`{u, w} SUBSET V_SY (v:real^3^(3+3))` ASSUME_TAC;
3955
3956
3957
3958
3959
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`];
3963
3964
3965
3966
3967
3968 SUBGOAL_THEN`&2 <= norm (u - w:real^3)` ASSUME_TAC;
3969
3970
3971
3972
3973
3974
3975 ASM_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;
3978
3979
3980
3981
3982
3983 ASM_TAC
3984 THEN ARITH_TAC;
3985
3986
3987
3988
3989
3990
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;
4001
4002
4003
4004
4005 MP_TAC DIAG_NOT_IN_EDGES
4006 THEN ASM_REWRITE_TAC[dist;IN]
4007 THEN STRIP_TAC
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
4011 THEN EXPAND_TAC"a"
4012 THEN REWRITE_TAC[Dih2k_hypermap.VECMATS_MATVEC_ID]
4013 THEN ASM_REWRITE_TAC[Basics.DIMINDEX_6;IN;B_SY1;ARITH_RULE`2<6`]
4014 THEN STRIP_TAC 
4015 THEN POP_ASSUM MATCH_MP_TAC
4016 THEN ASM_TAC
4017 THEN REWRITE_TAC[IN]
4018 THEN REPEAT RESA_TAC;
4019 ]);;
4020
4021
4022
4023
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 /\
4029         is_scs_v39 s /\
4030  scs_diag (scs_k_v39 s) p q /\
4031         BBs_v39 s vv 
4032 ==> 
4033 (!m. ITER m (rho_node1 FF) u= vv (m+p1))`,
4034 [STRIP_TAC
4035 THEN INDUCT_TAC;
4036
4037 ASM_REWRITE_TAC[ITER;ARITH_RULE`0+p=p`];
4038
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;
4041
4042 EXPAND_TAC"FF"
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)`];
4046
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
4052 THEN RESA_TAC
4053 THEN POP_ASSUM(fun th->  ASM_TAC
4054 THEN ASSUME_TAC th
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]);;
4058
4059
4060
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 /\
4066         is_scs_v39 s /\
4067  scs_diag (scs_k_v39 s) p q /\
4068         BBs_v39 s vv 
4069 ==> vv (k' - 1 + p MOD k) = w`,
4070 [
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
4076 THEN RESA_TAC
4077 THEN MP_TAC(ARITH_RULE`3<scs_k_v39 s ==> ~(scs_k_v39 s<=3)`)
4078 THEN RESA_TAC
4079 THEN POP_ASSUM (fun th->
4080 REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
4081 THEN ASSUME_TAC th)
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
4086 THEN ASSUME_TAC th
4087 THEN MP_TAC th
4088 THEN REWRITE_TAC[convex_local_fan]
4089 THEN STRIP_TAC)
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;
4094
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[];
4099
4100 REPLICATE_TAC (43-3)(POP_ASSUM MP_TAC)
4101 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4102 THEN MP_TAC th)
4103 THEN EXPAND_TAC"s'"
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`]
4106 THEN STRIP_TAC
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`]
4111 THEN RESA_TAC
4112 THEN MP_TAC(ARITH_RULE`3<=k==> ~(k=0)`)
4113 THEN RESA_TAC
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`)
4116 THEN RESA_TAC
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)
4120 `)
4121 THEN RESA_TAC
4122 THEN REPLICATE_TAC (52-32)(POP_ASSUM MP_TAC)
4123 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4124 THEN MP_TAC th)
4125 THEN REWRITE_TAC[periodic]
4126 THEN STRIP_TAC
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])
4129 THEN ASSUME_TAC th)
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`)
4133 THEN RESA_TAC
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`])]);;
4141
4142
4143
4144 let VV_INJ=prove(`  scs_k_v39 s =k /\
4145         is_scs_v39 s /\
4146         BBs_v39 s vv 
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);;
4158
4159
4160
4161
4162 let CARD_V_EQ_SCS_K=prove_by_refinement(
4163 `  scs_k_v39 s =k /\
4164  IMAGE (vv:num->real^3) (:num)=V/\
4165         is_scs_v39 s /\
4166  scs_diag (scs_k_v39 s) p q /\
4167         BBs_v39 s vv 
4168 ==> CARD V=k`,
4169 [
4170 REPEAT STRIP_TAC
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
4174 THEN RESA_TAC
4175 THEN MP_TAC SCS_K_LE_6
4176 THEN RESA_TAC
4177 THEN STRIP_TAC
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`)
4190 THEN RESA_TAC;
4191
4192 POP_ASSUM(fun th-> ASM_TAC
4193 THEN REWRITE_TAC[th]
4194 THEN ASSUME_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]
4200 THEN STRIP_TAC 
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]
4203 THEN EXPAND_TAC "V"
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[]
4206 THEN MP_TAC VV_INJ
4207 THEN RESA_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[]
4217 THEN ARITH_TAC;
4218
4219 POP_ASSUM(fun th-> ASM_TAC
4220 THEN REWRITE_TAC[th]
4221 THEN ASSUME_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]
4227 THEN STRIP_TAC 
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]
4231 THEN EXPAND_TAC "V"
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[]
4234 THEN MP_TAC VV_INJ
4235 THEN RESA_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[]
4249 THEN ARITH_TAC;
4250
4251 POP_ASSUM(fun th-> ASM_TAC
4252 THEN REWRITE_TAC[th]
4253 THEN ASSUME_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]
4259 THEN STRIP_TAC 
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]
4263 THEN EXPAND_TAC "V"
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[]
4266 THEN MP_TAC VV_INJ
4267 THEN RESA_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[]
4286 THEN ARITH_TAC]);;
4287
4288
4289
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 /\
4300         is_scs_v39 s /\
4301  scs_diag (scs_k_v39 s) p q /\
4302         BBs_v39 s vv 
4303 ==> 
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)) 
4306 `,
4307 [
4308 REPEAT STRIP_TAC
4309 THEN MP_TAC SCS_K_PRIME_CASE_3
4310 THEN RESA_TAC
4311 THEN MP_TAC(ARITH_RULE`3<scs_k_v39 s ==> ~(scs_k_v39 s<=3) `)
4312 THEN RESA_TAC
4313 THEN POP_ASSUM (fun th->
4314 REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
4315 THEN ASSUME_TAC th)
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
4320 THEN ASSUME_TAC th
4321 THEN MP_TAC th
4322 THEN REWRITE_TAC[convex_local_fan]
4323 THEN STRIP_TAC)
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;
4328
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[];
4333
4334 MP_TAC NOT_EQ_DIAG
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]
4336 THEN STRIP_TAC
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]
4339 THEN STRIP_TAC
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]
4346 THEN STRIP_TAC
4347 THEN SUBGOAL_THEN`order (rho_node1 FF) u w= k'-1` ASSUME_TAC;
4348
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]
4353 THEN GEN_TAC
4354 THEN STRIP_TAC
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]
4363 THEN STRIP_TAC
4364 THEN STRIP_TAC
4365 THEN MP_TAC(ARITH_RULE`3<=k' /\ k'<k ==> k'-1<k`)
4366 THEN RESA_TAC
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`]);
4370
4371 ASM_REWRITE_TAC[IMAGE;IN_ELIM_THM;EXTENSION]
4372 THEN GEN_TAC
4373 THEN EQ_TAC;
4374
4375 STRIP_TAC
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]
4379 THEN STRIP_TAC
4380 THEN MP_TAC(ARITH_RULE`3<=k/\ 3<=k' ==> ~(k=0) /\ ~(k'=0)`)
4381 THEN RESA_TAC
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`)
4384 THEN RESA_TAC
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];
4391
4392 RESA_TAC
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]
4397 THEN STRIP_TAC
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'`)
4401 THEN RESA_TAC
4402 THEN MRESA_TAC MOD_LT[`n':num`;`k':num`]]);;
4403
4404
4405
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 /\
4416         is_scs_v39 s /\
4417  scs_diag (scs_k_v39 s) p q /\
4418         BBs_v39 s vv 
4419 ==> 
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)) 
4423 `,
4424 [REPEAT STRIP_TAC
4425 THEN MP_TAC SCS_K_PRIME_CASE_3
4426 THEN RESA_TAC
4427 THEN MP_TAC(ARITH_RULE`3<scs_k_v39 s ==> ~(scs_k_v39 s<=3) `)
4428 THEN RESA_TAC
4429 THEN POP_ASSUM (fun th->
4430 REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
4431 THEN ASSUME_TAC th)
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
4436 THEN ASSUME_TAC th
4437 THEN MP_TAC th
4438 THEN REWRITE_TAC[convex_local_fan]
4439 THEN STRIP_TAC)
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;
4444
4445
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[];
4450
4451
4452 MP_TAC NOT_EQ_DIAG
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]
4454 THEN STRIP_TAC
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]
4457 THEN STRIP_TAC
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]
4464 THEN STRIP_TAC
4465 THEN SUBGOAL_THEN`order (rho_node1 FF) u w= k'-1` ASSUME_TAC;
4466
4467
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]
4472 THEN GEN_TAC
4473 THEN STRIP_TAC
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]
4482 THEN STRIP_TAC
4483 THEN STRIP_TAC
4484 THEN MP_TAC(ARITH_RULE`3<=k' /\ k'<k ==> k'-1<k`)
4485 THEN RESA_TAC
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`]);
4489
4490
4491
4492
4493
4494 ASM_REWRITE_TAC[IMAGE;IN_ELIM_THM;EXTENSION;UNION]
4495 THEN GEN_TAC
4496 THEN REWRITE_TAC[GSYM EXTENSION]
4497 THEN EQ_TAC;
4498
4499
4500
4501
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]
4504 THEN STRIP_TAC
4505 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4506 THEN STRIP_TAC
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]
4510 THEN STRIP_TAC
4511 THEN MP_TAC(ARITH_RULE`3<=k/\ 3<=k' ==> ~(k=0) /\ ~(k'=0)`)
4512 THEN RESA_TAC
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'`)
4515 THEN RESA_TAC
4516 THEN MP_TAC(ARITH_RULE`x' MOD k'<= k'-1 /\3<=k' ==> x' MOD k' = k'-1\/ x' MOD k'< k'-1`)
4517 THEN RESA_TAC
4518 ;
4519
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`]
4523
4524 ;
4525
4526
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'`)
4535 THEN RESA_TAC
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]
4539 THEN STRIP_TAC
4540 ;
4541
4542
4543 EXISTS_TAC`x':num`
4544 THEN ASM_REWRITE_TAC[]
4545 ;
4546
4547
4548 MRESA_TAC DIVISION[`x' MOD k' + p MOD k`;`k:num`]
4549 THEN MRESA_TAC DIVISION[`k' - 1 + p MOD k`;`k:num`]
4550 THEN MP_TAC VV_INJ
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]
4552 THEN STRIP_TAC
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]
4555 THEN ASM_TAC
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)`)
4565 THEN RESA_TAC
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]
4569 THEN RESA_TAC
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)`)
4572 THEN RESA_TAC
4573 THEN MRESA_TAC MOD_LT[`k'-1`;`k:num`]
4574 ;
4575
4576
4577
4578
4579
4580 ASM_REWRITE_TAC[slicev;IN_ELIM_THM;DELETE;IN_SING]
4581 THEN RESA_TAC;
4582
4583
4584
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')`)
4592 THEN RESA_TAC;
4593
4594
4595
4596 POP_ASSUM(fun th-> ASM_TAC
4597 THEN REWRITE_TAC[th]
4598 THEN REPEAT RESA_TAC)
4599 ;
4600
4601
4602 MRESA_TAC MOD_LT[`n':num`;`k':num`]
4603 THEN MRESA_TAC MOD_LT[`SUC n':num`;`k':num`]
4604 ;
4605
4606
4607 ASM_REWRITE_TAC[]
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]
4612 THEN STRIP_TAC
4613 THEN MP_TAC(ARITH_RULE`3<=k' /\k'<k==> k'-1<k' /\ SUC(k'-1)=k' /\ ~(k'=0)`)
4614 THEN RESA_TAC
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`]
4617 ;
4618 ]);;
4619
4620
4621
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 /\
4632         is_scs_v39 s /\
4633  scs_diag (scs_k_v39 s) p q /\
4634         BBs_v39 s vv 
4635 ==> 
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)
4638 `,[
4639
4640 REPEAT STRIP_TAC
4641 THEN MP_TAC SCS_K_PRIME_CASE_3
4642 THEN RESA_TAC
4643 THEN MP_TAC(ARITH_RULE`3<scs_k_v39 s ==> ~(scs_k_v39 s<=3) `)
4644 THEN RESA_TAC
4645 THEN POP_ASSUM (fun th->
4646 REPLICATE_TAC 7 (POP_ASSUM MP_TAC)
4647 THEN ASSUME_TAC th)
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
4652 THEN ASSUME_TAC th
4653 THEN MP_TAC th
4654 THEN REWRITE_TAC[convex_local_fan]
4655 THEN STRIP_TAC)
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;
4660
4661
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[];
4666
4667
4668 MP_TAC NOT_EQ_DIAG
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]
4670 THEN STRIP_TAC
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]
4673 THEN STRIP_TAC
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]
4680 THEN STRIP_TAC
4681 THEN SUBGOAL_THEN`order (rho_node1 FF) u w= k'-1` ASSUME_TAC;
4682
4683
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]
4688 THEN GEN_TAC
4689 THEN STRIP_TAC
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]
4698 THEN STRIP_TAC
4699 THEN STRIP_TAC
4700 THEN MP_TAC(ARITH_RULE`3<=k' /\ k'<k ==> k'-1<k`)
4701 THEN RESA_TAC
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`]);
4705
4706
4707
4708
4709
4710 ASM_REWRITE_TAC[IMAGE;IN_ELIM_THM;EXTENSION;UNION]
4711 THEN GEN_TAC
4712 THEN REWRITE_TAC[GSYM EXTENSION]
4713 THEN EQ_TAC;
4714
4715
4716
4717
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]
4720 THEN STRIP_TAC
4721 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4722 THEN STRIP_TAC
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]
4726 THEN STRIP_TAC
4727 THEN MP_TAC(ARITH_RULE`3<=k/\ 3<=k' ==> ~(k=0) /\ ~(k'=0)`)
4728 THEN RESA_TAC
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'`)
4731 THEN RESA_TAC
4732 THEN MP_TAC(ARITH_RULE`x' MOD k'<= k'-1 /\3<=k' ==> x' MOD k' = k'-1\/ x' MOD k'< k'-1`)
4733 THEN RESA_TAC
4734 ;
4735
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`]
4739
4740 ;
4741
4742
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'`)
4751 THEN RESA_TAC
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]
4755 THEN STRIP_TAC
4756 ;
4757
4758
4759 EXISTS_TAC`x':num`
4760 THEN ASM_REWRITE_TAC[]
4761 ;
4762
4763
4764 MRESA_TAC DIVISION[`x' MOD k' + p MOD k`;`k:num`]
4765 THEN MRESA_TAC DIVISION[`k' - 1 + p MOD k`;`k:num`]
4766 THEN MP_TAC VV_INJ
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]
4768 THEN STRIP_TAC
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]
4771 THEN ASM_TAC
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)`)
4781 THEN RESA_TAC
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]
4785 THEN RESA_TAC
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)`)
4788 THEN RESA_TAC
4789 THEN MRESA_TAC MOD_LT[`k'-1`;`k:num`]
4790 ;
4791
4792
4793
4794
4795
4796 ASM_REWRITE_TAC[slicev;IN_ELIM_THM;DELETE;IN_SING]
4797 THEN RESA_TAC;
4798
4799
4800
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')`)
4808 THEN RESA_TAC;
4809
4810
4811
4812 POP_ASSUM(fun th-> ASM_TAC
4813 THEN REWRITE_TAC[th]
4814 THEN REPEAT RESA_TAC)
4815 ;
4816
4817
4818 MRESA_TAC MOD_LT[`n':num`;`k':num`]
4819 THEN MRESA_TAC MOD_LT[`SUC n':num`;`k':num`]
4820 ;
4821
4822
4823 ASM_REWRITE_TAC[]
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]
4828 THEN STRIP_TAC
4829 THEN MP_TAC(ARITH_RULE`3<=k' /\k'<k==> k'-1<k' /\ SUC(k'-1)=k' /\ ~(k'=0)`)
4830 THEN RESA_TAC
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`]
4833 ;
4834 ]);;
4835
4836
4837
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 
4843 /\
4844 d'< #0.9 /\ 
4845 (4<scs_k_v39 s /\ scs_bm_v39 s p q <= cstab)
4846 /\      MMs_v39 s vv 
4847  ==> 
4848         BBs_v39 s' vv'`,
4849 [
4850 STRIP_TAC
4851 THEN POP_ASSUM MP_TAC
4852 (*THEN MP_TAC SCS_HALF_SLICE_IS_SCS
4853 THEN RESA_TAC*)
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
4858 THEN RESA_TAC
4859 THEN MP_TAC(ARITH_RULE`3<scs_k_v39 s ==> ~(scs_k_v39 s<=3)`)
4860 THEN RESA_TAC
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;
4866
4867 ASM_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)`];
4876
4877
4878
4879 REWRITE_TAC[periodic;]
4880 THEN GEN_TAC
4881 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k':num`;`i:num`][ARITH_RULE`1 * k' + i = (i+k')`]
4882 ;
4883
4884
4885 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
4886
4887
4888
4889 ASM_REWRITE_TAC[]
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)`])
4892 THEN STRIP_TAC
4893 THEN STRIP_TAC
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;
4896
4897
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)`)
4900 THEN RESA_TAC
4901 THEN REWRITE_TAC[ARITH_RULE`0+p=p`]
4902 THEN ASM_TAC
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`)
4906 THEN RESA_TAC
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`]
4915 THEN EXPAND_TAC"k'"
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))
4918 =(q+ 2*k) `)
4919 THEN RESA_TAC
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`)
4926 THEN RESA_TAC
4927 THEN MRESA_TAC th[`k'-1+p MOD k`;`p:num`]
4928 THEN REMOVE_ASSUM_TAC
4929 THEN ASSUME_TAC th)
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`)
4932 ;
4933
4934 POP_ASSUM(fun th1->ASM_REWRITE_TAC[SYM th1])
4935 ;
4936
4937
4938
4939 ASM_REWRITE_TAC[];
4940
4941
4942 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
4943
4944
4945
4946 ASM_REWRITE_TAC[]
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)`])
4949 THEN STRIP_TAC
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;
4952
4953
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)`)
4956 THEN RESA_TAC
4957 THEN REWRITE_TAC[ARITH_RULE`0+p=p`]
4958 THEN ASM_TAC
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`)
4962 THEN RESA_TAC
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`]
4971 THEN EXPAND_TAC"k'"
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))
4974 =(q+ 2*k) `)
4975 THEN RESA_TAC
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`)
4982 THEN RESA_TAC
4983 THEN MRESA_TAC th[`k'-1+p MOD k`;`p:num`]
4984 THEN REMOVE_ASSUM_TAC
4985 THEN ASSUME_TAC th)
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`)
4988 ;
4989
4990 POP_ASSUM(fun th1->ASM_REWRITE_TAC[SYM th1])
4991 ;
4992
4993
4994
4995 ASM_REWRITE_TAC[];
4996
4997
4998
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)`)
5005 THEN RESA_TAC
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
5009 ;
5010
5011
5012
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[];
5017
5018 SUBGOAL_THEN`norm (u - w:real^3) <= cstab`ASSUME_TAC
5019 ;
5020
5021
5022 MP_TAC(ARITH_RULE`3<=k==> ~(k=0)`)
5023 THEN RESA_TAC
5024 THEN ASM_TAC
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
5037 THEN MP_TAC th)
5038 THEN POP_ASSUM MP_TAC
5039 THEN REAL_ARITH_TAC
5040
5041 ;
5042
5043 MP_TAC NOT_EQ_DIAG
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]
5045 THEN STRIP_TAC
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]
5048 THEN STRIP_TAC
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]
5052 THEN STRIP_TAC
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]
5055 THEN STRIP_TAC
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]
5058 THEN STRIP_TAC
5059 THEN ASM_REWRITE_TAC[]]);;
5060
5061
5062
5063
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 
5069 /\
5070 d'< #0.9 /\ 
5071 (4=scs_k_v39 s /\ scs_bm_v39 s p q <= &4)
5072 /\      MMs_v39 s vv 
5073  ==> 
5074         BBs_v39 s' vv'`,
5075 [
5076 STRIP_TAC
5077 THEN POP_ASSUM MP_TAC
5078 (*THEN MP_TAC SCS_HALF_SLICE_IS_SCS
5079 THEN RESA_TAC*)
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
5084 THEN RESA_TAC
5085 THEN MP_TAC(ARITH_RULE`3<scs_k_v39 s ==> ~(scs_k_v39 s<=3)`)
5086 THEN RESA_TAC
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;
5092
5093 ASM_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)`];
5102
5103
5104 REWRITE_TAC[periodic;]
5105 THEN GEN_TAC
5106 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k':num`;`i:num`][ARITH_RULE`1 * k' + i = (i+k')`];
5107
5108 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
5109
5110 ASM_REWRITE_TAC[]
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)`])
5113 THEN STRIP_TAC
5114 THEN STRIP_TAC
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;
5117
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)`)
5120 THEN RESA_TAC
5121 THEN REWRITE_TAC[ARITH_RULE`0+p=p`]
5122 THEN ASM_TAC
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`)
5126 THEN RESA_TAC
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`]
5135 THEN EXPAND_TAC"k'"
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))
5138 =(q+ 2*k) `)
5139 THEN RESA_TAC
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`)
5146 THEN RESA_TAC
5147 THEN MRESA_TAC th[`k'-1+p MOD k`;`p:num`]
5148 THEN REMOVE_ASSUM_TAC
5149 THEN ASSUME_TAC th)
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`);
5152
5153 POP_ASSUM(fun th1->ASM_REWRITE_TAC[SYM th1]);
5154
5155 ASM_REWRITE_TAC[];
5156
5157 DISJ_CASES_TAC(SET_RULE`{i MOD k', j MOD k'} = {0, k'-1} \/ ~({i MOD k', j MOD k'} = {0, k'-1})`);
5158
5159 ASM_REWRITE_TAC[]
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)`])
5162 THEN STRIP_TAC
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;
5165
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)`)
5168 THEN RESA_TAC
5169 THEN REWRITE_TAC[ARITH_RULE`0+p=p`]
5170 THEN ASM_TAC
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`)
5174 THEN RESA_TAC
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`]
5183 THEN EXPAND_TAC"k'"
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))
5186 =(q+ 2*k) `)
5187 THEN RESA_TAC
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`)
5194 THEN RESA_TAC
5195 THEN MRESA_TAC th[`k'-1+p MOD k`;`p:num`]
5196 THEN REMOVE_ASSUM_TAC
5197 THEN ASSUME_TAC th)
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`);
5200
5201 POP_ASSUM(fun th1->ASM_REWRITE_TAC[SYM th1]);
5202
5203 ASM_REWRITE_TAC[];
5204
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]
5207 THEN RESA_TAC
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;
5213
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[];
5218
5219 ASM_REWRITE_TAC[]
5220 THEN ARITH_TAC]);;
5221
5222
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
5226         MMs_v39 s vv /\
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 ==> 
5230         BBs_v39 s' vv')`,
5231 [REPEAT GEN_TAC
5232 THEN REWRITE_TAC[LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;]
5233 THEN STRIP_TAC;
5234
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`)
5239 THEN RESA_TAC
5240 THEN MP_TAC QKNVMLB1_EQ4F
5241 THEN RESA_TAC;
5242
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
5247 THEN RESA_TAC
5248 THEN MP_TAC(ARITH_RULE`3 < scs_k_v39 s ==>  scs_k_v39 s =4 \/ 4 < scs_k_v39 s`)
5249 THEN RESA_TAC;
5250
5251 ASM_TAC
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`)
5255 THEN RESA_TAC
5256 THEN MP_TAC QKNVMLB1_EQ4F
5257 THEN RESA_TAC;
5258
5259 MP_TAC QKNVMLB1_LE4F
5260 THEN RESA_TAC]);;
5261
5262
5263
5264
5265 let DIAG_IS_NOT_EAR=prove(`is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q 
5266 ==> ~(is_ear_v39 s)`,
5267 STRIP_TAC
5268 THEN MP_TAC SCS_K_PRIME_CASE_3
5269 THEN RESA_TAC
5270 THEN REWRITE_TAC[is_ear_v39]
5271 THEN POP_ASSUM (fun th-> STRIP_TAC
5272 THEN MP_TAC th
5273 THEN ASM_REWRITE_TAC[])
5274 THEN ARITH_TAC);;
5275
5276
5277
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 
5282 ==>
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]
5285 THEN RESA_TAC
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]
5291 THEN RESA_TAC
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''`)
5295 THEN RESA_TAC
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`]);;
5300
5301
5302
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]
5306 THEN RESA_TAC
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`]));;
5310
5311
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))`,
5317 [REPEAT STRIP_TAC
5318 THEN POP_ASSUM MP_TAC
5319 THEN POP_ASSUM MP_TAC
5320 THEN EXPAND_TAC"s'"
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`
5323 THEN STRIP_TAC
5324 THEN ABBREV_TAC`k= scs_k_v39 s`
5325 THEN MP_TAC SCS_K_PRIME_CASE_3
5326 THEN RESA_TAC
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`)
5329 THEN RESA_TAC
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})`)
5335 THEN RESA_TAC;
5336
5337 MP_TAC(SET_RULE`{i, SUC i} = {0, k' - 1} ==> (i=0 /\ SUC i= k'-1) \/ (i= k'-1 /\ SUC i=0)`)
5338 THEN RESA_TAC;
5339
5340 REWRITE_TAC[ADD1;ARITH_RULE`SUC i+A=SUC(i+A)`];
5341
5342 POP_ASSUM MP_TAC
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
5346 THEN MP_TAC th)
5347 THEN ASM_REWRITE_TAC[]
5348 THEN ARITH_TAC;
5349
5350 POP_ASSUM MP_TAC
5351 THEN ARITH_TAC;
5352
5353 STRIP_TAC
5354 THEN ASM_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`)
5358 THEN RESA_TAC
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)`)]);;
5368
5369
5370
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
5376 ==>
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 }={}
5379 `,
5380 [
5381 REWRITE_TAC[SET_RULE`A INTER B={}<=> ~(?a. a IN A INTER B)`;INTER]
5382 THEN STRIP_TAC
5383 THEN EXPAND_TAC"s'"
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;
5395
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 `)
5397 THEN RESA_TAC
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)`)
5401 THEN RESA_TAC
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)`)
5410 THEN RESA_TAC
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`)
5414 THEN RESA_TAC
5415 THEN MRESA_TAC MOD_LT[`q MOD k - p MOD k`;`k:num`]
5416 THEN STRIP_TAC
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`)
5420 THEN RESA_TAC
5421 THEN REPLICATE_TAC (32-26) (POP_ASSUM MP_TAC)
5422 THEN POP_ASSUM(fun th-> 
5423 REPEAT STRIP_TAC
5424 THEN ONCE_REWRITE_TAC[SYM th] THEN ASSUME_TAC(SYM th))
5425 THEN ASM_REWRITE_TAC[];
5426
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 `)
5428 THEN RESA_TAC
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`)
5432 THEN RESA_TAC
5433 THEN SUBGOAL_THEN`(k'' +q MOD k)  <= k+ p MOD k+1 `ASSUME_TAC;
5434
5435 MP_TAC(ARITH_RULE`(p  +k -q MOD k)+1=(p + 1 + k - q MOD k) `)
5436 THEN RESA_TAC
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)`)
5446 THEN RESA_TAC
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`)
5455 THEN RESA_TAC;
5456
5457 ASM_TAC
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 `)
5463 THEN RESA_TAC
5464 THEN MP_TAC(ARITH_RULE`i'+ q MOD k< k \/ k <= i' + q MOD k `)
5465 THEN RESA_TAC;
5466
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`)
5470 THEN RESA_TAC
5471 THEN POP_ASSUM MP_TAC
5472 THEN REWRITE_TAC[]
5473 THEN ASM_REWRITE_TAC[ARITH_RULE`~(q MOD k <= i + p MOD k)<=> i + p MOD k< q MOD k`];
5474
5475 MRESA_TAC DIVISION[`p:num`;`k:num`]
5476 THEN 
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`)
5480 THEN RESA_TAC
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`)
5486 THEN RESA_TAC
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
5492 THEN ARITH_TAC]);;
5493
5494
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 
5498 ==>
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 }={}
5501 `,
5502 REWRITE_TAC[scs_diag]
5503 THEN STRIP_TAC
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)`)
5506 THEN RESA_TAC
5507 THENL[
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[]]);;
5517
5518
5519
5520
5521
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))) 
5526 /\
5527        vv''  = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s'')+q MOD (scs_k_v39 s))) 
5528 /\
5529  MMs_v39 s vv /\
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''`,
5534 [
5535
5536 STRIP_TAC
5537 THEN POP_ASSUM MP_TAC
5538 (*THEN MP_TAC SCS_HALF_SLICE_IS_SCS
5539 THEN RESA_TAC*)
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
5547 THEN RESA_TAC
5548 THEN MP_TAC  DIAG_IS_NOT_EAR
5549 THEN RESA_TAC
5550 THEN MP_TAC(ARITH_RULE`3<scs_k_v39 s ==> ~(scs_k_v39 s<=3)`)
5551 THEN RESA_TAC
5552 THEN MP_TAC DIAG_NOT_IN_SCS_J
5553 THEN RESA_TAC
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
5560 ;
5561
5562
5563
5564
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)}
5572 ` ASSUME_TAC
5573 ;
5574
5575
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]
5579 THEN ARITH_TAC;
5580
5581
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
5584 ;
5585
5586
5587 REWRITE_TAC[INTER;SET_RULE`A={}<=> ~(?a. a IN A)`;IN_ELIM_THM;IN_SING]
5588 THEN ARITH_TAC;
5589
5590
5591
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)}`
5594 ASSUME_TAC;
5595
5596
5597 REWRITE_TAC[UNION;IN_SING;IN_ELIM_THM;EXTENSION]
5598 THEN GEN_TAC
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
5603 THEN EQ_TAC
5604 ;
5605
5606
5607 RESA_TAC
5608 ;
5609
5610 REPLICATE_TAC (47-40) (POP_ASSUM MP_TAC)
5611 THEN ARITH_TAC
5612 ;
5613
5614
5615
5616 MP_TAC(ARITH_RULE`3<=k' ==>SUC (k' - 1) =k'/\ k'-1<k'`)
5617 THEN RESA_TAC;
5618
5619
5620
5621 RESA_TAC
5622 THEN MP_TAC(ARITH_RULE`x<k' /\ 3<= k' ==> x< k'-1 \/ (x=k'-1)`)
5623 THEN RESA_TAC
5624 THEN POP_ASSUM (fun th-> 
5625 POP_ASSUM MP_TAC
5626 THEN REWRITE_TAC[th]
5627 THEN RESA_TAC)
5628 ;
5629
5630
5631
5632 SUBGOAL_THEN`FINITE
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
5635 ;
5636
5637
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]
5641 THEN SET_TAC[];
5642
5643
5644
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 -
5646        dist
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)}
5651 ` ASSUME_TAC
5652 ;
5653
5654
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]
5658 THEN ARITH_TAC;
5659
5660
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
5663 ;
5664
5665
5666 REWRITE_TAC[INTER;SET_RULE`A={}<=> ~(?a. a IN A)`;IN_ELIM_THM;IN_SING]
5667 THEN ARITH_TAC;
5668
5669
5670
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)}`
5673 ASSUME_TAC;
5674
5675
5676 REWRITE_TAC[UNION;IN_SING;IN_ELIM_THM;EXTENSION]
5677 THEN GEN_TAC
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
5682 THEN EQ_TAC
5683 ;
5684
5685
5686 RESA_TAC
5687 ;
5688
5689 REPLICATE_TAC (47-40) (POP_ASSUM MP_TAC)
5690 THEN ARITH_TAC
5691 ;
5692
5693
5694
5695 MP_TAC(ARITH_RULE`3<=k'' ==>SUC (k'' - 1) =k''/\ k''-1<k''`)
5696 THEN RESA_TAC;
5697
5698
5699
5700 RESA_TAC
5701 THEN MP_TAC(ARITH_RULE`x<k'' /\ 3<= k'' ==> x< k''-1 \/ (x=k''-1)`)
5702 THEN RESA_TAC
5703 THEN POP_ASSUM (fun th-> 
5704 POP_ASSUM MP_TAC
5705 THEN REWRITE_TAC[th]
5706 THEN RESA_TAC)
5707 ;
5708
5709
5710
5711 SUBGOAL_THEN`FINITE
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
5714 ;
5715
5716
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]
5720 THEN SET_TAC[];
5721
5722
5723
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 -
5725        dist
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)}
5731    (\i. cstab -
5732         dist
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)))
5735 = sum
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)}
5738    (\i. cstab -
5739         dist
5740         (vv (i ),
5741          vv (SUC i )))`ASSUME_TAC
5742 ;
5743
5744
5745
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;
5751
5752
5753 EXISTS_TAC`i:num`
5754 THEN ASM_REWRITE_TAC[]
5755 ;
5756
5757
5758
5759 REPEAT STRIP_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)`)
5766 THEN RESA_TAC
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];
5770
5771
5772
5773 EXISTS_TAC`x:num`
5774 THEN ASM_REWRITE_TAC[]
5775 ;
5776
5777
5778 POP_ASSUM MP_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`)
5785 THEN RESA_TAC
5786 THEN MRESA_TAC MOD_LT[`x:num`;`k':num`]
5787 THEN MRESA_TAC MOD_LT[`SUC x:num`;`k':num`]
5788 THEN ASM_TAC
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`]
5800 ;
5801
5802
5803
5804
5805 SUBGOAL_THEN`sum
5806    {i | i < scs_k_v39 s'' - 1  /\ scs_J_v39 s'' i (SUC i)}
5807    (\i. cstab -
5808         dist
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)))
5811 = sum
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)}
5814    (\i. cstab -
5815         dist
5816         (vv (i ),
5817          vv (SUC i )))`ASSUME_TAC
5818 ;
5819
5820
5821
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;
5827
5828
5829 EXISTS_TAC`i:num`
5830 THEN ASM_REWRITE_TAC[]
5831 ;
5832
5833
5834
5835 REPEAT STRIP_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)`)
5842 THEN RESA_TAC
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];
5846
5847
5848
5849 EXISTS_TAC`x:num`
5850 THEN ASM_REWRITE_TAC[]
5851 ;
5852
5853
5854 POP_ASSUM MP_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`)
5861 THEN RESA_TAC
5862 THEN MRESA_TAC MOD_LT[`x:num`;`k'':num`]
5863 THEN MRESA_TAC MOD_LT[`SUC x:num`;`k'':num`]
5864 THEN ASM_TAC
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`]
5876 ;
5877
5878
5879
5880 ASM_REWRITE_TAC[
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`)
5884 THEN STRIP_TAC;
5885
5886 EXPAND_TAC "s'"
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`]
5890 ;
5891
5892
5893
5894 STRIP_TAC;
5895
5896
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;
5899
5900
5901
5902 MP_TAC(SET_RULE`is_ear_v39 s' \/ ~(is_ear_v39 s')`)
5903 THEN RESA_TAC
5904 THEN REAL_ARITH_TAC;
5905
5906
5907  SUBGOAL_THEN`-- &1<= if is_ear_v39 s'' then &1 else -- &1` ASSUME_TAC;
5908
5909
5910
5911 MP_TAC(SET_RULE`is_ear_v39 s'' \/ ~(is_ear_v39 s'')`)
5912 THEN RESA_TAC
5913 THEN REAL_ARITH_TAC;
5914
5915
5916
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
5919
5920 ;
5921
5922
5923 MATCH_MP_TAC SUM_POS_LE
5924 THEN ASM_REWRITE_TAC[]
5925 THEN STRIP_TAC;
5926
5927
5928
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`]
5932 THEN GEN_TAC
5933 THEN RESA_TAC
5934 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)`)
5935 THEN RESA_TAC
5936 THEN MRESA_TAC DIVISION[`i + p MOD k`;`k:num`]
5937 THEN POP_ASSUM MP_TAC
5938 THEN ARITH_TAC;
5939
5940
5941
5942 REWRITE_TAC[IN_ELIM_THM]
5943 THEN REPEAT RESA_TAC
5944 THEN ASM_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
5956 THEN REAL_ARITH_TAC
5957 ;
5958
5959
5960
5961
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
5964
5965 ;
5966
5967
5968 MATCH_MP_TAC SUM_POS_LE
5969 THEN ASM_REWRITE_TAC[]
5970 THEN STRIP_TAC;
5971
5972
5973
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`]
5977 THEN GEN_TAC
5978 THEN RESA_TAC
5979 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)`)
5980 THEN RESA_TAC
5981 THEN MRESA_TAC DIVISION[`i + q MOD k`;`k:num`]
5982 THEN POP_ASSUM MP_TAC
5983 THEN ARITH_TAC;
5984
5985
5986
5987 REWRITE_TAC[IN_ELIM_THM]
5988 THEN REPEAT RESA_TAC
5989 THEN ASM_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
6001 THEN REAL_ARITH_TAC
6002 ;
6003
6004
6005
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
6012 ;
6013
6014
6015
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`]
6019 THEN GEN_TAC
6020 THEN RESA_TAC
6021 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)`)
6022 THEN RESA_TAC
6023 THEN MRESA_TAC DIVISION[`i + q MOD k`;`k:num`]
6024 THEN POP_ASSUM MP_TAC
6025 THEN ARITH_TAC;
6026
6027
6028
6029 SUBGOAL_THEN`FINITE
6030       {(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}`ASSUME_TAC
6031 ;
6032
6033
6034
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`]
6038 THEN GEN_TAC
6039 THEN RESA_TAC
6040 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)`)
6041 THEN RESA_TAC
6042 THEN MRESA_TAC DIVISION[`i + q MOD k`;`k:num`]
6043 THEN POP_ASSUM MP_TAC
6044 THEN ARITH_TAC;
6045
6046
6047 SUBGOAL_THEN`&0 <=
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
6054 ;
6055
6056
6057 SUBGOAL_THEN`(!i. scs_b_v39 s i (SUC i) <= cstab)`ASSUME_TAC;
6058
6059
6060
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[];
6065
6066
6067
6068
6069
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->
6075 ASM_TAC
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
6081 ;
6082
6083
6084 POP_ASSUM MP_TAC
6085 THEN REWRITE_TAC[INTER;IN_ELIM_THM]
6086 THEN SET_TAC[];
6087
6088
6089
6090
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
6095 ;
6096
6097
6098
6099 REWRITE_TAC[UNION;IN_ELIM_THM;SUBSET]
6100 THEN REPEAT RESA_TAC
6101 ;
6102
6103
6104
6105
6106 MP_TAC(ARITH_RULE`3<k==> ~(k=0)`)
6107 THEN RESA_TAC
6108 THEN MRESA_TAC DIVISION[`i + p MOD k`;`k:num`]
6109 ;
6110
6111
6112
6113
6114
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`]
6118 ;
6119
6120
6121
6122
6123 MP_TAC(ARITH_RULE`3<k==> ~(k=0)`)
6124 THEN RESA_TAC
6125 THEN MRESA_TAC DIVISION[`i + q MOD k`;`k:num`]
6126 ;
6127
6128
6129
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`];
6134
6135
6136
6137 SUBGOAL_THEN`FINITE {i | i < k /\ scs_J_v39 s i (SUC i)}` ASSUME_TAC
6138 ;
6139
6140
6141 MATCH_MP_TAC FINITE_SUBSET
6142 THEN EXISTS_TAC`0..k`
6143 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
6144 THEN ARITH_TAC;
6145
6146
6147
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[]
6153 THEN STRIP_TAC;
6154
6155
6156
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`]
6160 THEN ARITH_TAC;
6161
6162
6163
6164
6165 REWRITE_TAC[IN_ELIM_THM;DIFF]
6166 THEN REPEAT RESA_TAC
6167 THEN ASM_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;
6180
6181
6182
6183
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[]
6186 ;
6187
6188
6189
6190
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]
6199 THEN ASSUME_TAC th)
6200 THEN REWRITE_TAC[]
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]
6205 THEN ASSUME_TAC th)
6206 THEN RESA_TAC
6207 THEN SUBGOAL_THEN`scs_k_v39 s'=k'`ASSUME_TAC
6208 ;
6209
6210
6211
6212
6213 EXPAND_TAC"s'"
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`]
6217 ;
6218
6219
6220
6221 SUBGOAL_THEN`scs_k_v39 s''=k''`ASSUME_TAC
6222 ;
6223
6224
6225
6226
6227 EXPAND_TAC"s'"
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`]
6231 ;
6232
6233
6234 MP_TAC(ARITH_RULE`3<=k'/\ 3<=k'' ==> SUC(k'-1)=k' /\ SUC (k''-1)=k''`)
6235 THEN RESA_TAC
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)))`)
6237 THEN RESA_TAC;
6238
6239
6240
6241
6242 ASM_TAC
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]
6253 THEN ASSUME_TAC 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]
6259 THEN ASSUME_TAC th)
6260 THEN RESA_TAC
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;
6265
6266
6267
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[];
6272
6273
6274
6275
6276
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->
6281 ASM_TAC
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
6287 THEN MP_TAC th
6288 THEN RESA_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]
6294 THEN ASSUME_TAC 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]
6300 THEN ASSUME_TAC th)
6301 THEN ASM_REWRITE_TAC[REAL_ARITH`a<=b+c<=> a<= c+b`]
6302 THEN STRIP_TAC
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
6308 THEN MP_TAC th)
6309 THEN RESA_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''`)
6312 THEN RESA_TAC
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)`]
6319 THEN ASM_TAC
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)`)
6323 THEN RESA_TAC
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
6327 ;
6328
6329
6330
6331 MP_TAC(VECTOR_ARITH`vv (q MOD k) - vv (p MOD k) = --(vv (p MOD k) - (vv:num->real^3) (q MOD k))`)
6332 THEN STRIP_TAC
6333 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
6334 THEN REWRITE_TAC[NORM_NEG];
6335
6336
6337
6338 ASM_REWRITE_TAC[ARITH_RULE`a*b+c*b=(a+c)*b`]
6339 THEN MATCH_MP_TAC REAL_LE_MUL
6340 THEN STRIP_TAC;
6341
6342
6343
6344 REPLICATE_TAC (124-92)(POP_ASSUM MP_TAC)
6345 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6346 THEN MP_TAC th 
6347 THEN RESA_TAC)
6348 THEN REAL_ARITH_TAC
6349 ;
6350
6351
6352
6353
6354 REPLICATE_TAC (124-92)(POP_ASSUM MP_TAC)
6355 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6356 THEN MP_TAC th 
6357 THEN RESA_TAC)
6358 ;
6359
6360
6361 POP_ASSUM MP_TAC
6362 THEN ASM_REWRITE_TAC[is_ear_v39]
6363 THEN STRIP_TAC
6364 THEN SUBGOAL_THEN`k'-1 IN {i | i < 3 /\ scs_J_v39 s' i (SUC i)}`ASSUME_TAC;
6365
6366
6367
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
6371 THEN MP_TAC th
6372 THEN ASM_REWRITE_TAC[]);
6373
6374
6375
6376 POP_ASSUM MP_TAC
6377 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
6378 THEN STRIP_TAC
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
6383 ;
6384
6385
6386 EXPAND_TAC"s'"
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]
6388 ;
6389
6390
6391 MP_TAC QKNVMLB1
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`]
6396 THEN STRIP_TAC
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
6403 THEN MP_TAC th
6404 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`])
6405 THEN RESA_TAC
6406 THEN REAL_ARITH_TAC;
6407
6408
6409
6410
6411
6412
6413 POP_ASSUM MP_TAC
6414 THEN ASM_REWRITE_TAC[is_ear_v39]
6415 THEN STRIP_TAC
6416 THEN SUBGOAL_THEN`k''-1 IN {i | i < 3 /\ scs_J_v39 s'' i (SUC i)}`ASSUME_TAC;
6417
6418
6419
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
6423 THEN MP_TAC th
6424 THEN ASM_REWRITE_TAC[]);
6425
6426
6427
6428 POP_ASSUM MP_TAC
6429 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
6430 THEN STRIP_TAC
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
6435 ;
6436
6437
6438 EXPAND_TAC"s''"
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]
6440 ;
6441
6442
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
6448 THEN MP_TAC th
6449 THEN RESA_TAC)
6450 THEN REWRITE_TAC[REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
6451 THEN STRIP_TAC
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
6458 THEN MP_TAC th
6459 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`])
6460 THEN RESA_TAC
6461 THEN REAL_ARITH_TAC;
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474 MP_TAC(VECTOR_ARITH`vv (q MOD k) - vv (p MOD k) = --(vv (p MOD k) - (vv:num->real^3) (q MOD k))`)
6475 THEN STRIP_TAC
6476 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
6477 THEN REWRITE_TAC[NORM_NEG];
6478
6479
6480
6481 ASM_REWRITE_TAC[ARITH_RULE`a*b+c*b=(a+c)*b`]
6482 THEN MATCH_MP_TAC REAL_LE_MUL
6483 THEN STRIP_TAC;
6484
6485
6486
6487 REPLICATE_TAC (124-92)(POP_ASSUM MP_TAC)
6488 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6489 THEN MP_TAC th 
6490 THEN RESA_TAC)
6491 THEN REAL_ARITH_TAC
6492 ;
6493
6494
6495
6496
6497 REPLICATE_TAC (124-92)(POP_ASSUM MP_TAC)
6498 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
6499 THEN MP_TAC th 
6500 THEN RESA_TAC)
6501 ;
6502
6503
6504 POP_ASSUM MP_TAC
6505 THEN ASM_REWRITE_TAC[is_ear_v39]
6506 THEN STRIP_TAC
6507 THEN SUBGOAL_THEN`k'-1 IN {i | i < 3 /\ scs_J_v39 s' i (SUC i)}`ASSUME_TAC;
6508
6509
6510
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
6514 THEN MP_TAC th
6515 THEN ASM_REWRITE_TAC[]);
6516
6517
6518
6519 POP_ASSUM MP_TAC
6520 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
6521 THEN STRIP_TAC
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
6526 ;
6527
6528
6529 EXPAND_TAC"s'"
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]
6531 ;
6532
6533
6534 MP_TAC QKNVMLB1
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`]
6539 THEN STRIP_TAC
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
6546 THEN MP_TAC th
6547 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`])
6548 THEN RESA_TAC
6549 THEN REAL_ARITH_TAC;
6550
6551
6552
6553
6554
6555
6556 POP_ASSUM MP_TAC
6557 THEN ASM_REWRITE_TAC[is_ear_v39]
6558 THEN STRIP_TAC
6559 THEN SUBGOAL_THEN`k''-1 IN {i | i < 3 /\ scs_J_v39 s'' i (SUC i)}`ASSUME_TAC;
6560
6561
6562
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
6566 THEN MP_TAC th
6567 THEN ASM_REWRITE_TAC[]);
6568
6569
6570
6571 POP_ASSUM MP_TAC
6572 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
6573 THEN STRIP_TAC
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
6578 ;
6579
6580
6581 EXPAND_TAC"s''"
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]
6583 ;
6584
6585
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
6591 THEN MP_TAC th
6592 THEN RESA_TAC)
6593 THEN REWRITE_TAC[REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
6594 THEN STRIP_TAC
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
6601 THEN MP_TAC th
6602 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`])
6603 THEN RESA_TAC
6604 THEN REAL_ARITH_TAC;
6605
6606
6607
6608
6609
6610
6611 ASM_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]
6622 THEN ASSUME_TAC 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]
6628 THEN ASSUME_TAC th)
6629 THEN RESA_TAC
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;
6634
6635
6636
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[];
6641
6642
6643
6644
6645
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->
6650 ASM_TAC
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
6656 THEN MP_TAC th
6657 THEN RESA_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]
6663 THEN ASSUME_TAC 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]
6669 THEN ASSUME_TAC th)
6670 THEN ASM_REWRITE_TAC[REAL_ARITH`a<=b+c<=> a<= c+b`]
6671 THEN STRIP_TAC
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
6677 THEN MP_TAC th)
6678 THEN RESA_TAC
6679 THEN REWRITE_TAC[SET_RULE`{a|F}={}`;SUM_SING;SUM_CLAUSES]
6680 THEN REAL_ARITH_TAC;
6681
6682
6683
6684 (********************************)
6685
6686
6687
6688
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)}
6693 ` ASSUME_TAC
6694 ;
6695
6696
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]
6700 THEN ARITH_TAC;
6701
6702
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
6705 ;
6706
6707
6708 REWRITE_TAC[INTER;SET_RULE`A={}<=> ~(?a. a IN A)`;IN_ELIM_THM;IN_SING]
6709 THEN ARITH_TAC;
6710
6711
6712
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)}`
6715 ASSUME_TAC;
6716
6717
6718 REWRITE_TAC[UNION;IN_SING;IN_ELIM_THM;EXTENSION]
6719 THEN GEN_TAC
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
6724 THEN EQ_TAC
6725 ;
6726
6727
6728 RESA_TAC
6729 ;
6730
6731 REPLICATE_TAC (47-40) (POP_ASSUM MP_TAC)
6732 THEN ARITH_TAC
6733 ;
6734
6735
6736
6737 MP_TAC(ARITH_RULE`3<=k' ==>SUC (k' - 1) =k'/\ k'-1<k'`)
6738 THEN RESA_TAC;
6739
6740
6741
6742 RESA_TAC
6743 THEN MP_TAC(ARITH_RULE`x<k' /\ 3<= k' ==> x< k'-1 \/ (x=k'-1)`)
6744 THEN RESA_TAC
6745 THEN POP_ASSUM (fun th-> 
6746 POP_ASSUM MP_TAC
6747 THEN REWRITE_TAC[th]
6748 THEN RESA_TAC)
6749 ;
6750
6751
6752
6753 SUBGOAL_THEN`FINITE
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
6756 ;
6757
6758
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]
6762 THEN SET_TAC[];
6763
6764
6765
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 -
6767        dist
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)}
6772 ` ASSUME_TAC
6773 ;
6774
6775
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]
6779 THEN ARITH_TAC;
6780
6781
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
6784 ;
6785
6786
6787 REWRITE_TAC[INTER;SET_RULE`A={}<=> ~(?a. a IN A)`;IN_ELIM_THM;IN_SING]
6788 THEN ARITH_TAC;
6789
6790
6791
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)}`
6794 ASSUME_TAC;
6795
6796
6797 REWRITE_TAC[UNION;IN_SING;IN_ELIM_THM;EXTENSION]
6798 THEN GEN_TAC
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
6803 THEN EQ_TAC
6804 ;
6805
6806
6807 RESA_TAC
6808 ;
6809
6810 REPLICATE_TAC (47-40) (POP_ASSUM MP_TAC)
6811 THEN ARITH_TAC
6812 ;
6813
6814
6815
6816 MP_TAC(ARITH_RULE`3<=k'' ==>SUC (k'' - 1) =k''/\ k''-1<k''`)
6817 THEN RESA_TAC;
6818
6819
6820
6821 RESA_TAC
6822 THEN MP_TAC(ARITH_RULE`x<k'' /\ 3<= k'' ==> x< k''-1 \/ (x=k''-1)`)
6823 THEN RESA_TAC
6824 THEN POP_ASSUM (fun th-> 
6825 POP_ASSUM MP_TAC
6826 THEN REWRITE_TAC[th]
6827 THEN RESA_TAC)
6828 ;
6829
6830
6831
6832 SUBGOAL_THEN`FINITE
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
6835 ;
6836
6837
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]
6841 THEN SET_TAC[];
6842
6843
6844
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 -
6846        dist
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)}
6852    (\i. cstab -
6853         dist
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)))
6856 = sum
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)}
6859    (\i. cstab -
6860         dist
6861         (vv (i ),
6862          vv (SUC i )))`ASSUME_TAC
6863 ;
6864
6865
6866
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;
6872
6873
6874 EXISTS_TAC`i:num`
6875 THEN ASM_REWRITE_TAC[]
6876 ;
6877
6878
6879
6880 REPEAT STRIP_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)`)
6887 THEN RESA_TAC
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];
6891
6892
6893
6894 EXISTS_TAC`x:num`
6895 THEN ASM_REWRITE_TAC[]
6896 ;
6897
6898
6899 POP_ASSUM MP_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`)
6906 THEN RESA_TAC
6907 THEN MRESA_TAC MOD_LT[`x:num`;`k':num`]
6908 THEN MRESA_TAC MOD_LT[`SUC x:num`;`k':num`]
6909 THEN ASM_TAC
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`]
6921 ;
6922
6923
6924
6925
6926 SUBGOAL_THEN`sum
6927    {i | i < scs_k_v39 s'' - 1  /\ scs_J_v39 s'' i (SUC i)}
6928    (\i. cstab -
6929         dist
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)))
6932 = sum
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)}
6935    (\i. cstab -
6936         dist
6937         (vv (i ),
6938          vv (SUC i )))`ASSUME_TAC
6939 ;
6940
6941
6942
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;
6948
6949
6950 EXISTS_TAC`i:num`
6951 THEN ASM_REWRITE_TAC[]
6952 ;
6953
6954
6955
6956 REPEAT STRIP_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)`)
6963 THEN RESA_TAC
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];
6967
6968
6969
6970 EXISTS_TAC`x:num`
6971 THEN ASM_REWRITE_TAC[]
6972 ;
6973
6974
6975 POP_ASSUM MP_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`)
6982 THEN RESA_TAC
6983 THEN MRESA_TAC MOD_LT[`x:num`;`k'':num`]
6984 THEN MRESA_TAC MOD_LT[`SUC x:num`;`k'':num`]
6985 THEN ASM_TAC
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`]
6997 ;
6998
6999
7000
7001 ASM_REWRITE_TAC[
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`)
7005 THEN STRIP_TAC;
7006
7007 EXPAND_TAC "s'"
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`]
7011 ;
7012
7013
7014
7015 STRIP_TAC;
7016
7017
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;
7020
7021
7022
7023 MP_TAC(SET_RULE`is_ear_v39 s' \/ ~(is_ear_v39 s')`)
7024 THEN RESA_TAC
7025 THEN REAL_ARITH_TAC;
7026
7027
7028  SUBGOAL_THEN`-- &1<= if is_ear_v39 s'' then &1 else -- &1` ASSUME_TAC;
7029
7030
7031
7032 MP_TAC(SET_RULE`is_ear_v39 s'' \/ ~(is_ear_v39 s'')`)
7033 THEN RESA_TAC
7034 THEN REAL_ARITH_TAC;
7035
7036
7037
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
7040
7041 ;
7042
7043
7044 MATCH_MP_TAC SUM_POS_LE
7045 THEN ASM_REWRITE_TAC[]
7046 THEN STRIP_TAC;
7047
7048
7049
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`]
7053 THEN GEN_TAC
7054 THEN RESA_TAC
7055 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)`)
7056 THEN RESA_TAC
7057 THEN MRESA_TAC DIVISION[`i + p MOD k`;`k:num`]
7058 THEN POP_ASSUM MP_TAC
7059 THEN ARITH_TAC;
7060
7061
7062
7063 REWRITE_TAC[IN_ELIM_THM]
7064 THEN REPEAT RESA_TAC
7065 THEN ASM_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
7077 THEN REAL_ARITH_TAC
7078 ;
7079
7080
7081
7082
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
7085
7086 ;
7087
7088
7089 MATCH_MP_TAC SUM_POS_LE
7090 THEN ASM_REWRITE_TAC[]
7091 THEN STRIP_TAC;
7092
7093
7094
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`]
7098 THEN GEN_TAC
7099 THEN RESA_TAC
7100 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)`)
7101 THEN RESA_TAC
7102 THEN MRESA_TAC DIVISION[`i + q MOD k`;`k:num`]
7103 THEN POP_ASSUM MP_TAC
7104 THEN ARITH_TAC;
7105
7106
7107
7108 REWRITE_TAC[IN_ELIM_THM]
7109 THEN REPEAT RESA_TAC
7110 THEN ASM_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
7122 THEN REAL_ARITH_TAC
7123 ;
7124
7125
7126
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
7133 ;
7134
7135
7136
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`]
7140 THEN GEN_TAC
7141 THEN RESA_TAC
7142 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)`)
7143 THEN RESA_TAC
7144 THEN MRESA_TAC DIVISION[`i + q MOD k`;`k:num`]
7145 THEN POP_ASSUM MP_TAC
7146 THEN ARITH_TAC;
7147
7148
7149
7150 SUBGOAL_THEN`FINITE
7151       {(i + q MOD k) MOD k | i < scs_k_v39 s'' - 1 /\ scs_J_v39 s'' i (SUC i)}`ASSUME_TAC
7152 ;
7153
7154
7155
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`]
7159 THEN GEN_TAC
7160 THEN RESA_TAC
7161 THEN MP_TAC(ARITH_RULE`3<=k ==> ~(k=0)`)
7162 THEN RESA_TAC
7163 THEN MRESA_TAC DIVISION[`i + q MOD k`;`k:num`]
7164 THEN POP_ASSUM MP_TAC
7165 THEN ARITH_TAC;
7166
7167
7168 SUBGOAL_THEN`&0 <=
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
7175 ;
7176
7177
7178 SUBGOAL_THEN`(!i. scs_b_v39 s i (SUC i) <= cstab)`ASSUME_TAC;
7179
7180
7181
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[];
7186
7187
7188
7189
7190
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->
7196 ASM_TAC
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
7202 ;
7203
7204
7205 POP_ASSUM MP_TAC
7206 THEN REWRITE_TAC[INTER;IN_ELIM_THM]
7207 THEN SET_TAC[];
7208
7209
7210
7211
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
7216 ;
7217
7218
7219
7220 REWRITE_TAC[UNION;IN_ELIM_THM;SUBSET]
7221 THEN REPEAT RESA_TAC
7222 ;
7223
7224
7225
7226
7227 MP_TAC(ARITH_RULE`3<k==> ~(k=0)`)
7228 THEN RESA_TAC
7229 THEN MRESA_TAC DIVISION[`i + p MOD k`;`k:num`]
7230 ;
7231
7232
7233
7234
7235
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`]
7239 ;
7240
7241
7242
7243
7244 MP_TAC(ARITH_RULE`3<k==> ~(k=0)`)
7245 THEN RESA_TAC
7246 THEN MRESA_TAC DIVISION[`i + q MOD k`;`k:num`]
7247 ;
7248
7249
7250
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`];
7255
7256
7257
7258 SUBGOAL_THEN`FINITE {i | i < k /\ scs_J_v39 s i (SUC i)}` ASSUME_TAC
7259 ;
7260
7261
7262 MATCH_MP_TAC FINITE_SUBSET
7263 THEN EXISTS_TAC`0..k`
7264 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_ELIM_THM;IN_NUMSEG]
7265 THEN ARITH_TAC;
7266
7267
7268
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[]
7274 THEN STRIP_TAC;
7275
7276
7277
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`]
7281 THEN ARITH_TAC;
7282
7283
7284
7285
7286 REWRITE_TAC[IN_ELIM_THM;DIFF]
7287 THEN REPEAT RESA_TAC
7288 THEN ASM_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;
7301
7302
7303
7304
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[]
7307 ;
7308
7309
7310
7311
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]
7320 THEN ASSUME_TAC th)
7321 THEN REWRITE_TAC[]
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]
7326 THEN ASSUME_TAC th)
7327 THEN RESA_TAC
7328 THEN SUBGOAL_THEN`scs_k_v39 s'=k'`ASSUME_TAC
7329 ;
7330
7331
7332
7333
7334 EXPAND_TAC"s'"
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`]
7338 ;
7339
7340
7341
7342 SUBGOAL_THEN`scs_k_v39 s''=k''`ASSUME_TAC
7343 ;
7344
7345
7346
7347
7348 EXPAND_TAC"s'"
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`]
7352 ;
7353
7354
7355 MP_TAC(ARITH_RULE`3<=k'/\ 3<=k'' ==> SUC(k'-1)=k' /\ SUC (k''-1)=k''`)
7356 THEN RESA_TAC
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)))`)
7358 THEN RESA_TAC;
7359
7360
7361
7362
7363 ASM_TAC
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]
7374 THEN ASSUME_TAC 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]
7380 THEN ASSUME_TAC th)
7381 THEN RESA_TAC
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;
7386
7387
7388
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[];
7393
7394
7395
7396
7397
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->
7402 ASM_TAC
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
7408 THEN MP_TAC th
7409 THEN RESA_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]
7415 THEN ASSUME_TAC 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]
7421 THEN ASSUME_TAC th)
7422 THEN ASM_REWRITE_TAC[REAL_ARITH`a<=b+c<=> a<= c+b`]
7423 THEN STRIP_TAC
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
7429 THEN MP_TAC th)
7430 THEN RESA_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''`)
7433 THEN RESA_TAC
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)`]
7440 THEN ASM_TAC
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)`)
7444 THEN RESA_TAC
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
7448 ;
7449
7450
7451
7452 MP_TAC(VECTOR_ARITH`vv (q MOD k) - vv (p MOD k) = --(vv (p MOD k) - (vv:num->real^3) (q MOD k))`)
7453 THEN STRIP_TAC
7454 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
7455 THEN REWRITE_TAC[NORM_NEG];
7456
7457
7458
7459 ASM_REWRITE_TAC[ARITH_RULE`a*b+c*b=(a+c)*b`]
7460 THEN MATCH_MP_TAC REAL_LE_MUL
7461 THEN STRIP_TAC;
7462
7463
7464
7465 REPLICATE_TAC (124-92)(POP_ASSUM MP_TAC)
7466 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7467 THEN MP_TAC th 
7468 THEN RESA_TAC)
7469 THEN REAL_ARITH_TAC
7470 ;
7471
7472
7473
7474
7475 REPLICATE_TAC (124-92)(POP_ASSUM MP_TAC)
7476 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7477 THEN MP_TAC th 
7478 THEN RESA_TAC)
7479 ;
7480
7481
7482 POP_ASSUM MP_TAC
7483 THEN ASM_REWRITE_TAC[is_ear_v39]
7484 THEN STRIP_TAC
7485 THEN SUBGOAL_THEN`k'-1 IN {i | i < 3 /\ scs_J_v39 s' i (SUC i)}`ASSUME_TAC;
7486
7487
7488
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
7492 THEN MP_TAC th
7493 THEN ASM_REWRITE_TAC[]);
7494
7495
7496
7497 POP_ASSUM MP_TAC
7498 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
7499 THEN STRIP_TAC
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
7504 ;
7505
7506
7507 EXPAND_TAC"s'"
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]
7509 ;
7510
7511
7512 MP_TAC QKNVMLB1
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`]
7517 THEN STRIP_TAC
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
7524 THEN MP_TAC th
7525 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`])
7526 THEN RESA_TAC
7527 THEN REAL_ARITH_TAC;
7528
7529
7530
7531
7532
7533
7534 POP_ASSUM MP_TAC
7535 THEN ASM_REWRITE_TAC[is_ear_v39]
7536 THEN STRIP_TAC
7537 THEN SUBGOAL_THEN`k''-1 IN {i | i < 3 /\ scs_J_v39 s'' i (SUC i)}`ASSUME_TAC;
7538
7539
7540
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
7544 THEN MP_TAC th
7545 THEN ASM_REWRITE_TAC[]);
7546
7547
7548
7549 POP_ASSUM MP_TAC
7550 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
7551 THEN STRIP_TAC
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
7556 ;
7557
7558
7559 EXPAND_TAC"s''"
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]
7561 ;
7562
7563
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
7569 THEN MP_TAC th
7570 THEN RESA_TAC)
7571 THEN REWRITE_TAC[REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
7572 THEN STRIP_TAC
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
7579 THEN MP_TAC th
7580 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`])
7581 THEN RESA_TAC
7582 THEN REAL_ARITH_TAC;
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595 MP_TAC(VECTOR_ARITH`vv (q MOD k) - vv (p MOD k) = --(vv (p MOD k) - (vv:num->real^3) (q MOD k))`)
7596 THEN STRIP_TAC
7597 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
7598 THEN REWRITE_TAC[NORM_NEG];
7599
7600
7601
7602 ASM_REWRITE_TAC[ARITH_RULE`a*b+c*b=(a+c)*b`]
7603 THEN MATCH_MP_TAC REAL_LE_MUL
7604 THEN STRIP_TAC;
7605
7606
7607
7608 REPLICATE_TAC (124-92)(POP_ASSUM MP_TAC)
7609 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7610 THEN MP_TAC th 
7611 THEN RESA_TAC)
7612 THEN REAL_ARITH_TAC
7613 ;
7614
7615
7616
7617
7618 REPLICATE_TAC (124-92)(POP_ASSUM MP_TAC)
7619 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7620 THEN MP_TAC th 
7621 THEN RESA_TAC)
7622 ;
7623
7624
7625 POP_ASSUM MP_TAC
7626 THEN ASM_REWRITE_TAC[is_ear_v39]
7627 THEN STRIP_TAC
7628 THEN SUBGOAL_THEN`k'-1 IN {i | i < 3 /\ scs_J_v39 s' i (SUC i)}`ASSUME_TAC;
7629
7630
7631
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
7635 THEN MP_TAC th
7636 THEN ASM_REWRITE_TAC[]);
7637
7638
7639
7640 POP_ASSUM MP_TAC
7641 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
7642 THEN STRIP_TAC
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
7647 ;
7648
7649
7650 EXPAND_TAC"s'"
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]
7652 ;
7653
7654
7655 MP_TAC QKNVMLB1
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`]
7660 THEN STRIP_TAC
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
7667 THEN MP_TAC th
7668 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`])
7669 THEN RESA_TAC
7670 THEN REAL_ARITH_TAC;
7671
7672
7673
7674
7675
7676
7677 POP_ASSUM MP_TAC
7678 THEN ASM_REWRITE_TAC[is_ear_v39]
7679 THEN STRIP_TAC
7680 THEN SUBGOAL_THEN`k''-1 IN {i | i < 3 /\ scs_J_v39 s'' i (SUC i)}`ASSUME_TAC;
7681
7682
7683
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
7687 THEN MP_TAC th
7688 THEN ASM_REWRITE_TAC[]);
7689
7690
7691
7692 POP_ASSUM MP_TAC
7693 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
7694 THEN STRIP_TAC
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
7699 ;
7700
7701
7702 EXPAND_TAC"s''"
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]
7704 ;
7705
7706
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
7712 THEN MP_TAC th
7713 THEN RESA_TAC)
7714 THEN REWRITE_TAC[REAL_ARITH`#0.11 < #0.9`;ARITH_RULE`3<=3`]
7715 THEN STRIP_TAC
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
7722 THEN MP_TAC th
7723 THEN ASM_REWRITE_TAC[ARITH_RULE`3-1=2`])
7724 THEN RESA_TAC
7725 THEN REAL_ARITH_TAC;
7726
7727
7728
7729
7730
7731
7732 ASM_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]
7743 THEN ASSUME_TAC 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]
7749 THEN ASSUME_TAC th)
7750 THEN RESA_TAC
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;
7755
7756
7757
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[];
7762
7763
7764
7765
7766
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->
7771 ASM_TAC
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
7777 THEN MP_TAC th
7778 THEN RESA_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]
7784 THEN ASSUME_TAC 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]
7790 THEN ASSUME_TAC th)
7791 THEN ASM_REWRITE_TAC[REAL_ARITH`a<=b+c<=> a<= c+b`]
7792 THEN STRIP_TAC
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
7798 THEN MP_TAC th)
7799 THEN RESA_TAC
7800 THEN REWRITE_TAC[SET_RULE`{a|F}={}`;SUM_SING;SUM_CLAUSES]
7801 THEN REAL_ARITH_TAC;
7802
7803
7804 ]);;
7805
7806
7807
7808
7809
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'' /\
7814  MMs_v39 s vv /\
7815         is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q /\
7816           is_scs_slice_v39 s s' s'' p q 
7817  ==>
7818 norm(vv (p MOD (scs_k_v39 s)) - vv (q MOD (scs_k_v39 s)))<= cstab`,
7819 [
7820
7821 STRIP_TAC
7822 THEN MP_TAC SCS_K_PRIME_CASE_3
7823 THEN REWRITE_TAC[taustar_v39;LET_DEF;LET_END_DEF;]
7824 THEN RESA_TAC
7825 THEN ABBREV_TAC`k=scs_k_v39 s`
7826 THEN MP_TAC(ARITH_RULE`3<k==> ~(k<=3)`)
7827 THEN RESA_TAC
7828 THEN MP_TAC SCS_K_LE_6
7829 THEN RESA_TAC
7830 THEN ASM_TAC
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
7835 THEN MP_TAC th
7836 THEN ASM_REWRITE_TAC[])
7837 THEN STRIP_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) )`)
7841 THEN RESA_TAC
7842 ;
7843
7844
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
7850 THEN MP_TAC th
7851 THEN ASM_REWRITE_TAC[])
7852 ;
7853
7854
7855 STRIP_TAC;
7856
7857
7858
7859 POP_ASSUM MP_TAC
7860 THEN ASM_REWRITE_TAC[is_ear_v39;is_scs_v39;periodic2]
7861 THEN STRIP_TAC
7862 THEN SUBGOAL_THEN`k'-1 IN {i | i < 3 /\ scs_J_v39 s' i (SUC i)}`ASSUME_TAC;
7863
7864
7865
7866
7867
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
7875 THEN MP_TAC th
7876 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`])
7877 ;
7878
7879
7880
7881 POP_ASSUM MP_TAC
7882 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
7883 THEN STRIP_TAC
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
7889 THEN MP_TAC th
7890 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`])
7891 THEN STRIP_TAC
7892 THEN SUBGOAL_THEN`d' = scs_d_v39 s' `ASSUME_TAC
7893 ;
7894
7895
7896
7897 EXPAND_TAC"s'"
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]
7899 ;
7900
7901
7902 MP_TAC QKNVMLB1
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`]
7904 THEN STRIP_TAC
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
7911 ;
7912
7913
7914
7915 MP_TAC(VECTOR_ARITH`vv (q MOD k) - vv (p MOD k) = --(vv (p MOD k) - (vv:num->real^3) (q MOD k))`)
7916 THEN STRIP_TAC
7917 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
7918 THEN REWRITE_TAC[NORM_NEG];
7919
7920
7921 RESA_TAC;
7922
7923
7924
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[]
7932 THEN ASSUME_TAC th)
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[]
7938 THEN ASSUME_TAC th)
7939 THEN STRIP_TAC
7940 THEN REPLICATE_TAC (51-48)(POP_ASSUM MP_TAC)
7941 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
7942 THEN MP_TAC th
7943 THEN ASM_REWRITE_TAC[is_ear_v39;is_scs_v39;periodic2]
7944 THEN STRIP_TAC)
7945 THEN SUBGOAL_THEN`k''-1 IN {i | i < 3 /\ scs_J_v39 s'' i (SUC i)}`ASSUME_TAC;
7946
7947
7948
7949
7950
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
7958 THEN MP_TAC th
7959 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`])
7960 ;
7961
7962
7963
7964
7965
7966 POP_ASSUM MP_TAC
7967 THEN ASM_REWRITE_TAC[IN_SING;ARITH_RULE`3-1=2`]
7968 THEN STRIP_TAC
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
7974 THEN MP_TAC th
7975 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`])
7976 THEN STRIP_TAC
7977 THEN SUBGOAL_THEN`d'' = scs_d_v39 s'' `ASSUME_TAC
7978 ;
7979
7980
7981
7982 EXPAND_TAC"s''"
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]
7984 ;
7985
7986
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]
7992 THEN MP_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`]
7999 ;
8000
8001
8002
8003
8004
8005 REPLICATE_TAC (52)(POP_ASSUM MP_TAC)
8006 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8007 THEN MP_TAC th
8008 THEN ASM_REWRITE_TAC[])
8009 ;
8010
8011
8012
8013
8014
8015
8016 REPLICATE_TAC (52-6)(POP_ASSUM MP_TAC)
8017 THEN  POP_ASSUM(fun th-> REPEAT STRIP_TAC
8018 THEN MP_TAC th
8019 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`])
8020 THEN STRIP_TAC
8021 THEN SUBGOAL_THEN`d' = scs_d_v39 s' `ASSUME_TAC
8022 ;
8023
8024
8025
8026 EXPAND_TAC"s'"
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]
8028 ;
8029
8030
8031 SUBGOAL_THEN` (q+1+k -p MOD k)MOD k =scs_k_v39 s'` ASSUME_TAC
8032 ;
8033
8034
8035 EXPAND_TAC"s'"
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[]
8038 ;
8039
8040
8041
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`]
8045 THEN STRIP_TAC
8046 THEN MP_TAC(ARITH_RULE`3<= k' /\ k'<k ==> 0<k' /\ ~(k=0) /\ k'-1<k'`)
8047 THEN RESA_TAC
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`]
8054 THEN STRIP_TAC
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
8058 THEN EXPAND_TAC"s'"
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
8064 THEN MP_TAC th
8065 THEN ASM_REWRITE_TAC[cstab])
8066 THEN REAL_ARITH_TAC;
8067
8068
8069
8070 REPLICATE_TAC (52-6)(POP_ASSUM MP_TAC)
8071 THEN  POP_ASSUM(fun th-> REPEAT STRIP_TAC
8072 THEN MP_TAC th
8073 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`])
8074 THEN STRIP_TAC
8075 THEN SUBGOAL_THEN`d' = scs_d_v39 s' `ASSUME_TAC
8076 ;
8077
8078
8079
8080 EXPAND_TAC"s'"
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]
8082 ;
8083
8084
8085 SUBGOAL_THEN` (q+1+k -p MOD k)MOD k =scs_k_v39 s'` ASSUME_TAC
8086 ;
8087
8088
8089 EXPAND_TAC"s'"
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[]
8092 ;
8093
8094
8095
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`]
8099 THEN STRIP_TAC
8100 THEN MP_TAC(ARITH_RULE`3<= k' /\ k'<k ==> 0<k' /\ ~(k=0) /\ k'-1<k'`)
8101 THEN RESA_TAC
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`]
8108 THEN STRIP_TAC
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
8112 THEN EXPAND_TAC"s'"
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
8118 THEN MP_TAC th
8119 THEN ASM_REWRITE_TAC[cstab])
8120 THEN REAL_ARITH_TAC;
8121
8122 ]);;
8123
8124
8125
8126
8127
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)/\
8134         BBs_v39 s vv 
8135 ==> 
8136 (!m. ITER m (rho_node1 FF) u= vv (m+p1))`,
8137 [
8138 STRIP_TAC
8139 THEN INDUCT_TAC;
8140
8141 ASM_REWRITE_TAC[ITER;ARITH_RULE`0+p=p`];
8142
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;
8145
8146 EXPAND_TAC"FF"
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)`];
8150
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
8156 THEN RESA_TAC
8157 THEN POP_ASSUM(fun th->  ASM_TAC
8158 THEN ASSUME_TAC th)
8159 THEN ASM_REWRITE_TAC[scs_diag;BBs_v39;LET_DEF;LET_END_DEF;convex_local_fan]
8160 THEN REPEAT RESA_TAC]);;
8161
8162
8163 let SUM_AZIM_EQ_ANGLE_LE4=prove_by_refinement(
8164 ` ~(scs_k_v39 s<=3)/\
8165  BBs_v39 s vv /\
8166         is_scs_v39 s /\
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
8171 ==>
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)
8176 `,
8177 [
8178 MRESA_TAC (GEN_ALL IN_IMAGE_VV)[`p MOD scs_k_v39 s`;`vv:num->real^3`]
8179 THEN ASM_TAC
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;
8183
8184 REPLICATE_TAC (30-2)(POP_ASSUM MP_TAC)
8185 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8186 THEN MP_TAC th)
8187 THEN ASM_REWRITE_TAC[];
8188
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`)
8192 THEN RESA_TAC
8193 THEN STRIP_TAC;
8194
8195 EXPAND_TAC"FF"
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`)
8208 THEN RESA_TAC
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`)
8223 THEN MP_TAC VV_INJ
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]
8225 THEN STRIP_TAC
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]
8231 THEN RESA_TAC;
8232
8233 REWRITE_TAC[IN_ELIM_THM;]
8234 THEN REPEAT STRIP_TAC;
8235
8236 EXPAND_TAC"FF"
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`];
8240
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;
8244
8245 EXPAND_TAC"V"
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)`];
8249
8250 REPLICATE_TAC (35-6)(POP_ASSUM MP_TAC)
8251 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
8252 THEN MP_TAC th)
8253 THEN ASM_REWRITE_TAC[]
8254 THEN STRIP_TAC
8255 THEN  MP_TAC Nkezbfc_local.CONVEX_LOFA_IMP_INANGLE_EQ_AZIM
8256 THEN RESA_TAC
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])]);;
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276 let V_SLICE_EQ_NUMSEG=prove_by_refinement(
8277 ` IMAGE (\i. (vv i,(vv:num->real^3) (SUC i))) (:num) = FF/\
8278 scs_k_v39 s=k /\
8279 scs_k_v39 s'=k' /\
8280 vv (p MOD k) =u
8281 /\ 
8282 scs_half_slice_v39 s p q d' mkj =s'/\
8283   MMs_v39 s vv /\
8284         is_scs_v39 s /\ scs_diag (scs_k_v39 s) p q /\
8285           is_scs_slice_v39 s s' s'' p q ==>
8286 {i | i < k /\
8287        ITER i (rho_node1 FF) u IN IMAGE (\i. vv (i MOD k' + p MOD k)) (:num)}
8288 ={i | i<k'}`,
8289 [
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;
8296
8297 EXPAND_TAC"s'"
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[];
8300
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]
8303 THEN GEN_TAC
8304 THEN EQ_TAC;
8305
8306 MP_TAC(ARITH_RULE`3 <= scs_k_v39 s ==> ~(scs_k_v39 s=0)`)
8307 THEN RESA_TAC
8308 THEN STRIP_TAC
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`]
8314 THEN MP_TAC VV_INJ
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]
8316 THEN STRIP_TAC
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)`)
8323 THEN RESA_TAC
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`)
8326 THEN RESA_TAC
8327 THEN MRESA_TAC MOD_LT[`x' MOD k':num`;`k:num`]
8328 THEN STRIP_TAC
8329 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
8330
8331 REPEAT STRIP_TAC;
8332
8333 POP_ASSUM MP_TAC
8334 THEN POP_ASSUM MP_TAC
8335 THEN ARITH_TAC;
8336
8337 EXISTS_TAC`x:num`
8338 THEN MRESA_TAC MOD_LT[`x:num`;`k':num`]
8339 THEN REWRITE_TAC[SET_RULE`(x:num)IN(:num)`];
8340
8341 EXPAND_TAC"s'"
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[];
8344
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]
8347 THEN GEN_TAC
8348 THEN EQ_TAC;
8349
8350
8351 MP_TAC(ARITH_RULE`3 <= scs_k_v39 s ==> ~(scs_k_v39 s=0)`)
8352 THEN RESA_TAC
8353 THEN STRIP_TAC
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`]
8359 THEN MP_TAC VV_INJ
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]
8361 THEN STRIP_TAC
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)`)
8368 THEN RESA_TAC
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`)
8371 THEN RESA_TAC
8372 THEN MRESA_TAC MOD_LT[`x' MOD k':num`;`k:num`]
8373 THEN STRIP_TAC
8374 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
8375
8376 REPEAT STRIP_TAC;
8377
8378 POP_ASSUM MP_TAC
8379 THEN POP_ASSUM MP_TAC
8380 THEN ARITH_TAC;
8381
8382 EXISTS_TAC`x:num`
8383 THEN MRESA_TAC MOD_LT[`x:num`;`k':num`]
8384 THEN REWRITE_TAC[SET_RULE`(x:num)IN(:num)`]]);;
8385
8386
8387
8388
8389
8390
8391
8392
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)`,
8396 [
8397
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]
8400 THEN RESA_TAC
8401 THEN EQ_TAC;
8402
8403 RESA_TAC
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]
8413 THEN ASSUME_TAC th)
8414 THEN REWRITE_TAC[]
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]
8419 THEN ASSUME_TAC th)
8420 THEN RESA_TAC
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)`])
8423 THEN STRIP_TAC;
8424
8425 POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o  ONCE_DEPTH_CONV)[th])
8426 THEN REWRITE_TAC[];
8427
8428 REMOVE_ASSUM_TAC
8429 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o  ONCE_DEPTH_CONV)[th])
8430 THEN REWRITE_TAC[];
8431
8432 POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o  ONCE_DEPTH_CONV)[th])
8433 THEN REWRITE_TAC[];
8434
8435 REMOVE_ASSUM_TAC
8436 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o  ONCE_DEPTH_CONV)[th])
8437 THEN REWRITE_TAC[];
8438
8439 RESA_TAC
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]
8449 THEN ASSUME_TAC th)
8450 THEN REWRITE_TAC[]
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]
8455 THEN ASSUME_TAC th)
8456 THEN RESA_TAC
8457 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;])
8458 THEN STRIP_TAC;
8459
8460 STRIP_TAC;
8461
8462 POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o  ONCE_DEPTH_CONV)[th])
8463 THEN REWRITE_TAC[];
8464
8465 REMOVE_ASSUM_TAC
8466 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o  ONCE_DEPTH_CONV)[th])
8467 THEN REWRITE_TAC[];
8468
8469 STRIP_TAC;
8470
8471 ONCE_REWRITE_TAC[REAL_ARITH`a<=b+c <=> a<= c+b`]
8472 THEN ASM_REWRITE_TAC[];
8473
8474 ONCE_REWRITE_TAC[SET_RULE`(A==> B\/C)<=> (A==>C\/B)`]
8475 THEN ASM_REWRITE_TAC[];
8476
8477 STRIP_TAC;
8478
8479 POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o  ONCE_DEPTH_CONV)[th])
8480 THEN REWRITE_TAC[];
8481
8482 REMOVE_ASSUM_TAC
8483 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o  ONCE_DEPTH_CONV)[th])
8484 THEN REWRITE_TAC[];
8485
8486 STRIP_TAC;
8487
8488 ONCE_REWRITE_TAC[REAL_ARITH`a<=b+c <=> a<= c+b`]
8489 THEN ASM_REWRITE_TAC[];
8490
8491 ONCE_REWRITE_TAC[SET_RULE`(A==> B\/C)<=> (A==>C\/B)`]
8492 THEN ASM_REWRITE_TAC[]]);;
8493
8494
8495
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]);;
8499
8500
8501
8502 let NUMSEG_2=prove(`{i| i<3}=0..2`,
8503 REWRITE_TAC[EXTENSION;IN_NUMSEG;IN_ELIM_THM]
8504 THEN ARITH_TAC);;
8505
8506
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]);;
8510
8511
8512
8513 let NUMSEG_3=prove(`{i| i<4}=0..3`,
8514 REWRITE_TAC[EXTENSION;IN_NUMSEG;IN_ELIM_THM]
8515 THEN ARITH_TAC);;
8516
8517
8518
8519 let SUM_AZIM_EQ_ANGLE_EQ4=prove_by_refinement(
8520 `(k'=3)/\
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))) 
8524 /\
8525        vv''  = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s'')+q MOD (scs_k_v39 s))) 
8526 /\
8527  MMs_v39 s vv /\
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 /\
8537  convex_local_fan
8538       (v_prime V
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))
8543 ==>
8544 tau3 (vv (0 MOD k' + p MOD k)) (vv (1 MOD k' + p MOD k))
8545        (vv (2 MOD k' + p MOD k))
8546 = sum {i | i < 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))
8551  - (pi + sol0)`,
8552 [
8553 REWRITE_TAC[LET_DEF;LET_END_DEF;tau3;MMs_v39;BBprime2_v39;BBprime_v39;]
8554 THEN STRIP_TAC
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
8558 THEN RESA_TAC
8559 THEN MP_TAC E_PRIME_EQ_E_vv
8560 THEN RESA_TAC
8561 THEN MP_TAC F_PRIME_EQ_F_vv
8562 THEN RESA_TAC
8563 THEN MP_TAC SCS_HALF_SLICE_IS_A_SCS
8564 THEN RESA_TAC
8565 THEN SUBGOAL_THEN`BBs_v39 s' vv'`ASSUME_TAC;
8566
8567
8568 MP_TAC QKNVMLB1
8569 THEN REWRITE_TAC[MMs_v39;BBprime2_v39;BBprime_v39;LET_DEF;LET_END_DEF;ARITH_RULE`~(4<=3)`;IN;mk_unadorned_v39;]
8570 THEN RESA_TAC
8571 THEN POP_ASSUM MATCH_MP_TAC
8572 THEN ASM_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
8576 ;
8577
8578
8579 EXPAND_TAC"s'"
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[];
8582
8583
8584
8585 ASM_REWRITE_TAC[]
8586 ;
8587
8588
8589 EXPAND_TAC"s'"
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[];
8592
8593
8594
8595 ASM_REWRITE_TAC[]
8596 ;
8597
8598
8599
8600
8601
8602 MRESAL_TAC (GEN_ALL(INST_TYPE [`:3`,`:M`]V_E_FF_IS_SCS_CASES_3))[`s':scs_v39`;`vv':num->real^3`]
8603 [DIMINDEX_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))`;
8608 `v_prime V
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`)
8615 ;
8616
8617
8618 POP_ASSUM MP_TAC
8619 THEN SUBGOAL_THEN`vv (0 + p MOD k) IN 
8620       v_prime V
8621       (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8622 ASSUME_TAC;
8623
8624
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])
8628 THEN EXISTS_TAC`0`
8629 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
8630
8631
8632
8633
8634
8635 SUBGOAL_THEN`vv (1 + p MOD k) IN 
8636       v_prime V
8637       (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8638 ASSUME_TAC;
8639
8640
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])
8644 THEN EXISTS_TAC`1`
8645 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
8646
8647
8648 SUBGOAL_THEN`vv (2 + p MOD k) IN 
8649       v_prime V
8650       (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8651 ASSUME_TAC;
8652
8653
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])
8657 THEN EXISTS_TAC`2`
8658 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
8659
8660
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
8670 ;
8671
8672
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
8681 THEN MP_TAC th
8682 THEN ASM_REWRITE_TAC[convex_local_fan]
8683 THEN RESA_TAC)
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`]
8685 ;
8686
8687
8688
8689 ASM_REWRITE_TAC[]
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
8696 ;
8697
8698
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
8707 THEN MP_TAC th
8708 THEN ASM_REWRITE_TAC[convex_local_fan]
8709 THEN RESA_TAC)
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`]
8711 ;
8712
8713
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
8720 ;
8721
8722
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
8731 THEN MP_TAC th
8732 THEN ASM_REWRITE_TAC[convex_local_fan]
8733 THEN RESA_TAC)
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`]
8735 ;
8736
8737
8738
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))`;
8742 `v_prime V
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`]
8748 THEN STRIP_TAC
8749 THEN SUBGOAL_THEN` local_fan
8750       (v_prime V
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))
8755 `ASSUME_TAC
8756 ;
8757
8758 ASM_TAC
8759 THEN REWRITE_TAC[convex_local_fan]
8760 THEN REPEAT RESA_TAC
8761 ;
8762
8763
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))`;
8767 `v_prime V
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`]
8772 THEN STRIP_TAC
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))`;
8776 `v_prime V
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}`]
8781 THEN STRIP_TAC
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)`]
8783
8784 ;
8785
8786
8787
8788 (******************)
8789
8790 POP_ASSUM MP_TAC
8791 THEN SUBGOAL_THEN`vv (0 + p MOD k) IN 
8792       v_prime V
8793       (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8794 ASSUME_TAC;
8795
8796
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])
8800 THEN EXISTS_TAC`0`
8801 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
8802
8803
8804
8805
8806
8807 SUBGOAL_THEN`vv (1 + p MOD k) IN 
8808       v_prime V
8809       (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8810 ASSUME_TAC;
8811
8812
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])
8816 THEN EXISTS_TAC`1`
8817 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
8818
8819
8820 SUBGOAL_THEN`vv (2 + p MOD k) IN 
8821       v_prime V
8822       (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8823 ASSUME_TAC;
8824
8825
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])
8829 THEN EXISTS_TAC`2`
8830 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
8831
8832
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
8842 ;
8843
8844
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
8853 THEN MP_TAC th
8854 THEN ASM_REWRITE_TAC[convex_local_fan]
8855 THEN RESA_TAC)
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`]
8857 ;
8858
8859
8860
8861 ASM_REWRITE_TAC[]
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
8868 ;
8869
8870
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
8879 THEN MP_TAC th
8880 THEN ASM_REWRITE_TAC[convex_local_fan]
8881 THEN RESA_TAC)
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`]
8883 ;
8884
8885
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
8892 ;
8893
8894
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
8903 THEN MP_TAC th
8904 THEN ASM_REWRITE_TAC[convex_local_fan]
8905 THEN RESA_TAC)
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`]
8907 ;
8908
8909
8910
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))`;
8914 `v_prime V
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`]
8920 THEN STRIP_TAC
8921 THEN SUBGOAL_THEN` local_fan
8922       (v_prime V
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))
8927 `ASSUME_TAC
8928 ;
8929
8930 ASM_TAC
8931 THEN REWRITE_TAC[convex_local_fan]
8932 THEN REPEAT RESA_TAC
8933 ;
8934
8935
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))`;
8939 `v_prime V
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`]
8944 THEN STRIP_TAC
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))`;
8948 `v_prime V
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}`]
8953 THEN STRIP_TAC
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)`]
8955
8956 ;
8957
8958 (************)
8959
8960
8961 POP_ASSUM MP_TAC
8962 THEN SUBGOAL_THEN`vv (0 + p MOD k) IN 
8963       v_prime V
8964       (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8965 ASSUME_TAC;
8966
8967
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])
8971 THEN EXISTS_TAC`0`
8972 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
8973
8974
8975
8976
8977
8978 SUBGOAL_THEN`vv (1 + p MOD k) IN 
8979       v_prime V
8980       (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8981 ASSUME_TAC;
8982
8983
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])
8987 THEN EXISTS_TAC`1`
8988 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
8989
8990
8991 SUBGOAL_THEN`vv (2 + p MOD k) IN 
8992       v_prime V
8993       (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))`
8994 ASSUME_TAC;
8995
8996
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])
9000 THEN EXISTS_TAC`2`
9001 THEN REWRITE_TAC[SET_RULE`(a:num)IN(:num)`;ARITH_RULE`0 MOD 3=0/\ 1 MOD 3=1/\ 2 MOD 3=2`];
9002
9003
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
9013 ;
9014
9015
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
9024 THEN MP_TAC th
9025 THEN ASM_REWRITE_TAC[convex_local_fan]
9026 THEN RESA_TAC)
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`]
9028 ;
9029
9030
9031
9032 ASM_REWRITE_TAC[]
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
9039 ;
9040
9041
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
9050 THEN MP_TAC th
9051 THEN ASM_REWRITE_TAC[convex_local_fan]
9052 THEN RESA_TAC)
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`]
9054 ;
9055
9056
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
9063 ;
9064
9065
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
9074 THEN MP_TAC th
9075 THEN ASM_REWRITE_TAC[convex_local_fan]
9076 THEN RESA_TAC)
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`]
9078 ;
9079
9080
9081
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))`;
9085 `v_prime V
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`]
9091 THEN STRIP_TAC
9092 THEN SUBGOAL_THEN` local_fan
9093       (v_prime V
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))
9098 `ASSUME_TAC
9099 ;
9100
9101 ASM_TAC
9102 THEN REWRITE_TAC[convex_local_fan]
9103 THEN REPEAT RESA_TAC
9104 ;
9105
9106
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))`;
9110 `v_prime V
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`]
9115 THEN STRIP_TAC
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))`;
9119 `v_prime V
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}`]
9124 THEN STRIP_TAC
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)`]
9126 ;]);;
9127
9128
9129
9130
9131
9132
9133 let CARD_FF_EQ_CARD_SLICE_FF= prove_by_refinement(
9134 `convex_local_fan (V,E,FF) /\
9135         v IN V /\
9136         w IN V /\
9137         ~(v = w) /\
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`,
9143 [
9144 STRIP_TAC
9145 THEN MP_TAC Local_lemmas1.PROVE_THE_SLICE_ASSUMPTION
9146 THEN RESA_TAC
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)`]
9151 THEN STRIP_TAC
9152 THEN MP_TAC Nkezbfc_local.COMPATIBLE_BW_TWO_LEMMAS
9153 THEN RESA_TAC
9154 THEN SUBGOAL_THEN`{{w, v}} = {{v,w:real^3}}` ASSUME_TAC;
9155
9156 REWRITE_TAC[EXTENSION;IN_SING]
9157 THEN SET_TAC[];
9158
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}`]
9166 THEN RESA_TAC
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
9169 THEN RESA_TAC
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))`]
9180 THEN ASM_TAC
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]
9186 THEN MP_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]
9191 THEN MP_TAC th
9192 THEN REPEAT RESA_TAC)]);;
9193
9194
9195
9196 let CARD_SLICE_FF_LE_3= prove_by_refinement(
9197 `convex_local_fan (V,E,FF) /\
9198         v IN V /\
9199         w IN V /\
9200         ~(v = w) /\
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`,
9206 [
9207 STRIP_TAC
9208 THEN MP_TAC Local_lemmas1.PROVE_THE_SLICE_ASSUMPTION
9209 THEN RESA_TAC
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)`]
9214 THEN STRIP_TAC
9215 THEN MP_TAC Nkezbfc_local.COMPATIBLE_BW_TWO_LEMMAS
9216 THEN RESA_TAC
9217 THEN SUBGOAL_THEN`{{w, v}} = {{v,w:real^3}}` ASSUME_TAC;
9218
9219 REWRITE_TAC[EXTENSION;IN_SING]
9220 THEN SET_TAC[];
9221
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}`]
9229 THEN RESA_TAC
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
9232 THEN RESA_TAC
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))`]
9243 THEN ASM_TAC
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]
9249 THEN MP_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]
9254 THEN MP_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]
9263 THEN RESA_TAC;]);;
9264
9265
9266
9267 let CARD_FF_EQ_SCS_K_3=prove(
9268 `  scs_k_v39 s =k /\
9269  IMAGE (\i. vv i,vv (SUC i)) (:num)=FF/\
9270         is_scs_v39 s /\
9271 k=3 /\
9272         BBs_v39 s vv 
9273 ==> CARD FF=3`,
9274 REPEAT STRIP_TAC
9275 THEN MRESAL_TAC (GEN_ALL(INST_TYPE [`:3`,`:M`]V_E_FF_IS_SCS_CASES_3))[`s:scs_v39`;`vv:num->real^3`]
9276 [DIMINDEX_3]
9277 THEN MP_TAC VV_INJ
9278 THEN RESA_TAC
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[]
9285 THEN ARITH_TAC);;
9286
9287
9288
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))) 
9294 /\
9295        vv''  = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s'')+q MOD (scs_k_v39 s))) 
9296 /\
9297  MMs_v39 s vv /\
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]
9303 THEN STRIP_TAC
9304 THEN MP_TAC SCS_K_PRIME_CASE_3
9305 THEN REWRITE_TAC[taustar_v39;LET_DEF;LET_END_DEF;scs_diag]
9306 THEN RESA_TAC
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)`)
9311 THEN RESA_TAC
9312 THEN MP_TAC SCS_K_LE_6
9313 THEN RESA_TAC
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`]
9321 THEN ASM_TAC
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
9325 ;
9326
9327
9328 REPLICATE_TAC (54-8)(POP_ASSUM MP_TAC)
9329 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
9330 THEN MP_TAC th)
9331 THEN ASM_REWRITE_TAC[];
9332
9333
9334
9335 REPLICATE_TAC (54-8)(POP_ASSUM MP_TAC)
9336 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
9337 THEN MP_TAC th)
9338 THEN ASM_REWRITE_TAC[]
9339 THEN STRIP_TAC
9340 THEN SUBGOAL_THEN`(!i. scs_b_v39 s i (SUC i) <= cstab)`ASSUME_TAC;
9341
9342
9343
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[];
9348
9349
9350 REPLICATE_TAC (55-8)(POP_ASSUM MP_TAC)
9351 THEN  POP_ASSUM(fun th-> REPEAT STRIP_TAC
9352 THEN MP_TAC th
9353 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(3-1)=3`])
9354 THEN STRIP_TAC
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]
9359 THEN STRIP_TAC
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]
9363 THEN STRIP_TAC
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]
9368 THEN STRIP_TAC
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
9377 ;
9378
9379 REWRITE_TAC[EXTENSION;IN_SING]
9380 THEN SET_TAC[];
9381
9382
9383 RESA_TAC
9384 THEN POP_ASSUM(fun th-> ASSUME_TAC(SYM th))
9385 THEN RESA_TAC
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)
9391 `ASSUME_TAC
9392 ;
9393
9394
9395
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;
9399
9400
9401
9402 EXPAND_TAC"s'"
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[]
9405 ;
9406
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`]
9410 THEN STRIP_TAC
9411 THEN MP_TAC(ARITH_RULE`3<= k' /\ k'<k ==> 0<k' /\ ~(k=0) /\ k'-1<k'/\ 1<k`)
9412 THEN RESA_TAC
9413 THEN STRIP_TAC
9414 ;
9415
9416 EXPAND_TAC"FF"
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`)
9429 THEN RESA_TAC
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`)
9444 THEN MP_TAC VV_INJ
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]
9446 THEN STRIP_TAC
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]
9452 THEN RESA_TAC
9453
9454 ;
9455
9456
9457
9458
9459 REWRITE_TAC[IN_ELIM_THM;]
9460 THEN REPEAT STRIP_TAC;
9461
9462
9463 EXPAND_TAC"FF"
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`]
9467 ;
9468
9469
9470
9471
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
9475 ;
9476
9477 EXPAND_TAC"V"
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)`];
9481
9482  MP_TAC Nkezbfc_local.CONVEX_LOFA_IMP_INANGLE_EQ_AZIM
9483 THEN RESA_TAC
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])
9489 ;
9490
9491
9492
9493
9494
9495
9496
9497
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]
9501 THEN STRIP_TAC
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]
9508 THEN STRIP_TAC
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]
9512 THEN RESA_TAC
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;]
9515 THEN STRIP_TAC
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
9520   {i | i < k /\
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))
9526 = sum
9527   {i | i < k /\
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
9533 ;
9534
9535
9536
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]
9544 THEN STRIP_TAC
9545 THEN SUBGOAL_THEN` (p+1+k -q MOD k)MOD k =scs_k_v39 s''` ASSUME_TAC;
9546
9547
9548 EXPAND_TAC"s''"
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[]
9551 ;
9552
9553
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)`)
9557 THEN RESA_TAC
9558 THEN MP_TAC(ARITH_RULE`p MOD k<= q MOD k \/ q MOD k<= p MOD k`)
9559 THEN RESA_TAC;
9560
9561
9562 EXISTS_TAC`(\i. (i+ p MOD k + k - q MOD k) MOD k)`
9563 THEN STRIP_TAC;
9564
9565
9566
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
9575 `)
9576 THEN RESA_TAC
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`)
9587 THEN STRIP_TAC
9588 ;
9589
9590
9591
9592 EXISTS_TAC`y:num`       
9593 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN(:num)`]
9594 ;
9595
9596 REPEAT STRIP_TAC
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`)
9599 THEN RESA_TAC
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`]
9604 ;
9605
9606
9607 REPEAT RESA_TAC
9608 ;
9609
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)`)
9614 THEN RESA_TAC
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`)
9620 THEN RESA_TAC
9621 THEN MP_TAC VV_INJ
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]
9623 THEN STRIP_TAC
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]
9628 THEN RESA_TAC
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`];
9634
9635
9636
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) `)
9640 THEN RESA_TAC
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`
9648 )
9649 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
9650 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
9651
9652
9653
9654
9655
9656
9657
9658 EXISTS_TAC`(\i. (i+ p MOD k  - q MOD k) MOD k)`
9659 THEN STRIP_TAC;
9660
9661
9662
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 
9670 `)
9671 THEN RESA_TAC
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`
9682 )
9683 THEN STRIP_TAC
9684 ;
9685
9686
9687
9688 EXISTS_TAC`y:num`       
9689 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN(:num)`]
9690 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
9691
9692
9693 REPEAT STRIP_TAC
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`)
9696 THEN RESA_TAC
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`]
9701 ;
9702
9703
9704
9705
9706
9707
9708 REPEAT RESA_TAC
9709 ;
9710
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)`)
9715 THEN RESA_TAC
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`]
9719 THEN MP_TAC VV_INJ
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]
9721 THEN STRIP_TAC
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`)
9724 THEN RESA_TAC
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]
9728 THEN RESA_TAC
9729 THEN MRESA_TAC MOD_LT[`x' MOD k''`;`k:num`];
9730
9731
9732
9733
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 =
9736 (x + p MOD k)  `)
9737 THEN RESA_TAC
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`
9744 )
9745 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
9746 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
9747
9748
9749
9750 ASM_REWRITE_TAC[]
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]
9753 THEN STRIP_TAC
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]
9760 THEN STRIP_TAC
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]
9763 THEN STRIP_TAC
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]
9770 THEN STRIP_TAC
9771 THEN SUBGOAL_THEN`BBs_v39 s' vv'`ASSUME_TAC;
9772
9773
9774
9775 MP_TAC QKNVMLB1
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;]
9777 THEN RESA_TAC
9778 THEN POP_ASSUM MATCH_MP_TAC
9779 THEN ASM_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
9783 ;
9784
9785
9786 EXPAND_TAC"s'"
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[];
9789
9790
9791
9792
9793 ASM_REWRITE_TAC[]
9794 ;
9795
9796
9797 EXPAND_TAC"s'"
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[];
9800
9801
9802
9803
9804 ASM_REWRITE_TAC[]
9805 ;
9806
9807
9808
9809 SUBGOAL_THEN`BBs_v39 s'' vv''`ASSUME_TAC;
9810
9811
9812
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
9816 THEN ASM_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
9820 ;
9821
9822
9823 EXPAND_TAC"s''"
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[];
9826
9827
9828
9829
9830 ASM_REWRITE_TAC[]
9831 ;
9832
9833
9834 EXPAND_TAC"s''"
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[];
9837
9838
9839
9840
9841 ASM_REWRITE_TAC[]
9842 ;
9843
9844
9845
9846
9847
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]
9850 THEN STRIP_TAC
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 `)
9858 THEN RESA_TAC;
9859
9860
9861 MP_TAC(ARITH_RULE`~(k''<= 3)\/ k''<= 3 `)
9862 THEN RESA_TAC;
9863
9864
9865
9866
9867 MP_TAC(ARITH_RULE`3<=k'==> ~(k'=0)/\ 0<k'`)
9868 THEN RESA_TAC
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)
9875 [`v_prime V
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)))
9886 =sum {i | i < 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
9891 ;
9892
9893
9894 MATCH_MP_TAC SUM_EQ
9895 THEN REWRITE_TAC[IN_ELIM_THM]
9896 THEN REPEAT RESA_TAC
9897 THEN MRESA_TAC MOD_LT[`x:num`;`k':num`];
9898
9899
9900
9901
9902 MP_TAC(ARITH_RULE`3<=k''==> ~(k''=0)/\ 0<k''`)
9903 THEN RESA_TAC
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)
9910 [`v_prime V
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)))
9921 =sum {i | i < 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
9926 ;
9927
9928
9929 MATCH_MP_TAC SUM_EQ
9930 THEN REWRITE_TAC[IN_ELIM_THM]
9931 THEN REPEAT RESA_TAC
9932 THEN MRESA_TAC MOD_LT[`x:num`;`k'':num`];
9933
9934
9935 ASM_REWRITE_TAC[]
9936 ;
9937
9938
9939
9940
9941
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`
9946 3<= CARD
9947     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
9948 /\ 3<= CARD
9949     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))
9950 ==> (CARD
9951     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)) +
9952     CARD
9953     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)) -
9954     2) -
9955    2=
9956 (CARD
9957     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)) -2)+
9958     (CARD
9959     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)) -
9960     2)`)
9961 THEN RESA_TAC
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]
9965 THEN RESA_TAC
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[]
9968 ;
9969
9970
9971
9972 (******3<k' /\ k''=3 ********)
9973
9974 MP_TAC(ARITH_RULE`3<=k'==> ~(k'=0)/\ 0<k'`)
9975 THEN RESA_TAC
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)
9982 [`v_prime V
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)))
9993 =sum {i | i < 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
9998 ;
9999
10000
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`];
10005
10006
10007 MP_TAC(ARITH_RULE`(k''<=3) /\ 3<= k'' ==> k''=3`)
10008 THEN RESA_TAC
10009 THEN REPLICATE_TAC (125-61)(POP_ASSUM MP_TAC)
10010 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
10011 THEN MP_TAC th
10012 THEN ASM_REWRITE_TAC[]
10013 THEN STRIP_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]
10020 THEN RESA_TAC
10021 ;
10022
10023
10024
10025
10026
10027
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`
10032 3<= CARD
10033     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
10034 /\ 3<= CARD
10035     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))
10036 ==> (CARD
10037     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)) +
10038     CARD
10039     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)) -
10040     2) -
10041    2=
10042 (CARD
10043     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)) -2)+
10044     (CARD
10045     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)) -
10046     2)`)
10047 THEN RESA_TAC
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]
10051 THEN RESA_TAC
10052 THEN REPLICATE_TAC (131-124)(POP_ASSUM MP_TAC)
10053 THEN POP_ASSUM(fun th-> ASM_TAC
10054 THEN ASM_REWRITE_TAC[th]
10055 THEN MP_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[]
10060 ;
10061
10062
10063
10064
10065 MP_TAC(ARITH_RULE`~(k''<= 3)\/ k''<= 3 `)
10066 THEN RESA_TAC;
10067
10068 (********k'=3 /\ 3< k''***********)
10069
10070
10071
10072 MP_TAC(ARITH_RULE`3<=k''==> ~(k''=0)/\ 0<k''`)
10073 THEN RESA_TAC
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)
10080 [`v_prime V
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)))
10091 =sum {i | i < 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
10096 ;
10097
10098
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`];
10103
10104
10105 ASM_REWRITE_TAC[]
10106 ;
10107
10108
10109
10110
10111 MP_TAC(ARITH_RULE`(k'<=3) /\ 3<= k' ==> k'=3`)
10112 THEN RESA_TAC
10113 THEN REPLICATE_TAC (125-60)(POP_ASSUM MP_TAC)
10114 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
10115 THEN MP_TAC th
10116 THEN ASM_REWRITE_TAC[]
10117 THEN STRIP_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]
10124 THEN RESA_TAC
10125 ;
10126
10127
10128
10129
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`
10134 3<= CARD
10135     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
10136 /\ 3<= CARD
10137     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))
10138 ==> (CARD
10139     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)) +
10140     CARD
10141     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)) -
10142     2) -
10143    2=
10144 (CARD
10145     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)) -2)+
10146     (CARD
10147     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)) -
10148     2)`)
10149 THEN RESA_TAC
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]
10153 THEN RESA_TAC
10154 THEN REPLICATE_TAC (131-124)(POP_ASSUM MP_TAC)
10155 THEN POP_ASSUM(fun th-> ASM_TAC
10156 THEN ASM_REWRITE_TAC[th]
10157 THEN MP_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[]
10162 ;
10163
10164
10165 (*********k'=3 /\ k''=3********)
10166
10167
10168
10169
10170 MP_TAC(ARITH_RULE`(k'<=3) /\ 3<= k' ==> k'=3`)
10171 THEN RESA_TAC
10172 THEN REPLICATE_TAC (120-60)(POP_ASSUM MP_TAC)
10173 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
10174 THEN MP_TAC th
10175 THEN ASM_REWRITE_TAC[]
10176 THEN STRIP_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]
10183 THEN RESA_TAC
10184 ;
10185
10186
10187
10188 MP_TAC(ARITH_RULE`(k''<=3) /\ 3<= k'' ==> k''=3`)
10189 THEN RESA_TAC
10190 THEN REPLICATE_TAC (122-60)(POP_ASSUM MP_TAC)
10191 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
10192 THEN MP_TAC th
10193 THEN ASM_REWRITE_TAC[]
10194 THEN STRIP_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]
10201 THEN RESA_TAC
10202 ;
10203
10204
10205
10206
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`
10211 3<= CARD
10212     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u))
10213 /\ 3<= CARD
10214     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w))
10215 ==> (CARD
10216     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)) +
10217     CARD
10218     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)) -
10219     2) -
10220    2=
10221 (CARD
10222     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (u,rho_node1 FF u)) -2)+
10223     (CARD
10224     (face (hypermap (HYP (vec 0,V,E UNION {{u, w}}))) (w,rho_node1 FF w)) -
10225     2)`)
10226 THEN RESA_TAC
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]
10230 THEN RESA_TAC
10231 THEN REPLICATE_TAC (128-118)(POP_ASSUM MP_TAC)
10232 THEN POP_ASSUM(fun th-> ASM_TAC
10233 THEN ASM_REWRITE_TAC[th]
10234 THEN MP_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]
10240 THEN MP_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[]
10245 ;
10246
10247 ]);;
10248
10249
10250
10251
10252
10253
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`)
10260 THEN RESA_TAC
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`)
10263 THEN RESA_TAC
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])
10268 THEN ARITH_TAC);;
10269
10270
10271
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))) 
10277 /\
10278        vv''  = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s'')+q MOD (scs_k_v39 s))) 
10279 /\
10280  MMs_v39 s vv /\
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`,
10285 [
10286 REWRITE_TAC[taustar_v39;LET_DEF;LET_END_DEF;scs_diag]
10287 THEN STRIP_TAC
10288 THEN MP_TAC SCS_K_PRIME_CASE_3
10289 THEN REWRITE_TAC[taustar_v39;LET_DEF;LET_END_DEF;scs_diag]
10290 THEN RESA_TAC
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)`)
10295 THEN RESA_TAC
10296 THEN MP_TAC SCS_K_LE_6
10297 THEN RESA_TAC
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`]
10305 THEN ASM_TAC
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
10309 ;
10310
10311
10312 REPLICATE_TAC (54-9)(POP_ASSUM MP_TAC)
10313 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
10314 THEN MP_TAC th)
10315 THEN ASM_REWRITE_TAC[ARITH_RULE`~(4<=3)`]
10316 ;
10317
10318
10319
10320
10321
10322
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]
10325 THEN STRIP_TAC
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]
10332 THEN RESA_TAC
10333 THEN REWRITE_TAC[tau_fun]
10334 THEN SUBGOAL_THEN`local_fan(V,E,FF)`ASSUME_TAC
10335 ;
10336
10337
10338 REPLICATE_TAC (57-9)(POP_ASSUM MP_TAC)
10339 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
10340 THEN MP_TAC th)
10341 THEN REWRITE_TAC[convex_local_fan]
10342 THEN ASM_REWRITE_TAC[ARITH_RULE`~(4<=3)`]
10343 THEN REPEAT RESA_TAC
10344 ;
10345
10346 MP_TAC Local_lemmas.LOFA_IMP_CARD_FF_V_EQ
10347 THEN RESA_TAC
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]
10350 THEN RESA_TAC
10351 THEN REWRITE_TAC[ARITH_RULE`4-2=2`]
10352 THEN MP_TAC SUM_AZIM_EQ_ANGLE_LE4
10353 THEN
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]
10355 THEN RESA_TAC
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
10361 THEN MP_TAC th)
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
10365 ;
10366
10367 EXPAND_TAC"V"
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)`];
10371
10372 SUBGOAL_THEN`(vv:num->real^3) (1+p MOD 4) IN V`ASSUME_TAC
10373 ;
10374
10375 EXPAND_TAC"V"
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)`];
10379
10380
10381 SUBGOAL_THEN`(vv:num->real^3) (2+p MOD 4) IN V`ASSUME_TAC
10382 ;
10383
10384 EXPAND_TAC"V"
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)`];
10388
10389 SUBGOAL_THEN`(vv:num->real^3) (3+p MOD 4) IN V`ASSUME_TAC
10390 ;
10391
10392 EXPAND_TAC"V"
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)`];
10396
10397 MP_TAC Nkezbfc_local.CONVEX_LOFA_IMP_INANGLE_EQ_AZIM_IVS
10398 THEN RESA_TAC
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;
10404
10405
10406
10407
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`];
10416
10417
10418 SUBGOAL_THEN`(rho_node1 FF (vv (1 + p MOD 4))) =vv (2 + p MOD 4)`ASSUME_TAC;
10419
10420
10421
10422
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`];
10431
10432
10433
10434 SUBGOAL_THEN`(rho_node1 FF (vv (2 + p MOD 4))) =vv (3 + p MOD 4)`ASSUME_TAC;
10435
10436
10437
10438
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`];
10447
10448
10449
10450
10451
10452 SUBGOAL_THEN`(rho_node1 FF (vv (3 + p MOD 4))) =vv (0 + p MOD 4)`ASSUME_TAC;
10453
10454
10455
10456
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)`) ;
10469
10470
10471 SUBGOAL_THEN`(ivs_rho_node1 FF (vv (0 + p MOD 4))) =vv (3 + p MOD 4)`ASSUME_TAC
10472 ;
10473
10474
10475
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)`) ;
10488
10489
10490
10491
10492
10493
10494 SUBGOAL_THEN`(ivs_rho_node1 FF (vv (3 + p MOD 4))) =vv (2 + p MOD 4)`ASSUME_TAC;
10495
10496
10497
10498
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`];
10507
10508
10509
10510
10511
10512
10513
10514 SUBGOAL_THEN`(ivs_rho_node1 FF (vv (1 + p MOD 4))) =vv (0 + p MOD 4)`ASSUME_TAC;
10515
10516
10517
10518
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`];
10527
10528
10529 SUBGOAL_THEN`(ivs_rho_node1 FF (vv (2 + p MOD 4))) =vv (1 + p MOD 4)`ASSUME_TAC;
10530
10531
10532
10533
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`];
10542
10543 ASM_REWRITE_TAC[]
10544 THEN MP_TAC VV_INJ
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
10547 ;
10548
10549
10550 REPEAT GEN_TAC
10551 THEN POP_ASSUM(fun th-> 
10552 REPEAT STRIP_TAC
10553 THEN MRESA_TAC th[`i:num`;`j:num`])
10554 ;
10555
10556
10557
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
10562 ;
10563
10564
10565 REWRITE_TAC[dist]
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`])
10578 THEN ASM_TAC
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;
10592
10593
10594
10595
10596
10597 REPLICATE_TAC (80-7) (POP_ASSUM MP_TAC)
10598 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
10599 THEN MP_TAC th
10600 THEN RESA_TAC)
10601 THEN SUBGOAL_THEN`!i j. ~(vv i = vv j) ==> &2 <= dist(vv i,(vv:num->real^3) j) ` ASSUME_TAC
10602 ;
10603
10604
10605
10606 REWRITE_TAC[dist]
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)`)
10616 THEN RESA_TAC;
10617
10618
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`])
10623 ;
10624
10625
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;
10634
10635
10636 SUBGOAL_THEN`dist((vv:num->real^3) (p MOD 4), vv (q MOD 4))< &4`ASSUME_TAC
10637 ;
10638
10639
10640
10641 REWRITE_TAC[dist]
10642 THEN REPLICATE_TAC (81-39) (POP_ASSUM MP_TAC)
10643 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
10644 THEN MP_TAC th)
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]
10646 THEN STRIP_TAC
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`])
10650 THEN ASM_TAC
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;
10660
10661
10662 POP_ASSUM MP_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`)
10674 THEN RESA_TAC;
10675
10676
10677
10678 MP_TAC DIAGE_VAL_P_Q
10679 THEN RESA_TAC
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->
10683 ASM_TAC
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;]
10687 ;
10688
10689
10690
10691 MP_TAC DIAGE_VAL_P_Q
10692 THEN RESA_TAC
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->
10696 ASM_TAC
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
10702 ;
10703
10704
10705
10706 MP_TAC DIAGE_VAL_P_Q
10707 THEN RESA_TAC
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->
10711 ASM_TAC
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;
10717
10718
10719
10720
10721 MP_TAC DIAGE_VAL_P_Q
10722 THEN RESA_TAC
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`;]
10725 THEN STRIP_TAC
10726 THEN POP_ASSUM(fun th->
10727 POP_ASSUM(fun th1->
10728 ASM_TAC
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;
10734
10735
10736 ]);;
10737
10738
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))) 
10742 /\
10743        vv''  = (\i. (vv:num->real^3) (i MOD (scs_k_v39 s'')+q MOD (scs_k_v39 s))) 
10744 /\
10745  MMs_v39 s vv /\
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)))`)
10752 THEN STRIP_TAC
10753 THEN STRIP_TAC
10754 THENL[
10755 MP_TAC QKNVMLB3_LE4
10756 THEN RESA_TAC;
10757 MP_TAC QKNVMLB3_Eq4
10758 THEN RESA_TAC]);;
10759
10760
10761
10762
10763  end;;
10764
10765
10766 (*
10767 let check_completeness_claimA_concl = 
10768   Ineq.mk_tplate `\x. scs_arrow_v13 (set_of_list x) 
10769 *)
10770
10771
10772
10773