Update from HH
[Flyspeck/.git] / text_formalization / packing / oxl_2012.hl
1 (* ========================================================================== *)\r
2 (* FLYSPECK - BOOK FORMALIZATION                                              *)\r
3 (*                                                                            *)\r
4 (* Chapter: Packing                                                           *)\r
5 (* Lemma: OXLZLEZ                                                             *)\r
6 (* Author: Nguyen Quang Truong                                                *)\r
7 (* Date: 2012-12-21                                                           *)\r
8 (* ========================================================================== *)\r
9 \r
10 \r
11 \r
12 module Oxl_2012 = struct\r
13 \r
14 \r
15 open Oxl_def;;\r
16 \r
17 \r
18 (* \r
19 \r
20 needs "/home/user1/flyspeck/working/boot.hl";;\r
21 \r
22 \r
23 \r
24 ===================== dont worry about this ================\r
25 needs "/home/user1/flyspeck/working/update_database_310.ml";;\r
26 needs "/home/user1/flyspeck/working/asm_search.ml";;\r
27 needs "/home/user1/flyspeck/working/Oxl_deff.hl";;\r
28 \r
29 \r
30 \r
31 needs "/home/user1/flyspeck/working/oxl_2012.hl";;\r
32 \r
33 \r
34 \r
35 *)\r
36 \r
37 \r
38 \r
39 \r
40 \r
41 let asms_search0 sths =\r
42   let rec immediatesublist l1 l2 =\r
43     match (l1,l2) with\r
44       [],_ -> true\r
45     | _,[] -> false\r
46     | (h1::t1,h2::t2) -> h1 = h2 & immediatesublist t1 t2 in\r
47   let rec sublist l1 l2 =\r
48     match (l1,l2) with\r
49       [],_ -> true\r
50     | _,[] -> false\r
51     | (h1::t1,h2::t2) -> immediatesublist l1 l2 or sublist l1 t2 in\r
52   let exists_subterm_satisfying p (n,th) = can (find_term p) (concl th)\r
53   and name_contains s (n,th) = sublist (explode s) (explode n) in\r
54   let rec filterpred tm =\r
55     match tm with\r
56       Comb(Var("<omit this pattern>",_),t) -> not o filterpred t\r
57     | Comb(Var("<match theorem name>",_),Var(pat,_)) -> name_contains pat\r
58     | Comb(Var("<match aconv>",_),pat) -> exists_subterm_satisfying (aconv pat)\r
59     | pat -> exists_subterm_satisfying (can (term_match [] pat)) in\r
60   fun pats ->\r
61     let triv,nontriv = partition is_var pats in\r
62     (if triv <> [] then\r
63       warn true\r
64          ("Ignoring plain variables in search: "^\r
65           end_itlist (fun s t -> s^", "^t) (map (fst o dest_var) triv))\r
66      else ());\r
67     (if nontriv = [] & triv <> [] then []\r
68      else itlist (filter o filterpred) pats sths);;\r
69 \r
70 let asms_search tms =\r
71   let gstk = !current_goalstack in\r
72   match gstk with\r
73     [] -> []\r
74   | (meta,gl::_,just)::_\r
75        -> let (sths,_) = gl in\r
76           map snd (asms_search0 sths tms)\r
77   | _  -> failwith "asm_searchs: Invalid goal state";;\r
78 \r
79 let ASMS_SEARCH_TCL (tms:(term)list) (thstac:(thm)list->tactic) : tactic =\r
80   fun (gl:goal) ->\r
81   let (sths,tm) = gl in\r
82   let ths1 = map snd (asms_search0 sths tms) in\r
83   thstac ths1 gl;;\r
84 \r
85 let ASM_SEARCH_TCL (tms:(term)list) (thstac:thm->tactic) : tactic =\r
86   let foo ths = match ths with\r
87                   [] -> failwith "ASM_SEARCH_TCL: No matching asms found"\r
88                 | _  -> thstac (hd ths) in\r
89   ASMS_SEARCH_TCL tms foo;;\r
90 \r
91 \r
92 \r
93 \r
94 let ATTACH thm = MATCH_MP (MESON[]` ! a b. ( a ==> b ) ==> ( a <=> a /\ b )`) thm;;\r
95 \r
96 let NHANH tm = ONCE_REWRITE_TAC[ ATTACH (SPEC_ALL ( tm ))];;\r
97 \r
98 let PHA = REWRITE_TAC[ MESON[] ` (a/\b)/\c <=> a/\ b /\ c `; MESON[]`\r
99 a ==> b ==> c <=> a /\ b ==> c `];;\r
100 \r
101 let DOWN_TAC = REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[IMP_IMP] THEN PHA;;\r
102 \r
103 \r
104 let DOWN = FIRST_X_ASSUM MP_TAC;;\r
105 \r
106 let DOWNS n = REPLICATE_TAC n DOWN THEN PHA;;\r
107 \r
108 let REMOVE_TAC = FIRST_X_ASSUM MP_TAC THEN MATCH_MP_TAC (TAUT` a ==> b ==> a`);;\r
109 \r
110 \r
111 let types_thm th = let cl = concl th in\r
112 List.map dest_var (frees cl );;\r
113 \r
114 let seans_fn () =\r
115 let (tms,tm) = top_goal () in\r
116 let vss = map frees (tm::tms) in\r
117 let vs = setify (flat vss) in\r
118 map dest_var vs;;\r
119 \r
120 \r
121 \r
122 \r
123 \r
124 let PAT_REWRITE_TAC tm thms =\r
125 (CONV_TAC (PAT_CONV tm (REWRITE_CONV thms )));;\r
126 \r
127 let FOR_ASM th =\r
128 let th1 = REWRITE_RULE[MESON[]` a /\ b ==> c <=>\r
129 a ==> b ==> c `] th in\r
130 let th2 = SPEC_ALL th1 in UNDISCH_ALL th2;;\r
131 \r
132 (* change a th having form |- A ==> t to the form A |- t\r
133 to get ready to some other commands\r
134 \r
135 \r
136 |- A ==> t\r
137 ----------- FOR_ASM\r
138 A |- t\r
139 *)\r
140 \r
141 let ASSUME_TAC2 = ASSUME_TAC o FOR_ASM;;\r
142 \r
143 \r
144 let PAT_ONCE_REWRITE_TAC tm thms =\r
145 (CONV_TAC (PAT_CONV tm (ONCE_REWRITE_CONV thms )));;\r
146 \r
147 let ASM_PAT_RW_TAC tm thms = EVERY_ASSUM (fun th ->\r
148 (CONV_TAC (PAT_CONV tm (ONCE_REWRITE_CONV\r
149 ( th ::[ thms ] )))));;\r
150 \r
151 let PAT_TH_TAC tm th =\r
152 (CONV_TAC (PAT_CONV tm (REWRITE_CONV[th] )));;\r
153 \r
154 \r
155 let IMP_TO_EQ_RULE th = MATCH_MP (TAUT` (a ==> b ) ==>\r
156 ( a <=> a /\ b )`) (SPEC_ALL th);;\r
157 \r
158 let NHANH_PAT tm th = PAT_ONCE_REWRITE_TAC tm\r
159 [ IMP_TO_EQ_RULE th ];;\r
160 \r
161 \r
162 let MAKE_FIRST_TAC tm = UNDISCH_TAC tm THEN DISCH_TAC;;\r
163 \r
164 \r
165 (* ---------- BG TEST ------------- *)\r
166 \r
167 \r
168 \r
169 let rec els L = match L with\r
170 [] -> p ()\r
171 | (x::l) -> e x; els l;;\r
172 \r
173 let rec bls L = match L with\r
174 [] -> p ()\r
175 | (x::l) -> b (); bls l;;\r
176 \r
177 \r
178 \r
179 \r
180 \r
181 (* ------------- *)\r
182 \r
183 let QU_OR_QXY = prove (` ! i. cc_qu_v11 cc i \/ cc_qx_v11 cc i \/ cc_qy_v11 cc i `,\r
184 REWRITE_TAC[cc_qu_v11; cc_qx_v11; cc_qy_v11] THEN MESON_TAC[]);;\r
185 \r
186 let QX_NN0 = REWRITE_RULE[REAL_ARITH` #0.0 = &0`] QX_NN;;\r
187 let QY_NN0 = REWRITE_RULE[REAL_ARITH` #0.0 = &0`] QY_NN;;\r
188 \r
189 \r
190 let MOD_REFL = REWRITE_RULE[MULT_CLAUSES] (SPECL [`m:num `;`1`] MOD_MULT);;\r
191 \r
192 \r
193 let SUM_POS_LT_NUMSEG = prove_by_refinement (\r
194 `!m n f. m <= n /\ (!p. m <= p /\ p <= n ==> &0 < f p) ==> &0 < sum (m..n) f`,\r
195 [GEN_TAC;\r
196 INDUCT_TAC;\r
197 REWRITE_TAC[LE; SUM_CLAUSES_NUMSEG];\r
198 SIMP_TAC[];\r
199 GEN_TAC;\r
200 STRIP_TAC;\r
201 FIRST_X_ASSUM (MP_TAC o (SPEC` 0`));\r
202 ASM_REWRITE_TAC[LE];\r
203 \r
204 \r
205 GEN_TAC;\r
206 ASM_CASES_TAC` m = SUC n `;\r
207 ASM_REWRITE_TAC[SUM_SING_NUMSEG];\r
208 STRIP_TAC;\r
209 FIRST_X_ASSUM (MP_TAC o (SPEC` SUC n `));\r
210 FIRST_X_ASSUM MP_TAC;\r
211 CONV_TAC TAUT;\r
212 \r
213 STRIP_TAC;\r
214 SUBGOAL_THEN`  &0 < sum (m..n) f ` MP_TAC;\r
215 FIRST_X_ASSUM MATCH_MP_TAC;\r
216 CONJ_TAC;\r
217 DOWN_TAC;\r
218 ARITH_TAC;\r
219 FIRST_X_ASSUM MP_TAC;\r
220 MESON_TAC[ARITH_RULE` a <= p ==> a <= SUC p `];\r
221 REWRITE_TAC[SUM_CLAUSES_NUMSEG];\r
222 ASM_REWRITE_TAC[];\r
223 STRIP_TAC;\r
224 MATCH_MP_TAC REAL_LT_ADD;\r
225 ASM_REWRITE_TAC[];\r
226 FIRST_X_ASSUM MATCH_MP_TAC;\r
227 ASM_REWRITE_TAC[LE_REFL]]);;\r
228 \r
229 \r
230 \r
231 \r
232 let periodic_mult = prove_by_refinement (\r
233 ` periodic f n <=> !k p. f (k * n + p ) = f p `,\r
234 [REWRITE_TAC[periodic];\r
235 EQ_TAC;\r
236 STRIP_TAC;\r
237 INDUCT_TAC;\r
238 REWRITE_TAC[MULT; ADD];\r
239 \r
240 REWRITE_TAC[ADD1; NUM_RING` (k + 1) * n = k * n + n `];\r
241 REWRITE_TAC[ARITH_RULE` (a + b) + c = a + b + (c:num) `];\r
242 DOWN_TAC;\r
243 MESON_TAC[ADD_SYM];\r
244 \r
245 DISCH_THEN (MP_TAC o (SPEC`1 `));\r
246 REWRITE_TAC[MULT_CLAUSES];\r
247 MESON_TAC[ADD_SYM]]);;\r
248 \r
249 \r
250 \r
251 \r
252 (* =================================================== *)\r
253 CHQSQEY_concl;;\r
254 \r
255 \r
256 \r
257 \r
258 let glt = `cc_bool_model_v11 cc /\\r
259  cc_real_model_v11 cc /\\r
260  sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0 /\\r
261  indSet = 0..cc_card_v11 cc - 1\r
262  ==> (?i j k.\r
263           ~(i = j \/ j = k \/ k = i) /\\r
264           i IN indSet /\\r
265           j IN indSet /\\r
266           k IN indSet /\\r
267           cc_4cell_v11 cc i /\\r
268           cc_4cell_v11 cc j /\\r
269           cc_4cell_v11 cc k)`;;\r
270 \r
271 \r
272 let e1 = (STRIP_TAC THEN ASSUME_TAC2 CC_CARD2 THEN \r
273 DOWN_TAC THEN NHANH periodic_fn THEN \r
274 ASM_CASES_TAC` ~ (?i. i IN indSet /\ cc_4cell_v11 cc i)` THENL [\r
275 \r
276 \r
277 SUBGOAL_THEN` ! i. i IN indSet ==> cc_qy_v11 cc i ` MP_TAC THENL \r
278 [MP_TAC QU_OR_QXY THEN \r
279 REWRITE_TAC[cc_qu_v11; cc_qx_v11] THEN \r
280 FIRST_X_ASSUM MP_TAC THEN \r
281 MESON_TAC[];\r
282 \r
283 REWRITE_TAC[cc_real_model_v11; cc_bool_model_v11]] THEN \r
284 \r
285 REPEAT STRIP_TAC THEN \r
286 SUBGOAL_THEN` ! i. i IN indSet ==> &0 < cc_gg_v11 cc i ` MP_TAC THENL [\r
287 \r
288 \r
289 UNDISCH_TAC`!i. i IN indSet ==> cc_qy_v11 cc i` THEN\r
290 DISCH_THEN NHANH THEN\r
291 UNDISCH_TAC`!i. cc_qy_v11 cc i ==> #0.008 * cc_azim_v11 cc i <= cc_gg_v11 cc i` THEN\r
292 STRIP_TAC THEN\r
293 FIRST_ASSUM NHANH THEN\r
294 GEN_TAC THEN\r
295 \r
296 UNDISCH_TAC` !i. #0.606 <= cc_azim_v11 cc i ` THEN\r
297 DISCH_TAC THEN\r
298 FIRST_ASSUM (MP_TAC o (SPEC` i: num `)) THEN\r
299 REAL_ARITH_TAC;\r
300 \r
301 STRIP_TAC] THEN \r
302 SUBGOAL_THEN` &0 < sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) ` MP_TAC THENL\r
303 \r
304 \r
305 [MATCH_MP_TAC SUM_POS_LT_NUMSEG THEN CONJ_TAC THENL \r
306 [UNDISCH_TAC` ~ (cc_card_v11 cc = 0) ` THEN \r
307 ARITH_TAC;\r
308 \r
309 REPEAT STRIP_TAC THEN \r
310 FIRST_X_ASSUM MATCH_MP_TAC THEN \r
311 ASM_REWRITE_TAC[IN_NUMSEG]];\r
312 \r
313 \r
314 UNDISCH_TAC` sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0 ` THEN \r
315 REAL_ARITH_TAC];\r
316 \r
317 FIRST_X_ASSUM MP_TAC] THEN \r
318 REWRITE_TAC[] THEN STRIP_TAC THEN STRIP_TAC THEN \r
319 ASM_CASES_TAC` ~ ( ?j. j IN indSet /\ ~(j = i) /\ cc_4cell_v11 cc j)`);;\r
320 \r
321 \r
322 \r
323 let e2 = (FIRST_X_ASSUM MP_TAC THEN \r
324 REWRITE_TAC [\r
325 MESON[]` ~(?j. j IN indSet /\ ~(j = i) /\ cc_4cell_v11 cc j) <=>\r
326 !j. j IN indSet /\ ~(j = i)  ==> ~ cc_4cell_v11 cc j `] THEN \r
327 \r
328 STRIP_TAC THEN \r
329 SUBGOAL_THEN`!j. j IN indSet /\ ~(j = i) ==> cc_qy_v11 cc j ` MP_TAC THENL [\r
330 \r
331 \r
332 \r
333 FIRST_ASSUM NHANH THEN \r
334 REPEAT STRIP_TAC THEN \r
335 MP_TAC (SPEC `j:num` QU_OR_QXY) THEN \r
336 FIRST_ASSUM MP_TAC THEN \r
337 SIMP_TAC[cc_qu_v11; cc_qx_v11];\r
338 \r
339 \r
340 SUBGOAL_THEN` cc_qu_v11 cc i \/ cc_qx_v11 cc i ` MP_TAC] THENL [\r
341 \r
342 MP_TAC (SPEC_ALL QU_OR_QXY) THEN \r
343 MATCH_MP_TAC (TAUT` ~ c ==> a \/ b \/ c ==> a \/ b `) THEN\r
344 ASM_REWRITE_TAC[cc_qy_v11];\r
345 \r
346 \r
347 STRIP_TAC THEN \r
348 STRIP_TAC THEN \r
349 SUBGOAL_THEN` cc_qy_v11 cc (i + 1)` MP_TAC]);;\r
350 \r
351 \r
352 \r
353 \r
354 let e3 = (ASM_CASES_TAC` i < cc_card_v11 cc - 1 ` THENL [\r
355 FIRST_ASSUM (MP_TAC o SPEC` i + 1 `) THEN ANTS_TAC THENL [\r
356 ASM_REWRITE_TAC[ARITH_RULE`~( i + 1 = i ) `; IN_NUMSEG] THEN \r
357 FIRST_ASSUM MP_TAC THEN \r
358 ARITH_TAC;\r
359 \r
360 REWRITE_TAC[]];\r
361 \r
362 \r
363 \r
364 UNDISCH_TAC` (i:num) IN indSet ` THEN \r
365 ASM_REWRITE_TAC[IN_NUMSEG] THEN \r
366 STRIP_TAC THEN \r
367 ASSUME_TAC2 (ARITH_RULE` ~(i < cc_card_v11 cc - 1) /\ i <= cc_card_v11 cc - 1 ==> cc_card_v11 cc - 1 = i `) THEN \r
368 UNDISCH_TAC` periodic (cc_qy_v11 cc) (cc_card_v11 cc) ` THEN \r
369 EXPAND_TAC "i" THEN \r
370 DOWN_TAC THEN \r
371 REWRITE_TAC[cc_bool_model_v11] THEN \r
372 NHANH (ARITH_RULE` ~( a = 0) ==> a - 1 + 1 = a `) THEN \r
373 SIMP_TAC[periodic] THEN \r
374 \r
375 \r
376 STRIP_TAC THEN \r
377 ONCE_REWRITE_TAC[ARITH_RULE` a = 0 + a `] THEN \r
378 ASM_REWRITE_TAC[] THEN \r
379 FIRST_X_ASSUM MATCH_MP_TAC THEN \r
380 ASM_REWRITE_TAC[IN_NUMSEG] THEN \r
381 \r
382 EXPAND_TAC "i" THEN \r
383 REWRITE_TAC[LE] THEN \r
384 MATCH_MP_TAC (ARITH_RULE` 2 <= a ==> ~( 0 = a - 1) `) THEN \r
385 FIRST_ASSUM ACCEPT_TAC]);;\r
386 \r
387 \r
388 let e4 = (\r
389 \r
390 \r
391 (* ------------------------------------- *)\r
392 DOWN_TAC THEN \r
393 REWRITE_TAC[cc_real_model_v11] THEN \r
394 STRIP_TAC THEN \r
395 UNDISCH_TAC` !i. cc_qu_v11 cc i /\ cc_qy_v11 cc (i + 1)\r
396           ==> cc_eps <= cc_gg_v11 cc i + cc_gg3a_v11 cc (i + 1) ` THEN \r
397 STRIP_TAC THEN \r
398 FIRST_ASSUM (MP_TAC o SPEC_ALL) THEN \r
399 ANTS_TAC THENL [ASM_REWRITE_TAC[];\r
400 MAKE_FIRST_TAC` !i. cc_qy_v11 cc i\r
401           ==> cc_gg3a_v11 cc i + cc_gg3b_v11 cc i <= cc_gg_v11 cc i `] THEN \r
402 \r
403 SUBGOAL_THEN` cc_gg3a_v11 cc ( i + 1) <= cc_gg_v11 cc ( i + 1) ` MP_TAC THENL [\r
404 MATCH_MP_TAC REAL_LE_TRANS THEN \r
405 EXISTS_TAC` cc_gg3a_v11 cc (i + 1) + cc_gg3b_v11 cc (i + 1)` THEN \r
406 \r
407 CONJ_TAC THENL [\r
408 REWRITE_TAC[REAL_LE_ADDR] THEN \r
409 FIRST_X_ASSUM MATCH_MP_TAC THEN \r
410 ASM_REWRITE_TAC[];\r
411 \r
412 FIRST_X_ASSUM MATCH_MP_TAC THEN \r
413 ASM_REWRITE_TAC[]];\r
414 \r
415 \r
416 PHA] THEN \r
417 NHANH (REAL_ARITH` a <= b /\ c <= d + a ==> c <= d + b `));;\r
418 \r
419 \r
420 \r
421 (* \r
422 `(cc_gg3a_v11 cc (i + 1) <= cc_gg_v11 cc (i + 1) /\\r
423   cc_eps <= cc_gg_v11 cc i + cc_gg3a_v11 cc (i + 1)) /\\r
424  cc_eps <= cc_gg_v11 cc i + cc_gg_v11 cc (i + 1)\r
425  ==> (?i j k.\r
426           ~(i = j \/ j = k \/ k = i) /\\r
427           i IN indSet /\\r
428           j IN indSet /\\r
429           k IN indSet /\\r
430           cc_4cell_v11 cc i /\\r
431           cc_4cell_v11 cc j /\\r
432           cc_4cell_v11 cc k)`\r
433 \r
434 *)\r
435 \r
436 (* =============================================\r
437 ================================================\r
438 let WKR_COMPTED = prove_by_refinement (glt ,\r
439 \r
440 \r
441 g glt;;\r
442 \r
443 \r
444 \r
445 els\r
446 [e1 ; e2 ; e3; e4;\r
447 \r
448 STRIP_TAC THEN \r
449 MP_TAC (SPECL [` cc_gg_v11 cc `;` cc_card_v11 cc`] periodic_sum) THEN \r
450 ANTS_TAC THENL [\r
451 ASM_REWRITE_TAC[] THEN \r
452 UNDISCH_TAC` cc_bool_model_v11 cc ` THEN \r
453 SIMP_TAC[cc_bool_model_v11];\r
454 DISCH_THEN (ASSUME_TAC o (SPEC` i:num`))] THEN \r
455 SUBGOAL_THEN` &0 <= sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) ` MP_TAC;\r
456 \r
457 ASM_CASES_TAC` i < cc_card_v11 cc - 1 `;\r
458 SUBGOAL_THEN` 0..cc_card_v11 cc - 1 = ((0..cc_card_v11 cc - 1) DIFF {i, i +1} ) UNION {i, i + 1}` MP_TAC THENL [\r
459 MATCH_MP_TAC (SET_RULE` s SUBSET S ==> S = (S DIFF s) UNION s `) THEN \r
460 UNDISCH_TAC` (i:num) IN indSet` THEN \r
461 ASM_SIMP_TAC[INSERT_SUBSET; EMPTY_SUBSET] THEN \r
462 \r
463 REWRITE_TAC[IN_NUMSEG] THEN \r
464 FIRST_ASSUM MP_TAC THEN \r
465 ARITH_TAC;\r
466 \r
467 \r
468 DISCH_THEN SUBST1_TAC THEN \r
469 REWRITE_TAC[]];\r
470 \r
471 SUBGOAL_THEN` ! f.  sum ((0..cc_card_v11 cc - 1) DIFF {i, i + 1} UNION {i, i + 1}) f = sum ((0..cc_card_v11 cc - 1) DIFF {i, i + 1}) f + sum ({i, i + 1}) f ` MP_TAC THENL [\r
472 GEN_TAC THEN \r
473 MATCH_MP_TAC SUM_UNION THEN\r
474 CONJ_TAC THENL [\r
475 MESON_TAC[FINITE_NUMSEG; FINITE_DIFF];\r
476 CONJ_TAC] THENL [\r
477 MESON_TAC[FINITE_EMPTY; FINITE_INSERT];\r
478 SET_TAC[]];\r
479 \r
480 \r
481 SIMP_TAC[] THEN\r
482 STRIP_TAC THEN \r
483 MATCH_MP_TAC REAL_LE_ADD THEN \r
484 CONJ_TAC];\r
485 \r
486 \r
487 MATCH_MP_TAC SUM_POS_LE THEN CONJ_TAC THENL [\r
488 MESON_TAC[FINITE_NUMSEG; FINITE_DIFF];\r
489 REPEAT STRIP_TAC];\r
490 \r
491 \r
492 \r
493 REWRITE_TAC[REAL_ARITH` &0 = #0.0 `] THEN \r
494 MATCH_MP_TAC QY_NN THEN \r
495 ASM_REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11] THEN\r
496 FIRST_ASSUM MATCH_MP_TAC\r
497  THEN\r
498 ASM_REWRITE_TAC[] THEN \r
499 FIRST_ASSUM MP_TAC THEN \r
500 REWRITE_TAC[IN_DIFF; IN_INSERT] THEN \r
501 MESON_TAC[];\r
502 \r
503 \r
504 \r
505 MP_TAC (MATCH_MP Geomdetail.SUM_DIS2 (ARITH_RULE` ~( i = i + 1 ) `)) THEN\r
506 STRIP_TAC THEN\r
507 MATCH_MP_TAC REAL_LE_TRANS THEN\r
508 EXISTS_TAC` cc_eps:real` THEN\r
509 ASM_REWRITE_TAC[] THEN REWRITE_TAC[cc_eps] THEN\r
510 REAL_ARITH_TAC;\r
511 \r
512 \r
513 ASM_CASES_TAC` i = cc_card_v11 cc - 1 ` THENL [\r
514 SUBGOAL_THEN` 0..cc_card_v11 cc - 1 = ((0..cc_card_v11 cc - 1) DIFF {i, 0}) UNION {i, 0}` MP_TAC THENL [\r
515 MATCH_MP_TAC (SET_RULE` s SUBSET S ==> S = (S DIFF s) UNION s`) THEN\r
516 REWRITE_TAC[INSERT_SUBSET; EMPTY_SUBSET; IN_NUMSEG] THEN\r
517 FIRST_X_ASSUM MP_TAC THEN\r
518 UNDISCH_TAC` (i:num) IN indSet` THEN\r
519 ASM_REWRITE_TAC[IN_NUMSEG] THEN\r
520 SIMP_TAC[LE; LE_0];\r
521 \r
522 DISCH_THEN SUBST1_TAC] THEN \r
523 \r
524 SUBGOAL_THEN` FINITE ((0..cc_card_v11 cc - 1) DIFF {i, 0}) /\\r
525      FINITE {i, 0} /\\r
526      DISJOINT ((0..cc_card_v11 cc - 1) DIFF {i, 0}) {i, 0} ` MP_TAC THENL [\r
527 REWRITE_TAC[SET_RULE` DISJOINT (S DIFF s) s`] THEN \r
528 MESON_TAC[FINITE_NUMSEG; FINITE_INSERT; FINITE_EMPTY; FINITE_DIFF];\r
529 NHANH (ISPECL[` cc_gg_v11 cc`;` (0..cc_card_v11 cc - 1) DIFF {i, 0}`;` {i, 0}`] SUM_UNION) THEN \r
530 SIMP_TAC[]] THEN \r
531 \r
532 STRIP_TAC THEN \r
533 MATCH_MP_TAC REAL_LE_ADD THEN \r
534 CONJ_TAC THENL [\r
535 MATCH_MP_TAC SUM_POS_LE THEN\r
536 ASM_REWRITE_TAC[] THEN\r
537 GEN_TAC THEN\r
538 REWRITE_TAC[IN_DIFF; IN_INSERT] THEN\r
539 STRIP_TAC THEN\r
540 MATCH_MP_TAC QY_NN0 THEN\r
541 ASM_REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11] THEN\r
542 FIRST_X_ASSUM MATCH_MP_TAC THEN\r
543 ASM_REWRITE_TAC[] THEN\r
544 FIRST_X_ASSUM MP_TAC THEN\r
545 CONV_TAC TAUT;\r
546 \r
547 \r
548 SUBGOAL_THEN` ~( i = 0) ` MP_TAC THENL [\r
549 ASM_REWRITE_TAC[] THEN \r
550 UNDISCH_TAC` 2 <= cc_card_v11 cc ` THEN \r
551 ARITH_TAC; STRIP_TAC]] THEN \r
552 \r
553 \r
554 \r
555 \r
556 ASSUME_TAC2 (ISPECL [`i:num `;` 0`; ` cc_gg_v11 cc `] Geomdetail.SUM_DIS2) THEN\r
557 UNDISCH_TAC` cc_eps <= cc_gg_v11 cc i + cc_gg_v11 cc (i + 1) ` THEN\r
558 ASSUME_TAC2 (ARITH_RULE` 2 <= cc_card_v11 cc ==> cc_card_v11 cc - 1 + 1 = cc_card_v11 cc `) THEN\r
559 ASM_REWRITE_TAC[] THEN\r
560 UNDISCH_TAC` periodic (cc_gg_v11 cc) (cc_card_v11 cc) ` THEN\r
561 REWRITE_TAC[periodic] THEN\r
562 STRIP_TAC THEN\r
563 FIRST_ASSUM (MP_TAC o (SPEC` 0 `)) THEN\r
564 SIMP_TAC[ARITH_RULE` 0 + a = a `] THEN\r
565 REPEAT STRIP_TAC THEN\r
566 MATCH_MP_TAC REAL_LE_TRANS THEN\r
567 EXISTS_TAC` cc_eps:real ` THEN\r
568 ASM_REWRITE_TAC[cc_eps] THEN\r
569 REAL_ARITH_TAC;\r
570 \r
571 \r
572 UNDISCH_TAC` (i:num) IN indSet` THEN\r
573 ASM_REWRITE_TAC[IN_NUMSEG] THEN\r
574 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN\r
575 ARITH_TAC];\r
576 \r
577 ASM_REWRITE_TAC[REAL_ARITH` a <= b <=> ~( b < a ) `];\r
578 \r
579 ASSUME_TAC2 QX_NN0 THEN\r
580 SUBGOAL_THEN` &0 <= sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc)` MP_TAC THENL [\r
581 \r
582 \r
583 MATCH_MP_TAC SUM_POS_LE_NUMSEG THEN\r
584 REPEAT STRIP_TAC THEN\r
585 ASM_CASES_TAC` p = (i:num) ` THENL [\r
586 ASM_REWRITE_TAC[];\r
587 \r
588 MATCH_MP_TAC QY_NN0 THEN\r
589 ASM_REWRITE_TAC[] THEN\r
590 FIRST_X_ASSUM MATCH_MP_TAC THEN\r
591 ASM_REWRITE_TAC[IN_NUMSEG]];\r
592 ASM_REWRITE_TAC[REAL_ARITH` a <= b <=> ~( b < a ) `]];\r
593 \r
594 STRIP_TAC;\r
595 SUBGOAL_THEN` &0 <= sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc)` MP_TAC;\r
596 \r
597 \r
598 MATCH_MP_TAC SUM_POS_LE_NUMSEG;\r
599 REPEAT STRIP_TAC;\r
600 ASM_CASES_TAC` p = (i:num) `;\r
601 ASM_REWRITE_TAC[];\r
602 MATCH_MP_TAC QX_NN0;\r
603 \r
604 ASM_REWRITE_TAC[];\r
605 MATCH_MP_TAC QY_NN0;\r
606 \r
607 ASM_REWRITE_TAC[];\r
608 FIRST_X_ASSUM MATCH_MP_TAC THEN\r
609 ASM_REWRITE_TAC[IN_NUMSEG];\r
610 \r
611 ASM_REWRITE_TAC[REAL_ARITH` a <= b <=> ~( b < a ) `];\r
612 \r
613 \r
614 (* *********** *)\r
615 \r
616 FIRST_X_ASSUM MP_TAC THEN \r
617 REWRITE_TAC[] THEN \r
618 STRIP_TAC THEN \r
619 ASM_CASES_TAC` ~(? k. (k IN indSet /\ ~(k = i) /\ ~(k = j)) /\ cc_4cell_v11 cc k)`;\r
620 \r
621 \r
622 FIRST_X_ASSUM MP_TAC THEN\r
623 REWRITE_TAC[MESON[]` ~(?x. p x /\ q x) <=> !x. p x ==> ~ q x `] THEN\r
624 STRIP_TAC THEN\r
625 \r
626 SUBGOAL_THEN` !k. k IN indSet /\ ~(k = i) /\ ~(k = j) ==> cc_qy_v11 cc k ` MP_TAC THENL [\r
627 FIRST_X_ASSUM NHANH THEN\r
628 REPEAT STRIP_TAC THEN\r
629 MP_TAC (SPEC` k:num` QU_OR_QXY) THEN\r
630 ASM_REWRITE_TAC[cc_qu_v11; cc_qx_v11] ;\r
631 \r
632 STRIP_TAC THEN\r
633 ASM_CASES_TAC`~( ?qy. qy IN indSet /\ cc_qy_v11 cc qy)` THEN\r
634 FIRST_X_ASSUM MP_TAC THEN\r
635 FIRST_X_ASSUM MP_TAC THEN\r
636 PHA THEN\r
637 NHANH (SET_RULE` (!k. k IN indSet /\ ~(k = i) /\ ~(k = j) ==> cc_qy_v11 cc k) /\\r
638  ~(?qy. qy IN indSet /\ cc_qy_v11 cc qy) ==> indSet SUBSET {i, j} `)] THEN \r
639 DOWN_TAC THEN\r
640 REWRITE_TAC[cc_real_model_v11] THEN\r
641 STRIP_TAC THEN\r
642 UNDISCH_TAC` sum (0..cc_card_v11 cc - 1) (cc_azim_v11 cc) = &2 * pi ` THEN\r
643 UNDISCH_TAC` !i. #0.606 <= cc_azim_v11 cc i ` THEN\r
644 NHANH (REAL_ARITH` #0.606 <= f i ==> &0 <= f i `) THEN\r
645 STRIP_TAC THEN STRIP_TAC;\r
646 \r
647 \r
648 \r
649 SUBGOAL_THEN` sum (0..cc_card_v11 cc - 1) (cc_azim_v11 cc) <= sum {i, j} (cc_azim_v11 cc) ` MP_TAC;\r
650 \r
651 \r
652 MATCH_MP_TAC SUM_SUBSET_SIMPLE THEN\r
653 UNDISCH_TAC` indSet SUBSET {i, j:num} ` THEN\r
654 ASM_SIMP_TAC[] THEN\r
655 MESON_TAC[FINITE_EMPTY; FINITE_INSERT];\r
656 \r
657 \r
658 ASSUME_TAC2 (ISPECL [`j:num `;` i:num `;` cc_azim_v11 cc `] Geomdetail.SUM_DIS2) THEN\r
659 ONCE_REWRITE_TAC[INSERT_COMM] THEN\r
660 ASM_REWRITE_TAC[] THEN\r
661 UNDISCH_TAC` cc_4cell_v11 cc j ` THEN\r
662 UNDISCH_TAC` cc_4cell_v11 cc i ` THEN\r
663 UNDISCH_TAC` !i. cc_4cell_v11 cc i ==> cc_azim_v11 cc i < #2.8 ` THEN\r
664 DISCH_TAC THEN\r
665 FIRST_ASSUM NHANH THEN\r
666 REPEAT STRIP_TAC;\r
667 \r
668 MP_TAC (MESON[Flyspeck_constants.bounds]` #3.14159 < pi`) THEN\r
669 STRIP_TAC THEN\r
670 ASSUME_TAC2 (\r
671 REAL_ARITH` &2 * pi <= cc_azim_v11 cc j + cc_azim_v11 cc i /\\r
672 cc_azim_v11 cc j < #2.8 /\ cc_azim_v11 cc i < #2.8 ==>\r
673 pi < #2.8 `) THEN\r
674 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN\r
675 REAL_ARITH_TAC;\r
676 \r
677 \r
678 \r
679 \r
680 (* \r
681 \r
682  46 [`qy IN indSet`]\r
683  47 [`cc_qy_v11 cc qy`]\r
684  48 [`!i. #0.606 <= cc_azim_v11 cc i /\ &0 <= cc_azim_v11 cc i`]\r
685  49 [`sum (0..cc_card_v11 cc - 1) (cc_azim_v11 cc) = &2 * pi`]\r
686 \r
687 `?i j k.\r
688      ~(i = j \/ j = k \/ k = i) /\\r
689      i IN indSet /\\r
690      j IN indSet /\\r
691      k IN indSet /\\r
692      cc_4cell_v11 cc i /\\r
693      cc_4cell_v11 cc j /\\r
694      cc_4cell_v11 cc k`\r
695 \r
696 *)\r
697 \r
698 \r
699 \r
700 SUBGOAL_THEN` ?ii jj. {ii, jj} = {i:num, j} /\ cc_qy_v11 cc (ii + 1)` MP_TAC;\r
701 \r
702 ASM_CASES_TAC` cc_qy_v11 cc ( (i:num) + 1) ` THENL [\r
703 EXISTS_TAC` i:num ` THEN\r
704 EXISTS_TAC` j:num ` THEN\r
705 FIRST_X_ASSUM MP_TAC THEN\r
706 SIMP_TAC[];\r
707 \r
708 EXISTS_TAC` j:num ` ] THEN\r
709 EXISTS_TAC` i:num ` THEN\r
710 REWRITE_TAC[ INSERT_COMM] THEN\r
711 SUBGOAL_THEN` ! m. ~cc_qy_v11 cc m ==> (m) MOD (cc_card_v11 cc)  = (i:num)\r
712 \/ m MOD (cc_card_v11 cc) = j ` MP_TAC;\r
713 \r
714 GEN_TAC THEN\r
715 ASSUME_TAC2 (ARITH_RULE` 2 <= cc_card_v11 cc ==> ~( cc_card_v11 cc = 0)`) THEN\r
716 ABBREV_TAC ` nn = cc_card_v11 cc ` THEN\r
717 ASSUME_TAC2 (SPECL [`m:num `;` nn:num `] MOD_IN_NUMSEG) THEN\r
718 ASSUME_TAC2 (ISPECL [` cc_qy_v11 cc `;` nn: num `;` m:num `] periodic_mod) THEN\r
719 ABBREV_TAC`m1 = m MOD nn ` THEN\r
720 ASM_REWRITE_TAC[] THEN\r
721 STRIP_TAC THEN\r
722 SUBGOAL_THEN` m1 = (i:num) \/ m1 = j ` MP_TAC;\r
723 \r
724 UNDISCH_TAC` !k. k IN indSet /\ ~(k = i) /\ ~(k = j) ==> cc_qy_v11 cc k` THEN\r
725 DISCH_THEN (MP_TAC o (SPEC` m1 : num `)) THEN\r
726 UNDISCH_TAC` ~ cc_qy_v11 cc m1 ` THEN\r
727 UNDISCH_TAC` m1 IN 0..nn - 1 ` THEN\r
728 ASM_REWRITE_TAC[] THEN\r
729 CONV_TAC TAUT;\r
730 \r
731 SIMP_TAC[];\r
732 (* *)\r
733  \r
734 (* \r
735  50 [`~cc_qy_v11 cc (i + 1)`]\r
736 \r
737 `(!m. ~cc_qy_v11 cc m ==> m MOD cc_card_v11 cc = i \/ m MOD cc_card_v11 cc = j)\r
738  ==> cc_qy_v11 cc (j + 1)`\r
739 \r
740 *)\r
741 \r
742 \r
743 \r
744 ABBREV_TAC` nn = cc_card_v11 cc ` THEN \r
745 STRIP_TAC THEN \r
746 ASM_CASES_TAC` cc_qy_v11 cc (j + 1) ` THENL [\r
747 FIRST_X_ASSUM ACCEPT_TAC;\r
748 SUBGOAL_THEN` ! m. ~(m IN indSet /\ (m + 1) MOD nn = m)` MP_TAC];\r
749 \r
750 GEN_TAC THEN \r
751 ASM_REWRITE_TAC[IN_NUMSEG] THEN \r
752 STRIP_TAC THEN \r
753 ASM_CASES_TAC` m = nn - 1 `;\r
754 \r
755 ASSUME_TAC2 (ARITH_RULE` 2 <= nn /\ m = nn - 1 ==> m + 1 = 1 * nn + 0  `) THEN\r
756 MP_TAC (SPECL [` m + 1`;` nn: num `;` 1`; ` 0`] MOD_UNIQ) THEN\r
757 \r
758 ANTS_TAC THENL [\r
759 ASM_REWRITE_TAC[] THEN\r
760 UNDISCH_TAC` 2 <= nn ` THEN\r
761 ARITH_TAC;\r
762 \r
763 DISCH_THEN SUBST_ALL_TAC THEN\r
764 UNDISCH_TAC` 0 = m` THEN\r
765 ASM_REWRITE_TAC[] THEN\r
766 UNDISCH_TAC` 2 <= nn ` THEN\r
767 ARITH_TAC ];\r
768 \r
769 ASSUME_TAC2 (ARITH_RULE` m <= nn - 1 /\ ~(m = nn - 1) ==> m + 1 < nn`) THEN \r
770 MP_TAC (SPECL[` m + 1 `;` nn: num `;` 0 `;` m + 1 `] MOD_UNIQ) THEN \r
771 ANTS_TAC THENL [\r
772 ASM_REWRITE_TAC[] THEN ARITH_TAC;\r
773 DISCH_THEN SUBST_ALL_TAC] THEN \r
774 UNDISCH_TAC` m + 1 = m`  THEN ARITH_TAC;\r
775 \r
776 \r
777 FIRST_ASSUM (ASSUME_TAC2 o (SPEC` i + 1 `));\r
778 FIRST_ASSUM (ASSUME_TAC2 o (SPEC` j + 1 `));\r
779 STRIP_TAC;\r
780 FIRST_ASSUM (ASSUME_TAC2 o (SPEC` i:num`));\r
781 FIRST_ASSUM (ASSUME_TAC2 o (SPEC` j:num`));\r
782 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC);\r
783 UNDISCH_TAC` (i:num) IN indSet `;\r
784 UNDISCH_TAC` (j:num) IN indSet`;\r
785 SIMP_TAC[];\r
786 REPEAT STRIP_TAC;\r
787 UNDISCH_TAC` (i + 1) MOD nn = i \/ (i + 1) MOD nn = j `;\r
788 UNDISCH_TAC` (j + 1) MOD nn = i \/ (j + 1) MOD nn = j`;\r
789 ASM_REWRITE_TAC[];\r
790 \r
791 ASM_CASES_TAC` j + 1 = nn `;\r
792 ASM_REWRITE_TAC[];\r
793 \r
794 (* \r
795 `nn MOD nn = i ==> ~((i + 1) MOD nn = j)`\r
796 \r
797 *)\r
798 \r
799 \r
800 ASSUME_TAC2 (ARITH_RULE` 2 <= nn ==> ~( nn = 0) `) THEN \r
801 ASSUME_TAC2 (SPEC`nn:num` (GEN_ALL MOD_REFL)) THEN \r
802 ASM_REWRITE_TAC[] THEN \r
803 DISCH_THEN (SUBST_ALL_TAC o SYM) THEN \r
804 REWRITE_TAC[ADD] THEN \r
805 ASSUME_TAC2 (ARITH_RULE` 2 <= nn ==> 1 < nn `) THEN \r
806 FIRST_ASSUM MP_TAC THEN \r
807 NHANH MOD_LT THEN \r
808 SIMP_TAC[] THEN \r
809 REPEAT STRIP_TAC THEN \r
810 FIRST_X_ASSUM (SUBST_ALL_TAC o SYM) THEN \r
811 SUBST_ALL_TAC (ARITH_RULE` 1 + 1 = 2 `) THEN \r
812 \r
813 UNDISCH_TAC` qy IN (indSet: num -> bool) ` THEN \r
814 ASM_REWRITE_TAC[IN_NUMSEG] THEN \r
815 UNDISCH_TAC` 2 = nn ` THEN \r
816 DISCH_THEN (SUBST_ALL_TAC o SYM) THEN \r
817 REWRITE_TAC[ARITH_RULE` 0 <= x /\ x <= 2 - 1 <=> x = 0 \/ x = 1 `];\r
818 \r
819 \r
820 STRIP_TAC THENL [\r
821 \r
822 FIRST_X_ASSUM SUBST_ALL_TAC THEN \r
823 UNDISCH_TAC` cc_4cell_v11 cc 0 ` THEN \r
824 UNDISCH_TAC` cc_qy_v11 cc 0 ` THEN \r
825 ASM_REWRITE_TAC[cc_qy_v11];\r
826 \r
827 FIRST_X_ASSUM SUBST_ALL_TAC THEN \r
828 UNDISCH_TAC` cc_4cell_v11 cc 1 ` THEN \r
829 UNDISCH_TAC` cc_qy_v11 cc 1 ` THEN \r
830 ASM_REWRITE_TAC[cc_qy_v11]];\r
831 \r
832 STRIP_TAC THEN \r
833 SUBGOAL_THEN` j + 1 < (nn: num) ` MP_TAC THENL [\r
834 UNDISCH_TAC` j:num IN indSet` THEN \r
835 ASM_REWRITE_TAC[IN_NUMSEG] THEN \r
836 UNDISCH_TAC` ~( j + 1 = nn ) ` THEN \r
837 UNDISCH_TAC` 2 <= nn ` THEN \r
838 ARITH_TAC;\r
839 \r
840 NHANH MOD_LT THEN \r
841 ASM_REWRITE_TAC[] THEN \r
842 SIMP_TAC[]];\r
843 \r
844 REWRITE_TAC[ARITH_RULE` (j + 1) + 1 = j + 2 `] THEN\r
845 ASM_CASES_TAC` j + 2 < nn` THENL [\r
846 ASSUME_TAC2 (SPECL [`j + 2`;` nn:num `] MOD_LT) THEN\r
847 FIRST_X_ASSUM SUBST1_TAC THEN\r
848 ARITH_TAC;\r
849 STRIP_TAC];\r
850 \r
851 ASSUME_TAC2  (ARITH_RULE` ~(j + 2 < nn) /\ j + 1 < nn ==> j + 2 = nn `) THEN\r
852 ASM_REWRITE_TAC[] THEN\r
853 ASSUME_TAC2 (ARITH_RULE` 2 <= nn ==> ~(nn = 0) `) THEN\r
854 ASSUME_TAC2 (SPEC`nn:num ` (GEN_ALL MOD_REFL)) THEN\r
855 ASM_REWRITE_TAC[] THEN\r
856 STRIP_TAC THEN\r
857 FIRST_X_ASSUM (SUBST_ALL_TAC o SYM) THEN\r
858 UNDISCH_TAC` qy:num IN indSet ` THEN\r
859 ASM_REWRITE_TAC[IN_NUMSEG] THEN\r
860 EXPAND_TAC "nn" THEN\r
861 REWRITE_TAC[ARITH_RULE` 0 <= qy /\ qy <= (0 + 2) - 1 <=> qy = 0 \/ qy = 1`] THEN\r
862 STRIP_TAC THENL [\r
863 \r
864 UNDISCH_TAC` cc_qy_v11 cc qy ` THEN\r
865 UNDISCH_TAC` cc_4cell_v11 cc 0 ` THEN\r
866 ASM_SIMP_TAC[cc_qy_v11];\r
867 \r
868 UNDISCH_TAC` cc_qy_v11 cc qy ` THEN\r
869 UNDISCH_TAC` cc_4cell_v11 cc i ` THEN\r
870 ASM_SIMP_TAC[cc_qy_v11; ADD]];\r
871 \r
872 \r
873 \r
874 \r
875 STRIP_TAC THEN ABBREV_TAC` nn = cc_card_v11 cc ` THEN \r
876 SUBGOAL_THEN` ? nj k. nj < nn /\ nj + 1 = k * nn + jj /\ cc_qy_v11 cc nj ` MP_TAC;\r
877 \r
878 ASM_CASES_TAC` jj = 0 `;\r
879 \r
880 EXISTS_TAC` nn - 1 ` THEN\r
881 EXISTS_TAC` 1 ` THEN\r
882 FIRST_X_ASSUM SUBST_ALL_TAC THEN\r
883 ASSUME_TAC2 (ARITH_RULE` 2 <= nn ==> nn - 1 < nn /\ nn - 1 + 1 = 1 * nn + 0 `) THEN\r
884 ASM_SIMP_TAC[] THEN\r
885 ASSUME_TAC2 (ARITH_RULE` 2 <= nn ==> ~( nn - 1 = 0) `) THEN\r
886 ASM_CASES_TAC` nn - 1 = ii' ` THENL [\r
887 UNDISCH_TAC` cc_qy_v11 cc (ii' + 1)` THEN\r
888 FIRST_X_ASSUM (SUBST_ALL_TAC o SYM) THEN\r
889 ASM_REWRITE_TAC[ARITH_RULE` 1 * n + 0 = 0 + n`] THEN\r
890 UNDISCH_TAC` periodic (cc_qy_v11 cc) nn ` THEN\r
891 SIMP_TAC[periodic] THEN\r
892 STRIP_TAC THEN\r
893 UNDISCH_TAC` {nn - 1, 0} = {i, j} ` THEN\r
894 UNDISCH_TAC` cc_4cell_v11 cc i ` THEN\r
895 UNDISCH_TAC` cc_4cell_v11 cc j ` THEN\r
896 REWRITE_TAC[cc_qy_v11] THEN\r
897 SET_TAC[];\r
898 \r
899 \r
900 ASSUME_TAC2 (SET_RULE` ~(nn - 1 = 0) /\ ~(nn - 1 = ii') /\ {ii', 0} = {i, j} ==> ~( nn - 1 = i) /\ ~( nn - 1 = j ) `) THEN\r
901 FIRST_X_ASSUM MATCH_MP_TAC THEN\r
902 ASM_REWRITE_TAC[IN_NUMSEG; LE_REFL] THEN\r
903 MATCH_MP_TAC (ARITH_RULE` 2 <= nn ==> 0 <= nn - 1 `) THEN\r
904 FIRST_X_ASSUM ACCEPT_TAC];\r
905 \r
906 \r
907 EXISTS_TAC` jj - 1 ` THEN\r
908 EXISTS_TAC` 0 ` THEN\r
909 REWRITE_TAC[MULT; ADD] THEN\r
910 CONJ_TAC THENL [\r
911      MATCH_MP_TAC (ARITH_RULE` jj <= nn - 1 /\ ~( jj = 0) ==> jj - 1 < nn `) THEN\r
912 ASM_REWRITE_TAC[] THEN\r
913 SUBGOAL_THEN` jj:num IN indSet` MP_TAC THENL [\r
914 \r
915 \r
916 MP_TAC (SET_RULE` jj IN {ii', jj:num}`) THEN\r
917 ASM_REWRITE_TAC[] THEN\r
918 ASM_REWRITE_TAC[IN_INSERT; NOT_IN_EMPTY] THEN\r
919 UNDISCH_TAC` (i:num) IN indSet ` THEN\r
920 UNDISCH_TAC` (j:num) IN indSet ` THEN\r
921 ASM_REWRITE_TAC[] THEN\r
922 MESON_TAC[];\r
923 \r
924 ASM_REWRITE_TAC[IN_NUMSEG] THEN\r
925 SIMP_TAC[]];\r
926 \r
927     CONJ_TAC THENL [FIRST_X_ASSUM MP_TAC THEN \r
928 ARITH_TAC; REWRITE_TAC[]]];\r
929 \r
930 \r
931 ASM_CASES_TAC` jj - 1 = ii' ` THENL [\r
932 \r
933 UNDISCH_TAC` cc_qy_v11 cc (ii' + 1) ` THEN\r
934 EXPAND_TAC "ii'" THEN\r
935 ASSUME_TAC2 (ARITH_RULE` ~( jj = 0) ==> jj - 1 + 1 = jj `) THEN\r
936 FIRST_X_ASSUM SUBST1_TAC THEN\r
937 MP_TAC (SET_RULE` jj IN {ii', jj:num} `) THEN\r
938 ASM_REWRITE_TAC[] THEN\r
939 REWRITE_TAC[IN_INSERT; NOT_IN_EMPTY; cc_qy_v11 ] THEN\r
940 UNDISCH_TAC` cc_4cell_v11 cc i ` THEN\r
941 UNDISCH_TAC` cc_4cell_v11 cc j ` THEN\r
942 MESON_TAC[];\r
943 \r
944 FIRST_X_ASSUM MATCH_MP_TAC THEN\r
945 CONJ_TAC];\r
946 \r
947 \r
948 \r
949 ASM_REWRITE_TAC[IN_NUMSEG] THEN\r
950 MATCH_MP_TAC (ARITH_RULE` ~(jj = 0) /\ 0 <= jj /\ jj <= nn - 1 ==> 0 <= jj - 1 /\ jj - 1 <= nn - 1 `) THEN\r
951 ASM_REWRITE_TAC[] THEN\r
952 MP_TAC (SET_RULE` jj IN {ii', jj:num} `) THEN\r
953 ASM_REWRITE_TAC[GSYM IN_NUMSEG] THEN\r
954 REWRITE_TAC[IN_INSERT; NOT_IN_EMPTY] THEN\r
955 UNDISCH_TAC` (i:num) IN indSet ` THEN\r
956 UNDISCH_TAC` (j:num) IN indSet ` THEN\r
957 ASM_REWRITE_TAC[] THEN\r
958 MESON_TAC[];\r
959 \r
960 (* \r
961  52 [`~(jj = 0)`]\r
962  53 [`~(jj - 1 = ii')`]\r
963 \r
964 `~(jj - 1 = i) /\ ~(jj - 1 = j)`\r
965 \r
966 *)\r
967 \r
968 \r
969 SUBGOAL_THEN` ~( jj - 1 IN {ii', jj:num})` MP_TAC;\r
970 REWRITE_TAC[IN_INSERT; NOT_IN_EMPTY];\r
971 ASM_REWRITE_TAC[];\r
972 UNDISCH_TAC` ~( jj = 0) `;\r
973 ARITH_TAC;\r
974 \r
975 ASM_REWRITE_TAC[];\r
976 SET_TAC[];\r
977 \r
978 (* ================== *)\r
979 \r
980 STRIP_TAC;\r
981 (* \r
982 \r
983  53 [`nj < nn`]\r
984  54 [`nj + 1 = k * nn + jj`]\r
985  55 [`cc_qy_v11 cc nj`]\r
986 \r
987 `?i j k.\r
988      ~(i = j \/ j = k \/ k = i) /\\r
989      i IN indSet /\\r
990      j IN indSet /\\r
991      k IN indSet /\\r
992      cc_4cell_v11 cc i /\\r
993      cc_4cell_v11 cc j /\\r
994      cc_4cell_v11 cc k`\r
995 \r
996 \r
997 *)\r
998 \r
999 ASSUME_TAC2 (ARITH_RULE` 2 <= nn ==> ~( nn = 0) `) THEN\r
1000 ASSUME_TAC2 (SPECL [` ii' + 1 `;` nn:num `] DIVMOD_EXIST) THEN\r
1001 FIRST_X_ASSUM MP_TAC THEN STRIP_TAC THEN\r
1002 SUBGOAL_THEN` {nj, r, ii', jj:num} SUBSET indSet ` MP_TAC THENL [\r
1003 ONCE_REWRITE_TAC[INSERT_SUBSET] THEN\r
1004 ONCE_REWRITE_TAC[INSERT_SUBSET] THEN\r
1005 ASM_REWRITE_TAC[] THEN\r
1006 CONJ_TAC THENL [\r
1007 REWRITE_TAC[IN_NUMSEG] THEN \r
1008 UNDISCH_TAC` ~( nn = 0) ` THEN \r
1009 UNDISCH_TAC` nj < nn:num ` THEN \r
1010 ARITH_TAC;\r
1011 CONJ_TAC] THENL [\r
1012 \r
1013   REWRITE_TAC[IN_NUMSEG] THEN \r
1014 UNDISCH_TAC` ~( nn = 0) ` THEN \r
1015 UNDISCH_TAC` r < nn:num ` THEN \r
1016 ARITH_TAC;\r
1017 \r
1018 UNDISCH_TAC` i:num IN indSet`] THEN\r
1019 UNDISCH_TAC` j:num IN indSet` THEN \r
1020 ASM_REWRITE_TAC[] THEN SET_TAC[];\r
1021 \r
1022 STRIP_TAC];\r
1023 \r
1024 \r
1025 SUBGOAL_THEN` &0 <= sum ({nj, r, ii', jj}) (cc_gg_v11 cc)` MP_TAC;\r
1026 \r
1027 \r
1028 UNDISCH_TAC` cc_qy_v11 cc (ii' + 1) ` THEN\r
1029 ASM_REWRITE_TAC[] THEN\r
1030 UNDISCH_TAC` periodic (cc_qy_v11 cc) nn ` THEN\r
1031 REWRITE_TAC[periodic_mult] THEN\r
1032 SIMP_TAC[] THEN\r
1033 STRIP_TAC THEN\r
1034 UNDISCH_TAC` cc_qy_v11 cc nj ` THEN\r
1035 REWRITE_TAC[cc_qy_v11] THEN\r
1036 REPEAT STRIP_TAC THEN\r
1037 ASSUME_TAC2 (SET_RULE` {ii', jj} = {i, j} /\ cc_4cell_v11 cc i /\ cc_4cell_v11 cc j /\\r
1038 ~ (cc_4cell_v11 cc nj) /\ ~( cc_4cell_v11 cc r) ==> DISJOINT {nj, r} {ii', jj}`) THEN\r
1039 REWRITE_TAC[SET_RULE` {a,b,c,d} = {a,b} UNION {c,d} `] THEN\r
1040 ASSUME_TAC (MESON[Geomdetail.FINITE6]` ! a (b:A). FINITE {a,b}`) THEN\r
1041 \r
1042 SUBGOAL_THEN` ! f. sum ({nj, r:num} UNION {i, j}) f = sum {nj, r} f + sum {i, j} f ` MP_TAC THENL [\r
1043 GEN_TAC THEN\r
1044 MATCH_MP_TAC SUM_UNION THEN\r
1045 UNDISCH_TAC` DISJOINT {nj, r} {ii', jj:num} ` THEN\r
1046 ASM_SIMP_TAC[];\r
1047 \r
1048 \r
1049 SIMP_TAC[] THEN\r
1050 STRIP_TAC];\r
1051 \r
1052 \r
1053 (*\r
1054 \r
1055 \r
1056 61 [`!a b. FINITE {a, b}`]\r
1057  62 [`!f. sum ({nj, r} UNION {i, j}) f = sum {nj, r} f + sum {i, j} f`]\r
1058 \r
1059 `&0 <= sum {nj, r} (cc_gg_v11 cc) + sum {i, j} (cc_gg_v11 cc)`\r
1060 \r
1061 \r
1062 *)\r
1063 \r
1064 SUBGOAL_THEN` (! i. cc_qy_v11 cc (i + 1)\r
1065           ==> &0 <= cc_gg_v11 cc i + cc_gg3a_v11 cc (i + 1)) /\\r
1066   (! i. cc_qy_v11 cc i\r
1067           ==> &0 <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1)) ` MP_TAC;\r
1068 CONJ_TAC;\r
1069 (* AHTYRED ================= *)\r
1070 GEN_TAC;\r
1071 ASM_CASES_TAC` cc_qu_v11 cc i' `;\r
1072 FIRST_X_ASSUM MP_TAC;\r
1073 PHA;\r
1074 UNDISCH_TAC` !i. cc_qu_v11 cc i /\ cc_qy_v11 cc (i + 1)\r
1075        ==> cc_eps <= cc_gg_v11 cc i + cc_gg3a_v11 cc (i + 1) `;\r
1076 DISCH_THEN NHANH;\r
1077 REWRITE_TAC[cc_eps];\r
1078 REAL_ARITH_TAC;\r
1079 \r
1080 \r
1081 MP_TAC (SPEC` i':num ` QU_OR_QXY);\r
1082 ASM_REWRITE_TAC[];\r
1083 ASM_SEARCH_TCL [`#0.0 <= cc_gg_v11 cc i `] NHANH;\r
1084 STRIP_TAC;\r
1085 ASM_SEARCH_TCL [`&0 <= cc_gg3a_v11 cc i `] NHANH;\r
1086 FIRST_X_ASSUM MP_TAC;\r
1087 REAL_ARITH_TAC;\r
1088 \r
1089 ASM_SEARCH_TCL [` &0 <= cc_gg3a_v11 cc i`] NHANH;\r
1090 STRIP_TAC;\r
1091 ASM_SEARCH_TCL [` cc_gg3a_v11 cc i + cc_gg3b_v11 cc i <= cc_gg_v11 cc i`] (ASSUME_TAC2 o (SPEC` i':num `));\r
1092 MATCH_MP_TAC REAL_LE_ADD;\r
1093 ASM_REWRITE_TAC[];\r
1094 MATCH_MP_TAC REAL_LE_TRANS;\r
1095 EXISTS_TAC` cc_gg3a_v11 cc i' + cc_gg3b_v11 cc i' `;\r
1096 ASM_REWRITE_TAC[];\r
1097 MATCH_MP_TAC REAL_LE_ADD;\r
1098 CONJ_TAC;\r
1099 ASM_SEARCH_TCL [` A ==> &0 <= cc_gg3a_v11 cc i' `] (MATCH_MP_TAC o (SPEC` i':num`));\r
1100 FIRST_X_ASSUM ACCEPT_TAC;\r
1101 ASM_SEARCH_TCL [` A ==> &0 <= cc_gg3b_v11 cc i' `] (MATCH_MP_TAC o (SPEC` i':num`));\r
1102 FIRST_X_ASSUM ACCEPT_TAC;\r
1103 (* AHTYRED ================= *)\r
1104 (*\r
1105 \r
1106  60 [`DISJOINT {nj, nj} {ii', jj}`]\r
1107  61 [`!a b. FINITE {a, b}`]\r
1108  62 [`!f. sum ({nj, nj} UNION {i, j}) f = sum {nj, nj} f + sum {i, j} f`]\r
1109 \r
1110 `!i. cc_qy_v11 cc i ==> &0 <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1)`\r
1111 \r
1112 *)\r
1113 \r
1114 GEN_TAC;\r
1115 ASM_CASES_TAC` cc_qu_v11 cc (i' + 1) `;\r
1116 FIRST_X_ASSUM MP_TAC THEN PHA;\r
1117 ASM_SEARCH_TCL [`cc_eps <= cc_gg3b_v11 cc i' + cc_gg_v11 cc i `] NHANH;\r
1118 REWRITE_TAC[cc_eps];\r
1119 REAL_ARITH_TAC;\r
1120 \r
1121 SUBST_ALL_TAC (REAL_ARITH` #0.0 = &0 `);\r
1122 ASM_SEARCH_TCL [` &0 <= cc_gg3b_v11 cc i`] NHANH;\r
1123 MP_TAC (SPEC` i' + 1 ` QU_OR_QXY);\r
1124 ASMS_SEARCH_TCL [` ~cc_qu_v11 cc (i' + 1) `] REWRITE_TAC;\r
1125 ASM_SEARCH_TCL [` &0 <= cc_gg_v11 cc i `] NHANH;\r
1126 ASM_SEARCH_TCL [` &0 <= cc_gg_v11 cc i `] NHANH;\r
1127 ASM_SEARCH_TCL [` cc_gg3a_v11 cc i + ccy `] NHANH;\r
1128 REPEAT STRIP_TAC;\r
1129 (* 2 goals *)\r
1130 \r
1131 MATCH_MP_TAC REAL_LE_ADD;\r
1132 ASMS_SEARCH_TCL [` &0 <= x `] REWRITE_TAC;\r
1133 MATCH_MP_TAC REAL_LE_ADD;\r
1134 ASMS_SEARCH_TCL [` &0 <= cc_gg3b_v11 cc i  `] REWRITE_TAC;\r
1135 MATCH_MP_TAC REAL_LE_TRANS;\r
1136 EXISTS_TAC` cc_gg3a_v11 cc (i' + 1) + cc_gg3b_v11 cc (i' + 1)`;\r
1137 ASM_REWRITE_TAC[];\r
1138 MATCH_MP_TAC REAL_LE_ADD;\r
1139 UNDISCH_TAC` cc_qy_v11 cc (i' + 1)`;\r
1140 ASMS_SEARCH_TCL [` cc_qy_v11 cc i ==> &0 <= x `] SIMP_TAC;\r
1141 \r
1142 \r
1143 \r
1144 \r
1145  (* end the 2nd goal\r
1146 (!i. cc_qy_v11 cc i ==> &0 <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1))\r
1147 *)\r
1148 \r
1149 STRIP_TAC;\r
1150 ASM_CASES_TAC` nj = (r:num) `;\r
1151 FIRST_X_ASSUM (SUBST_ALL_TAC o SYM);\r
1152 REWRITE_TAC[INSERT_INSERT; SUM_SING];\r
1153 \r
1154 ASM_SEARCH_TCL [` {a,b} = {x,y} `] (SUBST1_TAC o SYM);\r
1155 ASSUME_TAC2 (SET_RULE` ~(j = (i:num)) /\ {ii', jj} = {i, j} ==> ~( ii' = jj)`);\r
1156 ASSUME_TAC2 (ISPECL [` ii':num `;` jj:num `;` cc_gg_v11 cc `] Geomdetail.SUM_DIS2);\r
1157 FIRST_X_ASSUM SUBST1_TAC;\r
1158 ASM_SEARCH_TCL [`  cc_qy_v11 cc (i + 1) ==> x `] (MP_TAC o (SPEC` ii':num `));\r
1159 ANTS_TAC;\r
1160 ASM_REWRITE_TAC[];\r
1161 ASM_REWRITE_TAC[cc_qy_v11];\r
1162 ASM_SEARCH_TCL [` periodic `;` cc_gg3a_v11`] MP_TAC;\r
1163 REWRITE_TAC[periodic_mult];\r
1164 ASM_REWRITE_TAC[];\r
1165 SIMP_TAC[];\r
1166 STRIP_TAC;\r
1167 ASM_SEARCH_TCL [`  cc_qy_v11 cc i ==> x `;` cc_gg3b_v11 `] (MP_TAC o (SPEC`nj: num`));\r
1168 ANTS_TAC;\r
1169 ASM_REWRITE_TAC[cc_qy_v11];\r
1170 ASM_SEARCH_TCL [` periodic `;` cc_gg_v11`] MP_TAC;\r
1171 REWRITE_TAC[periodic_mult];\r
1172 ASM_REWRITE_TAC[];\r
1173 SIMP_TAC[];\r
1174 STRIP_TAC;\r
1175 ASM_SEARCH_TCL [` cc_qy_v11 cc i ==> a + b <= c`] (MP_TAC o (SPEC` nj: num `));\r
1176 ANTS_TAC;\r
1177 ASM_REWRITE_TAC[cc_qy_v11];\r
1178 PHA;\r
1179 REAL_ARITH_TAC;\r
1180 \r
1181 \r
1182 ASM_SEARCH_TCL [` {a,b} = {c,d} `] (SUBST1_TAC o SYM);\r
1183 ASSUME_TAC2 (ISPECL [`nj: num`;` r:num `;` cc_gg_v11 cc `] Geomdetail.SUM_DIS2);\r
1184 ASSUME_TAC2 (SET_RULE` {ii', jj} = {i,j:num} /\ ~( j = i) ==> ~( ii' = jj) `);\r
1185 ASSUME_TAC2 (ISPECL [`ii': num`;` jj:num `;` cc_gg_v11 cc `] Geomdetail.SUM_DIS2);\r
1186 ASM_REWRITE_TAC[];\r
1187 FIRST_X_ASSUM (MP_TAC o (SPEC ` nj: num`));\r
1188 ANTS_TAC;\r
1189 ASM_REWRITE_TAC[cc_qy_v11];\r
1190 FIRST_X_ASSUM (MP_TAC o (SPEC ` ii': num`));\r
1191 ANTS_TAC;\r
1192 ASM_REWRITE_TAC[];\r
1193 ASM_REWRITE_TAC[cc_qy_v11];\r
1194 ASM_REWRITE_TAC[];\r
1195 ASM_SEARCH_TCL [` periodic `;` cc_gg3a_v11`] MP_TAC;\r
1196 ASM_SEARCH_TCL [` periodic `;` cc_gg_v11`] MP_TAC;\r
1197 SIMP_TAC[periodic_mult];\r
1198 STRIP_TAC THEN STRIP_TAC;\r
1199 ASM_SEARCH_TCL [` cc_qy_v11 cc i ==> a + b <= c`] (MP_TAC o (SPEC` r:num `));\r
1200 ANTS_TAC;\r
1201 ASM_REWRITE_TAC[cc_qy_v11];\r
1202 ASM_SEARCH_TCL [` cc_qy_v11 cc i ==> a + b <= c`] (MP_TAC o (SPEC` nj:num `));\r
1203 ANTS_TAC;\r
1204 ASM_REWRITE_TAC[cc_qy_v11];\r
1205 ASM_SEARCH_TCL [` cc_qy_v11 cc i ==> &0 <= x`;` cc_gg3b_v11 `] (MP_TAC o (SPEC` r:num `));\r
1206 ANTS_TAC;\r
1207 ASM_REWRITE_TAC[cc_qy_v11];\r
1208 ASM_SEARCH_TCL [` cc_qy_v11 cc i ==> &0 <= x`;` cc_gg3a_v11 `] (MP_TAC o (SPEC` nj:num `));\r
1209 ANTS_TAC;\r
1210 ASM_REWRITE_TAC[cc_qy_v11];\r
1211 REAL_ARITH_TAC;\r
1212 \r
1213 (* =============xxxxx=========================== *)\r
1214 \r
1215 FIRST_X_ASSUM MP_TAC;\r
1216 ASM_REWRITE_TAC[];\r
1217 ABBREV_TAC` sts = {nj, r, i, j:num} `;\r
1218 NHANH (SET_RULE` s SUBSET S ==> (S DIFF s) UNION s = S `);\r
1219 REPEAT STRIP_TAC;\r
1220 SUBGOAL_THEN` &0 <= sum ((0..nn - 1) DIFF sts) (cc_gg_v11 cc) ` MP_TAC;\r
1221 MATCH_MP_TAC SUM_POS_LE;\r
1222 CONJ_TAC;\r
1223 MATCH_MP_TAC FINITE_DIFF;\r
1224 REWRITE_TAC[FINITE_NUMSEG];\r
1225 GEN_TAC;\r
1226 REWRITE_TAC[IN_DIFF];\r
1227 STRIP_TAC;\r
1228 MATCH_MP_TAC QY_NN0;\r
1229 ASM_REWRITE_TAC[];\r
1230 ASM_REWRITE_TAC[cc_real_model_v11];\r
1231 FIRST_X_ASSUM MATCH_MP_TAC;\r
1232 ASM_REWRITE_TAC[];\r
1233 UNDISCH_TAC` ~( (x:num) IN sts ) `;\r
1234 EXPAND_TAC "sts";\r
1235 REWRITE_TAC[IN_INSERT];\r
1236 CONV_TAC TAUT;\r
1237 STRIP_TAC;\r
1238 SUBGOAL_THEN` &0 <= sum ((0..nn - 1)) (cc_gg_v11 cc)` MP_TAC;\r
1239 SUBGOAL_THEN` sum (0..nn - 1) (cc_gg_v11 cc) = sum ((0..nn - 1) DIFF sts) (cc_gg_v11 cc) + sum sts (cc_gg_v11 cc)` MP_TAC;\r
1240 ASM_SEARCH_TCL [` a UNION b = c `] (fun x -> PAT_ONCE_REWRITE_TAC`\x. x = y `[SYM x]);\r
1241 MATCH_MP_TAC SUM_UNION;\r
1242 CONJ_TAC;\r
1243 MATCH_MP_TAC FINITE_DIFF;\r
1244 REWRITE_TAC[FINITE_NUMSEG];\r
1245 CONJ_TAC;\r
1246 EXPAND_TAC "sts";\r
1247 REWRITE_TAC[Geomdetail.FINITE6];\r
1248 SET_TAC[];\r
1249 DISCH_THEN SUBST1_TAC;\r
1250 MATCH_MP_TAC REAL_LE_ADD;\r
1251 ASM_REWRITE_TAC[];\r
1252 \r
1253 NHANH (REAL_ARITH` &0 <= a ==> ~( a < &0) `);\r
1254 ASM_REWRITE_TAC[];\r
1255 \r
1256 FIRST_X_ASSUM MP_TAC;\r
1257 REWRITE_TAC[];\r
1258 STRIP_TAC;\r
1259 \r
1260 EXISTS_TAC`i:num `;\r
1261 EXISTS_TAC`j:num `;\r
1262 EXISTS_TAC`k:num `;\r
1263 ASM_REWRITE_TAC[]]);;\r
1264 ====================================== *)\r
1265 (* xxxxx *)\r
1266 \r
1267 (* ===========================\r
1268 let oxl6142 = prove_by_refinement (CHQSQEY_concl,\r
1269 [GEN_TAC;\r
1270 ABBREV_TAC` indSet = 0..cc_card_v11 cc - 1 `;\r
1271 STRIP_TAC;\r
1272 MP_TAC WKR_COMPTED;\r
1273 ANTS_TAC;\r
1274 ASM_REWRITE_TAC[];\r
1275 STRIP_TAC;\r
1276 \r
1277 REWRITE_TAC[cc_size_v11];\r
1278 SUBGOAL_THEN` {i,j,k} SUBSET {i | i IN 0..cc_card_v11 cc - 1 /\ cc_4cell_v11 cc i}` MP_TAC;\r
1279 ASM_REWRITE_TAC[INSERT_SUBSET; EMPTY_SUBSET; IN_ELIM_THM];\r
1280 ASM_REWRITE_TAC[];\r
1281 STRIP_TAC;\r
1282 SUBGOAL_THEN` FINITE {i | i IN indSet /\ cc_4cell_v11 cc i} ` MP_TAC;\r
1283 MATCH_MP_TAC FINITE_SUBSET;\r
1284 EXISTS_TAC` indSet:num -> bool `;\r
1285 EXPAND_TAC "indSet";\r
1286 REWRITE_TAC[FINITE_NUMSEG];\r
1287 SET_TAC[];\r
1288 FIRST_X_ASSUM MP_TAC;\r
1289 PHA;\r
1290 NHANH CARD_SUBSET;\r
1291 STRIP_TAC;\r
1292 ASM_SEARCH_TCL [` a \/ b`] MP_TAC;\r
1293 REWRITE_TAC[GSYM Geomdetail.CARD3];\r
1294 DISCH_THEN SUBST_ALL_TAC;\r
1295 FIRST_X_ASSUM ACCEPT_TAC]);;\r
1296 \r
1297 \r
1298 =============================== *)\r
1299 \r
1300 (* ================================================ *)\r
1301 \r
1302 (* let CHQSQEY = oxl6142;; *)\r
1303 \r
1304 let SUM_BETA = prove(` sum S (\x. f x) = sum S f `,\r
1305 MATCH_MP_TAC SUM_EQ THEN \r
1306 REWRITE_TAC[BETA_THM]);;\r
1307 \r
1308 \r
1309 let LXDEYBO = prove_by_refinement (LXDEYBO_concl,\r
1310 [ GEN_TAC;\r
1311 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11; cc_size_v11];\r
1312 STRIP_TAC;\r
1313 ABBREV_TAC` cd = CARD {i | i IN 0..cc_card_v11 cc - 1 /\ cc_4cell_v11 cc i}`;\r
1314 ASM_CASES_TAC` 4 < cd `;\r
1315 ABBREV_TAC` ss = {i | i IN 0..cc_card_v11 cc - 1 /\ cc_4cell_v11 cc i}`;\r
1316 ABBREV_TAC` S = 0..cc_card_v11 cc - 1 `;\r
1317 SUBGOAL_THEN` sum ss (cc_gg_v11 cc) <= sum S (cc_gg_v11 cc) ` MP_TAC;\r
1318 MATCH_MP_TAC SUM_SUBSET_SIMPLE;\r
1319 CONJ_TAC;\r
1320 EXPAND_TAC "S";\r
1321 REWRITE_TAC[FINITE_NUMSEG];\r
1322 EXPAND_TAC "ss";\r
1323 CONJ_TAC;\r
1324 SET_TAC[];\r
1325 REWRITE_TAC[IN_DIFF; IN_ELIM_THM; DE_MORGAN_THM];\r
1326 REPEAT STRIP_TAC;\r
1327 FIRST_X_ASSUM MP_TAC;\r
1328 ASM_REWRITE_TAC[];\r
1329 MATCH_MP_TAC QY_NN0;\r
1330 ASM_REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11; cc_qy_v11];\r
1331 \r
1332 STRIP_TAC;\r
1333 SUBGOAL_THEN` sum ss (\i. a_spine5 + b_spine5 * cc_azim_v11 cc i ) <= sum ss (cc_gg_v11 cc ) ` MP_TAC;\r
1334 MATCH_MP_TAC SUM_LE;\r
1335 CONJ_TAC;\r
1336 MATCH_MP_TAC FINITE_SUBSET;\r
1337 EXISTS_TAC` S: num -> bool `;\r
1338 CONJ_TAC;\r
1339 EXPAND_TAC "S";\r
1340 REWRITE_TAC[FINITE_NUMSEG];\r
1341 EXPAND_TAC "ss";\r
1342 SET_TAC[];\r
1343 EXPAND_TAC "ss";\r
1344 REWRITE_TAC[IN_ELIM_THM];\r
1345 ASM_SEARCH_TCL [` cc_4cell_v11 cc i ==> a <= b `] NHANH;\r
1346 SIMP_TAC[];\r
1347 \r
1348 SUBGOAL_THEN` sum ss (cc_azim_v11 cc ) <= &2 * pi ` MP_TAC;\r
1349 ASM_SEARCH_TCL [`sum S (cc_azim_v11 cc) = &2 * pi `] (SUBST1_TAC o SYM);\r
1350 MATCH_MP_TAC SUM_SUBSET_SIMPLE;\r
1351 \r
1352 CONJ_TAC;\r
1353 EXPAND_TAC "S";\r
1354 REWRITE_TAC[FINITE_NUMSEG];\r
1355 CONJ_TAC;\r
1356 EXPAND_TAC "ss";\r
1357 SET_TAC[];\r
1358 \r
1359 REPEAT STRIP_TAC;\r
1360 ASM_SEARCH_TCL [` (!i. #0.606 <= cc_azim_v11 cc i) `] MP_TAC;\r
1361 DISCH_THEN (MP_TAC o (SPEC`x:num `));\r
1362 REAL_ARITH_TAC;\r
1363 \r
1364 \r
1365 ONCE_REWRITE_TAC[MESON[ABS_SIMP]` (\i. a + f i ) = (\i. (\j. a) i + f i)`];\r
1366 STRIP_TAC THEN STRIP_TAC;\r
1367 SUBGOAL_THEN` sum ss (\i. (\j. a_spine5) i + b_spine5 * cc_azim_v11 cc i) =\r
1368 sum ss (\j. a_spine5) + sum ss (\i. b_spine5 * cc_azim_v11 cc i)` MP_TAC;\r
1369 MATCH_MP_TAC SUM_ADD;\r
1370 MATCH_MP_TAC FINITE_SUBSET;\r
1371 EXISTS_TAC` S:num -> bool`;\r
1372 EXPAND_TAC "S";\r
1373 REWRITE_TAC[FINITE_NUMSEG];\r
1374 ASM_REWRITE_TAC[];\r
1375 EXPAND_TAC "ss";\r
1376 SET_TAC[];\r
1377 \r
1378 REWRITE_TAC[SUM_LMUL];\r
1379 REWRITE_TAC[Sphere.b_spine5; Sphere.a_spine5];\r
1380 SUBGOAL_THEN` FINITE (S:num -> bool) ` MP_TAC;\r
1381 EXPAND_TAC "S";\r
1382 REWRITE_TAC[FINITE_NUMSEG];\r
1383 STRIP_TAC;\r
1384 SUBGOAL_THEN` ss SUBSET (S:num -> bool) ` ASSUME_TAC;\r
1385 EXPAND_TAC "ss";\r
1386 SET_TAC[];\r
1387 SUBGOAL_THEN` FINITE (ss:num -> bool) ` MP_TAC;\r
1388 MATCH_MP_TAC FINITE_SUBSET;\r
1389 EXISTS_TAC`S: num -> bool `;\r
1390 ASM_REWRITE_TAC[FINITE_NUMSEG];\r
1391 STRIP_TAC;\r
1392 ASSUME_TAC2 (ISPECL [` #0.0560305 `;`ss:num -> bool`] SUM_CONST);\r
1393 ASM_REWRITE_TAC[];\r
1394 ASSUME_TAC2 (ARITH_RULE` 4 < cd ==> 5 <= cd `);\r
1395 FIRST_X_ASSUM MP_TAC;\r
1396 FIRST_X_ASSUM MP_TAC;\r
1397 ASM_REWRITE_TAC[GSYM REAL_OF_NUM_LE];\r
1398 REPEAT STRIP_TAC;\r
1399 \r
1400 SUBGOAL_THEN` &0 <= sum ss (cc_gg_v11 cc)` ASSUME_TAC;\r
1401 MATCH_MP_TAC REAL_LE_TRANS;\r
1402 EXISTS_TAC` sum ss (\i. (\j. a_spine5) i + b_spine5 * cc_azim_v11 cc i) `;\r
1403 ASM_REWRITE_TAC[];\r
1404 ASM_REWRITE_TAC[Sphere.a_spine5; Sphere.b_spine5];\r
1405 REWRITE_TAC[REAL_ARITH` &0 <= a + -- b * x <=> b * x <= a `];\r
1406 MATCH_MP_TAC REAL_LE_TRANS;\r
1407 EXISTS_TAC` #0.0445813 * ( &2 * pi) `;\r
1408 ASM_REWRITE_TAC[REAL_ARITH` #0.0445813 * a <= #0.0445813 * b <=> a <= b `];\r
1409 ASM_REWRITE_TAC[ISPECL [`ss:num -> bool `;` cc_azim_v11 cc `] (GEN_ALL SUM_BETA)];\r
1410 MATCH_MP_TAC REAL_LE_TRANS;\r
1411 EXISTS_TAC` &5 * #0.0560305`;\r
1412 ASM_REWRITE_TAC[REAL_ARITH` &5 * #0.0560305 <= &cd * #0.0560305 <=> &5 <= &cd`];\r
1413 MP_TAC (prove(` pi < #3.1416 `, REWRITE_TAC[ Flyspeck_constants.bounds]));\r
1414 REAL_ARITH_TAC;\r
1415 \r
1416 \r
1417 SUBGOAL_THEN` &0 <= sum S (cc_gg_v11 cc)` MP_TAC;\r
1418 UNDISCH_TAC` &0 <= sum ss (cc_gg_v11 cc) `;\r
1419 UNDISCH_TAC` sum ss (cc_gg_v11 cc) <= sum S (cc_gg_v11 cc) `;\r
1420 REAL_ARITH_TAC;\r
1421 UNDISCH_TAC` sum S (cc_gg_v11 cc) < &0 `;\r
1422 REAL_ARITH_TAC;\r
1423 \r
1424 FIRST_X_ASSUM MP_TAC;\r
1425 ARITH_TAC]);;\r
1426 \r
1427 \r
1428 (* ================================== *)\r
1429 \r
1430 let IMP_TAC = ONCE_REWRITE_TAC[TAUT` a /\ b ==> c <=> a ==> b ==> c `];;\r
1431 \r
1432 \r
1433 \r
1434 (* the concls *)\r
1435 \r
1436 let MTMLSRF_concl = \r
1437 `!cc. cc_bool_model_v11 cc /\\r
1438         cc_bool_prep_v11 cc /\\r
1439         cc_real_model_v11 cc /\\r
1440         sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0\r
1441         ==> (?i. 0 < i /\\r
1442                  cc_gg_v11 cc i < &0 /\\r
1443                  cc_qu_v11 cc i /\\r
1444                  cc_4cell_v11 cc (i + 1) /\\r
1445                  cc_4cell_v11 cc (i - 1))`;;\r
1446 \r
1447 let UNPNFVW_concl = \r
1448 `!cc. cc_bool_model_v11 cc /\\r
1449         cc_bool_prep_v11 cc /\\r
1450         cc_real_model_v11 cc /\\r
1451         sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0\r
1452         ==> cc_size_v11 cc (cc_qy_v11 cc) <= 1`;;\r
1453 \r
1454 let IPVICGW_concl = \r
1455  `!cc. cc_bool_model_v11 cc /\\r
1456         cc_bool_prep_v11 cc /\\r
1457         cc_real_model_v11 cc /\\r
1458         sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0\r
1459         ==> (!i. cc_small_v11 cc i)`;;\r
1460 let RSIWAMP_concl = `!cc. cc_bool_model_v11 cc /\ cc_bool_prep_v11 cc /\ cc_real_model_v11 cc /\ \r
1461    (sum (0..cc_card_v11 cc -1) (cc_gg_v11 cc) < &0) ==> (cc_card_v11 cc <= 4)`;;\r
1462 \r
1463 \r
1464 \r
1465 \r
1466 \r
1467 \r
1468 \r
1469 \r
1470 let MTMLSRF = prove_by_refinement (MTMLSRF_concl,\r
1471 [REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];\r
1472 REPEAT STRIP_TAC;\r
1473 ASM_CASES_TAC` ~(? i. 0 < i /\ cc_gg_v11 cc i < &0) `;\r
1474 FIRST_X_ASSUM MP_TAC;\r
1475 REWRITE_TAC[MESON[]` ~(?i. p i /\ q i) <=> ! i. p i ==> ~(q i )`];\r
1476 STRIP_TAC;\r
1477 SUBGOAL_THEN` &0 <= sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) ` MP_TAC;\r
1478 MATCH_MP_TAC SUM_POS_LE_NUMSEG;\r
1479 REPEAT STRIP_TAC;\r
1480 ASM_CASES_TAC` p = 0 `;\r
1481 ASM_SEARCH_TCL [` periodic `; `cc_gg_v11 `] MP_TAC;\r
1482 FIRST_X_ASSUM SUBST_ALL_TAC;\r
1483 REWRITE_TAC[periodic];\r
1484 DISCH_THEN (SUBST1_TAC o SYM o (SPEC` 0`));\r
1485 REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `];\r
1486 FIRST_X_ASSUM MATCH_MP_TAC;\r
1487 ASM_SEARCH_TCL [` ~( x = 0) `] MP_TAC;\r
1488 ARITH_TAC;\r
1489 REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `];\r
1490 FIRST_X_ASSUM MATCH_MP_TAC;\r
1491 FIRST_X_ASSUM MP_TAC;\r
1492 ARITH_TAC;\r
1493 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `];\r
1494 FIRST_X_ASSUM MP_TAC;\r
1495 REWRITE_TAC[];\r
1496 STRIP_TAC;\r
1497 ASM_CASES_TAC` ~( ?i. 0 < i /\\r
1498      cc_gg_v11 cc i < &0 /\\r
1499      cc_qu_v11 cc i /\\r
1500      cc_4cell_v11 cc (i + 1) /\\r
1501      cc_4cell_v11 cc (i - 1) ) `;\r
1502 FIRST_X_ASSUM MP_TAC;\r
1503 REWRITE_TAC[MESON[]` ~(?i.  p1 i /\ p2 i /\ p3 i /\ p4 i) <=> (! i. p1 i /\ p2 i /\\r
1504 p3 i ==> ~( p4 i))`];\r
1505 STRIP_TAC;\r
1506 ABBREV_TAC` S = 1..cc_card_v11 cc `;\r
1507 ABBREV_TAC` cb i <=> cc_gg_v11 cc i < &0 /\ cc_qu_v11 cc i `;\r
1508 ABBREV_TAC` sa = { i | i IN S /\ cb i /\ cc_qy_v11 cc (i + 1) }`;\r
1509 ABBREV_TAC` sb = { i | i IN S /\ cb i /\ cc_qy_v11 cc ( i - 1)}`;\r
1510 ABBREV_TAC` ss = {i | (i:num) IN S /\ cb i} `;\r
1511 \r
1512 \r
1513 ABBREV_TAC` saa = { i + 1 | i + 1 IN S /\ cc_qy_v11 cc (i + 1) /\ cb i} `;\r
1514 ABBREV_TAC` sbb = { i | i IN S /\ cc_qy_v11 cc i /\ cb ( i + 1)}`;\r
1515 ABBREV_TAC` sab = { i | i IN S /\ cc_qy_v11 cc i /\ (cb (i + 1) \/ (cb ( i - 1)))} `;\r
1516 \r
1517 SUBGOAL_THEN` DISJOINT ss (sab: num -> bool) ` MP_TAC;\r
1518 EXPAND_TAC "sab";\r
1519 EXPAND_TAC "ss";\r
1520 ASM_SEARCH_TCL [` a /\ b <=> f i  `] ( fun x -> REWRITE_TAC[GSYM x]);\r
1521 REWRITE_TAC[cc_qu_v11; cc_qy_v11];\r
1522 SET_TAC[];\r
1523 SUBGOAL_THEN` FINITE (S:num -> bool) ` MP_TAC;\r
1524 EXPAND_TAC "S";\r
1525 REWRITE_TAC[FINITE_NUMSEG];\r
1526 STRIP_TAC;\r
1527 SUBGOAL_THEN` ss SUBSET (S:num -> bool) /\ sab SUBSET S ` ASSUME_TAC;\r
1528 EXPAND_TAC "ss";\r
1529 EXPAND_TAC "sab";\r
1530 SET_TAC[];\r
1531 SUBGOAL_THEN` FINITE (ss:num -> bool) ` MP_TAC;\r
1532 MATCH_MP_TAC FINITE_SUBSET;\r
1533 EXISTS_TAC `S:num -> bool `;\r
1534 ASM_REWRITE_TAC[];\r
1535 STRIP_TAC;\r
1536 SUBGOAL_THEN` FINITE (sab:num -> bool) ` ASSUME_TAC;\r
1537 MATCH_MP_TAC FINITE_SUBSET;\r
1538 EXISTS_TAC `S:num -> bool `;\r
1539 ASM_REWRITE_TAC[];\r
1540 \r
1541 STRIP_TAC;\r
1542 SUBGOAL_THEN` sum saa (cc_gg3a_v11 cc) + sum sbb (cc_gg3b_v11 cc) + sum ss (cc_gg_v11 cc) <= sum (ss UNION sab) (cc_gg_v11 cc)`  MP_TAC;\r
1543 ASM_SIMP_TAC[SUM_UNION];\r
1544 REWRITE_TAC[REAL_ARITH` a + b + c <= c + d <=> a + b <= d `];\r
1545 SUBGOAL_THEN` sbb SUBSET (sab:num -> bool) /\ saa SUBSET (sab:num -> bool) ` ASSUME_TAC;\r
1546 EXPAND_TAC "saa";\r
1547 EXPAND_TAC "sbb";\r
1548 EXPAND_TAC "sab";\r
1549 CONJ_TAC;\r
1550 REWRITE_TAC[SUBSET; IN_ELIM_THM];\r
1551 MESON_TAC[];\r
1552 REWRITE_TAC[SUBSET; IN_ELIM_THM];\r
1553 MESON_TAC[ARITH_RULE` (i + 1) - 1 = i `];\r
1554 SUBGOAL_THEN` !x. x IN saa ==> cc_qy_v11 cc x ` ASSUME_TAC;\r
1555 EXPAND_TAC "saa";\r
1556 SET_TAC[];\r
1557 SUBGOAL_THEN` !x. x IN sbb ==> cc_qy_v11 cc x ` ASSUME_TAC;\r
1558 EXPAND_TAC "sbb";\r
1559 SET_TAC[];\r
1560 SUBGOAL_THEN` !x. x IN sab ==> cc_qy_v11 cc x ` ASSUME_TAC;\r
1561 EXPAND_TAC "sab";\r
1562 SET_TAC[];\r
1563 SUBGOAL_THEN` sum saa (cc_gg3a_v11 cc) <= sum sab (cc_gg3a_v11 cc) ` MP_TAC;\r
1564 MATCH_MP_TAC SUM_SUBSET_SIMPLE;\r
1565 ASM_REWRITE_TAC[IN_DIFF];\r
1566 FIRST_ASSUM NHANH;\r
1567 ASM_SEARCH_TCL [` cc_qy_v11 cc i ==> c <= cc_gg3a_v11 cc i `] NHANH;\r
1568 SIMP_TAC[];\r
1569 \r
1570 SUBGOAL_THEN` sum sbb (cc_gg3b_v11 cc) <=\r
1571      sum sab (cc_gg3b_v11 cc)` MP_TAC;\r
1572 MATCH_MP_TAC SUM_SUBSET_SIMPLE;\r
1573 ASM_REWRITE_TAC[];\r
1574 ASM_REWRITE_TAC[IN_DIFF];\r
1575 FIRST_ASSUM NHANH;\r
1576 ASM_SEARCH_TCL [` cc_qy_v11 cc i ==> c <= cc_gg3b_v11 cc i `] NHANH THEN\r
1577 SIMP_TAC[];\r
1578 SUBGOAL_THEN` sum sab (cc_gg3a_v11 cc) + sum sab (cc_gg3b_v11 cc) <= sum sab (cc_gg_v11 cc) ` MP_TAC;\r
1579 ASSUME_TAC2 (ISPECL [` cc_gg3a_v11 cc `;` cc_gg3b_v11 cc `;` sab:num -> bool `] SUM_ADD);\r
1580 FIRST_X_ASSUM (SUBST1_TAC o SYM);\r
1581 MATCH_MP_TAC SUM_LE;\r
1582 ASM_REWRITE_TAC[];\r
1583 FIRST_ASSUM NHANH;\r
1584 ASM_SEARCH_TCL [` cc_qy_v11 cc i ==> a + b <= c`] NHANH;\r
1585 SIMP_TAC[];\r
1586 REAL_ARITH_TAC;\r
1587 STRIP_TAC;\r
1588 \r
1589 SUBGOAL_THEN`&0 <= sum saa (cc_gg3a_v11 cc) +\r
1590       sum sbb (cc_gg3b_v11 cc) +\r
1591       sum ss (cc_gg_v11 cc) ` MP_TAC;\r
1592 SUBGOAL_THEN` sa SUBSET (ss:num -> bool) ` MP_TAC;\r
1593 EXPAND_TAC "sa";\r
1594 EXPAND_TAC "ss";\r
1595 SET_TAC[];\r
1596 NHANH (SET_RULE` s SUBSET S ==> DISJOINT s (S DIFF s) /\ s UNION ( S DIFF s) = S`);\r
1597 STRIP_TAC;\r
1598 FIRST_ASSUM (SUBST1_TAC o SYM);\r
1599 SUBGOAL_THEN` FINITE (sa:num -> bool) ` ASSUME_TAC;\r
1600 MATCH_MP_TAC FINITE_SUBSET;\r
1601 EXISTS_TAC` ss: num -> bool `;\r
1602 ASM_REWRITE_TAC[];\r
1603 SUBGOAL_THEN` FINITE (ss DIFF (sa:num -> bool)) ` ASSUME_TAC;\r
1604 MATCH_MP_TAC FINITE_DIFF;\r
1605 FIRST_X_ASSUM ACCEPT_TAC;\r
1606 ASM_SIMP_TAC[SUM_UNION];\r
1607 \r
1608 \r
1609 SUBGOAL_THEN` sum saa (cc_gg3a_v11 cc) = sum sa (\i. cc_gg3a_v11 cc (i + 1)) ` MP_TAC;\r
1610 MATCH_MP_TAC (GSYM SUM_EQ_GENERAL);\r
1611 ABBREV_TAC` nn = cc_card_v11 cc `;\r
1612 \r
1613 EXISTS_TAC`\i. if i = nn then 1 else i + 1 `;\r
1614 CONJ_TAC;\r
1615 GEN_TAC;\r
1616 EXPAND_TAC "sa";\r
1617 EXPAND_TAC "saa";\r
1618 REWRITE_TAC[IN_ELIM_THM; EXISTS_UNIQUE];\r
1619 STRIP_TAC;\r
1620 ASM_CASES_TAC` 0 < i' `;\r
1621 EXISTS_TAC` i':num `;\r
1622 ASM_REWRITE_TAC[];\r
1623 CONJ_TAC;\r
1624 CONJ_TAC;\r
1625 UNDISCH_TAC` i' + 1 IN S `;\r
1626 FIRST_X_ASSUM MP_TAC;\r
1627 EXPAND_TAC "S";\r
1628 REWRITE_TAC[IN_NUMSEG];\r
1629 ARITH_TAC;\r
1630 SUBGOAL_THEN` ~(i' = (nn:num)) ` MP_TAC;\r
1631 UNDISCH_TAC` i' + 1 IN S `;\r
1632 EXPAND_TAC "S";\r
1633 REWRITE_TAC[IN_NUMSEG];\r
1634 ARITH_TAC;\r
1635 SIMP_TAC[];\r
1636 GEN_TAC;\r
1637 \r
1638 EXPAND_TAC "S";\r
1639 REWRITE_TAC[IN_NUMSEG];\r
1640 ASM_CASES_TAC` y' = (nn:num) `;\r
1641 ASM_REWRITE_TAC[];\r
1642 FIRST_X_ASSUM SUBST_ALL_TAC;\r
1643 NHANH (ARITH_RULE` a + 1 = 1 ==> ~( 0 < a) `);\r
1644 ASM_REWRITE_TAC[];\r
1645 \r
1646 ASM_REWRITE_TAC[];\r
1647 ARITH_TAC;\r
1648 SUBST_ALL_TAC (ARITH_RULE` ~( 0 < i') <=> i' = 0 `);\r
1649 EXISTS_TAC `nn:num `;\r
1650 ASM_REWRITE_TAC[];\r
1651 CONJ_TAC;\r
1652 EXPAND_TAC "S";\r
1653 REWRITE_TAC[IN_NUMSEG; LE_REFL; ADD];\r
1654 MP_TAC (SPEC_ALL CC_CARD2);\r
1655 ANTS_TAC;\r
1656 ASM_REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];\r
1657 ASM_SIMP_TAC[ARITH_RULE` 2 <= nn ==> 1 <= nn `];\r
1658 STRIP_TAC;\r
1659 ASM_SEARCH_TCL [` periodic`; `cc_gg_v11 `] MP_TAC;\r
1660 ASM_SEARCH_TCL [` cc_bool_prep_v11 `] MP_TAC;\r
1661 REWRITE_TAC[cc_bool_prep_v11];\r
1662 MP_TAC (SPEC_ALL periodic_fn);\r
1663 ANTS_TAC;\r
1664 ASM_REWRITE_TAC[cc_bool_model_v11];\r
1665 ASM_REWRITE_TAC[];\r
1666 STRIP_TAC;\r
1667 SIMP_TAC[Oxl_def.periodic];\r
1668 STRIP_TAC;\r
1669 UNDISCH_TAC`(cb: num -> bool) i'`;\r
1670 ASM_REWRITE_TAC[];\r
1671 ASM_SEARCH_TCL [` a /\ b <=> c `] (fun x -> REWRITE_TAC[GSYM x]);\r
1672 FIRST_X_ASSUM MP_TAC;\r
1673 UNDISCH_TAC` cc_qy_v11 cc (i' + 1) `;\r
1674 ASM_SEARCH_TCL [` periodic `;` cc_qu_v11`] MP_TAC;\r
1675 ASM_SEARCH_TCL [` periodic `;` cc_qy_v11`] MP_TAC;\r
1676 ASM_SEARCH_TCL [` periodic `;` cc_gg_v11`] MP_TAC;\r
1677 SIMP_TAC[Oxl_def.periodic];\r
1678 UNDISCH_TAC` i' = 0 `;\r
1679 SIMP_TAC[ADD;ADD_SYM];\r
1680 MESON_TAC[ADD; ADD_SYM];\r
1681 \r
1682 GEN_TAC;\r
1683 EXPAND_TAC "S";\r
1684 REWRITE_TAC[IN_NUMSEG];\r
1685 ASM_CASES_TAC` y' = (nn:num) `;\r
1686 ASM_REWRITE_TAC[];\r
1687 ASM_REWRITE_TAC[];\r
1688 ARITH_TAC;\r
1689 \r
1690 \r
1691 GEN_TAC;\r
1692 EXPAND_TAC "sa";\r
1693 EXPAND_TAC "saa";\r
1694 REWRITE_TAC[IN_ELIM_THM];\r
1695 STRIP_TAC;\r
1696 CONJ_TAC;\r
1697 ASM_CASES_TAC` x = (nn: num) `;\r
1698 EXISTS_TAC` 0`;\r
1699 ASM_REWRITE_TAC[ADD];\r
1700 EXPAND_TAC "S";\r
1701 REWRITE_TAC[IN_NUMSEG];\r
1702 CONJ_TAC;\r
1703 MP_TAC (SPEC_ALL CC_CARD2);\r
1704 ANTS_TAC;\r
1705 ASM_REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];\r
1706 ASM_REWRITE_TAC[];\r
1707 ARITH_TAC;\r
1708 \r
1709 \r
1710 FIRST_X_ASSUM SUBST_ALL_TAC;\r
1711 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC);\r
1712 ASM_SEARCH_TCL [` a /\ b <=> c `] (fun x -> REWRITE_TAC[GSYM x]);\r
1713 ASM_SEARCH_TCL [` periodic `;` cc_gg_v11 `] MP_TAC;\r
1714 MP_TAC (SPEC_ALL periodic_fn);\r
1715 ANTS_TAC;\r
1716 ASM_REWRITE_TAC[cc_bool_model_v11];\r
1717 STRIP_TAC;\r
1718 ASM_SEARCH_TCL [` periodic `;` cc_qy_v11 `] MP_TAC;\r
1719 ASM_SEARCH_TCL [` periodic `;` cc_qu_v11 `] MP_TAC;\r
1720 SIMP_TAC[Oxl_def.periodic];\r
1721 ASM_SEARCH_TCL [` cc_card_v11 cc = nn `] SUBST1_TAC;\r
1722 \r
1723 MESON_TAC[ADD; ADD_SYM];\r
1724 EXISTS_TAC `x:num `;\r
1725 ASM_REWRITE_TAC[];\r
1726 UNDISCH_TAC` (x:num) IN S `;\r
1727 EXPAND_TAC "S";\r
1728 REWRITE_TAC[IN_NUMSEG];\r
1729 FIRST_X_ASSUM MP_TAC;\r
1730 ARITH_TAC;\r
1731 \r
1732 ASM_CASES_TAC` x = (nn:num) `;\r
1733 ASM_REWRITE_TAC[];\r
1734 ASM_SEARCH_TCL [` periodic (cc_gg3a_v11 cc) `] MP_TAC;\r
1735 REWRITE_TAC[Oxl_def.periodic];\r
1736 MESON_TAC[ADD_SYM];\r
1737 ASM_REWRITE_TAC[];\r
1738 \r
1739 MP_TAC (SPEC_ALL periodic_fn);\r
1740 ANTS_TAC;\r
1741 ASM_REWRITE_TAC[cc_bool_model_v11];\r
1742 ABBREV_TAC` nn = cc_card_v11 cc `;\r
1743 STRIP_TAC;\r
1744 SUBGOAL_THEN ` ss DIFF sa SUBSET (sb: num -> bool) ` MP_TAC;\r
1745 UNDISCH_TAC` {i | (i:num) IN S /\ cb i} = ss `;\r
1746 STRIP_TAC;\r
1747 EXPAND_TAC "ss";\r
1748 EXPAND_TAC "sa";\r
1749 EXPAND_TAC "sb";\r
1750 \r
1751 REWRITE_TAC[SUBSET; IN_DIFF; IN_ELIM_THM];\r
1752 SUBGOAL_THEN` !x. (x IN S /\ cb x) ==>  ~(cc_4cell_v11 cc (x + 1) /\ cc_4cell_v11 cc (x - 1))` MP_TAC;\r
1753 GEN_TAC THEN STRIP_TAC;\r
1754 FIRST_ASSUM MATCH_MP_TAC;\r
1755 ASM_REWRITE_TAC[];\r
1756 UNDISCH_TAC` (x:num) IN S `;\r
1757 EXPAND_TAC "S";\r
1758 REWRITE_TAC[IN_NUMSEG];\r
1759 ARITH_TAC;\r
1760 REWRITE_TAC[cc_qy_v11];\r
1761 MESON_TAC[];\r
1762 \r
1763 \r
1764 SUBGOAL_THEN` sum sbb (cc_gg3b_v11 cc) = sum sb (\i. cc_gg3b_v11 cc ( i - 1))` MP_TAC;\r
1765 MATCH_MP_TAC SUM_EQ_GENERAL;\r
1766 EXISTS_TAC`\i. if i = nn then 1 else i + 1 `;\r
1767 CONJ_TAC;\r
1768 REWRITE_TAC[EXISTS_UNIQUE];\r
1769 GEN_TAC;\r
1770 EXPAND_TAC "sb";\r
1771 REWRITE_TAC[IN_ELIM_THM];\r
1772 EXPAND_TAC "sbb";\r
1773 EXPAND_TAC "S";\r
1774 REWRITE_TAC[IN_NUMSEG];\r
1775 STRIP_TAC;\r
1776 ASM_CASES_TAC` y = 1 `;\r
1777 EXISTS_TAC` nn:num`;\r
1778 REWRITE_TAC[IN_ELIM_THM];\r
1779 CONJ_TAC;\r
1780 ASM_REWRITE_TAC[];\r
1781 CONJ_TAC;\r
1782 STRIP_TAC;\r
1783 MP_TAC (SPEC_ALL CC_CARD2);\r
1784 ANTS_TAC;\r
1785 ASM_REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];\r
1786 ASM_REWRITE_TAC[];\r
1787 \r
1788 ARITH_TAC;\r
1789 REWRITE_TAC[LE_REFL];\r
1790 FIRST_X_ASSUM SUBST_ALL_TAC;\r
1791 FIRST_X_ASSUM MP_TAC;\r
1792 FIRST_X_ASSUM MP_TAC;\r
1793 ASM_SEARCH_TCL [` a /\ b <=> c `] MP_TAC;\r
1794 DISCH_THEN (fun x -> REWRITE_TAC[GSYM x]);\r
1795 ASM_SEARCH_TCL [` periodic (cc_gg_v11 cc) `] MP_TAC;\r
1796 ASM_SEARCH_TCL [` periodic (cc_qy_v11 cc) `] MP_TAC;\r
1797 ASM_SEARCH_TCL [` periodic (cc_qu_v11 cc) `] MP_TAC;\r
1798 REWRITE_TAC[Oxl_def.periodic; SUB_REFL];\r
1799 MESON_TAC[ADD; ADD_SYM];\r
1800 GEN_TAC;\r
1801 ASM_CASES_TAC` y' = (nn:num) `;\r
1802 ASM_REWRITE_TAC[];\r
1803 ASM_REWRITE_TAC[];\r
1804 ARITH_TAC;\r
1805 EXISTS_TAC` y - 1 `;\r
1806 CONJ_TAC;\r
1807 ASSUME_TAC2 (ARITH_RULE` 1 <= y /\ y <= nn ==> ~( y - 1 = nn) `);\r
1808 ASM_REWRITE_TAC[IN_ELIM_THM];\r
1809 ASSUME_TAC2 (ARITH_RULE` 1 <= y /\ y <= nn ==> y - 1 + 1 = y /\ y - 1 <= nn`);\r
1810 ASM_REWRITE_TAC[];\r
1811 UNDISCH_TAC` 1 <= y `;\r
1812 UNDISCH_TAC` ~( y = 1) `;\r
1813 ARITH_TAC;\r
1814 GEN_TAC;\r
1815 \r
1816 ASM_CASES_TAC` y' = (nn:num) `;\r
1817 ASM_REWRITE_TAC[];\r
1818 ASM_REWRITE_TAC[];\r
1819 STRIP_TAC;\r
1820 FIRST_X_ASSUM MP_TAC;\r
1821 UNDISCH_TAC` 1 <= y `;\r
1822 ARITH_TAC;\r
1823 GEN_TAC;\r
1824 EXPAND_TAC "sbb";\r
1825 EXPAND_TAC "sb";\r
1826 EXPAND_TAC "S";\r
1827 REWRITE_TAC[IN_ELIM_THM; IN_NUMSEG];\r
1828 STRIP_TAC;\r
1829 ASM_CASES_TAC` x = (nn: num) `;\r
1830 ASM_REWRITE_TAC[];\r
1831 FIRST_X_ASSUM SUBST_ALL_TAC;\r
1832 CONJ_TAC;\r
1833 CONJ_TAC;\r
1834 UNDISCH_TAC` 1 <= nn `;\r
1835 ARITH_TAC;\r
1836 \r
1837 UNDISCH_TAC` (cb:num -> bool) (nn + 1) `;\r
1838 UNDISCH_TAC` cc_qy_v11 cc nn `;\r
1839 ASM_SEARCH_TCL [` a /\ b <=> c `] (fun x -> REWRITE_TAC[GSYM x]);\r
1840 ASM_SEARCH_TCL [` periodic (cc_gg_v11 cc) `] MP_TAC;\r
1841 ASM_SEARCH_TCL [` periodic (cc_qu_v11 cc) `] MP_TAC;\r
1842 ASM_SEARCH_TCL [` periodic (cc_qy_v11 cc) `] MP_TAC;\r
1843 REWRITE_TAC[Oxl_def.periodic; SUB_REFL];\r
1844 MESON_TAC[ADD; ADD_SYM];\r
1845 \r
1846 REWRITE_TAC[SUB_REFL];\r
1847 ASM_SEARCH_TCL [` periodic (cc_gg3b_v11 cc) `] MP_TAC;\r
1848 REWRITE_TAC[Oxl_def.periodic];\r
1849 MESON_TAC[ADD; ADD_SYM];\r
1850 \r
1851 ASM_REWRITE_TAC[ARITH_RULE` (a + 1) - 1 = a /\ 1 <= a + 1`];\r
1852 UNDISCH_TAC` x <= (nn:num) `;\r
1853 FIRST_X_ASSUM MP_TAC;\r
1854 ARITH_TAC;\r
1855 \r
1856 \r
1857 SIMP_TAC[];\r
1858 \r
1859 REPEAT STRIP_TAC;\r
1860 SUBGOAL_THEN` sum (ss DIFF sa) (\i. cc_gg3b_v11 cc (i - 1)) <= sum sb (\i. cc_gg3b_v11 cc (i - 1))` MP_TAC;\r
1861 MATCH_MP_TAC SUM_SUBSET_SIMPLE;\r
1862 ASM_REWRITE_TAC[];\r
1863 SUBGOAL_THEN` sb SUBSET (S:num -> bool) ` ASSUME_TAC;\r
1864 EXPAND_TAC "sb";\r
1865 SET_TAC[];\r
1866 CONJ_TAC;\r
1867 MATCH_MP_TAC FINITE_SUBSET;\r
1868 EXISTS_TAC` S: num -> bool `;\r
1869 ASM_REWRITE_TAC[];\r
1870 \r
1871 EXPAND_TAC "sb";\r
1872 REWRITE_TAC[IN_DIFF; IN_ELIM_THM];\r
1873 ASM_SEARCH_TCL  [` cc_qy_v11 cc i ==> &0 <= cc_gg3b_v11 cc i `] NHANH;\r
1874 SIMP_TAC[];\r
1875 \r
1876 STRIP_TAC;\r
1877 SUBGOAL_THEN` &0 <= sum sa (\i. cc_gg3a_v11 cc (i + 1)) +\r
1878          sum sa (cc_gg_v11 cc) ` ASSUME_TAC;\r
1879 ASM_SIMP_TAC[GSYM SUM_ADD];\r
1880 MATCH_MP_TAC SUM_POS_LE;\r
1881 ASM_REWRITE_TAC[];\r
1882 EXPAND_TAC "sa";\r
1883 REWRITE_TAC[IN_ELIM_THM];\r
1884 ASM_SEARCH_TCL [` a /\ b <=> c `] (fun x -> REWRITE_TAC[ GSYM x]);\r
1885 ASM_SEARCH_TCL [` x /\ cc_qy_v11 cc (i + 1) ==> a `] MP_TAC;\r
1886 REWRITE_TAC[cc_eps];\r
1887 MESON_TAC[REAL_ADD_SYM; REAL_ARITH` &0 <= #0.0057`; REAL_LE_TRANS];\r
1888 \r
1889 \r
1890 SUBGOAL_THEN` &0 <= sum (ss DIFF sa) (\i. cc_gg3b_v11 cc (i - 1)) + sum (ss DIFF sa) (cc_gg_v11 cc) ` ASSUME_TAC;\r
1891 SUBGOAL_THEN` FINITE (ss DIFF (sa:num -> bool)) ` MP_TAC;\r
1892 MATCH_MP_TAC FINITE_DIFF;\r
1893 FIRST_X_ASSUM ACCEPT_TAC;\r
1894 SIMP_TAC[GSYM SUM_ADD];\r
1895 STRIP_TAC;\r
1896 MATCH_MP_TAC SUM_POS_LE;\r
1897 ASM_REWRITE_TAC[];\r
1898 UNDISCH_TAC` ss DIFF sa SUBSET (sb:num -> bool) `;\r
1899 REWRITE_TAC[SUBSET];\r
1900 DISCH_THEN NHANH;\r
1901 EXPAND_TAC "sb";\r
1902 EXPAND_TAC "S";\r
1903 REWRITE_TAC[IN_NUMSEG; IN_ELIM_THM];\r
1904 NHANH (ARITH_RULE` 1 <= x ==> x - 1 + 1 = x `);\r
1905 ASM_SEARCH_TCL [` a /\ b <=> v`] (fun x -> REWRITE_TAC[GSYM x]);\r
1906 ASM_SEARCH_TCL  [` cc_qu_v11 cc (i + 1) /\ cc_qy_v11 cc i ==> a `] MP_TAC;\r
1907 REWRITE_TAC[cc_eps];\r
1908 MESON_TAC[REAL_ADD_SYM; REAL_ARITH` &0 <= #0.0057`; REAL_LE_TRANS];\r
1909 REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC);\r
1910 REAL_ARITH_TAC;\r
1911 \r
1912 SUBGOAL_THEN` ss UNION sab SUBSET (S:num -> bool) ` MP_TAC;\r
1913 EXPAND_TAC "ss";\r
1914 EXPAND_TAC "sab";\r
1915 SET_TAC[];\r
1916 NHANH (SET_RULE` s SUBSET S ==> (S DIFF s ) UNION s = S /\ DISJOINT (S DIFF s) s`);\r
1917 ABBREV_TAC` sg = ss UNION (sab:num -> bool) `;\r
1918 STRIP_TAC;\r
1919 SUBGOAL_THEN` FINITE (sg: num -> bool) ` ASSUME_TAC;\r
1920 MATCH_MP_TAC FINITE_SUBSET;\r
1921 EXISTS_TAC` S:num -> bool `;\r
1922 ASM_REWRITE_TAC[];\r
1923 SUBGOAL_THEN` FINITE (S DIFF (sg:num -> bool)) ` ASSUME_TAC;\r
1924 MATCH_MP_TAC FINITE_DIFF;\r
1925 FIRST_X_ASSUM ACCEPT_TAC;\r
1926 STRIP_TAC;\r
1927 SUBGOAL_THEN` &0 <= sum S (cc_gg_v11 cc) ` MP_TAC;\r
1928 ASM_SIMP_TAC[SUM_UNION];\r
1929 EXPAND_TAC "S";\r
1930 REPLICATE_TAC 4 (FIRST_X_ASSUM MP_TAC);\r
1931 ASM_SIMP_TAC[SUM_UNION];\r
1932 REPEAT STRIP_TAC;\r
1933 MATCH_MP_TAC REAL_LE_ADD;\r
1934 CONJ_TAC;\r
1935 MATCH_MP_TAC SUM_POS_LE;\r
1936 ASM_REWRITE_TAC[];\r
1937 \r
1938 GEN_TAC;\r
1939 EXPAND_TAC "sg";\r
1940 EXPAND_TAC "ss";\r
1941 REWRITE_TAC[IN_DIFF; IN_ELIM_THM; IN_UNION];\r
1942 ASM_SEARCH_TCL [` a /\ b <=> c `] (fun x -> REWRITE_TAC[GSYM x]);\r
1943 REWRITE_TAC[DE_MORGAN_THM];\r
1944 IMP_TAC;\r
1945 SIMP_TAC[];\r
1946 REPEAT STRIP_TAC;\r
1947 UNDISCH_TAC` ~( cc_gg_v11 cc x < &0 ) `;\r
1948 REAL_ARITH_TAC;\r
1949 SUBGOAL_THEN ` cc_bool_model_v11 cc ` MP_TAC;\r
1950 ASM_REWRITE_TAC[cc_bool_model_v11];\r
1951 NHANH (SPECL [`cc: cc_v11`;` x:num `] QY_QX_QU);\r
1952 ASM_REWRITE_TAC[];\r
1953 SUBGOAL_THEN` cc_real_model_v11 cc ` MP_TAC;\r
1954 ASM_REWRITE_TAC[cc_real_model_v11];\r
1955 MESON_TAC[QY_NN0; QX_NN0];\r
1956 MATCH_MP_TAC REAL_LE_TRANS;\r
1957 EXISTS_TAC` sum saa (cc_gg3a_v11 cc) +\r
1958       sum sbb (cc_gg3b_v11 cc) +\r
1959       sum ss (cc_gg_v11 cc) `;\r
1960 ASM_REWRITE_TAC[];\r
1961 ABBREV_TAC` nn = cc_card_v11 cc `;\r
1962 STRIP_TAC;\r
1963 UNDISCH_TAC` ~( nn = 0 ) `;\r
1964 ASM_SEARCH_TCL [` periodic (cc_gg_v11 cc) `] MP_TAC;\r
1965 PHA;\r
1966 NHANH periodic_sum;\r
1967 STRIP_TAC;\r
1968 FIRST_X_ASSUM (MP_TAC o (SPEC ` 1 `));\r
1969 ASSUME_TAC2 (ARITH_RULE` ~( nn = 0) ==> nn - 1 + 1 = nn `);\r
1970 ASM_REWRITE_TAC[];\r
1971 STRIP_TAC;\r
1972 UNDISCH_TAC` &0 <= sum S (cc_gg_v11 cc) `;\r
1973 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0)`];\r
1974 FIRST_X_ASSUM MP_TAC;\r
1975 SIMP_TAC[]]);;\r
1976 \r
1977 \r
1978 \r
1979 \r
1980 let MOD_INJ1 = prove_by_refinement\r
1981 (` ~( n = 0) /\ k < n /\ ~( k = 0) ==> (! x. ~( x MOD n = (x + k) MOD n)) `,\r
1982 [REPEAT STRIP_TAC;\r
1983 MP_TAC (SPECL [` n: num `;` x:num `;` x:num `;` x + k:num`] MOD_INJ);\r
1984 ANTS_TAC;\r
1985 ASM_REWRITE_TAC[IN_NUMSEG];\r
1986 DOWN_TAC;\r
1987 SIMP_TAC[LE_REFL; ARITH_RULE` ~( n = 0) ==> x <= n - 1 + x `; ARITH_RULE` a <= a + x:num `];\r
1988 STRIP_TAC;\r
1989 UNDISCH_TAC` k < (n:num) `;\r
1990 ARITH_TAC;\r
1991 UNDISCH_TAC` ~( k = 0) `;\r
1992 ARITH_TAC]);;\r
1993 \r
1994 \r
1995 \r
1996 \r
1997 (* TTTTTT *)\r
1998 \r
1999 \r
2000 \r
2001 (* ========================================== *)\r
2002 (* WKR_COMPTED *)\r
2003 \r
2004 \r
2005 \r
2006 let WKR_COMPTED = prove_by_refinement (`cc_bool_model_v11 cc /\\r
2007 cc_bool_prep_v11 cc /\\r
2008  cc_real_model_v11 cc /\\r
2009  sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0 /\\r
2010  indSet = 0..cc_card_v11 cc - 1\r
2011  ==> (?i j k.\r
2012           ~(i = j \/ j = k \/ k = i) /\\r
2013           i IN indSet /\\r
2014           j IN indSet /\\r
2015           k IN indSet /\\r
2016           cc_4cell_v11 cc i /\\r
2017           cc_4cell_v11 cc j /\\r
2018           cc_4cell_v11 cc k)`, [STRIP_TAC;\r
2019 ASSUME_TAC2 (SPEC_ALL MTMLSRF);\r
2020 ASSUME_TAC2 Oxl_def.CC_CARD2;\r
2021 DOWN_TAC;\r
2022 REWRITE_TAC[cc_real_model_v11; cc_qu_v11; cc_bool_model_v11];\r
2023 STRIP_TAC;\r
2024 ASM_CASES_TAC` cc_card_v11 cc = 2 `;\r
2025 ASM_SEARCH_TCL [` x = &2 * pi `] MP_TAC;\r
2026 FIRST_ASSUM SUBST1_TAC;\r
2027 REWRITE_TAC[ARITH_RULE` 2 - 1 = 1 `];\r
2028 MP_TAC (ARITH_RULE` 0 < 1 /\ 0 <= 1 `);\r
2029 SIMP_TAC[SUM_CLAUSES_RIGHT; SUB_REFL; SUM_SING_NUMSEG];\r
2030 STRIP_TAC THEN STRIP_TAC;\r
2031 ABBREV_TAC` nn = cc_card_v11 cc `;\r
2032 SUBGOAL_THEN` {i MOD nn, (i + 1) MOD nn} SUBSET 0..nn - 1 ` MP_TAC;\r
2033 REWRITE_TAC[INSERT_SUBSET; EMPTY_SUBSET];\r
2034 \r
2035 UNDISCH_TAC` ~(nn = 0) `;\r
2036 MESON_TAC[Oxl_def.MOD_IN_NUMSEG];\r
2037 MP_TAC (SPECL [`1 `;` 2 `] (GEN_ALL MOD_INJ1));\r
2038 ANTS_TAC;\r
2039 ARITH_TAC;\r
2040 MP_TAC (SPECL [` 0`;` 2 - 1 `] CARD_NUMSEG);\r
2041 ASM_REWRITE_TAC[ARITH_RULE` (2 - 1 + 1) - 0 = 2 `];\r
2042 REPEAT STRIP_TAC;\r
2043 SUBGOAL_THEN` {i MOD 2, (i + 1) MOD 2} = 0..2 - 1` MP_TAC;\r
2044 MATCH_MP_TAC CARD_SUBSET_EQ;\r
2045 ASM_REWRITE_TAC[FINITE_NUMSEG; Geomdetail.CARD_SET2];\r
2046 \r
2047 \r
2048 DISCH_THEN (ASSUME_TAC o SYM);\r
2049 \r
2050 ASM_SEARCH_TCL [` sum s f = &2 * pi `] MP_TAC;\r
2051 UNDISCH_TAC` nn = 2 `;\r
2052 SIMP_TAC[];\r
2053 ASM_SIMP_TAC[];\r
2054 FIRST_X_ASSUM (MP_TAC o (SPEC` i: num `));\r
2055 SIMP_TAC[Geomdetail.SUM_DIS2];\r
2056 REPEAT STRIP_TAC;\r
2057 SUBGOAL_THEN` cc_4cell_v11 cc (i MOD 2) /\ cc_4cell_v11 cc ((i + 1) MOD 2) ` MP_TAC;\r
2058 UNDISCH_TAC ` ~( nn = 0 ) `;\r
2059 UNDISCH_TAC` periodic (cc_4cell_v11 cc) nn `;\r
2060 PHA;\r
2061 UNDISCH_TAC` cc_4cell_v11 cc (i) `;\r
2062 UNDISCH_TAC` cc_4cell_v11 cc (i + 1) `;\r
2063 ASM_REWRITE_TAC[];\r
2064 MESON_TAC[Oxl_def.periodic_mod];\r
2065 ASM_SEARCH_TCL [` cc_azim_v11 `;` #2.8`] (NHANH_PAT` \x. x ==> y `);\r
2066 \r
2067 DOWN;\r
2068 MP_TAC (prove(` #3.14159 < pi`, REWRITE_TAC[ Flyspeck_constants.bounds]));\r
2069 REAL_ARITH_TAC;\r
2070 \r
2071 \r
2072 ABBREV_TAC` nn = cc_card_v11 cc `;\r
2073 EXISTS_TAC` (i - 1) MOD nn`;\r
2074 EXISTS_TAC` (i) MOD nn`;\r
2075 EXISTS_TAC` (i + 1) MOD nn`;\r
2076 MP_TAC (ISPECL [` 1 `;`nn: num `] (GEN_ALL MOD_INJ1));\r
2077 MP_TAC (ISPECL [` 2 `;`nn: num `] (GEN_ALL MOD_INJ1));\r
2078 ANTS_TAC;\r
2079 ASM_REWRITE_TAC[ARITH_RULE` ~( 2 = 0) /\ (2 < nn <=> 2 <= nn /\ ~( nn = 2))`];\r
2080 STRIP_TAC;\r
2081 ANTS_TAC;\r
2082 ASM_SIMP_TAC[ARITH_RULE` ~( 1 = 0) /\ ( 2 <= x ==> 1 < x)`];\r
2083 STRIP_TAC;\r
2084 FIRST_ASSUM (MP_TAC o (SPEC` i: num `));\r
2085 FIRST_X_ASSUM (MP_TAC o (SPEC` i - 1 `));\r
2086 FIRST_ASSUM (MP_TAC o (SPEC` i - 1 `));\r
2087 UNDISCH_TAC` 0 < i `;\r
2088 SIMP_TAC[ARITH_RULE` 0 < i ==> i - 1 + 1 = i /\ i - 1 + 2 = i + 1 `];\r
2089 REPLICATE_TAC 4 STRIP_TAC;\r
2090 ASM_SIMP_TAC[MOD_IN_NUMSEG];\r
2091 ASM_SEARCH_TCL [` periodic `;` cc_4cell_v11 `] MP_TAC;\r
2092 UNDISCH_TAC` cc_4cell_v11 cc (i - 1) `;\r
2093 UNDISCH_TAC` cc_4cell_v11 cc (i) `;\r
2094 UNDISCH_TAC` cc_4cell_v11 cc (i + 1) `;\r
2095 UNDISCH_TAC` ~( nn = 0) `;\r
2096 MESON_TAC[Oxl_def.periodic_mod]]);;\r
2097 \r
2098 \r
2099 \r
2100 \r
2101 let oxl6142 = prove_by_refinement (CHQSQEY_concl,\r
2102 [GEN_TAC;\r
2103 ABBREV_TAC` indSet = 0..cc_card_v11 cc - 1 `;\r
2104 STRIP_TAC;\r
2105 MP_TAC WKR_COMPTED;\r
2106 ANTS_TAC;\r
2107 ASM_REWRITE_TAC[];\r
2108 STRIP_TAC;\r
2109 \r
2110 REWRITE_TAC[cc_size_v11];\r
2111 SUBGOAL_THEN` {i,j,k} SUBSET {i | i IN 0..cc_card_v11 cc - 1 /\ cc_4cell_v11 cc i}` MP_TAC;\r
2112 ASM_REWRITE_TAC[INSERT_SUBSET; EMPTY_SUBSET; IN_ELIM_THM];\r
2113 ASM_REWRITE_TAC[];\r
2114 STRIP_TAC;\r
2115 SUBGOAL_THEN` FINITE {i | i IN indSet /\ cc_4cell_v11 cc i} ` MP_TAC;\r
2116 MATCH_MP_TAC FINITE_SUBSET;\r
2117 EXISTS_TAC` indSet:num -> bool `;\r
2118 EXPAND_TAC "indSet";\r
2119 REWRITE_TAC[FINITE_NUMSEG];\r
2120 SET_TAC[];\r
2121 FIRST_X_ASSUM MP_TAC;\r
2122 PHA;\r
2123 NHANH CARD_SUBSET;\r
2124 STRIP_TAC;\r
2125 ASM_SEARCH_TCL [` a \/ b`] MP_TAC;\r
2126 REWRITE_TAC[GSYM Geomdetail.CARD3];\r
2127 DISCH_THEN SUBST_ALL_TAC;\r
2128 FIRST_X_ASSUM ACCEPT_TAC]);;\r
2129 \r
2130 \r
2131 let CHQSQEY = oxl6142;;\r
2132 \r
2133 \r
2134 let THREE_LE_CC_CARD = prove_by_refinement (` cc_bool_model_v11 cc /\\r
2135           cc_bool_prep_v11 cc /\\r
2136           cc_real_model_v11 cc /\\r
2137           sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0\r
2138           ==> 3 <= cc_card_v11 cc `,\r
2139 [NHANH CHQSQEY;\r
2140 REWRITE_TAC[cc_size_v11];\r
2141 ABBREV_TAC` sn = 0..cc_card_v11 cc - 1 `;\r
2142 STRIP_TAC;\r
2143 ASSUME_TAC (SET_RULE` {i | i IN sn /\ cc_4cell_v11 cc i} SUBSET sn`);\r
2144 SUBGOAL_THEN` FINITE (sn:num -> bool) ` MP_TAC;\r
2145 EXPAND_TAC "sn";\r
2146 REWRITE_TAC[FINITE_NUMSEG];\r
2147 FIRST_X_ASSUM MP_TAC;\r
2148 PHA;\r
2149 NHANH CARD_SUBSET;\r
2150 STRIP_TAC;\r
2151 ABBREV_TAC` c4 = CARD {i | i IN sn /\ cc_4cell_v11 cc i} `;\r
2152 ASSUME_TAC2 (ARITH_RULE` 3 <= c4 /\ c4 <= CARD (sn:num -> bool) ==> 3 <= CARD sn`);\r
2153 FIRST_X_ASSUM MP_TAC;\r
2154 EXPAND_TAC "sn";\r
2155 REWRITE_TAC[CARD_NUMSEG];\r
2156 ARITH_TAC]);;\r
2157 \r
2158 \r
2159 \r
2160 \r
2161 let THREE_MOD_CONSECUTIVES = prove_by_refinement (\r
2162 ` 0 < i /\ 3 <= n ==> ~( (i - 1) MOD n = i MOD n \/ i MOD n = (i + 1) MOD n \/\r
2163 (i + 1) MOD n = (i - 1) MOD n )`,\r
2164 [NHANH (ARITH_RULE` 3 <= n ==> 2 < n /\ 1 < n /\ ~(n = 0)`);\r
2165 STRIP_TAC;\r
2166 MP_TAC (SPECL [` 2`;` n:num `] (GEN_ALL MOD_INJ1));\r
2167 ANTS_TAC;\r
2168 ASM_REWRITE_TAC[];\r
2169 ARITH_TAC;\r
2170 MP_TAC (SPECL [` 1`;` n:num `] (GEN_ALL MOD_INJ1));\r
2171 ANTS_TAC;\r
2172 ASM_REWRITE_TAC[];\r
2173 ARITH_TAC;\r
2174 STRIP_TAC;\r
2175 FIRST_ASSUM (ASSUME_TAC o (SPEC` i - 1 `));\r
2176 FIRST_X_ASSUM (ASSUME_TAC o (SPEC` i:num `));\r
2177 STRIP_TAC;\r
2178 FIRST_X_ASSUM (MP_TAC o (SPEC` i - 1 `));\r
2179 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC);\r
2180 PHA;\r
2181 ASSUME_TAC2 (ARITH_RULE` 0 < i ==> i - 1 + 1 = i /\ i - 1 + 2 = i + 1 `);\r
2182 ASM_REWRITE_TAC[];\r
2183 MESON_TAC[]]);;\r
2184 \r
2185 \r
2186 \r
2187 let MOD_PERIOD_BOUNDED = prove_by_refinement (\r
2188 ` ~( n = 0) /\ ~( k = 0) ==> (! x. (x + k) MOD n = x MOD n ==> n <= k ) `,\r
2189 [REPEAT STRIP_TAC;\r
2190 ASM_CASES_TAC` n <= (k:num) `;\r
2191 ASM_REWRITE_TAC[];\r
2192 MP_TAC MOD_INJ1;\r
2193 ANTS_TAC;\r
2194 ASM_REWRITE_TAC[ARITH_RULE` a < (b:num) <=> ~(b <= a ) `];\r
2195 ASM_MESON_TAC[]]);;\r
2196 \r
2197 \r
2198 \r
2199 let MOD_PERIOD_BOUNDED2 = prove_by_refinement\r
2200 (` ~(nn = 0) /\ m <= k /\\r
2201 (i + k ) MOD nn IN { (i + x) MOD nn | x < m } ==> nn <= k `,\r
2202 [REWRITE_TAC[IN_ELIM_THM] ;\r
2203 STRIP_TAC ;\r
2204 MP_TAC (SPECL [` nn:num `;` k - (x:num) `] (GEN_ALL MOD_PERIOD_BOUNDED)) ;\r
2205 ANTS_TAC ;\r
2206 ASM_REWRITE_TAC[] ;\r
2207 ASM_ARITH_TAC ;\r
2208 DISCH_THEN (MP_TAC o (SPEC` i + (x:num) `)) ;\r
2209 ANTS_TAC ;\r
2210 ASSUME_TAC2 (ARITH_RULE` x < m /\ m <= (k:num) ==> (i + x) + k - x = i + k `) ;\r
2211 ASM_REWRITE_TAC[] ;\r
2212 ARITH_TAC]);;\r
2213 \r
2214 \r
2215 \r
2216 let CARD_EMPTY = el 0 (CONJUNCTS CARD_CLAUSES);;\r
2217 \r
2218 let CARD_INSERT = el 1 (CONJUNCTS CARD_CLAUSES);;\r
2219 let SWITCH_TAC tm = UNDISCH_TAC tm THEN DISCH_THEN (ASSUME_TAC o GSYM);;\r
2220 \r
2221 \r
2222 \r
2223 (* ===================================== *)\r
2224 \r
2225 \r
2226 \r
2227 \r
2228 let UNPNFVW = prove_by_refinement ( UNPNFVW_concl,\r
2229 \r
2230 [ NHANH THREE_LE_CC_CARD;\r
2231 NHANH MTMLSRF;\r
2232 NHANH CHQSQEY;\r
2233 REPEAT STRIP_TAC;\r
2234 ABBREV_TAC` indSet = 0..cc_card_v11 cc - 1 `;\r
2235 MP_TAC WKR_COMPTED;\r
2236 ANTS_TAC;\r
2237 ASM_REWRITE_TAC[];\r
2238 STRIP_TAC;\r
2239 ASSUME_TAC2 (SPEC_ALL LXDEYBO);\r
2240 ABBREV_TAC` sz = cc_size_v11 cc (cc_4cell_v11 cc) ` ;\r
2241 ASM_CASES_TAC` cc_size_v11 cc (cc_4cell_v11 cc) = 3 `;\r
2242 ABBREV_TAC` nn = cc_card_v11 cc `;\r
2243 UNDISCH_TAC` 3 <= nn `;\r
2244 UNDISCH_TAC` 0 < i `;\r
2245 PHA;\r
2246 NHANH THREE_MOD_CONSECUTIVES;\r
2247 REWRITE_TAC[GSYM Geomdetail.CARD3];\r
2248 ABBREV_TAC` ia = (i - 1) MOD nn `;\r
2249 ABBREV_TAC` ib = i MOD nn `;\r
2250 ABBREV_TAC ` ic = (i + 1) MOD nn `;\r
2251 SUBGOAL_THEN` cc_4cell_v11 cc ia /\ cc_4cell_v11 cc ib /\ cc_4cell_v11 cc ic ` MP_TAC;\r
2252 UNDISCH_TAC` cc_qu_v11 cc i `;\r
2253 REWRITE_TAC[cc_qu_v11];\r
2254 ASM_SEARCH_TCL [` cc_bool_model_v11 `] MP_TAC;\r
2255 REWRITE_TAC[cc_bool_model_v11];\r
2256 ASM_REWRITE_TAC[];\r
2257 ASM_MESON_TAC[periodic_mod];\r
2258 REPEAT STRIP_TAC;\r
2259 ASSUME_TAC2 (ARITH_RULE` 3 <= nn ==> ~( nn = 0) `);\r
2260 ASM_SEARCH_TCL [` cc_qu_v11 `] MP_TAC;\r
2261 REWRITE_TAC[cc_qu_v11] THEN STRIP_TAC;\r
2262 SUBGOAL_THEN`! i. cc_4cell_v11 cc (i MOD nn) = cc_4cell_v11 cc i ` MP_TAC;\r
2263 GEN_TAC;\r
2264 MATCH_MP_TAC (GSYM periodic_mod);\r
2265 ASM_REWRITE_TAC[];\r
2266 ASM_SEARCH_TCL [` cc_bool_model_v11 `] MP_TAC;\r
2267 SIMP_TAC[cc_bool_model_v11];\r
2268 ASM_REWRITE_TAC[];\r
2269 SIMP_TAC[];\r
2270 STRIP_TAC;\r
2271 \r
2272 SUBGOAL_THEN` {ia, ib, ic} SUBSET indSet:num -> bool ` MP_TAC;\r
2273 REWRITE_TAC[INSERT_SUBSET; EMPTY_SUBSET];\r
2274 EXPAND_TAC "indSet";\r
2275 EXPAND_TAC "ia";\r
2276 EXPAND_TAC "ib";\r
2277 EXPAND_TAC "ic";\r
2278 UNDISCH_TAC` ~(nn = 0) `;\r
2279 SIMP_TAC[MOD_IN_NUMSEG];\r
2280 STRIP_TAC;\r
2281 SUBGOAL_THEN` {ia, ib, ic} SUBSET {i | i IN 0..cc_card_v11 cc - 1 /\ cc_4cell_v11 cc i} ` MP_TAC;\r
2282 REWRITE_TAC[INSERT_SUBSET; EMPTY_SUBSET; IN_ELIM_THM];\r
2283 FIRST_X_ASSUM MP_TAC;\r
2284 ASM_SIMP_TAC[INSERT_SUBSET];\r
2285 STRIP_TAC;\r
2286 EXPAND_TAC "ia";\r
2287 EXPAND_TAC "ib";\r
2288 EXPAND_TAC "ic";\r
2289 ASMS_SEARCH_TCL [` X <=> cc_4cell_v11 cc i `] REWRITE_TAC;\r
2290 ASM_REWRITE_TAC[];\r
2291 FIRST_X_ASSUM MP_TAC;\r
2292 ASM_REWRITE_TAC[];\r
2293 STRIP_TAC;\r
2294 \r
2295 \r
2296 SUBGOAL_THEN` FINITE (indSet:num -> bool) ` ASSUME_TAC;\r
2297 EXPAND_TAC "indSet";\r
2298 REWRITE_TAC[FINITE_NUMSEG];\r
2299 SUBGOAL_THEN`{ia, ib, ic} = {i | i IN indSet /\ cc_4cell_v11 cc i} ` ASSUME_TAC;\r
2300 MATCH_MP_TAC CARD_SUBSET_EQ;\r
2301 ASM_REWRITE_TAC[];\r
2302 CONJ_TAC;\r
2303 MATCH_MP_TAC FINITE_SUBSET;\r
2304 EXISTS_TAC` indSet:num -> bool `;\r
2305 ASM_REWRITE_TAC[];\r
2306 SET_TAC[];\r
2307 UNDISCH_TAC` cc_size_v11 cc (cc_4cell_v11 cc) = 3 `;\r
2308 REWRITE_TAC[cc_size_v11];\r
2309 EXPAND_TAC "indSet";\r
2310 EXPAND_TAC "nn";\r
2311 SIMP_TAC[];\r
2312 \r
2313 ASM_CASES_TAC` cc_4cell_v11 cc ( (i + 2) MOD nn) `;\r
2314 SUBGOAL_THEN` (i + 2) MOD nn IN {ia, ib, ic} ` MP_TAC;\r
2315 ASM_REWRITE_TAC[];\r
2316 REWRITE_TAC[IN_ELIM_THM];\r
2317 ASM_REWRITE_TAC[];\r
2318 EXPAND_TAC "indSet";\r
2319 MATCH_MP_TAC MOD_IN_NUMSEG;\r
2320 FIRST_X_ASSUM ACCEPT_TAC;\r
2321 STRIP_TAC;\r
2322 SUBGOAL_THEN` nn = 3 ` ASSUME_TAC;\r
2323 FIRST_X_ASSUM MP_TAC;\r
2324 REWRITE_TAC[IN_INSERT; NOT_IN_EMPTY];\r
2325 STRIP_TAC;\r
2326 FIRST_X_ASSUM MP_TAC;\r
2327 ASSUME_TAC2 (ARITH_RULE` 0 < i ==> i + 2 = (i - 1) + 3 `);\r
2328 ASM_REWRITE_TAC[];\r
2329 EXPAND_TAC "ia";\r
2330 STRIP_TAC;\r
2331 MP_TAC (ARITH_RULE` ~( 3 = 0) `);\r
2332 UNDISCH_TAC` ~( nn = 0) `;\r
2333 PHA;\r
2334 NHANH MOD_PERIOD_BOUNDED;\r
2335 STRIP_TAC;\r
2336 REWRITE_TAC[ARITH_RULE` a = 3 <=> a <= 3 /\ 3 <= a `];\r
2337 ASM_REWRITE_TAC[];\r
2338 FIRST_X_ASSUM MATCH_MP_TAC;\r
2339 EXISTS_TAC` i - 1 `;\r
2340 ASM_REWRITE_TAC[];\r
2341 \r
2342 DOWN;\r
2343 EXPAND_TAC "ib";\r
2344 ASSUME_TAC (ARITH_RULE` ~( 2 = 0) `);\r
2345 ASSUME_TAC2 (SPECL [` nn: num `;` 2 `] (GEN_ALL MOD_PERIOD_BOUNDED));\r
2346 FIRST_ASSUM NHANH;\r
2347 NHANH (ARITH_RULE` n <= 2 ==> ~( 3 <= n ) `);\r
2348 ASM_REWRITE_TAC[];\r
2349 DOWN;\r
2350 EXPAND_TAC "ic";\r
2351 ASSUME_TAC (ARITH_RULE` ~( 1 = 0) `);\r
2352 ASSUME_TAC2 (SPECL [` nn: num `;` 1 `] (GEN_ALL MOD_PERIOD_BOUNDED));\r
2353 REWRITE_TAC[ARITH_RULE` a + 2 = (a + 1) + 1 `];\r
2354 FIRST_ASSUM NHANH;\r
2355 NHANH (ARITH_RULE` n <= 1 ==> ~( 3 <= n ) `);\r
2356 ASM_REWRITE_TAC[];\r
2357 SUBGOAL_THEN` CARD (indSet:num -> bool) = nn ` MP_TAC;\r
2358 EXPAND_TAC "indSet";\r
2359 REWRITE_TAC[CARD_NUMSEG];\r
2360 UNDISCH_TAC` ~( nn = 0) `;\r
2361 ARITH_TAC;\r
2362 ASM_REWRITE_TAC[];\r
2363 STRIP_TAC;\r
2364 MP_TAC (ISPECL [` {ia, ib, ic:num} `;` indSet:num -> bool `] CARD_SUBSET_EQ);\r
2365 ANTS_TAC;\r
2366 ASM_REWRITE_TAC[];\r
2367 \r
2368 ASM_REWRITE_TAC[cc_size_v11];\r
2369 EXPAND_TAC "indSet";\r
2370 UNDISCH_TAC` nn = 3 `;\r
2371 SIMP_TAC[cc_qy_v11];\r
2372 NHANH (SET_RULE` { i | i IN S /\ p i } = S ==> {i | i IN S /\ ~( p i)} = {} `);\r
2373 SIMP_TAC[CARD_CLAUSES];\r
2374 REPEAT STRIP_TAC;\r
2375 ARITH_TAC;\r
2376 ASM_SEARCH_TCL [` cc_bool_prep_v11 `] MP_TAC;\r
2377 REWRITE_TAC[cc_bool_prep_v11; cc_qy_v11];\r
2378 \r
2379 ASM_SEARCH_TCL [` p ( x MOD n) <=> p x `] (fun x -> ONCE_REWRITE_TAC[GSYM x]) ;\r
2380 DISCH_THEN (ASSUME_TAC2 o (SPEC` (i + 2)`)) ;\r
2381 SUBGOAL_THEN` { ((i - 1) + x) MOD nn | x < 3}  = {ia, ib, ic} ` MP_TAC ;\r
2382 REWRITE_TAC[EXTENSION; IN_ELIM_THM] ;\r
2383 GEN_TAC ;\r
2384 REWRITE_TAC[ARITH_RULE` x < 3 <=> x = 0 \/ x = 1 \/ x = 2 `; IN_ELIM_THM; NOT_IN_EMPTY; IN_INSERT] ;\r
2385 EXPAND_TAC "ia" ;\r
2386 EXPAND_TAC "ib" ;\r
2387 EXPAND_TAC "ic" ;\r
2388 UNDISCH_TAC` 0 < i ` ;\r
2389 NHANH (ARITH_RULE` 0 < i ==> (i - 1 ) + 0 = i - 1 /\ ( i - 1) + 1 = i /\ ( i - 1) + 2 = i + 1 `) ;\r
2390 \r
2391 \r
2392 MESON_TAC[];\r
2393 STRIP_TAC;\r
2394 SUBGOAL_THEN` (i + 3) MOD nn IN {(i - 1 + x) MOD nn | x < 3} ` MP_TAC;\r
2395 ASM_REWRITE_TAC[];\r
2396 ASM_REWRITE_TAC[IN_ELIM_THM];\r
2397 EXPAND_TAC "indSet";\r
2398 CONJ_TAC;\r
2399 MATCH_MP_TAC MOD_IN_NUMSEG;\r
2400 FIRST_X_ASSUM ACCEPT_TAC;\r
2401 DOWN THEN DOWN;\r
2402 ASM_REWRITE_TAC[ARITH_RULE` a + 3 = (a + 2 ) + 1 `];\r
2403 SIMP_TAC[];\r
2404 \r
2405 ASSUME_TAC2 (ARITH_RULE` 0 < i ==> i + 3 = (i -1) + 4 `);\r
2406 FIRST_ASSUM SUBST1_TAC;\r
2407 MP_TAC (ARITH_RULE` 3 <= 4 `);\r
2408 UNDISCH_TAC` ~( nn = 0) `;\r
2409 PHA;\r
2410 NHANH MOD_PERIOD_BOUNDED2;\r
2411 STRIP_TAC;\r
2412 \r
2413 \r
2414 ABBREV_TAC` id = ((i - 1) + 4) MOD nn `;\r
2415 SUBGOAL_THEN` (! x. x IN {ia, ib, ic} ==> cc_4cell_v11 cc x)` ASSUME_TAC;\r
2416 UNDISCH_TAC` cc_4cell_v11 cc ia `;\r
2417 UNDISCH_TAC` cc_4cell_v11 cc ib `;\r
2418 UNDISCH_TAC` cc_4cell_v11 cc ic `;\r
2419 SET_TAC[];\r
2420 \r
2421 SUBGOAL_THEN` ~( ((i + 2) MOD nn) IN {ia, ib, ic})` MP_TAC;\r
2422 UNDISCH_TAC` ~cc_4cell_v11 cc (((i + 2)) MOD nn) `;\r
2423 DOWN;\r
2424 MESON_TAC[];\r
2425 \r
2426 \r
2427 \r
2428 ABBREV_TAC` ie = (i + 2) MOD nn `;\r
2429 STRIP_TAC;\r
2430 MP_TAC (prove(` FINITE {ia, ib, ic:num}`, REWRITE_TAC[Geomdetail.FINITE6]));\r
2431 NHANH (ISPEC`ie: num ` CARD_INSERT);\r
2432 ABBREV_TAC` cells = {i | i IN indSet /\ cc_4cell_v11 cc i} `;\r
2433 ASM_REWRITE_TAC[ADD1];\r
2434 STRIP_TAC;\r
2435 SUBGOAL_THEN` CARD (indSet:num -> bool) = nn ` ASSUME_TAC;\r
2436 EXPAND_TAC "indSet";\r
2437 REWRITE_TAC[CARD_NUMSEG];\r
2438 MATCH_MP_TAC (ARITH_RULE` ~(nn = 0) ==> (nn - 1 + 1) - 0 = nn `);\r
2439 FIRST_X_ASSUM ACCEPT_TAC;\r
2440 SUBGOAL_THEN` {ie, ia, ib, ic:num } SUBSET indSet ` MP_TAC;\r
2441 ONCE_REWRITE_TAC[INSERT_SUBSET];\r
2442 ASM_REWRITE_TAC[];\r
2443 EXPAND_TAC "ie";\r
2444 EXPAND_TAC "indSet";\r
2445 MATCH_MP_TAC MOD_IN_NUMSEG;\r
2446 FIRST_ASSUM ACCEPT_TAC;\r
2447 STRIP_TAC;\r
2448 SUBGOAL_THEN` {ie, ia, ib, ic:num} = indSet` MP_TAC;\r
2449 MATCH_MP_TAC CARD_SUBSET_EQ;\r
2450 ASM_REWRITE_TAC[];\r
2451 SUBGOAL_THEN` CARD ((ie:num) INSERT cells) <= CARD (indSet:num -> bool) ` MP_TAC;\r
2452 MATCH_MP_TAC CARD_SUBSET;\r
2453 DOWN;\r
2454 ASM_SIMP_TAC[];\r
2455 \r
2456 \r
2457 ASM_REWRITE_TAC[];\r
2458 UNDISCH_TAC` nn <= 4 `;\r
2459 ARITH_TAC;\r
2460 \r
2461 ASM_REWRITE_TAC[cc_size_v11; cc_qy_v11];\r
2462 STRIP_TAC;\r
2463 ASSUME_TAC2 (\r
2464 SET_RULE` cc_4cell_v11 cc ia /\ cc_4cell_v11 cc ib /\ cc_4cell_v11 cc ic /\\r
2465 {ia, ib, ic} = cells /\ ~cc_4cell_v11 cc ie /\ ie INSERT cells = indSet\r
2466 ==> {i | i IN indSet /\ ~cc_4cell_v11 cc i} = {ie} `);\r
2467 ASM_REWRITE_TAC[];\r
2468 REWRITE_TAC[LE_REFL; Geomdetail.CARD_SING];\r
2469 ASM_CASES_TAC` cc_size_v11 cc (cc_qy_v11 cc) <= 1 `;\r
2470 FIRST_X_ASSUM ACCEPT_TAC;\r
2471 \r
2472 DOWN;\r
2473 REWRITE_TAC[ARITH_RULE` ~( x <= 1) <=> 2 <= x `; cc_size_v11];\r
2474 ASM_REWRITE_TAC[];\r
2475 ABBREV_TAC` qyset = {i | i IN indSet /\ cc_qy_v11 cc i} `;\r
2476 SUBGOAL_THEN` qyset SUBSET (indSet:num -> bool) ` MP_TAC;\r
2477 EXPAND_TAC "qyset";\r
2478 SET_TAC[];\r
2479 STRIP_TAC;\r
2480 SUBGOAL_THEN` FINITE (indSet:num -> bool) ` ASSUME_TAC;\r
2481 EXPAND_TAC "indSet";\r
2482 REWRITE_TAC[FINITE_NUMSEG];\r
2483 SUBGOAL_THEN` FINITE (qyset:num -> bool) ` ASSUME_TAC;\r
2484 MATCH_MP_TAC FINITE_SUBSET;\r
2485 EXISTS_TAC` indSet:num -> bool `;\r
2486 ASM_REWRITE_TAC[];\r
2487 DOWN;\r
2488 NHANH CHOOSE_SUBSET;\r
2489 STRIP_TAC;\r
2490 FIRST_X_ASSUM NHANH;\r
2491 REWRITE_TAC[HAS_SIZE_2_EXISTS; \r
2492 SET_RULE` (!z. z IN t <=> z = x \/ z = y) <=> {x,y} = t  `];\r
2493 STRIP_TAC;\r
2494 UNDISCH_TAC` ~(cc_size_v11 cc (cc_4cell_v11 cc) = 3) `;\r
2495 ASM_REWRITE_TAC[];\r
2496 STRIP_TAC;\r
2497 ASSUME_TAC2 (ARITH_RULE` 3 <= sz /\ ~( sz = 3) /\ sz <= 4 ==> sz = 4 `);\r
2498 DOWN;\r
2499 EXPAND_TAC "sz";\r
2500 REWRITE_TAC[cc_size_v11];\r
2501 ASM_REWRITE_TAC[];\r
2502 ABBREV_TAC` cells = {i | i IN indSet /\ cc_4cell_v11 cc i}`;\r
2503 STRIP_TAC;\r
2504 \r
2505 SUBGOAL_THEN` indSet = qyset UNION cells /\ DISJOINT qyset (cells: num -> bool)` MP_TAC;\r
2506 EXPAND_TAC "qyset";\r
2507 EXPAND_TAC "cells";\r
2508 REWRITE_TAC[cc_qy_v11];\r
2509 SET_TAC[];\r
2510 STRIP_TAC;\r
2511 MP_TAC (SET_RULE` {i | i IN indSet /\ cc_4cell_v11 cc i} SUBSET indSet`);\r
2512 SWITCH_TAC` indSet = qyset UNION (cells: num -> bool) `;\r
2513 ASM_REWRITE_TAC[];\r
2514 UNDISCH_TAC` FINITE (indSet:num -> bool)`;\r
2515 PHA;\r
2516 NHANH (FINITE_SUBSET);\r
2517 STRIP_TAC;\r
2518 REPLICATE_TAC 27 DOWN;\r
2519 PHA;\r
2520 ASM_SEARCH_TCL [` cc_real_model_v11 `] MP_TAC;\r
2521 ASM_SEARCH_TCL [` cc_bool_model_v11 `] MP_TAC;\r
2522 REWRITE_TAC[cc_real_model_v11; cc_bool_model_v11];\r
2523 REPEAT STRIP_TAC;\r
2524 \r
2525 SUBGOAL_THEN` &0 <= sum indSet (cc_gg_v11 cc) ` MP_TAC;\r
2526 EXPAND_TAC "indSet";\r
2527 SUBGOAL_THEN` sum (qyset UNION cells) (cc_gg_v11 cc) = sum qyset (cc_gg_v11 cc) + sum cells (cc_gg_v11 cc) ` SUBST1_TAC;\r
2528 MATCH_MP_TAC SUM_UNION;\r
2529 ASM_REWRITE_TAC[];\r
2530 SUBGOAL_THEN` ! j. cc_qy_v11 cc j ==> &0 <= cc_gg_v11 cc j ` ASSUME_TAC;\r
2531 REPEAT STRIP_TAC;\r
2532 MATCH_MP_TAC QY_NN0;\r
2533 ASM_REWRITE_TAC[];\r
2534 \r
2535 SUBGOAL_THEN` sum t (cc_gg_v11 cc) <= sum qyset (cc_gg_v11 cc)` ASSUME_TAC;\r
2536 MATCH_MP_TAC SUM_SUBSET_SIMPLE;\r
2537 ASM_REWRITE_TAC[];\r
2538 EXPAND_TAC "qyset";\r
2539 REWRITE_TAC[IN_DIFF; IN_ELIM_THM];\r
2540 FIRST_ASSUM NHANH;\r
2541 \r
2542 \r
2543 SIMP_TAC[];\r
2544 SUBGOAL_THEN` &2 * #0.606 * #0.008 <= sum qyset (cc_gg_v11 cc) ` ASSUME_TAC;\r
2545 MATCH_MP_TAC REAL_LE_TRANS;\r
2546 EXISTS_TAC` sum t (cc_gg_v11 cc) `;\r
2547 ASM_REWRITE_TAC[];\r
2548 EXPAND_TAC "t";\r
2549 SUBGOAL_THEN` sum {x, y} (cc_gg_v11 cc) = cc_gg_v11 cc x + cc_gg_v11 cc y ` SUBST1_TAC;\r
2550 MATCH_MP_TAC Geomdetail.SUM_DIS2;\r
2551 ASM_REWRITE_TAC[];\r
2552 SUBGOAL_THEN` cc_qy_v11 cc x /\ cc_qy_v11 cc y ` MP_TAC;\r
2553 UNDISCH_TAC` t SUBSET (qyset: num -> bool) ` ;\r
2554 EXPAND_TAC "t";\r
2555 EXPAND_TAC "qyset";\r
2556 SET_TAC[];\r
2557 STRIP_TAC;\r
2558 ASM_SEARCH_TCL [`#0.008 `] (ASSUME_TAC2 o (SPEC` x:num `));\r
2559 DOWN;\r
2560 ASM_SEARCH_TCL [`#0.008 `] (ASSUME_TAC2 o (SPEC` y:num `));\r
2561 DOWN;\r
2562 ASM_SEARCH_TCL [`#0.606`] (MP_TAC o (SPEC` x:num `));\r
2563 ASM_SEARCH_TCL [`#0.606`] (MP_TAC o (SPEC` y:num `));\r
2564 REAL_ARITH_TAC;\r
2565 \r
2566 \r
2567 SUBGOAL_THEN` ! i. i IN cells ==> a_spine5 + b_spine5 * cc_azim_v11 cc i <= cc_gg_v11 cc i` ASSUME_TAC;\r
2568 EXPAND_TAC "cells";\r
2569 REWRITE_TAC[IN_ELIM_THM];\r
2570 ASM_SEARCH_TCL [` cc_4cell_v11 cc i ==> a_spine5 + b_spine5 * cc_azim_v11 cc i <= cc_gg_v11 cc i`] NHANH;\r
2571 SIMP_TAC[];\r
2572 SUBGOAL_THEN` sum cells (\i. (\j. a_spine5) i + b_spine5 * cc_azim_v11 cc i) <= sum cells (cc_gg_v11 cc)` MP_TAC;\r
2573 MATCH_MP_TAC SUM_LE;\r
2574 ASM_REWRITE_TAC[];\r
2575 \r
2576 ASM_SIMP_TAC[SUM_ADD; SUM_CONST; SUM_LMUL];\r
2577 REWRITE_TAC[ISPECL [` cells:num -> bool `; `cc_azim_v11 cc `] (GEN_ALL SUM_BETA)];\r
2578 STRIP_TAC;\r
2579 SUBGOAL_THEN` ! f. sum (indSet:num -> bool) f = sum cells f + sum qyset f ` ASSUME_TAC;\r
2580 GEN_TAC;\r
2581 EXPAND_TAC "indSet";\r
2582 ONCE_REWRITE_TAC[REAL_ADD_SYM];\r
2583 MATCH_MP_TAC SUM_UNION;\r
2584 ASM_REWRITE_TAC[];\r
2585 ASM_SEARCH_TCL [` x = &2 * pi`] MP_TAC;\r
2586 ASM_SEARCH_TCL [` 0..m = t `] MP_TAC;\r
2587 SIMP_TAC[];\r
2588 ASM_REWRITE_TAC[];\r
2589 \r
2590 STRIP_TAC;\r
2591 SUBGOAL_THEN` sum (qyset DIFF t) (cc_azim_v11 cc) = sum qyset (cc_azim_v11 cc) - sum t (cc_azim_v11 cc) ` ASSUME_TAC;\r
2592 MATCH_MP_TAC SUM_DIFF;\r
2593 ASM_REWRITE_TAC[];\r
2594 DOWN;\r
2595 EXPAND_TAC "t";\r
2596 UNDISCH_TAC` ~( x = (y:num)) `;\r
2597 SIMP_TAC[Geomdetail.SUM_DIS2];\r
2598 STRIP_TAC;\r
2599 SUBGOAL_THEN` !s. FINITE s ==> &0 <= sum s (cc_azim_v11 cc) ` ASSUME_TAC;\r
2600 GEN_TAC;\r
2601 STRIP_TAC;\r
2602 MATCH_MP_TAC SUM_POS_LE;\r
2603 ASM_REWRITE_TAC[];\r
2604 REPEAT STRIP_TAC;\r
2605 ASM_SEARCH_TCL [` #0.606 <= x `] (MP_TAC o (SPEC` x':num `));\r
2606 REAL_ARITH_TAC;\r
2607 FIRST_ASSUM (MP_TAC o (SPEC` qyset DIFF {x, y:num}`));\r
2608 ANTS_TAC;\r
2609 MATCH_MP_TAC FINITE_DIFF;\r
2610 ASM_REWRITE_TAC[];\r
2611 PHA;\r
2612 NHANH (REAL_ARITH` &0 <= x /\ x = y - z ==> z <= y `);\r
2613 STRIP_TAC;\r
2614 SUBGOAL_THEN` &2 * #0.606 <= sum qyset (cc_azim_v11 cc) ` MP_TAC;\r
2615 MATCH_MP_TAC REAL_LE_TRANS;\r
2616 EXISTS_TAC` cc_azim_v11 cc x + cc_azim_v11 cc y `;\r
2617 ASM_REWRITE_TAC[];\r
2618 ASM_SEARCH_TCL [` #0.606 <= x `] (MP_TAC o (SPEC` x:num `));\r
2619 ASM_SEARCH_TCL [` #0.606 <= x `] (MP_TAC o (SPEC` y:num `));\r
2620 REAL_ARITH_TAC;\r
2621 STRIP_TAC;\r
2622 MATCH_MP_TAC REAL_LE_TRANS;\r
2623 EXISTS_TAC` &2 * #0.606 * #0.008 + ( &4 * a_spine5 + b_spine5 * sum cells (cc_azim_v11 cc)) ` ;\r
2624 ONCE_REWRITE_TAC[TAUT` a /\ b <=> b /\ a `];\r
2625 CONJ_TAC;\r
2626 MATCH_MP_TAC REAL_LE_ADD2;\r
2627 ASM_REWRITE_TAC[];\r
2628 \r
2629 ASM_REWRITE_TAC[Sphere.a_spine5; Sphere.b_spine5];\r
2630 UNDISCH_TAC` sum cells (cc_azim_v11 cc) + sum qyset (cc_azim_v11 cc) = &2 * pi `;\r
2631 SIMP_TAC[REAL_ARITH` a + b = c <=> a = c - b `];\r
2632 STRIP_TAC;\r
2633 UNDISCH_TAC` &2 * #0.606 <= sum qyset (cc_azim_v11 cc) `;\r
2634 MP_TAC (prove(` pi < #3.1416 `, REWRITE_TAC[ Flyspeck_constants.bounds]));\r
2635 REAL_ARITH_TAC;\r
2636 UNDISCH_TAC` sum indSet (cc_gg_v11 cc) < &0 `;\r
2637 REAL_ARITH_TAC]);;\r
2638 \r
2639 \r
2640 \r
2641 \r
2642 let CC_QU_SMALL_SITUATION = prove_by_refinement(` cc_bool_model_v11 cc /\ cc_real_model_v11 cc\r
2643 ==> !i. cc_qu_v11 cc i /\ \r
2644    (~cc_small_v11 cc (i + 1) \/ ~cc_small_v11 cc (i))\r
2645     ==> cc_eps <= cc_gg_v11 cc i `,\r
2646 [REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];\r
2647 STRIP_TAC;\r
2648 ASM_SEARCH_TCL [` x ==> cc_small_v11 cc i`] MP_TAC;\r
2649 UNDISCH_TAC ` !i. cc_qu_v11 cc i /\ ~cc_small_eta_v11 cc i\r
2650           ==> cc_eps <= cc_gg_v11 cc i`;\r
2651 UNDISCH_TAC`!i. cc_qu_v11 cc i /\ ~cc_small_eta_v11 cc (i + 1)\r
2652           ==> cc_eps <= cc_gg_v11 cc i`;\r
2653 MESON_TAC[]]);;\r
2654 \r
2655 \r
2656 \r
2657 \r
2658 let CC_4CELL_QUQX = prove(` cc_4cell_v11 cc i <=> cc_qu_v11 cc i \/ cc_qx_v11 cc i `,\r
2659 REWRITE_TAC[cc_qx_v11; cc_qu_v11] THEN CONV_TAC TAUT);;\r
2660 \r
2661 \r
2662 \r
2663 let QX_NN00 = prove(`  cc_bool_model_v11 cc /\ cc_real_model_v11 cc ==> (! i. cc_qx_v11 cc i\r
2664            ==> &0 <= cc_gg_v11 cc i) `,\r
2665 REPEAT STRIP_TAC THEN ASM_SIMP_TAC[QX_NN0]);;\r
2666 \r
2667 \r
2668 let QY_NN00 = prove(`  cc_bool_model_v11 cc /\ cc_real_model_v11 cc ==> (! i. cc_qy_v11 cc i\r
2669            ==> &0 <= cc_gg_v11 cc i) `,\r
2670 REPEAT STRIP_TAC THEN ASM_SIMP_TAC[QY_NN0]);;\r
2671 \r
2672 \r
2673 \r
2674 \r
2675 let NUMSEG_SET_VER = prove(` 0..m = { i | i <= m } `,\r
2676 REWRITE_TAC[numseg] THEN \r
2677 MP_TAC (ARITH_RULE`! x. (0 <= x /\ x <= m  <=> x <= m)`) THEN \r
2678 SET_TAC[]);;\r
2679 \r
2680 \r
2681 let FINITE_INITIAL_SEG = REWRITE_RULE[NUMSEG_SET_VER] (SPEC `0` FINITE_NUMSEG);;\r
2682 \r
2683 \r
2684 let FINITE_INITIAL_SEG2 = prove(` FINITE {i | i < (n:num)} `,\r
2685 MATCH_MP_TAC (ISPECL [` {i | i < n:num } `;` {i | i <= (n:num) }`] FINITE_SUBSET)\r
2686 THEN REWRITE_TAC[FINITE_INITIAL_SEG; SUBSET; IN_ELIM_THM; LT_IMP_LE]);;\r
2687 \r
2688 \r
2689 \r
2690 \r
2691 let CARD_MOD_NUMSEG = prove_by_refinement(\r
2692 ` !m. m <= n ==> CARD {(i + k) MOD n | k | k < m} = m `,\r
2693 \r
2694 [INDUCT_TAC;\r
2695 STRIP_TAC;\r
2696 MP_TAC (ARITH_RULE`(!x. ~( x < 0))`);\r
2697 SIMP_TAC[SET_RULE` (!x. ~(x < 0)) ==> {(i + k) MOD n | k < 0} = {} `; CARD_EMPTY];\r
2698 NHANH (ARITH_RULE` SUC m <= n ==> m <= n `);\r
2699 FIRST_X_ASSUM NHANH;\r
2700 REWRITE_TAC[ARITH_RULE` k < SUC m <=> k < m \/ k = m `];\r
2701 REWRITE_TAC[SET_RULE` {(i + k) MOD n | k < m \/ k = m} = (i + m) MOD n INSERT {(i + k) MOD n | k < m }`];\r
2702 STRIP_TAC;\r
2703 SUBGOAL_THEN` ~( (i + m) MOD n IN {(i + k) MOD n | k < m})` ASSUME_TAC;\r
2704 \r
2705 REWRITE_TAC[IN_ELIM_THM];\r
2706 STRIP_TAC;\r
2707 MP_TAC (let tt = GEN_ALL MOD_INJ1 in\r
2708 SPECL [` m - (k: num) `;` n: num `] tt);\r
2709 ANTS_TAC; ASM_ARITH_TAC;\r
2710 DISCH_THEN (ASSUME_TAC o (SPEC` i + (k:num) `));\r
2711 DOWN;\r
2712 ASSUME_TAC2 (ARITH_RULE` k < (m:num) ==> (i + k) + m - k = i + m `);\r
2713 ASM_REWRITE_TAC[];\r
2714 MP_TAC (ISPECL [`\k. ( i + k) MOD n `; `{ k  | k < m:num} `] FINITE_IMAGE);\r
2715 ANTS_TAC;\r
2716 REWRITE_TAC[ FINITE_INITIAL_SEG2; IMAGE; IN_ELIM_THM];\r
2717 REWRITE_TAC[ IMAGE; IN_ELIM_THM];\r
2718 \r
2719 ASM_REWRITE_TAC[SET_RULE` {y | ?x. x < m /\ y = (i + x) MOD n} = {(i + k) MOD n | k < m} `];\r
2720 \r
2721 NHANH (ISPEC ` (i + m) MOD n ` CARD_INSERT);\r
2722 ASM_REWRITE_TAC[];\r
2723 SIMP_TAC[]]);;\r
2724 \r
2725 \r
2726 \r
2727 \r
2728 let MOD_NUMSEG = prove_by_refinement(` ~( n = 0 ) ==> (! i. 0..(n - 1) = {(i + k) MOD n | k | k < n })`,\r
2729 [STRIP_TAC;\r
2730 GEN_TAC;\r
2731 SUBGOAL_THEN` {(i + k) MOD n | k | k < n} SUBSET 0..(n - 1) ` ASSUME_TAC;\r
2732 REWRITE_TAC[SUBSET];\r
2733 GEN_TAC;\r
2734 REWRITE_TAC[IN_ELIM_THM];\r
2735 STRIP_TAC;\r
2736 ASM_REWRITE_TAC[];\r
2737 ASM_SIMP_TAC[MOD_IN_NUMSEG];\r
2738 MP_TAC (REWRITE_RULE[LE_REFL] (SPEC`n:num ` CARD_MOD_NUMSEG));\r
2739 STRIP_TAC;\r
2740 MATCH_MP_TAC (GSYM CARD_SUBSET_EQ);\r
2741 ASM_REWRITE_TAC[FINITE_NUMSEG; CARD_NUMSEG];\r
2742 UNDISCH_TAC` ~( n = 0) `;\r
2743 ARITH_TAC]);;\r
2744 \r
2745 \r
2746 \r
2747 \r
2748 \r
2749 (*  IPVICGW_concl;;  *)\r
2750 \r
2751 \r
2752 \r
2753 let IPVICGW_C33 = prove_by_refinement(`! cc. (cc_bool_model_v11 cc /\\r
2754        cc_bool_prep_v11 cc /\\r
2755        cc_real_model_v11 cc /\\r
2756        sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0) /\\r
2757       cc_card_v11 cc = 3 \r
2758 ==> (!i. cc_small_v11 cc i) `,\r
2759 \r
2760 [NHANH LXDEYBO;\r
2761 NHANH CHQSQEY;\r
2762 REWRITE_TAC[cc_size_v11];\r
2763 GEN_TAC; STRIP_TAC THEN ASSUME_TAC2 QY_NN00 THEN ASSUME_TAC2 QX_NN00; DOWN_TAC;\r
2764 ABBREV_TAC` cells = {i | i IN 0..cc_card_v11 cc - 1 /\ cc_4cell_v11 cc i} `;\r
2765 ABBREV_TAC` nn = cc_card_v11 cc `;\r
2766 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11; cc_bool_prep_v11];\r
2767 STRIP_TAC;\r
2768 SUBGOAL_THEN` cells SUBSET 0..nn - 1 ` ASSUME_TAC;\r
2769 EXPAND_TAC "cells";\r
2770 SET_TAC[];\r
2771 ASSUME_TAC (SPECL [` 0`;` nn - 1 `] FINITE_NUMSEG);\r
2772 MP_TAC (SPECL [` 0`;` nn - 1 `] CARD_NUMSEG);\r
2773 ASM_SIMP_TAC[ARITH_RULE`(3 - 1 + 1) - 0 = 3 `];\r
2774 ASSUME_TAC2 (ISPECL [` cells:num -> bool `;` 0.. nn - 1 `] CARD_SUBSET);\r
2775 REPLICATE_TAC 3 DOWN THEN PHA;\r
2776 ASM_REWRITE_TAC[];\r
2777 ASM_SIMP_TAC[ARITH_RULE` 3 <= x ==> ( x <= y /\ y = 3 <=> x = 3 /\ y = 3) `];\r
2778 STRIP_TAC;\r
2779 SUBGOAL_THEN` 0..3 - 1 = cells ` MP_TAC;\r
2780 MATCH_MP_TAC (GSYM CARD_SUBSET_EQ);\r
2781 ASM_REWRITE_TAC[];\r
2782 STRIP_TAC;\r
2783 GEN_TAC;\r
2784 ASM_CASES_TAC` ! i. i IN cells ==> cc_qy_v11 cc i `;\r
2785 SUBGOAL_THEN` ! i. i IN cells ==> &0 <= cc_gg_v11 cc i ` ASSUME_TAC;\r
2786 REPEAT STRIP_TAC;\r
2787 ASM_SEARCH_TCL [` !i. cc_qy_v11 cc i ==> &0 <= cc_gg_v11 cc i `] MATCH_MP_TAC;\r
2788 FIRST_X_ASSUM MATCH_MP_TAC;\r
2789 FIRST_ASSUM ACCEPT_TAC;\r
2790 SUBGOAL_THEN` &0 <= sum cells (cc_gg_v11 cc) ` ASSUME_TAC;\r
2791 MATCH_MP_TAC SUM_POS_LE;\r
2792 ASM_REWRITE_TAC[];\r
2793 EXPAND_TAC "cells";\r
2794 FIRST_X_ASSUM ACCEPT_TAC;\r
2795 UNDISCH_TAC` sum (0..nn - 1) (cc_gg_v11 cc) < &0 `;\r
2796 DOWN;\r
2797 ASM_REWRITE_TAC[];\r
2798 REAL_ARITH_TAC;\r
2799 \r
2800 ASM_CASES_TAC` (!i. i IN cells ==> cc_qx_v11 cc i) `;\r
2801 SUBGOAL_THEN` (!i. i IN cells ==> &0 <= cc_gg_v11 cc i)` MP_TAC;\r
2802 GEN_TAC THEN STRIP_TAC;\r
2803 ASM_SEARCH_TCL [` (!i. cc_qx_v11 cc i ==> &0 <= cc_gg_v11 cc i) `] MATCH_MP_TAC;\r
2804 FIRST_ASSUM MATCH_MP_TAC;\r
2805 FIRST_X_ASSUM ACCEPT_TAC;\r
2806 UNDISCH_TAC` FINITE (0..3 - 1 ) `;\r
2807 PHA;\r
2808 ASM_REWRITE_TAC[];\r
2809 NHANH SUM_POS_LE;\r
2810 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `];\r
2811 STRIP_TAC;\r
2812 UNDISCH_TAC` sum (0..nn - 1) (cc_gg_v11 cc) < &0 `;\r
2813 ASM_REWRITE_TAC[];\r
2814 DOWN;\r
2815 REWRITE_TAC[ISPECL [`cells: num -> bool `;` cc_gg_v11 cc `] (GEN_ALL SUM_BETA)];\r
2816 SIMP_TAC[];\r
2817 DOWN;\r
2818 REWRITE_TAC[MESON[]` ~(! x. P x ==> q x) <=> (? x. P x /\ ~( q x)) `];\r
2819 STRIP_TAC;\r
2820 SUBGOAL_THEN` cc_4cell_v11 cc i' ` MP_TAC;\r
2821 REPLICATE_TAC 2 DOWN THEN PHA;\r
2822 \r
2823 UNDISCH_TAC` {i | i IN 0..nn - 1 /\ cc_4cell_v11 cc i} = cells `;\r
2824 DISCH_THEN (SUBST1_TAC o GSYM);\r
2825 \r
2826 SIMP_TAC[IN_ELIM_THM];\r
2827 ASM_REWRITE_TAC[CC_4CELL_QUQX];\r
2828 ASM_SEARCH_TCL [` !i. cc_qu_v11 cc i ==> --cc_eps <= cc_gg_v11 cc i `] NHANH;\r
2829 REWRITE_TAC[cc_qu_v11; cc_hassmall_v11];\r
2830 STRIP_TAC;\r
2831 ASM_CASES_TAC` cc_small_v11 cc (i' + 2) `;\r
2832 UNDISCH_TAC` ~( cc_card_v11 cc = 0) `;\r
2833 ASM_REWRITE_TAC[];\r
2834 NHANH MOD_NUMSEG;\r
2835 ASM_REWRITE_TAC[];\r
2836 STRIP_TAC;\r
2837 FIRST_X_ASSUM (ASSUME_TAC o (SPEC` i': num `));\r
2838 SUBGOAL_THEN` ! j. j IN cells ==> cc_small_v11 cc j ` ASSUME_TAC;\r
2839 ASM_REWRITE_TAC[IN_ELIM_THM];\r
2840 REPEAT STRIP_TAC;\r
2841 ASM_REWRITE_TAC[];\r
2842 UNDISCH_TAC` ~( 3 = 0) `;\r
2843 UNDISCH_TAC ` periodic (cc_small_v11 cc) (cc_card_v11 cc) `;\r
2844 ASM_REWRITE_TAC[];\r
2845 PHA;\r
2846 SIMP_TAC[GSYM Oxl_def.periodic_mod];\r
2847 REPLICATE_TAC 9 DOWN;\r
2848 REWRITE_TAC[ARITH_RULE` k < 3 <=> k = 0 \/ k = 1 \/ k = 2 `];\r
2849 MESON_TAC[ADD_0];\r
2850 \r
2851 UNDISCH_TAC` ~( 3 = 0) `;\r
2852 UNDISCH_TAC ` periodic (cc_small_v11 cc) (cc_card_v11 cc) `;\r
2853 ASM_REWRITE_TAC[];\r
2854 PHA;\r
2855 NHANH ( GEN_ALL (\r
2856 SPEC` i:num` (GEN`m:num ` (SPEC_ALL Oxl_def.periodic_mod))));\r
2857 SIMP_TAC[];\r
2858 STRIP_TAC;\r
2859 FIRST_X_ASSUM MATCH_MP_TAC;\r
2860 EXPAND_TAC "cells";\r
2861 MATCH_MP_TAC MOD_IN_NUMSEG;\r
2862 ASM_REWRITE_TAC[];\r
2863 \r
2864 \r
2865 SUBGOAL_THEN` ~(cc_qu_v11 cc (i' + 1)) /\ ~(cc_qu_v11 cc (i' + 2)) ` MP_TAC;\r
2866 ASM_REWRITE_TAC[cc_qu_v11; cc_hassmall_v11; ARITH_RULE` (x + 1) + 1 = x + 2 `];\r
2867 STRIP_TAC;\r
2868 SUBGOAL_THEN`! i. cc_4cell_v11 cc i ` ASSUME_TAC;\r
2869 GEN_TAC;\r
2870 UNDISCH_TAC` ~( cc_card_v11 cc = 0) `;\r
2871 UNDISCH_TAC ` periodic (cc_4cell_v11 cc) (cc_card_v11 cc) `;\r
2872 ASM_REWRITE_TAC[];\r
2873 PHA;\r
2874 NHANH ( GEN_ALL (\r
2875 SPEC` i:num` (GEN`m:num ` (SPEC_ALL Oxl_def.periodic_mod))));\r
2876 SIMP_TAC[];\r
2877 STRIP_TAC;\r
2878 SUBGOAL_THEN` i MOD 3 IN cells ` MP_TAC;\r
2879 EXPAND_TAC "cells";\r
2880 MATCH_MP_TAC MOD_IN_NUMSEG;\r
2881 ARITH_TAC;\r
2882 ASM_SEARCH_TCL [` {i | i IN 0..nn - 1 /\ cc_4cell_v11 cc i} = cells `] (SUBST1_TAC o SYM);\r
2883 SET_TAC[];\r
2884 FIRST_ASSUM (MP_TAC o (SPEC` i' + 1 `));\r
2885 FIRST_ASSUM (MP_TAC o (SPEC` i' + 2 `));\r
2886 DOWN;\r
2887 ASM_REWRITE_TAC[CC_4CELL_QUQX];\r
2888 \r
2889 REWRITE_TAC[GSYM CC_4CELL_QUQX];\r
2890 REPEAT STRIP_TAC;\r
2891 SUBGOAL_THEN` cc_eps <= cc_gg_v11 cc (i' + 1 ) ` ASSUME_TAC;\r
2892 ASM_SEARCH_TCL [` !i. cc_qx_v11 cc i /\ cc_small_v11 cc i /\ ~cc_small_v11 cc (i + 1)\r
2893        ==> cc_eps <= cc_gg_v11 cc i`] MATCH_MP_TAC;\r
2894 ASM_REWRITE_TAC[ARITH_RULE` (i + 1) + 1 = i + 2 `];\r
2895 SUBGOAL_THEN` cc_qu_v11 cc i' ` MP_TAC;\r
2896 ASM_REWRITE_TAC[cc_qu_v11; cc_hassmall_v11];\r
2897 ASM_SEARCH_TCL [`!i. cc_qu_v11 cc i ==> --cc_eps <= cc_gg_v11 cc i`] NHANH;\r
2898 ASM_SEARCH_TCL [` cc_qx_v11 cc i ==> &0 <= r`] (ASSUME_TAC2 o (SPEC` i' + 2 `));\r
2899 STRIP_TAC;\r
2900 SUBGOAL_THEN` &0 <= sum (i'.. i' + 2) (cc_gg_v11 cc) ` ASSUME_TAC;\r
2901 MP_TAC (ARITH_RULE` i' <= i' + 2 `);\r
2902 SIMP_TAC[SUM_CLAUSES_LEFT];\r
2903 STRIP_TAC;\r
2904 MP_TAC (ARITH_RULE` i' + 1 <= i' + 2 `);\r
2905 SIMP_TAC[SUM_CLAUSES_LEFT; ARITH_RULE` (i + 1) + 1 = i + 2`; SUM_SING_NUMSEG];\r
2906 STRIP_TAC;\r
2907 \r
2908 UNDISCH_TAC` --cc_eps <= cc_gg_v11 cc i' `;\r
2909 UNDISCH_TAC` cc_eps <= cc_gg_v11 cc (i' + 1) `;\r
2910 UNDISCH_TAC` &0 <= cc_gg_v11 cc (i' + 2) `;\r
2911 PHA;\r
2912 REAL_ARITH_TAC;\r
2913 \r
2914 UNDISCH_TAC` ~( cc_card_v11 cc = 0) `;\r
2915 ASM_SEARCH_TCL [` periodic (cc_gg_v11 cc) `] MP_TAC;\r
2916 PHA;\r
2917 NHANH Oxl_def.periodic_sum;\r
2918 ASM_REWRITE_TAC[];\r
2919 STRIP_TAC;\r
2920 FIRST_X_ASSUM (MP_TAC o (SPEC` i':num `));\r
2921 REWRITE_TAC[ARITH_RULE` 3 - 1 + i = i + 2 `];\r
2922 DISCH_THEN (ASSUME_TAC o SYM);\r
2923 UNDISCH_TAC` sum (0.. nn - 1 ) (cc_gg_v11 cc) < &0 `;\r
2924 ASM_REWRITE_TAC[REAL_ARITH` a < &0 <=> ~( &0 <= a) `]]);;\r
2925 \r
2926 \r
2927 \r
2928 \r
2929 \r
2930 \r
2931 \r
2932 let UNIQUE_QY = prove_by_refinement\r
2933 (` !cc. cc_bool_model_v11 cc /\\r
2934           cc_bool_prep_v11 cc /\\r
2935           cc_real_model_v11 cc /\\r
2936           sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0\r
2937           ==> (! j. cc_qy_v11 cc j /\ j IN 0..cc_card_v11 cc - 1  ==> \r
2938           (! k. ~( k = j) /\ k IN 0..cc_card_v11 cc - 1 \r
2939              ==> ~(cc_qy_v11 cc k))) `,\r
2940 [NHANH UNPNFVW;\r
2941 REWRITE_TAC[cc_size_v11];\r
2942 REPEAT STRIP_TAC;\r
2943 ABBREV_TAC ` qys = {i | i IN 0..cc_card_v11 cc - 1 /\ cc_qy_v11 cc i} `;\r
2944 SUBGOAL_THEN` {j,k} SUBSET (qys: num -> bool) ` ASSUME_TAC;\r
2945 EXPAND_TAC "qys";\r
2946 REWRITE_TAC[SUBSET; EMPTY_SUBSET; IN_ELIM_THM; IN_INSERT; NOT_IN_EMPTY];\r
2947 REPLICATE_TAC 6 DOWN THEN PHA;\r
2948 MESON_TAC[];\r
2949 ASSUME_TAC (SPECL [` 0`;` cc_card_v11 cc - 1 `] FINITE_NUMSEG);\r
2950 SUBGOAL_THEN` FINITE (qys: num -> bool) ` ASSUME_TAC;\r
2951 MATCH_MP_TAC FINITE_SUBSET;\r
2952 EXISTS_TAC` 0..cc_card_v11 cc - 1 `;\r
2953 ASM_REWRITE_TAC[];\r
2954 EXPAND_TAC "qys";\r
2955 SET_TAC[];\r
2956 SUBGOAL_THEN` CARD {j:num, k} <= CARD (qys:num -> bool) ` MP_TAC;\r
2957 MATCH_MP_TAC CARD_SUBSET;\r
2958 ASM_REWRITE_TAC[];\r
2959 STRIP_TAC;\r
2960 UNDISCH_TAC` ~( k = (j:num)) `;\r
2961 REWRITE_TAC[];\r
2962 \r
2963 ASM_CASES_TAC` k = (j:num) `;\r
2964 FIRST_X_ASSUM ACCEPT_TAC;\r
2965 DOWN;\r
2966 REWRITE_TAC[GSYM Geomdetail.CARD2];\r
2967 DOWN;\r
2968 REWRITE_TAC[INSERT_COMM];\r
2969 PHA;\r
2970 NHANH (ARITH_RULE` a <= b /\ a = 2 ==> ~( b <= 1 )`);\r
2971 ASM_REWRITE_TAC[]]);;\r
2972 \r
2973 \r
2974 \r
2975 let UNIQUE_QY2 = prove(`!cc. cc_bool_model_v11 cc /\\r
2976           cc_bool_prep_v11 cc /\\r
2977           cc_real_model_v11 cc /\\r
2978           sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0\r
2979           ==> (! j. cc_qy_v11 cc j /\ j IN 0..cc_card_v11 cc - 1  ==> \r
2980           (! k. cc_qy_v11 cc k/\ k IN 0..cc_card_v11 cc - 1 \r
2981              ==> k = j))  `,\r
2982 NHANH UNIQUE_QY THEN GEN_TAC THEN STRIP_TAC THEN \r
2983 FIRST_X_ASSUM NHANH THEN MESON_TAC[]);;\r
2984 \r
2985 \r
2986 \r
2987 let ASM_SEARCH_TC = asms_search;;\r
2988 \r
2989 \r
2990 \r
2991 let IPVICGW_C43_C44 = prove_by_refinement\r
2992 (`!cc. (cc_bool_model_v11 cc /\\r
2993            cc_bool_prep_v11 cc /\\r
2994            cc_real_model_v11 cc /\\r
2995            sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0) /\\r
2996           cc_card_v11 cc = 4\r
2997           ==> (!i. cc_small_v11 cc i) `,\r
2998 [\r
2999 NHANH CHQSQEY;\r
3000 NHANH LXDEYBO;\r
3001 GEN_TAC THEN STRIP_TAC;\r
3002 ASSUME_TAC2 QX_NN00;\r
3003 ASSUME_TAC2 QY_NN00;\r
3004 SUBGOAL_THEN` cc_bool_model_v11 cc /\\r
3005  cc_bool_prep_v11 cc /\\r
3006  cc_real_model_v11 cc /\\r
3007  sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0 ` MP_TAC;\r
3008 ASM_REWRITE_TAC[];\r
3009 NHANH Oxl_def.periodic_fn;\r
3010 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11; cc_bool_prep_v11];\r
3011 STRIP_TAC;\r
3012 ABBREV_TAC` nn = cc_card_v11 cc `;\r
3013 ASM_CASES_TAC` ! i. cc_small_v11 cc i `;\r
3014 FIRST_X_ASSUM ACCEPT_TAC;\r
3015 FIRST_X_ASSUM MP_TAC;\r
3016 REWRITE_TAC[NOT_FORALL_THM];\r
3017 STRIP_TAC;\r
3018 SUBGOAL_THEN` ~ cc_qu_v11 cc i /\ ~ cc_qu_v11 cc ( i + 3) ` MP_TAC;\r
3019 ASM_REWRITE_TAC[cc_qu_v11; cc_hassmall_v11; DE_MORGAN_THM];\r
3020 DISJ1_TAC;\r
3021 DISJ2_TAC;\r
3022 \r
3023 ASM_SEARCH_TCL [` periodic (cc_small_v11 cc) `] MP_TAC;\r
3024 REWRITE_TAC[periodic];\r
3025 ASM_SIMP_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `];\r
3026 STRIP_TAC;\r
3027 MP_TAC (SPEC` i:num` QU_OR_QXY);\r
3028 MP_TAC (SPEC` i + 3` QU_OR_QXY);\r
3029 ASM_REWRITE_TAC[];\r
3030 ONCE_REWRITE_TAC[DISJ_SYM];\r
3031 STRIP_TAC;\r
3032 STRIP_TAC;\r
3033 DOWN THEN DOWN;\r
3034 \r
3035 ASM_SEARCH_TCL [` periodic (cc_qy_v11 cc) `] MP_TAC;\r
3036 ASSUME_TAC2 (ISPECL [` cc_qy_v11 cc `; `nn:num `;` i:num `] Oxl_def.periodic_mod);\r
3037 ASSUME_TAC2 (ISPECL [` cc_qy_v11 cc `; `nn:num `;` i + 3`] Oxl_def.periodic_mod);\r
3038 REPLICATE_TAC 2 (FIRST_X_ASSUM SUBST1_TAC);\r
3039 ASM_REWRITE_TAC[];\r
3040 STRIP_TAC THEN STRIP_TAC;\r
3041 MP_TAC (SPEC_ALL UNIQUE_QY2);\r
3042 ANTS_TAC;\r
3043 UNDISCH_TAC` sum (0..nn - 1) (cc_gg_v11 cc) < &0 `;\r
3044 ASM_REWRITE_TAC[];\r
3045 \r
3046 DISCH_THEN (MP_TAC o (SPEC` i MOD 4 `));\r
3047 ANTS_TAC;\r
3048 ASM_REWRITE_TAC[];\r
3049 MATCH_MP_TAC MOD_IN_NUMSEG;\r
3050 ARITH_TAC;\r
3051 DISCH_THEN (MP_TAC o (SPEC` (i + 3) MOD 4 `));\r
3052 ANTS_TAC;\r
3053 ASM_REWRITE_TAC[];\r
3054 MATCH_MP_TAC MOD_IN_NUMSEG;\r
3055 ARITH_TAC;\r
3056 MP_TAC (let th = GEN_ALL MOD_INJ1 in\r
3057 SPECL [` 3 `;` 4 `] th);\r
3058 ANTS_TAC;\r
3059 ARITH_TAC;\r
3060 SIMP_TAC[];\r
3061 \r
3062 SUBGOAL_THEN` ~ cc_qy_v11 cc ((i + 1) MOD 4) /\ ~( cc_qy_v11 cc ((i + 2) MOD 4)) ` ASSUME_TAC;\r
3063 MP_TAC (SPEC_ALL UNIQUE_QY);\r
3064 ANTS_TAC;\r
3065 UNDISCH_TAC` sum (0..nn - 1) (cc_gg_v11 cc) < &0 `;\r
3066 ASM_REWRITE_TAC[];\r
3067 DISCH_THEN (MP_TAC o (SPEC`(i + 3) MOD 4 `));\r
3068 ANTS_TAC;\r
3069 ASM_REWRITE_TAC[];\r
3070 SWITCH_TAC` nn = 4 `;\r
3071 ASM_SIMP_TAC[GSYM periodic_mod; MOD_IN_NUMSEG];\r
3072 STRIP_TAC;\r
3073 FIRST_ASSUM (MP_TAC o (SPEC` (i + 1) MOD 4 `));\r
3074 ANTS_TAC;\r
3075 SWITCH_TAC` nn = 4 `;\r
3076 ASM_SIMP_TAC[MOD_IN_NUMSEG];\r
3077 MP_TAC (let t = GEN_ALL MOD_INJ1 in SPECL [`2`; ` 4 `] t);\r
3078 ANTS_TAC;\r
3079 ARITH_TAC;\r
3080 DISCH_THEN (MP_TAC o (SPEC` i + 1 `));\r
3081 ASM_SIMP_TAC[ARITH_RULE` (i + 1) + 2 = i + 3 `];\r
3082 \r
3083 \r
3084 FIRST_X_ASSUM (MP_TAC o (SPEC` (i + 2) MOD 4 `));\r
3085 ANTS_TAC;\r
3086 SWITCH_TAC` nn = 4 `;\r
3087 MP_TAC (let t = GEN_ALL MOD_INJ1 in SPECL [` 1 `;` 4 `] t);\r
3088 ANTS_TAC;\r
3089 ARITH_TAC;\r
3090 ASM_SIMP_TAC[ARITH_RULE` i + 3 = (i + 2) + 1 `; MOD_IN_NUMSEG];\r
3091 SIMP_TAC[];\r
3092 MP_TAC (SPEC`(i + 1) MOD 4 ` QU_OR_QXY);\r
3093 MP_TAC (SPEC`(i + 2) MOD 4 ` QU_OR_QXY);\r
3094 ASM_SIMP_TAC[];\r
3095 ONCE_REWRITE_TAC[DISJ_SYM];\r
3096 STRIP_TAC THEN STRIP_TAC;\r
3097 REPLICATE_TAC 3 DOWN THEN PHA;\r
3098 SWITCH_TAC` nn = 4 `;\r
3099 ASM_REWRITE_TAC[];\r
3100 ASM_SIMP_TAC[GSYM periodic_mod];\r
3101 STRIP_TAC;\r
3102 ASSUME_TAC2 (ISPECL [` cc_gg_v11 cc `;` nn: num `] periodic_sum);\r
3103 SUBGOAL_THEN` &0 <= sum (i..nn - 1 + i) (cc_gg_v11 cc)` MP_TAC;\r
3104 MATCH_MP_TAC SUM_POS_LE;\r
3105 REWRITE_TAC[FINITE_NUMSEG];\r
3106 GEN_TAC;\r
3107 EXPAND_TAC "nn";\r
3108 REWRITE_TAC[IN_NUMSEG; ARITH_RULE` i <= x /\ x <= 4 - 1 + i <=> x = i \/ x = i + 1 \/ x = i + 2 \/ x = i + 3 `];\r
3109 REPLICATE_TAC 8 DOWN THEN PHA;\r
3110 ASM_SEARCH_TCL [` cc_qy_v11 cc i ==> &0 <= cc_gg_v11 cc i `] MP_TAC;\r
3111 ASM_SEARCH_TCL [` cc_qx_v11 cc i ==> &0 <= x `] MP_TAC;\r
3112 MESON_TAC[];\r
3113 ASM_REWRITE_TAC[REAL_ARITH` &0 <= a <=> ~( a < &0) `];\r
3114 SUBGOAL_THEN` cc_small_v11 cc (i + 1) /\ cc_small_v11 cc (i + 2) ` MP_TAC;\r
3115 DOWN;\r
3116 SWITCH_TAC` nn = 4 `;\r
3117 ASM_SIMP_TAC[GSYM periodic_mod];\r
3118 SIMP_TAC[ARITH_RULE` (i + 1) + 1 = i + 2 `; cc_qu_v11; cc_hassmall_v11];\r
3119 STRIP_TAC;\r
3120 \r
3121 (* =========== *)\r
3122 \r
3123 \r
3124 SUBGOAL_THEN` cc_eps <= cc_gg_v11 cc i ` MP_TAC;\r
3125 FIRST_X_ASSUM MATCH_MP_TAC;\r
3126 ASM_REWRITE_TAC[];\r
3127 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc (i + 1) ` MP_TAC;\r
3128 FIRST_X_ASSUM MATCH_MP_TAC;\r
3129 UNDISCH_TAC` cc_qu_v11 cc ((i + 1) MOD 4 )`;\r
3130 SWITCH_TAC` nn = 4 `;\r
3131 ASM_SIMP_TAC[GSYM Oxl_def.periodic_mod];\r
3132 SUBGOAL_THEN` &0 <= cc_gg_v11 cc (i + 2)` MP_TAC;\r
3133 ASM_SEARCH_TCL [` cc_qx_v11 cc i ==> &0 <= x `] MATCH_MP_TAC;\r
3134 UNDISCH_TAC` cc_qx_v11 cc (( i + 2) MOD 4 ) `;\r
3135 SWITCH_TAC` nn = 4 `;\r
3136 ASM_SIMP_TAC[GSYM Oxl_def.periodic_mod];\r
3137 SUBGOAL_THEN` &0 <= cc_gg_v11 cc (i + 3) ` MP_TAC;\r
3138 ASM_SEARCH_TCL [` cc_qy_v11 cc i ==> &0 <= cc_gg_v11 cc i `] MATCH_MP_TAC;\r
3139 FIRST_X_ASSUM ACCEPT_TAC;\r
3140 REPEAT STRIP_TAC;\r
3141 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc) ` MP_TAC;\r
3142 ASM_REWRITE_TAC[];\r
3143 ASSUME_TAC2 (ISPECL [` cc_gg_v11 cc `;` nn:num `] Oxl_def.periodic_sum);\r
3144 FIRST_X_ASSUM (MP_TAC o SYM o (SPEC_ALL));\r
3145 ASM_SIMP_TAC[];\r
3146 STRIP_TAC;\r
3147 SIMP_TAC[ARITH_RULE` 4 - 1 + i = i + 3 `; SUM_CLAUSES_LEFT; ARITH_RULE` i <= i + 3 /\ i + 1 <= i + 3 /\ (i + 1) + 1 <= i + 3 /\ ((i +1) + 1) + 1 = i + 3 `];\r
3148 REWRITE_TAC[SUM_SING_NUMSEG; ARITH_RULE` (i + 1) + 1 = i + 2 `];\r
3149 UNDISCH_TAC` &0 <= cc_gg_v11 cc (i + 2) `;\r
3150 UNDISCH_TAC` &0 <= cc_gg_v11 cc (i + 3) `;\r
3151 UNDISCH_TAC` cc_eps <= cc_gg_v11 cc (i) `;\r
3152 UNDISCH_TAC` --cc_eps <= cc_gg_v11 cc (i + 1) `;\r
3153 PHA;\r
3154 REAL_ARITH_TAC;\r
3155 \r
3156 \r
3157 \r
3158 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `];\r
3159 \r
3160 \r
3161 \r
3162 \r
3163 \r
3164 REPLICATE_TAC 3 DOWN THEN PHA;\r
3165 SWITCH_TAC` nn = 4 `;\r
3166 ASM_SIMP_TAC[GSYM Oxl_def.periodic_mod];\r
3167 STRIP_TAC;\r
3168 \r
3169 \r
3170 ASM_SEARCH_TCL [` !i. cc_qu_v11 cc i /\ cc_qy_v11 cc (i + 1)\r
3171           ==> xac <= cc_gg_v11 cc i + cc_gg3a_v11 cc (i + 1) `] (MP_TAC o (SPEC` i + 2 `));\r
3172 ANTS_TAC;\r
3173 ASM_REWRITE_TAC[ARITH_RULE` (i + 2) + 1 = i + 3 `];\r
3174 ASM_REWRITE_TAC[ARITH_RULE` (i + 2) + 1 = i + 3 `];\r
3175 SUBGOAL_THEN` cc_gg3a_v11 cc (i + 3) + cc_gg3b_v11 cc (i + 3) <= cc_gg_v11 cc ( i + 3) ` MP_TAC;\r
3176 FIRST_ASSUM MATCH_MP_TAC;\r
3177 FIRST_ASSUM ACCEPT_TAC;\r
3178 STRIP_TAC;\r
3179 SUBGOAL_THEN` &0 <= cc_gg3b_v11 cc (i + 3) ` ASSUME_TAC;\r
3180 FIRST_X_ASSUM MATCH_MP_TAC;\r
3181 FIRST_X_ASSUM ACCEPT_TAC;\r
3182 STRIP_TAC;\r
3183 SUBGOAL_THEN` &0 <= cc_gg_v11 cc (i + 2) + cc_gg_v11 cc (i + 3)` MP_TAC;\r
3184 REPLICATE_TAC 3 DOWN THEN PHA;\r
3185 REAL_ARITH_TAC;\r
3186 \r
3187 \r
3188 \r
3189 ASM_SEARCH_TCL [` cc_qx_v11 cc (i) ==> &0 <= x `] (ASSUME_TAC2 o (SPEC` i + 1 `));\r
3190 ASM_SEARCH_TCL [` cc_qx_v11 cc (i) ==> &0 <= x `] (ASSUME_TAC2 o (SPEC` i + 1 `));\r
3191 ASM_SEARCH_TCL [` cc_qx_v11 cc (i) ==> &0 <= x `] (ASSUME_TAC2 o (SPEC` i:num `));\r
3192 STRIP_TAC;\r
3193 SUBGOAL_THEN` &0 <= sum (0..nn - 1 ) (cc_gg_v11 cc) ` MP_TAC;\r
3194 ASSUME_TAC2 (ISPECL [` cc_gg_v11 cc `; `nn:num `] Oxl_def.periodic_sum);\r
3195 FIRST_X_ASSUM (SUBST1_TAC o SYM o (SPEC` i:num `));\r
3196 EXPAND_TAC "nn";\r
3197 REWRITE_TAC[ARITH_RULE` 4 - 1 + i = i + 3 `];\r
3198 SIMP_TAC[ARITH_RULE` 4 - 1 + i = i + 3 `; SUM_CLAUSES_LEFT; ARITH_RULE` i <= i + 3 /\ i + 1 <= i + 3 /\ (i + 1) + 1 <= i + 3 /\ ((i +1) + 1) + 1 = i + 3 `];\r
3199 REWRITE_TAC[SUM_SING_NUMSEG; ARITH_RULE` (i + 1) + 1 = i + 2 `];\r
3200 DOWN THEN DOWN THEN DOWN THEN PHA;\r
3201 REAL_ARITH_TAC;\r
3202 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `];\r
3203 REPLICATE_TAC 3 DOWN THEN PHA;\r
3204 SWITCH_TAC` nn = 4 `;\r
3205 ASM_SIMP_TAC[GSYM Oxl_def.periodic_mod];\r
3206 STRIP_TAC;\r
3207 \r
3208 (* =================== *)\r
3209 ASM_SEARCH_TCL [` !i. cc_qu_v11 cc i /\ cc_qy_v11 cc (i + 1)\r
3210           ==> xax <= cc_gg_v11 cc i + cc_gg3a_v11 cc (i + 1) `] (MP_TAC o (SPEC` i + 2 `));\r
3211 ANTS_TAC;\r
3212 ASM_REWRITE_TAC[ARITH_RULE` (i + 2) + 1 = i + 3 `];\r
3213 ASM_REWRITE_TAC[ARITH_RULE` (i + 2) + 1 = i + 3 `];\r
3214 SUBGOAL_THEN` cc_gg3a_v11 cc (i + 3) + cc_gg3b_v11 cc (i + 3) <= cc_gg_v11 cc ( i + 3) ` MP_TAC;\r
3215 FIRST_ASSUM MATCH_MP_TAC;\r
3216 FIRST_ASSUM ACCEPT_TAC;\r
3217 STRIP_TAC;\r
3218 SUBGOAL_THEN` &0 <= cc_gg3b_v11 cc (i + 3) ` ASSUME_TAC;\r
3219 FIRST_X_ASSUM MATCH_MP_TAC;\r
3220 FIRST_X_ASSUM ACCEPT_TAC;\r
3221 STRIP_TAC;\r
3222 \r
3223 SUBGOAL_THEN` &0 <= cc_gg_v11 cc (i + 2) + cc_gg_v11 cc (i + 3)` MP_TAC;\r
3224 REPLICATE_TAC 3 DOWN THEN PHA;\r
3225 REAL_ARITH_TAC;\r
3226 STRIP_TAC;\r
3227 SUBGOAL_THEN` cc_small_v11 cc ( i + 1) ` MP_TAC;\r
3228 UNDISCH_TAC` cc_qu_v11 cc (i + 1) `;\r
3229 SIMP_TAC[cc_qu_v11; cc_hassmall_v11];\r
3230 STRIP_TAC;\r
3231 ASM_SEARCH_TCL [`!i. cc_qx_v11 cc i /\ cc_small_v11 cc (i + 1) /\ ~cc_small_v11 cc i\r
3232        ==> cc_eps <= cc_gg_v11 cc i `] (ASSUME_TAC2 o SPEC_ALL);\r
3233 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc ( i + 1) ` MP_TAC;\r
3234 FIRST_ASSUM MATCH_MP_TAC;\r
3235 FIRST_X_ASSUM ACCEPT_TAC;\r
3236 \r
3237 REPEAT STRIP_TAC;\r
3238 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc) ` MP_TAC;\r
3239 ASM_REWRITE_TAC[];\r
3240 ASSUME_TAC2 (ISPECL [` cc_gg_v11 cc `;` nn:num `] Oxl_def.periodic_sum);\r
3241 FIRST_X_ASSUM (MP_TAC o SYM o (SPEC_ALL));\r
3242 \r
3243 \r
3244 ASM_SIMP_TAC[];\r
3245 STRIP_TAC;\r
3246 EXPAND_TAC "nn";\r
3247 REWRITE_TAC[ARITH_RULE` 4 - 1 + i = i + 3 `];\r
3248 SIMP_TAC[ARITH_RULE` 4 - 1 + i = i + 3 `; SUM_CLAUSES_LEFT; ARITH_RULE` i <= i + 3 /\ i + 1 <= i + 3 /\ (i + 1) + 1 <= i + 3 /\ ((i +1) + 1) + 1 = i + 3 `];\r
3249 REWRITE_TAC[SUM_SING_NUMSEG; ARITH_RULE` (i + 1) + 1 = i + 2 `];\r
3250 \r
3251 \r
3252 REPLICATE_TAC 4 DOWN THEN PHA;\r
3253 DOWN;\r
3254 REAL_ARITH_TAC;\r
3255 \r
3256 \r
3257 \r
3258 ASM_REWRITE_TAC[REAL_ARITH` &0 <= a <=> ~( a < &0) `];\r
3259 STRIP_TAC;\r
3260 SUBGOAL_THEN` &0 <= cc_gg_v11 cc i + cc_gg_v11 cc (i + 1) ` MP_TAC;\r
3261 ASM_CASES_TAC` cc_qy_v11 cc (i + 1) `;\r
3262 MATCH_MP_TAC REAL_LE_ADD;\r
3263 ASM_SIMP_TAC[];\r
3264 ASM_CASES_TAC` cc_qx_v11 cc (i + 1) `;\r
3265 MATCH_MP_TAC REAL_LE_ADD;\r
3266 ASM_SIMP_TAC[];\r
3267 MP_TAC (SPEC` i + 1 ` QU_OR_QXY);\r
3268 ASM_REWRITE_TAC[];\r
3269 STRIP_TAC;\r
3270 ASM_SEARCH_TCL [` cc_qu_v11 cc ( i + 1) /\ cc_qy_v11 cc i `] (ASSUME_TAC2 o SPEC_ALL);\r
3271 ASM_SEARCH_TCL [` cc_gg3a_v11 cc i + x <= y `] (ASSUME_TAC2 o SPEC_ALL);\r
3272 ASM_SEARCH_TCL  [` x ==> &0 <= cc_gg3a_v11 cc i  `] (ASSUME_TAC2 o SPEC_ALL);\r
3273 DOWNS 3;\r
3274 REWRITE_TAC[];\r
3275 REAL_ARITH_TAC;\r
3276 \r
3277 \r
3278 STRIP_TAC;\r
3279 SUBGOAL_THEN` &0 <= cc_gg_v11 cc (i + 2) + cc_gg_v11 cc (i + 3) ` MP_TAC;\r
3280 ASM_CASES_TAC` cc_qy_v11 cc (i + 2) `;\r
3281 MATCH_MP_TAC REAL_LE_ADD;\r
3282 ASM_SIMP_TAC[];\r
3283 ASM_CASES_TAC` cc_qx_v11 cc (i + 2) `;\r
3284 MATCH_MP_TAC REAL_LE_ADD;\r
3285 ASM_SIMP_TAC[];\r
3286 \r
3287 MP_TAC (SPEC ` i + 2 ` QU_OR_QXY);\r
3288 ASM_REWRITE_TAC[];\r
3289 SUBGOAL_THEN`~ cc_small_v11 cc (i + 4) ` MP_TAC;\r
3290 UNDISCH_TAC` periodic (cc_small_v11 cc) nn `;\r
3291 ASM_SIMP_TAC[Oxl_def.periodic];\r
3292 ASM_SEARCH_TCL [` cc_qu_v11 cc i ==> -- x <= y `] NHANH;\r
3293 STRIP_TAC;\r
3294 \r
3295 \r
3296 REWRITE_TAC[cc_qu_v11; cc_hassmall_v11; ARITH_RULE` (i + 2) + 1 = i + 3 `];\r
3297 STRIP_TAC;\r
3298 ASM_SEARCH_TCL [` !i. cc_qx_v11 cc i /\ cc_small_v11 cc (i) /\ ~cc_small_v11 cc (i + 1)\r
3299        ==> cc_eps <= cc_gg_v11 cc i ` ] (MP_TAC o (SPEC` i + 3 `));\r
3300 ANTS_TAC;\r
3301 ASM_REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `];\r
3302 DOWN;\r
3303 REAL_ARITH_TAC;\r
3304 STRIP_TAC;\r
3305 \r
3306 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc) ` MP_TAC;\r
3307 SWITCH_TAC ` nn = 4 `;\r
3308 ASM_REWRITE_TAC[];\r
3309 ASSUME_TAC2 (ISPECL [` cc_gg_v11 cc `; ` nn:num `] Oxl_def.periodic_sum);\r
3310 FIRST_X_ASSUM (SUBST1_TAC o SYM o SPEC_ALL);\r
3311 FIRST_X_ASSUM (SUBST1_TAC o SYM);\r
3312 SIMP_TAC[ARITH_RULE`4 - 1 + i = i + 3 `; SUM_CLAUSES_LEFT; ARITH_RULE` i <= i + (j:num) /\ i + 1 <= i + 3 /\ (i + 1) + 1 <= i + 3  `; LE_TRANS];\r
3313 REWRITE_TAC[ARITH_RULE` ((i + 1) + 1) + 1 = i + 3 `; SUM_SING_NUMSEG];\r
3314 \r
3315 DOWNS 2;\r
3316 REWRITE_TAC[ARITH_RULE` (i + 1) + 1 = i + 2 `];\r
3317 REAL_ARITH_TAC;\r
3318 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `];\r
3319 \r
3320 \r
3321 (* pkpk *)\r
3322 \r
3323 SUBGOAL_THEN` &0 <= cc_gg_v11 cc i + cc_gg_v11 cc (i + 1) ` ASSUME_TAC;\r
3324 ASM_CASES_TAC` cc_qy_v11 cc (i + 1) ` ;\r
3325 SWITCH_TAC` nn = 4 `;\r
3326 MATCH_MP_TAC REAL_LE_ADD;\r
3327 ASM_SIMP_TAC[];\r
3328 ASM_CASES_TAC` cc_qx_v11 cc (i + 1) `;\r
3329 SWITCH_TAC` nn = 4 `;\r
3330 MATCH_MP_TAC REAL_LE_ADD;\r
3331 ASM_SIMP_TAC[];\r
3332 MP_TAC (SPEC` i + 1 ` QU_OR_QXY);\r
3333 ASM_REWRITE_TAC[];\r
3334 ASM_SEARCH_TCL [` cc_qu_v11 cc i ==> -- x <= y `] NHANH;\r
3335 STRIP_TAC;\r
3336 SUBGOAL_THEN` cc_eps <= cc_gg_v11 cc i ` MP_TAC;\r
3337 FIRST_ASSUM MATCH_MP_TAC;\r
3338 ASM_REWRITE_TAC[];\r
3339 DOWNS 2;\r
3340 SIMP_TAC[cc_qu_v11; cc_hassmall_v11];\r
3341 DOWN;\r
3342 REAL_ARITH_TAC;\r
3343 \r
3344 SUBGOAL_THEN` ~cc_small_v11 cc (i + 4) ` ASSUME_TAC;\r
3345 ASM_SEARCH_TCL [` periodic (cc_small_v11 cc) `] MP_TAC;\r
3346 SIMP_TAC[Oxl_def.periodic];\r
3347 SWITCH_TAC` nn = 4 `;\r
3348 ASM_SIMP_TAC[];\r
3349 SUBGOAL_THEN` &0 <= cc_gg_v11 cc (i + 2) + cc_gg_v11 cc (i + 3) ` MP_TAC;\r
3350 ASM_CASES_TAC` cc_qy_v11 cc ( i + 2) \/ cc_qx_v11 cc (i + 2)`;\r
3351 MATCH_MP_TAC REAL_LE_ADD;\r
3352 ASM_SIMP_TAC[];\r
3353 DOWN THEN STRIP_TAC;\r
3354 ASM_SIMP_TAC[];\r
3355 ASM_SIMP_TAC[];\r
3356 MP_TAC (SPEC` i + 2 ` QU_OR_QXY);\r
3357 DOWN;\r
3358 SIMP_TAC[DE_MORGAN_THM];\r
3359 ASM_SEARCH_TCL [` cc_qu_v11 cc i ==> -- x <= y `] NHANH;\r
3360 STRIP_TAC THEN STRIP_TAC;\r
3361 SUBGOAL_THEN` cc_eps <= cc_gg_v11 cc (i + 3) ` MP_TAC;\r
3362 ASM_SEARCH_TCL [` !i. cc_qx_v11 cc i /\ cc_small_v11 cc i /\ ~cc_small_v11 cc (i + 1)\r
3363           ==> cc_eps <= cc_gg_v11 cc i `] MATCH_MP_TAC;\r
3364 UNDISCH_TAC` ~cc_small_v11 cc (i + 4) `;\r
3365 ASM_SIMP_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `];\r
3366 UNDISCH_TAC` cc_qu_v11 cc (i + 2) `;\r
3367 SIMP_TAC[cc_qu_v11; cc_hassmall_v11; ARITH_RULE` (i + 2) + 1 = i + 3 `];\r
3368 DOWN;\r
3369 REAL_ARITH_TAC;\r
3370 \r
3371 \r
3372 STRIP_TAC;\r
3373 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc) ` MP_TAC;\r
3374 ASSUME_TAC2 (ISPECL [` cc_gg_v11 cc `;` nn:num `] Oxl_def.periodic_sum);\r
3375 FIRST_X_ASSUM (SUBST1_TAC o SYM o SPEC_ALL);\r
3376 ASM_REWRITE_TAC[ARITH_RULE` 4 - 1 + i = i + 3 `];\r
3377 SIMP_TAC[SUM_CLAUSES_LEFT; ARITH_RULE` i <= i + 3 /\ i + 1 <= i + 3 /\ (i + 1) + 1 = i + 2 /\ i + 2 <= i + 3 /\ (i + 2 ) + 1 = i + 3 /\ (i + 1) + 2 = i + 3 `];\r
3378 REWRITE_TAC[SUM_SING_NUMSEG];\r
3379 DOWNS 3;\r
3380 REAL_ARITH_TAC;\r
3381 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `]]);;\r
3382 \r
3383 \r
3384 \r
3385 \r
3386 \r
3387 let EXISTS_QY_CARD5 = prove_by_refinement\r
3388 (` (cc_bool_model_v11 cc /\\r
3389            cc_bool_prep_v11 cc /\\r
3390            cc_real_model_v11 cc /\\r
3391            sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0) /\\r
3392           cc_card_v11 cc = 5 \r
3393 ==> (? i. i < 5 /\ cc_qy_v11 cc i)`,\r
3394 [NHANH UNPNFVW;\r
3395 NHANH LXDEYBO;\r
3396 REWRITE_TAC[cc_size_v11; cc_qy_v11];\r
3397 MP_TAC (SET_RULE` DISJOINT {i | i IN 0..cc_card_v11 cc - 1 /\ cc_4cell_v11 cc i} {i | i IN 0..cc_card_v11 cc - 1 /\ ~cc_4cell_v11 cc i}`);\r
3398 MP_TAC (SET_RULE` {i | i IN 0..cc_card_v11 cc - 1 /\ cc_4cell_v11 cc i} UNION {i | i IN 0..cc_card_v11 cc - 1 /\ ~cc_4cell_v11 cc i} = 0..cc_card_v11 cc - 1`);\r
3399 REPEAT STRIP_TAC;\r
3400 FIRST_X_ASSUM SUBST_ALL_TAC;\r
3401 ABBREV_TAC ` s1 = {i | i IN 0..5 - 1 /\ cc_4cell_v11 cc i}`;\r
3402 ABBREV_TAC ` s2 = {i | i IN 0..5 - 1 /\ ~cc_4cell_v11 cc i}`;\r
3403 SUBGOAL_THEN` CARD (s1 UNION (s2:num -> bool)) = CARD s1 + CARD s2 ` MP_TAC;\r
3404 MATCH_MP_TAC CARD_UNION;\r
3405 ASM_REWRITE_TAC[GSYM DISJOINT];\r
3406 ASM_REWRITE_TAC[GSYM FINITE_UNION; FINITE_NUMSEG];\r
3407 ASM_SIMP_TAC[CARD_NUMSEG; ARITH_RULE` (5 - 1 + 1) - 0 = 5 `];\r
3408 STRIP_TAC;\r
3409 ASSUME_TAC2 (ARITH_RULE` 5 = CARD (s1:num -> bool) + CARD (s2:num -> bool) /\ CARD s1 <= 4 /\ CARD s2 <= 1 \r
3410 ==> CARD s2 = 1 `);\r
3411 DOWN;\r
3412 ASM_CASES_TAC` (s2:num -> bool) = {} `;\r
3413 ASM_REWRITE_TAC[CARD_EMPTY; ARITH_RULE` ~( 0 = 1) `];\r
3414 DOWN;\r
3415 REWRITE_TAC[GSYM MEMBER_NOT_EMPTY];\r
3416 FIRST_X_ASSUM (SUBST1_TAC o SYM);\r
3417 EXPAND_TAC "s2";\r
3418 SIMP_TAC[IN_ELIM_THM; IN_NUMSEG; ARITH_RULE`x <= 5 - 1 <=> x < 5 `; LE_0]]);;\r
3419 \r
3420 \r
3421 \r
3422 \r
3423 let NUMSEG_INTER_22 = prove_by_refinement(\r
3424 ` ~(nn = 0) ==> ( (i <= x /\ x <= i + nn - 1) <=> (? k. k < nn /\ x = i + k )) `,\r
3425 [STRIP_TAC;\r
3426 EQ_TAC;\r
3427 STRIP_TAC;\r
3428 EXISTS_TAC` x - (i:num) `;\r
3429 DOWN_TAC;\r
3430 ARITH_TAC;\r
3431 STRIP_TAC;\r
3432 DOWN_TAC;\r
3433 ARITH_TAC]);;\r
3434 \r
3435 \r
3436 let PERIODIC_IMAGE_EQUAL = prove_by_refinement(\r
3437 ` ~( nn = 0) /\ periodic (f:num -> A) nn ==> IMAGE f (0..nn - 1) = IMAGE f (i..i + nn - 1) `,\r
3438 [NHANH MOD_NUMSEG;\r
3439 STRIP_TAC;\r
3440 FIRST_X_ASSUM (MP_TAC o (SPEC` i:num `));\r
3441 SIMP_TAC[];\r
3442 ASSUME_TAC2 (\r
3443 REWRITE_RULE[RIGHT_FORALL_IMP_THM] (ISPECL [` f:num -> A `;` nn:num `] Oxl_def.periodic_mod));\r
3444 FIRST_X_ASSUM (ASSUME_TAC o GSYM);\r
3445 ASM_SIMP_TAC[IMAGE; IN_ELIM_THM; IN_NUMSEG];\r
3446 ASM_SIMP_TAC[NUMSEG_INTER_22];\r
3447 DOWN;\r
3448 SET_TAC[]]);;\r
3449 \r
3450 \r
3451 \r
3452 let IMAGE_NUMSEG222 = prove_by_refinement\r
3453 (`~(nn = 0) /\ periodic (f:num -> A) nn\r
3454      ==> ! i. { f k | k IN 0..nn - 1} = { f (i + k) | k IN 0..nn - 1 } `,\r
3455 [STRIP_TAC THEN GEN_TAC THEN DOWN_TAC;\r
3456 NHANH PERIODIC_IMAGE_EQUAL;\r
3457 REWRITE_TAC[IMAGE; IN_NUMSEG; LE_0];\r
3458 STRIP_TAC;\r
3459 DOWN;\r
3460 ASM_SIMP_TAC[NUMSEG_INTER_22; ARITH_RULE`~(n = 0) ==> (x < (n:num) <=> x <= n - 1) `];\r
3461 DOWN_TAC;\r
3462 SET_TAC[]]);;\r
3463 \r
3464 \r
3465 \r
3466 \r
3467 \r
3468 let LITTLE_CC_GGB = prove(`(!i. cc_qy_v11 cc i\r
3469           ==> cc_gg3a_v11 cc i + cc_gg3b_v11 cc i <= cc_gg_v11 cc i ) /\\r
3470  (!i. cc_qy_v11 cc i ==> &0 <= cc_gg3a_v11 cc i) /\\r
3471 ( !i. cc_qu_v11 cc (i + 1) /\ cc_qy_v11 cc i\r
3472           ==> &0 <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1))\r
3473 ==> cc_qu_v11 cc (i + 1) /\ cc_qy_v11 cc i\r
3474 ==> &0 <= cc_gg_v11 cc i + cc_gg_v11 cc (i + 1) `,\r
3475 STRIP_TAC THEN FIRST_X_ASSUM NHANH THEN FIRST_X_ASSUM NHANH THEN \r
3476 FIRST_X_ASSUM NHANH THEN REAL_ARITH_TAC);;\r
3477 \r
3478 \r
3479 let LITTLE_CC_GGA = prove(` (!i. cc_qy_v11 cc i\r
3480           ==> cc_gg3a_v11 cc i + cc_gg3b_v11 cc i <= cc_gg_v11 cc i ) /\\r
3481  (!i. cc_qy_v11 cc i ==> &0 <= cc_gg3b_v11 cc i) /\\r
3482 (!i. cc_qu_v11 cc i /\ cc_qy_v11 cc (i + 1)\r
3483           ==> &0 <= cc_gg_v11 cc i + cc_gg3a_v11 cc (i + 1)) \r
3484 ==> cc_qu_v11 cc (i) /\ cc_qy_v11 cc (i + 1)\r
3485 ==> &0 <= cc_gg_v11 cc i + cc_gg_v11 cc (i + 1) `,\r
3486 STRIP_TAC THEN FIRST_X_ASSUM NHANH THEN FIRST_X_ASSUM NHANH THEN \r
3487 FIRST_X_ASSUM NHANH THEN REAL_ARITH_TAC);;\r
3488 \r
3489 \r
3490 \r
3491 \r
3492 \r
3493 \r
3494 let QU_IMP_SMALL =\r
3495 prove(` cc_qu_v11 cc i ==> cc_small_v11 cc i /\ cc_small_v11 cc ( i + 1) `,\r
3496 SIMP_TAC[cc_qu_v11; cc_hassmall_v11]);;\r
3497 \r
3498 \r
3499 \r
3500 \r
3501 \r
3502 let IPVICGW_C5_QX_ALONG_NOT_SMALL = prove_by_refinement(\r
3503 ` !cc. ((cc_bool_model_v11 cc /\\r
3504            cc_bool_prep_v11 cc /\\r
3505            cc_real_model_v11 cc /\\r
3506            sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0) /\\r
3507           cc_card_v11 cc = 5 ) /\\r
3508           ~cc_small_v11 cc i /\ cc_qx_v11 cc i /\ cc_qx_v11 cc ( i + 4) ==> F `,\r
3509 [REPEAT STRIP_TAC;\r
3510 ASSUME_TAC2 QY_NN00 THEN ASSUME_TAC2 QX_NN00;\r
3511 ASSUME_TAC2 EXISTS_QY_CARD5;\r
3512 DOWN_TAC;\r
3513 NHANH Oxl_def.periodic_fn;\r
3514 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];\r
3515 ONCE_REWRITE_TAC[TAUT` ~ a <=> a ==> F `];\r
3516 IMP_TAC;\r
3517 IMP_TAC;\r
3518 STRIP_TAC;\r
3519 STRIP_TAC;\r
3520 STRIP_TAC;\r
3521 \r
3522 ABBREV_TAC` nn = cc_card_v11 cc `;\r
3523 ASSUME_TAC2 (ISPECL [`nn:num `;` cc_qy_v11 cc `] (GEN_ALL IMAGE_NUMSEG222));\r
3524 SUBGOAL_THEN` cc_qy_v11 cc i' IN {cc_qy_v11 cc k | k IN 0..nn - 1}` MP_TAC;\r
3525 REWRITE_TAC[IN_ELIM_THM];\r
3526 EXISTS_TAC` i': num `;\r
3527 ASM_REWRITE_TAC[IN_NUMSEG_0; ARITH_RULE` a <= 5 - 1 <=> a < 5 `];\r
3528 FIRST_ASSUM (SUBST1_TAC o (SPEC` i:num `));\r
3529 \r
3530 ASM_REWRITE_TAC[IN_ELIM_THM; IN_NUMSEG_0; ARITH_RULE` 5 - 1 = 4 `];\r
3531 STRIP_TAC;\r
3532 ASM_CASES_TAC` k = 0 `;\r
3533 FIRST_X_ASSUM SUBST_ALL_TAC;\r
3534 DOWN;\r
3535 REWRITE_TAC[ADD_0];\r
3536 UNDISCH_TAC` cc_qx_v11 cc i `;\r
3537 SIMP_TAC[cc_qx_v11; cc_qy_v11];\r
3538 \r
3539 ASM_CASES_TAC` k = 4`;\r
3540 FIRST_X_ASSUM SUBST_ALL_TAC;\r
3541 DOWNS 2;\r
3542 UNDISCH_TAC` cc_qx_v11 cc (i + 4) `;\r
3543 SIMP_TAC[cc_qx_v11; cc_qy_v11];\r
3544 ASM_CASES_TAC` k = 1 `;\r
3545 \r
3546 FIRST_X_ASSUM SUBST_ALL_TAC;\r
3547 SUBGOAL_THEN` &0 <= cc_gg_v11 cc (i + 1) + cc_gg_v11 cc (i + 2) ` MP_TAC;\r
3548 ASM_CASES_TAC` cc_qy_v11 cc (i + 2) `;\r
3549 MATCH_MP_TAC REAL_LE_ADD;\r
3550 ASM_SIMP_TAC[];\r
3551 \r
3552 \r
3553 ASM_CASES_TAC` cc_qx_v11 cc (i + 2 ) `;\r
3554 MATCH_MP_TAC REAL_LE_ADD;\r
3555 ASM_SIMP_TAC[];\r
3556 MP_TAC (SPEC` i + 2 ` QU_OR_QXY);\r
3557 ASM_SIMP_TAC[];\r
3558 \r
3559 STRIP_TAC;\r
3560 ASM_SEARCH_TCL [` cc_qu_v11 cc (i + 1) /\ x ==>  xpapxa <= cc_gg3b_v11 cc i + cc_gg_v11 cc j `] (MP_TAC o (SPEC ` i + 1 `));\r
3561 ANTS_TAC;\r
3562 ASM_REWRITE_TAC[ARITH_RULE` (i + 1) + 1 = i + 2 `];\r
3563 STRIP_TAC;\r
3564 MP_TAC (SPEC ` i + 1 ` (GEN`i:num ` LITTLE_CC_GGB));\r
3565 ANTS_TAC;\r
3566 ASM_REWRITE_TAC[];\r
3567 ANTS_TAC;\r
3568 ASM_REWRITE_TAC[ARITH_RULE` (x + 1) + 1 = x + 2 `];\r
3569 ASM_SIMP_TAC[ARITH_RULE` (x + 1) + 1 = x + 2 `; Oxl_def.cc_eps];\r
3570 \r
3571 \r
3572 STRIP_TAC;\r
3573 SWITCH_TAC` nn = 5 `;\r
3574 SUBGOAL_THEN`~ cc_small_v11 cc (i + 5) ` ASSUME_TAC;\r
3575 ASM_SIMP_TAC[ Oxl_def.periodic];\r
3576 ASM_SEARCH_TCL [` periodic (cc_small_v11 cc) `] MP_TAC;\r
3577 SIMP_TAC[ Oxl_def.periodic];\r
3578 ASM_REWRITE_TAC[];\r
3579 SUBGOAL_THEN` &0 <= cc_gg_v11 cc (i + 3) + cc_gg_v11 cc (i + 4) ` ASSUME_TAC;\r
3580 ASM_CASES_TAC` cc_qy_v11 cc ( i + 3) `;\r
3581 MATCH_MP_TAC REAL_LE_ADD;\r
3582 ASM_SIMP_TAC[];\r
3583 ASM_CASES_TAC` cc_qx_v11 cc (i + 3 ) ` ;\r
3584 MATCH_MP_TAC REAL_LE_ADD;\r
3585 ASM_SIMP_TAC[];\r
3586 MP_TAC (SPEC` i + 3 ` QU_OR_QXY);\r
3587 ASM_REWRITE_TAC[];\r
3588 NHANH QU_IMP_SMALL;\r
3589 REWRITE_TAC[ARITH_RULE` (i + 3 ) + 1 = i + 4 `];\r
3590 ASM_SEARCH_TCL [` cc_qu_v11 cc i ==> -- x <= y `] NHANH;\r
3591 STRIP_TAC;\r
3592 ASM_SEARCH_TCL [` a /\ b /\ ~ cc_small_v11 cc (i + 1) ==> cc_eps <= y `] (MP_TAC o (SPEC` i + 4 `));\r
3593 ANTS_TAC;\r
3594 ASM_SEARCH_TCL [` 5 = n `] (SUBST_ALL_TAC o SYM);\r
3595 ASM_REWRITE_TAC[ARITH_RULE` (i + 4) + 1 = i + 5 `];\r
3596 UNDISCH_TAC` --cc_eps <= cc_gg_v11 cc ( i + 3) `;\r
3597 REAL_ARITH_TAC;\r
3598 \r
3599 SUBGOAL_THEN` &0 <= cc_gg_v11 cc i ` ASSUME_TAC;\r
3600 ASM_SIMP_TAC[];\r
3601 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc ) ` MP_TAC;\r
3602 ASSUME_TAC2 (ISPECL [` cc_gg_v11 cc `;` nn:num `] Oxl_def.periodic_sum);\r
3603 FIRST_X_ASSUM (SUBST1_TAC o SYM o (SPEC` i:num `));\r
3604 EXPAND_TAC "nn";\r
3605 SIMP_TAC[ARITH_RULE` 5 - 1 + i = i + 4 /\ i <= i + 4 /\ i + 1 <= i + 4 /\ (i +1) + 1 <= i + 4 /\ ((i + 1) + 1) + 1 <= i + 4`; SUM_CLAUSES_LEFT];\r
3606 REWRITE_TAC[GSYM ADD_ASSOC];\r
3607 CONV_TAC NUM_REDUCE_CONV;\r
3608 REWRITE_TAC[SUM_SING_NUMSEG];\r
3609 DOWNS 2;\r
3610 UNDISCH_TAC` &0 <= cc_gg_v11 cc (i + 1) + cc_gg_v11 cc (i + 2) `;\r
3611 REAL_ARITH_TAC;\r
3612 ASM_REWRITE_TAC[ARITH_RULE` ~( &0 <= x) <=> x < &0 `];\r
3613 \r
3614 (* ========== *)\r
3615 ASM_CASES_TAC` k = 2 `;\r
3616 FIRST_X_ASSUM SUBST_ALL_TAC;\r
3617 SUBGOAL_THEN` &0 <= cc_gg_v11 cc (i + 1) + cc_gg_v11 cc (i + 2) ` ASSUME_TAC;\r
3618 ASM_CASES_TAC` cc_qy_v11 cc (i + 1) `;\r
3619 MATCH_MP_TAC REAL_LE_ADD;\r
3620 ASM_SIMP_TAC[];\r
3621 ASM_CASES_TAC` cc_qx_v11 cc (i + 1) `;\r
3622 MATCH_MP_TAC REAL_LE_ADD;\r
3623 ASM_SIMP_TAC[];\r
3624 MP_TAC (SPEC` i + 1 ` QU_OR_QXY);\r
3625 ASM_REWRITE_TAC[];\r
3626 STRIP_TAC;\r
3627 MP_TAC (SPEC `i + 1 ` (GEN `i: num ` LITTLE_CC_GGA));\r
3628 ANTS_TAC;\r
3629 ASM_REWRITE_TAC[];\r
3630 ANTS_TAC;\r
3631 ASM_REWRITE_TAC[ARITH_RULE` (i + 1) + 1 = i + 2 `];\r
3632 REWRITE_TAC[Oxl_def.cc_eps; ARITH_RULE` (a + 1) + 1 = a + 2 `];\r
3633 \r
3634 \r
3635 \r
3636 \r
3637 \r
3638 SUBGOAL_THEN` ~ cc_small_v11 cc ( i + 5) ` ASSUME_TAC;\r
3639 ASM_SEARCH_TCL [` periodic (cc_small_v11 cc) `] MP_TAC;\r
3640 REWRITE_TAC[Oxl_def.periodic];\r
3641 ASM_SIMP_TAC[];\r
3642 \r
3643 SUBGOAL_THEN` &0 <= cc_gg_v11 cc ( i + 3) + cc_gg_v11 cc (i + 4) ` ASSUME_TAC;\r
3644 ASM_CASES_TAC` cc_qy_v11 cc (i + 3 ) ` ;\r
3645 MATCH_MP_TAC REAL_LE_ADD;\r
3646 ASM_SIMP_TAC[];\r
3647 ASM_CASES_TAC` cc_qx_v11 cc (i + 3) `;\r
3648 MATCH_MP_TAC REAL_LE_ADD;\r
3649 ASM_SIMP_TAC[];\r
3650 MP_TAC (SPEC` i + 3 ` QU_OR_QXY);\r
3651 ASM_REWRITE_TAC[];\r
3652 \r
3653 \r
3654 (* ??? *)\r
3655 \r
3656 ASM_SEARCH_TCL [` -- x <= y `] NHANH;\r
3657 REWRITE_TAC[cc_qu_v11; cc_hassmall_v11; ARITH_RULE` (i + 3) + 1 = i + 4 `];\r
3658 STRIP_TAC;\r
3659 ASM_SEARCH_TCL [` a /\ b /\ ~ p (i + 1) ==> cc_eps <= x `] (MP_TAC o (SPEC` i + 4 `));\r
3660 ANTS_TAC;\r
3661 ASM_REWRITE_TAC[ARITH_RULE` (i + 4) + 1 = i + 5 `];\r
3662 DOWN;\r
3663 REAL_ARITH_TAC;\r
3664 SUBGOAL_THEN` &0 <= cc_gg_v11 cc i ` ASSUME_TAC;\r
3665 ASM_SIMP_TAC[];\r
3666 \r
3667 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc) ` MP_TAC;\r
3668 ASSUME_TAC2 (ISPECL [` cc_gg_v11 cc `;` nn:num `] Oxl_def.periodic_sum);\r
3669 \r
3670 \r
3671 FIRST_X_ASSUM (MP_TAC o SYM o (SPEC` i :num `));\r
3672 ASM_SIMP_TAC[ARITH_RULE` 5 - 1 + i = i + 4 `; SUM_CLAUSES_LEFT; ARITH_RULE` i <= i + 4 /\ i + 1 <= i + 4 /\ (i + 1) + 1 = i + 2 `];\r
3673 STRIP_TAC;\r
3674 SIMP_TAC[SUM_CLAUSES_LEFT; ARITH_RULE` i + 2 <= i + 4 /\ (i + 2) + 1 = i + 3 /\ i + 3 <= i + 4 /\ (i + 3 ) + 1 = i + 4 `; SUM_SING_NUMSEG];\r
3675 DOWNS 4;\r
3676 DOWN;\r
3677 REAL_ARITH_TAC;\r
3678 \r
3679 ASM_REWRITE_TAC[REAL_ARITH` ~( &0 <= x) <=> x < &0 `];\r
3680 \r
3681 \r
3682 \r
3683 \r
3684 ASM_CASES_TAC` k = 3 `;\r
3685 FIRST_X_ASSUM SUBST_ALL_TAC;\r
3686 SUBGOAL_THEN` &0 <= cc_gg_v11 cc ( i + 2) + cc_gg_v11 cc (i + 3) ` ASSUME_TAC;\r
3687 ASM_CASES_TAC` cc_qy_v11 cc ( i + 2) `;\r
3688 MATCH_MP_TAC REAL_LE_ADD;\r
3689 ASM_SIMP_TAC[];\r
3690 ASM_CASES_TAC` cc_qx_v11 cc (i + 2) `;\r
3691 MATCH_MP_TAC REAL_LE_ADD;\r
3692 ASM_SIMP_TAC[];\r
3693 MP_TAC (SPEC` i + 2 ` QU_OR_QXY);\r
3694 ASM_REWRITE_TAC[];\r
3695 STRIP_TAC;\r
3696 MP_TAC (SPEC` i + 2 ` (GEN`i:num ` LITTLE_CC_GGA));\r
3697 ANTS_TAC;\r
3698 ASM_REWRITE_TAC[];\r
3699 ANTS_TAC;\r
3700 ASM_REWRITE_TAC[ARITH_RULE` (i + 2) + 1 = i + 3 `];\r
3701 \r
3702 SIMP_TAC[ARITH_RULE` (i + 2) + 1 = i + 3 `; Oxl_def.cc_eps];\r
3703 SUBGOAL_THEN` &0 <= cc_gg_v11 cc i + cc_gg_v11 cc (i + 1) ` ASSUME_TAC;\r
3704 ASM_CASES_TAC` cc_qy_v11 cc (i + 1) `;\r
3705 MATCH_MP_TAC REAL_LE_ADD;\r
3706 ASM_SIMP_TAC[];\r
3707 ASM_CASES_TAC` cc_qx_v11 cc (i + 1) `;\r
3708 MATCH_MP_TAC REAL_LE_ADD;\r
3709 ASM_SIMP_TAC[];\r
3710 MP_TAC (SPEC` i + 1 ` QU_OR_QXY);\r
3711 ASM_SIMP_TAC[];\r
3712 ASM_SEARCH_TCL [` x ==> -- y <= z `] NHANH;\r
3713 REWRITE_TAC[cc_qu_v11; cc_hassmall_v11];\r
3714 STRIP_TAC;\r
3715 ASM_SEARCH_TCL [` a /\  b (i + 1 ) /\ ~ c ==> cc_eps <= x `] (MP_TAC o SPEC_ALL);\r
3716 ANTS_TAC;\r
3717 ASM_REWRITE_TAC[];\r
3718 DOWN;\r
3719 REAL_ARITH_TAC;\r
3720 \r
3721 \r
3722 SUBGOAL_THEN` &0 <= cc_gg_v11 cc ( i + 4 ) ` ASSUME_TAC THEN \r
3723 ASM_SIMP_TAC[];\r
3724 \r
3725 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc) ` MP_TAC;\r
3726 ASSUME_TAC2 (ISPECL [` cc_gg_v11 cc `;` nn:num `] Oxl_def.periodic_sum);\r
3727 FIRST_X_ASSUM (MP_TAC o SYM o (SPEC` i :num `));\r
3728 ASM_SIMP_TAC[ARITH_RULE` 5 - 1 + i = i + 4 `; SUM_CLAUSES_LEFT; ARITH_RULE` i <= i + 4 /\ i + 1 <= i + 4 /\ (i + 1) + 1 = i + 2 `];\r
3729 STRIP_TAC;\r
3730 SIMP_TAC[SUM_CLAUSES_LEFT; ARITH_RULE` i + 2 <= i + 4 /\ (i + 2) + 1 = i + 3 /\ i + 3 <= i + 4 /\ (i + 3 ) + 1 = i + 4 `; SUM_SING_NUMSEG];\r
3731 REMOVE_TAC;\r
3732 DOWNS 4;\r
3733 REAL_ARITH_TAC;\r
3734 ASM_REWRITE_TAC[REAL_ARITH` ~( &0 <= x) <=> x < &0 `];\r
3735 \r
3736 ASM_REWRITE_TAC[REAL_ARITH` ~( &0 <= x ) <=> x < &0 `];\r
3737 DOWNS 5;\r
3738 UNDISCH_TAC` k <= 4 `;\r
3739 ARITH_TAC]);;\r
3740 \r
3741 \r
3742 \r
3743 \r
3744 \r
3745 \r
3746 \r
3747 let CARD5_1074_LE_QYI = prove_by_refinement(` (cc_bool_model_v11 cc /\\r
3748             cc_bool_prep_v11 cc /\\r
3749             cc_real_model_v11 cc /\\r
3750             sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0 ) /\\r
3751 (!i. cc_4cell_v11 cc i\r
3752           ==> a_spine5 + b_spine5 * cc_azim_v11 cc i <= cc_gg_v11 cc i ) /\\r
3753 ( !i. cc_qy_v11 cc i ==> #0.008 * cc_azim_v11 cc i <= cc_gg_v11 cc i ) /\\r
3754 cc_qy_v11 cc i /\ cc_card_v11 cc = 5 /\\r
3755 periodic (cc_gg_v11 cc) (cc_card_v11 cc ) /\\r
3756 (!i. #0.606 <= cc_azim_v11 cc i ) /\\r
3757 sum (0..cc_card_v11 cc - 1) (cc_azim_v11 cc) = &2 * pi /\\r
3758  #1.074 <= cc_azim_v11 cc i \r
3759 ==> &0 <= sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) `,\r
3760 \r
3761 [NHANH UNPNFVW;\r
3762 \r
3763 REWRITE_TAC[TAUT` a /\ b /\ c <=> (a/\b) /\ c `];\r
3764 IMP_TAC;\r
3765 STRIP_TAC;\r
3766 DISCH_TAC;\r
3767 ABBREV_TAC` S = { i + k | k | k < 5 /\ cc_qy_v11 cc (i + k ) } ` ;\r
3768 SUBGOAL_THEN` i IN (S:num -> bool) ` ASSUME_TAC;\r
3769 EXPAND_TAC "S";\r
3770 REWRITE_TAC[IN_ELIM_THM];\r
3771 EXISTS_TAC` 0 `;\r
3772 ASM_REWRITE_TAC[ADD_CLAUSES];\r
3773 ARITH_TAC;\r
3774 SUBGOAL_THEN` S SUBSET { i + k | k | k < 5 } ` ASSUME_TAC;\r
3775 EXPAND_TAC "S";\r
3776 CONV_TAC SET_RULE;\r
3777 ASSUME_TAC (SPEC` 5 ` FINITE_NUMSEG_LT );\r
3778 SUBGOAL_THEN` IMAGE (\k. i + k ) { m | m < 5} = {i + k | k < 5 }` ASSUME_TAC;\r
3779 REWRITE_TAC[EXTENSION; IN_IMAGE; IN_ELIM_THM];\r
3780 GEN_TAC;\r
3781 MESON_TAC[];\r
3782 UNDISCH_TAC` FINITE {m | m < 5} `;\r
3783 NHANH (ISPEC `(\x. (i:num) + x ) ` FINITE_IMAGE);\r
3784 ASM_REWRITE_TAC[];\r
3785 STRIP_TAC;\r
3786 SUBGOAL_THEN` sum {i:num} ( cc_azim_v11 cc ) <= sum S ( cc_azim_v11 cc ) ` ASSUME_TAC;\r
3787 MATCH_MP_TAC SUM_SUBSET_SIMPLE;\r
3788 CONJ_TAC;\r
3789 MATCH_MP_TAC FINITE_SUBSET;\r
3790 EXISTS_TAC` {i + k | k < 5 } ` ;\r
3791 ASM_REWRITE_TAC[];\r
3792 ASM_REWRITE_TAC[INSERT_SUBSET; EMPTY_SUBSET];\r
3793 GEN_TAC THEN STRIP_TAC;\r
3794 MATCH_MP_TAC REAL_LE_TRANS;\r
3795 EXISTS_TAC` #0.606 `;\r
3796 ASM_REWRITE_TAC[];\r
3797 REAL_ARITH_TAC;\r
3798 \r
3799 MP_TAC (ISPECL [` cc_gg_v11 cc `;` 5 `] Oxl_def.periodic_sum);\r
3800 ANTS_TAC;\r
3801 UNDISCH_TAC` periodic (cc_gg_v11 cc) (cc_card_v11 cc) `;\r
3802 ASM_SIMP_TAC[];\r
3803 STRIP_TAC;\r
3804 ARITH_TAC;\r
3805 DISCH_THEN (ASSUME_TAC o SYM o SPEC_ALL);\r
3806 ABBREV_TAC` SS = {i + k | k | k < 5 /\ ~cc_qy_v11 cc (i + k)} `;\r
3807 SUBGOAL_THEN` S INTER (SS: num -> bool) = {} ` ASSUME_TAC;\r
3808 EXPAND_TAC "S";\r
3809 EXPAND_TAC "SS";\r
3810 CONV_TAC SET_RULE;\r
3811 SUBGOAL_THEN` { i + k | k | k < 5 } = S UNION (SS: num -> bool)` ASSUME_TAC;\r
3812 EXPAND_TAC "S";\r
3813 EXPAND_TAC "SS";\r
3814 CONV_TAC SET_RULE;\r
3815 ASM_REWRITE_TAC[numseg];\r
3816 SUBGOAL_THEN` {x | i <= x /\ x <= 5 - 1 + i} = {i + k | k < 5 } ` ASSUME_TAC;\r
3817 REWRITE_TAC[EXTENSION; IN_ELIM_THM];\r
3818 GEN_TAC;\r
3819 EQ_TAC;\r
3820 STRIP_TAC;\r
3821 EXISTS_TAC` x - (i:num) `;\r
3822 DOWN THEN DOWN;\r
3823 ARITH_TAC;\r
3824 STRIP_TAC;\r
3825 DOWNS 2;\r
3826 ARITH_TAC;\r
3827 ASM_REWRITE_TAC[];\r
3828 ASSUME_TAC2 UNIQUE_QY;\r
3829 DOWN THEN PHA;\r
3830 DISCH_THEN (MP_TAC o (SPEC` i MOD 5 ` ));\r
3831 ASM_REWRITE_TAC[];\r
3832 ANTS_TAC;\r
3833 MP_TAC (ARITH_RULE` ~( 5 = 0 ) `);\r
3834 SIMP_TAC[Oxl_def.MOD_IN_NUMSEG];\r
3835 ASSUME_TAC2 Oxl_def.periodic_fn;\r
3836 DOWN;\r
3837 ASM_REWRITE_TAC[];\r
3838 STRIP_TAC;\r
3839 DOWN THEN PHA;\r
3840 SIMP_TAC [ GSYM Oxl_def.periodic_mod];\r
3841 ASM_REWRITE_TAC[];\r
3842 STRIP_TAC;\r
3843 SUBGOAL_THEN` cc_qy_v11 cc (i MOD 5 ) ` ASSUME_TAC;\r
3844 ASSUME_TAC2 Oxl_def.periodic_fn;\r
3845 DOWN;\r
3846 ASM_REWRITE_TAC[];\r
3847 STRIP_TAC;\r
3848 MP_TAC (ARITH_RULE` ~( 5 = 0 ) `);\r
3849 DOWN THEN PHA;\r
3850 SIMP_TAC [ GSYM Oxl_def.periodic_mod];\r
3851 ASM_REWRITE_TAC[];\r
3852 \r
3853 SUBGOAL_THEN` FINITE (S: num -> bool) ` MP_TAC;\r
3854 MATCH_MP_TAC FINITE_SUBSET;\r
3855 EXISTS_TAC` {i + k | k < 5} `;\r
3856 ASM_REWRITE_TAC[];\r
3857 SUBGOAL_THEN` FINITE (SS: num -> bool) ` MP_TAC;\r
3858 MATCH_MP_TAC FINITE_SUBSET;\r
3859 EXISTS_TAC` {i + k | k < 5} `;\r
3860 ASM_REWRITE_TAC[];\r
3861 CONV_TAC SET_RULE;\r
3862 PHA THEN STRIP_TAC;\r
3863 SUBGOAL_THEN` DISJOINT S (SS: num -> bool) ` MP_TAC;\r
3864 ASM_REWRITE_TAC[DISJOINT];\r
3865 DOWN THEN DOWN THEN PHA;\r
3866 SIMP_TAC[SUM_UNION];\r
3867 STRIP_TAC;\r
3868 SUBGOAL_THEN`!i.  cc_qy_v11 cc (i MOD 5 ) = cc_qy_v11 cc i ` ASSUME_TAC;\r
3869 MATCH_MP_TAC (* Xwitccn. *) Oxl_def.PERIODIC_PROPERTY;\r
3870 ASSUME_TAC2 Oxl_def.periodic_fn;\r
3871 DOWN;\r
3872 ASM_SIMP_TAC[];\r
3873 STRIP_TAC;\r
3874 ARITH_TAC;\r
3875 ASSUME_TAC2 Oxl_def.periodic_fn;\r
3876 DOWN THEN ASM_REWRITE_TAC[] THEN STRIP_TAC;\r
3877 \r
3878 \r
3879 \r
3880 \r
3881 SUBGOAL_THEN` S = {i:num } ` ASSUME_TAC;\r
3882 REWRITE_TAC[EXTENSION; IN_INSERT; NOT_IN_EMPTY];\r
3883 EXPAND_TAC "S";\r
3884 REWRITE_TAC[IN_ELIM_THM];\r
3885 GEN_TAC;\r
3886 EQ_TAC;\r
3887 STRIP_TAC;\r
3888 ASM_CASES_TAC` k = 0 `;\r
3889 DOWN THEN DOWN THEN ARITH_TAC;\r
3890 \r
3891 UNDISCH_TAC` !k. ~(k = i MOD 5) /\ k IN 0..5 - 1 ==> ~cc_qy_v11 cc k `;\r
3892 DISCH_THEN (MP_TAC o (SPEC` ( i + k ) MOD 5 `));\r
3893 ANTS_TAC;\r
3894 CONJ_TAC;\r
3895 \r
3896 \r
3897 MP_TAC (SPECL [` k:num `;` 5 `] Oxl_def.MOD_INJ1_ALT);\r
3898 ANTS_TAC;\r
3899 ASM_REWRITE_TAC[];\r
3900 ARITH_TAC;\r
3901 SIMP_TAC[];\r
3902 MATCH_MP_TAC Oxl_def.MOD_IN_NUMSEG;\r
3903 ARITH_TAC;\r
3904 ASM_REWRITE_TAC[];\r
3905 \r
3906 STRIP_TAC;\r
3907 EXISTS_TAC` 0 `;\r
3908 ASM_REWRITE_TAC[ADD_CLAUSES];\r
3909 ARITH_TAC;\r
3910 \r
3911 SUBGOAL_THEN` SS = { i + k | k < 5 } DIFF S ` ASSUME_TAC;\r
3912 ASM_REWRITE_TAC[];\r
3913 MATCH_MP_TAC (SET_RULE` SS INTER S = {} ==> SS = ( S UNION SS ) DIFF S  `);\r
3914 UNDISCH_TAC` (S:num -> bool) INTER SS = {} `;\r
3915 ASM_REWRITE_TAC[INTER_COMM];\r
3916 SUBGOAL_THEN` SS = { i + k | 0 < k /\ k < 5 } ` ASSUME_TAC;\r
3917 DOWN;\r
3918 FIRST_X_ASSUM SUBST1_TAC;\r
3919 SIMP_TAC[];\r
3920 DISCH_TAC;\r
3921 REWRITE_TAC[EXTENSION; IN_ELIM_THM; IN_DIFF; IN_INSERT; NOT_IN_EMPTY];\r
3922 GEN_TAC;\r
3923 MESON_TAC[ARITH_RULE` ~( 0 < k ) <=> x + k = x `];\r
3924 \r
3925 SUBGOAL_THEN` cc_bool_model_v11 cc /\ cc_real_model_v11 cc ` MP_TAC;\r
3926 ASM_REWRITE_TAC[];\r
3927 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];\r
3928 STRIP_TAC;\r
3929 SUBGOAL_THEN` ! i. i IN SS ==> \r
3930        a_spine5 + b_spine5 * cc_azim_v11 cc i <= cc_gg_v11 cc i ` ASSUME_TAC;\r
3931 EXPAND_TAC "SS";\r
3932 REWRITE_TAC[IN_ELIM_THM];\r
3933 GEN_TAC THEN STRIP_TAC;\r
3934 ASM_SEARCH_TCL [` !i. cc_4cell_v11 cc i ==>\r
3935        a_spine5 + b_spine5 * cc_azim_v11 cc i <= cc_gg_v11 cc i `] MATCH_MP_TAC;\r
3936 ASM_REWRITE_TAC[];\r
3937 DOWN THEN DOWN;\r
3938 SIMP_TAC[cc_qy_v11];\r
3939 \r
3940 DOWN;\r
3941 UNDISCH_TAC` FINITE (SS: num -> bool) `;\r
3942 PHA;\r
3943 NHANH SUM_LE;\r
3944 UNDISCH_TAC` {i + k | k < 5} = S UNION SS `;\r
3945 DISCH_THEN (ASSUME_TAC o SYM);\r
3946 ASM_REWRITE_TAC[];\r
3947 UNDISCH_TAC` SS = {i + k | k < 5} DIFF S `;\r
3948 UNDISCH_TAC` SS = {i + k | 0 < k /\ k < 5} `;\r
3949 ASM_REWRITE_TAC[];\r
3950 DISCH_THEN (ASSUME_TAC o SYM);\r
3951 DISCH_THEN (ASSUME_TAC o SYM);\r
3952 ASM_REWRITE_TAC[SUM_SING; ETA_AX];\r
3953 SUBGOAL_THEN`! a f. (\(i:num). (a:real) + f i ) = (\i. (\i. a ) i + f i )` ASSUME_TAC; \r
3954 REWRITE_TAC[BETA_THM];\r
3955 FIRST_X_ASSUM (fun x -> ONCE_REWRITE_TAC[x]);\r
3956 IMP_TAC;\r
3957 ASM_SIMP_TAC[SUM_ADD; Vol1.SUM_CONST2; SUM_LMUL];\r
3958 SUBGOAL_THEN` CARD {i + k | k < 5 } = 5 ` ASSUME_TAC;\r
3959 MATCH_MP_TAC Topology.CARD_FINITE_SERIES_EQ;\r
3960 GEN_TAC THEN GEN_TAC;\r
3961 ARITH_TAC;\r
3962 SUBGOAL_THEN` CARD ({i + k | k < 5} DIFF {i}) = CARD {i + k | k < 5} - CARD {i} ` ASSUME_TAC;\r
3963 MATCH_MP_TAC CARD_DIFF;\r
3964 ASM_REWRITE_TAC[INSERT_SUBSET];\r
3965 \r
3966 REWRITE_TAC[EMPTY_SUBSET; IN_ELIM_THM];\r
3967 EXISTS_TAC` 0 `;\r
3968 CONJ_TAC;\r
3969 ARITH_TAC;\r
3970 ARITH_TAC;\r
3971 DOWN;\r
3972 ASM_REWRITE_TAC[CARD_SING];\r
3973 STRIP_TAC THEN STRIP_TAC;\r
3974 MP_TAC (GSYM (SPECL [` cc_azim_v11 cc `;` 5`] Oxl_def.periodic_sum));\r
3975 ANTS_TAC;\r
3976 UNDISCH_TAC` periodic (cc_azim_v11 cc) (cc_card_v11 cc)`;\r
3977 ASM_REWRITE_TAC[];\r
3978 SIMP_TAC[];\r
3979 STRIP_TAC;\r
3980 ARITH_TAC;\r
3981 ASM_REWRITE_TAC[ARITH_RULE` 5 - 1 = 4 `];\r
3982 STRIP_TAC;\r
3983 STRIP_TAC;\r
3984 UNDISCH_TAC` sum (0..cc_card_v11 cc - 1) (cc_azim_v11 cc) = &2 * pi `;\r
3985 ASM_REWRITE_TAC[ARITH_RULE` 5 - 1 = 4 `];\r
3986 SUBGOAL_THEN` i.. 4 + i = S UNION SS ` ASSUME_TAC;\r
3987 ASM_REWRITE_TAC[];\r
3988 REWRITE_TAC[numseg; EXTENSION; IN_ELIM_THM];\r
3989 GEN_TAC;\r
3990 EQ_TAC;\r
3991 STRIP_TAC;\r
3992 EXISTS_TAC` x - (i:num) `;\r
3993 DOWN THEN DOWN;\r
3994 ARITH_TAC;\r
3995 STRIP_TAC;\r
3996 DOWN THEN DOWN;\r
3997 ARITH_TAC;\r
3998 \r
3999 \r
4000 FIRST_ASSUM SUBST1_TAC;\r
4001 ASSUME_TAC2 (ISPECL [` cc_azim_v11 cc `;` S: num -> bool `;` SS: num -> bool `] SUM_UNION);\r
4002 FIRST_ASSUM SUBST1_TAC;\r
4003 ASM_REWRITE_TAC[SUM_SING; REAL_ARITH` a + b = x <=> b = x - a` ];\r
4004 STRIP_TAC;\r
4005 UNDISCH_TAC` &4 * a_spine5 + b_spine5 * sum SS (\i. cc_azim_v11 cc i) <=\r
4006       sum SS (cc_gg_v11 cc) `;\r
4007 ASM_REWRITE_TAC[ETA_AX];\r
4008 UNDISCH_TAC` #1.074 <= cc_azim_v11 cc i `;\r
4009 REWRITE_TAC[Sphere.a_spine5; Sphere.b_spine5];\r
4010 MP_TAC (\r
4011 REWRITE_RULE[] (\r
4012 REWRITE_CONV[Flyspeck_constants.bounds]` #3.14159 < pi /\ pi < #3.1416 `));\r
4013 STRIP_TAC THEN STRIP_TAC;\r
4014 MATCH_MP_TAC (REAL_ARITH` &0 <= x + b ==> b <= c ==> &0 <= x + c `);\r
4015 SUBGOAL_THEN` #0.008 * cc_azim_v11 cc i <= cc_gg_v11 cc i ` ASSUME_TAC;\r
4016 ASM_SIMP_TAC[];\r
4017 DOWNS 4;\r
4018 REAL_ARITH_TAC]);;\r
4019 \r
4020 \r
4021 \r
4022 \r
4023 let MOD_INJ11 = REWRITE_RULE[GSYM RIGHT_FORALL_IMP_THM] MOD_INJ1;;\r
4024 \r
4025 \r
4026 let PI_BOUNDS = REWRITE_RULE[] (REWRITE_CONV[Flyspeck_constants.bounds]` #3.14159 < pi /\ pi < #3.1416 `);;\r
4027 \r
4028 \r
4029 \r
4030 \r
4031 let CARD5_LT_1074_QYI = \r
4032 prove_by_refinement (` (cc_bool_model_v11 cc /\\r
4033             cc_bool_prep_v11 cc /\\r
4034             cc_real_model_v11 cc /\\r
4035             sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0 ) /\\r
4036 \r
4037 cc_qy_v11 cc i /\ cc_card_v11 cc = 5 /\\r
4038  cc_azim_v11 cc i <  #1.074\r
4039 ==> &0 <= sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) `,\r
4040 [REPEAT STRIP_TAC;\r
4041 ASSUME_TAC2 QY_NN00 THEN ASSUME_TAC2 QX_NN00;\r
4042 ASSUME_TAC2 EXISTS_QY_CARD5;\r
4043 DOWN_TAC;\r
4044 NHANH Oxl_def.periodic_fn;\r
4045 STRIP_TAC;\r
4046 SUBGOAL_THEN` cc_bool_model_v11 cc /\\r
4047           cc_bool_prep_v11 cc /\\r
4048           cc_real_model_v11 cc ` MP_TAC;\r
4049 ASM_REWRITE_TAC[];\r
4050 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];\r
4051 STRIP_TAC THEN ASSUME_TAC2 UNIQUE_QY;\r
4052 \r
4053 \r
4054 \r
4055 \r
4056 \r
4057 \r
4058 \r
4059 ASM_CASES_TAC` cc_small_eta_v11 cc i \/ cc_small_eta_v11 cc ( i + 1) `;\r
4060 SUBGOAL_THEN` a_spine5 + b_spine5 * cc_azim_v11 cc i <= cc_gg_v11 cc i ` ASSUME_TAC;\r
4061 UNDISCH_TAC` !i. cc_qy_v11 cc i /\\r
4062           cc_small_eta_v11 cc i /\\r
4063           cc_small_eta_v11 cc (i + 1)\r
4064           ==> a_spine5 + b_spine5 * cc_azim_v11 cc i <= cc_gg_v11 cc i `;\r
4065 UNDISCH_TAC` !i. cc_qy_v11 cc i /\\r
4066           ~cc_small_eta_v11 cc i /\\r
4067           cc_small_eta_v11 cc (i + 1) /\\r
4068           cc_azim_v11 cc i < #1.074\r
4069           ==> a_spine5 + b_spine5 * cc_azim_v11 cc i <= cc_gg_v11 cc i `;\r
4070 UNDISCH_TAC` !i. cc_qy_v11 cc i /\\r
4071           cc_small_eta_v11 cc i /\\r
4072           ~cc_small_eta_v11 cc (i + 1) /\\r
4073           cc_azim_v11 cc i < #1.074\r
4074           ==> a_spine5 + b_spine5 * cc_azim_v11 cc i <= cc_gg_v11 cc i `;\r
4075 UNDISCH_TAC` cc_azim_v11 cc i < #1.074 `;\r
4076 UNDISCH_TAC` cc_qy_v11 cc i `;\r
4077 DOWN;\r
4078 MESON_TAC[];\r
4079 \r
4080 \r
4081 MP_TAC (REWRITE_RULE[RIGHT_FORALL_IMP_THM ] (ISPECL [` cc_qy_v11 cc `;` 5 `] periodic_mod));\r
4082 ANTS_TAC;\r
4083 UNDISCH_TAC` periodic (cc_qy_v11 cc) (cc_card_v11 cc ) `;\r
4084 ASM_REWRITE_TAC[];\r
4085 SIMP_TAC[];\r
4086 STRIP_TAC;\r
4087 ARITH_TAC;\r
4088 DISCH_THEN (ASSUME_TAC o GSYM);\r
4089 UNDISCH_TAC` !j. cc_qy_v11 cc j\r
4090           ==> j IN 0..cc_card_v11 cc - 1\r
4091           ==> (!k. ~(k = j)\r
4092                    ==> k IN 0..cc_card_v11 cc - 1\r
4093                    ==> ~cc_qy_v11 cc k) `;\r
4094 PHA;\r
4095 STRIP_TAC;\r
4096 FIRST_ASSUM (MP_TAC o (SPEC` i MOD 5 ` ));\r
4097 ANTS_TAC;\r
4098 ASM_REWRITE_TAC[];\r
4099 ASSUME_TAC (ARITH_RULE` ~( 5 = 0) `);\r
4100 ASM_SIMP_TAC[Oxl_def.MOD_IN_NUMSEG];\r
4101 STRIP_TAC;\r
4102 SUBGOAL_THEN` ! k. 0 < k /\ k < 5 ==> ~cc_qy_v11 cc ((i + k) MOD 5 ) ` ASSUME_TAC;\r
4103 GEN_TAC THEN STRIP_TAC;\r
4104 \r
4105 \r
4106 FIRST_X_ASSUM MATCH_MP_TAC;\r
4107 ASSUME_TAC (ARITH_RULE` ~( 5 = 0) `);\r
4108 ASM_SIMP_TAC[Oxl_def.MOD_IN_NUMSEG];\r
4109 MATCH_MP_TAC (GSYM MOD_INJ11);\r
4110 ASM_REWRITE_TAC[ARITH_RULE` ~( 0 = x) <=> 0 < x `];\r
4111 ARITH_TAC;\r
4112 \r
4113 SUBGOAL_THEN` !k. k < 5 ==> a_spine5 + b_spine5 * cc_azim_v11 cc (i + k ) <= cc_gg_v11 cc (i + k ) ` ASSUME_TAC;\r
4114 GEN_TAC;\r
4115 ASM_CASES_TAC` k = 0 `;\r
4116 ASM_REWRITE_TAC[ADD_CLAUSES];\r
4117 STRIP_TAC;\r
4118 UNDISCH_TAC` !i. cc_4cell_v11 cc i\r
4119           ==> a_spine5 + b_spine5 * cc_azim_v11 cc i <= cc_gg_v11 cc i `;\r
4120 DISCH_THEN MATCH_MP_TAC;\r
4121 UNDISCH_TAC` !k. 0 < k /\ k < 5 ==> ~cc_qy_v11 cc ((i + k) MOD 5) `;\r
4122 ASM_REWRITE_TAC[];\r
4123 REWRITE_TAC[cc_qy_v11];\r
4124 DISCH_THEN MATCH_MP_TAC;\r
4125 DOWN THEN DOWN THEN SIMP_TAC[];\r
4126 ARITH_TAC;\r
4127 MP_TAC (ISPECL [` cc_gg_v11 cc `;` 5 `] Oxl_def.periodic_sum);\r
4128 ANTS_TAC;\r
4129 ASM_REWRITE_TAC[];\r
4130 \r
4131 UNDISCH_TAC` periodic (cc_gg_v11 cc) (cc_card_v11 cc) `;\r
4132 ASM_SIMP_TAC[];\r
4133 ARITH_TAC;\r
4134 \r
4135 DISCH_THEN (ASSUME_TAC o GSYM);\r
4136 ASM_REWRITE_TAC[ARITH_RULE` 5 - 1 = 4 `];\r
4137 SUBGOAL_THEN` ! j. j IN (i..4 + i) ==>  a_spine5 + b_spine5 * cc_azim_v11 cc (j) <=\r
4138               cc_gg_v11 cc (j) ` ASSUME_TAC;\r
4139 GEN_TAC;\r
4140 REWRITE_TAC[IN_NUMSEG];\r
4141 ABBREV_TAC` ij = j - (i:num) `;\r
4142 NHANH (ARITH_RULE` (i:num) <= j ==> j = i + ( j - i) ` );\r
4143 ASM_REWRITE_TAC[];\r
4144 STRIP_TAC;\r
4145 UNDISCH_TAC` j = i + ij:num `;\r
4146 DISCH_THEN SUBST1_TAC;\r
4147 FIRST_X_ASSUM MATCH_MP_TAC;\r
4148 EXPAND_TAC "ij";\r
4149 UNDISCH_TAC` j <= 4 + i `;\r
4150 ARITH_TAC;\r
4151 UNDISCH_TAC` !j. j IN i..4 + i\r
4152           ==> a_spine5 + b_spine5 * cc_azim_v11 cc j <= cc_gg_v11 cc j ` ;\r
4153 NHANH (REWRITE_RULE[GSYM IN_NUMSEG] SUM_LE_NUMSEG);\r
4154 \r
4155 \r
4156 REWRITE_TAC[SUM_ADD_NUMSEG; ETA_AX;SUM_CONST_NUMSEG; SUM_LMUL];\r
4157 REWRITE_TAC[ARITH_RULE` ((4 + i) + 1) - i = 5 `];\r
4158 IMP_TAC;\r
4159 STRIP_TAC;\r
4160 SUBST_ALL_TAC (ARITH_RULE` 5 - 1 = 4 `);\r
4161 ASM_REWRITE_TAC[];\r
4162 MATCH_MP_TAC (REAL_ARITH` c <= b ==> b <= a ==> c <= a `);\r
4163 UNDISCH_TAC` sum (0..cc_card_v11 cc - 1) (cc_azim_v11 cc) = &2 * pi `;\r
4164 MP_TAC (ISPECL [` cc_azim_v11 cc `;` 5 `] Oxl_def.periodic_sum);\r
4165 ANTS_TAC;\r
4166 UNDISCH_TAC` periodic (cc_azim_v11 cc) (cc_card_v11 cc) ` ;\r
4167 ASM_REWRITE_TAC[];\r
4168 SIMP_TAC[];\r
4169 ARITH_TAC;\r
4170 \r
4171 \r
4172 ASM_SIMP_TAC[ARITH_RULE` 5 - 1 + i = 4 + i `];\r
4173 STRIP_TAC THEN STRIP_TAC;\r
4174 REWRITE_TAC[Sphere.a_spine5; Sphere.b_spine5];\r
4175 MP_TAC PI_BOUNDS;\r
4176 REAL_ARITH_TAC;\r
4177 \r
4178 UNDISCH_TAC` ~(cc_small_eta_v11 cc i \/ cc_small_eta_v11 cc (i + 1)) `;\r
4179 REWRITE_TAC[DE_MORGAN_THM];\r
4180 STRIP_TAC;\r
4181 \r
4182 \r
4183 FIRST_ASSUM (MP_TAC o (SPEC` i MOD 5 `));\r
4184 PHA;\r
4185 MP_TAC (\r
4186 REWRITE_RULE[RIGHT_FORALL_IMP_THM ] (ISPECL [` cc_qy_v11 cc `;` 5 `] Oxl_def.periodic_mod));\r
4187 ANTS_TAC;\r
4188 ABBREV_TAC` nn = cc_card_v11 cc `;\r
4189 SUBST_ALL_TAC (MESON[]` nn = 5 <=> 5 = nn `);\r
4190 ASM_REWRITE_TAC[];\r
4191 DISCH_THEN (ASSUME_TAC o GSYM);\r
4192 \r
4193 \r
4194 ASM_REWRITE_TAC[];\r
4195 ANTS_TAC;\r
4196 ASSUME_TAC (ARITH_RULE` ~( 5 = 0) `);\r
4197 ASM_SIMP_TAC[MOD_IN_NUMSEG];\r
4198 STRIP_TAC;\r
4199 SUBGOAL_THEN` ! k. 0 < k /\ k < 5 ==> ~ cc_qy_v11 cc ( i + k ) ` ASSUME_TAC;\r
4200 GEN_TAC THEN STRIP_TAC;\r
4201 FIRST_X_ASSUM (MP_TAC o (SPEC` (i + k) MOD 5 `));\r
4202 ANTS_TAC;\r
4203 ASSUME_TAC (ARITH_RULE` ~( 5 = 0) `);\r
4204 ASM_SIMP_TAC[MOD_IN_NUMSEG];\r
4205 MATCH_MP_TAC (GSYM MOD_INJ11);\r
4206 ASM_REWRITE_TAC[ARITH_RULE` ~( 0 = k ) <=> 0 < k `];\r
4207 ASM_SIMP_TAC[];\r
4208 \r
4209 \r
4210 \r
4211 ARITH_TAC;\r
4212 ASM_REWRITE_TAC[];\r
4213 SUBGOAL_THEN` ! i. -- cc_eps <= cc_gg_v11 cc i ` ASSUME_TAC;\r
4214 GEN_TAC;\r
4215 ASM_CASES_TAC` cc_qy_v11 cc i'' ` ;\r
4216 DOWN;\r
4217 ASM_SEARCH_TCL [` cc_qy_v11 cc i ==> &0 <= cc_gg_v11 cc i `] NHANH;\r
4218 REWRITE_TAC[Oxl_def.cc_eps];\r
4219 REAL_ARITH_TAC;\r
4220 ASM_CASES_TAC` cc_qx_v11 cc i'' ` ;\r
4221 DOWN;\r
4222 ASM_SEARCH_TCL [` cc_qx_v11 cc i ==> &0 <= cc_gg_v11 cc i `] NHANH;\r
4223 REWRITE_TAC[Oxl_def.cc_eps];\r
4224 REAL_ARITH_TAC;\r
4225 MP_TAC (SPEC` i'':num ` QU_OR_QXY);\r
4226 ASM_REWRITE_TAC[];\r
4227 \r
4228 \r
4229 \r
4230 \r
4231 \r
4232 \r
4233 \r
4234 \r
4235 \r
4236 \r
4237 \r
4238 \r
4239 SUBGOAL_THEN` &0 <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1) + cc_gg_v11 cc (i + 2) ` ASSUME_TAC;\r
4240 ASM_CASES_TAC` cc_qu_v11 cc (i + 1 ) ` ;\r
4241 ASM_SEARCH_TCL [`cc_qu_v11 cc i /\ ~cc_small_eta_v11 cc i`;` cc_eps <= x`] (MP_TAC o (SPEC ` i + 1 `));\r
4242 ANTS_TAC;\r
4243 ASM_REWRITE_TAC[];\r
4244 \r
4245 FIRST_X_ASSUM (MP_TAC o (SPEC ` i + 2 `));\r
4246 PHA;\r
4247 MATCH_MP_TAC (REAL_ARITH` &0 <= x ==> -- a <= z /\ a <= y ==> &0 <= x + y + z `);\r
4248 UNDISCH_TAC` cc_qy_v11 cc i `;\r
4249 ASM_REWRITE_TAC[];\r
4250 ASM_CASES_TAC` cc_qx_v11 cc (i + 1 ) `;\r
4251 \r
4252 \r
4253 \r
4254 ASM_CASES_TAC` ~ cc_small_v11 cc ( i + 2 ) ` ;\r
4255 SUBGOAL_THEN` ~ cc_qu_v11 cc ( i + 1) /\ ~ cc_qu_v11 cc ( i + 2) ` ASSUME_TAC;\r
4256 DOWN;\r
4257 SIMP_TAC[cc_qu_v11; cc_hassmall_v11; ARITH_RULE` (i + 1 ) + 1 = i + 2 `];\r
4258 MP_TAC (SPEC` i + 1 ` QU_OR_QXY);\r
4259 MP_TAC (SPEC` i + 2 ` QU_OR_QXY);\r
4260 ASM_REWRITE_TAC[];\r
4261 \r
4262 DISCH_TAC;\r
4263 SUBGOAL_THEN` &0 <= cc_gg_v11 cc (i + 2) ` ASSUME_TAC;\r
4264 UNDISCH_TAC` !i. cc_qx_v11 cc i ==> &0 <= cc_gg_v11 cc i `;\r
4265 UNDISCH_TAC` !i. cc_qy_v11 cc i ==> &0 <= cc_gg_v11 cc i `;\r
4266 DOWN;\r
4267 MESON_TAC[];\r
4268 SUBGOAL_THEN` &0 <= cc_gg_v11 cc ( i + 1) ` MP_TAC;\r
4269 UNDISCH_TAC` cc_qx_v11 cc (i + 1) `;\r
4270 ASM_REWRITE_TAC[];\r
4271 SUBGOAL_THEN` &0 <= cc_gg3b_v11 cc i ` MP_TAC;\r
4272 UNDISCH_TAC` cc_qy_v11 cc i `;\r
4273 ASM_REWRITE_TAC[];\r
4274 DOWN;\r
4275 REAL_ARITH_TAC;\r
4276 \r
4277 ASM_CASES_TAC` ~ cc_small_v11 cc (i + 1) `;\r
4278 ASM_SEARCH_TCL [` cc_qx_v11 cc i /\ cc_small_v11 cc (i + 1) /\ ~cc_small_v11 cc i\r
4279        ==> cc_eps <= cc_gg_v11 cc i`] (MP_TAC o (SPEC` i + 1 `));\r
4280 ANTS_TAC;\r
4281 ASM_REWRITE_TAC[ARITH_RULE` ( i + 1) + 1 = i + 2 `];\r
4282 UNDISCH_TAC` ~ ~cc_small_v11 cc (i + 2) `;\r
4283 SIMP_TAC[];\r
4284 \r
4285 \r
4286 FIRST_X_ASSUM (MP_TAC o (SPEC ` i + 2 `));\r
4287 SUBGOAL_THEN` &0 <= cc_gg3b_v11 cc i ` MP_TAC;\r
4288 ASM_SIMP_TAC[];\r
4289 REAL_ARITH_TAC;\r
4290 \r
4291 ASM_SEARCH_TCL [` !i. cc_qx_v11 cc (i + 1) /\ cc_hassmall_v11 cc (i + 1) /\ cc_qy_v11 cc i\r
4292        ==> cc_eps <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1) `] (MP_TAC o (SPEC ` i :num ` ));\r
4293 ANTS_TAC;\r
4294 DOWN THEN DOWN;\r
4295 ASM_SIMP_TAC[cc_hassmall_v11; ARITH_RULE` (i + 1) + 1 = i + 2 `];\r
4296 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc (i + 2) ` MP_TAC;\r
4297 ASM_REWRITE_TAC[];\r
4298 REAL_ARITH_TAC;\r
4299 \r
4300 \r
4301 MP_TAC (SPEC` i + 1 ` QU_OR_QXY);\r
4302 ASM_REWRITE_TAC[];\r
4303 SUBGOAL_THEN` ~ cc_qy_v11 cc (i + 1) ` MP_TAC;\r
4304 FIRST_X_ASSUM MATCH_MP_TAC;\r
4305 ARITH_TAC;\r
4306 SIMP_TAC[];\r
4307 \r
4308 SUBGOAL_THEN` &0 <= cc_gg3a_v11 cc i + cc_gg_v11 cc ( i + 3) + cc_gg_v11 cc ( i + 4 ) ` ASSUME_TAC;\r
4309 ASM_CASES_TAC` ~ cc_small_v11 cc ( i + 4 ) ` ;\r
4310 SUBGOAL_THEN` &0 <= cc_gg_v11 cc (i + 3) /\ &0 <= cc_gg_v11 cc (i + 4 ) ` ASSUME_TAC;\r
4311 SUBGOAL_THEN` ~cc_qu_v11 cc (i + 3) /\ ~cc_qu_v11 cc ( i + 4) ` MP_TAC;\r
4312 DOWN;\r
4313 SIMP_TAC[cc_qu_v11; cc_hassmall_v11; ARITH_RULE` (i + 3 ) + 1 = i + 4 `];\r
4314 STRIP_TAC;\r
4315 MP_TAC (SPEC` i + 3 ` QU_OR_QXY);\r
4316 MP_TAC (SPEC` i + 4 ` QU_OR_QXY);\r
4317 ASM_REWRITE_TAC[];\r
4318 UNDISCH_TAC` !i. cc_qx_v11 cc i ==> &0 <= cc_gg_v11 cc i `;\r
4319 UNDISCH_TAC` !i. cc_qy_v11 cc i ==> &0 <= cc_gg_v11 cc i `;\r
4320 MESON_TAC[];\r
4321 SUBGOAL_THEN` &0 <= cc_gg3a_v11 cc i ` MP_TAC;\r
4322 ASM_SIMP_TAC[];\r
4323 DOWN;\r
4324 REAL_ARITH_TAC;\r
4325 DOWN;\r
4326 REWRITE_TAC[];\r
4327 SUBGOAL_THEN` ~cc_small_eta_v11 cc ((i + 5 ) MOD 5 ) ` ASSUME_TAC;\r
4328 MP_TAC (\r
4329 REWRITE_RULE[RIGHT_FORALL_IMP_THM] (\r
4330 ISPECL [` cc_small_eta_v11 cc `; ` 5 `] Oxl_def.periodic_mod));\r
4331 ANTS_TAC;\r
4332 ASM_REWRITE_TAC[];\r
4333 ABBREV_TAC` nn = cc_card_v11 cc `;\r
4334 SUBST_ALL_TAC (MESON[]` nn = 5 <=> 5 = nn `);\r
4335 ASM_REWRITE_TAC[];\r
4336 \r
4337 DISCH_THEN (ASSUME_TAC o GSYM);\r
4338 ONCE_REWRITE_TAC[ARITH_RULE` i + 5 = 1 * 5 + i `];\r
4339 REWRITE_TAC[MOD_MULT_ADD];\r
4340 ASM_REWRITE_TAC[];\r
4341 STRIP_TAC;\r
4342 MP_TAC (\r
4343 REWRITE_RULE[RIGHT_FORALL_IMP_THM] (\r
4344 ISPECL [` cc_small_eta_v11 cc `; ` 5 `] Oxl_def.periodic_mod));\r
4345 ANTS_TAC;\r
4346 ASM_REWRITE_TAC[];\r
4347 ABBREV_TAC` nn = cc_card_v11 cc `;\r
4348 SUBST_ALL_TAC (MESON[]` nn = 5 <=> 5 = nn `);\r
4349 ASM_REWRITE_TAC[];\r
4350 DISCH_THEN (ASSUME_TAC o GSYM);\r
4351 \r
4352 UNDISCH_TAC` ~cc_small_eta_v11 cc ((i + 5) MOD 5) `;\r
4353 ASM_REWRITE_TAC[];\r
4354 STRIP_TAC;\r
4355 ASM_CASES_TAC` cc_qu_v11 cc (i + 4 ) ` ;\r
4356 UNDISCH_TAC` !i. cc_qu_v11 cc i /\ ~cc_small_eta_v11 cc (i + 1)\r
4357        ==> cc_eps <= cc_gg_v11 cc i `;\r
4358 DISCH_THEN (MP_TAC o (SPEC` i + 4 `));\r
4359 ANTS_TAC;\r
4360 ASM_REWRITE_TAC[ARITH_RULE` (i + 4 ) + 1 = i + 5 `];\r
4361 SUBGOAL_THEN` --cc_eps <= cc_gg_v11 cc (i + 3) ` MP_TAC;\r
4362 ASM_REWRITE_TAC[];\r
4363 SUBGOAL_THEN` &0 <= cc_gg3a_v11 cc i ` MP_TAC;\r
4364 ASM_SIMP_TAC[];\r
4365 REAL_ARITH_TAC;\r
4366 \r
4367 ASM_CASES_TAC` cc_qx_v11 cc ( i + 4) `;\r
4368 ASM_CASES_TAC`~ cc_small_v11 cc ( i + 5 ) `;\r
4369 UNDISCH_TAC` !i. cc_qx_v11 cc i /\ cc_small_v11 cc i /\ ~cc_small_v11 cc (i + 1)\r
4370        ==> cc_eps <= cc_gg_v11 cc i `;\r
4371 DISCH_THEN (MP_TAC o (SPEC` i + 4 `));\r
4372 ANTS_TAC;\r
4373 ASM_REWRITE_TAC[ARITH_RULE` (i + 4 ) + 1 = i + 5 ` ];\r
4374 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc ( i + 3 ) ` MP_TAC;\r
4375 ASM_REWRITE_TAC[];\r
4376 SUBGOAL_THEN` &0 <= cc_gg3a_v11 cc i ` MP_TAC;\r
4377 ASM_SIMP_TAC[];\r
4378 REAL_ARITH_TAC;\r
4379 \r
4380 UNDISCH_TAC` !i. cc_qx_v11 cc i /\ cc_hassmall_v11 cc i /\ cc_qy_v11 cc (i + 1)\r
4381        ==> cc_eps <= cc_gg_v11 cc i + cc_gg3a_v11 cc (i + 1) `;\r
4382 DISCH_THEN (MP_TAC o (SPEC` i + 4 `));\r
4383 ANTS_TAC;\r
4384 DOWN;\r
4385 ASM_SIMP_TAC[cc_hassmall_v11; ARITH_RULE` (i + 4) + 1 = i + 5 `];\r
4386 STRIP_TAC;\r
4387 SUBGOAL_THEN` cc_qy_v11 cc ((i + 5) MOD 5 ) ` MP_TAC;\r
4388 ONCE_REWRITE_TAC[ARITH_RULE` i + 5 = 1 * 5 + i `];\r
4389 REWRITE_TAC[MOD_MULT_ADD];\r
4390 ASM_REWRITE_TAC[];\r
4391 ASM_REWRITE_TAC[];\r
4392 \r
4393 ASM_REWRITE_TAC[ARITH_RULE` (i + 4) + 1 = i + 5 `];\r
4394 UNDISCH_TAC` periodic (cc_gg3a_v11 cc) (cc_card_v11 cc) `;\r
4395 ASM_REWRITE_TAC[];\r
4396 STRIP_TAC;\r
4397 MP_TAC (let tt = REWRITE_RULE[RIGHT_FORALL_IMP_THM] Oxl_def.periodic_mod in\r
4398 ISPECL [` cc_gg3a_v11 cc `; ` 5 `] tt);\r
4399 ANTS_TAC;\r
4400 ASM_REWRITE_TAC[];\r
4401 ARITH_TAC;\r
4402 DISCH_THEN (ASSUME_TAC o GSYM);\r
4403 \r
4404 SUBGOAL_THEN` cc_gg3a_v11 cc ((i + 5) MOD 5) = cc_gg3a_v11 cc (i) ` MP_TAC;\r
4405 ONCE_REWRITE_TAC[ARITH_RULE` i + 5 = 1 * 5 + i `];\r
4406 REWRITE_TAC[MOD_MULT_ADD];\r
4407 ASM_REWRITE_TAC[];\r
4408 ASM_SIMP_TAC[];\r
4409 \r
4410 STRIP_TAC;\r
4411 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc (i + 3 ) ` MP_TAC;\r
4412 ASM_REWRITE_TAC[];\r
4413 REAL_ARITH_TAC;\r
4414 SUBGOAL_THEN` ~ cc_qy_v11 cc (( i + 4 ) MOD 5) ` ASSUME_TAC;\r
4415 FIRST_X_ASSUM MATCH_MP_TAC;\r
4416 ASSUME_TAC (ARITH_RULE` ~( 5 = 0) `);\r
4417 ASM_SIMP_TAC[MOD_IN_NUMSEG];\r
4418 MATCH_MP_TAC (GSYM MOD_INJ11);\r
4419 ARITH_TAC;\r
4420 MP_TAC (SPEC` i + 4 ` QU_OR_QXY);\r
4421 DOWN;\r
4422 ASM_REWRITE_TAC[];\r
4423 SIMP_TAC[];\r
4424 ASM_SEARCH_TCL [` cc_gg3a_v11 cc i + x <= y`] (ASSUME_TAC2 o SPEC_ALL);\r
4425 MP_TAC (ARITH_RULE` ~( 5 = 0) `);\r
4426 UNDISCH_TAC` periodic (cc_gg_v11 cc ) (cc_card_v11 cc) `;\r
4427 ASM_REWRITE_TAC[];\r
4428 PHA;\r
4429 NHANH Oxl_def.periodic_sum;\r
4430 STRIP_TAC;\r
4431 FIRST_X_ASSUM (ASSUME_TAC o GSYM);\r
4432 ASM_SIMP_TAC[];\r
4433 ONCE_REWRITE_TAC[ADD_SYM];\r
4434 SIMP_TAC[SUM_CLAUSES_LEFT; ARITH_RULE` 5 - 1 = 4 /\ i <= i + 4 /\ i + 1 <= i + 4 /\\r
4435 i + 2 <= i + 4 /\ i + 3 <= i + 4 /\ i + 4 <= i + 4 /\ (i + 1 ) + 1 = i + 2 `];\r
4436 SIMP_TAC[SUM_CLAUSES_LEFT; ARITH_RULE` (i + 1) + 2 <= i + 4 /\ ((i + 1) + 2) + 1 = i + 4`];\r
4437 REWRITE_TAC[SUM_SING_NUMSEG; ARITH_RULE` (i + 1) + 2 = i + 3 `];\r
4438 UNDISCH_TAC` cc_gg3a_v11 cc i + cc_gg3b_v11 cc i <= cc_gg_v11 cc i `;\r
4439 UNDISCH_TAC` &0 <= cc_gg3a_v11 cc i + cc_gg_v11 cc (i + 3) + cc_gg_v11 cc (i + 4) `;\r
4440 UNDISCH_TAC` &0 <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1) + cc_gg_v11 cc (i + 2) `;\r
4441 REAL_ARITH_TAC]);;\r
4442 \r
4443 \r
4444 \r
4445 \r
4446 \r
4447 \r
4448 \r
4449 let PRE_IPVICGW = prove_by_refinement (\r
4450 ` (cc_bool_model_v11 cc /\\r
4451       cc_bool_prep_v11 cc /\\r
4452       cc_real_model_v11 cc /\\r
4453       sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0) /\\r
4454      cc_card_v11 cc = 5 \r
4455 ==> &0 <= sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) `,\r
4456 [NHANH EXISTS_QY_CARD5;\r
4457 STRIP_TAC;\r
4458 ASM_CASES_TAC` cc_azim_v11 cc i < #1.074 `;\r
4459 ASSUME_TAC2 CARD5_LT_1074_QYI;\r
4460 ASM_REWRITE_TAC[];\r
4461 \r
4462 MATCH_MP_TAC CARD5_1074_LE_QYI;\r
4463 ASM_REWRITE_TAC[REAL_ARITH` x <= y <=> ~( y < x ) `];\r
4464 ASSUME_TAC2 QY_NN00 THEN ASSUME_TAC2 QX_NN00;\r
4465 ASSUME_TAC2 EXISTS_QY_CARD5;\r
4466 DOWN_TAC;\r
4467 NHANH Oxl_def.periodic_fn;\r
4468 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];\r
4469 ONCE_REWRITE_TAC[TAUT` ~ a <=> a ==> F `];\r
4470 IMP_TAC;\r
4471 IMP_TAC;\r
4472 STRIP_TAC;\r
4473 STRIP_TAC;\r
4474 STRIP_TAC;\r
4475 \r
4476 ABBREV_TAC` nn = cc_card_v11 cc `;\r
4477 ASM_REWRITE_TAC[REAL_ARITH` ~( a < b) <=> b <= a `];\r
4478 DOWN;\r
4479 SUBST_ALL_TAC (MESON[]` nn = 5 <=> 5 = nn `);\r
4480 ASM_REWRITE_TAC[]]);;\r
4481 \r
4482 \r
4483 \r
4484 let CC_CARD_LESS_THAN_5 = prove_by_refinement(` cc_bool_model_v11 cc /\\r
4485             cc_bool_prep_v11 cc /\\r
4486             cc_real_model_v11 cc /\\r
4487             sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0\r
4488             ==> cc_card_v11 cc <= 5 `,\r
4489 \r
4490 \r
4491 [NHANH LXDEYBO;\r
4492 NHANH UNPNFVW;\r
4493 REWRITE_TAC[cc_size_v11; cc_qy_v11];\r
4494 MP_TAC (SET_RULE` DISJOINT {i | i IN 0..cc_card_v11 cc - 1 /\ ~cc_4cell_v11 cc i} {i | i IN 0..cc_card_v11 cc - 1 /\ cc_4cell_v11 cc i} `);\r
4495 MP_TAC (SET_RULE` {i | i IN 0..cc_card_v11 cc - 1 /\ ~cc_4cell_v11 cc i} UNION {i | i IN 0..cc_card_v11 cc - 1 /\ cc_4cell_v11 cc i} = 0..cc_card_v11 cc - 1 `);\r
4496 REPEAT STRIP_TAC;\r
4497 ABBREV_TAC` s1 = {i | i IN 0..cc_card_v11 cc - 1 /\ ~cc_4cell_v11 cc i} `;\r
4498 ABBREV_TAC` s2 = {i | i IN 0..cc_card_v11 cc - 1 /\ cc_4cell_v11 cc i}`;\r
4499 SUBGOAL_THEN` FINITE (s1:num -> bool) ` ASSUME_TAC;\r
4500 MATCH_MP_TAC FINITE_SUBSET;\r
4501 EXISTS_TAC` 0.. cc_card_v11 cc - 1 `;\r
4502 REWRITE_TAC[FINITE_NUMSEG];\r
4503 EXPAND_TAC "s1";\r
4504 SET_TAC[];\r
4505 SUBGOAL_THEN` FINITE (s2:num -> bool) ` ASSUME_TAC;\r
4506 MATCH_MP_TAC FINITE_SUBSET;\r
4507 EXISTS_TAC` 0.. cc_card_v11 cc - 1 `;\r
4508 REWRITE_TAC[FINITE_NUMSEG];\r
4509 EXPAND_TAC "s2";\r
4510 SET_TAC[];\r
4511 \r
4512 MP_TAC (ISPECL [` s1:num -> bool `; ` s2: num -> bool `] CARD_UNION);\r
4513 ANTS_TAC;\r
4514 ASM_REWRITE_TAC[GSYM DISJOINT];\r
4515 \r
4516 \r
4517 \r
4518 ASM_REWRITE_TAC[CARD_NUMSEG];\r
4519 ASSUME_TAC2 (prove(` cc_bool_model_v11 cc ==> ~( cc_card_v11 cc = 0) `, SIMP_TAC[cc_bool_model_v11]));\r
4520 ASM_SEARCH_TCL [` x <= 1 `] MP_TAC;\r
4521 ASM_SEARCH_TCL [` x <= 4 `] MP_TAC;\r
4522 ARITH_TAC]);;\r
4523 \r
4524 \r
4525 \r
4526 \r
4527 \r
4528 let IPVICGW = prove_by_refinement(`!cc. cc_bool_model_v11 cc /\\r
4529         cc_bool_prep_v11 cc /\\r
4530         cc_real_model_v11 cc /\\r
4531         sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0\r
4532         ==> (!i. cc_small_v11 cc i)`,\r
4533 [NHANH CC_CARD_LESS_THAN_5 ; NHANH THREE_LE_CC_CARD;\r
4534 PHA; REWRITE_TAC[ARITH_RULE` 3 <= x /\ x <= 5 <=> x = 3 \/ x = 4 \/ x = 5 `];\r
4535 MESON_TAC[IPVICGW_C43_C44; IPVICGW_C33; PRE_IPVICGW; REAL_ARITH` a < b ==> ~( b <= a )`]]);;\r
4536 \r
4537 \r
4538 \r
4539 \r
4540 let RSIWAMP = prove_by_refinement (\r
4541 `!cc. cc_bool_model_v11 cc /\ cc_bool_prep_v11 cc /\ cc_real_model_v11 cc /\ \r
4542    (sum (0..cc_card_v11 cc -1) (cc_gg_v11 cc) < &0) ==> (cc_card_v11 cc <= 4)`,\r
4543 [NHANH CC_CARD_LESS_THAN_5;\r
4544 REWRITE_TAC[ARITH_RULE` a <= 5 <=> a <= 4 \/ a = 5 `];\r
4545 GEN_TAC THEN STRIP_TAC;\r
4546 ASSUME_TAC2 PRE_IPVICGW;\r
4547 DOWN;\r
4548 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0 ) `]]);;\r
4549 \r
4550 \r
4551 \r
4552 \r
4553 \r
4554 \r
4555 \r
4556 let C5_QY_ALONG_NOT_SMALL1 = prove_by_refinement\r
4557 (` (!i. cc_qx_v11 cc i ==> &0 <= cc_gg_v11 cc i) /\\r
4558 (!i. cc_qy_v11 cc i ==> &0 <= cc_gg_v11 cc i) /\\r
4559 (!i. cc_qy_v11 cc i\r
4560           ==> cc_gg3a_v11 cc i + cc_gg3b_v11 cc i <= cc_gg_v11 cc i) /\\r
4561      (!i. cc_qy_v11 cc i ==> &0 <= cc_gg3a_v11 cc i) /\\r
4562      (!i. cqu cc (i + 1) /\ cc_qy_v11 cc i\r
4563           ==> cc_eps <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1)) /\\r
4564    (!i. cc_qx_v11 cc i /\ cc_small_v11 cc i /\ ~cc_small_v11 cc (i + 1)\r
4565           ==> cc_eps <= cc_gg_v11 cc i) /\\r
4566 ( !i. cqu cc i ==> --cc_eps <= cc_gg_v11 cc i ) /\\r
4567 ~ cc_small_v11 cc i /\ ~cc_small_v11 cc (i + 5) /\\r
4568           ~cc_small_v11 cc i /\\r
4569           cc_qy_v11 cc i /\\r
4570           cqu cc (i + 1) /\ cc_qx_v11 cc (i + 4) /\\r
4571 ( !cc i.\r
4572          cqu cc i <=>\r
4573          cc_hassmall_v11 cc i /\ cc_4cell_v11 cc i /\ cc_subcrit_v11 cc i ) /\\r
4574 ( !cc i.\r
4575          cc_hassmall_v11 cc i <=>\r
4576          cc_small_v11 cc i /\ cc_small_v11 cc (i + 1) ) /\\r
4577 \r
4578 bb = (cqu cc (i + 2) \/ cc_qx_v11 cc (i + 2) \/ cc_qy_v11 cc (i + 2)) /\\r
4579 bb /\\r
4580 (! i.  cqu cc i \/ cc_qx_v11 cc i \/ cc_qy_v11 cc i ) /\\r
4581 (((!i. cc_qy_v11 cc i\r
4582        ==> cc_gg3a_v11 cc i + cc_gg3b_v11 cc i <= cc_gg_v11 cc i) /\\r
4583   (!i. cc_qy_v11 cc i ==> &0 <= cc_gg3a_v11 cc i) /\\r
4584   (!i. cqu cc (i + 1) /\ cc_qy_v11 cc i\r
4585        ==> cc_eps <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1))\r
4586   ==> cqu cc (i + 1) /\ cc_qy_v11 cc i\r
4587   ==> cc_eps <= cc_gg_v11 cc i + cc_gg_v11 cc (i + 1)))\r
4588 ==> &0 <= sum (i..i + 4) (cc_gg_v11 cc) `,\r
4589 [ASM_SIMP_TAC[SUM_CLAUSES_LEFT; ARITH_RULE` i <= i + 4 /\ i + 1 <= i + 4 /\ (i + 1) + 1 = i + 2 `];\r
4590 SIMP_TAC[SUM_CLAUSES_LEFT; ARITH_RULE` i + 2 <= i + 4 /\ (i + 2) + 1 = i + 3 /\ i + 3 <= i + 4 /\ (i + 3 ) + 1 = i + 4 `; SUM_SING_NUMSEG];\r
4591 STRIP_TAC;\r
4592 FIRST_X_ASSUM MP_TAC;\r
4593 ANTS_TAC;\r
4594 ASM_REWRITE_TAC[];\r
4595 ANTS_TAC;\r
4596 ASM_REWRITE_TAC[];\r
4597 STRIP_TAC;\r
4598 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc (i + 2) ` ASSUME_TAC;\r
4599 ASM_CASES_TAC` cc_qy_v11 cc (i + 2) ` ;\r
4600 SUBGOAL_THEN` &0 <= cc_gg_v11 cc ( i + 2) ` MP_TAC;\r
4601 ASM_SIMP_TAC[];\r
4602 REWRITE_TAC[Oxl_def.cc_eps];\r
4603 REAL_ARITH_TAC;\r
4604 ASM_CASES_TAC` cc_qx_v11 cc (i + 2) ` ;\r
4605 SUBGOAL_THEN` &0 <= cc_gg_v11 cc ( i + 2) ` MP_TAC;\r
4606 ASM_SIMP_TAC[];\r
4607 REWRITE_TAC[Oxl_def.cc_eps];\r
4608 REAL_ARITH_TAC;\r
4609 UNDISCH_TAC` bb: bool `;\r
4610 \r
4611 FIRST_X_ASSUM SUBST1_TAC;\r
4612 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN SIMP_TAC[];\r
4613 STRIP_TAC THEN STRIP_TAC;\r
4614 ASM_REWRITE_TAC[];\r
4615 \r
4616 SUBGOAL_THEN` &0 <= cc_gg_v11 cc (i + 3) + cc_gg_v11 cc (i + 4) ` ASSUME_TAC;\r
4617 ASM_CASES_TAC` cc_qy_v11 cc (i + 3) `;\r
4618 MATCH_MP_TAC REAL_LE_ADD;\r
4619 ASM_SIMP_TAC[];\r
4620 ASM_CASES_TAC` cc_qx_v11 cc (i + 3) ` ;\r
4621 MATCH_MP_TAC REAL_LE_ADD;\r
4622 ASM_SIMP_TAC[];\r
4623 FIRST_ASSUM (MP_TAC o (SPEC` i + 3 `));\r
4624 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN SIMP_TAC[];\r
4625 FIRST_X_ASSUM NHANH;\r
4626 ASM_REWRITE_TAC[cc_hassmall_v11; ARITH_RULE` (i + 3) + 1 = i + 4 `];\r
4627 REPEAT STRIP_TAC;\r
4628 SUBGOAL_THEN` cc_eps <= cc_gg_v11 cc (i + 4) ` MP_TAC;\r
4629 FIRST_X_ASSUM MATCH_MP_TAC;\r
4630 ASM_REWRITE_TAC[ARITH_RULE` (i + 4) + 1 = i + 5 `];\r
4631 DOWN;\r
4632 REAL_ARITH_TAC;\r
4633 DOWNS 3;\r
4634 REAL_ARITH_TAC]);;\r
4635 \r
4636 \r
4637 \r
4638 \r
4639 \r
4640 \r
4641 let C5_QY_ALONG_NOT_SMALL2 = prove_by_refinement\r
4642 (` (!i. (cqx: cc_v11 -> num -> bool) cc i ==> &0 <= (ggg: cc_v11 -> num -> real) cc i) /\\r
4643      (!i. cqy cc i ==> &0 <= (ggg: cc_v11 -> num -> real) cc i) /\\r
4644      (!i. cqy cc i ==> gga cc i + ggb cc i <= (ggg: cc_v11 -> num -> real) cc i) /\\r
4645      (!i. cqy cc i ==> &0 <= gga cc i) /\\r
4646      (!i. cqu cc (i + 1) /\ cqy cc i\r
4647           ==> cc_eps <= ggb cc i + (ggg: cc_v11 -> num -> real) cc (i + 1)) /\\r
4648      (!i. (cqx: cc_v11 -> num -> bool) cc i /\ csmall cc i /\ ~csmall cc (i + 1)\r
4649           ==> cc_eps <= (ggg: cc_v11 -> num -> real) cc i) /\\r
4650      (!i. cqu cc i ==> --cc_eps <= (ggg: cc_v11 -> num -> real) cc i) /\\r
4651      ~csmall cc i /\\r
4652      ~csmall cc (i + 5) /\\r
4653      ~csmall cc i /\\r
4654      cqy cc i /\\r
4655      cqu cc (i + 1) /\\r
4656      (cqx: cc_v11 -> num -> bool) cc (i + 4) /\\r
4657      (!cc i.\r
4658           cqu cc i <=>\r
4659           hasmal cc i /\ fcell cc i /\ subcrt cc i) /\\r
4660      (!cc i.\r
4661           hasmal cc i <=>\r
4662           csmall cc i /\ csmall cc (i + 1)) /\\r
4663      (bb <=> cqu cc (i + 2) \/ (cqx: cc_v11 -> num -> bool) cc (i + 2) \/ cqy cc (i + 2)) /\\r
4664      bb /\\r
4665      (!i. cqu cc i \/ (cqx: cc_v11 -> num -> bool) cc i \/ cqy cc i) /\\r
4666      ((!i. cqy cc i ==> gga cc i + ggb cc i <= (ggg: cc_v11 -> num -> real) cc i) /\\r
4667       (!i. cqy cc i ==> &0 <= gga cc i) /\\r
4668       (!i. cqu cc (i + 1) /\ cqy cc i\r
4669            ==> cc_eps <= ggb cc i + (ggg: cc_v11 -> num -> real) cc (i + 1))\r
4670       ==> cqu cc (i + 1) /\ cqy cc i\r
4671       ==> cc_eps <= (ggg: cc_v11 -> num -> real) cc i + (ggg: cc_v11 -> num -> real) cc (i + 1))\r
4672      ==> &0 <= sum (i..i + 4) ((ggg: cc_v11 -> num -> real) cc) `,\r
4673 [ASM_SIMP_TAC[SUM_CLAUSES_LEFT; ARITH_RULE` i <= i + 4 /\ i + 1 <= i + 4 /\ (i + 1) + 1 = i + 2 `];\r
4674 SIMP_TAC[SUM_CLAUSES_LEFT; ARITH_RULE` i + 2 <= i + 4 /\ (i + 2) + 1 = i + 3 /\ i + 3 <= i + 4 /\ (i + 3 ) + 1 = i + 4 `; SUM_SING_NUMSEG];\r
4675 STRIP_TAC;\r
4676 FIRST_X_ASSUM MP_TAC;\r
4677 ANTS_TAC;\r
4678 ASM_REWRITE_TAC[];\r
4679 ANTS_TAC;\r
4680 ASM_REWRITE_TAC[];\r
4681 STRIP_TAC;\r
4682 SUBGOAL_THEN` -- cc_eps <= (ggg: cc_v11 -> num -> real) cc (i + 2) ` ASSUME_TAC;\r
4683 ASM_CASES_TAC` (cqy: cc_v11 -> num -> bool) cc (i + 2) ` ;\r
4684 SUBGOAL_THEN` &0 <= (ggg: cc_v11 -> num -> real) cc ( i + 2) ` MP_TAC;\r
4685 ASM_SIMP_TAC[];\r
4686 REWRITE_TAC[Oxl_def.cc_eps];\r
4687 REAL_ARITH_TAC;\r
4688 ASM_CASES_TAC` (cqx: cc_v11 -> num -> bool) cc (i + 2) ` ;\r
4689 SUBGOAL_THEN` &0 <= (ggg: cc_v11 -> num -> real) cc ( i + 2) ` MP_TAC;\r
4690 ASM_SIMP_TAC[];\r
4691 REWRITE_TAC[Oxl_def.cc_eps];\r
4692 REAL_ARITH_TAC;\r
4693 UNDISCH_TAC` bb: bool `;\r
4694 \r
4695 FIRST_X_ASSUM SUBST1_TAC;\r
4696 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN SIMP_TAC[];\r
4697 STRIP_TAC THEN STRIP_TAC;\r
4698 ASM_REWRITE_TAC[];\r
4699 \r
4700 SUBGOAL_THEN` &0 <= (ggg: cc_v11 -> num -> real) cc (i + 3) + (ggg: cc_v11 -> num -> real) cc (i + 4) ` ASSUME_TAC;\r
4701 ASM_CASES_TAC` (cqy: cc_v11 -> num -> bool) cc (i + 3) `;\r
4702 MATCH_MP_TAC REAL_LE_ADD;\r
4703 ASM_SIMP_TAC[];\r
4704 ASM_CASES_TAC` (cqx: cc_v11 -> num -> bool) cc (i + 3) ` ;\r
4705 MATCH_MP_TAC REAL_LE_ADD;\r
4706 ASM_SIMP_TAC[];\r
4707 FIRST_ASSUM (MP_TAC o (SPEC` i + 3 `));\r
4708 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN SIMP_TAC[];\r
4709 FIRST_X_ASSUM NHANH;\r
4710 ASM_REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `];\r
4711 REPEAT STRIP_TAC;\r
4712 SUBGOAL_THEN` cc_eps <= (ggg: cc_v11 -> num -> real) cc (i + 4) ` MP_TAC;\r
4713 FIRST_X_ASSUM MATCH_MP_TAC;\r
4714 ASM_REWRITE_TAC[ARITH_RULE` (i + 4) + 1 = i + 5 `];\r
4715 DOWN;\r
4716 REAL_ARITH_TAC;\r
4717 DOWNS 3;\r
4718 REAL_ARITH_TAC]);;\r
4719 \r
4720 \r
4721 \r
4722 \r
4723 \r
4724 \r
4725 \r
4726 let LITTLE_CC_GGAA = prove(` (!i. cc_qy_v11 cc i\r
4727           ==> cc_gg3a_v11 cc i + cc_gg3b_v11 cc i <= cc_gg_v11 cc i ) /\\r
4728  (!i. cc_qy_v11 cc i ==> &0 <= cc_gg3b_v11 cc i) /\\r
4729 (!i. cc_qx_v11 cc i /\ cc_hassmall_v11 cc i /\ cc_qy_v11 cc (i + 1)\r
4730           ==> cc_eps <= cc_gg_v11 cc i + cc_gg3a_v11 cc (i + 1)) \r
4731 ==> cc_qx_v11 cc (i) /\ cc_hassmall_v11 cc i /\ cc_qy_v11 cc (i + 1)\r
4732 ==> cc_eps <= cc_gg_v11 cc i + cc_gg_v11 cc (i + 1) `,\r
4733 STRIP_TAC THEN FIRST_X_ASSUM NHANH THEN FIRST_X_ASSUM NHANH THEN \r
4734 FIRST_X_ASSUM NHANH THEN REAL_ARITH_TAC);;\r
4735 \r
4736 \r
4737 let LITTLE_CC_GGBB = prove(` (!i. cc_qy_v11 cc i\r
4738           ==> cc_gg3a_v11 cc i + cc_gg3b_v11 cc i <= cc_gg_v11 cc i ) /\\r
4739  (!i. cc_qy_v11 cc i ==> &0 <= cc_gg3a_v11 cc i) /\\r
4740 (!i. cc_qx_v11 cc (i + 1) /\ cc_hassmall_v11 cc (i + 1) /\ cc_qy_v11 cc i\r
4741           ==> cc_eps <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1)) \r
4742 ==> cc_qx_v11 cc (i + 1) /\ cc_hassmall_v11 cc (i + 1) /\ cc_qy_v11 cc i\r
4743 ==> cc_eps <= cc_gg_v11 cc i + cc_gg_v11 cc (i + 1) `,\r
4744 STRIP_TAC THEN FIRST_X_ASSUM NHANH THEN FIRST_X_ASSUM NHANH THEN \r
4745 FIRST_X_ASSUM NHANH THEN REAL_ARITH_TAC);;\r
4746 \r
4747 \r
4748 \r
4749 \r
4750 \r
4751 \r
4752 \r
4753 \r
4754 \r
4755 let C5_QX_NEXT_TO_QY = prove_by_refinement(`((cc_bool_model_v11 cc /\\r
4756        cc_bool_prep_v11 cc /\\r
4757        cc_real_model_v11 cc /\\r
4758        sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0) /\\r
4759       cc_card_v11 cc = 5) /\\r
4760      ~cc_small_v11 cc i /\\r
4761      cc_qy_v11 cc (i) /\\r
4762      cc_qx_v11 cc (i + 1)\r
4763      ==> F `,\r
4764 \r
4765 [\r
4766 REPEAT STRIP_TAC;\r
4767 ASSUME_TAC2 UNIQUE_QY;\r
4768 ASSUME_TAC2 QY_NN00; ASSUME_TAC2 QX_NN00;\r
4769 ASSUME_TAC2 EXISTS_QY_CARD5;\r
4770 DOWN_TAC;\r
4771 NHANH Oxl_def.periodic_fn;\r
4772 \r
4773 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];\r
4774 ONCE_REWRITE_TAC[TAUT` ~ a <=> a ==> F `];\r
4775 IMP_TAC;\r
4776 IMP_TAC;\r
4777 STRIP_TAC;\r
4778 STRIP_TAC;\r
4779 STRIP_TAC;\r
4780 \r
4781 ABBREV_TAC` nn = cc_card_v11 cc ` ;\r
4782 SUBGOAL_THEN` ~ cc_small_v11 cc (i + nn) ` ASSUME_TAC;\r
4783 ASM_SEARCH_TCL [` periodic ( cc_small_v11 cc) `] MP_TAC;\r
4784 SIMP_TAC[Oxl_def.periodic];\r
4785 ASM_REWRITE_TAC[];\r
4786 SUBGOAL_THEN` ~ cc_qu_v11 cc (i + 4 ) ` ASSUME_TAC;\r
4787 SWITCH_TAC` nn = 5 `;\r
4788 ASM_REWRITE_TAC[cc_qu_v11; cc_hassmall_v11 ; ARITH_RULE` (i + 4) + 1 = i + 5 `];\r
4789 ASSUME_TAC2 (ISPECL [` cc_qy_v11 cc `;` nn:num` ;` i:num `] Oxl_def.periodic_mod);\r
4790 ASSUME_TAC2 (ISPECL [` cc_qx_v11 cc `;` nn:num` ;` i + 4 `] Oxl_def.periodic_mod);\r
4791 ASSUME_TAC2 (ISPECL [` cc_qy_v11 cc `;` nn:num` ;` i + 4 `] Oxl_def.periodic_mod);\r
4792 SUBGOAL_THEN` ~ cc_qy_v11 cc (i + 4) ` ASSUME_TAC;\r
4793 DOWN THEN DOWN THEN DOWN;\r
4794 REPLICATE_TAC 3 (DISCH_THEN (ASSUME_TAC o SYM));\r
4795 FIRST_ASSUM (SUBST1_TAC o SYM);\r
4796 SUBGOAL_THEN` cc_qy_v11 cc (i MOD nn) /\ (i MOD nn) IN 0..nn - 1` MP_TAC;\r
4797 SWITCH_TAC` nn = 5 `;\r
4798 ASM_SIMP_TAC[MOD_IN_NUMSEG];\r
4799 ASM_SEARCH_TCL [` cc_qy_v11 cc x /\ x IN 0..nn - 1 `] NHANH;\r
4800 STRIP_TAC;\r
4801 \r
4802 FIRST_X_ASSUM MATCH_MP_TAC;\r
4803 SWITCH_TAC` nn = 5 `;\r
4804 ASM_SIMP_TAC[MOD_IN_NUMSEG];\r
4805 MP_TAC (SPECL [` 4 `;` nn:num `] (GEN_ALL MOD_INJ1));\r
4806 ANTS_TAC;\r
4807 ASM_REWRITE_TAC[];\r
4808 EXPAND_TAC "nn";\r
4809 ARITH_TAC;\r
4810 SIMP_TAC[];\r
4811 MP_TAC (SPEC` i + 4 ` QU_OR_QXY);\r
4812 ASM_REWRITE_TAC[];\r
4813 STRIP_TAC;\r
4814 REPLICATE_TAC 5 DOWN;\r
4815 REPLICATE_TAC 3 (DISCH_THEN (ASSUME_TAC o SYM));\r
4816 STRIP_TAC;\r
4817 SWITCH_TAC` nn = 5 `;\r
4818 ASM_REWRITE_TAC[];\r
4819 STRIP_TAC;\r
4820 SUBGOAL_THEN` &0 <= cc_gg_v11 cc i + cc_gg_v11 cc (i + 1) + cc_gg_v11 cc (i + 2 ) ` ASSUME_TAC;\r
4821 ASM_CASES_TAC` cc_qy_v11 cc (i + 2) `;\r
4822 MATCH_MP_TAC REAL_LE_ADD;\r
4823 ASM_SIMP_TAC[];\r
4824 MATCH_MP_TAC REAL_LE_ADD;\r
4825 ASM_SIMP_TAC[];\r
4826 ASM_CASES_TAC` cc_qx_v11 cc (i + 2) ` ;\r
4827 MATCH_MP_TAC REAL_LE_ADD;\r
4828 ASM_SIMP_TAC[];\r
4829 MATCH_MP_TAC REAL_LE_ADD;\r
4830 ASM_SIMP_TAC[];\r
4831 MP_TAC (SPEC` i + 2 ` QU_OR_QXY);\r
4832 ASM_REWRITE_TAC[];\r
4833 ASM_SEARCH_TCL [` -- cc_eps <= x `] NHANH;\r
4834 NHANH QU_IMP_SMALL;\r
4835 STRIP_TAC;\r
4836 ASM_CASES_TAC` cc_small_v11 cc (i + 1) `;\r
4837 SUBGOAL_THEN` cc_eps <= cc_gg_v11 cc i + cc_gg_v11 cc (i + 1) ` ASSUME_TAC;\r
4838 MP_TAC LITTLE_CC_GGBB;\r
4839 PHA;\r
4840 ANTS_TAC;\r
4841 ASM_REWRITE_TAC[cc_hassmall_v11; ARITH_RULE` (i + 1) + 1 = i + 2 `];\r
4842 SIMP_TAC[];\r
4843 DOWNS 3;\r
4844 REAL_ARITH_TAC;\r
4845 SUBGOAL_THEN` cc_eps <= cc_gg_v11 cc (i + 1) ` ASSUME_TAC;\r
4846 ASM_SEARCH_TCL [` a /\ b (i + 1) /\ ~ c ==> cc_eps <= x `;` cc_small_v11 `] MATCH_MP_TAC;\r
4847 ASM_SIMP_TAC[ARITH_RULE` (i + 1 ) + 1 = i + 2 `];\r
4848 SUBGOAL_THEN` &0 <= cc_gg_v11 cc i ` MP_TAC;\r
4849 ASM_SIMP_TAC[];\r
4850 DOWNS 3;\r
4851 REAL_ARITH_TAC;\r
4852 \r
4853 \r
4854 \r
4855 \r
4856 \r
4857 SUBGOAL_THEN` &0 <= cc_gg_v11 cc (i + 3) + cc_gg_v11 cc (i + 4 ) ` ASSUME_TAC;\r
4858 ASM_CASES_TAC` cc_qy_v11 cc (i + 3) `;\r
4859 MATCH_MP_TAC REAL_LE_ADD;\r
4860 ASM_SIMP_TAC[];\r
4861 ASM_CASES_TAC` cc_qx_v11 cc (i + 3) ` ;\r
4862 MATCH_MP_TAC REAL_LE_ADD;\r
4863 ASM_SIMP_TAC[];\r
4864 MP_TAC (SPEC` i + 3 ` QU_OR_QXY);\r
4865 ASM_REWRITE_TAC[];\r
4866 NHANH QU_IMP_SMALL;\r
4867 REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `];\r
4868 STRIP_TAC;\r
4869 ASM_SEARCH_TCL [` a /\ b /\ ~ c (i + 1) ==> cc_eps <= x `] (MP_TAC o (SPEC` i + 4 `));\r
4870 ANTS_TAC;\r
4871 ASM_REWRITE_TAC[ARITH_RULE` (i + 4) + 1 = i + 5 `];\r
4872 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc (i + 3) ` MP_TAC;\r
4873 ASM_SIMP_TAC[];\r
4874 REAL_ARITH_TAC;\r
4875 \r
4876 \r
4877 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc) ` MP_TAC;\r
4878 ASSUME_TAC2 (ISPECL [` cc_gg_v11 cc `;` nn:num ` ] Oxl_def.periodic_sum);\r
4879 FIRST_X_ASSUM (SUBST1_TAC o SYM o (SPEC_ALL));\r
4880 EXPAND_TAC "nn";\r
4881 SIMP_TAC[ARITH_RULE` 5 - 1 + i = i + 4 `; SUM_CLAUSES_LEFT; ARITH_RULE` i <= i + 4 /\ i + 1 <= i + 4 /\ (i + 1) + 1 = i + 2 `];\r
4882 SIMP_TAC[SUM_CLAUSES_LEFT; ARITH_RULE` i + 2 <= i + 4 /\ (i + 2) + 1 = i + 3 /\ i + 3 <= i + 4 /\ (i + 3 ) + 1 = i + 4 `; SUM_SING_NUMSEG]; DOWNS 2;\r
4883 REAL_ARITH_TAC;\r
4884 ASM_REWRITE_TAC[REAL_ARITH` ~( &0 <= x) <=> x < &0 `]]);;\r
4885 \r
4886 \r
4887 \r
4888 \r
4889 \r
4890 \r
4891 let LEAST_BOUND_CC_GG = prove(` (!i. cc_qu_v11 cc i ==> --cc_eps <= cc_gg_v11 cc i) /\\r
4892   (!i. cc_qx_v11 cc i ==> &0 <= cc_gg_v11 cc i) /\\r
4893  (!i. cc_qy_v11 cc i ==> &0 <= cc_gg_v11 cc i) \r
4894 ==> (! i. -- cc_eps <= cc_gg_v11 cc i) `,\r
4895 SUBGOAL_THEN` -- cc_eps <= &0 ` MP_TAC THENL [\r
4896 REWRITE_TAC[Oxl_def.cc_eps] THEN \r
4897 REAL_ARITH_TAC; MESON_TAC[REAL_LE_TRANS; QU_OR_QXY]]);;\r
4898 \r
4899 \r
4900 \r
4901 \r
4902 \r
4903 \r
4904 \r
4905 let C5_QX_NEXT_TO_QY_LEFT = prove_by_refinement(` ((cc_bool_model_v11 cc /\\r
4906        cc_bool_prep_v11 cc /\\r
4907        cc_real_model_v11 cc /\\r
4908        sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0) /\\r
4909       cc_card_v11 cc = 5) /\\r
4910      ~cc_small_v11 cc i /\\r
4911      cc_qx_v11 cc i /\\r
4912      cc_qy_v11 cc (i + 4) /\\r
4913 cc_qx_v11 cc ( i + 3 )\r
4914      ==> F `,\r
4915 [\r
4916 REPEAT STRIP_TAC;\r
4917 ASSUME_TAC2 UNIQUE_QY;\r
4918 ASSUME_TAC2 QY_NN00; ASSUME_TAC2 QX_NN00;\r
4919 ASSUME_TAC2 EXISTS_QY_CARD5;\r
4920 DOWN_TAC;\r
4921 NHANH Oxl_def.periodic_fn;\r
4922 \r
4923 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];\r
4924 ONCE_REWRITE_TAC[TAUT` ~ a <=> a ==> F `];\r
4925 IMP_TAC;\r
4926 IMP_TAC;\r
4927 STRIP_TAC;\r
4928 STRIP_TAC;\r
4929 STRIP_TAC;\r
4930 \r
4931 ABBREV_TAC` nn = cc_card_v11 cc ` ;\r
4932 SUBGOAL_THEN` ~ cc_small_v11 cc (i + nn) ` ASSUME_TAC;\r
4933 ASM_SEARCH_TCL [` periodic ( cc_small_v11 cc) `] MP_TAC;\r
4934 SIMP_TAC[Oxl_def.periodic];\r
4935 ASM_REWRITE_TAC[];\r
4936 \r
4937 SWITCH_TAC` nn = 5 `;\r
4938 SUBGOAL_THEN` &0 <= cc_gg_v11 cc (i + 2) + cc_gg_v11 cc (i + 3) + cc_gg_v11 cc (i + 4) ` ASSUME_TAC;\r
4939 \r
4940 \r
4941 ASM_CASES_TAC` cc_qy_v11 cc ( i + 2 ) `;\r
4942 MATCH_MP_TAC REAL_LE_ADD;\r
4943 ASM_SIMP_TAC[];\r
4944 MATCH_MP_TAC REAL_LE_ADD;\r
4945 ASM_SIMP_TAC[];\r
4946 ASM_CASES_TAC` cc_qx_v11 cc ( i + 2 ) `;\r
4947 MATCH_MP_TAC REAL_LE_ADD;\r
4948 ASM_SIMP_TAC[];\r
4949 MATCH_MP_TAC REAL_LE_ADD;\r
4950 ASM_SIMP_TAC[];\r
4951 MP_TAC (SPEC` i + 2 ` QU_OR_QXY);\r
4952 ASM_SIMP_TAC[];\r
4953 ASM_SEARCH_TCL [` cc_qu_v11 cc i ==> -- x <= y `] NHANH;\r
4954 NHANH QU_IMP_SMALL;\r
4955 REWRITE_TAC[ARITH_RULE` (i + 2) + 1 = i + 3 `];\r
4956 STRIP_TAC;\r
4957 ASM_CASES_TAC` cc_small_v11 cc (i + 4) `;\r
4958 MP_TAC (SPEC` i + 3 ` (GEN` i:num ` LITTLE_CC_GGAA));\r
4959 PHA;\r
4960 ANTS_TAC;\r
4961 ASM_REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `; cc_hassmall_v11];\r
4962 \r
4963 ASM_REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `];\r
4964 ASSUME_TAC2 LEAST_BOUND_CC_GG;\r
4965 FIRST_X_ASSUM (MP_TAC o (SPEC` i + 2 `));\r
4966 REAL_ARITH_TAC;\r
4967 ASM_SEARCH_TCL [` a /\ b /\ ~ c (i + 1)  ==> cc_eps <= y `] (MP_TAC o (SPEC` i + 3 `));\r
4968 ANTS_TAC;\r
4969 ASM_REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `];\r
4970 SUBGOAL_THEN` &0 <= cc_gg_v11 cc (i + 4) ` MP_TAC;\r
4971 ASM_SIMP_TAC[];\r
4972 UNDISCH_TAC` --cc_eps <= cc_gg_v11 cc (i + 2) ` ;\r
4973 REAL_ARITH_TAC;\r
4974 \r
4975 SUBGOAL_THEN` &0 <= cc_gg_v11 cc i + cc_gg_v11 cc ( i + 1) ` ASSUME_TAC;\r
4976 ASM_CASES_TAC` cc_qy_v11 cc (i + 1) `;\r
4977 MATCH_MP_TAC REAL_LE_ADD;\r
4978 ASM_SIMP_TAC[];\r
4979 ASM_CASES_TAC` cc_qx_v11 cc (i + 1) `;\r
4980 MATCH_MP_TAC REAL_LE_ADD;\r
4981 ASM_SIMP_TAC[];\r
4982 MP_TAC (SPEC` i + 1 ` QU_OR_QXY);\r
4983 ASM_REWRITE_TAC[];\r
4984 NHANH QU_IMP_SMALL;\r
4985 STRIP_TAC;\r
4986 ASM_SEARCH_TCL [` a /\ b (i + 1) /\ ~ c (i)  ==> cc_eps <= y `] (ASSUME_TAC2 o (SPEC` i:num `));\r
4987 ASSUME_TAC2 LEAST_BOUND_CC_GG;\r
4988 FIRST_X_ASSUM (MP_TAC o (SPEC` i + 1 `));\r
4989 DOWN;\r
4990 REAL_ARITH_TAC;\r
4991 \r
4992 \r
4993 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc) ` MP_TAC;\r
4994 ASSUME_TAC2 (ISPECL [` cc_gg_v11 cc `;` nn:num ` ] Oxl_def.periodic_sum);\r
4995 FIRST_X_ASSUM (SUBST1_TAC o SYM o (SPEC_ALL));\r
4996 EXPAND_TAC "nn";\r
4997 SIMP_TAC[ARITH_RULE` 5 - 1 + i = i + 4 `; SUM_CLAUSES_LEFT; ARITH_RULE` i <= i + 4 /\ i + 1 <= i + 4 /\ (i + 1) + 1 = i + 2 `];\r
4998 SIMP_TAC[SUM_CLAUSES_LEFT; ARITH_RULE` i + 2 <= i + 4 /\ (i + 2) + 1 = i + 3 /\ i + 3 <= i + 4 /\ (i + 3 ) + 1 = i + 4 `; SUM_SING_NUMSEG];\r
4999 \r
5000 \r
5001 \r
5002  DOWNS 2;\r
5003 REAL_ARITH_TAC;\r
5004 ASM_REWRITE_TAC[REAL_ARITH` ~( &0 <= x) <=> x < &0 `]]);;\r
5005 \r
5006 \r
5007 \r
5008 \r
5009 \r
5010 \r
5011 let BOOL_MODEL_PERIODIC_SMALL = prove(` cc_bool_model_v11 cc ==> \r
5012 periodic (cc_small_v11 cc ) (cc_card_v11 cc) `,\r
5013 SIMP_TAC[cc_bool_model_v11]);;\r
5014 \r
5015 \r
5016 \r
5017 \r
5018 \r
5019 let QY_UNIQUE_ANY_SEGMENGT = prove_by_refinement\r
5020 (` cc_bool_model_v11 cc /\\r
5021             cc_bool_prep_v11 cc /\\r
5022             cc_real_model_v11 cc /\\r
5023             sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0\r
5024             ==> (!j. cc_qy_v11 cc j \r
5025                      ==> (!k. ~(k = j) /\ k IN j..cc_card_v11 cc - 1 + j\r
5026                               ==> ~cc_qy_v11 cc k)) `,\r
5027 [NHANH UNIQUE_QY;\r
5028 NHANH Oxl_def.periodic_fn;\r
5029 REWRITE_TAC[cc_bool_model_v11];\r
5030 REPEAT STRIP_TAC;\r
5031 ABBREV_TAC` nn = cc_card_v11 cc `;\r
5032 FIRST_X_ASSUM (MP_TAC o (SPEC` j MOD nn`));\r
5033 ANTS_TAC;\r
5034 ASM_SIMP_TAC[MOD_IN_NUMSEG];\r
5035 ASSUME_TAC2 (ISPECL [` cc_qy_v11 cc `;` nn:num `;`j:num `] Oxl_def.periodic_mod);\r
5036 FIRST_X_ASSUM (SUBST1_TAC o SYM);\r
5037 FIRST_ASSUM ACCEPT_TAC;\r
5038 MP_TAC (SPECL [` k - (j:num) `;` nn:num `] (GEN_ALL MOD_INJ1));\r
5039 ANTS_TAC;\r
5040 UNDISCH_TAC` k IN j..nn - 1 + j `;\r
5041 ASM_REWRITE_TAC[IN_NUMSEG; ARITH_RULE` j <= (k:num) <=> j = k \/ j < k `];\r
5042 UNDISCH_TAC` ~( nn = 0) `;\r
5043 ARITH_TAC;\r
5044 UNDISCH_TAC` k IN j..nn - 1 + j `;\r
5045 ASM_REWRITE_TAC[IN_NUMSEG];\r
5046 STRIP_TAC;\r
5047 DISCH_THEN (MP_TAC o (SPEC` j:num `));\r
5048 ASM_SIMP_TAC[ARITH_RULE` j <= k ==> j + k - j = (k:num) `];\r
5049 STRIP_TAC;\r
5050 STRIP_TAC;\r
5051 FIRST_X_ASSUM (MP_TAC o (SPEC` k MOD nn `));\r
5052 ANTS_TAC;\r
5053 ASM_SIMP_TAC[GSYM IN_NUMSEG; MOD_IN_NUMSEG];\r
5054 ASSUME_TAC2 (ISPECL [` cc_qy_v11 cc `;` nn:num `;`k:num `] Oxl_def.periodic_mod);\r
5055 FIRST_X_ASSUM (SUBST1_TAC o SYM);\r
5056 ASM_REWRITE_TAC[]]);;\r
5057 \r
5058 \r
5059 \r
5060 \r
5061 \r
5062 \r
5063 let periodic_mod1 = \r
5064 REWRITE_RULE[RIGHT_FORALL_IMP_THM] periodic_mod;;\r
5065 \r
5066 \r
5067 \r
5068 \r
5069 \r
5070 let LITTLE_CC_GG3BB = prove(`    (!i. cc_qy_v11 cc i ==> &0 <= cc_gg3b_v11 cc i) /\\r
5071        (!i. cc_qu_v11 cc (i + 1) /\ cc_qy_v11 cc i\r
5072             ==> &0 <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1)) /\\r
5073 (! i. cc_qy_v11 cc i ==> &0 <= cc_gg_v11 cc i ) /\\r
5074 (! i. cc_qx_v11 cc i ==> &0 <= cc_gg_v11 cc i ) /\\r
5075        cc_qy_v11 cc i\r
5076        ==> &0 <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1) `,\r
5077 MP_TAC (SPEC` i + 1 ` QU_OR_QXY) THEN \r
5078 MESON_TAC[REAL_ARITH` &0 <= a /\ &0 <= b ==> &0 <= a + b `]);;\r
5079 \r
5080 \r
5081 \r
5082 let MOD_ADD_CANCEL = \r
5083 REWRITE_RULE[ARITH_RULE` 1 * n + p = p + n ` ] (\r
5084 SPEC` 1 ` MOD_MULT_ADD);;\r
5085 \r
5086 \r
5087 \r
5088 let LITTLE_CC_GG3AA = prove_by_refinement(\r
5089 `    (!i. cc_qy_v11 cc i ==> &0 <= cc_gg3a_v11 cc i) /\\r
5090       (!i. cc_qu_v11 cc i /\ cc_qy_v11 cc (i + 1)\r
5091                  ==> &0 <= cc_gg_v11 cc i + cc_gg3a_v11 cc (i + 1)) /\\r
5092 (! i. cc_qy_v11 cc i ==> &0 <= cc_gg_v11 cc i ) /\\r
5093 (! i. cc_qx_v11 cc i ==> &0 <= cc_gg_v11 cc i ) /\\r
5094 periodic (cc_qy_v11 cc ) nn /\\r
5095 periodic (cc_gg3a_v11 cc ) nn /\\r
5096 ~( nn = 0)\r
5097        /\ cc_qy_v11 cc i\r
5098        ==> &0 <= cc_gg_v11 cc ( i + nn - 1 ) + cc_gg3a_v11 cc (i) `,\r
5099 [ASM_CASES_TAC` cc_qx_v11 cc (i + nn - 1) \/ cc_qy_v11 cc ( i + nn - 1 ) `;\r
5100 DOWN;\r
5101 MESON_TAC[REAL_ARITH` &0 <= a /\ &0 <= b ==> &0 <= a + b `];\r
5102 MP_TAC (SPEC` i + nn - 1 ` QU_OR_QXY);\r
5103 ASM_REWRITE_TAC[];\r
5104 ABBREV_TAC` nii = i + nn - 1 `;\r
5105 STRIP_TAC;\r
5106 STRIP_TAC;\r
5107 UNDISCH_TAC` !i. cc_qu_v11 cc i /\ cc_qy_v11 cc (i + 1)\r
5108           ==> &0 <= cc_gg_v11 cc i + cc_gg3a_v11 cc (i + 1) `;\r
5109 DISCH_THEN (MP_TAC o (SPEC` nii: num `));\r
5110 ANTS_TAC;\r
5111 ASM_REWRITE_TAC[];\r
5112 ASSUME_TAC2 (ARITH_RULE ` ~( nn = 0) ==> (i + nn - 1 ) + 1 = i + nn `);\r
5113 DOWN;\r
5114 ASM_REWRITE_TAC[];\r
5115 SIMP_TAC[];\r
5116 ASSUME_TAC2 (ISPECL [` cc_qy_v11 cc `;` nn:num `] periodic_mod1);\r
5117 FIRST_X_ASSUM (ASSUME_TAC o GSYM);\r
5118 SUBGOAL_THEN` cc_qy_v11 cc ((i + nn) MOD nn) ` ASSUME_TAC;\r
5119 REWRITE_TAC[MOD_ADD_CANCEL];\r
5120 ASM_REWRITE_TAC[];\r
5121 DOWN;\r
5122 ASM_SIMP_TAC[];\r
5123 \r
5124 SUBGOAL_THEN` nii + 1 = i + nn ` ASSUME_TAC;\r
5125 EXPAND_TAC "nii";\r
5126 UNDISCH_TAC` ~( nn = 0) `;\r
5127 ARITH_TAC;\r
5128 ASM_REWRITE_TAC[];\r
5129 \r
5130 ASSUME_TAC2 (ISPECL [` cc_gg3a_v11 cc `; `nn:num `] periodic_mod1);\r
5131 FIRST_X_ASSUM (ASSUME_TAC o GSYM);\r
5132 SUBGOAL_THEN` cc_gg3a_v11 cc ((i + nn) MOD nn) = cc_gg3a_v11 cc i ` MP_TAC;\r
5133 REWRITE_TAC[MOD_ADD_CANCEL];\r
5134 ASM_REWRITE_TAC[];\r
5135 \r
5136 ASM_SIMP_TAC[]]);;\r
5137 \r
5138 \r
5139 \r
5140 let SUM_NUMSEG2 = \r
5141 SIMP_RULE[ARITH_RULE`m <= m + 1`; SUM_SING_NUMSEG] (SPEC` m + 1` (GEN` n:num ` (SPEC_ALL SUM_CLAUSES_LEFT)));;\r
5142 \r
5143 let SUM_NUMSEG33 = \r
5144 SIMP_RULE[ARITH_RULE`m <= m + 2 /\ m + 2 = (m + 1 ) + 1`; SUM_NUMSEG2] (SPEC` m + 2` (GEN` n:num ` (SPEC_ALL SUM_CLAUSES_LEFT)));;\r
5145 \r
5146 \r
5147 let SUM_NUMSEG3 =\r
5148 REWRITE_RULE[ARITH_RULE` (a + 1) + 1 = a + 2 `]  SUM_NUMSEG33;;\r
5149 \r
5150 \r
5151 let SUM_NUMSEG44 = \r
5152 SIMP_RULE[ARITH_RULE`m <= m + 3 /\ m + 3 = (m + 1 ) + 2 `; SUM_NUMSEG3] (SPEC` m + 3` (GEN` n:num ` (SPEC_ALL SUM_CLAUSES_LEFT)));;\r
5153 \r
5154 let SUM_NUMSEG4 = \r
5155 REWRITE_RULE[ARITH_RULE` (m + 1) + 2 = m + 3 /\ (m + 1) + 1 = m + 2 `] SUM_NUMSEG44;;\r
5156 \r
5157 \r
5158 \r
5159 \r
5160 \r
5161 let UTEOITF_concl = `!cc. cc_bool_model_v11 cc /\ cc_bool_prep_v11 cc /\ cc_real_model_v11 cc /\ \r
5162    (sum (0..cc_card_v11 cc -1) (cc_gg_v11 cc) < &0) ==> (!i. cc_4cell_v11 cc i)`;;\r
5163 \r
5164 \r
5165 \r
5166 let UTEOITF = prove_by_refinement(UTEOITF_concl,\r
5167 [GEN_TAC;\r
5168 NHANH RSIWAMP;\r
5169 STRIP_TAC THEN ASSUME_TAC2 QY_NN00 THEN ASSUME_TAC2 QX_NN00;\r
5170 ASM_CASES_TAC` !i. cc_4cell_v11 cc i `;\r
5171 ASM_REWRITE_TAC[];\r
5172 DOWN;\r
5173 REWRITE_TAC[NOT_FORALL_THM; GSYM cc_qy_v11];\r
5174 STRIP_TAC;\r
5175 ASSUME_TAC2 RSIWAMP;\r
5176 ASSUME_TAC2 THREE_LE_CC_CARD;\r
5177 ASSUME_TAC2 IPVICGW;\r
5178 ASSUME_TAC2 UNIQUE_QY;\r
5179 DOWN_TAC;\r
5180 NHANH Oxl_def.periodic_fn;\r
5181 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];\r
5182 ABBREV_TAC` nn = cc_card_v11 cc `;\r
5183 STRIP_TAC;\r
5184 \r
5185 \r
5186 \r
5187 ASM_CASES_TAC` nn = 3 `;\r
5188 SUBGOAL_THEN` &0 <= cc_gg3a_v11 cc i /\ &0 <= cc_gg3b_v11 cc i ` MP_TAC;\r
5189 ASM_SIMP_TAC[];\r
5190 STRIP_TAC;\r
5191 SUBGOAL_THEN` &0 <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1) ` ASSUME_TAC;\r
5192 ASM_CASES_TAC` cc_qy_v11 cc (i + 1) `;\r
5193 SUBGOAL_THEN` &0 <= cc_gg_v11 cc ( i + 1) ` MP_TAC;\r
5194 ASM_SIMP_TAC[];\r
5195 UNDISCH_TAC` &0 <= cc_gg3b_v11 cc i `;\r
5196 REAL_ARITH_TAC;\r
5197 ASM_CASES_TAC` cc_qx_v11 cc (i + 1) `;\r
5198 SUBGOAL_THEN` &0 <= cc_gg_v11 cc ( i + 1) ` MP_TAC;\r
5199 ASM_SIMP_TAC[];\r
5200 UNDISCH_TAC` &0 <= cc_gg3b_v11 cc i `;\r
5201 REAL_ARITH_TAC;\r
5202 MP_TAC (SPEC` i + 1 ` QU_OR_QXY);\r
5203 ASM_REWRITE_TAC[];\r
5204 STRIP_TAC;\r
5205 FIRST_X_ASSUM MATCH_MP_TAC;\r
5206 ASM_REWRITE_TAC[];\r
5207 MP_TAC (GSYM (\r
5208 ISPECL [` cc_qy_v11 cc `;` nn:num `] periodic_mod1));\r
5209 ANTS_TAC;\r
5210 ASM_REWRITE_TAC[];\r
5211 UNDISCH_TAC` nn = 3 `;\r
5212 DISCH_THEN (ASSUME_TAC o SYM);\r
5213 ASM_REWRITE_TAC[];\r
5214 STRIP_TAC;\r
5215 SUBGOAL_THEN` cc_qy_v11 cc ((1 * 3 + i ) MOD 3) ` MP_TAC;\r
5216 REWRITE_TAC[MOD_MULT_ADD];\r
5217 ASM_REWRITE_TAC[];\r
5218 \r
5219 \r
5220 MP_TAC LITTLE_CC_GG3AA;\r
5221 ANTS_TAC;\r
5222 ASM_REWRITE_TAC[];\r
5223 SUBGOAL_THEN` cc_gg3a_v11 cc i + cc_gg3b_v11 cc (i) <= cc_gg_v11 cc i ` ASSUME_TAC;\r
5224 ASM_SIMP_TAC[];\r
5225 STRIP_TAC THEN STRIP_TAC;\r
5226 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc) ` MP_TAC;\r
5227 ASSUME_TAC2 (\r
5228 ISPECL [` cc_gg_v11 cc `;` nn:num `] periodic_sum);\r
5229 FIRST_X_ASSUM (ASSUME_TAC o GSYM);\r
5230 \r
5231 ASM_REWRITE_TAC[];\r
5232 EXPAND_TAC "nn";\r
5233 REWRITE_TAC[ARITH_RULE` 3 - 1 = 2 /\ 2 + i = i + 2`; SUM_NUMSEG3];\r
5234 \r
5235 UNDISCH_TAC` &0 <= cc_gg_v11 cc (i + nn - 1) + cc_gg3a_v11 cc i `;\r
5236 UNDISCH_TAC` &0 <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1) `;\r
5237 UNDISCH_TAC` cc_gg3a_v11 cc i + cc_gg3b_v11 cc i <= cc_gg_v11 cc i `;\r
5238 EXPAND_TAC "nn";\r
5239 REWRITE_TAC[ARITH_RULE` 3 - 1 = 2 `];\r
5240 PHA;\r
5241 REAL_ARITH_TAC;\r
5242 \r
5243 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0 ) `];\r
5244 ASSUME_TAC2 (ISPECL [` cc_gg_v11 cc `;` nn:num `] periodic_sum);\r
5245 FIRST_X_ASSUM (ASSUME_TAC o GSYM);\r
5246 DOWN;\r
5247 FIRST_X_ASSUM (MP_TAC o (SPEC` i MOD nn`));\r
5248 ASSUME_TAC2 (ISPECL [` cc_qy_v11 cc `; `nn:num `] periodic_mod1);\r
5249 FIRST_X_ASSUM (ASSUME_TAC o GSYM);\r
5250 ANTS_TAC;\r
5251 ASM_SIMP_TAC[MOD_IN_NUMSEG];\r
5252 STRIP_TAC;\r
5253 FIRST_ASSUM (MP_TAC o (SPEC` (i + 1) MOD nn `));\r
5254 ANTS_TAC;\r
5255 ASM_SIMP_TAC[MOD_IN_NUMSEG];\r
5256 MATCH_MP_TAC (GSYM MOD_INJ11);\r
5257 ASM_REWRITE_TAC[];\r
5258 UNDISCH_TAC` 3 <= nn `;\r
5259 ARITH_TAC;\r
5260 ASM_REWRITE_TAC[];\r
5261 STRIP_TAC;\r
5262 ASM_CASES_TAC` cc_qx_v11 cc (i + 1 ) `;\r
5263 ASM_SEARCH_TCL [` !i. cc_qx_v11 cc (i + 1) /\ cc_hassmall_v11 cc (i + 1) /\ cc_qy_v11 cc i\r
5264        ==> cc_eps <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1)`] (MP_TAC o (SPEC` i:num `));\r
5265 ANTS_TAC;\r
5266 ASM_REWRITE_TAC[cc_hassmall_v11];\r
5267 STRIP_TAC;\r
5268 \r
5269 \r
5270 SUBGOAL_THEN` &0 <= cc_gg_v11 cc (i + 3 ) + cc_gg3a_v11 cc ((i + 3) + 1 ) ` ASSUME_TAC;\r
5271 ASM_CASES_TAC` cc_qu_v11 cc ( i + 3) `;\r
5272 FIRST_X_ASSUM MATCH_MP_TAC;\r
5273 ASM_REWRITE_TAC[];\r
5274 ASSUME_TAC2 (ARITH_RULE` ~( nn = 3) /\ 3 <= nn /\ nn <= 4 ==> 4 = nn`);\r
5275 SUBGOAL_THEN` cc_qy_v11 cc ((i + 4 ) MOD 4 ) ` MP_TAC;\r
5276 REWRITE_TAC[MOD_ADD_CANCEL];\r
5277 ASM_REWRITE_TAC[];\r
5278 \r
5279 ASM_REWRITE_TAC[];\r
5280 ASM_REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `];\r
5281 \r
5282 REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `];\r
5283 ASSUME_TAC2 (ARITH_RULE` ~( nn = 3) /\ 3 <= nn /\ nn <= 4 ==> 4 = nn`);\r
5284 SUBGOAL_THEN` cc_qy_v11 cc ((i + 4) MOD 4 ) ` ASSUME_TAC;\r
5285 REWRITE_TAC[MOD_ADD_CANCEL];\r
5286 ASM_REWRITE_TAC[];\r
5287 DOWN;\r
5288 ASM_REWRITE_TAC[];\r
5289 STRIP_TAC;\r
5290 SUBGOAL_THEN` &0 <= cc_gg3a_v11 cc (i + nn) ` MP_TAC;\r
5291 ASM_SIMP_TAC[];\r
5292 SUBGOAL_THEN` &0 <= cc_gg_v11 cc ( i + 3) ` MP_TAC;\r
5293 MP_TAC (SPEC` i + 3 ` QU_OR_QXY);\r
5294 ASM_REWRITE_TAC[];\r
5295 STRIP_TAC;\r
5296 ASM_SIMP_TAC[];\r
5297 ASM_SIMP_TAC[];\r
5298 REAL_ARITH_TAC;\r
5299 \r
5300 ASSUME_TAC2 LEAST_BOUND_CC_GG;\r
5301 STRIP_TAC;\r
5302 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc) ` MP_TAC;\r
5303 ASM_REWRITE_TAC[];\r
5304 \r
5305 \r
5306 ASSUME_TAC2 (ARITH_RULE` ~( nn = 3) /\ 3 <= nn /\ nn <= 4 ==> 4 = nn`);\r
5307 EXPAND_TAC "nn";\r
5308 REWRITE_TAC[ARITH_RULE` 4 - 1 + i = i + 3 `; SUM_NUMSEG4];\r
5309 ASSUME_TAC2 (\r
5310 ISPECL [` cc_gg3a_v11 cc `;` nn:num `] periodic_mod1);\r
5311 FIRST_X_ASSUM (ASSUME_TAC o GSYM);\r
5312 SUBGOAL_THEN` cc_gg3a_v11 cc (((i + 3) + 1) MOD 4) = cc_gg3a_v11 cc i ` ASSUME_TAC;\r
5313 REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `; MOD_ADD_CANCEL];\r
5314 ASM_REWRITE_TAC[];\r
5315 DOWN;\r
5316 ASM_REWRITE_TAC[];\r
5317 DISCH_THEN SUBST_ALL_TAC;\r
5318 UNDISCH_TAC` cc_eps <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1) `;\r
5319 UNDISCH_TAC` &0 <= cc_gg_v11 cc (i + 3) + cc_gg3a_v11 cc i`;\r
5320 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc ( i + 2) ` MP_TAC;\r
5321 ASM_REWRITE_TAC[];\r
5322 SUBGOAL_THEN` cc_gg3a_v11 cc i + cc_gg3b_v11 cc i <= cc_gg_v11 cc i ` ASSUME_TAC;\r
5323 ASM_SIMP_TAC[];\r
5324 DOWN;\r
5325 PHA;\r
5326 REAL_ARITH_TAC;\r
5327 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0 ) `];\r
5328 MP_TAC (SPEC` i + 1 ` QU_OR_QXY);\r
5329 ASM_REWRITE_TAC[];\r
5330 STRIP_TAC;\r
5331 \r
5332 \r
5333 \r
5334 \r
5335 (* ========================== *)\r
5336 ASSUME_TAC2 LEAST_BOUND_CC_GG;\r
5337 DOWN;\r
5338 \r
5339 FIRST_ASSUM (MP_TAC o (SPEC ` (i + 2) MOD nn `));\r
5340 ANTS_TAC;\r
5341 ASM_SIMP_TAC[MOD_IN_NUMSEG];\r
5342 MATCH_MP_TAC (GSYM MOD_INJ11);\r
5343 ASM_REWRITE_TAC[ARITH_RULE` ~( 0 = 2) `];\r
5344 UNDISCH_TAC` 3 <= nn `;\r
5345 ARITH_TAC;\r
5346 STRIP_TAC;\r
5347 FIRST_ASSUM (MP_TAC o (SPEC ` (i + 3) MOD nn `));\r
5348 ANTS_TAC;\r
5349 ASM_SIMP_TAC[MOD_IN_NUMSEG];\r
5350 MATCH_MP_TAC (GSYM MOD_INJ11);\r
5351 ASM_REWRITE_TAC[ARITH_RULE` ~( 0 = 3) `];\r
5352 UNDISCH_TAC` 3 <= nn `;\r
5353 UNDISCH_TAC` ~( nn = 3)`;\r
5354 ARITH_TAC;\r
5355 STRIP_TAC;\r
5356 DOWN THEN DOWN;\r
5357 ASM_REWRITE_TAC[];\r
5358 STRIP_TAC THEN STRIP_TAC;\r
5359 \r
5360 ASM_CASES_TAC` cc_qx_v11 cc ( i + 2 ) `;\r
5361 SUBGOAL_THEN` &0 <= cc_gg_v11 cc ( i + 2) ` ASSUME_TAC;\r
5362 ASM_SIMP_TAC[];\r
5363 MP_TAC LITTLE_CC_GG3BB;\r
5364 ANTS_TAC;\r
5365 ASM_REWRITE_TAC[];\r
5366 STRIP_TAC;\r
5367 MP_TAC LITTLE_CC_GG3AA;\r
5368 ANTS_TAC;\r
5369 ASM_REWRITE_TAC[];\r
5370 ASSUME_TAC2 (ARITH_RULE` 3 <= nn /\ nn <= 4 /\ ~( nn = 3) ==> 4 = nn `);\r
5371 EXPAND_TAC "nn";\r
5372 REWRITE_TAC[ARITH_RULE` 4 - 1 = 3 `];\r
5373 SUBGOAL_THEN` cc_gg3a_v11 cc i + cc_gg3b_v11 cc i <= cc_gg_v11 cc i ` MP_TAC;\r
5374 ASM_SIMP_TAC[];\r
5375 REPEAT STRIP_TAC;\r
5376 SUBGOAL_THEN` &0 <= sum (0..nn - 1 ) (cc_gg_v11 cc) ` MP_TAC;\r
5377 EXPAND_TAC "nn";\r
5378 ASM_REWRITE_TAC[ARITH_RULE` 4 - 1 = 3 /\ 3 + i = i + 3`];\r
5379 REWRITE_TAC[SUM_NUMSEG4];\r
5380 UNDISCH_TAC` &0 <= cc_gg_v11 cc (i + 3) + cc_gg3a_v11 cc i `;\r
5381 UNDISCH_TAC` cc_gg3a_v11 cc i + cc_gg3b_v11 cc i <= cc_gg_v11 cc i `;\r
5382 UNDISCH_TAC` &0 <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1) `;\r
5383 UNDISCH_TAC` &0 <= cc_gg_v11 cc (i + 2) `;\r
5384 PHA;\r
5385 REAL_ARITH_TAC;\r
5386 \r
5387 \r
5388 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0 ) `];\r
5389 ASM_CASES_TAC` cc_qx_v11 cc ( i + 3) `;\r
5390 \r
5391 \r
5392 \r
5393 ASSUME_TAC2 (ARITH_RULE` 3 <= nn /\ nn <= 4 /\ ~( nn = 3) ==> 4 = nn `);\r
5394 SUBGOAL_THEN` cc_qy_v11 cc ((i + 4) MOD 4) ` ASSUME_TAC;\r
5395 REWRITE_TAC[MOD_ADD_CANCEL];\r
5396 ASM_REWRITE_TAC[];\r
5397 DOWN;\r
5398 ASM_REWRITE_TAC[];\r
5399 STRIP_TAC;\r
5400 ASM_SEARCH_TCL [` cc_eps <= x + cc_gg3a_v11 cc i `] (MP_TAC o (SPEC` i + 3 `));\r
5401 ANTS_TAC;\r
5402 ASM_REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `; cc_hassmall_v11];\r
5403 STRIP_TAC;\r
5404 MP_TAC LITTLE_CC_GG3BB;\r
5405 ANTS_TAC;\r
5406 ASM_REWRITE_TAC[];\r
5407 STRIP_TAC;\r
5408 \r
5409 STRIP_TAC;\r
5410 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc (i + 2) ` MP_TAC;\r
5411 ASM_SIMP_TAC[];\r
5412 STRIP_TAC;\r
5413 \r
5414 SUBGOAL_THEN` cc_gg3a_v11 cc ((i + 4) MOD 4) = cc_gg3a_v11 cc i ` MP_TAC;\r
5415 REWRITE_TAC[MOD_ADD_CANCEL];\r
5416 ASM_REWRITE_TAC[];\r
5417 ASSUME_TAC2 (ISPECL [` cc_gg3a_v11 cc `;` nn:num `] periodic_mod1);\r
5418 FIRST_X_ASSUM (ASSUME_TAC o GSYM);\r
5419 ASM_REWRITE_TAC[];\r
5420 ASSUME_TAC2 (ISPECL [` cc_gg3a_v11 cc `;` nn:num `] periodic_mod1);\r
5421 FIRST_X_ASSUM (ASSUME_TAC o GSYM);\r
5422 ASM_REWRITE_TAC[];\r
5423 STRIP_TAC;\r
5424 \r
5425 STRIP_TAC;\r
5426 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc ) ` MP_TAC;\r
5427 ASM_REWRITE_TAC[];\r
5428 EXPAND_TAC "nn";\r
5429 REWRITE_TAC[ARITH_RULE` 4 - 1 + i = i + 3 `; SUM_NUMSEG4];\r
5430 SUBGOAL_THEN` cc_gg3a_v11 cc i + cc_gg3b_v11 cc i <= cc_gg_v11 cc i ` MP_TAC;\r
5431 ASM_SIMP_TAC[];\r
5432 \r
5433 UNDISCH_TAC` &0 <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1) `;\r
5434 UNDISCH_TAC` cc_eps <= cc_gg_v11 cc (i + 3) + cc_gg3a_v11 cc ((i + 3) + 1) `;\r
5435 PHA;\r
5436 ASM_REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `];\r
5437 SUBGOAL_THEN` --cc_eps <= cc_gg_v11 cc (i + 2) ` MP_TAC;\r
5438 ASM_REWRITE_TAC[];\r
5439 REAL_ARITH_TAC;\r
5440 DOWN;\r
5441 ASM_REWRITE_TAC[ARITH_RULE` &0 <= x <=> ~( x < &0 ) `];\r
5442 \r
5443 \r
5444 \r
5445 \r
5446 \r
5447 \r
5448 \r
5449 \r
5450 \r
5451 MP_TAC (SPEC` i + 2 ` QU_OR_QXY);\r
5452 MP_TAC (SPEC` i + 3 ` QU_OR_QXY);\r
5453 ASM_REWRITE_TAC[];\r
5454 STRIP_TAC;\r
5455 STRIP_TAC;\r
5456 SUBGOAL_THEN` #0.008 * cc_azim_v11 cc i <= cc_gg_v11 cc i ` ASSUME_TAC;\r
5457 ASM_SIMP_TAC[];\r
5458 ASSUME_TAC2 (ISPECL [` cc_azim_v11 cc `;` nn:num `] periodic_sum);\r
5459 ASM_SEARCH_TCL [` &2 * pi `] MP_TAC;\r
5460 FIRST_X_ASSUM (ASSUME_TAC o GSYM);\r
5461 DOWN;\r
5462 SIMP_TAC[];\r
5463 ASSUME_TAC2 (ARITH_RULE` 3 <= nn  /\ nn <= 4 /\ ~( nn = 3) ==> 4 = nn `);\r
5464 EXPAND_TAC "nn";\r
5465 REWRITE_TAC[ARITH_RULE` 4 - 1 + i = i + 3 /\ 4 - 1 = 3 `];\r
5466 REPEAT STRIP_TAC;\r
5467 UNDISCH_TAC` sum (i..i + 3) (cc_azim_v11 cc) = &2 * pi `;\r
5468 REWRITE_TAC[SUM_NUMSEG4];\r
5469 STRIP_TAC;\r
5470 \r
5471 ASM_CASES_TAC` #2.089 <= cc_azim_v11 cc i ` ;\r
5472 ASM_SEARCH_TCL [`#0.161517`] (ASSUME_TAC2 o (SPEC` i + 1 `));\r
5473 ASM_SEARCH_TCL [`!i. cc_qu_v11 cc i\r
5474        ==> #0.161517 - #0.119482 * cc_azim_v11 cc i <= cc_gg_v11 cc i`] (ASSUME_TAC2 o (SPEC` i + 2 `));\r
5475 ASM_SEARCH_TCL [`!i. cc_qu_v11 cc i\r
5476        ==> #0.161517 - #0.119482 * cc_azim_v11 cc i <= cc_gg_v11 cc i`] (ASSUME_TAC2 o (SPEC` i + 3 `));\r
5477 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc ) ` MP_TAC;\r
5478 EXPAND_TAC "nn";\r
5479 REWRITE_TAC[ARITH_RULE` 4 - 1 = 3 `];\r
5480 ASM_REWRITE_TAC[SUM_NUMSEG4];\r
5481 DOWNS 4;\r
5482 DOWN;\r
5483 UNDISCH_TAC` #0.008 * cc_azim_v11 cc i <= cc_gg_v11 cc i `;\r
5484 MP_TAC (PI_BOUNDS);\r
5485 REAL_ARITH_TAC;\r
5486 \r
5487 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `];\r
5488 \r
5489 \r
5490 ASM_CASES_TAC` cc_azim_v11 cc i <= #1.946 `;\r
5491 UNDISCH_TAC` !i. cc_qu_v11 cc i\r
5492        ==> -- #0.0659 + #0.042 * cc_azim_v11 cc i <= cc_gg_v11 cc i `;\r
5493 STRIP_TAC;\r
5494 FIRST_ASSUM (ASSUME_TAC2 o (SPEC` i + 1 `));\r
5495 FIRST_ASSUM (ASSUME_TAC2 o (SPEC` i + 2 `));\r
5496 FIRST_ASSUM (ASSUME_TAC2 o (SPEC` i + 3 `));\r
5497 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc) ` MP_TAC;\r
5498 EXPAND_TAC "nn";\r
5499 REWRITE_TAC[ARITH_RULE` 4 - 1 = 3 `];\r
5500 ASM_REWRITE_TAC[SUM_NUMSEG4];\r
5501 DOWNS 3;\r
5502 UNDISCH_TAC` cc_azim_v11 cc i <= #1.946 `;\r
5503 UNDISCH_TAC` cc_azim_v11 cc i +\r
5504       cc_azim_v11 cc (i + 1) +\r
5505       cc_azim_v11 cc (i + 2) +\r
5506       cc_azim_v11 cc (i + 3) =\r
5507       &2 * pi `;\r
5508 MP_TAC PI_BOUNDS;\r
5509 UNDISCH_TAC` #0.008 * cc_azim_v11 cc i <= cc_gg_v11 cc i `;\r
5510 REAL_ARITH_TAC;\r
5511 \r
5512 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `];\r
5513 ASM_CASES_TAC` cc_small_eta_v11 cc i /\\r
5514        cc_small_eta_v11 cc (i + 1) `;\r
5515 UNDISCH_TAC` !i. cc_qy_v11 cc i /\\r
5516           cc_small_eta_v11 cc i /\\r
5517           cc_small_eta_v11 cc (i + 1) /\\r
5518           #1.946 <= cc_azim_v11 cc i /\\r
5519           cc_azim_v11 cc i <= #2.089\r
5520           ==> #3.0 * cc_eps <= cc_gg_v11 cc i `;\r
5521 DISCH_THEN (MP_TAC o (SPEC` i:num `));\r
5522 ANTS_TAC;\r
5523 ASM_REWRITE_TAC[];\r
5524 DOWNS 3;\r
5525 REAL_ARITH_TAC;\r
5526 STRIP_TAC;\r
5527 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc (i + 1) /\ \r
5528 -- cc_eps <= cc_gg_v11 cc (i + 2) /\ \r
5529 -- cc_eps <= cc_gg_v11 cc (i + 3) ` MP_TAC;\r
5530 ASM_REWRITE_TAC[];\r
5531 STRIP_TAC;\r
5532 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc ) ` MP_TAC;\r
5533 EXPAND_TAC "nn";\r
5534 REWRITE_TAC[ARITH_RULE` 4 - 1 = 3 `];\r
5535 ASM_REWRITE_TAC[SUM_NUMSEG4];\r
5536 DOWNS 4;\r
5537 REAL_ARITH_TAC;\r
5538 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `];\r
5539 \r
5540 \r
5541 UNDISCH_TAC` sum (0..nn - 1) (cc_gg_v11 cc) < &0 `;\r
5542 EXPAND_TAC "nn";\r
5543 REWRITE_TAC[ARITH_RULE` 4 - 1 = 3 `];\r
5544 ASM_REWRITE_TAC[];\r
5545 REWRITE_TAC[REAL_ARITH` a < &0 <=> ~( &0 <= a ) `; SUM_NUMSEG4];\r
5546 STRIP_TAC;\r
5547 \r
5548 \r
5549 \r
5550 UNDISCH_TAC`~(cc_small_eta_v11 cc i /\ cc_small_eta_v11 cc (i + 1)) `;\r
5551 REWRITE_TAC[DE_MORGAN_THM];\r
5552 STRIP_TAC;\r
5553 ASSUME_TAC2 (ISPECL [` cc_small_eta_v11 cc `; `nn:num `] periodic_mod1);\r
5554 FIRST_X_ASSUM (ASSUME_TAC o GSYM);\r
5555 SUBGOAL_THEN` ~cc_small_eta_v11 cc ((i + 4) MOD 4)` ASSUME_TAC;\r
5556 REWRITE_TAC[MOD_ADD_CANCEL];\r
5557 ASM_REWRITE_TAC[];\r
5558 DOWN;\r
5559 ASM_REWRITE_TAC[];\r
5560 STRIP_TAC;\r
5561 UNDISCH_TAC` !i. cc_qu_v11 cc i /\ ~cc_small_eta_v11 cc (i + 1)\r
5562           ==> cc_eps <= cc_gg_v11 cc i `;\r
5563 DISCH_THEN (MP_TAC o (SPEC` i + 3 `));\r
5564 ANTS_TAC;\r
5565 ASM_REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `];\r
5566 STRIP_TAC;\r
5567 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc (i + 2 ) ` ASSUME_TAC;\r
5568 ASM_REWRITE_TAC[];\r
5569 SUBGOAL_THEN` &0 <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1) `ASSUME_TAC;\r
5570 FIRST_X_ASSUM MATCH_MP_TAC;\r
5571 ASM_REWRITE_TAC[];\r
5572 SUBGOAL_THEN` &0 <= cc_gg3a_v11 cc i /\ cc_gg3a_v11 cc i + cc_gg3b_v11 cc i <= cc_gg_v11 cc i ` ASSUME_TAC;\r
5573 ASM_SIMP_TAC[];\r
5574 \r
5575 SUBGOAL_THEN` &0 <=\r
5576         cc_gg_v11 cc i +\r
5577         cc_gg_v11 cc (i + 1) +\r
5578         cc_gg_v11 cc (i + 2) +\r
5579         cc_gg_v11 cc (i + 3) ` MP_TAC;\r
5580 DOWNS 4;\r
5581 REAL_ARITH_TAC;\r
5582 ASM_REWRITE_TAC[];\r
5583 \r
5584 UNDISCH_TAC` !i. cc_qu_v11 cc i /\ ~cc_small_eta_v11 cc i ==> cc_eps <= cc_gg_v11 cc i `;\r
5585 DISCH_THEN (MP_TAC o (SPEC` i + 1 `));\r
5586 ANTS_TAC;\r
5587 ASM_REWRITE_TAC[];\r
5588 \r
5589 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc (i + 2 ) ` ASSUME_TAC;\r
5590 \r
5591 ASM_REWRITE_TAC[];\r
5592 UNDISCH_TAC` !i. cc_qu_v11 cc i /\ cc_qy_v11 cc (i + 1)\r
5593        ==> &0 <= cc_gg_v11 cc i + cc_gg3a_v11 cc (i + 1) `;\r
5594 DISCH_THEN (MP_TAC o (SPEC` i + 3 `));\r
5595 ANTS_TAC;\r
5596 ASM_REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `];\r
5597 SUBGOAL_THEN` cc_qy_v11 cc ((i + nn) MOD nn) ` MP_TAC;\r
5598 REWRITE_TAC[MOD_ADD_CANCEL];\r
5599 ASM_REWRITE_TAC[];\r
5600 ASM_REWRITE_TAC[];\r
5601 DOWN;\r
5602 SUBGOAL_THEN` &0 <= cc_gg3b_v11 cc i /\ cc_gg3a_v11 cc i + cc_gg3b_v11 cc i <= cc_gg_v11 cc i ` MP_TAC;\r
5603 ASM_SIMP_TAC[];\r
5604 \r
5605 SUBGOAL_THEN` cc_gg3a_v11 cc (((i + 3) + 1) MOD 4) = cc_gg3a_v11 cc i ` MP_TAC;\r
5606 REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `; MOD_ADD_CANCEL];\r
5607 ASM_SIMP_TAC[];\r
5608 MATCH_MP_TAC (GSYM periodic_mod);\r
5609 ASM_REWRITE_TAC[];\r
5610 \r
5611 \r
5612 ASSUME_TAC2 (ISPECL [` cc_gg3a_v11 cc `;` nn:num `] periodic_mod1);\r
5613 FIRST_X_ASSUM (ASSUME_TAC o GSYM);\r
5614 ASM_REWRITE_TAC[];\r
5615 SIMP_TAC[];\r
5616 STRIP_TAC;\r
5617 UNDISCH_TAC` ~(&0 <=\r
5618         cc_gg_v11 cc i +\r
5619         cc_gg_v11 cc (i + 1) +\r
5620         cc_gg_v11 cc (i + 2) +\r
5621         cc_gg_v11 cc (i + 3)) `;\r
5622 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc (i + 2) ` MP_TAC;\r
5623 ASM_REWRITE_TAC[];\r
5624 REAL_ARITH_TAC]);;\r
5625 \r
5626 \r
5627 \r
5628 let GRHIDFA_ALT = prove_by_refinement(`!cc. cc_bool_model_v11 cc /\\r
5629       cc_bool_prep_v11 cc /\\r
5630       cc_real_model_v11 cc /\\r
5631       sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0\r
5632       ==> ~(cc_card_v11 cc = 4) `,\r
5633 [NHANH UTEOITF;\r
5634 NHANH IPVICGW;\r
5635 REPEAT STRIP_TAC;\r
5636 ASSUME_TAC2 QY_NN00 THEN ASSUME_TAC2 QX_NN00;\r
5637 DOWN_TAC;\r
5638 NHANH Oxl_def.periodic_fn;\r
5639 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];\r
5640 ONCE_REWRITE_TAC[TAUT` ~ a <=> a ==> F `];\r
5641 ABBREV_TAC` nn = cc_card_v11 cc `;\r
5642 STRIP_TAC;\r
5643 ABBREV_TAC ` squ = { i | i <= 3 /\ cc_qu_v11 cc i } `;\r
5644 SWITCH_TAC` nn = 4 `;\r
5645 ASSUME_TAC (SPECL [` 0 `;` 3 `] FINITE_NUMSEG);\r
5646 SUBGOAL_THEN` squ SUBSET 0..3 ` ASSUME_TAC;\r
5647 EXPAND_TAC "squ";\r
5648 REWRITE_TAC[numseg; LE_0];\r
5649 CONV_TAC SET_RULE;\r
5650 SUBGOAL_THEN` FINITE (squ: num -> bool) ` ASSUME_TAC;\r
5651 MATCH_MP_TAC FINITE_SUBSET;\r
5652 EXISTS_TAC` 0..3 `;\r
5653 ASM_REWRITE_TAC[];\r
5654 SUBGOAL_THEN` ! i. cc_qu_v11 cc i \/ cc_qx_v11 cc i ` ASSUME_TAC;\r
5655 ASM_REWRITE_TAC[cc_qx_v11];\r
5656 MESON_TAC[];\r
5657 ABBREV_TAC` sqx = { i | i <= 3 /\ cc_qx_v11 cc i } ` ;\r
5658 SUBGOAL_THEN` sqx UNION squ = 0..3` ASSUME_TAC;\r
5659 EXPAND_TAC "squ";\r
5660 EXPAND_TAC "sqx";\r
5661 REWRITE_TAC[numseg; LE_0];\r
5662 UNDISCH_TAC` !i. cc_qu_v11 cc i \/ cc_qx_v11 cc i `;\r
5663 REWRITE_TAC[EXTENSION; IN_ELIM_THM; IN_UNION];\r
5664 MESON_TAC[];\r
5665 \r
5666 \r
5667 SUBGOAL_THEN` DISJOINT sqx (squ:num -> bool) ` ASSUME_TAC;\r
5668 EXPAND_TAC "squ" THEN EXPAND_TAC "sqx";\r
5669 REWRITE_TAC[cc_qx_v11];\r
5670 CONV_TAC SET_RULE;\r
5671 \r
5672 SUBGOAL_THEN` sqx SUBSET 0..3 ` ASSUME_TAC;\r
5673 EXPAND_TAC "sqx";\r
5674 REWRITE_TAC[numseg; LE_0];\r
5675 CONV_TAC SET_RULE;\r
5676 SUBGOAL_THEN` FINITE (sqx:num -> bool) ` ASSUME_TAC;\r
5677 MATCH_MP_TAC FINITE_SUBSET;\r
5678 EXISTS_TAC` 0..3 `;\r
5679 ASM_REWRITE_TAC[];\r
5680 SUBGOAL_THEN` DISJOINT squ (sqx: num -> bool) ` ASSUME_TAC;\r
5681 ONCE_REWRITE_TAC[DISJOINT_SYM];\r
5682 ASM_REWRITE_TAC[];\r
5683 \r
5684 \r
5685 SUBGOAL_THEN`! f. sum (squ UNION sqx) f = sum squ f + sum (sqx:num -> bool) f ` ASSUME_TAC;\r
5686 GEN_TAC;\r
5687 MATCH_MP_TAC SUM_UNION;\r
5688 ASM_REWRITE_TAC[];\r
5689 \r
5690 MP_TAC (ISPECL [` squ: num -> bool `;` sqx: num -> bool `] CARD_UNION);\r
5691 ANTS_TAC;\r
5692 ASM_REWRITE_TAC[GSYM DISJOINT];\r
5693 UNDISCH_TAC` sqx UNION squ = 0..3 `;\r
5694 REWRITE_TAC[UNION_COMM];\r
5695 STRIP_TAC;\r
5696 ASM_REWRITE_TAC[CARD_NUMSEG; ARITH_RULE` (3 + 1) - 0 = 4 `];\r
5697 STRIP_TAC; SUBGOAL_THEN` !i. i IN squ\r
5698        ==> #0.161517 - #0.119482 * cc_azim_v11 cc i <= cc_gg_v11 cc i ` ASSUME_TAC;\r
5699 EXPAND_TAC "squ";\r
5700 REWRITE_TAC[IN_ELIM_THM];\r
5701 GEN_TAC THEN STRIP_TAC;\r
5702 ASM_SIMP_TAC[];\r
5703 \r
5704 SUBGOAL_THEN` ! i. i IN sqx \r
5705 ==> #0.213849 - #0.119482 * cc_azim_v11 cc i <= cc_gg_v11 cc i ` ASSUME_TAC;\r
5706 EXPAND_TAC "sqx";\r
5707 REWRITE_TAC[IN_ELIM_THM];\r
5708 GEN_TAC THEN STRIP_TAC;\r
5709 FIRST_X_ASSUM MATCH_MP_TAC;\r
5710 ASM_REWRITE_TAC[cc_hassmall_v11];\r
5711 \r
5712 ASM_CASES_TAC` CARD (squ: num -> bool) <= 2 ` ;\r
5713 SWITCH_TAC` squ UNION sqx = 0..3 `;\r
5714 SUBGOAL_THEN` sum squ (\i. #0.161517 - #0.119482 * cc_azim_v11 cc i ) <=\r
5715  sum squ (cc_gg_v11 cc) ` ASSUME_TAC;\r
5716 MATCH_MP_TAC SUM_LE;\r
5717 ASM_REWRITE_TAC[];\r
5718 SUBGOAL_THEN` sum sqx (\i. #0.213849 - #0.119482 * cc_azim_v11 cc i ) <=\r
5719  sum sqx (cc_gg_v11 cc) ` ASSUME_TAC;\r
5720 MATCH_MP_TAC SUM_LE;\r
5721 ASM_REWRITE_TAC[];\r
5722 \r
5723 UNDISCH_TAC` sum (0..nn - 1) (cc_gg_v11 cc) < &0 `;\r
5724 EXPAND_TAC "nn";\r
5725 REWRITE_TAC[ARITH_RULE` 4 - 1 = 3 `];\r
5726 ASM_REWRITE_TAC[ARITH_RULE` ~( x < &0 ) <=> &0 <= x `];\r
5727 MATCH_MP_TAC REAL_LE_TRANS;\r
5728 EXISTS_TAC` sum squ (\i. #0.161517 - #0.119482 * cc_azim_v11 cc i)  + \r
5729 sum sqx (\i. #0.213849 - #0.119482 * cc_azim_v11 cc i ) `;\r
5730 CONJ_TAC;\r
5731 ASM_SIMP_TAC[SUM_SUB; SUM_LMUL; SUM_CONST];\r
5732 UNDISCH_TAC` sum (0..nn - 1) (cc_azim_v11 cc) = &2 * pi `;\r
5733 EXPAND_TAC "nn";\r
5734 REWRITE_TAC[ARITH_RULE` 4 - 1 = 3 `];\r
5735 ASM_REWRITE_TAC[ETA_AX];\r
5736 UNDISCH_TAC` nn = CARD (squ: num -> bool) + CARD (sqx: num -> bool) `;\r
5737 UNDISCH_TAC` CARD (squ: num -> bool) <= 2 `;\r
5738 REWRITE_TAC[GSYM REAL_OF_NUM_LE; GSYM REAL_OF_NUM_EQ; GSYM REAL_OF_NUM_ADD];\r
5739 EXPAND_TAC "nn";\r
5740 MP_TAC PI_BOUNDS;\r
5741 REAL_ARITH_TAC;\r
5742 \r
5743 DOWNS 2;\r
5744 REAL_ARITH_TAC;\r
5745 \r
5746 \r
5747 ASM_CASES_TAC` ! i. i < 4 ==> cc_qu_v11 cc i ` ;\r
5748 SUBGOAL_THEN` ! i. 0 <= i /\ i <= 3 ==> -- #0.0659 + #0.042 * cc_azim_v11 cc i <= cc_gg_v11 cc i ` ASSUME_TAC;\r
5749 REWRITE_TAC[ARITH_RULE` 0 <= x /\ x <= 3 <=> x < 4 `];\r
5750 FIRST_X_ASSUM NHANH;\r
5751 ASM_SIMP_TAC[];\r
5752 \r
5753 DOWN;\r
5754 PHA;\r
5755 NHANH SUM_LE_NUMSEG;\r
5756 REWRITE_TAC[SUM_ADD_NUMSEG; SUM_LMUL; ETA_AX; SUM_CONST_NUMSEG];\r
5757 REWRITE_TAC[ARITH_RULE` ( 3 + 1 ) - 0 = 4`];\r
5758 UNDISCH_TAC` sum (0..nn - 1) (cc_azim_v11 cc) = &2 * pi `;\r
5759 EXPAND_TAC "nn";\r
5760 REWRITE_TAC[ARITH_RULE` 4 - 1 = 3 `];\r
5761 SIMP_TAC[];\r
5762 REPEAT STRIP_TAC;\r
5763 SUBGOAL_THEN` &0 <= sum (0..3) (cc_gg_v11 cc) ` MP_TAC;\r
5764 MATCH_MP_TAC REAL_LE_TRANS;\r
5765 EXISTS_TAC` &4 * --  #0.0659 + #0.042 * &2 * pi `;\r
5766 DOWN THEN SIMP_TAC[];\r
5767 MP_TAC PI_BOUNDS;\r
5768 REAL_ARITH_TAC;\r
5769 ASM_REWRITE_TAC[REAL_ARITH` ~( &0 <= x ) <=> x < &0 `];\r
5770 UNDISCH_TAC` sum (0..nn - 1) (cc_gg_v11 cc) < &0 `;\r
5771 EXPAND_TAC "nn";\r
5772 SIMP_TAC[ARITH_RULE` 4 - 1 = 3 `];\r
5773 SUBGOAL_THEN` ? i. i < 4 /\ ~ cc_qu_v11 cc i ` ASSUME_TAC;\r
5774 DOWN;\r
5775 MESON_TAC[];\r
5776 DOWN THEN STRIP_TAC;\r
5777 SUBGOAL_THEN` cc_qx_v11 cc i ` ASSUME_TAC;\r
5778 ASM_REWRITE_TAC[cc_qx_v11];\r
5779 \r
5780 SUBGOAL_THEN` CARD (sqx:num -> bool) <= 1 ` ASSUME_TAC;\r
5781 UNDISCH_TAC` nn = CARD (squ:num -> bool) + CARD (sqx:num -> bool) `;\r
5782 UNDISCH_TAC` ~(CARD (squ:num -> bool) <= 2) `;\r
5783 EXPAND_TAC "nn";\r
5784 ARITH_TAC;\r
5785 SUBGOAL_THEN` ! j. j <= 3 /\ ~(j = i) ==> cc_qu_v11 cc j ` ASSUME_TAC;\r
5786 GEN_TAC THEN STRIP_TAC;\r
5787 ASM_CASES_TAC` cc_qx_v11 cc j `;\r
5788 SUBGOAL_THEN` {i, j:num} SUBSET sqx ` ASSUME_TAC;\r
5789 EXPAND_TAC "sqx";\r
5790 REWRITE_TAC[IN_ELIM_THM; INSERT_SUBSET; EMPTY_SUBSET];\r
5791 ASM_REWRITE_TAC[];\r
5792 UNDISCH_TAC` i < 4 `;\r
5793 ARITH_TAC;\r
5794 \r
5795 UNDISCH_TAC` ~( j = (i:num)) ` ;\r
5796 REWRITE_TAC[GSYM Geomdetail.CARD2; INSERT_COMM];\r
5797 STRIP_TAC;\r
5798 SUBGOAL_THEN` CARD {i, j:num} <= CARD (sqx:num -> bool)` ASSUME_TAC;\r
5799 MATCH_MP_TAC CARD_SUBSET;\r
5800 ASM_REWRITE_TAC[];\r
5801 DOWN;\r
5802 ASM_REWRITE_TAC[];\r
5803 NHANH (ARITH_RULE` 2 <= a ==> ~( a <= 1 ) `);\r
5804 ASM_REWRITE_TAC[];\r
5805 UNDISCH_TAC` !i. cc_qu_v11 cc i \/ cc_qx_v11 cc i `;\r
5806 DISCH_THEN (MP_TAC o (SPEC` j:num `));\r
5807 ASM_REWRITE_TAC[];\r
5808 ASSUME_TAC2 (ISPECL [` cc_qu_v11 cc `;` nn:num `] periodic_mod1);\r
5809 FIRST_X_ASSUM (ASSUME_TAC o GSYM);\r
5810 \r
5811 MP_TAC (ISPECL [` 3`] Hypermap.LE_MOD_SUC);\r
5812 REWRITE_TAC[ARITH_RULE` SUC 3 = 4 `];\r
5813 STRIP_TAC;\r
5814 \r
5815 SUBGOAL_THEN`  i MOD nn = i ` ASSUME_TAC;\r
5816 MATCH_MP_TAC MOD_LT;\r
5817 UNDISCH_TAC` i < 4 `;\r
5818 ASM_REWRITE_TAC[];\r
5819 UNDISCH_TAC` !j. j <= 3 /\ ~(j = i) ==> cc_qu_v11 cc j `;\r
5820 EXPAND_TAC "i";\r
5821 STRIP_TAC;\r
5822 \r
5823 SUBGOAL_THEN` cc_qu_v11 cc (( i + 1) MOD 4 ) ` ASSUME_TAC;\r
5824 FIRST_X_ASSUM MATCH_MP_TAC;\r
5825 UNDISCH_TAC` nn = CARD (squ:num -> bool) + CARD (sqx: num -> bool) `;\r
5826 DISCH_THEN (ASSUME_TAC o SYM);\r
5827 CONJ_TAC;\r
5828 ASM_REWRITE_TAC[];\r
5829 UNDISCH_TAC` 4 = nn `;\r
5830 SIMP_TAC[];\r
5831 STRIP_TAC;\r
5832 MATCH_MP_TAC (GSYM MOD_INJ11);\r
5833 EXPAND_TAC "nn";\r
5834 ARITH_TAC;\r
5835 \r
5836 SUBGOAL_THEN` cc_qu_v11 cc (( i + 2) MOD 4 ) ` ASSUME_TAC;\r
5837 FIRST_X_ASSUM MATCH_MP_TAC;\r
5838 UNDISCH_TAC` nn = CARD (squ:num -> bool) + CARD (sqx: num -> bool) `;\r
5839 DISCH_THEN (ASSUME_TAC o SYM);\r
5840 CONJ_TAC;\r
5841 ASM_REWRITE_TAC[];\r
5842 UNDISCH_TAC` 4 = nn `;\r
5843 SIMP_TAC[];\r
5844 STRIP_TAC;\r
5845 MATCH_MP_TAC (GSYM MOD_INJ11);\r
5846 EXPAND_TAC "nn";\r
5847 ARITH_TAC;\r
5848 \r
5849 \r
5850 SUBGOAL_THEN` cc_qu_v11 cc (( i + 3) MOD 4 ) ` ASSUME_TAC;\r
5851 FIRST_X_ASSUM MATCH_MP_TAC;\r
5852 UNDISCH_TAC` nn = CARD (squ:num -> bool) + CARD (sqx: num -> bool) `;\r
5853 DISCH_THEN (ASSUME_TAC o SYM);\r
5854 CONJ_TAC;\r
5855 ASM_REWRITE_TAC[];\r
5856 UNDISCH_TAC` 4 = nn `;\r
5857 SIMP_TAC[];\r
5858 STRIP_TAC;\r
5859 MATCH_MP_TAC (GSYM MOD_INJ11);\r
5860 EXPAND_TAC "nn";\r
5861 ARITH_TAC;\r
5862 \r
5863 DOWNS 3;\r
5864 UNDISCH_TAC` nn = CARD (squ:num -> bool) + CARD (sqx: num -> bool) `;\r
5865 DISCH_THEN (ASSUME_TAC o SYM);\r
5866 ASM_REWRITE_TAC[];\r
5867 ASM_CASES_TAC` cc_crit_v11 cc i `;\r
5868 STRIP_TAC;\r
5869 UNDISCH_TAC` nn = 4 /\\r
5870    (?i. cc_4cell_v11 cc i /\\r
5871         cc_crit_v11 cc i /\\r
5872         cc_qu_v11 cc (i + 1) /\\r
5873         cc_qu_v11 cc (i + 2) /\\r
5874         cc_qu_v11 cc (i + 3))\r
5875    ==> &0 <= sum (0..nn - 1) (cc_gg_v11 cc) `;\r
5876 ANTS_TAC;\r
5877 ASM_REWRITE_TAC[];\r
5878 EXISTS_TAC` i:num `;\r
5879 ASM_REWRITE_TAC[];\r
5880 ASM_REWRITE_TAC[REAL_ARITH` ~( &0 <= x ) <=> x < &0 `];\r
5881 ASM_CASES_TAC` cc_subcrit_v11 cc i `;\r
5882 UNDISCH_TAC` cc_qx_v11 cc i `;\r
5883 REWRITE_TAC[cc_qx_v11; cc_qu_v11];\r
5884 ASM_REWRITE_TAC[cc_hassmall_v11];\r
5885 \r
5886 \r
5887 SUBGOAL_THEN` cc_crit_v11 cc i \/ cc_subcrit_v11 cc i \/ cc_supercrit_v11 cc i ` ASSUME_TAC;\r
5888 FIRST_X_ASSUM MATCH_MP_TAC;\r
5889 ASM_REWRITE_TAC[];\r
5890 \r
5891 DOWN;\r
5892 ASM_REWRITE_TAC[];\r
5893 \r
5894 STRIP_TAC;\r
5895 SUBGOAL_THEN` #0.00457511 + #0.00609451 * cc_azim_v11 cc i <= cc_gg_v11 cc i ` MP_TAC;\r
5896 FIRST_X_ASSUM MATCH_MP_TAC;\r
5897 ASM_REWRITE_TAC[cc_hassmall_v11];\r
5898 STRIP_TAC;\r
5899 \r
5900 SUBGOAL_THEN` ! i. cc_hassmall_v11 cc i ` ASSUME_TAC;\r
5901 ASM_REWRITE_TAC[cc_hassmall_v11];\r
5902 UNDISCH_TAC` !i. cc_qu_v11 cc i\r
5903        ==> -- #0.0142852 + #0.00609451 * cc_azim_v11 cc i <= cc_gg_v11 cc i `;\r
5904 DISCH_THEN NHANH;\r
5905 STRIP_TAC;\r
5906 \r
5907 \r
5908 \r
5909 \r
5910 \r
5911 UNDISCH_TAC` sum (0..nn - 1) (cc_gg_v11 cc) < &0 `;\r
5912 UNDISCH_TAC` sum (0..nn - 1) (cc_azim_v11 cc) = &2 * pi `;\r
5913 ASSUME_TAC2 (ISPECL [` cc_gg_v11 cc `;`nn:num `] periodic_sum);\r
5914 FIRST_X_ASSUM (ASSUME_TAC o GSYM);\r
5915 ASSUME_TAC2 (ISPECL [` cc_azim_v11 cc `;`nn:num `] periodic_sum);\r
5916 FIRST_X_ASSUM (ASSUME_TAC o GSYM);\r
5917 ASM_REWRITE_TAC[];\r
5918 \r
5919 UNDISCH_TAC` 4 = nn `;\r
5920 STRIP_TAC;\r
5921 EXPAND_TAC "nn";\r
5922 REWRITE_TAC[ARITH_RULE` 4 - 1 + i = i + 3 `];\r
5923 REWRITE_TAC[SUM_NUMSEG4];\r
5924 \r
5925 UNDISCH_TAC ` -- #0.0142852 + #0.00609451 * cc_azim_v11 cc (i + 3) <=\r
5926       cc_gg_v11 cc (i + 3) `;\r
5927 UNDISCH_TAC ` -- #0.0142852 + #0.00609451 * cc_azim_v11 cc (i + 2) <=\r
5928       cc_gg_v11 cc (i + 2) `;\r
5929 UNDISCH_TAC ` -- #0.0142852 + #0.00609451 * cc_azim_v11 cc (i + 1) <=\r
5930       cc_gg_v11 cc (i + 1) `;\r
5931 UNDISCH_TAC` #0.00457511 + #0.00609451 * cc_azim_v11 cc i <= cc_gg_v11 cc i `;\r
5932 PHA;\r
5933 MP_TAC PI_BOUNDS;\r
5934 REAL_ARITH_TAC]);;\r
5935 \r
5936 \r
5937 \r
5938 \r
5939 \r
5940 let LUIKGMH_concl = `!cc. cc_bool_model_v11 cc /\ cc_bool_prep_v11 cc /\ cc_real_model_v11 cc /\ \r
5941    (sum (0..cc_card_v11 cc -1) (cc_gg_v11 cc) < &0) ==> (4 <= cc_card_v11 cc)`;;\r
5942 \r
5943 \r
5944 \r
5945 let GRHIDFA_concl = `!cc. cc_bool_model_v11 cc /\ cc_bool_prep_v11 cc /\ cc_real_model_v11 cc /\ \r
5946    (sum (0..cc_card_v11 cc -1) (cc_gg_v11 cc) < &0) ==> (F)`;; \r
5947 \r
5948 \r
5949 \r
5950 let NOT_QY_LEM = prove(` !cc. cc_bool_model_v11 cc /\\r
5951           cc_bool_prep_v11 cc /\\r
5952           cc_real_model_v11 cc /\\r
5953           sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0\r
5954           ==> (!i. ~ cc_qy_v11 cc i) `, NHANH UTEOITF THEN SIMP_TAC[cc_qy_v11]);;\r
5955 \r
5956 \r
5957 \r
5958 let LUIKGMH = prove_by_refinement(LUIKGMH_concl,\r
5959 [NHANH NOT_QY_LEM;\r
5960 REPEAT STRIP_TAC;\r
5961 ASSUME_TAC2 QY_NN00 THEN ASSUME_TAC2 QX_NN00;\r
5962 ASSUME_TAC2 THREE_LE_CC_CARD;\r
5963 DOWN_TAC;\r
5964 NHANH Oxl_def.periodic_fn;\r
5965 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];\r
5966 STRIP_TAC;\r
5967 ABBREV_TAC` nn = cc_card_v11 cc `;\r
5968 ASM_CASES_TAC` nn = 3 `;\r
5969 SUBGOAL_THEN` ! i. cc_qu_v11 cc i /\ cc_gg_v11 cc i < &0 ==>  cc_azim_v11 cc i < #1.65 ` ASSUME_TAC;\r
5970 GEN_TAC THEN STRIP_TAC;\r
5971 SUBGOAL_THEN` -- #0.0659 + #0.042 * cc_azim_v11 cc i <= cc_gg_v11 cc i ` MP_TAC;\r
5972 ASM_SIMP_TAC[];\r
5973 DOWN THEN PHA;\r
5974 NHANH (REAL_ARITH` x < &0 /\ a <= x ==> a < &0 `);\r
5975 STRIP_TAC;\r
5976 DOWN;\r
5977 CONV_TAC REAL_FIELD;\r
5978 \r
5979 \r
5980 ABBREV_TAC` sxx = { i | i <= 2 /\ cc_qu_v11 cc i /\ cc_gg_v11 cc i < &0 }`;\r
5981 SUBGOAL_THEN` ! i. cc_qu_v11 cc i \/ cc_qx_v11 cc i ` ASSUME_TAC;\r
5982 GEN_TAC;\r
5983 MP_TAC (SPEC` i:num ` QU_OR_QXY);\r
5984 ASM_REWRITE_TAC[];\r
5985 ASM_CASES_TAC` (sxx:num -> bool) = {} `;\r
5986 SUBGOAL_THEN` ! i. i <= 2 ==> &0 <= cc_gg_v11 cc i ` ASSUME_TAC;\r
5987 GEN_TAC THEN STRIP_TAC;\r
5988 ASM_CASES_TAC` cc_qx_v11 cc i `;\r
5989 ASM_SIMP_TAC[];\r
5990 FIRST_X_ASSUM (MP_TAC o (SPEC`i:num `));\r
5991 ASM_REWRITE_TAC[];\r
5992 STRIP_TAC;\r
5993 ASM_CASES_TAC` cc_gg_v11 cc i < &0 `;\r
5994 SUBGOAL_THEN` i IN (sxx:num -> bool) ` MP_TAC;\r
5995 EXPAND_TAC "sxx";\r
5996 REWRITE_TAC[IN_ELIM_THM];\r
5997 ASM_REWRITE_TAC[];\r
5998 ASM_REWRITE_TAC[NOT_IN_EMPTY];\r
5999 DOWN;\r
6000 REAL_ARITH_TAC;\r
6001 \r
6002 UNDISCH_TAC` sum (0..nn - 1) (cc_gg_v11 cc ) < &0 `;\r
6003 ASM_REWRITE_TAC[ARITH_RULE` 3 - 1 = 0 + 2 `; SUM_NUMSEG3; ADD];\r
6004 REWRITE_TAC[REAL_ARITH` x < &0 <=> ~( &0 <= x) `];\r
6005 DOWN;\r
6006 \r
6007 MESON_TAC[LE_0; SUM_POS_LE_NUMSEG];\r
6008 \r
6009 DOWN;\r
6010 REWRITE_TAC[Local_lemmas.EMPTY_NOT_EXISTS_IN];\r
6011 STRIP_TAC;\r
6012 ASM_CASES_TAC` ? y. y IN sxx /\ ~( y = x:num ) `;\r
6013 DOWN THEN STRIP_TAC;\r
6014 ASSUME_TAC (SET_RULE` DISJOINT {x,y:num} ( (0..2) DIFF {x,y}) `);\r
6015 ABBREV_TAC` sc = (0..2) DIFF {x,y} `;\r
6016 SUBGOAL_THEN` x <= 2 /\ y <= 2 /\ 0 <= x /\ 0 <= y` MP_TAC;\r
6017 UNDISCH_TAC` x IN (sxx: num -> bool) `;\r
6018 UNDISCH_TAC` y IN (sxx: num -> bool) `;\r
6019 EXPAND_TAC "sxx";\r
6020 SIMP_TAC[IN_ELIM_THM; LE_0];\r
6021 STRIP_TAC;\r
6022 SUBGOAL_THEN` 0..2 = {x,y} UNION sc ` ASSUME_TAC;\r
6023 EXPAND_TAC "sc";\r
6024 \r
6025 SUBGOAL_THEN` x IN 0..2 /\ y IN 0..2 ` MP_TAC;\r
6026 ASM_REWRITE_TAC[IN_NUMSEG];\r
6027 CONV_TAC SET_RULE;\r
6028 SUBGOAL_THEN` CARD {x,y:num} = 2 ` ASSUME_TAC;\r
6029 ASM_REWRITE_TAC[Geomdetail.CARD2];\r
6030 UNDISCH_TAC` sum (0..nn - 1) (cc_gg_v11 cc ) < &0 `;\r
6031 ASM_REWRITE_TAC[ARITH_RULE` 3 - 1 = 2 `];\r
6032 ASSUME_TAC (SPECL [` 0 `;` 2 `] FINITE_NUMSEG);\r
6033 ASSUME_TAC (ISPECL [` x:num `;` y:num `] Hypermap.FINITE_TWO_ELEMENTS);\r
6034 SUBGOAL_THEN` FINITE (sc:num -> bool) ` ASSUME_TAC;\r
6035 EXPAND_TAC "sc";\r
6036 MATCH_MP_TAC FINITE_DIFF;\r
6037 FIRST_ASSUM ACCEPT_TAC;\r
6038 \r
6039 \r
6040 STRIP_TAC;\r
6041 UNDISCH_TAC` sum (0..nn - 1) (cc_azim_v11 cc) = &2 * pi `;\r
6042 ASM_REWRITE_TAC[ARITH_RULE` 3 - 1 = 2 `];\r
6043 ASM_SIMP_TAC[SUM_UNION];\r
6044 ASSUME_TAC2 (\r
6045 ISPECL [` {x:num, y} `;` sc:num -> bool `] (\r
6046 REWRITE_RULE[GSYM DISJOINT] CARD_UNION));\r
6047 DOWN;\r
6048 ASM_REWRITE_TAC[];\r
6049 MP_TAC (SPECL [` 0 `;` 2 `] CARD_NUMSEG);\r
6050 ASM_SIMP_TAC[ARITH_RULE` ( 2 + 1) - 0 = 3 `];\r
6051 PHA THEN STRIP_TAC;\r
6052 SUBGOAL_THEN` sum {x,y} (cc_azim_v11 cc) <= &(CARD {x,y}) * ( #1.65) ` ASSUME_TAC;\r
6053 MATCH_MP_TAC SUM_BOUND;\r
6054 ASM_REWRITE_TAC[];\r
6055 SUBGOAL_THEN` {x,y} SUBSET (sxx: num -> bool) ` MP_TAC;\r
6056 ASM_REWRITE_TAC[INSERT_SUBSET; EMPTY_SUBSET];\r
6057 \r
6058 REWRITE_TAC[SUBSET];\r
6059 DISCH_THEN NHANH;\r
6060 GEN_TAC THEN STRIP_TAC;\r
6061 MATCH_MP_TAC REAL_LT_IMP_LE;\r
6062 FIRST_X_ASSUM MATCH_MP_TAC;\r
6063 DOWN;\r
6064 EXPAND_TAC "sxx";\r
6065 REWRITE_TAC[IN_ELIM_THM];\r
6066 SIMP_TAC[];\r
6067 \r
6068 \r
6069 SUBGOAL_THEN` sum sc (cc_azim_v11 cc) < &(CARD sc) * ( #2.8) ` ASSUME_TAC;\r
6070 MATCH_MP_TAC SUM_BOUND_LT_ALL;\r
6071 ASM_REWRITE_TAC[];\r
6072 CONJ_TAC;\r
6073 STRIP_TAC;\r
6074 FIRST_X_ASSUM SUBST_ALL_TAC;\r
6075 UNDISCH_TAC` 3 = 2 + (CARD ({}:num -> bool))` ;\r
6076 REWRITE_TAC[CARD_EMPTY];\r
6077 ARITH_TAC;\r
6078 GEN_TAC THEN STRIP_TAC;\r
6079 FIRST_X_ASSUM MATCH_MP_TAC;\r
6080 FIRST_X_ASSUM (MP_TAC o (SPEC` x':num `));\r
6081 SIMP_TAC[cc_qu_v11; cc_qx_v11];\r
6082 MESON_TAC[];\r
6083 \r
6084 \r
6085 DOWNS 2;\r
6086 NHANH (REAL_ARITH` a <= aa /\ b < bb ==> a + b < aa + bb `);\r
6087 ASM_REWRITE_TAC[];\r
6088 STRIP_TAC;\r
6089 UNDISCH_TAC` 3 = 2 + CARD (sc:num -> bool) `;\r
6090 REWRITE_TAC[ARITH_RULE` 3 = 2 + x <=> x = 1 `];\r
6091 DISCH_THEN (SUBST_ALL_TAC);\r
6092 DOWN;\r
6093 MP_TAC PI_BOUNDS;\r
6094 REAL_ARITH_TAC;\r
6095 \r
6096 SUBGOAL_THEN` ! i. #2.3 < cc_azim_v11 cc i ==> cc_eps <= cc_gg_v11 cc i ` ASSUME_TAC;\r
6097 GEN_TAC;\r
6098 FIRST_X_ASSUM (MP_TAC o (SPEC` i:num `));\r
6099 STRIP_TAC;\r
6100 STRIP_TAC;\r
6101 MATCH_MP_TAC REAL_LE_TRANS;\r
6102 EXISTS_TAC` -- #0.0659 + #0.042 * cc_azim_v11 cc i `;\r
6103 ASM_SIMP_TAC[];\r
6104 DOWN;\r
6105 REWRITE_TAC[cc_eps];\r
6106 REAL_ARITH_TAC;\r
6107 ASM_SIMP_TAC[];\r
6108 \r
6109 ASSUME_TAC2 (\r
6110 SET_RULE` x IN sxx /\ ~(?y. y IN sxx /\ ~(y = x)) ==> sxx = {x:num} `);\r
6111 ABBREV_TAC` sc = (0..2) DIFF sxx `;\r
6112 ASSUME_TAC (SPECL [` 0 `;` 2 `] FINITE_NUMSEG);\r
6113 SUBGOAL_THEN` FINITE ((0..2) DIFF sxx ) ` ASSUME_TAC;\r
6114 DOWN;\r
6115 REWRITE_TAC[FINITE_DIFF];\r
6116 DOWNS 3;\r
6117 ASM_REWRITE_TAC[];\r
6118 STRIP_TAC;\r
6119 UNDISCH_TAC` x IN (sxx:num -> bool) `;\r
6120 EXPAND_TAC "sxx";\r
6121 REWRITE_TAC[IN_ELIM_THM];\r
6122 STRIP_TAC;\r
6123 SUBGOAL_THEN` x IN (0..2) ` ASSUME_TAC;\r
6124 ASM_REWRITE_TAC[IN_NUMSEG; LE_0];\r
6125 \r
6126 DOWN;\r
6127 NHANH (SET_RULE` x IN S ==> DISJOINT {x} (S DIFF {x}) `);\r
6128 ASM_REWRITE_TAC[];\r
6129 STRIP_TAC;\r
6130 ASSUME_TAC2 (SET_RULE` x IN (0..2) ==> {x} UNION ((0..2) DIFF {x}) = (0..2) `);\r
6131 MP_TAC (ISPECL [` {x:num } `;`sc: num -> bool `] CARD_UNION);\r
6132 ANTS_TAC;\r
6133 ASM_REWRITE_TAC[GSYM DISJOINT];\r
6134 UNDISCH_TAC` FINITE ((0..2) DIFF {x})`;\r
6135 ASM_REWRITE_TAC[FINITE_SING];\r
6136 DOWN;\r
6137 ASM_SIMP_TAC[CARD_SING; CARD_NUMSEG; ARITH_RULE` (2 + 1) - 0 = 3 `];\r
6138 REWRITE_TAC[ARITH_RULE` 3 = 1 + x <=> x = 2 `];\r
6139 PHA THEN STRIP_TAC;\r
6140 SUBGOAL_THEN` FINITE (sc:num -> bool) ` ASSUME_TAC;\r
6141 EXPAND_TAC "sc";\r
6142 FIRST_X_ASSUM ACCEPT_TAC;\r
6143 ASM_CASES_TAC` ! i. i IN sc ==> \r
6144 cc_azim_v11 cc i <= #2.3 ` ;\r
6145 DOWNS 2;\r
6146 NHANH SUM_LE;\r
6147 REWRITE_TAC[ETA_AX];\r
6148 IMP_TAC;\r
6149 ASM_SIMP_TAC[SUM_CONST];\r
6150 PHA THEN STRIP_TAC;\r
6151 \r
6152 UNDISCH_TAC` sum (0..nn - 1) (cc_azim_v11 cc) = &2 * pi `;\r
6153 ASM_REWRITE_TAC[ARITH_RULE` 3 - 1 = 2 `];\r
6154 UNDISCH_TAC` {x} UNION sc = 0..2 `;\r
6155 DISCH_THEN (SUBST1_TAC o SYM);\r
6156 ASM_SIMP_TAC[SUM_UNION; FINITE_SING; SUM_SING];\r
6157 SUBGOAL_THEN` cc_azim_v11 cc x < #1.65 ` MP_TAC;\r
6158 FIRST_X_ASSUM MATCH_MP_TAC;\r
6159 ASM_REWRITE_TAC[];\r
6160 DOWN;\r
6161 MP_TAC PI_BOUNDS;\r
6162 REAL_ARITH_TAC;\r
6163 DOWN;\r
6164 REWRITE_TAC[MESON[]` (~(! i. p i ==> q i)) <=> (? i. p i /\ ~ q i ) `];\r
6165 REWRITE_TAC[REAL_ARITH` ~( x <= y ) <=> y < x `];\r
6166 STRIP_TAC;\r
6167 \r
6168 \r
6169 FIRST_ASSUM (ASSUME_TAC2 o (SPEC` i:num `));\r
6170 ASSUME_TAC2 (SET_RULE` (i:num) IN sc ==> sc = {i} UNION (sc DIFF {i})`);\r
6171 ABBREV_TAC` scc = sc DIFF {i:num} `;\r
6172 SUBGOAL_THEN` FINITE ( sc DIFF {i:num}) ` ASSUME_TAC;\r
6173 MATCH_MP_TAC FINITE_DIFF;\r
6174 ASM_REWRITE_TAC[];\r
6175 SUBGOAL_THEN` ! j. j IN sc ==> &0 <= cc_gg_v11 cc j ` ASSUME_TAC;\r
6176 EXPAND_TAC "sc";\r
6177 UNDISCH_TAC` sxx = {x:num} `;\r
6178 DISCH_THEN (SUBST1_TAC o SYM);\r
6179 EXPAND_TAC "sxx";\r
6180 REWRITE_TAC[IN_DIFF; IN_NUMSEG; IN_ELIM_THM; LE_0; DE_MORGAN_THM];\r
6181 GEN_TAC THEN IMP_TAC;\r
6182 SIMP_TAC[];\r
6183 PHA THEN STRIP_TAC;\r
6184 MP_TAC (SPEC` j:num` QU_OR_QXY);\r
6185 ASM_REWRITE_TAC[];\r
6186 DOWN;\r
6187 REAL_ARITH_TAC;\r
6188 \r
6189 UNDISCH_TAC` sum (0.. nn - 1) (cc_gg_v11 cc ) < &0 `;\r
6190 ASM_SIMP_TAC[ARITH_RULE` 3 - 1 = 2 `];\r
6191 UNDISCH_TAC` {x} UNION sc = 0..2 `;\r
6192 DISCH_THEN (SUBST1_TAC o SYM);\r
6193 UNDISCH_TAC ` sc = {i:num} UNION scc `;\r
6194 DISCH_THEN (ASSUME_TAC o SYM);\r
6195 ASM_SIMP_TAC[SUM_UNION; FINITE_SING; SUM_SING];\r
6196 FIRST_X_ASSUM (ASSUME_TAC o SYM);\r
6197 UNDISCH_TAC` FINITE (sc DIFF {i:num}) `;\r
6198 \r
6199 MP_TAC (SET_RULE` DISJOINT {i} (sc DIFF {i:num} ) `);\r
6200 ASM_SIMP_TAC[SUM_UNION; FINITE_SING; SUM_SING];\r
6201 PHA THEN STRIP_TAC;\r
6202 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc x ` ASSUME_TAC;\r
6203 ASSUME_TAC2 (LEAST_BOUND_CC_GG);\r
6204 ASM_REWRITE_TAC[];\r
6205 SUBGOAL_THEN` &0 <= sum scc (cc_gg_v11 cc) ` ASSUME_TAC;\r
6206 MATCH_MP_TAC SUM_POS_LE;\r
6207 ASM_REWRITE_TAC[];\r
6208 EXPAND_TAC "scc";\r
6209 REWRITE_TAC[IN_DIFF];\r
6210 FIRST_X_ASSUM NHANH;\r
6211 SIMP_TAC[];\r
6212 DOWNS 3;\r
6213 UNDISCH_TAC` cc_eps <= cc_gg_v11 cc i `;\r
6214 REAL_ARITH_TAC;\r
6215 DOWN;\r
6216 UNDISCH_TAC` 3 <= nn `;\r
6217 ARITH_TAC]);;\r
6218 \r
6219 \r
6220 \r
6221 let GRHIDFA = prove(GRHIDFA_concl, \r
6222 PHA THEN NHANH LUIKGMH THEN NHANH GRHIDFA_ALT THEN NHANH RSIWAMP\r
6223 THEN GEN_TAC THEN STRIP_TAC THEN DOWNS 3 THEN ARITH_TAC);;\r
6224 \r
6225 \r
6226 \r
6227 (* =================================================== *)\r
6228 \r
6229 (* =================\r
6230 \r
6231 \r
6232 search[name "RSI"];;\r
6233 \r
6234 \r
6235 \r
6236 g ` !cc. ((cc_bool_model_v11 cc /\\r
6237            cc_bool_prep_v11 cc /\\r
6238            cc_real_model_v11 cc /\\r
6239            sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0) /\\r
6240           cc_card_v11 cc = 5 ) /\\r
6241           ~cc_small_v11 cc i /\ cc_qx_v11 cc i /\ cc_qx_v11 cc ( i + 4) ==> F `;;\r
6242 \r
6243 \r
6244 els [REPEAT STRIP_TAC;\r
6245 ASSUME_TAC2 QY_NN00 THEN ASSUME_TAC2 QX_NN00;\r
6246 ASSUME_TAC2 EXISTS_QY_CARD5;\r
6247 DOWN_TAC;\r
6248 NHANH Oxl_def.periodic_fn;\r
6249 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];\r
6250 ONCE_REWRITE_TAC[TAUT` ~ a <=> a ==> F `];\r
6251 IMP_TAC;\r
6252 IMP_TAC;\r
6253 STRIP_TAC;\r
6254 STRIP_TAC;\r
6255 STRIP_TAC;\r
6256 \r
6257 ABBREV_TAC` nn = cc_card_v11 cc `];;\r
6258 \r
6259 \r
6260 \r
6261 \r
6262 \r
6263 \r
6264 \r
6265 ASM_REWRITE_TAC[];\r
6266 ASSUME_TAC2 (ISPECL [` cc_gg_v11 cc `; ` nn:num `] Oxl_def.periodic_sum);\r
6267 SUBGOAL_THEN` cc_gg_v11 cc i' + cc_gg_v11 cc (i' + 1) + cc_gg_v11 cc (i' + 3 - 1) = sum (0..nn - 1) (cc_gg_v11 cc) ` MP_TAC;\r
6268 FIRST_X_ASSUM (SUBST1_TAC o SYM o (SPEC` i':num `));\r
6269 ASM_SIMP_TAC[ARITH_RULE` 3 - 1 + i = i + 2 `];\r
6270 SIMP_TAC[SUM_CLAUSES_LEFT; ARITH_RULE` i <= i + 2 /\ i + 1 <= i + 2 /\ (i + 1) + 1 = i + 2 `; SUM_SING_NUMSEG];\r
6271 SIMP_TAC[ARITH_RULE` 3 - 1 = 2 `];\r
6272 SIMP_TAC[Oxl_def.cc_eps];\r
6273 NHANH (REAL_ARITH` &2 * #0.0057 <= x ==> ~( x < &0 ) `);\r
6274 ASM_REWRITE_TAC[];\r
6275 \r
6276 ASSUME_TAC2 (ARITH_RULE` nn <= 4 /\ 3 <= nn /\ ~( nn = 3) ==> nn = 4 `);\r
6277 ASSUME_TAC2 (ISPECL [` cc_gg_v11 cc `; ` nn:num `] Oxl_def.periodic_sum);\r
6278 UNDISCH_TAC` sum (0..nn - 1) (cc_gg_v11 cc) < &0`;\r
6279 FIRST_X_ASSUM (SUBST1_TAC o SYM o (SPEC` i':num `));\r
6280 ASM_SIMP_TAC[ARITH_RULE` 4 - 1 + i = i + 3 `];\r
6281 SIMP_TAC[SUM_CLAUSES_LEFT; ARITH_RULE` i <= i + 3 /\ i + 1 <= i + 3 /\ (i + 1) + 1 = i + 2 `; SUM_SING_NUMSEG];\r
6282 SIMP_TAC[SUM_CLAUSES_LEFT; ARITH_RULE` i + 2 <= i + 3 /\ (i + 2) + 1 = i + 3`; SUM_SING_NUMSEG];\r
6283 ASSUME_TAC2 LEAST_BOUND_CC_GG;\r
6284 FIRST_X_ASSUM (ASSUME_TAC o (SPEC `i' + 2 `));\r
6285 DOWN;\r
6286 UNDISCH_TAC` &2 * cc_eps <=\r
6287       cc_gg_v11 cc i' + cc_gg_v11 cc (i' + 1) + cc_gg_v11 cc (i' + nn - 1) `;\r
6288 ASM_SIMP_TAC[ARITH_RULE` 4 - 1 = 3 `; Oxl_def.cc_eps]];;\r
6289 \r
6290 \r
6291 \r
6292 \r
6293 \r
6294 \r
6295 \r
6296 *)\r
6297 \r
6298 \r
6299 end;;\r