1 (* ========================================================================== *)
\r
2 (* FLYSPECK - BOOK FORMALIZATION *)
\r
4 (* Chapter: Packing *)
\r
6 (* Author: Nguyen Quang Truong *)
\r
7 (* Date: 2012-12-21 *)
\r
8 (* ========================================================================== *)
\r
12 module Oxl_2012 = struct
\r
20 needs "/home/user1/flyspeck/working/boot.hl";;
\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
31 needs "/home/user1/flyspeck/working/oxl_2012.hl";;
\r
41 let asms_search0 sths =
\r
42 let rec immediatesublist l1 l2 =
\r
46 | (h1::t1,h2::t2) -> h1 = h2 & immediatesublist t1 t2 in
\r
47 let rec sublist l1 l2 =
\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
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
61 let triv,nontriv = partition is_var pats in
\r
64 ("Ignoring plain variables in search: "^
\r
65 end_itlist (fun s t -> s^", "^t) (map (fst o dest_var) triv))
\r
67 (if nontriv = [] & triv <> [] then []
\r
68 else itlist (filter o filterpred) pats sths);;
\r
70 let asms_search tms =
\r
71 let gstk = !current_goalstack in
\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
79 let ASMS_SEARCH_TCL (tms:(term)list) (thstac:(thm)list->tactic) : tactic =
\r
81 let (sths,tm) = gl in
\r
82 let ths1 = map snd (asms_search0 sths tms) in
\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
94 let ATTACH thm = MATCH_MP (MESON[]` ! a b. ( a ==> b ) ==> ( a <=> a /\ b )`) thm;;
\r
96 let NHANH tm = ONCE_REWRITE_TAC[ ATTACH (SPEC_ALL ( tm ))];;
\r
98 let PHA = REWRITE_TAC[ MESON[] ` (a/\b)/\c <=> a/\ b /\ c `; MESON[]`
\r
99 a ==> b ==> c <=> a /\ b ==> c `];;
\r
101 let DOWN_TAC = REPEAT (FIRST_X_ASSUM MP_TAC) THEN REWRITE_TAC[IMP_IMP] THEN PHA;;
\r
104 let DOWN = FIRST_X_ASSUM MP_TAC;;
\r
106 let DOWNS n = REPLICATE_TAC n DOWN THEN PHA;;
\r
108 let REMOVE_TAC = FIRST_X_ASSUM MP_TAC THEN MATCH_MP_TAC (TAUT` a ==> b ==> a`);;
\r
111 let types_thm th = let cl = concl th in
\r
112 List.map dest_var (frees cl );;
\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
124 let PAT_REWRITE_TAC tm thms =
\r
125 (CONV_TAC (PAT_CONV tm (REWRITE_CONV thms )));;
\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
132 (* change a th having form |- A ==> t to the form A |- t
\r
133 to get ready to some other commands
\r
137 ----------- FOR_ASM
\r
141 let ASSUME_TAC2 = ASSUME_TAC o FOR_ASM;;
\r
144 let PAT_ONCE_REWRITE_TAC tm thms =
\r
145 (CONV_TAC (PAT_CONV tm (ONCE_REWRITE_CONV thms )));;
\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
151 let PAT_TH_TAC tm th =
\r
152 (CONV_TAC (PAT_CONV tm (REWRITE_CONV[th] )));;
\r
155 let IMP_TO_EQ_RULE th = MATCH_MP (TAUT` (a ==> b ) ==>
\r
156 ( a <=> a /\ b )`) (SPEC_ALL th);;
\r
158 let NHANH_PAT tm th = PAT_ONCE_REWRITE_TAC tm
\r
159 [ IMP_TO_EQ_RULE th ];;
\r
162 let MAKE_FIRST_TAC tm = UNDISCH_TAC tm THEN DISCH_TAC;;
\r
165 (* ---------- BG TEST ------------- *)
\r
169 let rec els L = match L with
\r
171 | (x::l) -> e x; els l;;
\r
173 let rec bls L = match L with
\r
175 | (x::l) -> b (); bls l;;
\r
181 (* ------------- *)
\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
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
190 let MOD_REFL = REWRITE_RULE[MULT_CLAUSES] (SPECL [`m:num `;`1`] MOD_MULT);;
\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
197 REWRITE_TAC[LE; SUM_CLAUSES_NUMSEG];
\r
201 FIRST_X_ASSUM (MP_TAC o (SPEC` 0`));
\r
202 ASM_REWRITE_TAC[LE];
\r
206 ASM_CASES_TAC` m = SUC n `;
\r
207 ASM_REWRITE_TAC[SUM_SING_NUMSEG];
\r
209 FIRST_X_ASSUM (MP_TAC o (SPEC` SUC n `));
\r
210 FIRST_X_ASSUM MP_TAC;
\r
214 SUBGOAL_THEN` &0 < sum (m..n) f ` MP_TAC;
\r
215 FIRST_X_ASSUM MATCH_MP_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
224 MATCH_MP_TAC REAL_LT_ADD;
\r
226 FIRST_X_ASSUM MATCH_MP_TAC;
\r
227 ASM_REWRITE_TAC[LE_REFL]]);;
\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
238 REWRITE_TAC[MULT; ADD];
\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
243 MESON_TAC[ADD_SYM];
\r
245 DISCH_THEN (MP_TAC o (SPEC`1 `));
\r
246 REWRITE_TAC[MULT_CLAUSES];
\r
247 MESON_TAC[ADD_SYM]]);;
\r
252 (* =================================================== *)
\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
263 ~(i = j \/ j = k \/ k = i) /\
\r
267 cc_4cell_v11 cc i /\
\r
268 cc_4cell_v11 cc j /\
\r
269 cc_4cell_v11 cc k)`;;
\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
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
283 REWRITE_TAC[cc_real_model_v11; cc_bool_model_v11]] THEN
\r
285 REPEAT STRIP_TAC THEN
\r
286 SUBGOAL_THEN` ! i. i IN indSet ==> &0 < cc_gg_v11 cc i ` MP_TAC THENL [
\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
293 FIRST_ASSUM NHANH THEN
\r
296 UNDISCH_TAC` !i. #0.606 <= cc_azim_v11 cc i ` THEN
\r
298 FIRST_ASSUM (MP_TAC o (SPEC` i: num `)) THEN
\r
302 SUBGOAL_THEN` &0 < sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) ` MP_TAC THENL
\r
305 [MATCH_MP_TAC SUM_POS_LT_NUMSEG THEN CONJ_TAC THENL
\r
306 [UNDISCH_TAC` ~ (cc_card_v11 cc = 0) ` THEN
\r
309 REPEAT STRIP_TAC THEN
\r
310 FIRST_X_ASSUM MATCH_MP_TAC THEN
\r
311 ASM_REWRITE_TAC[IN_NUMSEG]];
\r
314 UNDISCH_TAC` sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc) < &0 ` THEN
\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
323 let e2 = (FIRST_X_ASSUM MP_TAC THEN
\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
329 SUBGOAL_THEN`!j. j IN indSet /\ ~(j = i) ==> cc_qy_v11 cc j ` MP_TAC THENL [
\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
340 SUBGOAL_THEN` cc_qu_v11 cc i \/ cc_qx_v11 cc i ` MP_TAC] THENL [
\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
349 SUBGOAL_THEN` cc_qy_v11 cc (i + 1)` MP_TAC]);;
\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
364 UNDISCH_TAC` (i:num) IN indSet ` THEN
\r
365 ASM_REWRITE_TAC[IN_NUMSEG] 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
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
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
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
391 (* ------------------------------------- *)
\r
393 REWRITE_TAC[cc_real_model_v11] 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
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
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
408 REWRITE_TAC[REAL_LE_ADDR] THEN
\r
409 FIRST_X_ASSUM MATCH_MP_TAC THEN
\r
412 FIRST_X_ASSUM MATCH_MP_TAC THEN
\r
413 ASM_REWRITE_TAC[]];
\r
417 NHANH (REAL_ARITH` a <= b /\ c <= d + a ==> c <= d + b `));;
\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
426 ~(i = j \/ j = k \/ k = i) /\
\r
430 cc_4cell_v11 cc i /\
\r
431 cc_4cell_v11 cc j /\
\r
432 cc_4cell_v11 cc k)`
\r
436 (* =============================================
\r
437 ================================================
\r
438 let WKR_COMPTED = prove_by_refinement (glt ,
\r
449 MP_TAC (SPECL [` cc_gg_v11 cc `;` cc_card_v11 cc`] periodic_sum) THEN
\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
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
463 REWRITE_TAC[IN_NUMSEG] THEN
\r
464 FIRST_ASSUM MP_TAC THEN
\r
468 DISCH_THEN SUBST1_TAC THEN
\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
473 MATCH_MP_TAC SUM_UNION THEN
\r
475 MESON_TAC[FINITE_NUMSEG; FINITE_DIFF];
\r
477 MESON_TAC[FINITE_EMPTY; FINITE_INSERT];
\r
483 MATCH_MP_TAC REAL_LE_ADD THEN
\r
487 MATCH_MP_TAC SUM_POS_LE THEN CONJ_TAC THENL [
\r
488 MESON_TAC[FINITE_NUMSEG; FINITE_DIFF];
\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
498 ASM_REWRITE_TAC[] THEN
\r
499 FIRST_ASSUM MP_TAC THEN
\r
500 REWRITE_TAC[IN_DIFF; IN_INSERT] THEN
\r
505 MP_TAC (MATCH_MP Geomdetail.SUM_DIS2 (ARITH_RULE` ~( i = i + 1 ) `)) 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
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
522 DISCH_THEN SUBST1_TAC] THEN
\r
524 SUBGOAL_THEN` FINITE ((0..cc_card_v11 cc - 1) DIFF {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
533 MATCH_MP_TAC REAL_LE_ADD THEN
\r
535 MATCH_MP_TAC SUM_POS_LE THEN
\r
536 ASM_REWRITE_TAC[] THEN
\r
538 REWRITE_TAC[IN_DIFF; IN_INSERT] 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
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
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
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
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
577 ASM_REWRITE_TAC[REAL_ARITH` a <= b <=> ~( b < a ) `];
\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
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
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
595 SUBGOAL_THEN` &0 <= sum (0..cc_card_v11 cc - 1) (cc_gg_v11 cc)` MP_TAC;
\r
598 MATCH_MP_TAC SUM_POS_LE_NUMSEG;
\r
600 ASM_CASES_TAC` p = (i:num) `;
\r
602 MATCH_MP_TAC QX_NN0;
\r
605 MATCH_MP_TAC QY_NN0;
\r
608 FIRST_X_ASSUM MATCH_MP_TAC THEN
\r
609 ASM_REWRITE_TAC[IN_NUMSEG];
\r
611 ASM_REWRITE_TAC[REAL_ARITH` a <= b <=> ~( b < a ) `];
\r
616 FIRST_X_ASSUM MP_TAC THEN
\r
617 REWRITE_TAC[] THEN
\r
619 ASM_CASES_TAC` ~(? k. (k IN indSet /\ ~(k = i) /\ ~(k = j)) /\ cc_4cell_v11 cc k)`;
\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
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
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
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
640 REWRITE_TAC[cc_real_model_v11] 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
649 SUBGOAL_THEN` sum (0..cc_card_v11 cc - 1) (cc_azim_v11 cc) <= sum {i, j} (cc_azim_v11 cc) ` MP_TAC;
\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
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
665 FIRST_ASSUM NHANH THEN
\r
668 MP_TAC (MESON[Flyspeck_constants.bounds]` #3.14159 < pi`) THEN
\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
674 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC) THEN
\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
688 ~(i = j \/ j = k \/ k = i) /\
\r
692 cc_4cell_v11 cc i /\
\r
693 cc_4cell_v11 cc j /\
\r
700 SUBGOAL_THEN` ?ii jj. {ii, jj} = {i:num, j} /\ cc_qy_v11 cc (ii + 1)` MP_TAC;
\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
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
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
722 SUBGOAL_THEN` m1 = (i:num) \/ m1 = j ` MP_TAC;
\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
735 50 [`~cc_qy_v11 cc (i + 1)`]
\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
744 ABBREV_TAC` nn = cc_card_v11 cc ` 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
751 ASM_REWRITE_TAC[IN_NUMSEG] THEN
\r
753 ASM_CASES_TAC` m = nn - 1 `;
\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
759 ASM_REWRITE_TAC[] THEN
\r
760 UNDISCH_TAC` 2 <= nn ` THEN
\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
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
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
777 FIRST_ASSUM (ASSUME_TAC2 o (SPEC` i + 1 `));
\r
778 FIRST_ASSUM (ASSUME_TAC2 o (SPEC` j + 1 `));
\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
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
791 ASM_CASES_TAC` j + 1 = nn `;
\r
795 `nn MOD nn = i ==> ~((i + 1) MOD nn = j)`
\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
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
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
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
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
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
841 ASM_REWRITE_TAC[] THEN
\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
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
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
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
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
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
878 ASM_CASES_TAC` jj = 0 `;
\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
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
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
907 EXISTS_TAC` jj - 1 ` THEN
\r
908 EXISTS_TAC` 0 ` THEN
\r
909 REWRITE_TAC[MULT; ADD] THEN
\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
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
924 ASM_REWRITE_TAC[IN_NUMSEG] THEN
\r
927 CONJ_TAC THENL [FIRST_X_ASSUM MP_TAC THEN
\r
928 ARITH_TAC; REWRITE_TAC[]]];
\r
931 ASM_CASES_TAC` jj - 1 = ii' ` THENL [
\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
944 FIRST_X_ASSUM MATCH_MP_TAC THEN
\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
962 53 [`~(jj - 1 = ii')`]
\r
964 `~(jj - 1 = i) /\ ~(jj - 1 = j)`
\r
969 SUBGOAL_THEN` ~( jj - 1 IN {ii', jj:num})` MP_TAC;
\r
970 REWRITE_TAC[IN_INSERT; NOT_IN_EMPTY];
\r
972 UNDISCH_TAC` ~( jj = 0) `;
\r
978 (* ================== *)
\r
984 54 [`nj + 1 = k * nn + jj`]
\r
985 55 [`cc_qy_v11 cc nj`]
\r
988 ~(i = j \/ j = k \/ k = i) /\
\r
992 cc_4cell_v11 cc i /\
\r
993 cc_4cell_v11 cc j /\
\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
1007 REWRITE_TAC[IN_NUMSEG] THEN
\r
1008 UNDISCH_TAC` ~( nn = 0) ` THEN
\r
1009 UNDISCH_TAC` nj < nn:num ` THEN
\r
1013 REWRITE_TAC[IN_NUMSEG] THEN
\r
1014 UNDISCH_TAC` ~( nn = 0) ` THEN
\r
1015 UNDISCH_TAC` r < nn:num ` THEN
\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
1025 SUBGOAL_THEN` &0 <= sum ({nj, r, ii', jj}) (cc_gg_v11 cc)` MP_TAC;
\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
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
1042 SUBGOAL_THEN` ! f. sum ({nj, r:num} UNION {i, j}) f = sum {nj, r} f + sum {i, j} f ` MP_TAC THENL [
\r
1044 MATCH_MP_TAC SUM_UNION THEN
\r
1045 UNDISCH_TAC` DISJOINT {nj, r} {ii', jj:num} ` THEN
\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
1059 `&0 <= sum {nj, r} (cc_gg_v11 cc) + sum {i, j} (cc_gg_v11 cc)`
\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
1069 (* AHTYRED ================= *)
\r
1071 ASM_CASES_TAC` cc_qu_v11 cc i' `;
\r
1072 FIRST_X_ASSUM MP_TAC;
\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
1077 REWRITE_TAC[cc_eps];
\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
1085 ASM_SEARCH_TCL [`&0 <= cc_gg3a_v11 cc i `] NHANH;
\r
1086 FIRST_X_ASSUM MP_TAC;
\r
1089 ASM_SEARCH_TCL [` &0 <= cc_gg3a_v11 cc i`] NHANH;
\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
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
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
1110 `!i. cc_qy_v11 cc i ==> &0 <= cc_gg3b_v11 cc i + cc_gg_v11 cc (i + 1)`
\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
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
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
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
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
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
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
1167 ASM_SEARCH_TCL [` cc_qy_v11 cc i ==> x `;` cc_gg3b_v11 `] (MP_TAC o (SPEC`nj: num`));
\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
1175 ASM_SEARCH_TCL [` cc_qy_v11 cc i ==> a + b <= c`] (MP_TAC o (SPEC` nj: num `));
\r
1177 ASM_REWRITE_TAC[cc_qy_v11];
\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
1189 ASM_REWRITE_TAC[cc_qy_v11];
\r
1190 FIRST_X_ASSUM (MP_TAC o (SPEC ` ii': num`));
\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
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
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
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
1210 ASM_REWRITE_TAC[cc_qy_v11];
\r
1213 (* =============xxxxx=========================== *)
\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
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
1223 MATCH_MP_TAC FINITE_DIFF;
\r
1224 REWRITE_TAC[FINITE_NUMSEG];
\r
1226 REWRITE_TAC[IN_DIFF];
\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
1235 REWRITE_TAC[IN_INSERT];
\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
1243 MATCH_MP_TAC FINITE_DIFF;
\r
1244 REWRITE_TAC[FINITE_NUMSEG];
\r
1247 REWRITE_TAC[Geomdetail.FINITE6];
\r
1249 DISCH_THEN SUBST1_TAC;
\r
1250 MATCH_MP_TAC REAL_LE_ADD;
\r
1251 ASM_REWRITE_TAC[];
\r
1253 NHANH (REAL_ARITH` &0 <= a ==> ~( a < &0) `);
\r
1254 ASM_REWRITE_TAC[];
\r
1256 FIRST_X_ASSUM MP_TAC;
\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
1267 (* ===========================
\r
1268 let oxl6142 = prove_by_refinement (CHQSQEY_concl,
\r
1270 ABBREV_TAC` indSet = 0..cc_card_v11 cc - 1 `;
\r
1272 MP_TAC WKR_COMPTED;
\r
1274 ASM_REWRITE_TAC[];
\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
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
1288 FIRST_X_ASSUM MP_TAC;
\r
1290 NHANH CARD_SUBSET;
\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
1298 =============================== *)
\r
1300 (* ================================================ *)
\r
1302 (* let CHQSQEY = oxl6142;; *)
\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
1309 let LXDEYBO = prove_by_refinement (LXDEYBO_concl,
\r
1311 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11; cc_size_v11];
\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
1321 REWRITE_TAC[FINITE_NUMSEG];
\r
1325 REWRITE_TAC[IN_DIFF; IN_ELIM_THM; DE_MORGAN_THM];
\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
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
1336 MATCH_MP_TAC FINITE_SUBSET;
\r
1337 EXISTS_TAC` S: num -> bool `;
\r
1340 REWRITE_TAC[FINITE_NUMSEG];
\r
1344 REWRITE_TAC[IN_ELIM_THM];
\r
1345 ASM_SEARCH_TCL [` cc_4cell_v11 cc i ==> a <= b `] NHANH;
\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
1354 REWRITE_TAC[FINITE_NUMSEG];
\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
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
1373 REWRITE_TAC[FINITE_NUMSEG];
\r
1374 ASM_REWRITE_TAC[];
\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
1382 REWRITE_TAC[FINITE_NUMSEG];
\r
1384 SUBGOAL_THEN` ss SUBSET (S:num -> bool) ` ASSUME_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
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
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
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
1421 UNDISCH_TAC` sum S (cc_gg_v11 cc) < &0 `;
\r
1424 FIRST_X_ASSUM MP_TAC;
\r
1428 (* ================================== *)
\r
1430 let IMP_TAC = ONCE_REWRITE_TAC[TAUT` a /\ b ==> c <=> a ==> b ==> c `];;
\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
1442 cc_gg_v11 cc i < &0 /\
\r
1444 cc_4cell_v11 cc (i + 1) /\
\r
1445 cc_4cell_v11 cc (i - 1))`;;
\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
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
1470 let MTMLSRF = prove_by_refinement (MTMLSRF_concl,
\r
1471 [REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];
\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
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
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
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
1493 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `];
\r
1494 FIRST_X_ASSUM MP_TAC;
\r
1497 ASM_CASES_TAC` ~( ?i. 0 < i /\
\r
1498 cc_gg_v11 cc i < &0 /\
\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
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
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
1517 SUBGOAL_THEN` DISJOINT ss (sab: num -> bool) ` MP_TAC;
\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
1523 SUBGOAL_THEN` FINITE (S:num -> bool) ` MP_TAC;
\r
1525 REWRITE_TAC[FINITE_NUMSEG];
\r
1527 SUBGOAL_THEN` ss SUBSET (S:num -> bool) /\ sab SUBSET S ` ASSUME_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
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
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
1550 REWRITE_TAC[SUBSET; IN_ELIM_THM];
\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
1557 SUBGOAL_THEN` !x. x IN sbb ==> cc_qy_v11 cc x ` ASSUME_TAC;
\r
1560 SUBGOAL_THEN` !x. x IN sab ==> cc_qy_v11 cc x ` ASSUME_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
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
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
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
1596 NHANH (SET_RULE` s SUBSET S ==> DISJOINT s (S DIFF s) /\ s UNION ( S DIFF s) = S`);
\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
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
1613 EXISTS_TAC`\i. if i = nn then 1 else i + 1 `;
\r
1618 REWRITE_TAC[IN_ELIM_THM; EXISTS_UNIQUE];
\r
1620 ASM_CASES_TAC` 0 < i' `;
\r
1621 EXISTS_TAC` i':num `;
\r
1622 ASM_REWRITE_TAC[];
\r
1625 UNDISCH_TAC` i' + 1 IN S `;
\r
1626 FIRST_X_ASSUM MP_TAC;
\r
1628 REWRITE_TAC[IN_NUMSEG];
\r
1630 SUBGOAL_THEN` ~(i' = (nn:num)) ` MP_TAC;
\r
1631 UNDISCH_TAC` i' + 1 IN S `;
\r
1633 REWRITE_TAC[IN_NUMSEG];
\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
1646 ASM_REWRITE_TAC[];
\r
1648 SUBST_ALL_TAC (ARITH_RULE` ~( 0 < i') <=> i' = 0 `);
\r
1649 EXISTS_TAC `nn:num `;
\r
1650 ASM_REWRITE_TAC[];
\r
1653 REWRITE_TAC[IN_NUMSEG; LE_REFL; ADD];
\r
1654 MP_TAC (SPEC_ALL CC_CARD2);
\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
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
1664 ASM_REWRITE_TAC[cc_bool_model_v11];
\r
1665 ASM_REWRITE_TAC[];
\r
1667 SIMP_TAC[Oxl_def.periodic];
\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
1684 REWRITE_TAC[IN_NUMSEG];
\r
1685 ASM_CASES_TAC` y' = (nn:num) `;
\r
1686 ASM_REWRITE_TAC[];
\r
1687 ASM_REWRITE_TAC[];
\r
1694 REWRITE_TAC[IN_ELIM_THM];
\r
1697 ASM_CASES_TAC` x = (nn: num) `;
\r
1699 ASM_REWRITE_TAC[ADD];
\r
1701 REWRITE_TAC[IN_NUMSEG];
\r
1703 MP_TAC (SPEC_ALL CC_CARD2);
\r
1705 ASM_REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];
\r
1706 ASM_REWRITE_TAC[];
\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
1716 ASM_REWRITE_TAC[cc_bool_model_v11];
\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
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
1728 REWRITE_TAC[IN_NUMSEG];
\r
1729 FIRST_X_ASSUM MP_TAC;
\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
1739 MP_TAC (SPEC_ALL periodic_fn);
\r
1741 ASM_REWRITE_TAC[cc_bool_model_v11];
\r
1742 ABBREV_TAC` nn = cc_card_v11 cc `;
\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
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
1758 REWRITE_TAC[IN_NUMSEG];
\r
1760 REWRITE_TAC[cc_qy_v11];
\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
1768 REWRITE_TAC[EXISTS_UNIQUE];
\r
1771 REWRITE_TAC[IN_ELIM_THM];
\r
1774 REWRITE_TAC[IN_NUMSEG];
\r
1776 ASM_CASES_TAC` y = 1 `;
\r
1777 EXISTS_TAC` nn:num`;
\r
1778 REWRITE_TAC[IN_ELIM_THM];
\r
1780 ASM_REWRITE_TAC[];
\r
1783 MP_TAC (SPEC_ALL CC_CARD2);
\r
1785 ASM_REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];
\r
1786 ASM_REWRITE_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
1801 ASM_CASES_TAC` y' = (nn:num) `;
\r
1802 ASM_REWRITE_TAC[];
\r
1803 ASM_REWRITE_TAC[];
\r
1805 EXISTS_TAC` y - 1 `;
\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
1816 ASM_CASES_TAC` y' = (nn:num) `;
\r
1817 ASM_REWRITE_TAC[];
\r
1818 ASM_REWRITE_TAC[];
\r
1820 FIRST_X_ASSUM MP_TAC;
\r
1821 UNDISCH_TAC` 1 <= y `;
\r
1827 REWRITE_TAC[IN_ELIM_THM; IN_NUMSEG];
\r
1829 ASM_CASES_TAC` x = (nn: num) `;
\r
1830 ASM_REWRITE_TAC[];
\r
1831 FIRST_X_ASSUM SUBST_ALL_TAC;
\r
1834 UNDISCH_TAC` 1 <= nn `;
\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
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
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
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
1867 MATCH_MP_TAC FINITE_SUBSET;
\r
1868 EXISTS_TAC` S: num -> bool `;
\r
1869 ASM_REWRITE_TAC[];
\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
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
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
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
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
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
1912 SUBGOAL_THEN` ss UNION sab SUBSET (S:num -> bool) ` MP_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
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
1927 SUBGOAL_THEN` &0 <= sum S (cc_gg_v11 cc) ` MP_TAC;
\r
1928 ASM_SIMP_TAC[SUM_UNION];
\r
1930 REPLICATE_TAC 4 (FIRST_X_ASSUM MP_TAC);
\r
1931 ASM_SIMP_TAC[SUM_UNION];
\r
1933 MATCH_MP_TAC REAL_LE_ADD;
\r
1935 MATCH_MP_TAC SUM_POS_LE;
\r
1936 ASM_REWRITE_TAC[];
\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
1947 UNDISCH_TAC` ~( cc_gg_v11 cc x < &0 ) `;
\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
1963 UNDISCH_TAC` ~( nn = 0 ) `;
\r
1964 ASM_SEARCH_TCL [` periodic (cc_gg_v11 cc) `] MP_TAC;
\r
1966 NHANH periodic_sum;
\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
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
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
1985 ASM_REWRITE_TAC[IN_NUMSEG];
\r
1987 SIMP_TAC[LE_REFL; ARITH_RULE` ~( n = 0) ==> x <= n - 1 + x `; ARITH_RULE` a <= a + x:num `];
\r
1989 UNDISCH_TAC` k < (n:num) `;
\r
1991 UNDISCH_TAC` ~( k = 0) `;
\r
2001 (* ========================================== *)
\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
2012 ~(i = j \/ j = k \/ k = i) /\
\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
2022 REWRITE_TAC[cc_real_model_v11; cc_qu_v11; cc_bool_model_v11];
\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
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
2040 MP_TAC (SPECL [` 0`;` 2 - 1 `] CARD_NUMSEG);
\r
2041 ASM_REWRITE_TAC[ARITH_RULE` (2 - 1 + 1) - 0 = 2 `];
\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
2048 DISCH_THEN (ASSUME_TAC o SYM);
\r
2050 ASM_SEARCH_TCL [` sum s f = &2 * pi `] MP_TAC;
\r
2051 UNDISCH_TAC` nn = 2 `;
\r
2054 FIRST_X_ASSUM (MP_TAC o (SPEC` i: num `));
\r
2055 SIMP_TAC[Geomdetail.SUM_DIS2];
\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
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
2068 MP_TAC (prove(` #3.14159 < pi`, REWRITE_TAC[ Flyspeck_constants.bounds]));
\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
2079 ASM_REWRITE_TAC[ARITH_RULE` ~( 2 = 0) /\ (2 < nn <=> 2 <= nn /\ ~( nn = 2))`];
\r
2082 ASM_SIMP_TAC[ARITH_RULE` ~( 1 = 0) /\ ( 2 <= x ==> 1 < x)`];
\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
2101 let oxl6142 = prove_by_refinement (CHQSQEY_concl,
\r
2103 ABBREV_TAC` indSet = 0..cc_card_v11 cc - 1 `;
\r
2105 MP_TAC WKR_COMPTED;
\r
2107 ASM_REWRITE_TAC[];
\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
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
2121 FIRST_X_ASSUM MP_TAC;
\r
2123 NHANH CARD_SUBSET;
\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
2131 let CHQSQEY = oxl6142;;
\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
2140 REWRITE_TAC[cc_size_v11];
\r
2141 ABBREV_TAC` sn = 0..cc_card_v11 cc - 1 `;
\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
2146 REWRITE_TAC[FINITE_NUMSEG];
\r
2147 FIRST_X_ASSUM MP_TAC;
\r
2149 NHANH CARD_SUBSET;
\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
2155 REWRITE_TAC[CARD_NUMSEG];
\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
2166 MP_TAC (SPECL [` 2`;` n:num `] (GEN_ALL MOD_INJ1));
\r
2168 ASM_REWRITE_TAC[];
\r
2170 MP_TAC (SPECL [` 1`;` n:num `] (GEN_ALL MOD_INJ1));
\r
2172 ASM_REWRITE_TAC[];
\r
2175 FIRST_ASSUM (ASSUME_TAC o (SPEC` i - 1 `));
\r
2176 FIRST_X_ASSUM (ASSUME_TAC o (SPEC` i:num `));
\r
2178 FIRST_X_ASSUM (MP_TAC o (SPEC` i - 1 `));
\r
2179 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC);
\r
2181 ASSUME_TAC2 (ARITH_RULE` 0 < i ==> i - 1 + 1 = i /\ i - 1 + 2 = i + 1 `);
\r
2182 ASM_REWRITE_TAC[];
\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
2194 ASM_REWRITE_TAC[ARITH_RULE` a < (b:num) <=> ~(b <= a ) `];
\r
2195 ASM_MESON_TAC[]]);;
\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
2204 MP_TAC (SPECL [` nn:num `;` k - (x:num) `] (GEN_ALL MOD_PERIOD_BOUNDED)) ;
\r
2206 ASM_REWRITE_TAC[] ;
\r
2208 DISCH_THEN (MP_TAC o (SPEC` i + (x:num) `)) ;
\r
2210 ASSUME_TAC2 (ARITH_RULE` x < m /\ m <= (k:num) ==> (i + x) + k - x = i + k `) ;
\r
2211 ASM_REWRITE_TAC[] ;
\r
2216 let CARD_EMPTY = el 0 (CONJUNCTS CARD_CLAUSES);;
\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
2223 (* ===================================== *)
\r
2228 let UNPNFVW = prove_by_refinement ( UNPNFVW_concl,
\r
2230 [ NHANH THREE_LE_CC_CARD;
\r
2234 ABBREV_TAC` indSet = 0..cc_card_v11 cc - 1 `;
\r
2235 MP_TAC WKR_COMPTED;
\r
2237 ASM_REWRITE_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
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
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
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
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
2278 UNDISCH_TAC` ~(nn = 0) `;
\r
2279 SIMP_TAC[MOD_IN_NUMSEG];
\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
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
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
2303 MATCH_MP_TAC FINITE_SUBSET;
\r
2304 EXISTS_TAC` indSet:num -> bool `;
\r
2305 ASM_REWRITE_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
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
2322 SUBGOAL_THEN` nn = 3 ` ASSUME_TAC;
\r
2323 FIRST_X_ASSUM MP_TAC;
\r
2324 REWRITE_TAC[IN_INSERT; NOT_IN_EMPTY];
\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
2331 MP_TAC (ARITH_RULE` ~( 3 = 0) `);
\r
2332 UNDISCH_TAC` ~( nn = 0) `;
\r
2334 NHANH MOD_PERIOD_BOUNDED;
\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
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
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
2362 ASM_REWRITE_TAC[];
\r
2364 MP_TAC (ISPECL [` {ia, ib, ic:num} `;` indSet:num -> bool `] CARD_SUBSET_EQ);
\r
2366 ASM_REWRITE_TAC[];
\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
2376 ASM_SEARCH_TCL [` cc_bool_prep_v11 `] MP_TAC;
\r
2377 REWRITE_TAC[cc_bool_prep_v11; cc_qy_v11];
\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
2384 REWRITE_TAC[ARITH_RULE` x < 3 <=> x = 0 \/ x = 1 \/ x = 2 `; IN_ELIM_THM; NOT_IN_EMPTY; IN_INSERT] ;
\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
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
2399 MATCH_MP_TAC MOD_IN_NUMSEG;
\r
2400 FIRST_X_ASSUM ACCEPT_TAC;
\r
2402 ASM_REWRITE_TAC[ARITH_RULE` a + 3 = (a + 2 ) + 1 `];
\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
2410 NHANH MOD_PERIOD_BOUNDED2;
\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
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
2428 ABBREV_TAC` ie = (i + 2) MOD nn `;
\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
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
2444 EXPAND_TAC "indSet";
\r
2445 MATCH_MP_TAC MOD_IN_NUMSEG;
\r
2446 FIRST_ASSUM ACCEPT_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
2457 ASM_REWRITE_TAC[];
\r
2458 UNDISCH_TAC` nn <= 4 `;
\r
2461 ASM_REWRITE_TAC[cc_size_v11; cc_qy_v11];
\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
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
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
2488 NHANH CHOOSE_SUBSET;
\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
2494 UNDISCH_TAC` ~(cc_size_v11 cc (cc_4cell_v11 cc) = 3) `;
\r
2495 ASM_REWRITE_TAC[];
\r
2497 ASSUME_TAC2 (ARITH_RULE` 3 <= sz /\ ~( sz = 3) /\ sz <= 4 ==> sz = 4 `);
\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
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
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
2516 NHANH (FINITE_SUBSET);
\r
2518 REPLICATE_TAC 27 DOWN;
\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
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
2532 MATCH_MP_TAC QY_NN0;
\r
2533 ASM_REWRITE_TAC[];
\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
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
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
2555 EXPAND_TAC "qyset";
\r
2558 ASM_SEARCH_TCL [`#0.008 `] (ASSUME_TAC2 o (SPEC` x:num `));
\r
2560 ASM_SEARCH_TCL [`#0.008 `] (ASSUME_TAC2 o (SPEC` y:num `));
\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
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
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
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
2579 SUBGOAL_THEN` ! f. sum (indSet:num -> bool) f = sum cells f + sum qyset f ` ASSUME_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
2588 ASM_REWRITE_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
2596 UNDISCH_TAC` ~( x = (y:num)) `;
\r
2597 SIMP_TAC[Geomdetail.SUM_DIS2];
\r
2599 SUBGOAL_THEN` !s. FINITE s ==> &0 <= sum s (cc_azim_v11 cc) ` ASSUME_TAC;
\r
2602 MATCH_MP_TAC SUM_POS_LE;
\r
2603 ASM_REWRITE_TAC[];
\r
2605 ASM_SEARCH_TCL [` #0.606 <= x `] (MP_TAC o (SPEC` x':num `));
\r
2607 FIRST_ASSUM (MP_TAC o (SPEC` qyset DIFF {x, y:num}`));
\r
2609 MATCH_MP_TAC FINITE_DIFF;
\r
2610 ASM_REWRITE_TAC[];
\r
2612 NHANH (REAL_ARITH` &0 <= x /\ x = y - z ==> z <= y `);
\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
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
2626 MATCH_MP_TAC REAL_LE_ADD2;
\r
2627 ASM_REWRITE_TAC[];
\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
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
2636 UNDISCH_TAC` sum indSet (cc_gg_v11 cc) < &0 `;
\r
2637 REAL_ARITH_TAC]);;
\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
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
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
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
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
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
2681 let FINITE_INITIAL_SEG = REWRITE_RULE[NUMSEG_SET_VER] (SPEC `0` FINITE_NUMSEG);;
\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
2691 let CARD_MOD_NUMSEG = prove_by_refinement(
\r
2692 ` !m. m <= n ==> CARD {(i + k) MOD n | k | k < m} = m `,
\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
2703 SUBGOAL_THEN` ~( (i + m) MOD n IN {(i + k) MOD n | k < m})` ASSUME_TAC;
\r
2705 REWRITE_TAC[IN_ELIM_THM];
\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
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
2716 REWRITE_TAC[ FINITE_INITIAL_SEG2; IMAGE; IN_ELIM_THM];
\r
2717 REWRITE_TAC[ IMAGE; IN_ELIM_THM];
\r
2719 ASM_REWRITE_TAC[SET_RULE` {y | ?x. x < m /\ y = (i + x) MOD n} = {(i + k) MOD n | k < m} `];
\r
2721 NHANH (ISPEC ` (i + m) MOD n ` CARD_INSERT);
\r
2722 ASM_REWRITE_TAC[];
\r
2728 let MOD_NUMSEG = prove_by_refinement(` ~( n = 0 ) ==> (! i. 0..(n - 1) = {(i + k) MOD n | k | k < n })`,
\r
2731 SUBGOAL_THEN` {(i + k) MOD n | k | k < n} SUBSET 0..(n - 1) ` ASSUME_TAC;
\r
2732 REWRITE_TAC[SUBSET];
\r
2734 REWRITE_TAC[IN_ELIM_THM];
\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
2740 MATCH_MP_TAC (GSYM CARD_SUBSET_EQ);
\r
2741 ASM_REWRITE_TAC[FINITE_NUMSEG; CARD_NUMSEG];
\r
2742 UNDISCH_TAC` ~( n = 0) `;
\r
2749 (* IPVICGW_concl;; *)
\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
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
2768 SUBGOAL_THEN` cells SUBSET 0..nn - 1 ` ASSUME_TAC;
\r
2769 EXPAND_TAC "cells";
\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
2779 SUBGOAL_THEN` 0..3 - 1 = cells ` MP_TAC;
\r
2780 MATCH_MP_TAC (GSYM CARD_SUBSET_EQ);
\r
2781 ASM_REWRITE_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
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
2797 ASM_REWRITE_TAC[];
\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
2808 ASM_REWRITE_TAC[];
\r
2810 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `];
\r
2812 UNDISCH_TAC` sum (0..nn - 1) (cc_gg_v11 cc) < &0 `;
\r
2813 ASM_REWRITE_TAC[];
\r
2815 REWRITE_TAC[ISPECL [`cells: num -> bool `;` cc_gg_v11 cc `] (GEN_ALL SUM_BETA)];
\r
2818 REWRITE_TAC[MESON[]` ~(! x. P x ==> q x) <=> (? x. P x /\ ~( q x)) `];
\r
2820 SUBGOAL_THEN` cc_4cell_v11 cc i' ` MP_TAC;
\r
2821 REPLICATE_TAC 2 DOWN THEN PHA;
\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
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
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
2835 ASM_REWRITE_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
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
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
2851 UNDISCH_TAC` ~( 3 = 0) `;
\r
2852 UNDISCH_TAC ` periodic (cc_small_v11 cc) (cc_card_v11 cc) `;
\r
2853 ASM_REWRITE_TAC[];
\r
2856 SPEC` i:num` (GEN`m:num ` (SPEC_ALL Oxl_def.periodic_mod))));
\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
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
2868 SUBGOAL_THEN`! i. cc_4cell_v11 cc i ` ASSUME_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
2875 SPEC` i:num` (GEN`m:num ` (SPEC_ALL Oxl_def.periodic_mod))));
\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
2882 ASM_SEARCH_TCL [` {i | i IN 0..nn - 1 /\ cc_4cell_v11 cc i} = cells `] (SUBST1_TAC o SYM);
\r
2884 FIRST_ASSUM (MP_TAC o (SPEC` i' + 1 `));
\r
2885 FIRST_ASSUM (MP_TAC o (SPEC` i' + 2 `));
\r
2887 ASM_REWRITE_TAC[CC_4CELL_QUQX];
\r
2889 REWRITE_TAC[GSYM CC_4CELL_QUQX];
\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
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
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
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
2914 UNDISCH_TAC` ~( cc_card_v11 cc = 0) `;
\r
2915 ASM_SEARCH_TCL [` periodic (cc_gg_v11 cc) `] MP_TAC;
\r
2917 NHANH Oxl_def.periodic_sum;
\r
2918 ASM_REWRITE_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
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
2941 REWRITE_TAC[cc_size_v11];
\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
2946 REWRITE_TAC[SUBSET; EMPTY_SUBSET; IN_ELIM_THM; IN_INSERT; NOT_IN_EMPTY];
\r
2947 REPLICATE_TAC 6 DOWN THEN PHA;
\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
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
2960 UNDISCH_TAC` ~( k = (j:num)) `;
\r
2963 ASM_CASES_TAC` k = (j:num) `;
\r
2964 FIRST_X_ASSUM ACCEPT_TAC;
\r
2966 REWRITE_TAC[GSYM Geomdetail.CARD2];
\r
2968 REWRITE_TAC[INSERT_COMM];
\r
2970 NHANH (ARITH_RULE` a <= b /\ a = 2 ==> ~( b <= 1 )`);
\r
2971 ASM_REWRITE_TAC[]]);;
\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
2982 NHANH UNIQUE_QY THEN GEN_TAC THEN STRIP_TAC THEN
\r
2983 FIRST_X_ASSUM NHANH THEN MESON_TAC[]);;
\r
2987 let ASM_SEARCH_TC = asms_search;;
\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
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
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
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
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
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
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
3043 UNDISCH_TAC` sum (0..nn - 1) (cc_gg_v11 cc) < &0 `;
\r
3044 ASM_REWRITE_TAC[];
\r
3046 DISCH_THEN (MP_TAC o (SPEC` i MOD 4 `));
\r
3048 ASM_REWRITE_TAC[];
\r
3049 MATCH_MP_TAC MOD_IN_NUMSEG;
\r
3051 DISCH_THEN (MP_TAC o (SPEC` (i + 3) MOD 4 `));
\r
3053 ASM_REWRITE_TAC[];
\r
3054 MATCH_MP_TAC MOD_IN_NUMSEG;
\r
3056 MP_TAC (let th = GEN_ALL MOD_INJ1 in
\r
3057 SPECL [` 3 `;` 4 `] th);
\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
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
3069 ASM_REWRITE_TAC[];
\r
3070 SWITCH_TAC` nn = 4 `;
\r
3071 ASM_SIMP_TAC[GSYM periodic_mod; MOD_IN_NUMSEG];
\r
3073 FIRST_ASSUM (MP_TAC o (SPEC` (i + 1) MOD 4 `));
\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
3080 DISCH_THEN (MP_TAC o (SPEC` i + 1 `));
\r
3081 ASM_SIMP_TAC[ARITH_RULE` (i + 1) + 2 = i + 3 `];
\r
3084 FIRST_X_ASSUM (MP_TAC o (SPEC` (i + 2) MOD 4 `));
\r
3086 SWITCH_TAC` nn = 4 `;
\r
3087 MP_TAC (let t = GEN_ALL MOD_INJ1 in SPECL [` 1 `;` 4 `] t);
\r
3090 ASM_SIMP_TAC[ARITH_RULE` i + 3 = (i + 2) + 1 `; MOD_IN_NUMSEG];
\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
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
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
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
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
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
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
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
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
3158 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `];
\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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
3252 REPLICATE_TAC 4 DOWN THEN PHA;
\r
3258 ASM_REWRITE_TAC[REAL_ARITH` &0 <= a <=> ~( a < &0) `];
\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
3264 ASM_CASES_TAC` cc_qx_v11 cc (i + 1) `;
\r
3265 MATCH_MP_TAC REAL_LE_ADD;
\r
3267 MP_TAC (SPEC` i + 1 ` QU_OR_QXY);
\r
3268 ASM_REWRITE_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
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
3283 ASM_CASES_TAC` cc_qx_v11 cc (i + 2) `;
\r
3284 MATCH_MP_TAC REAL_LE_ADD;
\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
3296 REWRITE_TAC[cc_qu_v11; cc_hassmall_v11; ARITH_RULE` (i + 2) + 1 = i + 3 `];
\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
3301 ASM_REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `];
\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
3316 REWRITE_TAC[ARITH_RULE` (i + 1) + 1 = i + 2 `];
\r
3318 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `];
\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
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
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
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
3340 SIMP_TAC[cc_qu_v11; cc_hassmall_v11];
\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
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
3353 DOWN THEN STRIP_TAC;
\r
3356 MP_TAC (SPEC` i + 2 ` QU_OR_QXY);
\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
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
3381 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `]]);;
\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
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
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
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
3412 ASM_CASES_TAC` (s2:num -> bool) = {} `;
\r
3413 ASM_REWRITE_TAC[CARD_EMPTY; ARITH_RULE` ~( 0 = 1) `];
\r
3415 REWRITE_TAC[GSYM MEMBER_NOT_EMPTY];
\r
3416 FIRST_X_ASSUM (SUBST1_TAC o SYM);
\r
3418 SIMP_TAC[IN_ELIM_THM; IN_NUMSEG; ARITH_RULE`x <= 5 - 1 <=> x < 5 `; LE_0]]);;
\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
3428 EXISTS_TAC` x - (i:num) `;
\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
3440 FIRST_X_ASSUM (MP_TAC o (SPEC` i:num `));
\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
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
3460 ASM_SIMP_TAC[NUMSEG_INTER_22; ARITH_RULE`~(n = 0) ==> (x < (n:num) <=> x <= n - 1) `];
\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
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
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
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
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
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
3530 ASM_REWRITE_TAC[IN_ELIM_THM; IN_NUMSEG_0; ARITH_RULE` 5 - 1 = 4 `];
\r
3532 ASM_CASES_TAC` k = 0 `;
\r
3533 FIRST_X_ASSUM SUBST_ALL_TAC;
\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
3539 ASM_CASES_TAC` k = 4`;
\r
3540 FIRST_X_ASSUM SUBST_ALL_TAC;
\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
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
3553 ASM_CASES_TAC` cc_qx_v11 cc (i + 2 ) `;
\r
3554 MATCH_MP_TAC REAL_LE_ADD;
\r
3556 MP_TAC (SPEC` i + 2 ` QU_OR_QXY);
\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
3562 ASM_REWRITE_TAC[ARITH_RULE` (i + 1) + 1 = i + 2 `];
\r
3564 MP_TAC (SPEC ` i + 1 ` (GEN`i:num ` LITTLE_CC_GGB));
\r
3566 ASM_REWRITE_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
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
3583 ASM_CASES_TAC` cc_qx_v11 cc (i + 3 ) ` ;
\r
3584 MATCH_MP_TAC REAL_LE_ADD;
\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
3592 ASM_SEARCH_TCL [` a /\ b /\ ~ cc_small_v11 cc (i + 1) ==> cc_eps <= y `] (MP_TAC o (SPEC` i + 4 `));
\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
3599 SUBGOAL_THEN` &0 <= cc_gg_v11 cc i ` ASSUME_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
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
3610 UNDISCH_TAC` &0 <= cc_gg_v11 cc (i + 1) + cc_gg_v11 cc (i + 2) `;
\r
3612 ASM_REWRITE_TAC[ARITH_RULE` ~( &0 <= x) <=> x < &0 `];
\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
3621 ASM_CASES_TAC` cc_qx_v11 cc (i + 1) `;
\r
3622 MATCH_MP_TAC REAL_LE_ADD;
\r
3624 MP_TAC (SPEC` i + 1 ` QU_OR_QXY);
\r
3625 ASM_REWRITE_TAC[];
\r
3627 MP_TAC (SPEC `i + 1 ` (GEN `i: num ` LITTLE_CC_GGA));
\r
3629 ASM_REWRITE_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
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
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
3647 ASM_CASES_TAC` cc_qx_v11 cc (i + 3) `;
\r
3648 MATCH_MP_TAC REAL_LE_ADD;
\r
3650 MP_TAC (SPEC` i + 3 ` QU_OR_QXY);
\r
3651 ASM_REWRITE_TAC[];
\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
3659 ASM_SEARCH_TCL [` a /\ b /\ ~ p (i + 1) ==> cc_eps <= x `] (MP_TAC o (SPEC` i + 4 `));
\r
3661 ASM_REWRITE_TAC[ARITH_RULE` (i + 4) + 1 = i + 5 `];
\r
3664 SUBGOAL_THEN` &0 <= cc_gg_v11 cc i ` ASSUME_TAC;
\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
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
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
3679 ASM_REWRITE_TAC[REAL_ARITH` ~( &0 <= x) <=> x < &0 `];
\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
3690 ASM_CASES_TAC` cc_qx_v11 cc (i + 2) `;
\r
3691 MATCH_MP_TAC REAL_LE_ADD;
\r
3693 MP_TAC (SPEC` i + 2 ` QU_OR_QXY);
\r
3694 ASM_REWRITE_TAC[];
\r
3696 MP_TAC (SPEC` i + 2 ` (GEN`i:num ` LITTLE_CC_GGA));
\r
3698 ASM_REWRITE_TAC[];
\r
3700 ASM_REWRITE_TAC[ARITH_RULE` (i + 2) + 1 = i + 3 `];
\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
3707 ASM_CASES_TAC` cc_qx_v11 cc (i + 1) `;
\r
3708 MATCH_MP_TAC REAL_LE_ADD;
\r
3710 MP_TAC (SPEC` i + 1 ` QU_OR_QXY);
\r
3712 ASM_SEARCH_TCL [` x ==> -- y <= z `] NHANH;
\r
3713 REWRITE_TAC[cc_qu_v11; cc_hassmall_v11];
\r
3715 ASM_SEARCH_TCL [` a /\ b (i + 1 ) /\ ~ c ==> cc_eps <= x `] (MP_TAC o SPEC_ALL);
\r
3717 ASM_REWRITE_TAC[];
\r
3722 SUBGOAL_THEN` &0 <= cc_gg_v11 cc ( i + 4 ) ` ASSUME_TAC THEN
\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
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
3734 ASM_REWRITE_TAC[REAL_ARITH` ~( &0 <= x) <=> x < &0 `];
\r
3736 ASM_REWRITE_TAC[REAL_ARITH` ~( &0 <= x ) <=> x < &0 `];
\r
3738 UNDISCH_TAC` k <= 4 `;
\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
3763 REWRITE_TAC[TAUT` a /\ b /\ c <=> (a/\b) /\ c `];
\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
3770 REWRITE_TAC[IN_ELIM_THM];
\r
3772 ASM_REWRITE_TAC[ADD_CLAUSES];
\r
3774 SUBGOAL_THEN` S SUBSET { i + k | k | k < 5 } ` ASSUME_TAC;
\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
3782 UNDISCH_TAC` FINITE {m | m < 5} `;
\r
3783 NHANH (ISPEC `(\x. (i:num) + x ) ` FINITE_IMAGE);
\r
3784 ASM_REWRITE_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
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
3799 MP_TAC (ISPECL [` cc_gg_v11 cc `;` 5 `] Oxl_def.periodic_sum);
\r
3801 UNDISCH_TAC` periodic (cc_gg_v11 cc) (cc_card_v11 cc) `;
\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
3810 CONV_TAC SET_RULE;
\r
3811 SUBGOAL_THEN` { i + k | k | k < 5 } = S UNION (SS: num -> bool)` ASSUME_TAC;
\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
3821 EXISTS_TAC` x - (i:num) `;
\r
3827 ASM_REWRITE_TAC[];
\r
3828 ASSUME_TAC2 UNIQUE_QY;
\r
3830 DISCH_THEN (MP_TAC o (SPEC` i MOD 5 ` ));
\r
3831 ASM_REWRITE_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
3837 ASM_REWRITE_TAC[];
\r
3840 SIMP_TAC [ GSYM Oxl_def.periodic_mod];
\r
3841 ASM_REWRITE_TAC[];
\r
3843 SUBGOAL_THEN` cc_qy_v11 cc (i MOD 5 ) ` ASSUME_TAC;
\r
3844 ASSUME_TAC2 Oxl_def.periodic_fn;
\r
3846 ASM_REWRITE_TAC[];
\r
3848 MP_TAC (ARITH_RULE` ~( 5 = 0 ) `);
\r
3850 SIMP_TAC [ GSYM Oxl_def.periodic_mod];
\r
3851 ASM_REWRITE_TAC[];
\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
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
3875 ASSUME_TAC2 Oxl_def.periodic_fn;
\r
3876 DOWN THEN ASM_REWRITE_TAC[] THEN STRIP_TAC;
\r
3881 SUBGOAL_THEN` S = {i:num } ` ASSUME_TAC;
\r
3882 REWRITE_TAC[EXTENSION; IN_INSERT; NOT_IN_EMPTY];
\r
3884 REWRITE_TAC[IN_ELIM_THM];
\r
3888 ASM_CASES_TAC` k = 0 `;
\r
3889 DOWN THEN DOWN THEN ARITH_TAC;
\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
3897 MP_TAC (SPECL [` k:num `;` 5 `] Oxl_def.MOD_INJ1_ALT);
\r
3899 ASM_REWRITE_TAC[];
\r
3902 MATCH_MP_TAC Oxl_def.MOD_IN_NUMSEG;
\r
3904 ASM_REWRITE_TAC[];
\r
3908 ASM_REWRITE_TAC[ADD_CLAUSES];
\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
3918 FIRST_X_ASSUM SUBST1_TAC;
\r
3921 REWRITE_TAC[EXTENSION; IN_ELIM_THM; IN_DIFF; IN_INSERT; NOT_IN_EMPTY];
\r
3923 MESON_TAC[ARITH_RULE` ~( 0 < k ) <=> x + k = x `];
\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
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
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
3938 SIMP_TAC[cc_qy_v11];
\r
3941 UNDISCH_TAC` FINITE (SS: num -> bool) `;
\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
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
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
3966 REWRITE_TAC[EMPTY_SUBSET; IN_ELIM_THM];
\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
3976 UNDISCH_TAC` periodic (cc_azim_v11 cc) (cc_card_v11 cc)`;
\r
3977 ASM_REWRITE_TAC[];
\r
3981 ASM_REWRITE_TAC[ARITH_RULE` 5 - 1 = 4 `];
\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
3992 EXISTS_TAC` x - (i:num) `;
\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
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
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
4018 REAL_ARITH_TAC]);;
\r
4023 let MOD_INJ11 = REWRITE_RULE[GSYM RIGHT_FORALL_IMP_THM] MOD_INJ1;;
\r
4026 let PI_BOUNDS = REWRITE_RULE[] (REWRITE_CONV[Flyspeck_constants.bounds]` #3.14159 < pi /\ pi < #3.1416 `);;
\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
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
4044 NHANH Oxl_def.periodic_fn;
\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
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
4081 MP_TAC (REWRITE_RULE[RIGHT_FORALL_IMP_THM ] (ISPECL [` cc_qy_v11 cc `;` 5 `] periodic_mod));
\r
4083 UNDISCH_TAC` periodic (cc_qy_v11 cc) (cc_card_v11 cc ) `;
\r
4084 ASM_REWRITE_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
4092 ==> k IN 0..cc_card_v11 cc - 1
\r
4093 ==> ~cc_qy_v11 cc k) `;
\r
4096 FIRST_ASSUM (MP_TAC o (SPEC` i MOD 5 ` ));
\r
4098 ASM_REWRITE_TAC[];
\r
4099 ASSUME_TAC (ARITH_RULE` ~( 5 = 0) `);
\r
4100 ASM_SIMP_TAC[Oxl_def.MOD_IN_NUMSEG];
\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
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
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
4115 ASM_CASES_TAC` k = 0 `;
\r
4116 ASM_REWRITE_TAC[ADD_CLAUSES];
\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
4127 MP_TAC (ISPECL [` cc_gg_v11 cc `;` 5 `] Oxl_def.periodic_sum);
\r
4129 ASM_REWRITE_TAC[];
\r
4131 UNDISCH_TAC` periodic (cc_gg_v11 cc) (cc_card_v11 cc) `;
\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
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
4145 UNDISCH_TAC` j = i + ij:num `;
\r
4146 DISCH_THEN SUBST1_TAC;
\r
4147 FIRST_X_ASSUM MATCH_MP_TAC;
\r
4149 UNDISCH_TAC` j <= 4 + i `;
\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
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
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
4166 UNDISCH_TAC` periodic (cc_azim_v11 cc) (cc_card_v11 cc) ` ;
\r
4167 ASM_REWRITE_TAC[];
\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
4178 UNDISCH_TAC` ~(cc_small_eta_v11 cc i \/ cc_small_eta_v11 cc (i + 1)) `;
\r
4179 REWRITE_TAC[DE_MORGAN_THM];
\r
4183 FIRST_ASSUM (MP_TAC o (SPEC` i MOD 5 `));
\r
4186 REWRITE_RULE[RIGHT_FORALL_IMP_THM ] (ISPECL [` cc_qy_v11 cc `;` 5 `] Oxl_def.periodic_mod));
\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
4194 ASM_REWRITE_TAC[];
\r
4196 ASSUME_TAC (ARITH_RULE` ~( 5 = 0) `);
\r
4197 ASM_SIMP_TAC[MOD_IN_NUMSEG];
\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
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
4212 ASM_REWRITE_TAC[];
\r
4213 SUBGOAL_THEN` ! i. -- cc_eps <= cc_gg_v11 cc i ` ASSUME_TAC;
\r
4215 ASM_CASES_TAC` cc_qy_v11 cc i'' ` ;
\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
4220 ASM_CASES_TAC` cc_qx_v11 cc i'' ` ;
\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
4225 MP_TAC (SPEC` i'':num ` QU_OR_QXY);
\r
4226 ASM_REWRITE_TAC[];
\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
4243 ASM_REWRITE_TAC[];
\r
4245 FIRST_X_ASSUM (MP_TAC o (SPEC ` i + 2 `));
\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
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
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
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
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
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
4281 ASM_REWRITE_TAC[ARITH_RULE` ( i + 1) + 1 = i + 2 `];
\r
4282 UNDISCH_TAC` ~ ~cc_small_v11 cc (i + 2) `;
\r
4286 FIRST_X_ASSUM (MP_TAC o (SPEC ` i + 2 `));
\r
4287 SUBGOAL_THEN` &0 <= cc_gg3b_v11 cc i ` MP_TAC;
\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
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
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
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
4313 SIMP_TAC[cc_qu_v11; cc_hassmall_v11; ARITH_RULE` (i + 3 ) + 1 = i + 4 `];
\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
4321 SUBGOAL_THEN` &0 <= cc_gg3a_v11 cc i ` MP_TAC;
\r
4327 SUBGOAL_THEN` ~cc_small_eta_v11 cc ((i + 5 ) MOD 5 ) ` ASSUME_TAC;
\r
4329 REWRITE_RULE[RIGHT_FORALL_IMP_THM] (
\r
4330 ISPECL [` cc_small_eta_v11 cc `; ` 5 `] Oxl_def.periodic_mod));
\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
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
4343 REWRITE_RULE[RIGHT_FORALL_IMP_THM] (
\r
4344 ISPECL [` cc_small_eta_v11 cc `; ` 5 `] Oxl_def.periodic_mod));
\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
4352 UNDISCH_TAC` ~cc_small_eta_v11 cc ((i + 5) MOD 5) `;
\r
4353 ASM_REWRITE_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
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
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
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
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
4385 ASM_SIMP_TAC[cc_hassmall_v11; ARITH_RULE` (i + 4) + 1 = i + 5 `];
\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
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
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
4400 ASM_REWRITE_TAC[];
\r
4402 DISCH_THEN (ASSUME_TAC o GSYM);
\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
4411 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc (i + 3 ) ` MP_TAC;
\r
4412 ASM_REWRITE_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
4420 MP_TAC (SPEC` i + 4 ` QU_OR_QXY);
\r
4422 ASM_REWRITE_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
4429 NHANH Oxl_def.periodic_sum;
\r
4431 FIRST_X_ASSUM (ASSUME_TAC o GSYM);
\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
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
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
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
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
4476 ABBREV_TAC` nn = cc_card_v11 cc `;
\r
4477 ASM_REWRITE_TAC[REAL_ARITH` ~( a < b) <=> b <= a `];
\r
4479 SUBST_ALL_TAC (MESON[]` nn = 5 <=> 5 = nn `);
\r
4480 ASM_REWRITE_TAC[]]);;
\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
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
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
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
4512 MP_TAC (ISPECL [` s1:num -> bool `; ` s2: num -> bool `] CARD_UNION);
\r
4514 ASM_REWRITE_TAC[GSYM DISJOINT];
\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
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
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
4548 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0 ) `]]);;
\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
4570 cqu cc (i + 1) /\ cc_qx_v11 cc (i + 4) /\
\r
4573 cc_hassmall_v11 cc i /\ cc_4cell_v11 cc i /\ cc_subcrit_v11 cc i ) /\
\r
4575 cc_hassmall_v11 cc i <=>
\r
4576 cc_small_v11 cc i /\ cc_small_v11 cc (i + 1) ) /\
\r
4578 bb = (cqu cc (i + 2) \/ cc_qx_v11 cc (i + 2) \/ cc_qy_v11 cc (i + 2)) /\
\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
4592 FIRST_X_ASSUM MP_TAC;
\r
4594 ASM_REWRITE_TAC[];
\r
4596 ASM_REWRITE_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
4602 REWRITE_TAC[Oxl_def.cc_eps];
\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
4607 REWRITE_TAC[Oxl_def.cc_eps];
\r
4609 UNDISCH_TAC` bb: bool `;
\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
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
4620 ASM_CASES_TAC` cc_qx_v11 cc (i + 3) ` ;
\r
4621 MATCH_MP_TAC REAL_LE_ADD;
\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
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
4634 REAL_ARITH_TAC]);;
\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
4652 ~csmall cc (i + 5) /\
\r
4656 (cqx: cc_v11 -> num -> bool) cc (i + 4) /\
\r
4659 hasmal cc i /\ fcell cc i /\ subcrt 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
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
4676 FIRST_X_ASSUM MP_TAC;
\r
4678 ASM_REWRITE_TAC[];
\r
4680 ASM_REWRITE_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
4686 REWRITE_TAC[Oxl_def.cc_eps];
\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
4691 REWRITE_TAC[Oxl_def.cc_eps];
\r
4693 UNDISCH_TAC` bb: bool `;
\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
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
4704 ASM_CASES_TAC` (cqx: cc_v11 -> num -> bool) cc (i + 3) ` ;
\r
4705 MATCH_MP_TAC REAL_LE_ADD;
\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
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
4718 REAL_ARITH_TAC]);;
\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
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
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
4767 ASSUME_TAC2 UNIQUE_QY;
\r
4768 ASSUME_TAC2 QY_NN00; ASSUME_TAC2 QX_NN00;
\r
4769 ASSUME_TAC2 EXISTS_QY_CARD5;
\r
4771 NHANH Oxl_def.periodic_fn;
\r
4773 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];
\r
4774 ONCE_REWRITE_TAC[TAUT` ~ a <=> a ==> F `];
\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
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
4807 ASM_REWRITE_TAC[];
\r
4811 MP_TAC (SPEC` i + 4 ` QU_OR_QXY);
\r
4812 ASM_REWRITE_TAC[];
\r
4814 REPLICATE_TAC 5 DOWN;
\r
4815 REPLICATE_TAC 3 (DISCH_THEN (ASSUME_TAC o SYM));
\r
4817 SWITCH_TAC` nn = 5 `;
\r
4818 ASM_REWRITE_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
4824 MATCH_MP_TAC REAL_LE_ADD;
\r
4826 ASM_CASES_TAC` cc_qx_v11 cc (i + 2) ` ;
\r
4827 MATCH_MP_TAC REAL_LE_ADD;
\r
4829 MATCH_MP_TAC REAL_LE_ADD;
\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
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
4841 ASM_REWRITE_TAC[cc_hassmall_v11; ARITH_RULE` (i + 1) + 1 = i + 2 `];
\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
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
4861 ASM_CASES_TAC` cc_qx_v11 cc (i + 3) ` ;
\r
4862 MATCH_MP_TAC REAL_LE_ADD;
\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
4869 ASM_SEARCH_TCL [` a /\ b /\ ~ c (i + 1) ==> cc_eps <= x `] (MP_TAC o (SPEC` i + 4 `));
\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
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
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
4884 ASM_REWRITE_TAC[REAL_ARITH` ~( &0 <= x) <=> x < &0 `]]);;
\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
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
4912 cc_qy_v11 cc (i + 4) /\
\r
4913 cc_qx_v11 cc ( i + 3 )
\r
4917 ASSUME_TAC2 UNIQUE_QY;
\r
4918 ASSUME_TAC2 QY_NN00; ASSUME_TAC2 QX_NN00;
\r
4919 ASSUME_TAC2 EXISTS_QY_CARD5;
\r
4921 NHANH Oxl_def.periodic_fn;
\r
4923 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];
\r
4924 ONCE_REWRITE_TAC[TAUT` ~ a <=> a ==> F `];
\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
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
4941 ASM_CASES_TAC` cc_qy_v11 cc ( i + 2 ) `;
\r
4942 MATCH_MP_TAC REAL_LE_ADD;
\r
4944 MATCH_MP_TAC REAL_LE_ADD;
\r
4946 ASM_CASES_TAC` cc_qx_v11 cc ( i + 2 ) `;
\r
4947 MATCH_MP_TAC REAL_LE_ADD;
\r
4949 MATCH_MP_TAC REAL_LE_ADD;
\r
4951 MP_TAC (SPEC` i + 2 ` QU_OR_QXY);
\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
4957 ASM_CASES_TAC` cc_small_v11 cc (i + 4) `;
\r
4958 MP_TAC (SPEC` i + 3 ` (GEN` i:num ` LITTLE_CC_GGAA));
\r
4961 ASM_REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `; cc_hassmall_v11];
\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
4967 ASM_SEARCH_TCL [` a /\ b /\ ~ c (i + 1) ==> cc_eps <= y `] (MP_TAC o (SPEC` i + 3 `));
\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
4972 UNDISCH_TAC` --cc_eps <= cc_gg_v11 cc (i + 2) ` ;
\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
4979 ASM_CASES_TAC` cc_qx_v11 cc (i + 1) `;
\r
4980 MATCH_MP_TAC REAL_LE_ADD;
\r
4982 MP_TAC (SPEC` i + 1 ` QU_OR_QXY);
\r
4983 ASM_REWRITE_TAC[];
\r
4984 NHANH QU_IMP_SMALL;
\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
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
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
5004 ASM_REWRITE_TAC[REAL_ARITH` ~( &0 <= x) <=> x < &0 `]]);;
\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
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
5028 NHANH Oxl_def.periodic_fn;
\r
5029 REWRITE_TAC[cc_bool_model_v11];
\r
5031 ABBREV_TAC` nn = cc_card_v11 cc `;
\r
5032 FIRST_X_ASSUM (MP_TAC o (SPEC` j MOD nn`));
\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
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
5044 UNDISCH_TAC` k IN j..nn - 1 + j `;
\r
5045 ASM_REWRITE_TAC[IN_NUMSEG];
\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
5051 FIRST_X_ASSUM (MP_TAC o (SPEC` k MOD nn `));
\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
5063 let periodic_mod1 =
\r
5064 REWRITE_RULE[RIGHT_FORALL_IMP_THM] periodic_mod;;
\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
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
5082 let MOD_ADD_CANCEL =
\r
5083 REWRITE_RULE[ARITH_RULE` 1 * n + p = p + n ` ] (
\r
5084 SPEC` 1 ` MOD_MULT_ADD);;
\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
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
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
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
5111 ASM_REWRITE_TAC[];
\r
5112 ASSUME_TAC2 (ARITH_RULE ` ~( nn = 0) ==> (i + nn - 1 ) + 1 = i + nn `);
\r
5114 ASM_REWRITE_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
5124 SUBGOAL_THEN` nii + 1 = i + nn ` ASSUME_TAC;
\r
5126 UNDISCH_TAC` ~( nn = 0) `;
\r
5128 ASM_REWRITE_TAC[];
\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
5136 ASM_SIMP_TAC[]]);;
\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
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
5148 REWRITE_RULE[ARITH_RULE` (a + 1) + 1 = a + 2 `] SUM_NUMSEG33;;
\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
5154 let SUM_NUMSEG4 =
\r
5155 REWRITE_RULE[ARITH_RULE` (m + 1) + 2 = m + 3 /\ (m + 1) + 1 = m + 2 `] SUM_NUMSEG44;;
\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
5166 let UTEOITF = prove_by_refinement(UTEOITF_concl,
\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
5173 REWRITE_TAC[NOT_FORALL_THM; GSYM cc_qy_v11];
\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
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
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
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
5195 UNDISCH_TAC` &0 <= cc_gg3b_v11 cc i `;
\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
5200 UNDISCH_TAC` &0 <= cc_gg3b_v11 cc i `;
\r
5202 MP_TAC (SPEC` i + 1 ` QU_OR_QXY);
\r
5203 ASM_REWRITE_TAC[];
\r
5205 FIRST_X_ASSUM MATCH_MP_TAC;
\r
5206 ASM_REWRITE_TAC[];
\r
5208 ISPECL [` cc_qy_v11 cc `;` nn:num `] periodic_mod1));
\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
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
5220 MP_TAC LITTLE_CC_GG3AA;
\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
5225 STRIP_TAC THEN STRIP_TAC;
\r
5226 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc) ` MP_TAC;
\r
5228 ISPECL [` cc_gg_v11 cc `;` nn:num `] periodic_sum);
\r
5229 FIRST_X_ASSUM (ASSUME_TAC o GSYM);
\r
5231 ASM_REWRITE_TAC[];
\r
5233 REWRITE_TAC[ARITH_RULE` 3 - 1 = 2 /\ 2 + i = i + 2`; SUM_NUMSEG3];
\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
5239 REWRITE_TAC[ARITH_RULE` 3 - 1 = 2 `];
\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
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
5251 ASM_SIMP_TAC[MOD_IN_NUMSEG];
\r
5253 FIRST_ASSUM (MP_TAC o (SPEC` (i + 1) MOD nn `));
\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
5260 ASM_REWRITE_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
5266 ASM_REWRITE_TAC[cc_hassmall_v11];
\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
5279 ASM_REWRITE_TAC[];
\r
5280 ASM_REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `];
\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
5288 ASM_REWRITE_TAC[];
\r
5290 SUBGOAL_THEN` &0 <= cc_gg3a_v11 cc (i + nn) ` MP_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
5300 ASSUME_TAC2 LEAST_BOUND_CC_GG;
\r
5302 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc) ` MP_TAC;
\r
5303 ASM_REWRITE_TAC[];
\r
5306 ASSUME_TAC2 (ARITH_RULE` ~( nn = 3) /\ 3 <= nn /\ nn <= 4 ==> 4 = nn`);
\r
5308 REWRITE_TAC[ARITH_RULE` 4 - 1 + i = i + 3 `; SUM_NUMSEG4];
\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
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
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
5335 (* ========================== *)
\r
5336 ASSUME_TAC2 LEAST_BOUND_CC_GG;
\r
5339 FIRST_ASSUM (MP_TAC o (SPEC ` (i + 2) MOD nn `));
\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
5347 FIRST_ASSUM (MP_TAC o (SPEC ` (i + 3) MOD nn `));
\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
5357 ASM_REWRITE_TAC[];
\r
5358 STRIP_TAC THEN STRIP_TAC;
\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
5363 MP_TAC LITTLE_CC_GG3BB;
\r
5365 ASM_REWRITE_TAC[];
\r
5367 MP_TAC LITTLE_CC_GG3AA;
\r
5369 ASM_REWRITE_TAC[];
\r
5370 ASSUME_TAC2 (ARITH_RULE` 3 <= nn /\ nn <= 4 /\ ~( nn = 3) ==> 4 = 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
5376 SUBGOAL_THEN` &0 <= sum (0..nn - 1 ) (cc_gg_v11 cc) ` MP_TAC;
\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
5388 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0 ) `];
\r
5389 ASM_CASES_TAC` cc_qx_v11 cc ( i + 3) `;
\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
5398 ASM_REWRITE_TAC[];
\r
5400 ASM_SEARCH_TCL [` cc_eps <= x + cc_gg3a_v11 cc i `] (MP_TAC o (SPEC` i + 3 `));
\r
5402 ASM_REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `; cc_hassmall_v11];
\r
5404 MP_TAC LITTLE_CC_GG3BB;
\r
5406 ASM_REWRITE_TAC[];
\r
5410 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc (i + 2) ` MP_TAC;
\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
5426 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc ) ` MP_TAC;
\r
5427 ASM_REWRITE_TAC[];
\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
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
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
5441 ASM_REWRITE_TAC[ARITH_RULE` &0 <= x <=> ~( x < &0 ) `];
\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
5456 SUBGOAL_THEN` #0.008 * cc_azim_v11 cc i <= cc_gg_v11 cc i ` ASSUME_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
5463 ASSUME_TAC2 (ARITH_RULE` 3 <= nn /\ nn <= 4 /\ ~( nn = 3) ==> 4 = nn `);
\r
5465 REWRITE_TAC[ARITH_RULE` 4 - 1 + i = i + 3 /\ 4 - 1 = 3 `];
\r
5467 UNDISCH_TAC` sum (i..i + 3) (cc_azim_v11 cc) = &2 * pi `;
\r
5468 REWRITE_TAC[SUM_NUMSEG4];
\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
5479 REWRITE_TAC[ARITH_RULE` 4 - 1 = 3 `];
\r
5480 ASM_REWRITE_TAC[SUM_NUMSEG4];
\r
5483 UNDISCH_TAC` #0.008 * cc_azim_v11 cc i <= cc_gg_v11 cc i `;
\r
5484 MP_TAC (PI_BOUNDS);
\r
5487 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `];
\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
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
5499 REWRITE_TAC[ARITH_RULE` 4 - 1 = 3 `];
\r
5500 ASM_REWRITE_TAC[SUM_NUMSEG4];
\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
5509 UNDISCH_TAC` #0.008 * cc_azim_v11 cc i <= cc_gg_v11 cc i `;
\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
5523 ASM_REWRITE_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
5532 SUBGOAL_THEN` &0 <= sum (0..nn - 1) (cc_gg_v11 cc ) ` MP_TAC;
\r
5534 REWRITE_TAC[ARITH_RULE` 4 - 1 = 3 `];
\r
5535 ASM_REWRITE_TAC[SUM_NUMSEG4];
\r
5538 ASM_REWRITE_TAC[REAL_ARITH` &0 <= x <=> ~( x < &0) `];
\r
5541 UNDISCH_TAC` sum (0..nn - 1) (cc_gg_v11 cc) < &0 `;
\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
5550 UNDISCH_TAC`~(cc_small_eta_v11 cc i /\ cc_small_eta_v11 cc (i + 1)) `;
\r
5551 REWRITE_TAC[DE_MORGAN_THM];
\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
5559 ASM_REWRITE_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
5565 ASM_REWRITE_TAC[ARITH_RULE` (i + 3) + 1 = i + 4 `];
\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
5575 SUBGOAL_THEN` &0 <=
\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
5582 ASM_REWRITE_TAC[];
\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
5587 ASM_REWRITE_TAC[];
\r
5589 SUBGOAL_THEN` -- cc_eps <= cc_gg_v11 cc (i + 2 ) ` ASSUME_TAC;
\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
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
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
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
5608 MATCH_MP_TAC (GSYM periodic_mod);
\r
5609 ASM_REWRITE_TAC[];
\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
5617 UNDISCH_TAC` ~(&0 <=
\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
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
5636 ASSUME_TAC2 QY_NN00 THEN ASSUME_TAC2 QX_NN00;
\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
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
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
5657 ABBREV_TAC` sqx = { i | i <= 3 /\ cc_qx_v11 cc i } ` ;
\r
5658 SUBGOAL_THEN` sqx UNION squ = 0..3` ASSUME_TAC;
\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
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
5672 SUBGOAL_THEN` sqx SUBSET 0..3 ` ASSUME_TAC;
\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
5685 SUBGOAL_THEN`! f. sum (squ UNION sqx) f = sum squ f + sum (sqx:num -> bool) f ` ASSUME_TAC;
\r
5687 MATCH_MP_TAC SUM_UNION;
\r
5688 ASM_REWRITE_TAC[];
\r
5690 MP_TAC (ISPECL [` squ: num -> bool `;` sqx: num -> bool `] CARD_UNION);
\r
5692 ASM_REWRITE_TAC[GSYM DISJOINT];
\r
5693 UNDISCH_TAC` sqx UNION squ = 0..3 `;
\r
5694 REWRITE_TAC[UNION_COMM];
\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
5700 REWRITE_TAC[IN_ELIM_THM];
\r
5701 GEN_TAC THEN STRIP_TAC;
\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
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
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
5723 UNDISCH_TAC` sum (0..nn - 1) (cc_gg_v11 cc) < &0 `;
\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
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
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
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
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
5760 REWRITE_TAC[ARITH_RULE` 4 - 1 = 3 `];
\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
5769 ASM_REWRITE_TAC[REAL_ARITH` ~( &0 <= x ) <=> x < &0 `];
\r
5770 UNDISCH_TAC` sum (0..nn - 1) (cc_gg_v11 cc) < &0 `;
\r
5772 SIMP_TAC[ARITH_RULE` 4 - 1 = 3 `];
\r
5773 SUBGOAL_THEN` ? i. i < 4 /\ ~ cc_qu_v11 cc i ` ASSUME_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
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
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
5790 REWRITE_TAC[IN_ELIM_THM; INSERT_SUBSET; EMPTY_SUBSET];
\r
5791 ASM_REWRITE_TAC[];
\r
5792 UNDISCH_TAC` i < 4 `;
\r
5795 UNDISCH_TAC` ~( j = (i:num)) ` ;
\r
5796 REWRITE_TAC[GSYM Geomdetail.CARD2; INSERT_COMM];
\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
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
5811 MP_TAC (ISPECL [` 3`] Hypermap.LE_MOD_SUC);
\r
5812 REWRITE_TAC[ARITH_RULE` SUC 3 = 4 `];
\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
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
5828 ASM_REWRITE_TAC[];
\r
5829 UNDISCH_TAC` 4 = nn `;
\r
5832 MATCH_MP_TAC (GSYM MOD_INJ11);
\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
5841 ASM_REWRITE_TAC[];
\r
5842 UNDISCH_TAC` 4 = nn `;
\r
5845 MATCH_MP_TAC (GSYM MOD_INJ11);
\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
5855 ASM_REWRITE_TAC[];
\r
5856 UNDISCH_TAC` 4 = nn `;
\r
5859 MATCH_MP_TAC (GSYM MOD_INJ11);
\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
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
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
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
5892 ASM_REWRITE_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
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
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
5919 UNDISCH_TAC` 4 = nn `;
\r
5922 REWRITE_TAC[ARITH_RULE` 4 - 1 + i = i + 3 `];
\r
5923 REWRITE_TAC[SUM_NUMSEG4];
\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
5934 REAL_ARITH_TAC]);;
\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
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
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
5958 let LUIKGMH = prove_by_refinement(LUIKGMH_concl,
\r
5959 [NHANH NOT_QY_LEM;
\r
5961 ASSUME_TAC2 QY_NN00 THEN ASSUME_TAC2 QX_NN00;
\r
5962 ASSUME_TAC2 THREE_LE_CC_CARD;
\r
5964 NHANH Oxl_def.periodic_fn;
\r
5965 REWRITE_TAC[cc_bool_model_v11; cc_real_model_v11];
\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
5974 NHANH (REAL_ARITH` x < &0 /\ a <= x ==> a < &0 `);
\r
5977 CONV_TAC REAL_FIELD;
\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
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
5990 FIRST_X_ASSUM (MP_TAC o (SPEC`i:num `));
\r
5991 ASM_REWRITE_TAC[];
\r
5993 ASM_CASES_TAC` cc_gg_v11 cc i < &0 `;
\r
5994 SUBGOAL_THEN` i IN (sxx:num -> bool) ` MP_TAC;
\r
5996 REWRITE_TAC[IN_ELIM_THM];
\r
5997 ASM_REWRITE_TAC[];
\r
5998 ASM_REWRITE_TAC[NOT_IN_EMPTY];
\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
6007 MESON_TAC[LE_0; SUM_POS_LE_NUMSEG];
\r
6010 REWRITE_TAC[Local_lemmas.EMPTY_NOT_EXISTS_IN];
\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
6020 SIMP_TAC[IN_ELIM_THM; LE_0];
\r
6022 SUBGOAL_THEN` 0..2 = {x,y} UNION sc ` ASSUME_TAC;
\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
6036 MATCH_MP_TAC FINITE_DIFF;
\r
6037 FIRST_ASSUM ACCEPT_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
6045 ISPECL [` {x:num, y} `;` sc:num -> bool `] (
\r
6046 REWRITE_RULE[GSYM DISJOINT] CARD_UNION));
\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
6058 REWRITE_TAC[SUBSET];
\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
6065 REWRITE_TAC[IN_ELIM_THM];
\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
6074 FIRST_X_ASSUM SUBST_ALL_TAC;
\r
6075 UNDISCH_TAC` 3 = 2 + (CARD ({}:num -> bool))` ;
\r
6076 REWRITE_TAC[CARD_EMPTY];
\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
6086 NHANH (REAL_ARITH` a <= aa /\ b < bb ==> a + b < aa + bb `);
\r
6087 ASM_REWRITE_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
6096 SUBGOAL_THEN` ! i. #2.3 < cc_azim_v11 cc i ==> cc_eps <= cc_gg_v11 cc i ` ASSUME_TAC;
\r
6098 FIRST_X_ASSUM (MP_TAC o (SPEC` i:num `));
\r
6101 MATCH_MP_TAC REAL_LE_TRANS;
\r
6102 EXISTS_TAC` -- #0.0659 + #0.042 * cc_azim_v11 cc i `;
\r
6105 REWRITE_TAC[cc_eps];
\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
6115 REWRITE_TAC[FINITE_DIFF];
\r
6117 ASM_REWRITE_TAC[];
\r
6119 UNDISCH_TAC` x IN (sxx:num -> bool) `;
\r
6121 REWRITE_TAC[IN_ELIM_THM];
\r
6123 SUBGOAL_THEN` x IN (0..2) ` ASSUME_TAC;
\r
6124 ASM_REWRITE_TAC[IN_NUMSEG; LE_0];
\r
6127 NHANH (SET_RULE` x IN S ==> DISJOINT {x} (S DIFF {x}) `);
\r
6128 ASM_REWRITE_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
6133 ASM_REWRITE_TAC[GSYM DISJOINT];
\r
6134 UNDISCH_TAC` FINITE ((0..2) DIFF {x})`;
\r
6135 ASM_REWRITE_TAC[FINITE_SING];
\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
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
6147 REWRITE_TAC[ETA_AX];
\r
6149 ASM_SIMP_TAC[SUM_CONST];
\r
6150 PHA THEN STRIP_TAC;
\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
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
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
6177 UNDISCH_TAC` sxx = {x:num} `;
\r
6178 DISCH_THEN (SUBST1_TAC o SYM);
\r
6180 REWRITE_TAC[IN_DIFF; IN_NUMSEG; IN_ELIM_THM; LE_0; DE_MORGAN_THM];
\r
6181 GEN_TAC THEN IMP_TAC;
\r
6183 PHA THEN STRIP_TAC;
\r
6184 MP_TAC (SPEC` j:num` QU_OR_QXY);
\r
6185 ASM_REWRITE_TAC[];
\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
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
6209 REWRITE_TAC[IN_DIFF];
\r
6210 FIRST_X_ASSUM NHANH;
\r
6213 UNDISCH_TAC` cc_eps <= cc_gg_v11 cc i `;
\r
6216 UNDISCH_TAC` 3 <= nn `;
\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
6227 (* =================================================== *)
\r
6229 (* =================
\r
6232 search[name "RSI"];;
\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
6244 els [REPEAT STRIP_TAC;
\r
6245 ASSUME_TAC2 QY_NN00 THEN ASSUME_TAC2 QX_NN00;
\r
6246 ASSUME_TAC2 EXISTS_QY_CARD5;
\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
6257 ABBREV_TAC` nn = cc_card_v11 cc `];;
\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
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
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