Update from HH
[Flyspeck/.git] / text_formalization / local / YXIONXL2.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 Yxionxl2 = struct
16
17
18
19 open Polyhedron;;
20 open Sphere;;
21 open Topology;;         
22 open Fan_misc;;
23 open Planarity;; 
24 open Conforming;;
25 open Hypermap;;
26 open Fan;;
27 open Topology;;
28 open Wrgcvdr_cizmrrh;;
29 open Local_lemmas;;
30 open Collect_geom;;
31 open Dih2k_hypermap;;
32 open Wjscpro;;
33 open Tecoxbm;;
34 open Hdplygy;;
35 open Nkezbfc_local;;
36 open Flyspeck_constants;;
37 open Gbycpxs;;
38 open Pcrttid;;
39 open Local_lemmas1;;
40 open Pack_defs;;
41
42 open Hales_tactic;;
43
44 open Appendix;;
45
46
47
48
49
50 open Hypermap;;
51 open Fan;;
52 open Wrgcvdr_cizmrrh;;
53 open Local_lemmas;;
54 open Flyspeck_constants;;
55 open Pack_defs;;
56
57 open Hales_tactic;;
58
59 open Appendix;;
60
61
62 open Zithlqn;;
63
64
65 open Xwitccn;;
66
67 open Ayqjtmd;;
68
69 open Jkqewgv;;
70
71
72 open Mtuwlun;;
73
74
75 open Uxckfpe;;
76 open Sgtrnaf;;
77
78 open Yxionxl;;
79
80 open Qknvmlb;;
81 open Odxlstcv2;;
82
83 let IN_SYM_0=prove(`a IN A ==> (-- a) IN  IMAGE (\x:real^N. -- x) A`,
84 REWRITE_TAC[IMAGE;IN_ELIM_THM;VECTOR_ARITH`(--a= --b)<=> (a=b:real^N)`]
85 THEN SET_TAC[]);;
86
87
88
89 let SUBSET_SYM_0=prove(`A SUBSET B ==> IMAGE (\x. -- x) A SUBSET IMAGE (\x:real^N. -- x) B`,
90 REWRITE_TAC[SUBSET;IMAGE;IN_ELIM_THM;VECTOR_ARITH`(--a= --b)<=> (a=b:real^N)`]
91 THEN REPEAT RESA_TAC
92 THEN ASM_SIMP_TAC[VECTOR_ARITH`(--a= --b)<=> (a=b:real^N)`]
93 THEN ASM_TAC
94 THEN SET_TAC[]);;
95
96 let SET_EQ_SYM_0=prove(`A = B ==> IMAGE (\x. -- x) A = IMAGE (\x:real^N. -- x) B`,
97 REWRITE_TAC[EXTENSION]
98 THEN REPEAT RESA_TAC
99 THEN EQ_TAC
100 THEN ASM_SIMP_TAC[VECTOR_ARITH`(--a= --b)<=> (a=b:real^N)`]
101 THEN ASM_TAC
102 THEN SET_TAC[]);;
103
104
105 let IMAGE_V_SYM_0=prove(`IMAGE (\i. --(vv:num->real^N) i) (:num)= IMAGE (\x. -- x) (IMAGE vv (:num))`,
106 REWRITE_TAC[IMAGE;EXTENSION;IN_ELIM_THM]
107 THEN GEN_TAC
108 THEN EQ_TAC
109 THEN RESA_TAC
110 THENL[
111 EXISTS_TAC`(vv:num->real^N) x'`
112 THEN ASM_SIMP_TAC[VECTOR_ARITH`(--a= --b)<=> (a=b:real^N)`]
113 THEN EXISTS_TAC`x':num`
114 THEN ASM_REWRITE_TAC[];
115 EXISTS_TAC`x'':num`
116 THEN ASM_SIMP_TAC[VECTOR_ARITH`(--a= --b)<=> (a=b:real^N)`]]);;
117
118
119
120 let UNIONS_IMAGE_FAN_SYM_0=prove_by_refinement(`UNIONS (IMAGE (\i. {--vv i, --vv (SUC i)}) (:num))
121 = IMAGE (\x:real^N. -- x) (UNIONS (IMAGE (\i. {vv i, vv (SUC i)}) (:num)))`,
122 [REWRITE_TAC[EXTENSION]
123 THEN REWRITE_TAC[UNIONS;IMAGE;IN_ELIM_THM]
124 THEN GEN_TAC
125 THEN EQ_TAC
126 THEN RESA_TAC;
127
128 POP_ASSUM MP_TAC
129 THEN ASM_REWRITE_TAC[SET_RULE`a IN {b,c} <=> a=b\/ a=c`]
130 THEN RESA_TAC;
131
132 EXISTS_TAC`(vv:num->real^N) x'`
133 THEN ASM_SIMP_TAC[VECTOR_ARITH`(--a= --b)<=> (a=b:real^N)`]
134 THEN EXISTS_TAC`{(vv:num->real^N) x', vv (SUC x')}`
135 THEN ASM_REWRITE_TAC[SET_RULE`a IN {a,b}`]
136 THEN EXISTS_TAC`x':num`
137 THEN ASM_REWRITE_TAC[];
138
139 EXISTS_TAC`(vv:num->real^N) (SUC x')`
140 THEN ASM_SIMP_TAC[VECTOR_ARITH`(--a= --b)<=> (a=b:real^N)`]
141 THEN EXISTS_TAC`{(vv:num->real^N) x', vv (SUC x')}`
142 THEN ASM_REWRITE_TAC[SET_RULE`a IN {b,a}`]
143 THEN EXISTS_TAC`x':num`
144 THEN ASM_REWRITE_TAC[];
145 REMOVE_ASSUM_TAC
146 THEN POP_ASSUM MP_TAC
147 THEN ASM_REWRITE_TAC[SET_RULE`a IN {b,c} <=> a=b\/ a=c`]
148 THEN RESA_TAC;
149 EXISTS_TAC`{--(vv:num->real^N) x', --vv (SUC x')}`
150 THEN ASM_REWRITE_TAC[SET_RULE`a IN {a,b}`]
151 THEN EXISTS_TAC`x':num`
152 THEN ASM_REWRITE_TAC[];
153 EXISTS_TAC`{--(vv:num->real^N) x', --vv (SUC x')}`
154 THEN ASM_REWRITE_TAC[SET_RULE`a IN {b,a}`]
155 THEN EXISTS_TAC`x':num`
156 THEN ASM_REWRITE_TAC[]]);;
157
158
159 let FINITE_SYM_0=prove(`FINITE A ==> FINITE (IMAGE (\x:real^N. -- x) A)`,
160 SIMP_TAC[FINITE_IMAGE]);;
161
162 let CARD_SYM_0=prove(`FINITE A ==> CARD (IMAGE (\x:real^N. -- x) A)= CARD A`,
163 STRIP_TAC
164 THEN MATCH_MP_TAC CARD_IMAGE_INJ
165 THEN RESA_TAC
166 THEN ASM_SIMP_TAC[VECTOR_ARITH`(--a= --b)<=> (a=b:real^N)`]);;
167
168
169 let ELEMENT2_SYM_0=prove(`{--a, --b}= IMAGE (\x:real^N. --x) {a,b}`,
170 REWRITE_TAC[IMAGE;IN_ELIM_THM;EXTENSION;SET_RULE`a IN{b,c} <=> a=b\/ a=c`]
171 THEN GEN_TAC
172 THEN EQ_TAC
173 THEN REPEAT RESA_TAC
174 THEN ASM_SIMP_TAC[VECTOR_ARITH`(--a= --b)<=> (a=b:real^N)`]
175 THEN SET_TAC[]);;
176
177
178 let GRAPH_SYM_0=prove(`graph (IMAGE (\i. {(vv:num->real^N) i, vv (SUC i)}) (:num))
179 ==> 
180 graph (IMAGE (\i. {--vv i, --vv (SUC i)}) (:num))`,
181 REWRITE_TAC[GRAPH;HAS_SIZE;IMAGE;IN_ELIM_THM]
182 THEN STRIP_TAC
183 THEN GEN_TAC
184 THEN RESA_TAC
185 THEN SUBGOAL_THEN `(?x'. x' IN (:num) /\ {(vv:num->real^N) x, vv (SUC x)} = {vv x', vv (SUC x')})`ASSUME_TAC
186 THENL[
187 EXISTS_TAC`x:num`
188 THEN ASM_REWRITE_TAC[];
189 POP_ASSUM MP_TAC
190 THEN POP_ASSUM MP_TAC
191 THEN POP_ASSUM MP_TAC
192 THEN POP_ASSUM(fun th1-> REPEAT DISCH_TAC THEN
193  MRESA_TAC th1[`{(vv:num->real^N) x, vv (SUC x)}`])
194 THEN ASM_SIMP_TAC[ELEMENT2_SYM_0;FINITE_SYM_0;CARD_SYM_0]]);;
195
196
197 let NOT_SUBSET_EMPTY_SYM_0=prove(`~(A SUBSET {})
198 ==> ~(IMAGE (\x:real^N. --x) A SUBSET {})`,
199 REWRITE_TAC[SET_RULE`~(A SUBSET {}) <=> ?a. a IN A`]
200 THEN RESA_TAC
201 THEN EXISTS_TAC`-- a:real^N`
202 THEN ASM_SIMP_TAC[IN_SYM_0]);;
203
204
205 let NOT_EMPTY_SYM_0=prove(`~(A ={})
206 ==> ~(IMAGE (\x:real^N. --x) A = {})`,
207 REWRITE_TAC[SET_RULE`~(A = {}) <=> ?a. a IN A`]
208 THEN RESA_TAC
209 THEN EXISTS_TAC`-- a:real^N`
210 THEN ASM_SIMP_TAC[IN_SYM_0]);;
211
212
213 let REFL_SYM_0=prove(`IMAGE (\x:real^N. --x) (IMAGE (\x. --x) A) =A`,
214 REWRITE_TAC[IMAGE;IN_ELIM_THM;EXTENSION]
215 THEN GEN_TAC
216 THEN EQ_TAC
217 THEN RESA_TAC
218 THEN ASM_SIMP_TAC[VECTOR_ARITH`-- -- A=A:real^N`]
219 THEN EXISTS_TAC`--x:real^N`
220 THEN ASM_SIMP_TAC[VECTOR_ARITH`-- -- A=A:real^N`]
221 THEN EXISTS_TAC`x:real^N`
222 THEN ASM_REWRITE_TAC[]);;
223
224
225 let IMAGE_E_SYM_0=prove(`e IN IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)
226 ==> IMAGE (\x:real^N. --x) e IN IMAGE (\i. {vv i, vv (SUC i)}) (:num)`,
227 REWRITE_TAC[IMAGE;IN_ELIM_THM]
228 THEN REPEAT RESA_TAC
229 THEN EXISTS_TAC`x:num`
230 THEN ASM_REWRITE_TAC[EXTENSION;IN_ELIM_THM;SET_RULE`a IN {b,c} <=> a=b\/ a=c`]
231 THEN GEN_TAC
232 THEN EQ_TAC
233 THEN RESA_TAC
234 THEN ASM_SIMP_TAC[VECTOR_ARITH`(-- --a=a:real^N)`]
235 THENL[
236  EXISTS_TAC`-- (vv:num->real^N) x`
237 THEN ASM_SIMP_TAC[VECTOR_ARITH`(-- --a=a:real^N)`];
238  EXISTS_TAC`-- (vv:num->real^N) (SUC x)`
239 THEN ASM_SIMP_TAC[VECTOR_ARITH`(-- --a=a:real^N)`]]);;
240
241
242 let COLLINEAR_SYM_0=prove(`(collinear e) ==> (collinear (IMAGE (\x:real^N. --x) e))`,
243 REWRITE_TAC[collinear;IMAGE;IN_ELIM_THM]
244 THEN RESA_TAC
245 THEN EXISTS_TAC`--u:real^N`
246 THEN REPEAT RESA_TAC
247 THEN ASM_TAC
248 THEN STRIP_TAC
249 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
250 THEN MRESA_TAC th[`x':real^N`;`x'':real^N`])
251 THEN EXISTS_TAC`c:real`
252 THEN ASM_REWRITE_TAC[VECTOR_ARITH`c % --u = --(c % u)/\ -- a - -- b= --(a-b:real^N)`]);;
253
254
255
256
257 let UNION_SYM_0=prove(`IMAGE (\x:real^N. --x) (s UNION e) = (IMAGE (\x:real^N. --x) s) UNION (IMAGE (\x:real^N. --x) e)`,
258 SIMP_TAC[IMAGE_UNION]);;
259
260
261 let VEC0_SYM_0=prove(`IMAGE (\x:real^N. --x) {vec 0}= {vec 0}`,
262 REWRITE_TAC[IMAGE;IN_ELIM_THM;IN_SING;VECTOR_ARITH`-- vec 0=vec 0`;EXTENSION]
263 THEN GEN_TAC
264 THEN EQ_TAC
265 THEN RESA_TAC
266 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM;IN_SING;VECTOR_ARITH`-- vec 0=vec 0`;EXTENSION]
267 THEN EXISTS_TAC`vec 0:real^N`
268 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM;IN_SING;VECTOR_ARITH`-- vec 0=vec 0`;EXTENSION]);;
269
270
271 let VEC0_UNION_SYM_0=prove(`IMAGE (\x:real^N. --x) ({vec 0} UNION e) = {vec 0} UNION (IMAGE (\x:real^N. --x) e)`,
272 ASM_SIMP_TAC[UNION_SYM_0;VEC0_SYM_0]);;
273
274
275 let NOT_COLLINEAR_SYM_0=prove(`~(collinear e) ==> ~(collinear (IMAGE (\x:real^N. --x) e))`,
276 REPEAT STRIP_TAC
277 THEN MRESA_TAC(GEN_ALL COLLINEAR_SYM_0)[`IMAGE (\x:real^N. --x) (e:real^N->bool)`]
278 THEN POP_ASSUM MP_TAC
279 THEN ASM_SIMP_TAC[REFL_SYM_0]);;
280
281
282 let VEC0_NOT_COLLINEAR_SYM_0=prove(`~(collinear ({vec 0} UNION e)) ==> ~(collinear ({vec 0} UNION (IMAGE (\x:real^N. --x) e)))`,
283 REPEAT STRIP_TAC
284 THEN MRESAL_TAC(GEN_ALL NOT_COLLINEAR_SYM_0)[`{vec 0} UNION (e:real^N->bool)`]
285 [VEC0_UNION_SYM_0]);;
286
287
288 let IMAGE_E_UNION_V_SYM_0=prove(`e IN
289       IMAGE (\i. {--vv i, --vv (SUC i)}) (:num) UNION
290       {{v} | v IN IMAGE (\i. --vv i) (:num)}
291 ==> IMAGE (\x:real^N. --x) e IN IMAGE (\i. {vv i, vv (SUC i)}) (:num) UNION
292           {{v} | v IN IMAGE vv (:num)}`,
293 REWRITE_TAC[UNION;IN_ELIM_THM]
294 THEN MATCH_MP_TAC(SET_RULE`(A==>A1)/\ (B==>B1)==> (A\/B==> A1\/B1)`)
295 THEN ASM_SIMP_TAC[IMAGE_E_SYM_0]
296 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM;]
297 THEN RESA_TAC
298 THEN REWRITE_TAC[IN_SING]
299 THEN EXISTS_TAC`(vv:num->real^N) x`
300 THEN ASM_REWRITE_TAC[]
301 THEN STRIP_TAC
302 THENL[
303 EXISTS_TAC`x:num`
304 THEN ASM_REWRITE_TAC[];
305 REWRITE_TAC[EXTENSION;IN_ELIM_THM;IN_SING]
306 THEN GEN_TAC
307 THEN EQ_TAC
308 THEN RESA_TAC
309 THEN ASM_SIMP_TAC[VECTOR_ARITH`-- -- A=A:real^N`]
310 THEN EXISTS_TAC`-- (vv:num->real^N) x`
311 THEN ASM_SIMP_TAC[VECTOR_ARITH`-- -- A=A:real^N`]]);;
312
313 let LINAER_SYM_0=prove(`linear (\x:real^N. --x)`,
314 ASM_SIMP_TAC[VECTOR_ARITH`--(x+y)= -- x+ -- y:real^N`;linear]
315 THEN VECTOR_ARITH_TAC);;
316
317
318 let AFF_GE_COMMUTATIVE_SYM_0=prove(`aff_ge (IMAGE (\x. --x) e1) (IMAGE (\x. --x) e) = IMAGE (\x:real^N. --x) (aff_ge e1 e)`,
319 MATCH_MP_TAC AFF_GE_INJECTIVE_LINEAR_IMAGE
320 THEN ASM_REWRITE_TAC[VECTOR_ARITH`-- x= -- y==> x=y:real^N`;LINAER_SYM_0]);;
321
322
323
324 let AFF_GE_VEC0_SYM_0=prove(`aff_ge {vec 0} (IMAGE (\x. --x) e) = IMAGE (\x:real^N. --x) (aff_ge {vec 0} e)`,
325 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[GSYM VEC0_SYM_0]
326 THEN ASM_SIMP_TAC[AFF_GE_COMMUTATIVE_SYM_0]);;
327
328
329
330 let AFF_GT_COMMUTATIVE_SYM_0=prove(`aff_gt (IMAGE (\x. --x) e1) (IMAGE (\x. --x) e) = IMAGE (\x:real^N. --x) (aff_gt e1 e)`,
331 MATCH_MP_TAC AFF_GT_INJECTIVE_LINEAR_IMAGE
332 THEN ASM_REWRITE_TAC[VECTOR_ARITH`-- x= -- y==> x=y:real^N`;LINAER_SYM_0]);;
333
334
335
336 let AFF_GT_VEC0_SYM_0=prove(`aff_gt {vec 0} (IMAGE (\x. --x) e) = IMAGE (\x:real^N. --x) (aff_gt {vec 0} e)`,
337 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[GSYM VEC0_SYM_0]
338 THEN ASM_SIMP_TAC[AFF_GT_COMMUTATIVE_SYM_0]);;
339
340
341
342 let AFF_LE_COMMUTATIVE_SYM_0=prove(`aff_le (IMAGE (\x. --x) e1) (IMAGE (\x. --x) e) = IMAGE (\x:real^N. --x) (aff_le e1 e)`,
343 MATCH_MP_TAC AFF_LE_INJECTIVE_LINEAR_IMAGE
344 THEN ASM_REWRITE_TAC[VECTOR_ARITH`-- x= -- y==> x=y:real^N`;LINAER_SYM_0]);;
345
346
347
348 let AFF_LE_VEC0_SYM_0=prove(`aff_le {vec 0} (IMAGE (\x. --x) e) = IMAGE (\x:real^N. --x) (aff_le {vec 0} e)`,
349 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[GSYM VEC0_SYM_0]
350 THEN ASM_SIMP_TAC[AFF_LE_COMMUTATIVE_SYM_0]);;
351
352
353 let AFF_LT_COMMUTATIVE_SYM_0=prove(`aff_lt (IMAGE (\x. --x) e1) (IMAGE (\x. --x) e) = IMAGE (\x:real^N. --x) (aff_lt e1 e)`,
354 MATCH_MP_TAC AFF_LT_INJECTIVE_LINEAR_IMAGE
355 THEN ASM_REWRITE_TAC[VECTOR_ARITH`-- x= -- y==> x=y:real^N`;LINAER_SYM_0]);;
356
357
358
359 let AFF_LT_VEC0_SYM_0=prove(`aff_lt {vec 0} (IMAGE (\x. --x) e) = IMAGE (\x:real^N. --x) (aff_lt {vec 0} e)`,
360 GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[GSYM VEC0_SYM_0]
361 THEN ASM_SIMP_TAC[AFF_LT_COMMUTATIVE_SYM_0]);;
362
363
364 let INTER_SYM_0=prove(`IMAGE (\x:real^N. --x) (e1 INTER e2) =IMAGE (\x. --x) e1 INTER IMAGE (\x. --x) e2`,
365 MATCH_MP_TAC IMAGE_INTER_INJ
366 THEN ASM_REWRITE_TAC[]
367 THEN VECTOR_ARITH_TAC);;
368
369
370 let FAN_SYM_0=prove_by_refinement(`FAN
371       (vec 0, IMAGE (vv:num->real^3) (:num),
372        IMAGE (\i. {vv i, vv (SUC i)}) (:num))
373 ==> FAN
374       (vec 0, IMAGE (\i. -- vv i) (:num),
375        IMAGE (\i. {-- vv i, -- vv (SUC i)}) (:num))`,
376 [REWRITE_TAC[FAN;fan1;fan2;fan6;fan7]
377 THEN REPEAT RESA_TAC;
378
379 ASM_SIMP_TAC[UNIONS_IMAGE_FAN_SYM_0;IMAGE_V_SYM_0;SUBSET_SYM_0];
380
381 ASM_SIMP_TAC[GRAPH_SYM_0];
382
383 ASM_SIMP_TAC[IMAGE_V_SYM_0;FINITE_SYM_0];
384
385 POP_ASSUM MP_TAC
386 THEN ASM_SIMP_TAC[IMAGE_V_SYM_0;SUBSET_SYM_0;NOT_SUBSET_EMPTY_SYM_0];
387
388 POP_ASSUM MP_TAC
389 THEN ASM_SIMP_TAC[IMAGE_V_SYM_0;SUBSET_SYM_0;NOT_SUBSET_EMPTY_SYM_0]
390 THEN STRIP_TAC
391 THEN MRESAL_TAC (GEN_ALL IN_SYM_0)[`vec 0:real^3`;`IMAGE (\x:real^3. --x) (IMAGE (vv:num->real^3) (:num))`][VECTOR_ARITH`-- vec 0= vec 0`;REFL_SYM_0];
392
393 POP_ASSUM MP_TAC
394 THEN MRESA_TAC(GEN_ALL IMAGE_E_SYM_0)[`e:real^3->bool`;`vv:num->real^3`]
395 THEN REPLICATE_TAC (10-7)(POP_ASSUM MP_TAC)
396 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
397 THEN POP_ASSUM MP_TAC
398 THEN MRESA_TAC th[`IMAGE (\x:real^3. --x) e`])
399 THEN MRESAL_TAC(GEN_ALL VEC0_NOT_COLLINEAR_SYM_0)[`IMAGE (\x:real^3. --x) e`][REFL_SYM_0];
400
401 MRESA_TAC (GEN_ALL IMAGE_E_UNION_V_SYM_0)[`e1:real^3->bool`;`vv:num->real^3`]
402 THEN MRESA_TAC (GEN_ALL IMAGE_E_UNION_V_SYM_0)[`e2:real^3->bool`;`vv:num->real^3`]
403 THEN REPLICATE_TAC (12-8)(POP_ASSUM MP_TAC)
404 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
405 THEN MRESAL_TAC th[`IMAGE (\x:real^3. --x) e1`;`IMAGE (\x:real^3. --x) e2`][])
406 THEN POP_ASSUM MP_TAC
407 THEN ASM_SIMP_TAC[AFF_GE_VEC0_SYM_0;GSYM INTER_SYM_0]
408 THEN MRESAL_TAC(GEN_ALL SET_EQ_SYM_0)[`IMAGE (\x:real^3. --x) (aff_ge {vec 0} e1 INTER aff_ge {vec 0} e2)`;`IMAGE (\x:real^3. --x) (aff_ge {vec 0} (e1 INTER e2))`][REFL_SYM_0]]);;
409
410
411
412
413
414
415 let OPP_SUC_MOD=prove(`~(k=0)==>k - SUC ((k - SUC (x MOD k)) MOD k) = x MOD k`
416 ,
417 RESA_TAC
418 THEN MRESA_TAC DIVISION[`k- SUC(x MOD k)`;`k:num`]
419 THEN MRESA_TAC DIVISION[`x:num`;`k:num`]
420 THEN MP_TAC(ARITH_RULE`x MOD k < k ==> k- SUC(x MOD k)<k`)
421 THEN RESA_TAC
422 THEN MRESA_TAC MOD_LT[`k- SUC(x MOD k)`;`k:num`]
423 THEN MP_TAC(ARITH_RULE`x MOD k < k /\ (k - SUC (x MOD k)) MOD k < k
424 ==> (k - SUC ((k - SUC (x MOD k)) MOD k) = x MOD k)
425 <=> k -SUC( x MOD k) = (k - SUC (x MOD k)) MOD k`)
426 THEN RESA_TAC);;
427
428
429
430 let OPP_IMAGE_V_EQ=prove(`periodic vv k/\ ~(k=0)
431 ==>
432 IMAGE (\i. vv (k - SUC (i MOD k))) (:num)= IMAGE vv (:num)`,
433
434 REWRITE_TAC[IMAGE;IN_ELIM_THM;EXTENSION]
435 THEN REPEAT STRIP_TAC
436 THEN EQ_TAC
437 THENL[
438 RESA_TAC
439 THEN EXISTS_TAC`k - SUC (x' MOD k)`
440 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN(:num)`];
441 RESA_TAC
442 THEN EXISTS_TAC`k- SUC(x' MOD k)`
443 THEN ASM_SIMP_TAC[OPP_SUC_MOD;SET_RULE`(a:num)IN (:num)`;PERIODIC_PROPERTY]]);;
444
445
446 let MOD_SUC_MOD=prove(`1<k==> SUC (x MOD k) MOD k= SUC x MOD k`,
447 STRIP_TAC
448 THEN REWRITE_TAC[ADD1]
449 THEN MRESA_TAC MOD_LT[`1`;`k:num`]
450 THEN MP_TAC(ARITH_RULE`1<k==> ~(k=0)`)
451 THEN RESA_TAC
452 THEN MRESA_TAC MOD_ADD_MOD[`x:num`;`1:num`;`k:num`]);;
453
454 let SUC_MOD_EQ_MOD_SUC=prove(`1<k==>(k - SUC (x MOD k)) MOD k =(k - SUC x MOD k) MOD k`,
455 STRIP_TAC
456 THEN REWRITE_TAC[ADD1]
457 THEN MP_TAC(ARITH_RULE`1<k==> ~(k=0)/\ k - (k - 1 + 1)=0/\ k - 1 + 1=k/\ k-k=0/\ 0<k/\ k-0=k`)
458 THEN RESA_TAC
459 THEN MRESA_TAC MOD_ADD_MOD[`x:num`;`1:num`;`k:num`]
460 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
461 THEN MRESA_TAC MOD_LT[`1`;`k:num`]
462 THEN MRESA_TAC MOD_LT[`0`;`k:num`]
463 THEN MRESA_TAC DIVISION[`x:num`;`k:num`]
464 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`0:num`][ARITH_RULE`1*k+0=k`]
465 THEN MP_TAC(ARITH_RULE`x MOD k< k/\ 1<k==> x MOD k= k-1\/ x MOD k +1< k`)
466 THEN RESA_TAC
467 THEN MRESA_TAC MOD_LT[`x MOD k +1`;`k:num`]);;
468
469
470
471
472
473 let OPP_IMAGE_E_EQ=prove(`periodic (vv:num->real^3) k/\ 1<k
474 ==>
475 IMAGE (\i. {vv (k - SUC (i MOD k)), vv (k - SUC (SUC i MOD k))}) (:num)
476 =IMAGE (\i. {vv i, vv (SUC i)}) (:num)`,
477 ONCE_REWRITE_TAC[EXTENSION]
478 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM;]
479 THEN REPEAT STRIP_TAC
480 THEN EQ_TAC
481 THENL[
482 RESA_TAC
483 THEN EXISTS_TAC`(k - SUC(SUC(x' MOD k)MOD k))`
484 THEN ASM_SIMP_TAC[SET_RULE`(a:num)IN(:num)`;MOD_SUC_MOD]
485 THEN MP_TAC(ARITH_RULE`1<k==> ~(k=0)`)
486 THEN RESA_TAC
487 THEN MRESA_TAC DIVISION[`SUC x'`;`k:num`]
488 THEN MP_TAC(ARITH_RULE`SUC x' MOD k< k==> SUC (k - SUC (SUC x' MOD k)) =k - SUC x' MOD k`)
489 THEN RESA_TAC
490 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
491 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
492 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k - SUC (x' MOD k)`]
493 THEN MRESA_TAC th[`k - SUC x' MOD k`])
494 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
495 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
496 THEN ASM_SIMP_TAC[SUC_MOD_EQ_MOD_SUC];
497 RESA_TAC
498 THEN MP_TAC(ARITH_RULE`1<k==> ~(k=0)`)
499 THEN RESA_TAC
500 THEN EXISTS_TAC`(k - SUC(SUC(x' MOD k)MOD k))`
501 THEN ASM_SIMP_TAC[SET_RULE`(a:num)IN (:num)`]
502 THEN MRESA_TAC (GEN_ALL OPP_SUC_MOD)[`SUC(x' MOD k)`;`k:num`]
503 THEN MRESA_TAC DIVISION[`SUC(x' MOD k)`;`k:num`]
504 THEN MP_TAC(ARITH_RULE`SUC(x' MOD k) MOD k<k ==> SUC (k - SUC (SUC (x' MOD k) MOD k))= k-(SUC(x' MOD k) MOD k)`)
505 THEN RESA_TAC
506 THEN MRESA_TAC (GEN_ALL MOD_SUC_MOD)[`x':num`;`k:num`]
507 THEN MRESA_TAC (GEN_ALL SUC_MOD_EQ_MOD_SUC)[`SUC (k - SUC(SUC (x' MOD k)MOD k))`;`k:num`]
508 THEN MRESA_TAC (GEN_ALL SUC_MOD_EQ_MOD_SUC)[`x':num`;`k:num`]
509 THEN MRESA_TAC (GEN_ALL OPP_SUC_MOD)[`x':num`;`k:num`]
510 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
511 THEN POP_ASSUM(fun th-> MRESA_TAC th[`x':num`]
512 THEN MRESA_TAC th[`SUC x'`])
513 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
514 THEN ASM_REWRITE_TAC[]]);;
515
516 let OPP_IMAGE_F_EQ=prove(`periodic (vv:num->real^3) k/\ 1<k
517 ==>
518 IMAGE (\i.  vv (k - SUC (SUC i MOD k)),vv (k - SUC (i MOD k))) (:num)
519 =IMAGE (\i. vv i, vv (SUC i)) (:num)`,
520 ONCE_REWRITE_TAC[EXTENSION]
521 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM;]
522 THEN REPEAT STRIP_TAC
523 THEN EQ_TAC
524 THENL[
525 RESA_TAC
526 THEN EXISTS_TAC`(k - SUC(SUC(x' MOD k)MOD k))`
527 THEN ASM_SIMP_TAC[SET_RULE`(a:num)IN(:num)`;MOD_SUC_MOD]
528 THEN MP_TAC(ARITH_RULE`1<k==> ~(k=0)`)
529 THEN RESA_TAC
530 THEN MRESA_TAC DIVISION[`SUC x'`;`k:num`]
531 THEN MP_TAC(ARITH_RULE`SUC x' MOD k< k==> SUC (k - SUC (SUC x' MOD k)) =k - SUC x' MOD k`)
532 THEN RESA_TAC
533 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
534 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
535 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k - SUC (x' MOD k)`]
536 THEN MRESA_TAC th[`k - SUC x' MOD k`])
537 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
538 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
539 THEN ASM_SIMP_TAC[SUC_MOD_EQ_MOD_SUC];
540 RESA_TAC
541 THEN MP_TAC(ARITH_RULE`1<k==> ~(k=0)`)
542 THEN RESA_TAC
543 THEN EXISTS_TAC`(k - SUC(SUC(x' MOD k)MOD k))`
544 THEN ASM_SIMP_TAC[SET_RULE`(a:num)IN (:num)`]
545 THEN MRESA_TAC (GEN_ALL OPP_SUC_MOD)[`SUC(x' MOD k)`;`k:num`]
546 THEN MRESA_TAC DIVISION[`SUC(x' MOD k)`;`k:num`]
547 THEN MP_TAC(ARITH_RULE`SUC(x' MOD k) MOD k<k ==> SUC (k - SUC (SUC (x' MOD k) MOD k))= k-(SUC(x' MOD k) MOD k)`)
548 THEN RESA_TAC
549 THEN MRESA_TAC (GEN_ALL MOD_SUC_MOD)[`x':num`;`k:num`]
550 THEN MRESA_TAC (GEN_ALL SUC_MOD_EQ_MOD_SUC)[`SUC (k - SUC(SUC (x' MOD k)MOD k))`;`k:num`]
551 THEN MRESA_TAC (GEN_ALL SUC_MOD_EQ_MOD_SUC)[`x':num`;`k:num`]
552 THEN MRESA_TAC (GEN_ALL OPP_SUC_MOD)[`x':num`;`k:num`]
553 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
554 THEN POP_ASSUM(fun th-> MRESA_TAC th[`x':num`]
555 THEN MRESA_TAC th[`SUC x'`])
556 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
557 THEN ASM_REWRITE_TAC[]]);;
558
559
560 let OPP_IMAGE_F_EQ2=prove(`periodic (vv:num->real^3) k/\ 1<k
561 ==>
562 IMAGE (\i.  vv (k - SUC (i MOD k)),vv (k - SUC (SUC i MOD k))) (:num)
563 =IMAGE (\i. vv (SUC i),vv i ) (:num)`,
564 ONCE_REWRITE_TAC[EXTENSION]
565 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM;]
566 THEN REPEAT STRIP_TAC
567 THEN EQ_TAC
568 THENL[
569 RESA_TAC
570 THEN EXISTS_TAC`(k - SUC(SUC(x' MOD k)MOD k))`
571 THEN ASM_SIMP_TAC[SET_RULE`(a:num)IN(:num)`;MOD_SUC_MOD]
572 THEN MP_TAC(ARITH_RULE`1<k==> ~(k=0)`)
573 THEN RESA_TAC
574 THEN MRESA_TAC DIVISION[`SUC x'`;`k:num`]
575 THEN MP_TAC(ARITH_RULE`SUC x' MOD k< k==> SUC (k - SUC (SUC x' MOD k)) =k - SUC x' MOD k`)
576 THEN RESA_TAC
577 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
578 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
579 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k - SUC (x' MOD k)`]
580 THEN MRESA_TAC th[`k - SUC x' MOD k`])
581 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
582 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
583 THEN ASM_SIMP_TAC[SUC_MOD_EQ_MOD_SUC];
584 RESA_TAC
585 THEN MP_TAC(ARITH_RULE`1<k==> ~(k=0)`)
586 THEN RESA_TAC
587 THEN EXISTS_TAC`(k - SUC(SUC(x' MOD k)MOD k))`
588 THEN ASM_SIMP_TAC[SET_RULE`(a:num)IN (:num)`]
589 THEN MRESA_TAC (GEN_ALL OPP_SUC_MOD)[`SUC(x' MOD k)`;`k:num`]
590 THEN MRESA_TAC DIVISION[`SUC(x' MOD k)`;`k:num`]
591 THEN MP_TAC(ARITH_RULE`SUC(x' MOD k) MOD k<k ==> SUC (k - SUC (SUC (x' MOD k) MOD k))= k-(SUC(x' MOD k) MOD k)`)
592 THEN RESA_TAC
593 THEN MRESA_TAC (GEN_ALL MOD_SUC_MOD)[`x':num`;`k:num`]
594 THEN MRESA_TAC (GEN_ALL SUC_MOD_EQ_MOD_SUC)[`SUC (k - SUC(SUC (x' MOD k)MOD k))`;`k:num`]
595 THEN MRESA_TAC (GEN_ALL SUC_MOD_EQ_MOD_SUC)[`x':num`;`k:num`]
596 THEN MRESA_TAC (GEN_ALL OPP_SUC_MOD)[`x':num`;`k:num`]
597 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
598 THEN POP_ASSUM(fun th-> MRESA_TAC th[`x':num`]
599 THEN MRESA_TAC th[`SUC x'`])
600 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
601 THEN ASM_REWRITE_TAC[]]);;
602
603
604 let BALL_ANNULUS_SYM_0=prove(`-- v IN ball_annulus <=> v IN ball_annulus`,
605 ASM_SIMP_TAC[ball_annulus;IN_ELIM_THM;DIFF;cball;ball;dist;VECTOR_ARITH`vec 0- A= -- A/\ -- --A=A`;NORM_NEG]);;
606
607
608 let DIST_SYM_0=prove(`dist(-- a, -- b)= dist(a,b:real^N)`,
609 ASM_SIMP_TAC[dist;VECTOR_ARITH`--a - --b= --(a-b):real^N`;NORM_NEG]);;
610
611
612 let OPP_FAN_SYM_0=prove(` 3<=k /\ 
613 periodic vv k /\
614 FAN
615       (vec 0, IMAGE (vv:num->real^3) (:num),
616        IMAGE (\i. {vv i, vv (SUC i)}) (:num))
617 ==> FAN
618  (vec 0,IMAGE (\i. --vv (k - SUC (i MOD k))) (:num),
619   IMAGE (\i. {--vv (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))}) (:num))`,
620 STRIP_TAC
621 THEN POP_ASSUM MP_TAC
622 THEN MP_TAC(ARITH_RULE`3<=k==> ~(k=0)/\ 1<k`)
623 THEN RESA_TAC
624 THEN MRESA_TAC(GEN_ALL OPP_IMAGE_E_EQ)[`k:num`;`vv:num->real^3`]
625 THEN MRESA_TAC(GEN_ALL OPP_IMAGE_V_EQ)[`k:num`;`vv:num->real^3`]
626 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
627 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
628 THEN ASM_SIMP_TAC[FAN_SYM_0]);;
629
630
631
632 let ORD_PAIRS_E_VV=prove(`ord_pairs (IMAGE (\i. {vv i, vv (SUC i)}) (:num))
633 =IMAGE (\i. vv i, vv (SUC i)) (:num) UNION IMAGE (\i.  vv (SUC i),vv i) (:num)
634 `,
635 ONCE_REWRITE_TAC[EXTENSION]
636 THEN REWRITE_TAC[ord_pairs;IMAGE;IN_ELIM_THM;UNION;SET_RULE`{a,b}={c,d}<=> (a=c/\ b=d)\/ (a=d/\ b=c)`]
637 THEN GEN_TAC
638 THEN EQ_TAC
639 THEN RESA_TAC
640 THEN SET_TAC[]);;
641
642
643 let SELF_PAIR_EMPTY_VV=prove(`self_pairs (IMAGE (\i. {(vv:num->real^N) i, vv (SUC i)}) (:num)) (IMAGE vv (:num))={}`,
644 REWRITE_TAC[SET_RULE`A={}<=> ~(?a. a IN A)`;self_pairs;IN_ELIM_THM;EE;IMAGE]
645 THEN STRIP_TAC
646 THEN POP_ASSUM MP_TAC
647 THEN ASM_REWRITE_TAC[]
648 THEN POP_ASSUM (fun th-> STRIP_TAC
649 THEN MP_TAC th
650 THEN ASM_REWRITE_TAC[])
651 THEN EXISTS_TAC`(vv:num->real^N) (SUC x)`
652 THEN EXISTS_TAC`x:num`
653 THEN ASM_REWRITE_TAC[]);;
654
655
656 let DART_OF_HYP_VV=prove(`darts_of_hyp (IMAGE (\i. {(vv:num->real^N) i, vv (SUC i)}) (:num)) (IMAGE vv (:num))
657 = IMAGE (\i. vv i, vv (SUC i)) (:num) UNION IMAGE (\i.  vv (SUC i),vv i) (:num)`,
658 ASM_SIMP_TAC[darts_of_hyp;SELF_PAIR_EMPTY_VV;ORD_PAIRS_E_VV]
659 THEN SET_TAC[]);;
660
661
662 let PAIR_FUN_SYM_0=prove(`IMAGE (\i. -- vv1 i, -- vv2 i) (:num)
663 = IMAGE(\(x:real^N,y:real^N). --x, --y) (IMAGE (\i. vv1 i, vv2 i) (:num))`,
664 REWRITE_TAC[IMAGE;IN_ELIM_THM;EXTENSION]
665 THEN GEN_TAC
666 THEN EQ_TAC
667 THEN RESA_TAC
668 THENL[
669 EXISTS_TAC` (vv1 :num->real^N) x', (vv2 :num->real^N) x'`
670 THEN ASM_REWRITE_TAC[]
671 THEN EXISTS_TAC`x':num`
672 THEN ASM_REWRITE_TAC[];
673 EXISTS_TAC`x'':num`
674 THEN ASM_REWRITE_TAC[]]);;
675
676
677 let IN_PAIR_SYM_0=prove(`a IN A==>  (\(x:real^N,y:real^N). --x, --y) a IN IMAGE(\(x:real^N,y:real^N). --x, --y) A`,
678 ASM_SIMP_TAC[FUN_IN_IMAGE]);;
679
680 let ID_SYM_0_PRIME=prove(`(\(x:real^N,y). --x,--y) ((\(x,y). --x,--y) (a:real^N,b:real^N))
681 = (a,b)` ,
682 ASM_REWRITE_TAC[VECTOR_ARITH`-- -- a= a:real^N`]);;
683
684
685 let ID_SYM_0=prove(`(\(x:real^N,y). --x,--y) ((\(x,y). --x,--y) x)
686 = (x:real^N#real^N)`,
687 MP_TAC(SET_RULE`x=(FST (x:real^N#real^N),SND (x:real^N#real^N))`)
688 THEN STRIP_TAC
689 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
690 THEN ASM_REWRITE_TAC[VECTOR_ARITH`-- -- a= a:real^N`]);;
691
692
693 let ID_PAIR_SYM_0=prove(`IMAGE (\(x,y):real^N#real^N. --x,--y) (IMAGE (\(x,y). --x,--y) A)=A`,
694 REWRITE_TAC[IMAGE;IN_ELIM_THM;EXTENSION]
695 THEN GEN_TAC
696 THEN EQ_TAC
697 THEN RESA_TAC
698 THEN ASM_SIMP_TAC[ID_SYM_0]
699 THEN 
700 EXISTS_TAC`(\(x,y):real^N#real^N. --x,--y) x`
701 THEN ASM_SIMP_TAC[ID_SYM_0] 
702 THEN EXISTS_TAC`x:real^N#real^N`
703 THEN ASM_REWRITE_TAC[]);;
704
705
706 let IN_EQ_PAIR_SYM_0=prove(`  (\(x:real^N,y:real^N). --x, --y) a IN IMAGE(\(x:real^N,y:real^N). --x, --y) A<=> a IN A`,
707 EQ_TAC
708 THENL[
709 STRIP_TAC
710 THEN MRESAL_TAC (GEN_ALL IN_PAIR_SYM_0)[`(\(x:real^N,y:real^N). --x,--y) a`;`IMAGE(\(x:real^N,y:real^N). --x, --y) A`][ID_PAIR_SYM_0;ID_SYM_0];
711 ASM_SIMP_TAC[FUN_IN_IMAGE];]);;
712
713
714
715 let FST_SND_PAIR_SYM_0=prove(`FST ((\(x,y):real^N#real^N. --x,--y) x)= -- FST x
716 /\ SND ((\(x,y):real^N#real^N. --x,--y) x)= -- SND x`,
717 MP_TAC(SET_RULE`x=(FST (x:real^N#real^N),SND (x:real^N#real^N))`)
718 THEN STRIP_TAC
719 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
720 THEN REWRITE_TAC[]);;
721
722
723 let EQ_SET_PAIR_SYM_0=prove(`IMAGE (\(x,y):real^N#real^N. --x,--y) A =IMAGE (\(x,y). --x,--y) B <=> A=B`,
724 EQ_TAC
725 THEN RESA_TAC
726 THEN POP_ASSUM MP_TAC
727 THEN SIMP_TAC[EXTENSION;IN_EQ_PAIR_SYM_0]
728 THEN REPEAT STRIP_TAC
729 THEN POP_ASSUM(fun th-> MRESAL_TAC th[` (\(x,y):real^N#real^N. --x,--y) x:real^N#real^N`][IN_EQ_PAIR_SYM_0]));;
730
731
732 let EE_SYM_0=prove_by_refinement(`EE (--a) (IMAGE (\i. {--vv i, --vv (SUC i)}) (:num))
733 = IMAGE(\x:real^N. --x)(EE (a) (IMAGE (\i. {vv i, vv (SUC i)}) (:num))
734 )`,
735 [REWRITE_TAC[EXTENSION]
736 THEN REWRITE_TAC[EE;IMAGE;IN_ELIM_THM;SET_RULE`{a,b}={c,d}<=> (a=c/\b=d)\/ (a=d/\ b=c)`;VECTOR_ARITH`--a= --b<=> a=b:real^N`]
737 THEN GEN_TAC
738 THEN EQ_TAC
739 THEN RESA_TAC;
740 EXISTS_TAC`(vv:num->real^N) (SUC x')`
741 THEN ASM_REWRITE_TAC[]
742 THEN EXISTS_TAC`x':num`
743 THEN ASM_REWRITE_TAC[];
744 EXISTS_TAC`(vv:num->real^N) (x')`
745 THEN ASM_REWRITE_TAC[]
746 THEN EXISTS_TAC`x':num`
747 THEN ASM_REWRITE_TAC[];
748 EXISTS_TAC`(x'':num)`
749 THEN ASM_REWRITE_TAC[];
750 EXISTS_TAC`(x'':num)`
751 THEN ASM_REWRITE_TAC[]]);;
752
753 let EMPTY_EQ_SYM_0=prove(`
754 (IMAGE (\x:real^N. --x) A = {})
755 <=> (A ={})`,
756 EQ_TAC
757 THENL[
758 ONCE_REWRITE_TAC[GSYM CONTRAPOS_THM]
759 THEN ASM_SIMP_TAC[NOT_EMPTY_SYM_0];
760 ONCE_REWRITE_TAC[GSYM CONTRAPOS_THM]
761 THEN MRESAL_TAC (GEN_ALL NOT_EMPTY_SYM_0)[`IMAGE (\x. --x) (A:real^N->bool)`][REFL_SYM_0];]);;
762
763
764 let EE_EXPAND_BB_VV=prove_by_refinement(`scs_k_v39 s=k /\
765   IMAGE vv (:num) = V /\
766        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
767        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
768 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
769 ==> EE (vv i) E= {vv (SUC i),vv (i+k-1)}`,
770 [
771 REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF]
772 THEN STRIP_TAC
773 THEN ASM_TAC
774 THEN REPEAT RESA_TAC
775 THEN POP_ASSUM MP_TAC
776 THEN REWRITE_TAC[convex_local_fan]
777 THEN STRIP_TAC
778 THEN SUBGOAL_THEN`(vv:num->real^3) i IN V` ASSUME_TAC;
779 EXPAND_TAC"V"
780 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
781 THEN EXISTS_TAC`i:num`
782 THEN ASM_REWRITE_TAC[SET_RULE`(a:num) IN (:num)`];
783 MRESA_TAC (GEN_ALL Local_lemmas1.LOFA_IMP_EE_TWO_ELMS_INS_ND)[`V:real^3->bool`;`E:(real^3->bool)->bool`;`FF:real^3#real^3->bool`;`(vv:num->real^3) i`]
784 THEN MP_TAC(ARITH_RULE`~(k<=3)==> 3<k`)
785 THEN RESA_TAC
786 THEN MP_TAC Odxlstcv2.CARD_V_EQ_SCS_K1
787 THEN ASM_REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan]
788 THEN RESA_TAC
789 THEN MP_TAC Local_lemmas.ITER_CARD_MINUS1_EQ_IVS_RN1
790 THEN RESA_TAC
791 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(vv:num->real^3) i`])
792 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`;`(vv:num->real^3) i:real^3`;`vv:num->real^3`;`i:num`]
793 [BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan]
794 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`SUC 0`][ITER;ARITH_RULE`SUC 0 +i= SUC i`] THEN MRESA_TAC th[`k-1`])
795 THEN REWRITE_TAC[ARITH_RULE`k-1+i= i+k-1`]]);;
796
797
798
799
800
801 let AZIM_CYCLE1_SYM_0=prove(`
802 scs_k_v39 s=k /\
803   IMAGE vv (:num) = V /\
804        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
805        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
806 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
807 ==>
808 azim_cycle (IMAGE (\x. --x) (EE (vv i) E)) (vec 0) (--vv i) (--vv (SUC i)) =
809  --azim_cycle (EE (vv i) E) (vec 0) (vv i) (vv (SUC i))`,
810 RESA_TAC
811 THEN MP_TAC EE_EXPAND_BB_VV
812 THEN RESA_TAC
813 THEN ASM_SIMP_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET;GSYM ELEMENT2_SYM_0]);;
814
815
816
817 let AZIM_CYCLE2_SYM_0=prove(`
818 scs_k_v39 s=k /\
819   IMAGE vv (:num) = V /\
820        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
821        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
822 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
823 ==>
824 azim_cycle (IMAGE (\x. --x) (EE (vv i) E)) (vec 0) (--vv i) (--vv (i + k-1)) =
825  --azim_cycle (EE (vv i) E) (vec 0) (vv i) (vv (i+k-1))`,
826 RESA_TAC
827 THEN MP_TAC EE_EXPAND_BB_VV
828 THEN RESA_TAC
829 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
830 THEN ASM_SIMP_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET;GSYM ELEMENT2_SYM_0]);;
831
832
833
834
835 let IVS_AZIM_CYCLE_SYM_0=prove_by_refinement(`scs_k_v39 s=k /\
836   IMAGE vv (:num) = V /\
837        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
838        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
839 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
840 /\ x IN darts_of_hyp E V
841 ==> ivs_azim_cycle
842        (EE (--SND x) (IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))
843        (vec 0)
844        (--SND x)
845        (--FST x)
846 = -- ivs_azim_cycle (EE (SND x) E) (vec 0) (SND x) (FST x)`,
847 [
848 RESA_TAC
849 THEN POP_ASSUM MP_TAC
850 THEN MRESA_TAC(GEN_ALL DART_OF_HYP_VV)[`vv:num->real^3`]
851 THEN EXPAND_TAC"FF"
852 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[UNION;IN_ELIM_THM;IMAGE]
853 THEN REWRITE_TAC[IN_ELIM_THM]
854 THEN RESA_TAC;
855 MRESA_TAC (GEN_ALL EE_EXPAND_BB_VV)[`V:real^3->bool`;`FF:real^3#real^3->bool`;`s:scs_v39`;`E:(real^3->bool)->bool`;`vv:num->real^3`;`SUC x'`;`k:num`]
856 THEN ASM_SIMP_TAC[EE_SYM_0]
857 THEN SUBGOAL_THEN`vv (SUC x' + k - 1) = (vv:num->real^3) x'`ASSUME_TAC;
858
859 MP_TAC(ARITH_RULE`~(k<=3)==> SUC x' + k - 1= x' +k`)
860 THEN RESA_TAC
861 THEN ASM_TAC
862 THEN REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan;periodic]
863 THEN REPEAT RESA_TAC;
864
865 ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
866 THEN ASM_SIMP_TAC[Polar_fan.IVS_AZIM_CYCLE_TWO_POINT_SET;GSYM ELEMENT2_SYM_0];
867
868 MRESA_TAC (GEN_ALL EE_EXPAND_BB_VV)[`V:real^3->bool`;`FF:real^3#real^3->bool`;`s:scs_v39`;`E:(real^3->bool)->bool`;`vv:num->real^3`;`x':num`;`k:num`]
869 THEN ASM_SIMP_TAC[EE_SYM_0]
870 THEN ASM_SIMP_TAC[Polar_fan.IVS_AZIM_CYCLE_TWO_POINT_SET;GSYM ELEMENT2_SYM_0]]);;
871
872
873 let ff_FUN_COMMUTATIVE_SYM_0=prove(` 
874 scs_k_v39 s=k /\
875   IMAGE vv (:num) = V /\
876        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
877        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
878 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
879 ==> (!x. ff_of_hyp
880  (vec 0,IMAGE (\i. --vv i) (:num),IMAGE (\i. {--vv i, --vv (SUC i)}) (:num))
881  ((\(x,y). --x,--y) x) =
882  (\(x,y). --x,--y) (ff_of_hyp (vec 0,V,E) x))
883 `,
884 RESA_TAC
885 THEN GEN_TAC
886 THEN ASM_SIMP_TAC[ff_of_hyp2;DART_OF_HYP_VV;PAIR_FUN_SYM_0;IN_EQ_PAIR_SYM_0;GSYM IMAGE_UNION;FST_SND_PAIR_SYM_0]
887 THEN MP_TAC(SET_RULE`x IN darts_of_hyp (E:(real^3->bool)->bool) V \/ ~(x IN darts_of_hyp E V)`)
888 THEN RESA_TAC
889 THENL[
890 POP_ASSUM MP_TAC
891 THEN MRESA_TAC(GEN_ALL DART_OF_HYP_VV)[`vv:num->real^3`]
892 THEN RESA_TAC
893 THEN MP_TAC IVS_AZIM_CYCLE_SYM_0
894 THEN RESA_TAC;
895
896 POP_ASSUM MP_TAC
897 THEN MRESA_TAC(GEN_ALL DART_OF_HYP_VV)[`vv:num->real^3`]
898 THEN RESA_TAC]);;
899
900 let FUN_COMMUTATIVE=prove(`(!x. f(g x)= g(f1 x))
901 ==> !n x. (f POWER n) (g x) = g((f1 POWER n) x)`,
902 STRIP_TAC
903 THEN INDUCT_TAC
904 THENL[
905 ASM_REWRITE_TAC[POWER;I_DEF];
906 ASM_REWRITE_TAC[POWER;o_DEF]]);;
907
908
909 let ff_POWER_COMMUTATIVE_SYM_0=prove(`scs_k_v39 s=k /\
910   IMAGE vv (:num) = V /\
911        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
912        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
913 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
914 ==> 
915 !n x. (ff_of_hyp
916    (vec 0,
917     IMAGE (\i. --vv i) (:num),
918     IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)) POWER
919    n)
920   ((\(x,y). --x,--y) x)
921 = (\(x,y). --x,--y) ( (ff_of_hyp (vec 0,IMAGE vv (:num),IMAGE (\i. {vv i, vv (SUC i)}) (:num)) POWER
922    n)
923   x)
924 `,
925 RESA_TAC
926 THEN MATCH_MP_TAC FUN_COMMUTATIVE
927 THEN MATCH_MP_TAC ff_FUN_COMMUTATIVE_SYM_0
928 THEN ASM_REWRITE_TAC[]);;
929
930
931
932 let FACE_SYM_0=prove(`scs_k_v39 s=k /\
933   IMAGE vv (:num) = V /\
934        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
935        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
936 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
937 ==>
938 face
939  (hypermap
940  (HYP
941  (vec 0,IMAGE (\i. --vv i) (:num),IMAGE (\i. {--vv i, --vv (SUC i)}) (:num))))
942  ((\(x,y). --x,--y) x) =
943  IMAGE (\(x,y). --x,--y) (face (hypermap (HYP (vec 0,V,E))) x)`,
944 STRIP_TAC
945 THEN MP_TAC ff_POWER_COMMUTATIVE_SYM_0
946 THEN RESA_TAC
947 THEN ASM_TAC
948 THEN REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan;local_fan;]
949 THEN REPEAT RESA_TAC
950 THEN MP_TAC FAN_SYM_0
951 THEN RESA_TAC
952 THEN REWRITE_TAC[face]
953 THEN MRESAL_TAC(GEN_ALL Wrgcvdr_cizmrrh.ELMS_OF_HYPERMAP_HYP)[`vec 0:real^3`;`IMAGE (\i. --(vv:num->real^3) i) (:num)`;`IMAGE (\i. {--(vv:num->real^3) i, --vv (SUC i)}) (:num)`][orbit_map;IN_ELIM_THM;]
954 THEN MRESAL_TAC(GEN_ALL Wrgcvdr_cizmrrh.ELMS_OF_HYPERMAP_HYP)[`vec 0:real^3`;`IMAGE (vv:num->real^3) (:num)`;`IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`][orbit_map;IN_ELIM_THM;]
955 THEN GEN_REWRITE_TAC(RAND_CONV o ONCE_DEPTH_CONV)[IMAGE]
956 THEN REWRITE_TAC[EXTENSION;IN_ELIM_THM]
957 THEN GEN_TAC
958 THEN EQ_TAC
959 THEN RESA_TAC
960 THENL[
961 EXISTS_TAC`(ff_of_hyp (vec 0,V,E) POWER n) x`
962 THEN ASM_REWRITE_TAC[]
963 THEN EXISTS_TAC`n:num`
964 THEN ASM_REWRITE_TAC[];
965 EXISTS_TAC`n:num`
966 THEN ASM_REWRITE_TAC[]]);;
967
968
969
970
971 let OPP_IMAGE_V_EQ_NEG=prove(`periodic vv k/\ ~(k=0)
972 ==>
973 IMAGE (\i. -- (vv:num->real^3) (k - SUC (i MOD k))) (:num)= IMAGE (\i. -- vv i) (:num)`,
974
975 REWRITE_TAC[IMAGE;IN_ELIM_THM;EXTENSION]
976 THEN REPEAT STRIP_TAC
977 THEN EQ_TAC
978 THENL[
979 RESA_TAC
980 THEN EXISTS_TAC`k - SUC (x' MOD k)`
981 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN(:num)`];
982 RESA_TAC
983 THEN EXISTS_TAC`k- SUC(x' MOD k)`
984 THEN ASM_SIMP_TAC[OPP_SUC_MOD;SET_RULE`(a:num)IN (:num)`;PERIODIC_PROPERTY]]);;
985
986
987
988 let OPP_IMAGE_E_EQ_NEG=prove(`periodic (vv:num->real^3) k/\ 1<k
989 ==>
990 IMAGE (\i. {--vv (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))}) (:num)
991 =IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)`,
992 ONCE_REWRITE_TAC[EXTENSION]
993 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM;]
994 THEN REPEAT STRIP_TAC
995 THEN EQ_TAC
996 THENL[
997 RESA_TAC
998 THEN EXISTS_TAC`(k - SUC(SUC(x' MOD k)MOD k))`
999 THEN ASM_SIMP_TAC[SET_RULE`(a:num)IN(:num)`;MOD_SUC_MOD]
1000 THEN MP_TAC(ARITH_RULE`1<k==> ~(k=0)`)
1001 THEN RESA_TAC
1002 THEN MRESA_TAC DIVISION[`SUC x'`;`k:num`]
1003 THEN MP_TAC(ARITH_RULE`SUC x' MOD k< k==> SUC (k - SUC (SUC x' MOD k)) =k - SUC x' MOD k`)
1004 THEN RESA_TAC
1005 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
1006 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
1007 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k - SUC (x' MOD k)`]
1008 THEN MRESA_TAC th[`k - SUC x' MOD k`])
1009 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1010 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1011 THEN ASM_SIMP_TAC[SUC_MOD_EQ_MOD_SUC];
1012 RESA_TAC
1013 THEN MP_TAC(ARITH_RULE`1<k==> ~(k=0)`)
1014 THEN RESA_TAC
1015 THEN EXISTS_TAC`(k - SUC(SUC(x' MOD k)MOD k))`
1016 THEN ASM_SIMP_TAC[SET_RULE`(a:num)IN (:num)`]
1017 THEN MRESA_TAC (GEN_ALL OPP_SUC_MOD)[`SUC(x' MOD k)`;`k:num`]
1018 THEN MRESA_TAC DIVISION[`SUC(x' MOD k)`;`k:num`]
1019 THEN MP_TAC(ARITH_RULE`SUC(x' MOD k) MOD k<k ==> SUC (k - SUC (SUC (x' MOD k) MOD k))= k-(SUC(x' MOD k) MOD k)`)
1020 THEN RESA_TAC
1021 THEN MRESA_TAC (GEN_ALL MOD_SUC_MOD)[`x':num`;`k:num`]
1022 THEN MRESA_TAC (GEN_ALL SUC_MOD_EQ_MOD_SUC)[`SUC (k - SUC(SUC (x' MOD k)MOD k))`;`k:num`]
1023 THEN MRESA_TAC (GEN_ALL SUC_MOD_EQ_MOD_SUC)[`x':num`;`k:num`]
1024 THEN MRESA_TAC (GEN_ALL OPP_SUC_MOD)[`x':num`;`k:num`]
1025 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
1026 THEN POP_ASSUM(fun th-> MRESA_TAC th[`x':num`]
1027 THEN MRESA_TAC th[`SUC x'`])
1028 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
1029 THEN ASM_REWRITE_TAC[]]);;
1030
1031
1032 let OPP_IMAGE_F_EQ_NEG=prove(`periodic (vv:num->real^3) k/\ 1<k
1033 ==>
1034 IMAGE (\i.  --vv (k - SUC (SUC i MOD k)),--vv (k - SUC (i MOD k))) (:num)
1035 =IMAGE (\i. --vv i, --vv (SUC i)) (:num)`,
1036 ONCE_REWRITE_TAC[EXTENSION]
1037 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM;]
1038 THEN REPEAT STRIP_TAC
1039 THEN EQ_TAC
1040 THENL[
1041 RESA_TAC
1042 THEN EXISTS_TAC`(k - SUC(SUC(x' MOD k)MOD k))`
1043 THEN ASM_SIMP_TAC[SET_RULE`(a:num)IN(:num)`;MOD_SUC_MOD]
1044 THEN MP_TAC(ARITH_RULE`1<k==> ~(k=0)`)
1045 THEN RESA_TAC
1046 THEN MRESA_TAC DIVISION[`SUC x'`;`k:num`]
1047 THEN MP_TAC(ARITH_RULE`SUC x' MOD k< k==> SUC (k - SUC (SUC x' MOD k)) =k - SUC x' MOD k`)
1048 THEN RESA_TAC
1049 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
1050 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
1051 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k - SUC (x' MOD k)`]
1052 THEN MRESA_TAC th[`k - SUC x' MOD k`])
1053 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1054 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1055 THEN ASM_SIMP_TAC[SUC_MOD_EQ_MOD_SUC];
1056 RESA_TAC
1057 THEN MP_TAC(ARITH_RULE`1<k==> ~(k=0)`)
1058 THEN RESA_TAC
1059 THEN EXISTS_TAC`(k - SUC(SUC(x' MOD k)MOD k))`
1060 THEN ASM_SIMP_TAC[SET_RULE`(a:num)IN (:num)`]
1061 THEN MRESA_TAC (GEN_ALL OPP_SUC_MOD)[`SUC(x' MOD k)`;`k:num`]
1062 THEN MRESA_TAC DIVISION[`SUC(x' MOD k)`;`k:num`]
1063 THEN MP_TAC(ARITH_RULE`SUC(x' MOD k) MOD k<k ==> SUC (k - SUC (SUC (x' MOD k) MOD k))= k-(SUC(x' MOD k) MOD k)`)
1064 THEN RESA_TAC
1065 THEN MRESA_TAC (GEN_ALL MOD_SUC_MOD)[`x':num`;`k:num`]
1066 THEN MRESA_TAC (GEN_ALL SUC_MOD_EQ_MOD_SUC)[`SUC (k - SUC(SUC (x' MOD k)MOD k))`;`k:num`]
1067 THEN MRESA_TAC (GEN_ALL SUC_MOD_EQ_MOD_SUC)[`x':num`;`k:num`]
1068 THEN MRESA_TAC (GEN_ALL OPP_SUC_MOD)[`x':num`;`k:num`]
1069 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
1070 THEN POP_ASSUM(fun th-> MRESA_TAC th[`x':num`]
1071 THEN MRESA_TAC th[`SUC x'`])
1072 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
1073 THEN ASM_REWRITE_TAC[]]);;
1074
1075
1076
1077 let OPP_IMAGE_F_EQ2_NEG=prove(`periodic (vv:num->real^3) k/\ 1<k
1078 ==>
1079 IMAGE (\i.  --vv (k - SUC (i MOD k)),--vv (k - SUC (SUC i MOD k))) (:num)
1080 =IMAGE (\i. --vv (SUC i),--vv i ) (:num)`,
1081 ONCE_REWRITE_TAC[EXTENSION]
1082 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM;]
1083 THEN REPEAT STRIP_TAC
1084 THEN EQ_TAC
1085 THENL[
1086 RESA_TAC
1087 THEN EXISTS_TAC`(k - SUC(SUC(x' MOD k)MOD k))`
1088 THEN ASM_SIMP_TAC[SET_RULE`(a:num)IN(:num)`;MOD_SUC_MOD]
1089 THEN MP_TAC(ARITH_RULE`1<k==> ~(k=0)`)
1090 THEN RESA_TAC
1091 THEN MRESA_TAC DIVISION[`SUC x'`;`k:num`]
1092 THEN MP_TAC(ARITH_RULE`SUC x' MOD k< k==> SUC (k - SUC (SUC x' MOD k)) =k - SUC x' MOD k`)
1093 THEN RESA_TAC
1094 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
1095 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
1096 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k - SUC (x' MOD k)`]
1097 THEN MRESA_TAC th[`k - SUC x' MOD k`])
1098 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1099 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1100 THEN ASM_SIMP_TAC[SUC_MOD_EQ_MOD_SUC];
1101 RESA_TAC
1102 THEN MP_TAC(ARITH_RULE`1<k==> ~(k=0)`)
1103 THEN RESA_TAC
1104 THEN EXISTS_TAC`(k - SUC(SUC(x' MOD k)MOD k))`
1105 THEN ASM_SIMP_TAC[SET_RULE`(a:num)IN (:num)`]
1106 THEN MRESA_TAC (GEN_ALL OPP_SUC_MOD)[`SUC(x' MOD k)`;`k:num`]
1107 THEN MRESA_TAC DIVISION[`SUC(x' MOD k)`;`k:num`]
1108 THEN MP_TAC(ARITH_RULE`SUC(x' MOD k) MOD k<k ==> SUC (k - SUC (SUC (x' MOD k) MOD k))= k-(SUC(x' MOD k) MOD k)`)
1109 THEN RESA_TAC
1110 THEN MRESA_TAC (GEN_ALL MOD_SUC_MOD)[`x':num`;`k:num`]
1111 THEN MRESA_TAC (GEN_ALL SUC_MOD_EQ_MOD_SUC)[`SUC (k - SUC(SUC (x' MOD k)MOD k))`;`k:num`]
1112 THEN MRESA_TAC (GEN_ALL SUC_MOD_EQ_MOD_SUC)[`x':num`;`k:num`]
1113 THEN MRESA_TAC (GEN_ALL OPP_SUC_MOD)[`x':num`;`k:num`]
1114 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
1115 THEN POP_ASSUM(fun th-> MRESA_TAC th[`x':num`]
1116 THEN MRESA_TAC th[`SUC x'`])
1117 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
1118 THEN ASM_REWRITE_TAC[]]);;
1119
1120
1121
1122
1123 let CARD_PAIR_SYM_0=prove(`FINITE s ==> CARD (IMAGE (\(x,y):real^N#real^N. --x,--y) s) =CARD s`,
1124 STRIP_TAC
1125 THEN MATCH_MP_TAC CARD_IMAGE_INJ
1126 THEN RESA_TAC
1127 THEN RESA_TAC
1128 THEN ASM_SIMP_TAC[VECTOR_ARITH`(--a= --b)<=> (a=b:real^N)`;PAIR_EQ]
1129 THEN MP_TAC(SET_RULE`x=(FST (x:real^N#real^N),SND (x:real^N#real^N))`)
1130 THEN STRIP_TAC
1131 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
1132 THEN MP_TAC(SET_RULE`y=(FST (y:real^N#real^N),SND (y:real^N#real^N))`)
1133 THEN STRIP_TAC
1134 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
1135 THEN ASM_SIMP_TAC[VECTOR_ARITH`(--a= --b)<=> (a=b:real^N)`;PAIR_EQ]
1136 THEN ASM_REWRITE_TAC[GSYM PAIR_EQ]
1137 THEN RESA_TAC);;
1138
1139
1140
1141
1142 let FACE_ALL_SYM_0=prove(`scs_k_v39 s=k /\
1143   IMAGE vv (:num) = V /\
1144        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
1145        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
1146 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
1147 ==>
1148 (!x. face
1149  (hypermap
1150  (HYP
1151  (vec 0,IMAGE (\i. --vv i) (:num),IMAGE (\i. {--vv i, --vv (SUC i)}) (:num))))
1152  ((\(x,y). --x,--y) x) =
1153  IMAGE (\(x,y). --x,--y) (face (hypermap (HYP (vec 0,V,E))) x))`,
1154 REPEAT STRIP_TAC
1155 THEN MP_TAC ff_POWER_COMMUTATIVE_SYM_0
1156 THEN RESA_TAC
1157 THEN ASM_TAC
1158 THEN REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan;local_fan;]
1159 THEN REPEAT RESA_TAC
1160 THEN MP_TAC FAN_SYM_0
1161 THEN RESA_TAC
1162 THEN REWRITE_TAC[face]
1163 THEN MRESAL_TAC(GEN_ALL Wrgcvdr_cizmrrh.ELMS_OF_HYPERMAP_HYP)[`vec 0:real^3`;`IMAGE (\i. --(vv:num->real^3) i) (:num)`;`IMAGE (\i. {--(vv:num->real^3) i, --vv (SUC i)}) (:num)`][orbit_map;IN_ELIM_THM;]
1164 THEN MRESAL_TAC(GEN_ALL Wrgcvdr_cizmrrh.ELMS_OF_HYPERMAP_HYP)[`vec 0:real^3`;`IMAGE (vv:num->real^3) (:num)`;`IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`][orbit_map;IN_ELIM_THM;]
1165 THEN GEN_REWRITE_TAC(RAND_CONV o ONCE_DEPTH_CONV)[IMAGE]
1166 THEN REWRITE_TAC[EXTENSION;IN_ELIM_THM]
1167 THEN GEN_TAC
1168 THEN EQ_TAC
1169 THEN RESA_TAC
1170 THENL[
1171 EXISTS_TAC`(ff_of_hyp (vec 0,V,E) POWER n) x`
1172 THEN ASM_REWRITE_TAC[]
1173 THEN EXISTS_TAC`n:num`
1174 THEN ASM_REWRITE_TAC[];
1175 EXISTS_TAC`n:num`
1176 THEN ASM_REWRITE_TAC[]]);;
1177
1178
1179
1180
1181 let AZIM_CYCLE_SYM_0=prove_by_refinement(`scs_k_v39 s=k /\
1182   IMAGE vv (:num) = V /\
1183        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
1184        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
1185 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
1186 /\ x IN darts_of_hyp E V
1187 ==> azim_cycle
1188        (EE (--SND x) (IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))
1189        (vec 0)
1190        (--SND x)
1191        (--FST x)
1192 = -- azim_cycle (EE (SND x) E) (vec 0) (SND x) (FST x)`,
1193 [RESA_TAC
1194 THEN POP_ASSUM MP_TAC
1195 THEN MRESA_TAC(GEN_ALL DART_OF_HYP_VV)[`vv:num->real^3`]
1196 THEN EXPAND_TAC"FF"
1197 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[UNION;IN_ELIM_THM;IMAGE]
1198 THEN REWRITE_TAC[IN_ELIM_THM]
1199 THEN RESA_TAC;
1200
1201 MRESA_TAC (GEN_ALL EE_EXPAND_BB_VV)[`V:real^3->bool`;`FF:real^3#real^3->bool`;`s:scs_v39`;`E:(real^3->bool)->bool`;`vv:num->real^3`;`SUC x'`;`k:num`]
1202 THEN ASM_SIMP_TAC[EE_SYM_0]
1203 THEN SUBGOAL_THEN`vv (SUC x' + k - 1) = (vv:num->real^3) x'`ASSUME_TAC;
1204
1205 MP_TAC(ARITH_RULE`~(k<=3)==> SUC x' + k - 1= x' +k`)
1206 THEN RESA_TAC
1207 THEN ASM_TAC
1208 THEN REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan;periodic]
1209 THEN REPEAT RESA_TAC;
1210
1211 ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
1212 THEN ASM_SIMP_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET;GSYM ELEMENT2_SYM_0];
1213
1214 MRESA_TAC (GEN_ALL EE_EXPAND_BB_VV)[`V:real^3->bool`;`FF:real^3#real^3->bool`;`s:scs_v39`;`E:(real^3->bool)->bool`;`vv:num->real^3`;`x':num`;`k:num`]
1215 THEN ASM_SIMP_TAC[EE_SYM_0]
1216 THEN ASM_SIMP_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET;GSYM ELEMENT2_SYM_0]
1217 ]);;
1218
1219
1220
1221
1222
1223 let FST_SND_EQ_PAIR_SYM_0=prove(`(\(x,y):real^N#real^N. --x,--y)x= --FST x,--SND x`,
1224  MP_TAC(SET_RULE`x=(FST (x:real^N#real^N),SND (x:real^N#real^N))`)
1225 THEN STRIP_TAC
1226 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
1227 THEN REWRITE_TAC[]);;
1228
1229
1230
1231 let SYM_AZIM_CYCLE_SYM_0=prove_by_refinement(`scs_k_v39 s=k /\
1232   IMAGE vv (:num) = V /\
1233        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
1234        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
1235 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
1236 /\ x IN darts_of_hyp E V
1237 ==> azim_cycle
1238        (EE (--FST x) (IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))
1239        (vec 0)
1240        (--FST x)
1241        (--SND x)
1242 = -- azim_cycle (EE (FST x) E) (vec 0) (FST x) (SND x)`,
1243 [RESA_TAC
1244 THEN POP_ASSUM MP_TAC
1245 THEN MRESA_TAC(GEN_ALL DART_OF_HYP_VV)[`vv:num->real^3`]
1246 THEN EXPAND_TAC"FF"
1247 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[UNION;IN_ELIM_THM;IMAGE]
1248 THEN REWRITE_TAC[IN_ELIM_THM]
1249 THEN RESA_TAC;
1250
1251 MRESA_TAC (GEN_ALL EE_EXPAND_BB_VV)[`V:real^3->bool`;`FF:real^3#real^3->bool`;`s:scs_v39`;`E:(real^3->bool)->bool`;`vv:num->real^3`;`x':num`;`k:num`]
1252 THEN ASM_SIMP_TAC[EE_SYM_0]
1253 THEN ASM_SIMP_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET;GSYM ELEMENT2_SYM_0];
1254 MRESA_TAC (GEN_ALL EE_EXPAND_BB_VV)[`V:real^3->bool`;`FF:real^3#real^3->bool`;`s:scs_v39`;`E:(real^3->bool)->bool`;`vv:num->real^3`;`SUC x'`;`k:num`]
1255 THEN ASM_SIMP_TAC[EE_SYM_0]
1256 THEN SUBGOAL_THEN`vv (SUC x' + k - 1) = (vv:num->real^3) x'`ASSUME_TAC;
1257
1258
1259 MP_TAC(ARITH_RULE`~(k<=3)==> SUC x' + k - 1= x' +k`)
1260 THEN RESA_TAC
1261 THEN ASM_TAC
1262 THEN REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan;periodic]
1263 THEN REPEAT RESA_TAC;
1264
1265 ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
1266 THEN ASM_SIMP_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET;GSYM ELEMENT2_SYM_0];
1267 ]);;
1268
1269
1270 let NODE_MAP_SYM_0=prove(`scs_k_v39 s=k /\
1271   IMAGE vv (:num) = V /\
1272        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
1273        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
1274 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
1275 ==>
1276 (!x. (node_map
1277  (hypermap
1278  (HYP
1279  (vec 0,IMAGE (\i. --vv i) (:num),IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))))
1280 ((\(x,y). --x,--y) x)
1281 = (\(x,y). --x,--y) (node_map (hypermap (HYP (vec 0,V,E))) x))`,
1282 STRIP_TAC
1283 THEN GEN_TAC
1284 THEN POP_ASSUM(fun th->
1285 MP_TAC th
1286 THEN ASSUME_TAC th
1287 THEN REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan;local_fan;]
1288 THEN REPEAT RESA_TAC
1289 )
1290 THEN ASM_TAC
1291 THEN REPEAT RESA_TAC
1292 THEN MP_TAC FAN_SYM_0
1293 THEN RESA_TAC
1294 THEN ASM_SIMP_TAC[Wrgcvdr_cizmrrh.ELMS_OF_HYPERMAP_HYP;FUN_EQ_THM]
1295 THEN MP_TAC(SET_RULE`x=(FST (x:real^3#real^3),SND (x:real^3#real^3))`)
1296 THEN STRIP_TAC
1297 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
1298 THEN ASM_SIMP_TAC[nn_of_hyp;]
1299 THEN POP_ASSUM MP_TAC
1300 THEN REMOVE_ASSUM_TAC
1301 THEN REMOVE_ASSUM_TAC
1302 THEN REMOVE_ASSUM_TAC
1303 THEN STRIP_TAC
1304 THEN ASM_SIMP_TAC[ff_of_hyp2;DART_OF_HYP_VV;PAIR_FUN_SYM_0;IN_EQ_PAIR_SYM_0;GSYM IMAGE_UNION;FST_SND_PAIR_SYM_0;Wrgcvdr_cizmrrh.ELMS_OF_HYPERMAP_HYP]
1305 THEN MRESA_TAC(GEN_ALL DART_OF_HYP_VV)[`vv:num->real^3`]
1306 THEN ASM_SIMP_TAC[GSYM FST_SND_EQ_PAIR_SYM_0;IN_EQ_PAIR_SYM_0]
1307 THEN MP_TAC(SET_RULE`x IN FF UNION IMAGE (\i. (vv:num->real^3) (SUC i),vv i) (:num)
1308 \/ ~(x IN FF UNION IMAGE (\i. vv (SUC i),vv i) (:num))`)
1309 THEN RESA_TAC
1310 THEN MP_TAC SYM_AZIM_CYCLE_SYM_0
1311 THEN RESA_TAC);;
1312
1313
1314
1315 let IMAGE_NODE_SYM_0=prove(`scs_k_v39 s=k /\
1316   IMAGE vv (:num) = V /\
1317        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
1318        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
1319 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
1320 ==>
1321 (!A. IMAGE (node_map
1322  (hypermap
1323  (HYP
1324  (vec 0,IMAGE (\i. --vv i) (:num),IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))))
1325 (IMAGE (\(x,y). --x,--y) A)
1326 = IMAGE (\(x,y). --x,--y) (IMAGE (node_map (hypermap (HYP (vec 0,V,E)))) A))`,
1327 RESA_TAC
1328 THEN GEN_TAC
1329 THEN ONCE_REWRITE_TAC[IMAGE;IN_ELIM_THM]
1330 THEN REWRITE_TAC[EXTENSION;IN_ELIM_THM]
1331 THEN GEN_TAC
1332 THEN EQ_TAC
1333 THEN RESA_TAC
1334 THENL[
1335 POP_ASSUM MP_TAC
1336 THEN POP_ASSUM MP_TAC
1337 THEN GEN_REWRITE_TAC(LAND_CONV o  DEPTH_CONV)[IMAGE;IN_ELIM_THM]
1338 THEN REPEAT RESA_TAC
1339 THEN MP_TAC NODE_MAP_SYM_0
1340 THEN RESA_TAC
1341 THEN EXISTS_TAC`node_map (hypermap (HYP (vec 0,V,E))) x''`
1342 THEN ASM_REWRITE_TAC[IN_ELIM_THM;IMAGE]
1343 THEN EXISTS_TAC`x'':real^3#real^3`
1344 THEN ASM_REWRITE_TAC[];
1345
1346 POP_ASSUM MP_TAC
1347 THEN POP_ASSUM MP_TAC
1348 THEN GEN_REWRITE_TAC(LAND_CONV o  DEPTH_CONV)[IMAGE;IN_ELIM_THM]
1349 THEN REPEAT RESA_TAC
1350 THEN MP_TAC NODE_MAP_SYM_0
1351 THEN RESA_TAC
1352 THEN EXISTS_TAC`(\(x,y):real^3#real^3. --x,--y) x''`
1353 THEN ASM_REWRITE_TAC[]
1354 THEN ASM_REWRITE_TAC[IN_ELIM_THM;IMAGE]
1355 THEN EXISTS_TAC`x'':real^3#real^3`
1356 THEN ASM_REWRITE_TAC[]]);;
1357
1358
1359
1360 let COMMUTATIVE_POINT_PAIR_0=prove(`(\(x,y):real^N#real^N. --x,--y) a= b <=> a= (\(x,y). --x,--y) b `,
1361 EQ_TAC
1362 THENL[
1363 STRIP_TAC
1364 THEN MRESA_TAC(GEN_ALL ID_SYM_0)[`a:real^N#real^N`];
1365 STRIP_TAC
1366 THEN MRESA_TAC(GEN_ALL ID_SYM_0)[`b:real^N#real^N`]]);;
1367
1368
1369 let EDGE_MAP_SYM_0=prove(`scs_k_v39 s=k /\
1370   IMAGE vv (:num) = V /\
1371        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
1372        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
1373 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
1374 ==>
1375 (!x. (edge_map
1376  (hypermap
1377  (HYP
1378  (vec 0,IMAGE (\i. --vv i) (:num),IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))))
1379 ((\(x,y). --x,--y) x)
1380 = (\(x,y). --x,--y) (edge_map (hypermap (HYP (vec 0,V,E))) x))`,
1381 STRIP_TAC
1382 THEN GEN_TAC
1383 THEN POP_ASSUM(fun th->
1384 MP_TAC th
1385 THEN ASSUME_TAC th
1386 THEN REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan;local_fan;]
1387 THEN REPEAT RESA_TAC
1388 )
1389 THEN ASM_TAC
1390 THEN REPEAT RESA_TAC
1391 THEN MP_TAC FAN_SYM_0
1392 THEN RESA_TAC
1393 THEN ASM_SIMP_TAC[Wrgcvdr_cizmrrh.ELMS_OF_HYPERMAP_HYP;FUN_EQ_THM]
1394 THEN MP_TAC(SET_RULE`x=(FST (x:real^3#real^3),SND (x:real^3#real^3))`)
1395 THEN STRIP_TAC
1396 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
1397 THEN ASM_SIMP_TAC[ee_of_hyp;]
1398 THEN POP_ASSUM MP_TAC
1399 THEN REMOVE_ASSUM_TAC
1400 THEN REMOVE_ASSUM_TAC
1401 THEN REMOVE_ASSUM_TAC
1402 THEN STRIP_TAC
1403 THEN ASM_SIMP_TAC[ff_of_hyp2;DART_OF_HYP_VV;PAIR_FUN_SYM_0;IN_EQ_PAIR_SYM_0;GSYM IMAGE_UNION;FST_SND_PAIR_SYM_0;Wrgcvdr_cizmrrh.ELMS_OF_HYPERMAP_HYP]
1404 THEN MRESA_TAC(GEN_ALL DART_OF_HYP_VV)[`vv:num->real^3`]
1405 THEN ASM_SIMP_TAC[GSYM FST_SND_EQ_PAIR_SYM_0;IN_EQ_PAIR_SYM_0]
1406 THEN MP_TAC(SET_RULE`x IN FF UNION IMAGE (\i. (vv:num->real^3) (SUC i),vv i) (:num)
1407 \/ ~(x IN FF UNION IMAGE (\i. vv (SUC i),vv i) (:num))`)
1408 THEN RESA_TAC);;
1409
1410
1411
1412 let EDGE_POWER_MAP_SYM_0=prove(`scs_k_v39 s=k /\
1413   IMAGE vv (:num) = V /\
1414        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
1415        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
1416 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
1417 ==>
1418 (!n x. (edge_map
1419  (hypermap
1420  (HYP
1421  (vec 0,IMAGE (\i. --vv i) (:num),IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))) POWER n)
1422 ((\(x,y). --x,--y) x)
1423 = (\(x,y). --x,--y) ((edge_map (hypermap (HYP (vec 0,V,E))) POWER n) x))`,
1424 RESA_TAC
1425 THEN MATCH_MP_TAC FUN_COMMUTATIVE
1426 THEN MATCH_MP_TAC EDGE_MAP_SYM_0
1427 THEN ASM_REWRITE_TAC[]);;
1428
1429
1430 let NODE_POWER_MAP_SYM_0=prove(`scs_k_v39 s=k /\
1431   IMAGE vv (:num) = V /\
1432        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
1433        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
1434 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
1435 ==>
1436 (!n x. (node_map
1437  (hypermap
1438  (HYP
1439  (vec 0,IMAGE (\i. --vv i) (:num),IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))) POWER n)
1440 ((\(x,y). --x,--y) x)
1441 = (\(x,y). --x,--y) ((node_map (hypermap (HYP (vec 0,V,E))) POWER n) x))`,
1442 RESA_TAC
1443 THEN MATCH_MP_TAC FUN_COMMUTATIVE
1444 THEN MATCH_MP_TAC NODE_MAP_SYM_0
1445 THEN ASM_REWRITE_TAC[]);;
1446
1447
1448
1449
1450
1451 let LOCAL_FAN_SYM_0=prove_by_refinement(`scs_k_v39 s=k /\
1452   IMAGE vv (:num) = V /\
1453        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
1454        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
1455 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
1456 ==> local_fan
1457  (IMAGE (\i. --vv (k - SUC (i MOD k))) (:num),
1458   IMAGE (\i. {--vv (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))}) (:num),
1459   IMAGE (\i. --vv (k - SUC (SUC i MOD k)),--vv (k - SUC (i MOD k))) (:num))`,
1460 [
1461
1462
1463 STRIP_TAC
1464 THEN POP_ASSUM(fun th-> 
1465 MP_TAC th
1466 THEN MP_TAC(ARITH_RULE`~(k<=3)==> 3<=k/\ 1<k`)
1467 THEN RESA_TAC
1468 THEN ASM_TAC
1469 THEN REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan;local_fan;]
1470 THEN REPEAT RESA_TAC
1471 THEN ASM_SIMP_TAC[local_fan;LET_DEF;LET_END_DEF;OPP_FAN_SYM_0]
1472 THEN ASSUME_TAC th)
1473 ;
1474
1475
1476 REPLICATE_TAC (16-12)(POP_ASSUM MP_TAC)
1477 THEN POP_ASSUM(fun th-> 
1478 REPEAT STRIP_TAC
1479 THEN MP_TAC th)
1480 THEN REPLICATE_TAC (15-12)(POP_ASSUM MP_TAC)
1481 THEN POP_ASSUM(fun th-> 
1482 REPEAT STRIP_TAC
1483 THEN POP_ASSUM MP_TAC
1484 THEN MP_TAC (SYM th))
1485 THEN MRESAL_TAC (GEN_ALL Lvducxu.FAN_DART_DARTS)[`vec 0:real^3`;`IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`;`IMAGE (vv:num->real^3) (:num)`][DART_OF_HYP_VV]
1486 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
1487 THEN MP_TAC OPP_FAN_SYM_0
1488 THEN RESA_TAC
1489 THEN MRESAL_TAC (GEN_ALL Lvducxu.FAN_DART_DARTS)[`vec 0:real^3`;`IMAGE (\i. {--(vv:num->real^3) (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))}) (:num)`;`IMAGE (\i. --(vv:num->real^3) (k - SUC (i MOD k))) (:num)`][DART_OF_HYP_VV]
1490 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
1491 THEN ASM_SIMP_TAC[IN_ELIM_THM;PAIR_FUN_SYM_0;OPP_IMAGE_F_EQ;OPP_IMAGE_F_EQ2]
1492 THEN GEN_REWRITE_TAC(RAND_CONV o LAND_CONV o DEPTH_CONV)[UNION;IN_ELIM_THM]
1493 THEN REPEAT RESA_TAC
1494 THEN EXISTS_TAC`(\(x:real^3,y:real^3). --x,--y) x`
1495 THEN ASM_SIMP_TAC[UNION;IN_ELIM_THM;IN_PAIR_SYM_0;]
1496 THEN MP_TAC FACE_SYM_0
1497 THEN REPEAT RESA_TAC
1498 THEN MP_TAC(ARITH_RULE`~(k<=3)==> ~(k=0)`)
1499 THEN RESA_TAC
1500 THEN ASM_SIMP_TAC[OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG]
1501 ;
1502
1503
1504
1505
1506 REPLICATE_TAC (16-12)(POP_ASSUM MP_TAC)
1507 THEN POP_ASSUM(fun th-> 
1508 REPEAT STRIP_TAC
1509 THEN MP_TAC th)
1510 THEN REPLICATE_TAC (15-12)(POP_ASSUM MP_TAC)
1511 THEN POP_ASSUM(fun th-> 
1512 REPEAT STRIP_TAC
1513 THEN POP_ASSUM MP_TAC
1514 THEN MP_TAC (SYM th))
1515 THEN MRESAL_TAC (GEN_ALL Lvducxu.FAN_DART_DARTS)[`vec 0:real^3`;`IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`;`IMAGE (vv:num->real^3) (:num)`][DART_OF_HYP_VV]
1516 THEN MP_TAC OPP_FAN_SYM_0
1517 THEN RESA_TAC
1518 THEN MRESAL_TAC (GEN_ALL Lvducxu.FAN_DART_DARTS)[`vec 0:real^3`;`IMAGE (\i. {--(vv:num->real^3) (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))}) (:num)`;`IMAGE (\i. --(vv:num->real^3) (k - SUC (i MOD k))) (:num)`][DART_OF_HYP_VV] 
1519 THEN ASM_SIMP_TAC[IN_ELIM_THM;PAIR_FUN_SYM_0;OPP_IMAGE_F_EQ;OPP_IMAGE_F_EQ2]
1520 THEN GEN_REWRITE_TAC(RAND_CONV o LAND_CONV o DEPTH_CONV)[UNION;IN_ELIM_THM]
1521 THEN REPEAT RESA_TAC
1522 THEN MP_TAC(ARITH_RULE`~(k<=3)==> ~(k=0)`)
1523 THEN RESA_TAC
1524 THEN ASM_TAC
1525 THEN REWRITE_TAC[dih2k]
1526 THEN REPEAT RESA_TAC
1527 THEN ASM_SIMP_TAC[OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG;OPP_IMAGE_F_EQ_NEG;OPP_IMAGE_F_EQ2_NEG;dih2k;PAIR_FUN_SYM_0;GSYM IMAGE_UNION;OPP_IMAGE_E_EQ;OPP_IMAGE_V_EQ;OPP_IMAGE_F_EQ;OPP_IMAGE_F_EQ2;]
1528 THEN REPEAT STRIP_TAC;
1529
1530
1531
1532
1533 MRESA_TAC Hypermap.node_map_and_darts[`hypermap
1534       (HYP
1535       (vec 0,
1536        IMAGE (\i. --vv (k - SUC (i MOD k))) (:num),
1537        IMAGE (\i. {--(vv:num->real^3) (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))})
1538        (:num)))`]
1539 THEN REMOVE_ASSUM_TAC
1540 THEN POP_ASSUM MP_TAC
1541 THEN ASM_SIMP_TAC[OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG;OPP_IMAGE_F_EQ_NEG;OPP_IMAGE_F_EQ2_NEG;dih2k;PAIR_FUN_SYM_0;GSYM IMAGE_UNION;OPP_IMAGE_E_EQ;OPP_IMAGE_V_EQ;OPP_IMAGE_F_EQ;OPP_IMAGE_F_EQ2;]
1542 THEN STRIP_TAC
1543 THEN MRESAL_TAC (GEN_ALL FINITE_IMAGE)[`(\(x,y):real^3#real^3. --x,--y)`;`IMAGE (\(x,y):real^3#real^3. --x,--y)(IMAGE (\i.  (vv:num->real^3) (SUC i),vv i) (:num) UNION FF)`][ID_PAIR_SYM_0]
1544 THEN MP_TAC(SET_RULE`FF SUBSET IMAGE (\i. (vv:num->real^3) (SUC i),vv i) (:num) UNION FF`)
1545 THEN RESA_TAC
1546 THEN MRESA_TAC(FINITE_SUBSET)[`FF:real^3#real^3->bool`;`IMAGE (\i. vv (SUC i),(vv:num->real^3) i) (:num) UNION FF`]
1547 THEN ASM_SIMP_TAC[CARD_PAIR_SYM_0]
1548 THEN ONCE_REWRITE_TAC[SET_RULE`A UNION B=B UNION A`]
1549 THEN REPLICATE_TAC (28-19)(POP_ASSUM MP_TAC)
1550 THEN POP_ASSUM(fun th-> 
1551 REPEAT STRIP_TAC
1552 THEN ASM_REWRITE_TAC[SYM th]);
1553
1554
1555
1556
1557 ASM_TAC
1558 THEN REWRITE_TAC[LET_DEF;LET_END_DEF;]
1559 THEN REPEAT RESA_TAC
1560 THEN MP_TAC FACE_ALL_SYM_0
1561 THEN RESA_TAC
1562 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`(\(x,y):real^3#real^3. --x,--y) x'`][ID_SYM_0])
1563 THEN MP_TAC IMAGE_NODE_SYM_0
1564 THEN RESA_TAC
1565 THEN ASM_SIMP_TAC[GSYM IMAGE_UNION]
1566 THEN MRESA_TAC (GEN_ALL IN_EQ_PAIR_SYM_0)[`x':real^3#real^3`;`IMAGE (\i. --vv (k - SUC (i MOD k)),--vv (k - SUC (SUC i MOD k)))
1567       (:num) UNION
1568       IMAGE (\i. --vv (k - SUC (SUC i MOD k)),--(vv:num->real^3) (k - SUC (i MOD k)))
1569       (:num)`]
1570 THEN POP_ASSUM MP_TAC
1571 THEN ASM_SIMP_TAC[OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG;OPP_IMAGE_F_EQ_NEG;OPP_IMAGE_F_EQ2_NEG;dih2k;PAIR_FUN_SYM_0;GSYM IMAGE_UNION;OPP_IMAGE_E_EQ;OPP_IMAGE_V_EQ;OPP_IMAGE_F_EQ;OPP_IMAGE_F_EQ2;ID_PAIR_SYM_0]
1572 THEN ONCE_REWRITE_TAC[SET_RULE`A UNION B= B UNION A`]
1573 THEN STRIP_TAC
1574 THEN REPLICATE_TAC (28-13)(POP_ASSUM MP_TAC)
1575 THEN POP_ASSUM(fun th-> 
1576 REPEAT STRIP_TAC
1577 THEN MRESA_TAC th[`((\(x,y):real^3#real^3. --x,--y) x')`]
1578 )
1579 THEN SET_TAC[]
1580 ;
1581
1582
1583
1584 REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
1585 THEN MP_TAC ff_POWER_COMMUTATIVE_SYM_0
1586 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.POWER_TO_ITER]
1587 THEN RESA_TAC
1588 THEN SUBGOAL_THEN `!n x.
1589           ITER n
1590           (ff_of_hyp
1591           (vec 0,
1592            IMAGE (\i. --vv i) (:num),
1593            IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))
1594           (x) =
1595           (\(x,y). --x,--y) (ITER n (ff_of_hyp (vec 0,V,E)) ((\(x,y). --x,--y) x))`
1596 ASSUME_TAC;
1597
1598
1599
1600 REPEAT GEN_TAC
1601 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`n:num`;`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0])
1602 ;
1603
1604
1605 MP_TAC FAN_SYM_0
1606 THEN RESA_TAC
1607 THEN MRESAL_TAC(GEN_ALL Wrgcvdr_cizmrrh.ELMS_OF_HYPERMAP_HYP)[`vec 0:real^3`;`IMAGE (\i. --(vv:num->real^3) i) (:num)`;`IMAGE (\i. {--(vv:num->real^3) i, --vv (SUC i)}) (:num)`][orbit_map;IN_ELIM_THM;]
1608 THEN MRESAL_TAC(GEN_ALL Wrgcvdr_cizmrrh.ELMS_OF_HYPERMAP_HYP)[`vec 0:real^3`;`IMAGE (vv:num->real^3) (:num)`;`IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`][]
1609 THEN MRESA_TAC Hypermap.node_map_and_darts[`hypermap
1610       (HYP
1611       (vec 0,
1612        IMAGE (\i. --vv (k - SUC (i MOD k))) (:num),
1613        IMAGE (\i. {--(vv:num->real^3) (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))})
1614        (:num)))`]
1615 THEN REMOVE_ASSUM_TAC
1616 THEN POP_ASSUM MP_TAC
1617 THEN ASM_SIMP_TAC[OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG;OPP_IMAGE_F_EQ_NEG;OPP_IMAGE_F_EQ2_NEG;dih2k;PAIR_FUN_SYM_0;GSYM IMAGE_UNION;OPP_IMAGE_E_EQ;OPP_IMAGE_V_EQ;OPP_IMAGE_F_EQ;OPP_IMAGE_F_EQ2;]
1618 THEN STRIP_TAC
1619 THEN MRESAL_TAC (GEN_ALL FINITE_IMAGE)[`(\(x,y):real^3#real^3. --x,--y)`;`IMAGE (\(x,y):real^3#real^3. --x,--y)(IMAGE (\i.  (vv:num->real^3) (SUC i),vv i) (:num) UNION FF)`][ID_PAIR_SYM_0]
1620 THEN MP_TAC(SET_RULE`FF SUBSET IMAGE (\i. (vv:num->real^3) (SUC i),vv i) (:num) UNION FF`)
1621 THEN RESA_TAC
1622 THEN MRESA_TAC(FINITE_SUBSET)[`FF:real^3#real^3->bool`;`IMAGE (\i. vv (SUC i),(vv:num->real^3) i) (:num) UNION FF`]
1623 THEN ASM_SIMP_TAC[CARD_PAIR_SYM_0;COMMUTATIVE_POINT_PAIR_0]
1624 THEN REPLICATE_TAC (39-14)(POP_ASSUM MP_TAC)
1625 THEN POP_ASSUM(fun th-> 
1626 REPEAT DISCH_TAC
1627 THEN MP_TAC th)
1628 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
1629 THEN REPEAT RESA_TAC;
1630
1631
1632
1633
1634 REPLICATE_TAC (43-39)(POP_ASSUM MP_TAC)
1635 THEN POP_ASSUM(fun th-> 
1636 REPEAT DISCH_TAC
1637 THEN MP_TAC(ISPEC `i:num` th))
1638 THEN ASM_REWRITE_TAC[]
1639 THEN GEN_TAC
1640 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0]);
1641
1642
1643
1644 REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
1645 THEN MP_TAC EDGE_POWER_MAP_SYM_0
1646 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.POWER_TO_ITER]
1647 THEN RESA_TAC
1648 THEN SUBGOAL_THEN `!n x. ITER n
1649           (edge_map
1650           (hypermap
1651           (HYP
1652           (vec 0,
1653            IMAGE (\i. --vv i) (:num),
1654            IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))))
1655           (x) =
1656           (\(x,y). --x,--y)
1657           (ITER n (edge_map (hypermap (HYP (vec 0,V,E)))) ((\(x,y). --x,--y) x))`
1658 ASSUME_TAC;
1659
1660
1661
1662 REPEAT GEN_TAC
1663 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`n:num`;`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0])
1664 ;
1665
1666
1667 ASM_SIMP_TAC[CARD_PAIR_SYM_0;COMMUTATIVE_POINT_PAIR_0]
1668 THEN REPLICATE_TAC (26-15)(POP_ASSUM MP_TAC)
1669 THEN POP_ASSUM(fun th-> 
1670 REPEAT DISCH_TAC
1671 THEN MP_TAC th)
1672 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
1673 THEN REPEAT RESA_TAC;
1674
1675
1676
1677 REPLICATE_TAC (30-26)(POP_ASSUM MP_TAC)
1678 THEN POP_ASSUM(fun th-> 
1679 REPEAT DISCH_TAC
1680 THEN MP_TAC(ISPEC `i:num` th))
1681 THEN ASM_REWRITE_TAC[]
1682 THEN GEN_TAC
1683 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0]);
1684
1685
1686
1687
1688
1689
1690 REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
1691 THEN MP_TAC NODE_POWER_MAP_SYM_0
1692 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.POWER_TO_ITER]
1693 THEN RESA_TAC
1694 THEN SUBGOAL_THEN `!n x. ITER n
1695           (node_map
1696           (hypermap
1697           (HYP
1698           (vec 0,
1699            IMAGE (\i. --vv i) (:num),
1700            IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))))
1701           (x) =
1702           (\(x,y). --x,--y)
1703           (ITER n (node_map (hypermap (HYP (vec 0,V,E)))) ((\(x,y). --x,--y) x))`
1704 ASSUME_TAC;
1705
1706
1707
1708 REPEAT GEN_TAC
1709 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`n:num`;`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0])
1710 ;
1711
1712
1713 ASM_SIMP_TAC[CARD_PAIR_SYM_0;COMMUTATIVE_POINT_PAIR_0]
1714 THEN REPLICATE_TAC (26-16)(POP_ASSUM MP_TAC)
1715 THEN POP_ASSUM(fun th-> 
1716 REPEAT DISCH_TAC
1717 THEN MP_TAC th)
1718 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
1719 THEN REPEAT RESA_TAC;
1720
1721
1722
1723 REPLICATE_TAC (30-26)(POP_ASSUM MP_TAC)
1724 THEN POP_ASSUM(fun th-> 
1725 REPEAT DISCH_TAC
1726 THEN MP_TAC(ISPEC `i:num` th))
1727 THEN ASM_REWRITE_TAC[]
1728 THEN GEN_TAC
1729 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0]);
1730
1731
1732
1733
1734
1735 (*******)
1736 MRESA_TAC Hypermap.node_map_and_darts[`hypermap
1737       (HYP
1738       (vec 0,
1739        IMAGE (\i. --vv (k - SUC (i MOD k))) (:num),
1740        IMAGE (\i. {--(vv:num->real^3) (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))})
1741        (:num)))`]
1742 THEN REMOVE_ASSUM_TAC
1743 THEN POP_ASSUM MP_TAC
1744 THEN ASM_SIMP_TAC[OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG;OPP_IMAGE_F_EQ_NEG;OPP_IMAGE_F_EQ2_NEG;dih2k;PAIR_FUN_SYM_0;GSYM IMAGE_UNION;OPP_IMAGE_E_EQ;OPP_IMAGE_V_EQ;OPP_IMAGE_F_EQ;OPP_IMAGE_F_EQ2;]
1745 THEN STRIP_TAC
1746 THEN MRESAL_TAC (GEN_ALL FINITE_IMAGE)[`(\(x,y):real^3#real^3. --x,--y)`;`IMAGE (\(x,y):real^3#real^3. --x,--y)(IMAGE (\i.  (vv:num->real^3) (SUC i),vv i) (:num) UNION FF)`][ID_PAIR_SYM_0]
1747 THEN MP_TAC(SET_RULE`FF SUBSET IMAGE (\i. (vv:num->real^3) (SUC i),vv i) (:num) UNION FF`)
1748 THEN RESA_TAC
1749 THEN MRESA_TAC(FINITE_SUBSET)[`FF:real^3#real^3->bool`;`IMAGE (\i. vv (SUC i),(vv:num->real^3) i) (:num) UNION FF`]
1750 THEN ASM_SIMP_TAC[CARD_PAIR_SYM_0]
1751 THEN ONCE_REWRITE_TAC[SET_RULE`A UNION B=B UNION A`]
1752 THEN REPLICATE_TAC (28-19)(POP_ASSUM MP_TAC)
1753 THEN POP_ASSUM(fun th-> 
1754 REPEAT STRIP_TAC
1755 THEN ASM_REWRITE_TAC[SYM th]);
1756
1757
1758
1759
1760 ASM_TAC
1761 THEN REWRITE_TAC[LET_DEF;LET_END_DEF;]
1762 THEN REPEAT RESA_TAC
1763 THEN MP_TAC FACE_ALL_SYM_0
1764 THEN RESA_TAC
1765 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`(\(x,y):real^3#real^3. --x,--y) x'`][ID_SYM_0])
1766 THEN MP_TAC IMAGE_NODE_SYM_0
1767 THEN RESA_TAC
1768 THEN ASM_SIMP_TAC[GSYM IMAGE_UNION]
1769 THEN MRESA_TAC (GEN_ALL IN_EQ_PAIR_SYM_0)[`x':real^3#real^3`;`IMAGE (\i. --vv (k - SUC (i MOD k)),--vv (k - SUC (SUC i MOD k)))
1770       (:num) UNION
1771       IMAGE (\i. --vv (k - SUC (SUC i MOD k)),--(vv:num->real^3) (k - SUC (i MOD k)))
1772       (:num)`]
1773 THEN POP_ASSUM MP_TAC
1774 THEN ASM_SIMP_TAC[OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG;OPP_IMAGE_F_EQ_NEG;OPP_IMAGE_F_EQ2_NEG;dih2k;PAIR_FUN_SYM_0;GSYM IMAGE_UNION;OPP_IMAGE_E_EQ;OPP_IMAGE_V_EQ;OPP_IMAGE_F_EQ;OPP_IMAGE_F_EQ2;ID_PAIR_SYM_0]
1775 THEN ONCE_REWRITE_TAC[SET_RULE`A UNION B= B UNION A`]
1776 THEN STRIP_TAC
1777 THEN REPLICATE_TAC (28-13)(POP_ASSUM MP_TAC)
1778 THEN POP_ASSUM(fun th-> 
1779 REPEAT STRIP_TAC
1780 THEN MRESA_TAC th[`((\(x,y):real^3#real^3. --x,--y) x')`]
1781 )
1782 THEN SET_TAC[]
1783 ;
1784
1785
1786
1787 REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
1788 THEN MP_TAC ff_POWER_COMMUTATIVE_SYM_0
1789 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.POWER_TO_ITER]
1790 THEN RESA_TAC
1791 THEN SUBGOAL_THEN `!n x.
1792           ITER n
1793           (ff_of_hyp
1794           (vec 0,
1795            IMAGE (\i. --vv i) (:num),
1796            IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))
1797           (x) =
1798           (\(x,y). --x,--y) (ITER n (ff_of_hyp (vec 0,V,E)) ((\(x,y). --x,--y) x))`
1799 ASSUME_TAC;
1800
1801
1802
1803 REPEAT GEN_TAC
1804 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`n:num`;`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0])
1805 ;
1806
1807
1808 MP_TAC FAN_SYM_0
1809 THEN RESA_TAC
1810 THEN MRESAL_TAC(GEN_ALL Wrgcvdr_cizmrrh.ELMS_OF_HYPERMAP_HYP)[`vec 0:real^3`;`IMAGE (\i. --(vv:num->real^3) i) (:num)`;`IMAGE (\i. {--(vv:num->real^3) i, --vv (SUC i)}) (:num)`][orbit_map;IN_ELIM_THM;]
1811 THEN MRESAL_TAC(GEN_ALL Wrgcvdr_cizmrrh.ELMS_OF_HYPERMAP_HYP)[`vec 0:real^3`;`IMAGE (vv:num->real^3) (:num)`;`IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`][]
1812 THEN MRESA_TAC Hypermap.node_map_and_darts[`hypermap
1813       (HYP
1814       (vec 0,
1815        IMAGE (\i. --vv (k - SUC (i MOD k))) (:num),
1816        IMAGE (\i. {--(vv:num->real^3) (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))})
1817        (:num)))`]
1818 THEN REMOVE_ASSUM_TAC
1819 THEN POP_ASSUM MP_TAC
1820 THEN ASM_SIMP_TAC[OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG;OPP_IMAGE_F_EQ_NEG;OPP_IMAGE_F_EQ2_NEG;dih2k;PAIR_FUN_SYM_0;GSYM IMAGE_UNION;OPP_IMAGE_E_EQ;OPP_IMAGE_V_EQ;OPP_IMAGE_F_EQ;OPP_IMAGE_F_EQ2;]
1821 THEN STRIP_TAC
1822 THEN MRESAL_TAC (GEN_ALL FINITE_IMAGE)[`(\(x,y):real^3#real^3. --x,--y)`;`IMAGE (\(x,y):real^3#real^3. --x,--y)(IMAGE (\i.  (vv:num->real^3) (SUC i),vv i) (:num) UNION FF)`][ID_PAIR_SYM_0]
1823 THEN MP_TAC(SET_RULE`FF SUBSET IMAGE (\i. (vv:num->real^3) (SUC i),vv i) (:num) UNION FF`)
1824 THEN RESA_TAC
1825 THEN MRESA_TAC(FINITE_SUBSET)[`FF:real^3#real^3->bool`;`IMAGE (\i. vv (SUC i),(vv:num->real^3) i) (:num) UNION FF`]
1826 THEN ASM_SIMP_TAC[CARD_PAIR_SYM_0;COMMUTATIVE_POINT_PAIR_0]
1827 THEN REPLICATE_TAC (39-14)(POP_ASSUM MP_TAC)
1828 THEN POP_ASSUM(fun th-> 
1829 REPEAT DISCH_TAC
1830 THEN MP_TAC th)
1831 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
1832 THEN REPEAT RESA_TAC;
1833
1834
1835
1836
1837 REPLICATE_TAC (43-39)(POP_ASSUM MP_TAC)
1838 THEN POP_ASSUM(fun th-> 
1839 REPEAT DISCH_TAC
1840 THEN MP_TAC(ISPEC `i:num` th))
1841 THEN ASM_REWRITE_TAC[]
1842 THEN GEN_TAC
1843 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0]);
1844
1845
1846
1847 REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
1848 THEN MP_TAC EDGE_POWER_MAP_SYM_0
1849 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.POWER_TO_ITER]
1850 THEN RESA_TAC
1851 THEN SUBGOAL_THEN `!n x. ITER n
1852           (edge_map
1853           (hypermap
1854           (HYP
1855           (vec 0,
1856            IMAGE (\i. --vv i) (:num),
1857            IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))))
1858           (x) =
1859           (\(x,y). --x,--y)
1860           (ITER n (edge_map (hypermap (HYP (vec 0,V,E)))) ((\(x,y). --x,--y) x))`
1861 ASSUME_TAC;
1862
1863
1864
1865 REPEAT GEN_TAC
1866 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`n:num`;`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0])
1867 ;
1868
1869
1870 ASM_SIMP_TAC[CARD_PAIR_SYM_0;COMMUTATIVE_POINT_PAIR_0]
1871 THEN REPLICATE_TAC (26-15)(POP_ASSUM MP_TAC)
1872 THEN POP_ASSUM(fun th-> 
1873 REPEAT DISCH_TAC
1874 THEN MP_TAC th)
1875 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
1876 THEN REPEAT RESA_TAC;
1877
1878
1879
1880 REPLICATE_TAC (30-26)(POP_ASSUM MP_TAC)
1881 THEN POP_ASSUM(fun th-> 
1882 REPEAT DISCH_TAC
1883 THEN MP_TAC(ISPEC `i:num` th))
1884 THEN ASM_REWRITE_TAC[]
1885 THEN GEN_TAC
1886 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0]);
1887
1888
1889
1890
1891
1892
1893 REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
1894 THEN MP_TAC NODE_POWER_MAP_SYM_0
1895 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.POWER_TO_ITER]
1896 THEN RESA_TAC
1897 THEN SUBGOAL_THEN `!n x. ITER n
1898           (node_map
1899           (hypermap
1900           (HYP
1901           (vec 0,
1902            IMAGE (\i. --vv i) (:num),
1903            IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))))
1904           (x) =
1905           (\(x,y). --x,--y)
1906           (ITER n (node_map (hypermap (HYP (vec 0,V,E)))) ((\(x,y). --x,--y) x))`
1907 ASSUME_TAC;
1908
1909
1910
1911 REPEAT GEN_TAC
1912 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`n:num`;`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0])
1913 ;
1914
1915
1916 ASM_SIMP_TAC[CARD_PAIR_SYM_0;COMMUTATIVE_POINT_PAIR_0]
1917 THEN REPLICATE_TAC (26-16)(POP_ASSUM MP_TAC)
1918 THEN POP_ASSUM(fun th-> 
1919 REPEAT DISCH_TAC
1920 THEN MP_TAC th)
1921 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
1922 THEN REPEAT RESA_TAC;
1923
1924
1925
1926 REPLICATE_TAC (30-26)(POP_ASSUM MP_TAC)
1927 THEN POP_ASSUM(fun th-> 
1928 REPEAT DISCH_TAC
1929 THEN MP_TAC(ISPEC `i:num` th))
1930 THEN ASM_REWRITE_TAC[]
1931 THEN GEN_TAC
1932 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0]);
1933
1934
1935
1936
1937 ]);;
1938
1939
1940
1941
1942
1943 let POINT_IN_AFF_LT_SYM_0=prove(` DISJOINT {vec 0,v1} {w2}
1944 ==> 
1945 -- w2 IN aff_lt {vec 0,v1} {w2}`,
1946 STRIP_TAC
1947 THEN ASM_SIMP_TAC[AFF_LT_2_1;IN_ELIM_THM]
1948 THEN EXISTS_TAC`&2`
1949 THEN EXISTS_TAC`&0`
1950 THEN EXISTS_TAC`-- &1`
1951 THEN REWRITE_TAC[REAL_ARITH`-- &1< &0/\ &2 + &0 + -- &1 = &1`]
1952 THEN VECTOR_ARITH_TAC);;
1953
1954
1955 let COLLINEAR_POINT_SYM_0=prove(`~collinear {vec 0, v1, w1} ==> ~collinear {vec 0, v1, --w1}`,
1956 REWRITE_TAC[COLLINEAR_LEMMA;IMAGE;IN_ELIM_THM;VECTOR_ARITH`-- a= vec 0<=> a= vec 0`]
1957 THEN RESA_TAC
1958 THEN STRIP_TAC
1959 THEN POP_ASSUM MP_TAC
1960 THEN POP_ASSUM(fun th-> STRIP_TAC
1961 THEN MP_TAC th 
1962 THEN ASM_REWRITE_TAC[])
1963 THEN MATCH_MP_TAC(SET_RULE`A==> B\/C\/A`)
1964 THEN EXISTS_TAC`--c:real`
1965 THEN POP_ASSUM MP_TAC
1966 THEN VECTOR_ARITH_TAC);;
1967
1968
1969 let AZIM_EQ_PI_POINT_SYM_0=prove(`~collinear {vec 0, v1, w1:real^3}
1970 ==> azim (vec 0) v1  w1 (--w1) = pi`,
1971 STRIP_TAC
1972 THEN MRESA_TAC(GEN_ALL COLLINEAR_POINT_SYM_0)[`v1:real^3`;`w1:real^3`]
1973 THEN ASM_SIMP_TAC[AZIM_EQ_PI]
1974 THEN MRESAL_TAC (GEN_ALL POINT_IN_AFF_LT_SYM_0)[`v1:real^3`;`-- w1:real^3`][VECTOR_ARITH`-- --A=A:real^3`]
1975 THEN POP_ASSUM MATCH_MP_TAC
1976 THEN ASM_SIMP_TAC[Fan.th3a]);;
1977
1978
1979
1980 let SUM_AZIM_SYM_0=prove(`~collinear {vec 0, v1, w1} /\ ~collinear {vec 0, v1, w2}
1981 /\ azim (vec 0) v1 w1 w2<= pi
1982 ==>  azim (vec 0) v1 w1 w2 + azim (vec 0) v1  w2 (--w1) = pi `,
1983 REPEAT STRIP_TAC
1984 THEN MRESA_TAC(GEN_ALL COLLINEAR_POINT_SYM_0)[`v1:real^3`;`w1:real^3`]
1985 THEN MRESA_TAC(GEN_ALL AZIM_EQ_PI_POINT_SYM_0)[`v1:real^3`;`w1:real^3`]
1986 THEN MRESA_TAC Fan.sum4_azim_fan[`vec 0:real^3`;`v1:real^3`;`w1:real^3`;`w2:real^3`;`--w1:real^3`]);;
1987
1988
1989
1990 let SUM_AZIM_SYM_0=prove(`~collinear {vec 0, v1, w1} /\ ~collinear {vec 0, v1, w2}
1991 /\ azim (vec 0) v1 w1 w2<= pi
1992 ==>  azim (vec 0) v1 w1 w2 + azim (vec 0) v1  w2 (--w1) = pi `,
1993 REPEAT STRIP_TAC
1994 THEN MRESA_TAC(GEN_ALL COLLINEAR_POINT_SYM_0)[`v1:real^3`;`w1:real^3`]
1995 THEN MRESA_TAC(GEN_ALL AZIM_EQ_PI_POINT_SYM_0)[`v1:real^3`;`w1:real^3`]
1996 THEN MRESA_TAC Fan.sum4_azim_fan[`vec 0:real^3`;`v1:real^3`;`w1:real^3`;`w2:real^3`;`--w1:real^3`]);;
1997
1998
1999
2000
2001 let AZIM_EQ_LE_SYM_0=prove(`~collinear {vec 0, v1, w1} /\ ~collinear {vec 0, v1, w2}
2002 /\ azim (vec 0) v1 w1 w2<= pi
2003 ==>  azim (vec 0) v1  (--w1) (--w2)=azim (vec 0) v1 w1 w2   `,
2004 STRIP_TAC
2005 THEN MP_TAC SUM_AZIM_SYM_0
2006 THEN RESA_TAC
2007 THEN MP_TAC(REAL_ARITH`&0<= azim (vec 0) v1 w1 w2/\ azim (vec 0) v1 w1 w2 + azim (vec 0) v1 w2 (--w1) = pi
2008 ==>  azim (vec 0) v1 w2 (--w1) <= pi`)
2009 THEN ASM_SIMP_TAC[azim]
2010 THEN RESA_TAC
2011 THEN MRESA_TAC(GEN_ALL COLLINEAR_POINT_SYM_0)[`v1:real^3`;`w1:real^3`]
2012 THEN MRESA_TAC (GEN_ALL SUM_AZIM_SYM_0)[`v1:real^3`;`--w1:real^3`;`w2:real^3`]
2013 THEN ASM_TAC
2014 THEN REAL_ARITH_TAC);;
2015
2016
2017 let AZIM_LE_PI_SYM_0=prove(`~collinear {vec 0, v1, w1} /\ ~collinear {vec 0, v1, w2}
2018 /\ azim (vec 0) v1 w1 w2<= pi
2019 ==>   azim (vec 0) v1  (--w1) (--w2) <= pi`,
2020 REPEAT STRIP_TAC
2021 THEN MP_TAC AZIM_EQ_LE_SYM_0
2022 THEN RESA_TAC);;
2023
2024
2025
2026
2027 let EQUI_FF_SYM_0=prove(`!(x:real^N#real^N). (SND x, FST x)IN IMAGE (\i. vv (SUC i),vv i) (:num) <=> x IN IMAGE (\i. vv i,vv (SUC i)) (:num)`,
2028 REWRITE_TAC[IMAGE;IN_ELIM_THM;PAIR_EQ]
2029 THEN GEN_TAC
2030 THEN EQ_TAC
2031 THEN RESA_TAC
2032 THENL[
2033 EXISTS_TAC`x':num`
2034 THEN ASM_SIMP_TAC[]
2035 THEN MP_TAC(SET_RULE`x=(FST (x:real^N#real^N),SND (x:real^N#real^N))`)
2036 THEN STRIP_TAC
2037 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
2038 THEN REWRITE_TAC[PAIR_EQ]
2039 THEN ASM_SIMP_TAC[];
2040 POP_ASSUM MP_TAC
2041 THEN MP_TAC(SET_RULE`x=(FST (x:real^N#real^N),SND (x:real^N#real^N))`)
2042 THEN STRIP_TAC
2043 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
2044 THEN REWRITE_TAC[PAIR_EQ]
2045 THEN REPEAT STRIP_TAC
2046 THEN EXISTS_TAC`x':num`
2047 THEN ASM_SIMP_TAC[]]);;
2048
2049
2050
2051 let CARD_EQUI_FF_SYM_0=prove(`FINITE (IMAGE (\i. vv i,vv (SUC i)) (:num))
2052 ==>
2053 CARD (IMAGE (\i. (vv:num->real^N) (SUC i),vv i) (:num))= CARD (IMAGE (\i. vv i,vv (SUC i)) (:num))`,
2054 STRIP_TAC
2055 THEN MATCH_MP_TAC CARD_IMAGE_INJ_EQ
2056 THEN EXISTS_TAC`(\(x:real^N#real^N). (SND x, FST x))`
2057 THEN ASM_REWRITE_TAC[EQUI_FF_SYM_0;EXISTS_UNIQUE]
2058 THEN REPEAT STRIP_TAC
2059 THEN EXISTS_TAC`SND (y:real^N#real^N),FST (y:real^N#real^N)`
2060 THEN MRESA_TAC( GEN_ALL EQUI_FF_SYM_0)[`vv:num->real^N`;`SND (y:real^N#real^N),FST (y:real^N#real^N)`]
2061 THEN REPEAT RESA_TAC
2062 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th]));;
2063
2064
2065 let FF_OF_HYP_ITER_VV=prove(`scs_k_v39 s=k /\
2066   IMAGE vv (:num) = V /\
2067        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
2068        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
2069 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv 
2070 ==> !n.
2071 (ITER n (ff_of_hyp (vec 0,V,E)) ) (vv (SUC i),vv i)= vv (SUC(n*(k-1)+i)),vv (n*(k-1)+i)`,
2072 STRIP_TAC
2073 THEN INDUCT_TAC
2074 THENL[
2075 REWRITE_TAC[ITER;I_DEF;ARITH_RULE`0 *B+A=A`];
2076 ASM_REWRITE_TAC[ITER]
2077 THEN ASM_TAC
2078 THEN REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan;ff_of_hyp;]
2079 THEN REPEAT RESA_TAC
2080 THEN MRESA_TAC(GEN_ALL DART_OF_HYP_VV)[`vv:num->real^3`]
2081 THEN SUBGOAL_THEN`vv (SUC (n *(k-1)+ i)),(vv:num->real^3) (n *(k-1)+ i) IN
2082      FF UNION IMAGE (\i. vv (SUC i),vv i) (:num)`ASSUME_TAC
2083 THENL[
2084 REWRITE_TAC[UNION;IN_ELIM_THM]
2085 THEN MATCH_MP_TAC(SET_RULE`A==> B\/A`)
2086 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
2087 THEN EXISTS_TAC`n *(k-1)+i:num`
2088 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN(:num)`];
2089 ASM_REWRITE_TAC[]
2090 THEN MP_TAC(ARITH_RULE`~(k<=3)==> SUC (SUC n * (k - 1) + i) =(n*(k-1)+i) +k /\ (n * (k - 1) + i) + k - 1 =SUC n * (k - 1) + i`)
2091 THEN RESA_TAC
2092 THEN MRESAL_TAC (GEN_ALL EE_EXPAND_BB_VV)[`V:real^3->bool`;`FF:real^3#real^3->bool`;`s:scs_v39`;`E:(real^3->bool)->bool`;`vv:num->real^3`;`(n * (k - 1) + i)`;`k:num`]
2093 [BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan;ff_of_hyp;]
2094 THEN SIMP_TAC[Polar_fan.IVS_AZIM_CYCLE_TWO_POINT_SET]
2095 THEN ASM_TAC
2096 THEN REWRITE_TAC[periodic]
2097 THEN REPEAT RESA_TAC]]);;
2098
2099
2100
2101 let DUAL_EXISTS_MOD0=prove(` ~(k=0) ==> ?n. (n*(k-1)) MOD k= b MOD k `,
2102 STRIP_TAC
2103 THEN EXISTS_TAC`k- b MOD k`
2104 THEN MRESA_TAC DIVISION[`b:num`;`k:num`]
2105 THEN MP_TAC(ARITH_RULE`~(k=0)/\ b MOD k<k==> b MOD k<=k/\ 1 <= k- b MOD k /\ 0<k`)
2106 THEN RESA_TAC
2107 THEN ASM_SIMP_TAC[LEFT_SUB_DISTRIB;ARITH_RULE`a *1=a`;Ssrnat.subn_subA]
2108 THEN MRESAL_TAC Ssrnat.leq_pmul2l[`k:num`;`1:num`;`k- b MOD k`][ARITH_RULE`k*1=k`;MULT_SYM]
2109 THEN MP_TAC(ARITH_RULE`k <= k * (k - b MOD k) ==> (k * (k - b MOD k) + b MOD k) - k = k * (k - b MOD k) - k *1+ b MOD k`)
2110 THEN RESA_TAC
2111 THEN ASM_REWRITE_TAC[GSYM LEFT_SUB_DISTRIB]
2112 THEN ONCE_REWRITE_TAC[MULT_SYM]
2113 THEN MRESA_TAC MOD_MULT_ADD[`k-b MOD k-1`;`k:num`;`b MOD k`]
2114 THEN ASM_SIMP_TAC[MOD_MOD_REFL]);;
2115
2116
2117
2118 let DUAL_EXISTS_MOD_LE=prove(` ~(k=0)/\ a MOD k<= b MOD k ==> ?n. (n*(k-1) +a) MOD k= b MOD k `,
2119 REPEAT STRIP_TAC
2120 THEN MRESA_TAC(GEN_ALL DUAL_EXISTS_MOD0)[`b MOD k- a MOD k`;`k:num`]
2121 THEN EXISTS_TAC`n:num`
2122 THEN MRESA_TAC DIVISION[`b:num`;`k:num`]
2123 THEN MP_TAC(ARITH_RULE`a MOD k<= b MOD k /\ b MOD k<k ==> b MOD k - a MOD k< k/\ (b MOD k- a MOD k) + a MOD k= b MOD k `)
2124 THEN RESA_TAC
2125 THEN MRESA_TAC MOD_LT[`b MOD k- a MOD k`;`k:num`]
2126 THEN MRESA_TAC MOD_ADD_MOD[`n*(k-1)`;`a:num`;`k:num`]
2127 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2128 THEN ASM_SIMP_TAC[MOD_MOD_REFL]);;
2129
2130 let DUAL_EXISTS_MOD_GE=prove(` ~(k=0)/\ b MOD k<= a MOD k ==> ?n. (n*(k-1) +a) MOD k= b MOD k `,
2131 REPEAT STRIP_TAC
2132 THEN MRESA_TAC(GEN_ALL DUAL_EXISTS_MOD0)[`b MOD k +k- a MOD k`;`k:num`]
2133 THEN EXISTS_TAC`n:num`
2134 THEN MRESA_TAC DIVISION[`a:num`;`k:num`]
2135 THEN MRESA_TAC MOD_LT[`a MOD k`;`k:num`]
2136 THEN MP_TAC(ARITH_RULE`a MOD k<k==>(b MOD k + k - a MOD k) + a MOD k= 1* k+  b MOD k`)
2137 THEN RESA_TAC
2138 THEN MRESA_TAC MOD_MULT_ADD[`1:num`;`k:num`;`b MOD k`]
2139 THEN MRESA_TAC MOD_ADD_MOD[`b MOD k + k - a MOD k`;`a MOD k:num`;`k:num`]
2140 THEN MRESA_TAC MOD_ADD_MOD[`n*(k-1)`;`a:num`;`k:num`]
2141 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2142 THEN ASM_SIMP_TAC[MOD_MOD_REFL]);;
2143
2144
2145 let DUAL_EXISTS_MOD=prove(` ~(k=0) ==> ?n. (n*(k-1) +a) MOD k= b MOD k `,
2146 STRIP_TAC
2147 THEN MP_TAC(ARITH_RULE`a MOD k<= b MOD k\/ b MOD k<= a MOD k`)
2148 THEN RESA_TAC
2149 THEN ASM_SIMP_TAC[DUAL_EXISTS_MOD_GE;DUAL_EXISTS_MOD_LE]);;
2150
2151
2152
2153 let FACE_DUAL_SYM_0=prove(`scs_k_v39 s=k /\
2154   IMAGE vv (:num) = V /\
2155        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
2156        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
2157 /\ x IN FF /\ SND x,FST x = v1 
2158 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv 
2159 ==>
2160 IMAGE (\i. vv (SUC i),vv i) (:num) = face (hypermap (HYP (vec 0,V,E))) v1`,
2161 STRIP_TAC
2162 THEN POP_ASSUM(fun th-> 
2163 MP_TAC th
2164 THEN MP_TAC(ARITH_RULE`~(k<=3)==> 3<=k/\ 1<k/\ ~(k=0)`)
2165 THEN RESA_TAC
2166 THEN ASM_TAC
2167 THEN REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan;local_fan]
2168 THEN REPEAT RESA_TAC
2169 THEN ASM_SIMP_TAC[local_fan;face;LET_DEF;LET_END_DEF;OPP_FAN_SYM_0;orbit_map]
2170 THEN ASSUME_TAC th)
2171 THEN MRESA_TAC(GEN_ALL Wrgcvdr_cizmrrh.ELMS_OF_HYPERMAP_HYP)[`vec 0:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
2172 THEN ASM_TAC
2173 THEN REPLICATE_TAC (16-12)(STRIP_TAC)
2174 THEN EXPAND_TAC"FF"
2175 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM;EXTENSION;Wrgcvdr_cizmrrh.POWER_TO_ITER;]
2176 THEN REPEAT RESA_TAC
2177 THEN EQ_TAC
2178 THENL[
2179 REPEAT STRIP_TAC
2180 THEN EXPAND_TAC"v1"
2181 THEN MRESA_TAC(GEN_ALL FF_OF_HYP_ITER_VV)
2182 [`FF:real^3#real^3->bool`;`s:scs_v39`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`vv:num->real^3`;`k:num`;`x'':num`;]
2183 THEN MRESA_TAC (GEN_ALL DUAL_EXISTS_MOD)[`x'':num`;`x'''':num`;`k:num`]
2184 THEN EXISTS_TAC`n:num`
2185 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
2186 THEN POP_ASSUM(fun th-> MRESA_TAC th[`x'''':num`]
2187 THEN MRESA_TAC th[`n *(k-1) + x''`]
2188 THEN MRESA_TAC th[`SUC x'''':num`]
2189 THEN MRESA_TAC th[`SUC(n *(k-1) + x'')`])
2190 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2191 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ADD1])
2192 THEN MRESA_TAC MOD_LT[`1`;`k:num`]
2193 THEN MRESA_TAC MOD_ADD_MOD[`(n * (k - 1) + x'')`;`1`;`k:num`]
2194 THEN MRESA_TAC MOD_ADD_MOD[`(x''''):num`;`1`;`k:num`]
2195 THEN ARITH_TAC;
2196 RESA_TAC
2197 THEN EXPAND_TAC"v1"
2198 THEN MRESA_TAC(GEN_ALL FF_OF_HYP_ITER_VV)
2199 [`FF:real^3#real^3->bool`;`s:scs_v39`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`vv:num->real^3`;`k:num`;`x'':num`;]
2200 THEN EXISTS_TAC`n * (k - 1) + x'':num`
2201 THEN ASM_REWRITE_TAC[SET_RULE`(a:num) IN (:num)`]]);;
2202
2203
2204
2205
2206 let LOCAL_FAN_DUAL_SYM_0=prove_by_refinement(`scs_k_v39 s=k /\
2207   IMAGE vv (:num) = V /\
2208        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
2209        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
2210 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv  
2211 ==> local_fan
2212  (IMAGE (\i. --vv (k - SUC (i MOD k))) (:num),
2213   IMAGE (\i. {--vv (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))}) (:num),
2214   IMAGE (\i. --vv (k - SUC (i MOD k)),--vv (k - SUC (SUC i MOD k))) (:num))`,
2215 [STRIP_TAC
2216 THEN POP_ASSUM(fun th-> 
2217 MP_TAC th
2218 THEN MP_TAC(ARITH_RULE`~(k<=3)==> 3<=k/\ 1<k`)
2219 THEN RESA_TAC
2220 THEN ASM_TAC
2221 THEN REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan;local_fan;]
2222 THEN REPEAT RESA_TAC
2223 THEN ASM_SIMP_TAC[local_fan;LET_DEF;LET_END_DEF;OPP_FAN_SYM_0]
2224 THEN ASSUME_TAC th)
2225 ;
2226
2227 REPLICATE_TAC (16-12)(POP_ASSUM MP_TAC)
2228 THEN POP_ASSUM(fun th-> 
2229 REPEAT STRIP_TAC
2230 THEN MP_TAC th)
2231 THEN REPLICATE_TAC (15-12)(POP_ASSUM MP_TAC)
2232 THEN POP_ASSUM(fun th-> 
2233 REPEAT STRIP_TAC
2234 THEN POP_ASSUM MP_TAC
2235 THEN MP_TAC (SYM th))
2236 THEN REPEAT STRIP_TAC
2237 THEN MRESA_TAC face_refl[`hypermap (HYP (vec 0,(V:real^3->bool),(E:(real^3->bool)->bool)))`;`x:real^3#real^3`]
2238 THEN ABBREV_TAC`v1=(SND (x:real^3#real^3),FST (x:real^3#real^3))`
2239 THEN MP_TAC OPP_FAN_SYM_0
2240 THEN RESA_TAC
2241 THEN MRESAL_TAC (GEN_ALL Lvducxu.FAN_DART_DARTS)[`vec 0:real^3`;`IMAGE (\i. {--(vv:num->real^3) (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))}) (:num)`;`IMAGE (\i. --(vv:num->real^3) (k - SUC (i MOD k))) (:num)`][DART_OF_HYP_VV]
2242 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
2243 THEN ASM_SIMP_TAC[IN_ELIM_THM;PAIR_FUN_SYM_0;OPP_IMAGE_F_EQ;OPP_IMAGE_F_EQ2]
2244 THEN REPEAT RESA_TAC
2245 ;
2246
2247
2248
2249 EXISTS_TAC`(\(x:real^3,y:real^3). --x,--y) v1`
2250 THEN ASM_SIMP_TAC[UNION;IN_ELIM_THM;IN_PAIR_SYM_0; IN_EQ_PAIR_SYM_0]
2251 THEN MP_TAC FACE_SYM_0
2252 THEN REPEAT RESA_TAC
2253 THEN MP_TAC(ARITH_RULE`~(k<=3)==> ~(k=0)`)
2254 THEN RESA_TAC
2255 THEN ASM_SIMP_TAC[OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG;]
2256 ;
2257
2258
2259 MATCH_MP_TAC(SET_RULE`A==> A\/B`)
2260 THEN EXPAND_TAC"v1"
2261 THEN SIMP_TAC[EQUI_FF_SYM_0]
2262 THEN ASM_SIMP_TAC[];
2263
2264
2265
2266
2267 MP_TAC FACE_ALL_SYM_0
2268 THEN ASM_REWRITE_TAC[]
2269 THEN RESA_TAC
2270 THEN ASM_SIMP_TAC[EQ_SET_PAIR_SYM_0;]
2271 THEN MP_TAC FACE_DUAL_SYM_0
2272 THEN RESA_TAC
2273 ;
2274
2275
2276
2277 REPLICATE_TAC (16-12)(POP_ASSUM MP_TAC)
2278 THEN POP_ASSUM(fun th-> 
2279 REPEAT STRIP_TAC
2280 THEN MP_TAC th)
2281 THEN REPLICATE_TAC (15-12)(POP_ASSUM MP_TAC)
2282 THEN POP_ASSUM(fun th-> 
2283 REPEAT STRIP_TAC
2284 THEN POP_ASSUM MP_TAC
2285 THEN MP_TAC (SYM th))
2286 THEN REPEAT STRIP_TAC
2287 THEN MRESAL_TAC (GEN_ALL Lvducxu.FAN_DART_DARTS)[`vec 0:real^3`;`IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`;`IMAGE (vv:num->real^3) (:num)`][DART_OF_HYP_VV]
2288 THEN MP_TAC OPP_FAN_SYM_0
2289 THEN RESA_TAC
2290 THEN MRESAL_TAC (GEN_ALL Lvducxu.FAN_DART_DARTS)[`vec 0:real^3`;`IMAGE (\i. {--(vv:num->real^3) (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))}) (:num)`;`IMAGE (\i. --(vv:num->real^3) (k - SUC (i MOD k))) (:num)`][DART_OF_HYP_VV] 
2291 THEN ASM_SIMP_TAC[IN_ELIM_THM;PAIR_FUN_SYM_0;OPP_IMAGE_F_EQ;OPP_IMAGE_F_EQ2]
2292 THEN REPEAT RESA_TAC
2293 THEN MP_TAC(ARITH_RULE`~(k<=3)==> ~(k=0)`)
2294 THEN RESA_TAC
2295 THEN ASM_TAC
2296 THEN REWRITE_TAC[dih2k]
2297 THEN REPEAT RESA_TAC
2298 THEN ASM_SIMP_TAC[OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG;OPP_IMAGE_F_EQ_NEG;OPP_IMAGE_F_EQ2_NEG;dih2k;PAIR_FUN_SYM_0;GSYM IMAGE_UNION;OPP_IMAGE_E_EQ;OPP_IMAGE_V_EQ;OPP_IMAGE_F_EQ;OPP_IMAGE_F_EQ2;]
2299 THEN REPEAT STRIP_TAC;
2300
2301
2302
2303
2304
2305 MRESA_TAC Hypermap.node_map_and_darts[`hypermap
2306       (HYP
2307       (vec 0,
2308        IMAGE (\i. --vv (k - SUC (i MOD k))) (:num),
2309        IMAGE (\i. {--(vv:num->real^3) (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))})
2310        (:num)))`]
2311 THEN REMOVE_ASSUM_TAC
2312 THEN POP_ASSUM MP_TAC
2313 THEN ASM_SIMP_TAC[OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG;OPP_IMAGE_F_EQ_NEG;OPP_IMAGE_F_EQ2_NEG;dih2k;PAIR_FUN_SYM_0;GSYM IMAGE_UNION;OPP_IMAGE_E_EQ;OPP_IMAGE_V_EQ;OPP_IMAGE_F_EQ;OPP_IMAGE_F_EQ2;]
2314 THEN STRIP_TAC
2315 THEN MRESAL_TAC (GEN_ALL FINITE_IMAGE)[`(\(x,y):real^3#real^3. --x,--y)`;`IMAGE (\(x,y):real^3#real^3. --x,--y)(IMAGE (\i.  (vv:num->real^3) (SUC i),vv i) (:num) UNION FF)`][ID_PAIR_SYM_0]
2316 THEN MP_TAC(SET_RULE`IMAGE (\i. vv (SUC i),vv i) (:num) SUBSET IMAGE (\i. (vv:num->real^3) (SUC i),vv i) (:num) UNION FF`)
2317 THEN RESA_TAC
2318 THEN MRESA_TAC(FINITE_SUBSET)[`IMAGE (\i. (vv:num->real^3) (SUC i),vv i) (:num)`;`IMAGE (\i. vv (SUC i),(vv:num->real^3) i) (:num) UNION FF`]
2319 THEN MP_TAC(SET_RULE`FF SUBSET IMAGE (\i. (vv:num->real^3) (SUC i),vv i) (:num) UNION FF`)
2320 THEN RESA_TAC
2321 THEN MRESA_TAC(FINITE_SUBSET)[`IMAGE (\i. vv i,(vv:num->real^3) (SUC i)) (:num)`;`IMAGE (\i. vv (SUC i),(vv:num->real^3) i) (:num) UNION FF`]
2322 THEN ASM_SIMP_TAC[CARD_PAIR_SYM_0]
2323 THEN ONCE_REWRITE_TAC[SET_RULE`A UNION B=B UNION A`]
2324 THEN MRESA_TAC (GEN_ALL CARD_EQUI_FF_SYM_0)[`vv:num->real^3`]
2325 THEN REPLICATE_TAC (31-12)(POP_ASSUM MP_TAC)
2326 THEN POP_ASSUM(fun th-> 
2327 REPEAT STRIP_TAC
2328 THEN ASM_REWRITE_TAC[SYM th]);
2329
2330
2331
2332
2333
2334 ASM_TAC
2335 THEN REWRITE_TAC[LET_DEF;LET_END_DEF;]
2336 THEN REPEAT RESA_TAC
2337 THEN MP_TAC FACE_ALL_SYM_0
2338 THEN RESA_TAC
2339 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`(\(x,y):real^3#real^3. --x,--y) x'`][ID_SYM_0])
2340 THEN MP_TAC IMAGE_NODE_SYM_0
2341 THEN RESA_TAC
2342 THEN ASM_SIMP_TAC[GSYM IMAGE_UNION]
2343 THEN MRESA_TAC (GEN_ALL IN_EQ_PAIR_SYM_0)[`x':real^3#real^3`;`IMAGE (\i. --vv (k - SUC (i MOD k)),--vv (k - SUC (SUC i MOD k)))
2344       (:num) UNION
2345       IMAGE (\i. --vv (k - SUC (SUC i MOD k)),--(vv:num->real^3) (k - SUC (i MOD k)))
2346       (:num)`]
2347 THEN POP_ASSUM MP_TAC
2348 THEN ASM_SIMP_TAC[OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG;OPP_IMAGE_F_EQ_NEG;OPP_IMAGE_F_EQ2_NEG;dih2k;PAIR_FUN_SYM_0;GSYM IMAGE_UNION;OPP_IMAGE_E_EQ;OPP_IMAGE_V_EQ;OPP_IMAGE_F_EQ;OPP_IMAGE_F_EQ2;ID_PAIR_SYM_0]
2349 THEN ONCE_REWRITE_TAC[SET_RULE`A UNION B= B UNION A`]
2350 THEN STRIP_TAC
2351 THEN REPLICATE_TAC (28-13)(POP_ASSUM MP_TAC)
2352 THEN POP_ASSUM(fun th-> 
2353 REPEAT STRIP_TAC
2354 THEN MRESA_TAC th[`((\(x,y):real^3#real^3. --x,--y) x')`]
2355 )
2356 THEN SET_TAC[]
2357 ;
2358
2359
2360 REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
2361 THEN MP_TAC ff_POWER_COMMUTATIVE_SYM_0
2362 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.POWER_TO_ITER]
2363 THEN RESA_TAC
2364 THEN SUBGOAL_THEN `!n x.
2365           ITER n
2366           (ff_of_hyp
2367           (vec 0,
2368            IMAGE (\i. --vv i) (:num),
2369            IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))
2370           (x) =
2371           (\(x,y). --x,--y) (ITER n (ff_of_hyp (vec 0,V,E)) ((\(x,y). --x,--y) x))`
2372 ASSUME_TAC;
2373
2374
2375
2376 REPEAT GEN_TAC
2377 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`n:num`;`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0])
2378 ;
2379
2380
2381
2382 SUBGOAL_THEN`CARD (IMAGE (\(x,y). --x,--y) (IMAGE (\i. (vv:num->real^3) (SUC i),vv i) (:num))) = CARD (FF:real^3#real^3->bool)`ASSUME_TAC
2383 ;
2384
2385
2386 MRESA_TAC Hypermap.node_map_and_darts[`hypermap
2387       (HYP
2388       (vec 0,
2389        IMAGE (\i. --vv (k - SUC (i MOD k))) (:num),
2390        IMAGE (\i. {--(vv:num->real^3) (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))})
2391        (:num)))`]
2392 THEN REMOVE_ASSUM_TAC
2393 THEN POP_ASSUM MP_TAC
2394 THEN ASM_SIMP_TAC[OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG;OPP_IMAGE_F_EQ_NEG;OPP_IMAGE_F_EQ2_NEG;dih2k;PAIR_FUN_SYM_0;GSYM IMAGE_UNION;OPP_IMAGE_E_EQ;OPP_IMAGE_V_EQ;OPP_IMAGE_F_EQ;OPP_IMAGE_F_EQ2;]
2395 THEN STRIP_TAC
2396 THEN MRESAL_TAC (GEN_ALL FINITE_IMAGE)[`(\(x,y):real^3#real^3. --x,--y)`;`IMAGE (\(x,y):real^3#real^3. --x,--y)(IMAGE (\i.  (vv:num->real^3) (SUC i),vv i) (:num) UNION FF)`][ID_PAIR_SYM_0]
2397 THEN MP_TAC(SET_RULE`IMAGE (\i. vv (SUC i),vv i) (:num) SUBSET IMAGE (\i. (vv:num->real^3) (SUC i),vv i) (:num) UNION FF`)
2398 THEN RESA_TAC
2399 THEN MRESA_TAC(FINITE_SUBSET)[`IMAGE (\i. (vv:num->real^3) (SUC i),vv i) (:num)`;`IMAGE (\i. vv (SUC i),(vv:num->real^3) i) (:num) UNION FF`]
2400 THEN MP_TAC(SET_RULE`FF SUBSET IMAGE (\i. (vv:num->real^3) (SUC i),vv i) (:num) UNION FF`)
2401 THEN RESA_TAC
2402 THEN MRESA_TAC(FINITE_SUBSET)[`IMAGE (\i. vv i,(vv:num->real^3) (SUC i)) (:num)`;`IMAGE (\i. vv (SUC i),(vv:num->real^3) i) (:num) UNION FF`]
2403 THEN ASM_SIMP_TAC[CARD_PAIR_SYM_0]
2404 THEN ONCE_REWRITE_TAC[SET_RULE`A UNION B=B UNION A`]
2405 THEN MRESA_TAC (GEN_ALL CARD_EQUI_FF_SYM_0)[`vv:num->real^3`]
2406 ;
2407
2408
2409
2410
2411 MP_TAC FAN_SYM_0
2412 THEN RESA_TAC
2413 THEN MRESAL_TAC(GEN_ALL Wrgcvdr_cizmrrh.ELMS_OF_HYPERMAP_HYP)[`vec 0:real^3`;`IMAGE (\i. --(vv:num->real^3) i) (:num)`;`IMAGE (\i. {--(vv:num->real^3) i, --vv (SUC i)}) (:num)`][orbit_map;IN_ELIM_THM;]
2414 THEN MRESAL_TAC(GEN_ALL Wrgcvdr_cizmrrh.ELMS_OF_HYPERMAP_HYP)[`vec 0:real^3`;`IMAGE (vv:num->real^3) (:num)`;`IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`][]
2415 THEN MRESA_TAC Hypermap.node_map_and_darts[`hypermap
2416       (HYP
2417       (vec 0,
2418        IMAGE (\i. --vv (k - SUC (i MOD k))) (:num),
2419        IMAGE (\i. {--(vv:num->real^3) (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))})
2420        (:num)))`]
2421 THEN REMOVE_ASSUM_TAC
2422 THEN POP_ASSUM MP_TAC
2423 THEN ASM_SIMP_TAC[OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG;OPP_IMAGE_F_EQ_NEG;OPP_IMAGE_F_EQ2_NEG;dih2k;PAIR_FUN_SYM_0;GSYM IMAGE_UNION;OPP_IMAGE_E_EQ;OPP_IMAGE_V_EQ;OPP_IMAGE_F_EQ;OPP_IMAGE_F_EQ2;]
2424 THEN STRIP_TAC
2425 THEN MRESAL_TAC (GEN_ALL FINITE_IMAGE)[`(\(x,y):real^3#real^3. --x,--y)`;`IMAGE (\(x,y):real^3#real^3. --x,--y)(IMAGE (\i.  (vv:num->real^3) (SUC i),vv i) (:num) UNION FF)`][ID_PAIR_SYM_0]
2426 THEN MP_TAC(SET_RULE`FF SUBSET IMAGE (\i. (vv:num->real^3) (SUC i),vv i) (:num) UNION FF`)
2427 THEN RESA_TAC
2428 THEN MRESA_TAC(FINITE_SUBSET)[`FF:real^3#real^3->bool`;`IMAGE (\i. vv (SUC i),(vv:num->real^3) i) (:num) UNION FF`]
2429 THEN ASM_SIMP_TAC[CARD_PAIR_SYM_0;COMMUTATIVE_POINT_PAIR_0]
2430 THEN REPLICATE_TAC (40-14)(POP_ASSUM MP_TAC)
2431 THEN POP_ASSUM(fun th-> 
2432 REPEAT DISCH_TAC
2433 THEN MP_TAC th)
2434 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
2435 THEN REPEAT RESA_TAC;
2436
2437
2438 REPLICATE_TAC (43-39)(POP_ASSUM MP_TAC)
2439 THEN POP_ASSUM(fun th-> 
2440 REPEAT DISCH_TAC
2441 THEN MP_TAC(ISPEC `i:num` th))
2442 THEN ASM_REWRITE_TAC[]
2443 THEN GEN_TAC
2444 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0]);
2445
2446
2447 REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
2448 THEN MP_TAC EDGE_POWER_MAP_SYM_0
2449 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.POWER_TO_ITER]
2450 THEN RESA_TAC
2451 THEN SUBGOAL_THEN `!n x. ITER n
2452           (edge_map
2453           (hypermap
2454           (HYP
2455           (vec 0,
2456            IMAGE (\i. --vv i) (:num),
2457            IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))))
2458           (x) =
2459           (\(x,y). --x,--y)
2460           (ITER n (edge_map (hypermap (HYP (vec 0,V,E)))) ((\(x,y). --x,--y) x))`
2461 ASSUME_TAC;
2462
2463
2464 REPEAT GEN_TAC
2465 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`n:num`;`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0])
2466 ;
2467
2468 ASM_SIMP_TAC[CARD_PAIR_SYM_0;COMMUTATIVE_POINT_PAIR_0]
2469 THEN REPLICATE_TAC (26-15)(POP_ASSUM MP_TAC)
2470 THEN POP_ASSUM(fun th-> 
2471 REPEAT DISCH_TAC
2472 THEN MP_TAC th)
2473 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
2474 THEN REPEAT RESA_TAC;
2475
2476
2477 REPLICATE_TAC (30-26)(POP_ASSUM MP_TAC)
2478 THEN POP_ASSUM(fun th-> 
2479 REPEAT DISCH_TAC
2480 THEN MP_TAC(ISPEC `i:num` th))
2481 THEN ASM_REWRITE_TAC[]
2482 THEN GEN_TAC
2483 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0]);
2484
2485
2486
2487
2488
2489 REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
2490 THEN MP_TAC NODE_POWER_MAP_SYM_0
2491 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.POWER_TO_ITER]
2492 THEN RESA_TAC
2493 THEN SUBGOAL_THEN `!n x. ITER n
2494           (node_map
2495           (hypermap
2496           (HYP
2497           (vec 0,
2498            IMAGE (\i. --vv i) (:num),
2499            IMAGE (\i. {--vv i, --vv (SUC i)}) (:num)))))
2500           (x) =
2501           (\(x,y). --x,--y)
2502           (ITER n (node_map (hypermap (HYP (vec 0,V,E)))) ((\(x,y). --x,--y) x))`
2503 ASSUME_TAC;
2504
2505
2506 REPEAT GEN_TAC
2507 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`n:num`;`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0])
2508 ;
2509
2510 ASM_SIMP_TAC[CARD_PAIR_SYM_0;COMMUTATIVE_POINT_PAIR_0]
2511 THEN REPLICATE_TAC (26-16)(POP_ASSUM MP_TAC)
2512 THEN POP_ASSUM(fun th-> 
2513 REPEAT DISCH_TAC
2514 THEN MP_TAC th)
2515 THEN REWRITE_TAC[Wrgcvdr_cizmrrh.has_orders;FUN_EQ_THM;I_DEF]
2516 THEN REPEAT RESA_TAC;
2517
2518
2519 REPLICATE_TAC (30-26)(POP_ASSUM MP_TAC)
2520 THEN POP_ASSUM(fun th-> 
2521 REPEAT DISCH_TAC
2522 THEN MP_TAC(ISPEC `i:num` th))
2523 THEN ASM_REWRITE_TAC[]
2524 THEN GEN_TAC
2525 THEN POP_ASSUM(fun th-> MRESAL_TAC th[`(\(x,y). --x,--y) x':real^3#real^3`][ID_SYM_0]);
2526
2527 ]);;
2528
2529
2530
2531 let AZIM_NEG_FIRST_PI=prove_by_refinement(
2532 `~collinear {vec 0, v1, w1} /\ ~collinear {vec 0, v1, w2}
2533 /\ &0<azim (vec 0) v1 w1 w2
2534 ==>    azim (vec 0) (--v1)  w1 w2 =  &2 *pi- azim (vec 0) v1 w1 w2`,
2535 [STRIP_TAC
2536 THEN MATCH_MP_TAC AZIM_UNIQUE
2537 THEN MRESA_TAC Fan.properties_coordinate[`vec 0:real^3`;`v1:real^3`;`w1:real^3`]
2538 THEN MRESA_TAC th3[`vec 0:real^3`;`v1:real^3`;`w2:real^3`]
2539 THEN MRESA_TAC azim[`vec 0:real^3`;`v1:real^3`;`w1:real^3`;`w2:real^3`]
2540 THEN POP_ASSUM (fun th-> MRESA_TAC th[`e1_fan (vec 0:real^3) v1 w1`;`e2_fan (vec 0:real^3) v1 w1`;`e3_fan (vec 0:real^3) v1 w1`])
2541 THEN EXISTS_TAC`--h1:real`
2542 THEN EXISTS_TAC`--h2:real`
2543 THEN EXISTS_TAC`r1:real`
2544 THEN EXISTS_TAC`r2:real`
2545 THEN EXISTS_TAC`e1_fan (vec 0:real^3) v1 w1`
2546 THEN EXISTS_TAC`--e2_fan (vec 0:real^3) v1 w1`
2547 THEN EXISTS_TAC`-- e3_fan (vec 0:real^3) v1 w1`
2548 THEN EXISTS_TAC`&2 * pi- psi`
2549 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A-B<=> B<=A`;REAL_ARITH`A-B< A<=> &0<B`]
2550 THEN STRIP_TAC;
2551 MATCH_MP_TAC(REAL_ARITH`a<b==> a<=b`)
2552 THEN ASM_REWRITE_TAC[];
2553 STRIP_TAC;
2554 ASM_TAC
2555 THEN REWRITE_TAC[orthonormal]
2556 THEN REPEAT DISCH_TAC
2557 THEN ASM_REWRITE_TAC[DOT_RNEG;DOT_LNEG;REAL_ARITH`-- -- A=A/\ -- &0= &0`;CROSS_RNEG]
2558 THEN ONCE_REWRITE_TAC[DOT_SYM]
2559 THEN ASM_REWRITE_TAC[]
2560 THEN ONCE_REWRITE_TAC[DOT_SYM];
2561 ASM_REWRITE_TAC[VECTOR_ARITH`(-- A= vec 0:real^3<=> A= vec 0)/\ A- vec 0=A`;dist;NORM_NEG]
2562 THEN STRIP_TAC;
2563 ASM_TAC
2564 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(-- A= vec 0:real^3<=> A= vec 0)/\ A- vec 0=A`;dist;NORM_NEG]
2565 THEN REPEAT STRIP_TAC
2566 THEN ASM_REWRITE_TAC[VECTOR_ARITH`a % --b= -- c <=> a % b=c:real^3`];
2567 REWRITE_TAC[SIN_SUB;COS_SUB]
2568 THEN MRESAL_TAC SIN_PERIODIC[`&0`][REAL_ARITH`&0+A=A`]
2569 THEN MRESAL_TAC COS_PERIODIC[`&0`][REAL_ARITH`&0+A=A `;SIN_0;COS_0]
2570 THEN STRIP_TAC;
2571 VECTOR_ARITH_TAC;
2572 REWRITE_TAC[REAL_ARITH`A-B+A-C=(A+A)-(B+C)`;SIN_SUB;COS_SUB]
2573 THEN MRESAL_TAC SIN_PERIODIC[`&2 *pi`][REAL_ARITH`&0+A=A`]
2574 THEN MRESAL_TAC COS_PERIODIC[`&2 *pi`][REAL_ARITH`&0+A=A `;SIN_0;COS_0]
2575 THEN VECTOR_ARITH_TAC]);;
2576
2577
2578
2579
2580 let AZIM_COMPL_NEG=prove(`~collinear {vec 0, v1, w1:real^3} /\ ~collinear {vec 0, v1, w2}
2581 ==>    azim (vec 0) (--v1)  w1 w2 = azim (vec 0) v1 w2 w1`,
2582 REPEAT STRIP_TAC
2583 THEN MRESA_TAC AZIM_COMPL[`vec 0:real^3`;`v1:real^3`;`w1:real^3`;`w2:real^3`]
2584 THEN MRESA_TAC azim[`vec 0:real^3`;`v1:real^3`;`w1:real^3`;`w2:real^3`]
2585 THEN MP_TAC(REAL_ARITH`&0 <= azim (vec 0) v1 w1 w2
2586 ==> azim (vec 0) v1 w1 w2 = &0 \/ (&0 < azim (vec 0) v1 w1 (w2:real^3)/\ ~(azim (vec 0) v1 w1 w2 = &0))`)
2587 THEN RESA_TAC
2588 THENL[
2589 POP_ASSUM MP_TAC
2590 THEN MRESA_TAC(GEN_ALL COLLINEAR_POINT_SYM_0)[`w1:real^3`;`v1:real^3`]
2591 THEN MRESA_TAC(GEN_ALL COLLINEAR_POINT_SYM_0)[`w2:real^3`;`v1:real^3`]
2592 THEN POP_ASSUM MP_TAC
2593 THEN POP_ASSUM MP_TAC
2594 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2595 THEN RESA_TAC
2596 THEN RESA_TAC
2597 THEN MRESA_TAC th3[`vec 0:real^3`;`v1:real^3`;`w2:real^3`]
2598 THEN MRESA_TAC th3[`vec 0:real^3`;`-- v1:real^3`;`w2:real^3`]THEN ASM_SIMP_TAC[AZIM_EQ_0;AFF_GT_2_1;IN_ELIM_THM]
2599 THEN RESA_TAC
2600 THEN EXISTS_TAC`t1+ &2 * t2`
2601 THEN EXISTS_TAC`-- t2:real`
2602 THEN EXISTS_TAC`t3:real`
2603 THEN ASM_REWRITE_TAC[REAL_ARITH`(t1 + &2 * t2) + --t2 + t3= t1+t2+t3`]
2604 THEN VECTOR_ARITH_TAC;
2605 ASM_SIMP_TAC[AZIM_NEG_FIRST_PI]]);;
2606
2607
2608
2609 let REMOVE_NEG_AZIM1_SYM_0=prove_by_refinement(`~collinear {vec 0, v1, w1:real^3} /\ ~collinear {vec 0, v1, w2}
2610 ==>    azim (vec 0) v1  (--w1) (--w2) =  azim (vec 0) v1 w1 w2`,
2611 [STRIP_TAC
2612 THEN MATCH_MP_TAC AZIM_UNIQUE
2613 THEN MRESA_TAC Fan.properties_coordinate[`vec 0:real^3`;`v1:real^3`;`w1:real^3`]
2614 THEN MRESA_TAC th3[`vec 0:real^3`;`v1:real^3`;`w2:real^3`]
2615 THEN MRESA_TAC azim[`vec 0:real^3`;`v1:real^3`;`w1:real^3`;`w2:real^3`]
2616 THEN POP_ASSUM (fun th-> MRESAL_TAC th[`e1_fan (vec 0:real^3) v1 w1`;`e2_fan (vec 0:real^3) v1 w1`;`e3_fan (vec 0:real^3) v1 w1`][VECTOR_ARITH`A- vec 0=A`])
2617 THEN EXISTS_TAC`--h1:real`
2618 THEN EXISTS_TAC`--h2:real`
2619 THEN EXISTS_TAC`r1:real`
2620 THEN EXISTS_TAC`r2:real`
2621 THEN EXISTS_TAC`--e1_fan (vec 0:real^3) v1 w1`
2622 THEN EXISTS_TAC`--e2_fan (vec 0:real^3) v1 w1`
2623 THEN EXISTS_TAC`e3_fan (vec 0:real^3) v1 w1`
2624 THEN EXISTS_TAC`psi:real`
2625 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= A-B<=> B<=A`;REAL_ARITH`A-B< A<=> &0<B`;VECTOR_ARITH`A- vec 0=A`]
2626 THEN STRIP_TAC;
2627 ASM_TAC
2628 THEN REWRITE_TAC[orthonormal]
2629 THEN REPEAT DISCH_TAC
2630 THEN ASM_REWRITE_TAC[DOT_RNEG;DOT_LNEG;REAL_ARITH`-- -- A=A/\ -- &0= &0`;CROSS_RNEG;CROSS_LNEG]
2631 THEN ONCE_REWRITE_TAC[DOT_SYM]
2632 THEN ASM_REWRITE_TAC[]
2633 THEN ONCE_REWRITE_TAC[DOT_SYM];
2634 ASM_REWRITE_TAC[VECTOR_ARITH`--w1 =
2635  (r1 * cos psi) % --e1_fan (vec 0) v1 w1 +
2636  (r1 * sin psi) % --e2_fan (vec 0) v1 w1 +
2637  --h1 % v1 <=> w1 =
2638  (r1 * cos psi) % e1_fan (vec 0) v1 w1 +
2639  (r1 * sin psi) % e2_fan (vec 0) v1 w1 +
2640  h1 % v1:real^3`]
2641 THEN ASM_REWRITE_TAC[VECTOR_ARITH`--w2 =
2642  (r2 * cos (psi + azim (vec 0) v1 w1 w2)) % --e1_fan (vec 0) v1 w1 +
2643  (r2 * sin (psi + azim (vec 0) v1 w1 w2)) % --e2_fan (vec 0) v1 w1 +
2644  --h2 % v1<=> 
2645 w2 =
2646  (r2 * cos (psi + azim (vec 0) v1 w1 w2)) % e1_fan (vec 0) v1 w1 +
2647  (r2 * sin (psi + azim (vec 0) v1 w1 w2)) % e2_fan (vec 0) v1 w1 +
2648  h2 % v1`]
2649 THEN RESA_TAC;
2650 REMOVE_ASSUM_TAC
2651 THEN REMOVE_ASSUM_TAC
2652 THEN REMOVE_ASSUM_TAC
2653 THEN POP_ASSUM MP_TAC
2654 THEN SET_TAC[];
2655 REMOVE_ASSUM_TAC
2656 THEN REMOVE_ASSUM_TAC
2657 THEN POP_ASSUM MP_TAC
2658 THEN SET_TAC[]]);;
2659
2660
2661
2662 let AZIM_NEG=prove(`~collinear {vec 0, v1, w1:real^3} /\ ~collinear {vec 0, v1, w2}
2663 ==>    azim (vec 0) (--v1)  (--w1) (--w2) =  azim (vec 0) v1 w2 w1`,
2664 STRIP_TAC
2665 THEN MRESA_TAC (GEN_ALL COLLINEAR_POINT_SYM_0)[`w1:real^3`;`v1:real^3`]
2666 THEN MRESA_TAC (GEN_ALL COLLINEAR_POINT_SYM_0)[`w2:real^3`;`v1:real^3`]
2667 THEN POP_ASSUM MP_TAC
2668 THEN POP_ASSUM MP_TAC
2669 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2670 THEN RESA_TAC
2671 THEN RESA_TAC
2672 THEN MRESA_TAC (GEN_ALL REMOVE_NEG_AZIM1_SYM_0)[`-- v1:real^3`;`w1:real^3`;` w2:real^3`]
2673 THEN ASM_SIMP_TAC[AZIM_COMPL_NEG]);;
2674
2675
2676
2677 let FST_SND_NEG_PAIR_SYM_0=prove(`--SND ((\(x,y):real^N#real^N. --x,--y) x)= SND x/\ --FST ((\(x,y):real^N#real^N. --x,--y) x)= FST x`,
2678 MP_TAC(SET_RULE`x=(FST (x:real^N#real^N),SND (x:real^N#real^N))`)
2679 THEN STRIP_TAC
2680 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
2681 THEN REWRITE_TAC[VECTOR_ARITH`-- -- A=A:real^N`]);;
2682
2683
2684
2685
2686
2687
2688 let CONVEX_LOCAL_FAN_SYM_0=prove_by_refinement(` scs_k_v39 s=k /\
2689   IMAGE vv (:num) = V /\
2690        IMAGE (\i. {vv i, vv (SUC i)}) (:num) = E /\
2691        IMAGE (\i. vv i,vv (SUC i)) (:num) = FF 
2692 /\ is_scs_v39 s /\ ~(k <= 3)/\ BBs_v39 s vv
2693 ==> convex_local_fan
2694  (IMAGE (\i. --vv (k - SUC (i MOD k))) (:num),
2695   IMAGE (\i. {--vv (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))}) (:num),
2696   IMAGE (\i. --vv (k - SUC (i MOD k)),--vv (k - SUC (SUC i MOD k))) (:num))`,
2697 [REWRITE_TAC[convex_local_fan]
2698 THEN STRIP_TAC
2699 THEN MP_TAC(ARITH_RULE`~(k<=3)==> ~(k=0)/\ 1<k`)
2700 THEN RESA_TAC
2701 THEN MP_TAC LOCAL_FAN_DUAL_SYM_0
2702 THEN RESA_TAC
2703 THEN ASM_TAC
2704 THEN REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan;]
2705 THEN REPLICATE_TAC (10) RESA_TAC
2706 THEN POP_ASSUM MP_TAC
2707 THEN ASM_SIMP_TAC[OPP_IMAGE_F_EQ_NEG;OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG;OPP_IMAGE_E_EQ;OPP_IMAGE_F_EQ2]
2708 THEN ASM_SIMP_TAC[PAIR_FUN_SYM_0;IMAGE_E_SYM_0;IMAGE_V_SYM_0;OPP_IMAGE_E_EQ;OPP_IMAGE_F_EQ2]
2709 THEN REPEAT STRIP_TAC;
2710 MRESAL_TAC (GEN_ALL IN_PAIR_SYM_0)[` (x:real^3#real^3)`;`IMAGE (\(x,y). --x,--y)
2711       (IMAGE (\i. (vv:num->real^3) (SUC i),vv (i)) (:num))`][ID_PAIR_SYM_0]
2712 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOFA_DETERMINE_AZIM_IN_FA)
2713 [`IMAGE (\x:real^3. --x) V`;`IMAGE (\(x,y):real^3#real^3. --x,--y) (IMAGE (\i. vv (SUC i),vv i) (:num))`;`IMAGE (\i. {-- (vv:num->real^3) i, --vv (SUC i)}) (:num)`]
2714 THEN POP_ASSUM(fun th-> MRESA_TAC th[`x:real^3#real^3`])
2715 THEN REMOVE_ASSUM_TAC
2716 THEN REMOVE_ASSUM_TAC
2717 THEN POP_ASSUM MP_TAC
2718 THEN REWRITE_TAC[GSYM PAIR_FUN_SYM_0]
2719 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[IMAGE;IN_ELIM_THM]
2720 THEN REWRITE_TAC[EE_SYM_0]
2721 THEN RESA_TAC
2722 THEN ASM_SIMP_TAC[EE_SYM_0;EE_EXPAND_BB_VV]
2723 THEN MRESAL_TAC (GEN_ALL EE_EXPAND_BB_VV)[`V:real^3->bool`;`FF:real^3#real^3->bool`;`s:scs_v39`;`E:(real^3->bool)->bool`;`vv:num->real^3`;`SUC x'`;`k:num`;]
2724 [BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan;]
2725 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
2726 THEN POP_ASSUM(fun th-> MRESA_TAC th[`SUC x' +k-1`]
2727 THEN MRESA_TAC th[`x':num`])
2728 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2729 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2730 THEN MP_TAC(ARITH_RULE`~(k<=3) ==> SUC x' + k - 1= 1 *k + x'/\ ~(k=0)`)
2731 THEN RESA_TAC
2732 THEN MRESA_TAC MOD_MULT_ADD[`1`;`k:num`;`x':num`]
2733 THEN ASM_SIMP_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET;GSYM ELEMENT2_SYM_0]
2734 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
2735 THEN ASM_SIMP_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET;GSYM ELEMENT2_SYM_0;GSYM Local_lemmas.SIN_AZIM_POS_PI_LT;Polar_fan.SIN_AZIM_MUTUAL_CROSS;DOT_RNEG;]
2736 THEN SUBGOAL_THEN `((vv:num->real^3) (SUC x'), (vv:num->real^3) (SUC(SUC x'))) IN FF` ASSUME_TAC;
2737 EXPAND_TAC"FF"
2738 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
2739 THEN EXISTS_TAC`SUC x':num`
2740 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN(:num)`];
2741 REPLICATE_TAC (19-10)(POP_ASSUM MP_TAC)
2742 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
2743 THEN MRESA_TAC th[`(vv:num->real^3) (SUC x'), (vv:num->real^3) (SUC(SUC x'))`])
2744 THEN POP_ASSUM MP_TAC
2745 THEN POP_ASSUM MP_TAC
2746 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOFA_DETERMINE_AZIM_IN_FA)
2747 [`V:real^3->bool`;` (IMAGE (\i. vv i,(vv:num->real^3) (SUC i)) (:num))`;`IMAGE (\i. { (vv:num->real^3) i, vv (SUC i)}) (:num)`]
2748 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(vv:num->real^3) (SUC x'), (vv:num->real^3) (SUC(SUC x'))`])
2749 THEN ASM_SIMP_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET]
2750 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
2751 THEN POP_ASSUM(fun th->  MRESA_TAC th[`x':num `]
2752 THEN MRESA_TAC th[`1*k+ x' `])
2753 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2754 THEN ASM_SIMP_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET;GSYM ELEMENT2_SYM_0;GSYM Local_lemmas.SIN_AZIM_POS_PI_LT;Polar_fan.SIN_AZIM_MUTUAL_CROSS;DOT_RNEG;CROSS_RNEG;CROSS_LNEG;]
2755 THEN REPEAT STRIP_TAC
2756 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
2757 THEN REWRITE_TAC[CROSS_TRIPLE;DOT_LNEG]
2758 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE;DOT_LNEG]
2759 THEN POP_ASSUM MP_TAC
2760 THEN POP_ASSUM MP_TAC
2761 THEN REAL_ARITH_TAC;
2762
2763 ASM_REWRITE_TAC[wedge_in_fan_ge2]
2764 THEN POP_ASSUM MP_TAC
2765 THEN REWRITE_TAC[GSYM PAIR_FUN_SYM_0]
2766 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[IMAGE;IN_ELIM_THM]
2767 THEN REWRITE_TAC[EE_SYM_0]
2768 THEN RESA_TAC
2769 THEN ASM_SIMP_TAC[EE_SYM_0;EE_EXPAND_BB_VV]
2770 THEN MRESAL_TAC (GEN_ALL EE_EXPAND_BB_VV)[`V:real^3->bool`;`FF:real^3#real^3->bool`;`s:scs_v39`;`E:(real^3->bool)->bool`;`vv:num->real^3`;`SUC x'`;`k:num`;]
2771 [BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;convex_local_fan;]
2772 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
2773 THEN POP_ASSUM(fun th-> MRESA_TAC th[`SUC x' +k-1`]
2774 THEN MRESA_TAC th[`x':num`])
2775 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2776 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2777 THEN MP_TAC(ARITH_RULE`~(k<=3) ==> SUC x' + k - 1= 1 *k + x'/\ ~(k=0)`)
2778 THEN RESA_TAC
2779 THEN MRESA_TAC MOD_MULT_ADD[`1`;`k:num`;`x':num`]
2780 THEN ASM_SIMP_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET;GSYM ELEMENT2_SYM_0]
2781 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
2782 THEN ASM_SIMP_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET;GSYM ELEMENT2_SYM_0;GSYM Local_lemmas.SIN_AZIM_POS_PI_LT;Polar_fan.SIN_AZIM_MUTUAL_CROSS;DOT_RNEG;]
2783 THEN SUBGOAL_THEN `((vv:num->real^3) (SUC x')) IN V` ASSUME_TAC;
2784
2785 EXPAND_TAC"V"
2786 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
2787 THEN EXISTS_TAC`SUC x':num`
2788 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN(:num)`];
2789
2790 MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
2791 THEN POP_ASSUM(fun th->  MRESA_TAC th[`x':num `]
2792 THEN MRESA_TAC th[`1 *k +x'`])
2793 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOFA_CARD_EE_V_1)[`FF:real^3#real^3->bool`;`V:real^3->bool`;`(vv:num->real^3) (SUC x')`;`E:(real^3->bool)->bool`;]
2794 THEN MP_TAC Wrgcvdr_cizmrrh.LOCAL_FAN_IMP_FAN
2795 THEN RESA_TAC
2796 THEN MRESA_TAC(GEN_ALL Wrgcvdr_cizmrrh.FAN_IMP_FINITE_EE)[`vec 0:real^3`;`V:real^3->bool`;`(vv:num->real^3) (SUC x')`;`E:(real^3->bool)->bool`;]
2797 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
2798 THEN ASM_SIMP_TAC[ELEMENT2_SYM_0;CARD_SYM_0;ARITH_RULE`2>1`]
2799 THEN SUBGOAL_THEN `((vv:num->real^3) (SUC x'), (vv:num->real^3) (SUC(SUC x'))) IN FF` ASSUME_TAC;
2800
2801 EXPAND_TAC"FF"
2802 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
2803 THEN EXISTS_TAC`SUC x':num`
2804 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN(:num)`];
2805
2806 REPLICATE_TAC (25-10)(POP_ASSUM MP_TAC)
2807 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
2808 THEN MRESA_TAC th[`(vv:num->real^3) (SUC x'), (vv:num->real^3) (SUC(SUC x'))`])
2809 THEN POP_ASSUM MP_TAC
2810 THEN ASM_REWRITE_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET;wedge_in_fan_ge2;ARITH_RULE`2>1`;wedge_ge;azim;SUBSET;IN_ELIM_THM;IMAGE]
2811 THEN REPEAT RESA_TAC
2812 THEN MP_TAC(SET_RULE`collinear {(vec 0),(--(vv:num->real^3) (SUC x')),-- x''' }\/ ~(collinear {(vec 0),(--(vv:num->real^3) (SUC x')),-- x''' })`)
2813 THEN RESA_TAC;
2814
2815 ASM_SIMP_TAC[AZIM_DEGENERATE;azim];
2816
2817 MRESAL_TAC (GEN_ALL VEC0_NOT_COLLINEAR_SYM_0)[`{--(vv:num->real^3) (SUC x'), --x'''}`][ELEMENT2_SYM_0;REFL_SYM_0]
2818 THEN POP_ASSUM MP_TAC
2819 THEN ASM_REWRITE_TAC[GSYM ELEMENT2_SYM_0;SET_RULE`{A} UNION {B,C}={A,B,C}`]
2820 THEN STRIP_TAC
2821 THEN MP_TAC(SET_RULE`collinear {(vec 0),(--(vv:num->real^3) (SUC x')),(--vv (1 * k + x')) }\/ ~(collinear {(vec 0),(--(vv:num->real^3) (SUC x')),(--vv (1 * k + x')) })`)
2822 THEN RESA_TAC;
2823
2824 ASM_SIMP_TAC[AZIM_DEGENERATE;azim;]
2825 THEN REAL_ARITH_TAC;
2826
2827 MRESAL_TAC (GEN_ALL VEC0_NOT_COLLINEAR_SYM_0)[`{--(vv:num->real^3) (SUC x'), (--vv (1 * k + x'))}`][ELEMENT2_SYM_0;REFL_SYM_0]
2828 THEN POP_ASSUM MP_TAC
2829 THEN ASM_REWRITE_TAC[GSYM ELEMENT2_SYM_0;SET_RULE`{A} UNION {B,C}={A,B,C}`]
2830 THEN STRIP_TAC
2831 THEN REPLICATE_TAC (32-26)(POP_ASSUM MP_TAC)
2832 THEN POP_ASSUM (fun th-> REPEAT STRIP_TAC
2833 THEN MRESA_TAC th[`x''':real^3`])
2834 THEN ASM_SIMP_TAC[AZIM_NEG]
2835 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOCAL_FAN_IN_FF_NOT_COLLINEAR)[`V:real^3->bool`;`E:(real^3->bool)->bool`;`FF:real^3#real^3->bool`;`(vv:num->real^3) (SUC x'), (vv:num->real^3) (SUC (SUC x'))`]
2836 THEN ASM_SIMP_TAC[AZIM_NEG]
2837 THEN MRESA_TAC Fan.sum4_azim_fan[`vec 0:real^3`;`(vv:num->real^3) (SUC x')`;`(vv:num->real^3) (SUC(SUC x'))`;`x''':real^3`;`(vv:num->real^3) (x')`]
2838 THEN REWRITE_TAC[REAL_ARITH`a<=b+a<=> &0<=b`;azim]]);;
2839
2840
2841
2842 let PEROPP_IN_BB_SYM_0=prove_by_refinement(`scs_k_v39 s=k /\ is_scs_v39 s /\ BBs_v39 s vv /\ ~(k<=3)
2843 ==> BBs_v39 (scs_opp_v39 s) (\i. -- peropp vv k i)`,
2844 [REPEAT GEN_TAC
2845 THEN REWRITE_TAC[scs_arrow_v39;IN_SING;scs_opp_v39;PAIR_EQ;LET_DEF;LET_END_DEF;BBs_v39;scs_v39_explicit;peropp2;peropp;is_scs_v39]
2846 THEN STRIP_TAC
2847 THEN ASM_TAC
2848 THEN REPEAT RESA_TAC
2849 THEN MP_TAC(ARITH_RULE`3<=k==> ~(k=0)/\ 1<k`)
2850 THEN RESA_TAC;
2851
2852 REWRITE_TAC[IMAGE;IN_ELIM_THM;SUBSET]
2853 THEN REPEAT RESA_TAC
2854 THEN ASM_REWRITE_TAC[BALL_ANNULUS_SYM_0]
2855 THEN MRESA_TAC (GEN_ALL OPP_IMAGE_V_EQ)[`k:num`;`vv:num->real^3`]
2856 THEN POP_ASSUM(fun th->
2857 ASM_TAC 
2858 THEN REWRITE_TAC[SYM th]
2859 THEN REPEAT STRIP_TAC)
2860 THEN REPLICATE_TAC (29-21)(POP_ASSUM MP_TAC)
2861 THEN POP_ASSUM(fun th-> REPEAT DISCH_TAC
2862 THEN MP_TAC th)
2863 THEN MATCH_MP_TAC(SET_RULE`a IN A ==> (A SUBSET B==> a IN B)`)
2864 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
2865 THEN EXISTS_TAC`x':num`
2866 THEN ASM_REWRITE_TAC[SET_RULE`(a:num) IN (:num)`];
2867
2868 ASM_TAC
2869 THEN REWRITE_TAC[periodic;peropp;]
2870 THEN REPEAT RESA_TAC
2871 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`];
2872
2873 ASM_SIMP_TAC[DIST_SYM_0];
2874
2875 ASM_SIMP_TAC[DIST_SYM_0];
2876
2877 MRESA_TAC (GEN_ALL CONVEX_LOCAL_FAN_SYM_0)[`IMAGE (vv:num->real^3) (:num)`;`IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`;`IMAGE (\i. (vv:num->real^3) i,vv (SUC i)) (:num)`;`s:scs_v39`;`(vv:num->real^3)`;`k:num`]
2878 THEN POP_ASSUM MATCH_MP_TAC
2879 THEN ASM_REWRITE_TAC[scs_arrow_v39;IN_SING;scs_opp_v39;PAIR_EQ;LET_DEF;LET_END_DEF;BBs_v39;scs_v39_explicit;peropp2;peropp;is_scs_v39]]);;
2880
2881
2882
2883
2884
2885 let NO_IS_EAR=prove(`~(scs_k_v39 s<=3)==> ~(is_ear_v39 s)`,
2886 REWRITE_TAC[is_ear_v39]
2887 THEN ARITH_TAC);;
2888
2889 let NO_IS_EAR_SCS_OPP=prove(`~(scs_k_v39 s<=3)==> ~(is_ear_v39 (scs_opp_v39 s))`,
2890 REWRITE_TAC[is_ear_v39;LET_DEF;LET_END_DEF;scs_opp_v39;scs_v39_explicit]
2891 THEN ARITH_TAC);;
2892
2893
2894
2895 let DSV_EQ_SYM_0=prove_by_refinement(`scs_k_v39 s=k /\ is_scs_v39 s /\ BBs_v39 s vv /\ ~(k<=3)
2896 ==> dsv_v39 (scs_opp_v39 s) (\i. --peropp vv k i) = dsv_v39 s vv`,
2897 [STRIP_TAC
2898 THEN ASM_SIMP_TAC[dsv_v39;NO_IS_EAR_SCS_OPP;NO_IS_EAR;LET_DEF;LET_END_DEF;scs_opp_v39;scs_v39_explicit;peropp2;DIST_SYM_0;peropp]
2899 THEN MATCH_MP_TAC(REAL_ARITH`a=b==> c+ #0.1 * -- &1 *a= c+ #0.1 * -- &1 *b`)
2900 THEN MATCH_MP_TAC SUM_EQ_GENERAL
2901 THEN EXISTS_TAC`(\j. k - SUC(SUC(j MOD k) MOD k))`
2902 THEN REWRITE_TAC[IN_ELIM_THM]
2903 THEN REPEAT RESA_TAC;
2904
2905 REWRITE_TAC[EXISTS_UNIQUE]
2906 THEN MP_TAC(ARITH_RULE`~(k<=3)==> k-1<k/\ ~(k=0)/\ 1<k/\ SUC(k-1)=k/\ k-k=0/\ 1*k+0=k/\0<k/\ SUC 0=1`)
2907 THEN RESA_TAC
2908 THEN MP_TAC(ARITH_RULE`y<k==> y=k-1\/ SUC y<k`)
2909 THEN RESA_TAC;
2910
2911 EXISTS_TAC`k-1`
2912 THEN ASM_REWRITE_TAC[]
2913 THEN MRESA_TAC MOD_LT[`k-1`;`k:num`]
2914 THEN MRESA_TAC MOD_LT[`0`;`k:num`]
2915 THEN MRESA_TAC MOD_MULT_ADD[`1`;`k:num`;`0`]
2916 THEN REPLICATE_TAC (17-5)(POP_ASSUM MP_TAC)
2917 THEN POP_ASSUM(fun th-> 
2918 REPEAT DISCH_TAC
2919 THEN MP_TAC th)
2920 THEN ASM_REWRITE_TAC[]
2921 THEN ASM_TAC
2922 THEN REWRITE_TAC[is_scs_v39;periodic2]
2923 THEN REPEAT RESA_TAC
2924 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`scs_J_v39 s (k-1)`][ARITH_RULE`~(3=0)`;periodic]
2925 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k:num`])
2926 THEN REMOVE_ASSUM_TAC
2927 THEN MRESA_TAC DIVISION[`SUC(y' MOD k)`;`k:num`]
2928 THEN MP_TAC(ARITH_RULE`SUC (y' MOD k) MOD k < k /\ 1<k /\ k - SUC (SUC (y' MOD k) MOD k) = k - 1
2929 ==> SUC (y' MOD k) MOD k = 0`)
2930 THEN RESA_TAC
2931 THEN MP_TAC(ARITH_RULE`~(k<=3)==> 1+k-1=k`)
2932 THEN RESA_TAC
2933 THEN MRESAL_TAC Hdplygy.MOD_EQ_MOD[`y' MOD k`;`k-1`;`1`;`k:num`][GSYM ADD1;ARITH_RULE`1+A=A+1`]
2934 THEN POP_ASSUM MP_TAC
2935 THEN MRESA_TAC MOD_LT[`y':num`;`k:num`];
2936
2937 EXISTS_TAC`k- SUC(SUC y)`
2938 THEN MP_TAC(ARITH_RULE`SUC y<k/\ ~(k<=3)==> k - SUC (SUC y) < k/\ SUC (k - SUC (SUC y))= k - SUC y/\ k - SUC y<k/\ k - (k - SUC y)= SUC y /\ (k - SUC (k - SUC y))=y`)
2939 THEN RESA_TAC
2940 THEN MRESA_TAC MOD_LT[`k - SUC(SUC y)`;`k:num`]
2941 THEN MRESA_TAC MOD_LT[`k - (SUC y)`;`k:num`]
2942 THEN ASM_REWRITE_TAC[]
2943 THEN ASM_TAC
2944 THEN REWRITE_TAC[is_scs_v39;periodic2]
2945 THEN REPEAT RESA_TAC
2946 THEN POP_ASSUM MP_TAC
2947 THEN MRESA_TAC MOD_LT[`y':num`;`k:num`]
2948 THEN MP_TAC(ARITH_RULE`y'<k==> y'=k-1\/ SUC y'<k`)
2949 THEN RESA_TAC;
2950
2951 MRESA_TAC MOD_MULT_ADD[`1`;`k:num`;`0`]
2952 THEN MRESA_TAC MOD_LT[`0`;`k:num`]
2953 THEN MP_TAC(ARITH_RULE`SUC y<k==> ~(k-1=y)`)
2954 THEN RESA_TAC;
2955
2956 MRESA_TAC MOD_LT[`SUC y':num`;`k:num`]
2957 THEN STRIP_TAC
2958 THEN MP_TAC(ARITH_RULE`SUC y'<k /\ SUC y<k/\ k - SUC (SUC y') = y ==> y' = k - SUC (SUC y)`)
2959 THEN RESA_TAC;
2960
2961 MP_TAC(ARITH_RULE`~(k<=3)==> k-1<k/\ ~(k=0)/\ 1<k/\ SUC(k-1)=k/\ k-k=0/\ 1*k+0=k/\0<k/\ SUC 0=1`)
2962 THEN RESA_TAC
2963 THEN MRESA_TAC DIVISION[`SUC(x MOD k)`;`k:num`]
2964 THEN POP_ASSUM MP_TAC
2965 THEN ARITH_TAC;
2966
2967 MP_TAC(ARITH_RULE`~(k<=3)==> k-1<k/\ ~(k=0)/\ 1<k/\ SUC(k-1)=k/\ k-k=0/\ 1*k+0=k/\0<k/\ SUC 0=1`)
2968 THEN RESA_TAC
2969 THEN MRESA_TAC DIVISION[`SUC x`;`k:num`]
2970 THEN MP_TAC(ARITH_RULE`~(k<=3)/\ SUC x MOD k<k ==> k-1<k/\ ~(k=0)/\ 1<k/\ SUC(k-1)=k/\ k-k=0/\ 1*k+0=k/\0<k/\ SUC 0=1/\ SUC (k - SUC (SUC x MOD k))= k- SUC x MOD k`)
2971 THEN RESA_TAC
2972 THEN MRESA_TAC MOD_LT[`x:num`;`k:num`]
2973 THEN ASM_TAC
2974 THEN REWRITE_TAC[is_scs_v39;periodic2]
2975 THEN REPEAT RESA_TAC
2976 THEN REPLICATE_TAC (36-24)(POP_ASSUM MP_TAC) 
2977 THEN POP_ASSUM(fun th-> 
2978 REPEAT DISCH_TAC
2979 THEN MP_TAC th)
2980 THEN ASM_REWRITE_TAC[]
2981 THEN MP_TAC(ARITH_RULE`x<k==>x=k-1\/ SUC x<k`)
2982 THEN RESA_TAC;
2983
2984 MRESA_TAC MOD_MULT_ADD[`1`;`k:num`;`0`]
2985 THEN MRESA_TAC MOD_LT[`0`;`k:num`]
2986 THEN REWRITE_TAC[ARITH_RULE`k-0=k`]
2987 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`scs_J_v39 s (k-1)`][ARITH_RULE`~(3=0)`;periodic]
2988 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k:num`]);
2989
2990 MRESA_TAC MOD_LT[`SUC x`;`k:num`];
2991
2992 MP_TAC(ARITH_RULE`~(k<=3)==> k-1<k/\ ~(k=0)/\ 1<k/\ SUC(k-1)=k/\ k-k=0/\ 1*k+0=k/\0<k/\ SUC 0=1`)
2993 THEN RESA_TAC
2994 THEN MRESA_TAC DIVISION[`SUC x`;`k:num`]
2995 THEN MP_TAC(ARITH_RULE`~(k<=3)/\ SUC x MOD k<k ==> k-1<k/\ ~(k=0)/\ 1<k/\ SUC(k-1)=k/\ k-k=0/\ 1*k+0=k/\0<k/\ SUC 0=1/\ SUC (k - SUC (SUC x MOD k))= k- SUC x MOD k`)
2996 THEN RESA_TAC
2997 THEN MRESA_TAC MOD_LT[`x:num`;`k:num`]
2998 THEN MP_TAC(ARITH_RULE`x<k==>x=k-1\/ SUC x<k`)
2999 THEN RESA_TAC;
3000
3001 MRESA_TAC MOD_MULT_ADD[`1`;`k:num`;`0`]
3002 THEN MRESA_TAC MOD_LT[`0`;`k:num`]
3003 THEN REWRITE_TAC[ARITH_RULE`k-0=k`]
3004 THEN ASM_TAC
3005 THEN REWRITE_TAC[BBprime_v39;BBs_v39;periodic2;LET_DEF;LET_END_DEF]
3006 THEN REPEAT RESA_TAC
3007 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
3008 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k:num`])
3009 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[DIST_SYM]
3010 THEN REWRITE_TAC[];
3011
3012 MRESA_TAC MOD_LT[`SUC x`;`k:num`]
3013 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[DIST_SYM]
3014 THEN REWRITE_TAC[]]);;
3015
3016
3017
3018 let SUM_PAIR_SYM_0=prove(`sum (IMAGE (\(x,y):real^N#real^N. --x,--y) s) f= sum s (f o ((\(x,y). --x,--y)))`,
3019 MATCH_MP_TAC SUM_IMAGE
3020 THEN REPEAT GEN_TAC
3021 THEN MP_TAC(SET_RULE`x=(FST (x:real^N#real^N),SND (x:real^N#real^N))`)
3022 THEN STRIP_TAC
3023 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
3024 THEN MP_TAC(SET_RULE`y=(FST (y:real^N#real^N),SND (y:real^N#real^N))`)
3025 THEN STRIP_TAC
3026 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
3027 THEN ASM_SIMP_TAC[VECTOR_ARITH`(--a= --b)<=> (a=b:real^N)`;PAIR_EQ]
3028 THEN ASM_REWRITE_TAC[GSYM PAIR_EQ]
3029 THEN RESA_TAC);;
3030
3031
3032
3033 let TAUSTAR_EQ_SYM_0=prove_by_refinement(`scs_k_v39 s=k /\ is_scs_v39 s /\ BBs_v39 s vv /\ ~(k<=3)
3034 ==> taustar_v39 (scs_opp_v39 s) (\i. --peropp vv k i) = taustar_v39 s vv`,
3035 [STRIP_TAC
3036 THEN MP_TAC DSV_EQ_SYM_0
3037 THEN RESA_TAC
3038 THEN 
3039 ASM_REWRITE_TAC[taustar_v39;LET_DEF;LET_END_DEF;scs_opp_v39;scs_v39_explicit]
3040 THEN MATCH_MP_TAC (REAL_ARITH`C=A==>A-B=C-B`)
3041 THEN MP_TAC(ARITH_RULE`~(k<=3)==> 3<=k/\ 1<k/\0<k`)
3042 THEN RESA_TAC
3043 THEN MRESA_TAC MOD_LT[`1`;`k:num`]
3044 THEN ASM_TAC
3045 THEN REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;]
3046 THEN REPEAT RESA_TAC
3047 THEN ASM_SIMP_TAC[tau_fun;peropp;OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG;OPP_IMAGE_F_EQ2_NEG;]
3048 THEN ASM_SIMP_TAC[PAIR_FUN_SYM_0]
3049 THEN MRESA_TAC (GEN_ALL Local_lemmas.CVLF_LF_F)[`       IMAGE (\i. vv i,(vv:num->real^3) (SUC i)) (:num)`;`IMAGE (vv:num->real^3) (:num)`;`
3050        IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`;]
3051 THEN MRESA_TAC (GEN_ALL Wrgcvdr_cizmrrh.LOCAL_FAN_FINITE_FF)[`IMAGE (vv:num->real^3) (:num)`;`
3052        IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`;`       IMAGE (\i. vv i,(vv:num->real^3) (SUC i)) (:num)`]
3053 THEN MRESA_TAC (GEN_ALL Wrgcvdr_cizmrrh.LOCAL_IMP_FINITE_DARTS)
3054 [`       IMAGE (\i. vv i,(vv:num->real^3) (SUC i)) (:num)`;`
3055        IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`;`IMAGE (vv:num->real^3) (:num)`]
3056 THEN MRESA_TAC(GEN_ALL DART_OF_HYP_VV)[`vv:num->real^3`]
3057 THEN ASSUME_TAC(SET_RULE`IMAGE (\i. vv (SUC i),vv i) (:num) SUBSET
3058       IMAGE (\i. vv i,vv (SUC i)) (:num) UNION
3059       IMAGE (\i. vv (SUC i),(vv:num->real^3) i) (:num)`)
3060 THEN MRESA_TAC(FINITE_SUBSET)[`IMAGE (\i. (vv:num->real^3) (SUC i),vv i) (:num)`;`darts_of_hyp (IMAGE (\i. {vv i, (vv:num->real^3) (SUC i)}) (:num)) (IMAGE vv (:num))`]
3061 THEN ASM_SIMP_TAC[CARD_PAIR_SYM_0;CARD_EQUI_FF_SYM_0]
3062 THEN MATCH_MP_TAC (REAL_ARITH`A=C==>A-B=C-B`)
3063 THEN ASM_SIMP_TAC[SUM_PAIR_SYM_0;o_DEF;FST_SND_PAIR_SYM_0]
3064 THEN MRESA_TAC(GEN_ALL Qknvmlb.SUM_AZIM_EQ_ANGLE_LE4)[`IMAGE (vv:num->real^3) (:num)`;`vv:num->real^3`;`1:num`;`s:scs_v39`;`(vv:num->real^3) (1 MOD scs_k_v39 s)`;`      IMAGE (\i. vv i,(vv:num->real^3) (SUC i)) (:num)`;`
3065        IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`]
3066 THEN POP_ASSUM MP_TAC
3067 THEN ASM_REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;]
3068 THEN RESA_TAC
3069 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3070 THEN MATCH_MP_TAC SUM_EQ_GENERAL
3071 THEN ASM_REWRITE_TAC[IN_ELIM_THM;]
3072 THEN MP_TAC(ARITH_RULE`~(k<=3)==> SUC(k-1)=k/\ SUC(SUC(k-1))=k+1/\ SUC 0=1/\ ~(k=0)/\ 1 * k + 0=k/\ 1 * k + 1=k+1/\1<k/\ 3<k`)
3073 THEN RESA_TAC
3074 THEN EXISTS_TAC`(\i. (vv:num->real^3) (SUC i),vv i)`
3075 THEN RESA_TAC;
3076
3077 REWRITE_TAC[IN_ELIM_THM;IMAGE;EXISTS_UNIQUE]
3078 THEN REPEAT RESA_TAC
3079 THEN EXISTS_TAC`x MOD k`
3080 THEN ASM_REWRITE_TAC[]
3081 THEN MRESA_TAC DIVISION[`x:num`;`k:num`]
3082 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
3083 THEN POP_ASSUM(fun th-> MRESA_TAC th[`x:num`]
3084 THEN MRESA_TAC th[`SUC x:num`]
3085 THEN MRESA_TAC th[`SUC(x MOD k):num`])
3086 THEN POP_ASSUM MP_TAC
3087 THEN ASM_SIMP_TAC[MOD_SUC_MOD;PAIR_EQ]
3088 THEN REPEAT RESA_TAC
3089 THEN MRESAL_TAC (GEN_ALL Qknvmlb.VV_INJ)[`s:scs_v39`;`k:num`;`vv:num->real^3`]
3090 [BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;]
3091 THEN POP_ASSUM(fun th-> MRESA_TAC th[`y':num`;`x MOD k`]);
3092
3093 REPEAT RESA_TAC;
3094
3095 REWRITE_TAC[IMAGE;IN_ELIM_THM]
3096 THEN EXISTS_TAC`x:num`
3097 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN(:num)`];
3098
3099 REWRITE_TAC[ADD1;NORM_NEG;REAL_EQ_MUL_LCANCEL]
3100 THEN MATCH_MP_TAC(SET_RULE`A==> C\/A`)
3101 THEN REWRITE_TAC[GSYM ADD1]
3102 THEN ABBREV_TAC`V= IMAGE (vv:num->real^3) (:num)`
3103 THEN ABBREV_TAC`E = IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`
3104 THEN ABBREV_TAC`FF = IMAGE (\i. ((vv:num->real^3) i, vv (SUC i))) (:num)`
3105 THEN MP_TAC LOCAL_FAN_DUAL_SYM_0
3106 THEN ASM_TAC
3107 THEN REWRITE_TAC[BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;]
3108 THEN REPEAT RESA_TAC
3109 THEN POP_ASSUM MP_TAC
3110 THEN ASM_SIMP_TAC[OPP_IMAGE_F_EQ_NEG;OPP_IMAGE_E_EQ_NEG;OPP_IMAGE_V_EQ_NEG;OPP_IMAGE_E_EQ;OPP_IMAGE_F_EQ2]
3111 THEN ASM_SIMP_TAC[PAIR_FUN_SYM_0;IMAGE_E_SYM_0;IMAGE_V_SYM_0;OPP_IMAGE_E_EQ;OPP_IMAGE_F_EQ2]
3112 THEN STRIP_TAC
3113 THEN SUBGOAL_THEN`(--vv (SUC x),--vv x) IN IMAGE (\(x,y). --x,--y) (IMAGE (\i. vv (SUC i),(vv:num->real^3) i) (:num))`ASSUME_TAC;
3114
3115 REWRITE_TAC[GSYM PAIR_FUN_SYM_0]
3116 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
3117 THEN EXISTS_TAC`x:num`
3118 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN(:num)`];
3119
3120 MRESA_TAC (GEN_ALL Local_lemmas.LOFA_DETERMINE_AZIM_IN_FA)
3121 [`IMAGE (\x:real^3. --x) (IMAGE vv (:num))`;`IMAGE (\(x,y):real^3#real^3. --x,--y) (IMAGE (\i. vv (SUC i),vv i) (:num))`;`IMAGE (\i. {-- (vv:num->real^3) i, --vv (SUC i)}) (:num)`]
3122 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(--vv (SUC x),--(vv:num->real^3) x)`])
3123 THEN ASM_SIMP_TAC[EE_SYM_0;EE_EXPAND_BB_VV]
3124 THEN MRESAL_TAC (GEN_ALL EE_EXPAND_BB_VV)[`V:real^3->bool`;`FF:real^3#real^3->bool`;`s:scs_v39`;`E:(real^3->bool)->bool`;`vv:num->real^3`;`SUC x`;`k:num`;]
3125 [BBs_v39;PAIR_EQ;LET_DEF;LET_END_DEF;]
3126 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
3127 THEN POP_ASSUM(fun th-> MRESA_TAC th[`SUC x +k-1`]
3128 THEN MRESA_TAC th[`x:num`])
3129 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3130 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3131 THEN MP_TAC(ARITH_RULE`~(k<=3) ==> SUC x + k - 1= 1 *k + x/\ ~(k=0)`)
3132 THEN RESA_TAC
3133 THEN MRESA_TAC MOD_MULT_ADD[`1`;`k:num`;`x:num`]
3134 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3135 THEN ASM_SIMP_TAC[Local_lemmas.AZIM_CYCLE_TWO_POINT_SET;GSYM ELEMENT2_SYM_0]
3136 THEN MRESAL_TAC (GEN_ALL Qknvmlb.VV_SUC_EQ_RHO_NODE_PRIME)[`IMAGE (vv:num->real^3) (:num)`;`IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`;`k:num`;`s:scs_v39`;`IMAGE (\i. vv i,(vv:num->real^3) (SUC i)) (:num)`;`(vv:num->real^3) (1 MOD k)`;`vv:num->real^3`;`1 MOD k:num`][MMs_v39;LET_DEF;LET_END_DEF;BBprime2_v39;BBs_v39;GSYM ADD1]
3137 THEN SUBGOAL_THEN`(vv:num->real^3) (SUC x) IN V`ASSUME_TAC;
3138
3139 EXPAND_TAC"V"
3140 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
3141 THEN EXISTS_TAC`SUC x:num`
3142 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN(:num)`];
3143
3144 MP_TAC Nkezbfc_local.CONVEX_LOFA_IMP_INANGLE_EQ_AZIM_IVS
3145 THEN RESA_TAC
3146 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(vv:num->real^3) (SUC x)`])
3147 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
3148 THEN POP_ASSUM(fun th-> MRESA_TAC th[`SUC x `])
3149 THEN MRESAL_TAC(GEN_ALL CARD_V_EQ_SCS_K1)[`s:scs_v39`;`vv:num->real^3`;`IMAGE (vv:num->real^3) (:num)`;`k:num`][MMs_v39;LET_DEF;LET_END_DEF;BBprime2_v39;BBs_v39]
3150 THEN  MP_TAC Local_lemmas.ITER_CARD_MINUS1_EQ_IVS_RN1
3151 THEN RESA_TAC
3152 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(vv:num->real^3) (SUC x)`])
3153 THEN MRESAL_TAC (GEN_ALL Qknvmlb.VV_SUC_EQ_RHO_NODE_PRIME)[`IMAGE (vv:num->real^3) (:num)`;`IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`;`k:num`;`s:scs_v39`;`IMAGE (\i. vv i,(vv:num->real^3) (SUC i)) (:num)`;`(vv:num->real^3) (SUC x MOD k)`;`vv:num->real^3`;`SUC x MOD k:num`][MMs_v39;LET_DEF;LET_END_DEF;BBprime2_v39;BBs_v39;GSYM ADD1]
3154 THEN POP_ASSUM (fun th-> MRESAL_TAC th[`SUC 0`][ITER]
3155 THEN MRESAL_TAC th[`k - 1`][ITER;ARITH_RULE`1+A=SUC A`])
3156 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
3157 THEN POP_ASSUM(fun th->  
3158 MRESA_TAC th[`x:num`]
3159 THEN MRESA_TAC th[`SUC (SUC x )`]
3160 THEN MRESA_TAC th[`SUC (SUC x MOD k) `]
3161 THEN MRESA_TAC th[`k-1+ (SUC x MOD k) `])
3162 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3163 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3164 THEN ASM_SIMP_TAC[MOD_SUC_MOD]
3165 THEN MP_TAC(ARITH_RULE`3<k==> k-1<k/\ k-1 +SUC x= 1*k+x`)
3166 THEN RESA_TAC
3167 THEN MRESA_TAC MOD_LT[`k-1`;`k:num`]
3168 THEN MRESA_TAC MOD_ADD_MOD[`k-1`;`SUC x`;`k:num`]
3169 THEN MATCH_MP_TAC AZIM_NEG
3170 THEN SUBGOAL_THEN`(vv:num->real^3) (SUC x),vv (SUC (SUC x)) IN FF`ASSUME_TAC;
3171
3172 EXPAND_TAC"FF"
3173 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
3174 THEN EXISTS_TAC`SUC x:num`
3175 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN(:num)`];
3176
3177 MRESA_TAC (GEN_ALL Local_lemmas.LOCAL_FAN_IN_FF_NOT_COLLINEAR)[`V:real^3->bool`;`E:(real^3->bool)->bool`;`FF:real^3#real^3->bool`;`(vv:num->real^3) (SUC x), (vv:num->real^3) (SUC (SUC x))`]
3178 THEN SUBGOAL_THEN`(vv:num->real^3) ( x),vv ( (SUC x)) IN FF`ASSUME_TAC;
3179
3180 EXPAND_TAC"FF"
3181 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
3182 THEN EXISTS_TAC`x:num`
3183 THEN ASM_REWRITE_TAC[SET_RULE`(a:num)IN(:num)`];
3184
3185 ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3186 THEN MRESA_TAC (GEN_ALL Local_lemmas.LOCAL_FAN_IN_FF_NOT_COLLINEAR)[`V:real^3->bool`;`E:(real^3->bool)->bool`;`FF:real^3#real^3->bool`;`(vv:num->real^3) (x), (vv:num->real^3) ( (SUC x))`]]);;
3187
3188
3189
3190
3191
3192
3193
3194
3195 let OPP_IS_SCS=prove_by_refinement( `is_scs_v39 s/\ s' = scs_opp_v39 s==> is_scs_v39 (scs_opp_v39 s)`,
3196 [
3197 ABBREV_TAC`k=scs_k_v39 s`
3198 THEN ASM_TAC
3199 THEN REWRITE_TAC[scs_v39_explicit;scs_opp_v39;LET_DEF;LET_END_DEF;is_scs_v39;peropp]
3200 THEN RESA_TAC
3201 THEN RESA_TAC
3202 THEN MP_TAC(ARITH_RULE`3<=k==> ~(k=0)`)
3203 THEN RESA_TAC
3204 THEN REPEAT RESA_TAC;
3205
3206
3207 ASM_TAC
3208 THEN REWRITE_TAC[periodic;peropp;]
3209 THEN REPEAT RESA_TAC
3210 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3211 ;
3212
3213
3214
3215 ASM_TAC
3216 THEN REWRITE_TAC[periodic;peropp;]
3217 THEN REPEAT RESA_TAC
3218 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3219 ;
3220
3221
3222 ASM_TAC
3223 THEN REWRITE_TAC[periodic;peropp;]
3224 THEN REPEAT RESA_TAC
3225 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3226 ;
3227
3228
3229 ASM_TAC
3230 THEN REWRITE_TAC[periodic;peropp;]
3231 THEN REPEAT RESA_TAC
3232 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3233 ;
3234
3235 ASM_TAC
3236 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3237 THEN REPEAT RESA_TAC
3238 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3239 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3240 ;
3241
3242 ASM_TAC
3243 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3244 THEN REPEAT RESA_TAC
3245 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3246 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3247 ;
3248
3249
3250 ASM_TAC
3251 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3252 THEN REPEAT RESA_TAC
3253 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3254 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3255 ;
3256
3257 ASM_TAC
3258 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3259 THEN REPEAT RESA_TAC
3260 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3261 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3262 ;
3263
3264 ASM_TAC
3265 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3266 THEN REPEAT RESA_TAC
3267 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3268 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3269 ;
3270
3271
3272
3273 ASM_TAC
3274 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3275 THEN REPEAT RESA_TAC
3276 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3277 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3278 ;
3279
3280 ASM_TAC
3281 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3282 THEN REPEAT RESA_TAC
3283 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3284 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3285 ;
3286
3287
3288 ASM_TAC
3289 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3290 THEN REPEAT RESA_TAC
3291 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3292 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3293 ;
3294
3295
3296 ASM_TAC
3297 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3298 THEN REPEAT RESA_TAC
3299 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3300 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3301 ;
3302
3303 ASM_TAC
3304 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3305 THEN REPEAT RESA_TAC
3306 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3307 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3308 ;
3309
3310
3311 ASM_TAC
3312 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3313 THEN REPEAT RESA_TAC
3314 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3315 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3316 ;
3317
3318
3319 ASM_TAC
3320 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3321 THEN REPEAT RESA_TAC
3322 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3323 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3324 ;
3325
3326
3327 ASM_TAC
3328 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3329 THEN REPEAT RESA_TAC
3330 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3331 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3332 ;
3333
3334 ASM_TAC
3335 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3336 THEN REPEAT RESA_TAC
3337 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3338 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3339 ;
3340
3341
3342 ASM_TAC
3343 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3344 THEN REPEAT RESA_TAC
3345 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3346 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3347 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
3348 THEN MRESA_TAC MOD_LT[`j:num`;`k:num`]
3349 THEN MRESA_TAC SUC_INJ[`i:num`;`j:num`]
3350 THEN MP_TAC(ARITH_RULE`i < k/\ j <k /\ ~(SUC i= SUC j)==> k- SUC i<k /\ k- SUC j<k /\ ~(k- SUC i= k- SUC j)`)
3351 THEN RESA_TAC
3352 ;
3353
3354
3355
3356 ASM_TAC
3357 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3358 THEN REPEAT RESA_TAC
3359 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3360 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3361 THEN MRESAL_TAC DIVISION[`i:num`;`scs_k_v39 s`][ARITH_3_TAC]
3362 THEN MP_TAC(ARITH_RULE`i MOD 3<3 ==> i MOD 3=0\/ i MOD 3=1\/ i MOD 3=2`)
3363 THEN RESA_TAC;
3364
3365
3366
3367 MRESAL_TAC (GEN_ALL Zithlqn.IMP_SUC_MOD_EQ)[`i:num`;`0:num`;`3`][ARITH_3_TAC]
3368 THEN REPLICATE_TAC (29-16)(POP_ASSUM MP_TAC)
3369 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3370 THEN MRESAL1_TAC th`1:num`[ARITH_3_TAC])
3371 ;
3372
3373
3374 MRESAL_TAC (GEN_ALL Zithlqn.IMP_SUC_MOD_EQ)[`i:num`;`1:num`;`3`][ARITH_3_TAC]
3375 THEN REPLICATE_TAC (29-16)(POP_ASSUM MP_TAC)
3376 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3377 THEN MRESAL1_TAC th`0:num`[ARITH_3_TAC])
3378 ;
3379
3380
3381 MRESAL_TAC (GEN_ALL Zithlqn.IMP_SUC_MOD_EQ)[`i:num`;`2:num`;`3`][ARITH_3_TAC]
3382 THEN REPLICATE_TAC (29-16)(POP_ASSUM MP_TAC)
3383 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3384 THEN MRESAL1_TAC th`2:num`[ARITH_3_TAC])
3385 THEN ASM_TAC
3386 THEN REWRITE_TAC[periodic2]
3387 THEN REPEAT RESA_TAC
3388 THEN REPLICATE_TAC (29-22)(POP_ASSUM MP_TAC)
3389 THEN POP_ASSUM(fun th-> 
3390 ASM_TAC
3391 THEN REWRITE_TAC[th]
3392 THEN ASSUME_TAC th
3393 THEN REPEAT STRIP_TAC)
3394 THEN POP_ASSUM MP_TAC
3395 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s 2`][ARITH_3_TAC;periodic]
3396 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`3:num`[ARITH_3_TAC])
3397
3398 ;
3399
3400
3401 ASM_TAC
3402 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3403 THEN REPEAT RESA_TAC
3404 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3405 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3406 THEN MRESA_TAC DIVISION[`i:num`;`k:num`]
3407 THEN MP_TAC(ARITH_RULE`i MOD k<k /\3<k==> i MOD k= k-1 \/ i MOD k<k-1`)
3408 THEN RESA_TAC;
3409
3410 MP_TAC(ARITH_RULE`3<k==> k- SUC(k-1)=0/\ 1<k/\ k-1+1=k/\ k*1=k/\ k - (0 + 1)=k-1/\ SUC(k-1)=k`)
3411 THEN RESA_TAC
3412 THEN REWRITE_TAC[ADD1]
3413 THEN MRESA_TAC MOD_LT[`1`;`k:num`]
3414 THEN MRESA_TAC MOD_MULT[`k:num`;`1:num`]
3415 THEN MRESA_TAC MOD_ADD_MOD[`i:num`;`1`;`k:num`]
3416 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
3417 THEN ASM_TAC
3418 THEN REWRITE_TAC[periodic2]
3419 THEN REPEAT RESA_TAC
3420 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s (k-1)`][ARITH_3_TAC;periodic]
3421 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`k:num`[ARITH_3_TAC])
3422 THEN REPLICATE_TAC (37-17)(POP_ASSUM MP_TAC)
3423 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3424 THEN MRESAL1_TAC th`k-1:num`[ARITH_3_TAC])
3425 ;
3426
3427
3428 MP_TAC(ARITH_RULE`3<k/\ i MOD k< k-1==> k- SUC(k-1)=0/\ 1<k/\ k-1+1=k/\ k*1=k/\ k - (0 + 1)=k-1/\ SUC(k-1)=k/\ i MOD k+1<k/\ k - (i MOD k+1)=SUC (k - ((i MOD k+1) + 1)) `)
3429 THEN RESA_TAC
3430 THEN REWRITE_TAC[ADD1]
3431 THEN MRESA_TAC MOD_LT[`1`;`k:num`]
3432 THEN MRESA_TAC MOD_LT[`i MOD k+1`;`k:num`]
3433 THEN MRESA_TAC MOD_ADD_MOD[`i:num`;`1`;`k:num`]
3434 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
3435 THEN REPLICATE_TAC (38-17)(POP_ASSUM MP_TAC)
3436 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3437 THEN MRESAL1_TAC th`(k - ((i MOD k + 1) + 1)):num`[ARITH_3_TAC])
3438 ;
3439
3440
3441
3442
3443
3444 ASM_TAC
3445 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3446 THEN REPEAT DISCH_TAC
3447 THEN POP_ASSUM MP_TAC
3448 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3449 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3450 THEN STRIP_TAC
3451 THEN MRESA_TAC DIVISION[`i:num`;`k:num`]
3452 THEN MRESA_TAC DIVISION[`j:num`;`k:num`]
3453 THEN MP_TAC(ARITH_RULE`3<=k/\ i MOD k<k /\ j MOD k<k==> SUC (k - SUC (i MOD k)) = (k -  (i MOD k))/\ k- SUC(i MOD k)<k /\ k- SUC(j MOD k)<k`)
3454 THEN RESA_TAC
3455 THEN MRESA_TAC MOD_LT[`k- SUC(i MOD k)`;`k:num`]
3456 THEN MRESA_TAC MOD_LT[`k- SUC(j MOD k)`;`k:num`]
3457 THEN REPLICATE_TAC (34-18)(POP_ASSUM MP_TAC)
3458 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3459 THEN MRESAL_TAC th[`k - SUC (i MOD k):num`;`(k - SUC (j MOD k))`][ARITH_3_TAC])
3460 ;
3461
3462 POP_ASSUM MP_TAC
3463 THEN MP_TAC(ARITH_RULE`i MOD k< k==> i MOD k=0 \/ k-i MOD k<k`)
3464 THEN RESA_TAC;
3465
3466
3467 MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`A*1=A/\ k-0=k `]
3468 THEN STRIP_TAC
3469 THEN MP_TAC(ARITH_RULE`k - SUC (j MOD k) = 0 /\ j MOD k<k /\ 3<=k==> j MOD k= k-1 /\ k-1<k/\ SUC(k-1)=k`)
3470 THEN RESA_TAC
3471 THEN MRESA_TAC MOD_LT[`k-1`;`k:num`]
3472 THEN 
3473 MRESA_TAC(GEN_ALL Zithlqn.IMP_SUC_MOD_EQ)[`j:num`;`k-1:num`;`k:num`]
3474 ;
3475
3476
3477 MRESA_TAC MOD_LT[`k-i MOD k`;`k:num`]
3478 THEN STRIP_TAC
3479 THEN MP_TAC(ARITH_RULE`k - SUC (j MOD k) = k - i MOD k /\ i MOD k< k /\  j MOD k < k/\ k - i MOD k<k/\ 3<=k ==> i MOD k = SUC (j MOD k)/\ (j MOD k) +1 <k/\ 1<k`)
3480 THEN RESA_TAC
3481 THEN MRESA_TAC MOD_LT[`1`;`k:num`]
3482 THEN MRESA_TAC MOD_LT[`j MOD k +1`;`k:num`]
3483 THEN MRESAL_TAC MOD_ADD_MOD[`j:num`;`1:num`;`k:num`][ADD1]
3484 ;
3485
3486
3487
3488  POP_ASSUM MP_TAC
3489 THEN MP_TAC(ARITH_RULE`j MOD k<k==> SUC(k- SUC(j MOD k))= k -j MOD k`)
3490 THEN RESA_TAC
3491 THEN MP_TAC(ARITH_RULE`j MOD k< k==> j MOD k=0 \/ k-j MOD k<k`)
3492 THEN RESA_TAC;
3493
3494
3495 MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`A*1=A/\ k-0=k `]
3496 THEN STRIP_TAC
3497 THEN MP_TAC(ARITH_RULE`k - SUC (i MOD k) = 0 /\ i MOD k<k /\ 3<=k==> i MOD k= k-1 /\ k-1<k/\ SUC(k-1)=k`)
3498 THEN RESA_TAC
3499 THEN MRESA_TAC MOD_LT[`k-1`;`k:num`]
3500 THEN 
3501 MRESA_TAC(GEN_ALL Zithlqn.IMP_SUC_MOD_EQ)[`i:num`;`k-1:num`;`k:num`]
3502 ;
3503
3504
3505 MRESA_TAC MOD_LT[`k-j MOD k`;`k:num`]
3506 THEN STRIP_TAC
3507 THEN MP_TAC(ARITH_RULE`k - SUC (i MOD k) = k - j MOD k /\ j MOD k< k /\  i MOD k < k/\ k - j MOD k<k/\ 3<=k ==> j MOD k = SUC (i MOD k)/\ (i MOD k) +1 <k/\ 1<k`)
3508 THEN RESA_TAC
3509 THEN MRESA_TAC MOD_LT[`1`;`k:num`]
3510 THEN MRESA_TAC MOD_LT[`i MOD k +1`;`k:num`]
3511 THEN MRESAL_TAC MOD_ADD_MOD[`i:num`;`1:num`;`k:num`][ADD1]
3512 ;
3513
3514
3515 ASM_TAC
3516 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3517 THEN REPEAT DISCH_TAC
3518 THEN POP_ASSUM MP_TAC
3519 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3520 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3521 THEN STRIP_TAC
3522 THEN REPLICATE_TAC (25-19)(POP_ASSUM MP_TAC)
3523 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3524 THEN MRESAL_TAC th[`k - SUC (i MOD k):num`;`(k - SUC (j MOD k))`][ARITH_3_TAC])
3525 ;
3526
3527
3528 ASM_TAC
3529 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3530 THEN REPEAT DISCH_TAC
3531 THEN POP_ASSUM MP_TAC
3532 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3533 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3534 THEN STRIP_TAC
3535 THEN REPLICATE_TAC (25-19)(POP_ASSUM MP_TAC)
3536 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3537 THEN MRESAL_TAC th[`k - SUC (i MOD k):num`;`(k - SUC (j MOD k))`][ARITH_3_TAC])
3538 ;
3539
3540
3541
3542
3543 ASM_TAC
3544 THEN REWRITE_TAC[periodic;peropp;periodic2;peropp2;]
3545 THEN REPEAT DISCH_TAC
3546 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`i:num`][ARITH_RULE`1*k+i=i+k`]
3547 THEN MRESAL_TAC MOD_MULT_ADD[`1:num`;`k:num`;`j:num`][ARITH_RULE`1*k+i=i+k`]
3548 THEN SUBGOAL_THEN`
3549 CARD
3550       {i | i < k /\
3551            (&2 * h0 < scs_b_v39 s i (SUC i) \/ &2 < scs_a_v39 s i (SUC i))}
3552 =CARD
3553  {i | i < k /\
3554       (&2 * h0 < scs_b_v39 s (k - SUC (i MOD k)) (k - SUC (SUC i MOD k)) \/
3555        &2 < scs_a_v39 s (k - SUC (i MOD k)) (k - SUC (SUC i MOD k)))}
3556 `
3557 ASSUME_TAC
3558 ;
3559
3560
3561
3562 MATCH_MP_TAC CARD_IMAGE_INJ_EQ
3563 THEN REWRITE_TAC[IN_ELIM_THM]
3564 THEN EXISTS_TAC`(\x. k -  SUC (SUC x MOD k))`
3565 THEN ASM_REWRITE_TAC[]
3566 THEN STRIP_TAC;
3567
3568 MATCH_MP_TAC FINITE_SUBSET
3569 THEN EXISTS_TAC`0..k`
3570 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_NUMSEG;IN_ELIM_THM]
3571 THEN ARITH_TAC;
3572
3573 STRIP_TAC;
3574
3575
3576 GEN_TAC
3577 THEN STRIP_TAC
3578 THEN POP_ASSUM MP_TAC
3579 THEN MRESA_TAC MOD_LT[`x:num`;`k:num`]
3580 THEN MRESA_TAC DIVISION[`SUC x`;`k:num`]
3581 THEN MP_TAC(ARITH_RULE`3<=k /\ SUC x MOD k < k ==> k - SUC(SUC x MOD k )<k
3582 /\ SUC (k - SUC (SUC x MOD k)) = k- SUC x MOD k`)
3583 THEN RESA_TAC
3584 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`A*1=A/\ k-0=k `]
3585 THEN ASM_TAC
3586 THEN REWRITE_TAC[periodic2]
3587 THEN REPEAT RESA_TAC
3588 THEN POP_ASSUM MP_TAC
3589 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s (k-1)`][ARITH_3_TAC;periodic]
3590 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`k:num`[ARITH_3_TAC])
3591 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s (k-1)`][ARITH_3_TAC;periodic]
3592 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`k:num`[ARITH_3_TAC])
3593 THEN MP_TAC(ARITH_RULE`x<k ==> SUC x=k \/ SUC x<k`)
3594 THEN RESA_TAC
3595 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0=1/\ k-k=0/\ k-0=k`]
3596 THEN MRESA_TAC MOD_LT[`SUC x`;`k:num`]
3597 THEN RESA_TAC;
3598
3599
3600
3601 REWRITE_TAC[EXISTS_UNIQUE]
3602 THEN REPEAT STRIP_TAC
3603 ;
3604
3605 POP_ASSUM MP_TAC
3606 THEN MP_TAC(ARITH_RULE`y<k ==> y=k-1\/ y< k-1`)
3607 THEN RESA_TAC;
3608
3609 MP_TAC(ARITH_RULE`3<=k==> k-1<k/\ SUC(k-1)=k`)
3610 THEN RESA_TAC
3611 THEN STRIP_TAC
3612 THEN EXISTS_TAC`k-1`
3613 THEN MRESA_TAC MOD_LT[`k-1`;`k:num`]
3614 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`A*1=A/\ k-0=k /\ SUC 0=1/\ k-k=0`]
3615 THEN ASM_TAC
3616 THEN REWRITE_TAC[periodic2]
3617 THEN REPEAT DISCH_TAC
3618 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_b_v39 s (k-1)`][ARITH_3_TAC;periodic]
3619 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`k:num`[ARITH_3_TAC])
3620 THEN REPEAT STRIP_TAC
3621 THEN MRESA_TAC DIVISION[`SUC y':num`;`k:num`]
3622 THEN MP_TAC(ARITH_RULE`SUC y' MOD k< k /\ k - SUC (SUC y' MOD k) = k - 1 ==> SUC y' MOD k=0`)
3623 THEN RESA_TAC
3624 THEN POP_ASSUM MP_TAC
3625 THEN MP_TAC(ARITH_RULE`y'<k /\ 3<=k ==> SUC y'<k\/ y'=k-1`)
3626 THEN RESA_TAC
3627 THEN MRESAL_TAC MOD_LT[`SUC y':num`;`k:num`][ARITH_RULE`~(SUC a=0)`]
3628 ;
3629
3630
3631 STRIP_TAC
3632 THEN EXISTS_TAC`k-y-2`
3633 THEN ASM_REWRITE_TAC[]
3634 THEN MP_TAC(ARITH_RULE`y<k-1==> k-y-2<k/\ SUC(k-y-2)= k-y-1/\ k-y-1<k/\ k - SUC (k - y - 1) = y/\ k - (k - y - 1)= SUC y`)
3635 THEN RESA_TAC
3636 THEN MRESA_TAC MOD_LT[`k-y-1`;`k:num`]
3637 THEN MRESA_TAC MOD_LT[`k-y-2`;`k:num`]
3638 THEN REPEAT STRIP_TAC
3639 THEN POP_ASSUM MP_TAC
3640 THEN MP_TAC(ARITH_RULE`y'<k /\ 3<=k ==> SUC y'<k\/ y'=k-1`)
3641 THEN RESA_TAC
3642 ;
3643
3644 MRESAL_TAC MOD_LT[`SUC y':num`;`k:num`][ARITH_RULE`~(SUC a=0)`]
3645 THEN STRIP_TAC
3646 THEN MP_TAC(ARITH_RULE`k - y - 2 < k/\ k - SUC (SUC y') = y/\ SUC y'<k 
3647 ==> y'= k-y-2`)
3648 THEN RESA_TAC;
3649
3650
3651 MP_TAC(ARITH_RULE`3<=k/\ y< k-1 ==>SUC(k-1)=k/\ ~(k-1=y)`)
3652 THEN RESA_TAC
3653 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`A*1=A/\ k-0=k /\ SUC 0=1/\ k-k=0`]
3654 ;
3655
3656
3657 MRESAL_TAC MOD_LT[`SUC y':num`;`k:num`][ARITH_RULE`~(SUC a=0)`]
3658 THEN STRIP_TAC
3659 THEN MP_TAC(ARITH_RULE`k - y - 2 < k/\ k - SUC (SUC y') = y/\ SUC y'<k 
3660 ==> y'= k-y-2`)
3661 THEN RESA_TAC;
3662
3663
3664 MP_TAC(ARITH_RULE`3<=k/\ y< k-1 ==>SUC(k-1)=k/\ ~(k-1=y)`)
3665 THEN RESA_TAC
3666 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`A*1=A/\ k-0=k /\ SUC 0=1/\ k-k=0`]
3667 ;
3668
3669
3670
3671 POP_ASSUM MP_TAC
3672 THEN MP_TAC(ARITH_RULE`y<k ==> y=k-1\/ y< k-1`)
3673 THEN RESA_TAC;
3674
3675 MP_TAC(ARITH_RULE`3<=k==> k-1<k/\ SUC(k-1)=k`)
3676 THEN RESA_TAC
3677 THEN STRIP_TAC
3678 THEN EXISTS_TAC`k-1`
3679 THEN MRESA_TAC MOD_LT[`k-1`;`k:num`]
3680 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`A*1=A/\ k-0=k /\ SUC 0=1/\ k-k=0`]
3681 THEN ASM_TAC
3682 THEN REWRITE_TAC[periodic2]
3683 THEN REPEAT DISCH_TAC
3684 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s (k-1)`][ARITH_3_TAC;periodic]
3685 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`k:num`[ARITH_3_TAC])
3686 THEN REPEAT STRIP_TAC
3687 THEN MRESA_TAC DIVISION[`SUC y':num`;`k:num`]
3688 THEN MP_TAC(ARITH_RULE`SUC y' MOD k< k /\ k - SUC (SUC y' MOD k) = k - 1 ==> SUC y' MOD k=0`)
3689 THEN RESA_TAC
3690 THEN POP_ASSUM MP_TAC
3691 THEN MP_TAC(ARITH_RULE`y'<k /\ 3<=k ==> SUC y'<k\/ y'=k-1`)
3692 THEN RESA_TAC
3693 THEN MRESAL_TAC MOD_LT[`SUC y':num`;`k:num`][ARITH_RULE`~(SUC a=0)`]
3694 ;
3695
3696
3697 STRIP_TAC
3698 THEN EXISTS_TAC`k-y-2`
3699 THEN ASM_REWRITE_TAC[]
3700 THEN MP_TAC(ARITH_RULE`y<k-1==> k-y-2<k/\ SUC(k-y-2)= k-y-1/\ k-y-1<k/\ k - SUC (k - y - 1) = y/\ k - (k - y - 1)= SUC y`)
3701 THEN RESA_TAC
3702 THEN MRESA_TAC MOD_LT[`k-y-1`;`k:num`]
3703 THEN MRESA_TAC MOD_LT[`k-y-2`;`k:num`]
3704 THEN REPEAT STRIP_TAC
3705 THEN POP_ASSUM MP_TAC
3706 THEN MP_TAC(ARITH_RULE`y'<k /\ 3<=k ==> SUC y'<k\/ y'=k-1`)
3707 THEN RESA_TAC
3708 ;
3709
3710 MRESAL_TAC MOD_LT[`SUC y':num`;`k:num`][ARITH_RULE`~(SUC a=0)`]
3711 THEN STRIP_TAC
3712 THEN MP_TAC(ARITH_RULE`k - y - 2 < k/\ k - SUC (SUC y') = y/\ SUC y'<k 
3713 ==> y'= k-y-2`)
3714 THEN RESA_TAC;
3715
3716
3717 MP_TAC(ARITH_RULE`3<=k/\ y< k-1 ==>SUC(k-1)=k/\ ~(k-1=y)`)
3718 THEN RESA_TAC
3719 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`A*1=A/\ k-0=k /\ SUC 0=1/\ k-k=0`]
3720 ;
3721
3722
3723 MRESAL_TAC MOD_LT[`SUC y':num`;`k:num`][ARITH_RULE`~(SUC a=0)`]
3724 THEN STRIP_TAC
3725 THEN MP_TAC(ARITH_RULE`k - y - 2 < k/\ k - SUC (SUC y') = y/\ SUC y'<k 
3726 ==> y'= k-y-2`)
3727 THEN RESA_TAC;
3728
3729
3730 MP_TAC(ARITH_RULE`3<=k/\ y< k-1 ==>SUC(k-1)=k/\ ~(k-1=y)`)
3731 THEN RESA_TAC
3732 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`A*1=A/\ k-0=k /\ SUC 0=1/\ k-k=0`]
3733 ;
3734
3735 POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
3736 ;
3737
3738
3739
3740 ]);;
3741
3742
3743 let DUAL_PEROPP=prove(`~(k=0) /\ periodic a k==> peropp (peropp a k) k=a`,
3744 STRIP_TAC
3745 THEN ASM_SIMP_TAC[FUN_EQ_THM;peropp;OPP_SUC_MOD;PERIODIC_PROPERTY]);;
3746
3747
3748 let DUAL_PEROPP2=prove(`~(k=0) /\ periodic2 a k==> peropp2 (peropp2 a k) k=a`,
3749 REWRITE_TAC[periodic2]
3750 THEN STRIP_TAC
3751 THEN ASM_SIMP_TAC[FUN_EQ_THM;peropp2;OPP_SUC_MOD;PERIODIC_PROPERTY;periodic]);;
3752
3753
3754 let SCS_OPP_REFL=prove(`is_scs_v39 s
3755 ==> (scs_opp_v39 ((scs_opp_v39 s)))=s`,
3756 SIMP_TAC[scs_opp_v39;IN_SING;PAIR_EQ;LET_DEF;LET_END_DEF;scs_v39_explicit;peropp2;is_scs_v39;BBprime_v39;is_scs_v39;DUAL_PEROPP2;DUAL_PEROPP]
3757 THEN RESA_TAC
3758 THEN MP_TAC(ARITH_RULE`3<= scs_k_v39 s==> ~(scs_k_v39 s=0)`)
3759 THEN RESA_TAC
3760 THEN ASM_SIMP_TAC[scs_opp_v39;IN_SING;PAIR_EQ;LET_DEF;LET_END_DEF;scs_v39_explicit;peropp2;is_scs_v39;BBprime_v39;is_scs_v39;DUAL_PEROPP2;DUAL_PEROPP]
3761 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;scs_v39_explicit;scs_k_v39;
3762 scs_d_v39;scs_a_v39 ;
3763   scs_am_v39 ;
3764   scs_bm_v39 ;
3765   scs_b_v39 ;
3766   scs_J_v39 ;
3767   scs_lo_v39 ;
3768   scs_hi_v39 ;
3769   scs_str_v39;
3770 scs_v39;Misc_defs_and_lemmas.part6;Misc_defs_and_lemmas.drop3;FST;
3771 Misc_defs_and_lemmas.part1;Misc_defs_and_lemmas.drop1;
3772 Misc_defs_and_lemmas.part2;Misc_defs_and_lemmas.drop2;
3773 Misc_defs_and_lemmas.part3;Misc_defs_and_lemmas.drop3;
3774 Misc_defs_and_lemmas.part4;Misc_defs_and_lemmas.drop0;
3775 Misc_defs_and_lemmas.part5;
3776 Misc_defs_and_lemmas.part7;
3777 Misc_defs_and_lemmas.part8;
3778 Misc_defs_and_lemmas.part0;]));;
3779
3780
3781
3782
3783
3784
3785
3786 let K_SCS_OPP=prove(`scs_k_v39 (scs_opp_v39 s) = scs_k_v39 s`,
3787 REWRITE_TAC[scs_v39_explicit;scs_opp_v39;LET_DEF;LET_END_DEF;is_scs_v39;peropp]
3788 );;
3789
3790
3791 let DUAL_NEG_PEROPP=prove(`~(k=0) /\ periodic ww k==>(\i. --peropp (\i. --peropp (ww:num->real^N) k i) k i)= ww`,
3792 STRIP_TAC
3793 THEN ASM_SIMP_TAC[FUN_EQ_THM;peropp;OPP_SUC_MOD;VECTOR_ARITH`-- -- A=A:real^N`]
3794 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`ww:num->real^N`][ARITH_3_TAC;]);;
3795
3796
3797
3798
3799
3800 let DUALNEG_PEROPP_BB=prove(`scs_k_v39 s=k /\BBs_v39 (scs_opp_v39 s) ww /\ ~(k<=3)
3801 ==> (\i. --peropp (\i. --peropp (ww:num->real^3) k i) k i)= ww`,
3802 STRIP_TAC
3803 THEN MATCH_MP_TAC DUAL_NEG_PEROPP
3804 THEN ASM_TAC
3805 THEN REWRITE_TAC[scs_arrow_v39;IN_SING;PAIR_EQ;LET_DEF;LET_END_DEF;scs_v39_explicit;peropp2;BBs_v39;scs_opp_v39]
3806 THEN REPEAT RESA_TAC
3807 THEN POP_ASSUM MP_TAC
3808 THEN POP_ASSUM MP_TAC
3809 THEN ARITH_TAC);;
3810
3811
3812
3813 let BBPRIME_EQ_OPP_SYM_0=prove(`scs_k_v39 s=k /\ is_scs_v39 s /\ BBprime_v39 s vv /\ ~(k<=3)
3814 ==> BBprime_v39 (scs_opp_v39 s) (\i. -- peropp vv k i)`,
3815 REPEAT GEN_TAC
3816 THEN STRIP_TAC
3817 THEN MP_TAC PEROPP_IN_BB_SYM_0
3818 THEN RESA_TAC
3819 THEN MRESA_TAC(GEN_ALL OPP_IS_SCS)[`scs_opp_v39 s`;`s:scs_v39`]
3820 THEN MP_TAC SCS_OPP_REFL
3821 THEN RESA_TAC
3822 THEN ASM_TAC
3823 THEN REWRITE_TAC[scs_arrow_v39;IN_SING;PAIR_EQ;LET_DEF;LET_END_DEF;scs_v39_explicit;peropp2;BBprime_v39]
3824 THEN REPEAT RESA_TAC
3825 THENL[
3826 MRESAL_TAC (GEN_ALL PEROPP_IN_BB_SYM_0)[`scs_opp_v39 s`;`ww:num->real^3`;`k:num`][K_SCS_OPP;]
3827 THEN MP_TAC TAUSTAR_EQ_SYM_0
3828 THEN RESA_TAC
3829 THEN MP_TAC DUALNEG_PEROPP_BB
3830 THEN RESA_TAC
3831 THEN MRESA_TAC (GEN_ALL TAUSTAR_EQ_SYM_0)[`k:num`;`s:scs_v39`;`(\i. --peropp (ww:num->real^3) k i)`]
3832 THEN REPLICATE_TAC (13-3)(POP_ASSUM MP_TAC)
3833 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3834 THEN MRESAL1_TAC th`(\i. --peropp (ww:num->real^3) k i)`[ARITH_3_TAC]);
3835 MP_TAC TAUSTAR_EQ_SYM_0
3836 THEN RESA_TAC]);;
3837
3838
3839
3840
3841 let BBINDEX_EQ_SYM_0=prove_by_refinement(`scs_k_v39 s=k /\ is_scs_v39 s /\ BBprime_v39 s vv /\ ~(k<=3)
3842 ==>
3843 BBindex_v39 (scs_opp_v39 s) (\i. --peropp vv k i) = BBindex_v39 s vv`,
3844 [
3845 STRIP_TAC
3846 THEN ASM_REWRITE_TAC[BBindex_v39;scs_opp_v39;LET_DEF;LET_END_DEF;scs_v39_explicit;peropp2;peropp;DIST_SYM_0]
3847 THEN MP_TAC(ARITH_RULE`~(k<=3)==> ~(k=0)`)
3848 THEN RESA_TAC
3849 THEN MATCH_MP_TAC CARD_IMAGE_INJ_EQ
3850 THEN REWRITE_TAC[IN_ELIM_THM]
3851 THEN EXISTS_TAC`(\x:num. (k - SUC(SUC (x MOD k)MOD k)))`
3852 THEN ASM_REWRITE_TAC[]
3853 THEN STRIP_TAC;
3854
3855 MATCH_MP_TAC FINITE_SUBSET
3856 THEN EXISTS_TAC`0..k`
3857 THEN REWRITE_TAC[FINITE_NUMSEG;SUBSET;IN_NUMSEG;IN_ELIM_THM]
3858 THEN ARITH_TAC;
3859
3860 STRIP_TAC;
3861
3862 GEN_TAC
3863 THEN RESA_TAC;
3864
3865 ASM_SIMP_TAC[OPP_SUC_MOD]
3866 THEN MRESA_TAC MOD_LT[`x:num`;`k:num`]
3867 THEN MRESA_TAC DIVISION[`SUC x:num`;`k:num`]
3868 THEN MP_TAC(ARITH_RULE`SUC x MOD k< k/\ ~(k<=3)==> k - SUC (SUC x MOD k) < k /\ SUC (k-1)=k/\ k-1<k`)
3869 THEN RESA_TAC
3870 THEN MP_TAC(ARITH_RULE`x<k==> x=k-1\/ SUC x<k`)
3871 THEN RESA_TAC;
3872
3873 MRESA_TAC MOD_LT[`k-1`;`k:num`]
3874 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`A*1=A/\ k-0=k /\ SUC 0=1/\ k-k=0`]
3875 THEN REPLICATE_TAC (15-6)(POP_ASSUM MP_TAC)
3876 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3877 THEN MP_TAC th)
3878 THEN ASM_REWRITE_TAC[]
3879 THEN ASM_TAC
3880 THEN REWRITE_TAC[periodic2;is_scs_v39;LET_DEF;LET_END_DEF;BBprime_v39;BBs_v39]
3881 THEN REPEAT DISCH_TAC
3882 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s (k-1)`][ARITH_3_TAC;periodic]
3883 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`k:num`[ARITH_3_TAC])
3884 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_3_TAC;]
3885 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`k:num`[ARITH_3_TAC])
3886 THEN ONCE_REWRITE_TAC[DIST_SYM]
3887 THEN REPLICATE_TAC (4)(POP_ASSUM MP_TAC)
3888 THEN ASM_REWRITE_TAC[]
3889 THEN REPEAT RESA_TAC;
3890
3891 MRESA_TAC DIVISION[`SUC x:num`;`k:num`]
3892 THEN MP_TAC(ARITH_RULE`SUC x<k==> SUC (k - SUC (SUC x))= k- SUC x/\ k - SUC x<k/\ k - SUC (k - SUC x)=x`)
3893 THEN RESA_TAC
3894 THEN MRESA_TAC MOD_LT[`k- SUC x`;`k:num`]
3895 THEN MRESA_TAC MOD_LT[`SUC x`;`k:num`]
3896 THEN ONCE_REWRITE_TAC[DIST_SYM]
3897 THEN ASM_TAC
3898 THEN REWRITE_TAC[periodic2;is_scs_v39;LET_DEF;LET_END_DEF;BBprime_v39;BBs_v39]
3899 THEN REPEAT RESA_TAC;
3900
3901 REPEAT STRIP_TAC
3902 THEN ASM_REWRITE_TAC[EXISTS_UNIQUE]
3903 THEN EXISTS_TAC`k-SUC(SUC y  MOD k)`
3904 THEN ASM_REWRITE_TAC[]
3905 THEN MRESA_TAC DIVISION[`SUC y`;`k:num`]
3906 THEN MP_TAC(ARITH_RULE`SUC y MOD k<k/\ ~(k<=3) ==> k - SUC (SUC y MOD k) < k/\ SUC(k-1)=k/\ k-1<k/\ SUC 0=1/\ k-k=0`)
3907 THEN RESA_TAC
3908 THEN ASM_SIMP_TAC[OPP_SUC_MOD;MOD_SUC_MOD]
3909 THEN MP_TAC(ARITH_RULE`y<k==> y=k-1\/ SUC y<k`)
3910 THEN RESA_TAC;
3911
3912 MRESA_TAC MOD_LT[`k-1`;`k:num`]
3913 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`A*1=A/\ k-0=k /\ SUC 0=1/\ k-k=0`]
3914 THEN STRIP_TAC;
3915
3916 REPLICATE_TAC (16-6)(POP_ASSUM MP_TAC)
3917 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3918 THEN MP_TAC th)
3919 THEN ASM_REWRITE_TAC[]
3920 THEN ASM_TAC
3921 THEN REWRITE_TAC[periodic2;is_scs_v39;LET_DEF;LET_END_DEF;BBprime_v39;BBs_v39]
3922 THEN REPEAT DISCH_TAC
3923 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`scs_a_v39 s (k-1)`][ARITH_3_TAC;periodic]
3924 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`k:num`[ARITH_3_TAC])
3925 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`scs_k_v39 s`;`vv:num->real^3`][ARITH_3_TAC;]
3926 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`k:num`[ARITH_3_TAC;])
3927 THEN ONCE_REWRITE_TAC[DIST_SYM]
3928 THEN REPLICATE_TAC (4)(POP_ASSUM MP_TAC)
3929 THEN ASM_REWRITE_TAC[]
3930 THEN REPEAT RESA_TAC
3931 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
3932
3933 REPEAT RESA_TAC
3934 THEN POP_ASSUM MP_TAC
3935 THEN MRESA_TAC MOD_LT[`y':num`;`k:num`]
3936 THEN STRIP_TAC
3937 THEN MRESA_TAC DIVISION[`SUC y':num`;`k:num`]
3938 THEN MP_TAC(ARITH_RULE`SUC y' MOD k< k /\ k - SUC (SUC y' MOD k) = k - 1 ==> SUC y' MOD k=0`)
3939 THEN RESA_TAC
3940 THEN POP_ASSUM MP_TAC
3941 THEN MP_TAC(ARITH_RULE`y'<k /\ ~(k<=3) ==> SUC y'<k\/ y'=k-1`)
3942 THEN RESA_TAC
3943 THEN MRESAL_TAC MOD_LT[`SUC y':num`;`k:num`][ARITH_RULE`~(SUC a=0)`];
3944
3945 MRESA_TAC MOD_LT[`SUC y`;`k:num`]
3946 THEN MP_TAC(ARITH_RULE`SUC y<k==> k- SUC(SUC y)<k/\ SUC (k - SUC (SUC y))= k- SUC y/\ k- SUC y< k/\ k - SUC (k - SUC y) = y`)
3947 THEN RESA_TAC
3948 THEN MRESA_TAC MOD_LT[`k- SUC(SUC y)`;`k:num`]
3949 THEN MRESA_TAC MOD_LT[`k- (SUC y)`;`k:num`]
3950 THEN MRESA_TAC MOD_LT[`y:num`;`k:num`]
3951 THEN ONCE_REWRITE_TAC[DIST_SYM]
3952 THEN REPLICATE_TAC (22-6)(POP_ASSUM MP_TAC)
3953 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
3954 THEN MP_TAC th)
3955 THEN ASM_REWRITE_TAC[]
3956 THEN ASM_TAC
3957 THEN REWRITE_TAC[periodic2;is_scs_v39;LET_DEF;LET_END_DEF;BBprime_v39;BBs_v39]
3958 THEN REPEAT RESA_TAC
3959 THEN REPLICATE_TAC (3)(POP_ASSUM MP_TAC)
3960 THEN MP_TAC(ARITH_RULE`y'<k /\ 3<=k ==> SUC y'<k\/ y'=k-1`)
3961 THEN RESA_TAC;
3962
3963 MRESA_TAC MOD_LT[`SUC y'`;`k:num`]
3964 THEN MRESA_TAC MOD_LT[`y':num`;`k:num`]
3965 THEN REPEAT STRIP_TAC
3966 THEN MP_TAC(ARITH_RULE`k- SUC(SUC y')=y/\ SUC y'<k /\ SUC y<k ==> y'= k-SUC(SUC y)`)
3967 THEN RESA_TAC;
3968
3969 MRESA_TAC MOD_LT[`k-1`;`k:num`]
3970 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`A*1=A/\ k-0=k /\ SUC 0=1/\ k-k=0`]
3971 THEN MP_TAC(ARITH_RULE`SUC y<k /\ ~(k<=3)==> ~(k-1=y)`)
3972 THEN RESA_TAC]);;
3973
3974
3975 let IMAGE_BBINDEX_SYM_0=prove(`scs_k_v39 s=k /\ is_scs_v39 s /\ BBprime_v39 s vv /\ ~(k<=3)
3976 ==>(IMAGE (BBindex_v39 (scs_opp_v39 s)) (BBprime_v39 (scs_opp_v39 s))) =
3977   (IMAGE (BBindex_v39 s) (BBprime_v39 s))`,
3978 REPEAT STRIP_TAC
3979 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM;EXTENSION]
3980 THEN REWRITE_TAC[IN]
3981 THEN GEN_TAC
3982 THEN EQ_TAC
3983 THEN RESA_TAC
3984 THENL[
3985 MRESA_TAC(GEN_ALL OPP_IS_SCS)[`scs_opp_v39 s`;`s:scs_v39`]
3986 THEN MP_TAC SCS_OPP_REFL
3987 THEN RESA_TAC
3988 THEN MRESAL_TAC (GEN_ALL BBPRIME_EQ_OPP_SYM_0)[`scs_opp_v39 s`;`x':num->real^3`;`k:num`][K_SCS_OPP;]
3989 THEN EXISTS_TAC`(\i. --peropp (x':num->real^3) k i)`
3990 THEN ASM_REWRITE_TAC[]
3991 THEN ASM_TAC
3992 THEN REWRITE_TAC[BBprime_v39;LET_DEF;LET_END_DEF;scs_v39_explicit;]
3993 THEN REPEAT RESA_TAC
3994 THEN MRESA_TAC(GEN_ALL DUALNEG_PEROPP_BB)[`s:scs_v39`;`k:num`;`x':num->real^3`]
3995 THEN MRESAL_TAC (GEN_ALL BBINDEX_EQ_SYM_0)[`k:num`;`s:scs_v39`;`(\i. --peropp (x':num->real^3) k i)`][BBprime_v39;LET_DEF;LET_END_DEF;scs_v39_explicit;];
3996
3997 EXISTS_TAC`(\i. --peropp (x':num->real^3) k i)`
3998 THEN MRESAL_TAC (GEN_ALL BBPRIME_EQ_OPP_SYM_0)[`s:scs_v39`;`x':num->real^3`;`k:num`][K_SCS_OPP;]
3999 THEN MRESA_TAC (GEN_ALL BBINDEX_EQ_SYM_0)[`k:num`;`s:scs_v39`;`(x':num->real^3)`]]);;
4000
4001
4002 let BBINDEX_MIN_SYM_0=prove(`scs_k_v39 s=k /\ is_scs_v39 s /\ BBprime_v39 s vv /\ ~(k<=3)
4003 ==> BBindex_min_v39 (scs_opp_v39 s) =BBindex_min_v39 (s)`,
4004 STRIP_TAC
4005 THEN ASM_REWRITE_TAC[BBindex_min_v39;LET_DEF;LET_END_DEF;scs_v39_explicit;peropp2;peropp;DIST_SYM_0]
4006 THEN MP_TAC(ARITH_RULE`~(k<=3)==> ~(k=0)`)
4007 THEN RESA_TAC
4008 THEN MP_TAC IMAGE_BBINDEX_SYM_0
4009 THEN RESA_TAC);;
4010
4011
4012
4013
4014 let BBPRIME2_SYM_0=prove(`scs_k_v39 s=k /\ is_scs_v39 s /\ BBprime2_v39 s vv /\ ~(k<=3)
4015 ==> BBprime2_v39 (scs_opp_v39 s) (\i. -- peropp vv k i)`,
4016 STRIP_TAC
4017 THEN MP_TAC BBPRIME_EQ_OPP_SYM_0
4018 THEN RESA_TAC
4019 THEN MP_TAC BBINDEX_EQ_SYM_0
4020 THEN RESA_TAC
4021 THEN MP_TAC BBINDEX_MIN_SYM_0
4022 THEN RESA_TAC
4023 THEN ASM_TAC
4024 THEN REWRITE_TAC[scs_arrow_v39;IN_SING;PAIR_EQ;LET_DEF;LET_END_DEF;scs_v39_explicit;peropp2;BBprime2_v39]
4025 THEN REPEAT RESA_TAC)
4026 ;;
4027
4028
4029 let MM_SCS_OPP=prove_by_refinement(`scs_k_v39 s=k /\ is_scs_v39 s /\ MMs_v39 s vv /\ ~(k<=3)
4030 ==> MMs_v39 (scs_opp_v39 s) (\i. -- peropp vv k i)`,
4031 [
4032 STRIP_TAC
4033 THEN MP_TAC BBPRIME2_SYM_0
4034 THEN RESA_TAC
4035 THEN ASM_TAC
4036 THEN REWRITE_TAC[scs_arrow_v39;IN_SING;PAIR_EQ;LET_DEF;LET_END_DEF;scs_v39_explicit;peropp2;MMs_v39;scs_opp_v39;peropp;AZIM_NEG;BBprime2_v39;BBprime_v39]
4037 THEN REPEAT RESA_TAC
4038 THEN ABBREV_TAC`V= IMAGE (vv:num->real^3) (:num)`
4039 THEN ABBREV_TAC`E = IMAGE (\i. {(vv:num->real^3) i, vv (SUC i)}) (:num)`
4040 THEN ABBREV_TAC`FF = IMAGE (\i. ((vv:num->real^3) i, vv (SUC i))) (:num)`
4041 THEN MP_TAC LOCAL_FAN_DUAL_SYM_0
4042 THEN RESA_TAC;
4043
4044 SUBGOAL_THEN`--(vv:num->real^3) (k - SUC (i MOD k)),--vv (k - SUC (SUC i MOD k)) IN
4045       IMAGE (\i. --vv (k - SUC (i MOD k)),--vv (k - SUC (SUC i MOD k)))
4046       (:num)` ASSUME_TAC;
4047
4048 REWRITE_TAC[IMAGE;IN_ELIM_THM]
4049 THEN EXISTS_TAC`i:num`
4050 THEN ASM_REWRITE_TAC[SET_RULE`(i:num)IN(:num)`];
4051
4052 SUBGOAL_THEN`--vv (k - SUC ((i + k - 1) MOD k)),--vv (k - SUC (i MOD k)) IN
4053       IMAGE (\i. --(vv:num->real^3) (k - SUC (i MOD k)),--vv (k - SUC (SUC i MOD k)))
4054       (:num)`ASSUME_TAC;
4055
4056 REWRITE_TAC[IMAGE;IN_ELIM_THM]
4057 THEN EXISTS_TAC`i+k-1:num`
4058 THEN ASM_REWRITE_TAC[SET_RULE`(i:num)IN(:num)`]
4059 THEN MP_TAC(ARITH_RULE`~(k<=3)==> SUC(i+k-1)=1*k+i/\ ~(k=0)`)
4060 THEN RESA_TAC
4061 THEN MRESA_TAC MOD_MULT_ADD[`1`;`k:num`;`i:num`];
4062
4063 MRESA_TAC(GEN_ALL Local_lemmas.LOCAL_FAN_IN_FF_NOT_COLLINEAR)
4064 [`IMAGE (\i. --(vv:num->real^3) (k - SUC (i MOD k))) (:num)`;`
4065        IMAGE (\i. {--(vv:num->real^3) (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))})
4066        (:num)`;`
4067        IMAGE (\i. --(vv:num->real^3) (k - SUC (i MOD k)),--vv (k - SUC (SUC i MOD k)))
4068        (:num)`;`((--(vv:num->real^3) (k - SUC (i MOD k))) ,(--vv (k - SUC (SUC i MOD k))))`]
4069 THEN MRESA_TAC(GEN_ALL Local_lemmas.LOCAL_FAN_IN_FF_NOT_COLLINEAR)
4070 [`IMAGE (\i. --(vv:num->real^3) (k - SUC (i MOD k))) (:num)`;`
4071        IMAGE (\i. {--(vv:num->real^3) (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))})
4072        (:num)`;`
4073        IMAGE (\i. --(vv:num->real^3) (k - SUC (i MOD k)),--vv (k - SUC (SUC i MOD k)))
4074        (:num)`;`((--vv (k - SUC ((i + k - 1) MOD k))), (--(vv:num->real^3) (k - SUC (i MOD k))) )`]
4075 THEN POP_ASSUM MP_TAC
4076 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
4077 THEN STRIP_TAC
4078 THEN MRESAL_TAC(GEN_ALL VEC0_NOT_COLLINEAR_SYM_0)[`{--(vv:num->real^3) (k - SUC (i MOD k)), --vv (k - SUC (SUC i MOD k))}`][ELEMENT2_SYM_0;REFL_SYM_0]
4079 THEN POP_ASSUM MP_TAC
4080 THEN REWRITE_TAC[GSYM ELEMENT2_SYM_0]
4081 THEN ASM_REWRITE_TAC[SET_RULE`{A} UNION {B,C}={A,B,C}`]
4082 THEN MRESAL_TAC(GEN_ALL VEC0_NOT_COLLINEAR_SYM_0)[`{--(vv:num->real^3) (k - SUC (i MOD k)), --vv (k - SUC ((i + k - 1) MOD k))}`][ELEMENT2_SYM_0;REFL_SYM_0]
4083 THEN POP_ASSUM MP_TAC
4084 THEN REWRITE_TAC[GSYM ELEMENT2_SYM_0]
4085 THEN ASM_REWRITE_TAC[SET_RULE`{A} UNION {B,C}={A,B,C}`]
4086 THEN REPEAT STRIP_TAC
4087 THEN ASM_SIMP_TAC[AZIM_NEG]
4088 THEN REPLICATE_TAC (26-6)(POP_ASSUM MP_TAC)
4089 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4090 THEN MRESA_TAC th[`(k - SUC (i MOD k))`])
4091 THEN POP_ASSUM MP_TAC
4092 THEN MP_TAC(ARITH_RULE`~(k<=3)==> SUC(i+k-1)=1*k+i/\ ~(k=0)/\ k-1<k/\ 1<k
4093 /\ k-0=k/\ k - 1 + k - 1= 1*k+k-2/\ 0+1=1/\ 1+1=2/\ 0+k-1=k-1/\ k - (k - 1 + 1)=0/\ 0<k/\ 1 *k+0=k`)
4094 THEN RESA_TAC
4095 THEN MRESA_TAC DIVISION[`i:num`;`k:num`]
4096 THEN MP_TAC(ARITH_RULE`i MOD k<k ==> SUC (k - SUC (i MOD k))=k-i MOD k/\ (i MOD k + k - 1) + 1= 1*k + i MOD k`)
4097 THEN RESA_TAC
4098 THEN ASM_TAC 
4099 THEN REWRITE_TAC[scs_arrow_v39;IN_SING;PAIR_EQ;LET_DEF;LET_END_DEF;scs_v39_explicit;peropp2;MMs_v39;scs_opp_v39;peropp;AZIM_NEG;BBprime2_v39;BBprime_v39;BBs_v39]
4100 THEN REPEAT RESA_TAC
4101 THEN POP_ASSUM MP_TAC
4102 THEN MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
4103 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k - SUC (i MOD k) + k - 1`]
4104 THEN MRESA_TAC th[`k - SUC (SUC i MOD k)`])
4105 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4106 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4107 THEN ASM_SIMP_TAC[ADD1]
4108 THEN MRESA_TAC MOD_LT[`1:num`;`k:num`]
4109 THEN MRESA_TAC MOD_LT[`0:num`;`k:num`]
4110 THEN MRESA_TAC MOD_LT[`k-1:num`;`k:num`]
4111 THEN MRESA_TAC MOD_ADD_MOD[`i:num`;`k-1:num`;`k:num`]
4112 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4113 THEN MRESA_TAC MOD_ADD_MOD[`i:num`;`1:num`;`k:num`]
4114 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4115 THEN MRESA_TAC MOD_MULT_ADD[`1`;`k:num`;`0:num`]
4116 THEN MRESA_TAC MOD_MULT_ADD[`1`;`k:num`;`k-2:num`]
4117 THEN MP_TAC(ARITH_RULE`i MOD k=0 \/ 0<i MOD k`)
4118 THEN RESA_TAC;
4119
4120 MRESAL_TAC(GEN_ALL PERIODIC_PROPERTY)[`k:num`;`vv:num->real^3`][ARITH_RULE`~(3=0)`;]
4121 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k:num`]);
4122
4123 MP_TAC(ARITH_RULE`0< i MOD k/\ ~(k<=3)/\ i MOD k<k==> i MOD k + k - 1= 1*k+ (i MOD k -1)/\ i MOD k-1<k/\ k - (i MOD k - 1 + 1)= k- i MOD k`)
4124 THEN RESA_TAC
4125 THEN MRESA_TAC MOD_MULT_ADD[`1`;`k:num`;`i MOD k-1:num`]
4126 THEN MRESA_TAC MOD_LT[`i MOD k-1`;`k:num`]
4127 THEN MP_TAC(ARITH_RULE`i MOD k<k==> i MOD k=k-1\/ i MOD k +1<k`)
4128 THEN RESA_TAC;
4129
4130 MP_TAC(ARITH_RULE`~(k<=3)==>k-1+1=k`)
4131 THEN RESA_TAC;
4132
4133 MRESA_TAC MOD_LT[`i MOD k +1`;`k:num`]
4134 THEN MP_TAC(ARITH_RULE`i MOD k +1<k==> k - (i MOD k + 1) + k - 1= 1*k+(k - ((i MOD k + 1) + 1))`)
4135 THEN RESA_TAC
4136 THEN MRESA_TAC MOD_MULT_ADD[`1`;`k:num`;`k - ((i MOD k + 1) + 1)`];
4137
4138 ASM_REWRITE_TAC[NORM_NEG]
4139 THEN REPLICATE_TAC (20-7)(POP_ASSUM MP_TAC)
4140 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4141 THEN MRESA_TAC th[`(k - SUC (i MOD k))`]) ;
4142
4143 ASM_REWRITE_TAC[NORM_NEG]
4144 THEN REPLICATE_TAC (20-8)(POP_ASSUM MP_TAC)
4145 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4146 THEN MRESA_TAC th[`(k - SUC (i MOD k))`]);
4147
4148 ASM_REWRITE_TAC[DIST_SYM_0]
4149 THEN REPLICATE_TAC (20-8)(POP_ASSUM MP_TAC)
4150 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4151 THEN MRESA_TAC th[`(k - SUC (i MOD k))`]);
4152
4153 ASM_REWRITE_TAC[DIST_SYM_0]
4154 THEN REPLICATE_TAC (20-8)(POP_ASSUM MP_TAC)
4155 THEN POP_ASSUM(fun th-> REPEAT STRIP_TAC
4156 THEN MRESA_TAC th[`(k - SUC (i MOD k))`])]) ;;
4157
4158
4159
4160 let YXIONXL2=prove_by_refinement( `!s.
4161   is_scs_v39 s /\ scs_k_v39 s=k /\ ~(k<=3) ==> scs_arrow_v39 {s} {scs_opp_v39 s}`,
4162 [REPEAT GEN_TAC
4163 THEN REWRITE_TAC[scs_arrow_v39;IN_SING;subdiv_v39;PAIR_EQ;LET_DEF;LET_END_DEF;]
4164 THEN REPEAT RESA_TAC;
4165 MRESA_TAC(GEN_ALL OPP_IS_SCS)[`(scs_opp_v39 s)`;`s:scs_v39`];
4166
4167 DISJ_CASES_TAC(SET_RULE`(!s'. s' = s ==> MMs_v39 s' = {}) \/ ~((!s'. s' = s ==> MMs_v39 s' = {}))`);
4168
4169 ASM_REWRITE_TAC[];
4170
4171 ASM_REWRITE_TAC[]
4172 THEN POP_ASSUM MP_TAC
4173 THEN REWRITE_TAC[NOT_FORALL_THM;NOT_IMP]
4174 THEN REPEAT STRIP_TAC
4175 THEN POP_ASSUM MP_TAC
4176 THEN RESA_TAC
4177 THEN EXISTS_TAC`scs_opp_v39 s`
4178 THEN POP_ASSUM MP_TAC
4179 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?vv. vv IN A`;IN]
4180 THEN STRIP_TAC
4181 THEN EXISTS_TAC`(\i. -- peropp (vv:num->real^3) k i)`
4182 THEN ASM_SIMP_TAC[MM_SCS_OPP]]);;
4183
4184
4185  end;;
4186
4187
4188 (*
4189 let check_completeness_claimA_concl = 
4190   Ineq.mk_tplate `\x. scs_arrow_v13 (set_of_list x) 
4191 *)
4192
4193
4194
4195