1 (* ========================================================================== *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
5 (* Author: Thomas C. Hales *)
7 (* ========================================================================== *)
12 Use nonlinear inequalities to prove OXLZLEZ
14 The purpose of this file is to justify the hypothesis cc_bool_prep_v9.
15 by means of an induction argument.
17 However, this was abandoned midstream, because there is difficultly
18 in applying the reduction step to the hypothesis 'txq' in OXL_def.hl.
22 module Oxl_lemma = struct
30 let cc_real_model_simple2 = prove_by_refinement(
34 cc_card_v9 cc' = (n+1) /\
35 cc_bool_model_v9 cc /\
36 cc_real_model_v9 cc' /\
37 cc_bool_model_v9 cc' /\
38 periodic (cc_azim_v9 cc) (n) /\
39 periodic (cc_gg_v9 cc) (n) /\
40 periodic (cc_gg3a_v9 cc) (n) /\
41 periodic (cc_gg3b_v9 cc) (n) /\
43 (cc_qy_v9 cc' (x+1)) /\
44 cc_azim_v9 cc 0 = cc_azim_v9 cc' x + cc_azim_v9 cc' (x+1) /\
45 cc_gg_v9 cc 0 = cc_gg_v9 cc' x + cc_gg_v9 cc' (x+1) /\
46 cc_gg3a_v9 cc 0 = cc_gg3a_v9 cc' x + cc_gg3a_v9 cc' (x+1) /\
47 cc_gg3b_v9 cc 0 = cc_gg3b_v9 cc' x + cc_gg3b_v9 cc' (x+1) /\
48 (!i. i IN 1..n - 1 ==> cc_azim_v9 cc i = cc_azim_v9 cc' (x + 1 +i)) /\
49 (!i. i IN 1..n - 1 ==> cc_gg_v9 cc i = cc_gg_v9 cc' (x + 1 +i)) /\
50 (!i. i IN 1..n - 1 ==> cc_gg3a_v9 cc i = cc_gg3a_v9 cc' (x + 1 +i)) /\
51 (!i. i IN 1..n - 1 ==> cc_gg3b_v9 cc i = cc_gg3b_v9 cc' (x + 1 +i)) /\
52 cc_subcrit_v9 cc 0 = cc_subcrit_v9 cc' x /\
53 cc_crit_v9 cc 0 = cc_crit_v9 cc' x /\
54 cc_supercrit_v9 cc 0 = cc_supercrit_v9 cc' x /\
55 cc_small_v9 cc 0 = cc_small_v9 cc' x /\
56 cc_small_eta_v9 cc 0 = cc_small_eta_v9 cc' x /\
57 cc_4cell_v9 cc 0 = cc_4cell_v9 cc' x /\
58 (!i. i IN 1..n - 1 ==> cc_subcrit_v9 cc i = cc_subcrit_v9 cc' (x + 1 +i)) /\
59 (!i. i IN 1..n - 1 ==> cc_crit_v9 cc i = cc_crit_v9 cc' (x + 1 +i)) /\
60 (!i. i IN 1..n - 1 ==> cc_supercrit_v9 cc i = cc_supercrit_v9 cc' (x + 1 +i)) /\
61 (!i. i IN 1..n - 1 ==> cc_small_v9 cc i = cc_small_v9 cc' (x + 1 +i)) /\
62 (!i. i IN 1..n - 1 ==> cc_small_eta_v9 cc i = cc_small_eta_v9 cc' (x + 1 +i)) /\
63 (!i. i IN 1..n - 1 ==> cc_4cell_v9 cc i = cc_4cell_v9 cc' (x + 1 +i))
64 ==> cc_real_model_v9 cc`,
67 REPEAT WEAK_STRIP_TAC;
68 MATCH_MP_TAC cc_real_model_simple;
71 SUBGOAL_THEN `periodic (cc_subcrit_v9 cc) n /\ periodic (cc_crit_v9 cc) n /\ periodic (cc_supercrit_v9 cc) n /\ periodic (cc_small_v9 cc) n /\ periodic (cc_small_eta_v9 cc) n /\ periodic (cc_4cell_v9 cc) n` MP_TAC;
72 REPEAT (FIRST_X_ASSUM_ST `cc_bool_model_v9` MP_TAC);
74 BY(MESON_TAC[cc_bool_model_v9]);
75 REPEAT WEAK_STRIP_TAC;
77 SUBGOAL_THEN `periodic (cc_hassmall_v9 cc) n /\ periodic (cc_qu_v9 cc) n /\ periodic (cc_qx_v9 cc) n /\ periodic (cc_qy_v9 cc) n ` MP_TAC;
79 MATCH_MP_TAC periodic_fn;
80 BY(ASM_REWRITE_TAC[]);
81 REPEAT WEAK_STRIP_TAC;
83 SUBGOAL_THEN `cc_qy_v9 cc 0` ASSUME_TAC;
84 ASM_REWRITE_TAC[cc_qy_v9];
85 BY(ASM_REWRITE_TAC[GSYM cc_qy_v9]);
86 SUBGOAL_THEN `(n = 4 /\ (?i. cc_4cell_v9 cc i /\ cc_crit_v9 cc i /\ cc_qu_v9 cc (i + 1) /\ cc_qu_v9 cc (i + 2) /\ cc_qu_v9 cc (i + 3))) <=> F` (unlist REWRITE_TAC);
87 BY(ASM_MESON_TAC[CASE_3Q1H]);
88 SUBGOAL_THEN `sum (0..n - 1) (cc_azim_v9 cc) = &2 * pi` (unlist REWRITE_TAC);
89 INTRO_TAC (cc_cut_sum) [`cc_azim_v9 cc'`;`x:num`];
90 DISCH_THEN GMATCH_SIMP_TAC;
92 REPEAT (FIRST_X_ASSUM_ST `cc_real_model_v9` MP_TAC);
93 FIRST_X_ASSUM_ST `cc_card_v9` MP_TAC;
95 DISCH_THEN (SUBST1_TAC o GSYM);
96 REWRITE_TAC[cc_real_model_v9];
97 REPEAT WEAK_STRIP_TAC;
99 SUBGOAL_THEN `n = cc_card_v9 cc' - 1` SUBST1_TAC;
100 FIRST_X_ASSUM_ST `~(n=0)` MP_TAC;
101 REPEAT (FIRST_X_ASSUM_ST `cc_card_v9` MP_TAC);
103 BY(ASM_REWRITE_TAC[]);
104 COMMENT "done with exceptional conjuncts";
105 SUBGOAL_THEN `!i. i IN 0..n-1 <=> (i=0 \/ i IN 1..n-1)` (unlist REWRITE_TAC);
106 REWRITE_TAC[IN_NUMSEG];
108 CONJ_TAC THEN REPEAT WEAK_STRIP_TAC THEN ASM_SIMP_TAC[cc_real_model_v9];
109 ENOUGH_TO_SHOW_TAC `#0.606 <= cc_azim_v9 cc' x /\ #0.606 <= cc_azim_v9 cc' (x+1)`;
111 REPEAT (FIRST_X_ASSUM_ST `cc_real_model_v9` MP_TAC);
112 BY(REWRITE_TAC[cc_real_model_v9] THEN DISCH_THEN (unlist REWRITE_TAC));
113 REPEAT (FIRST_X_ASSUM_ST `cc_real_model_v9` MP_TAC);
114 BY(REWRITE_TAC[cc_real_model_v9] THEN DISCH_THEN (unlist REWRITE_TAC));
115 SUBGOAL_THEN `~cc_4cell_v9 cc 0 /\ ~cc_qu_v9 cc 0 /\ ~cc_qx_v9 cc 0 /\ ~cc_4cell_v9 cc' x /\ ~cc_qu_v9 cc' x /\ ~cc_qx_v9 cc' x` MP_TAC;
116 FIRST_X_ASSUM MP_TAC;
117 ASM_REWRITE_TAC[cc_qy_v9;cc_qu_v9;cc_qx_v9];
119 REPEAT WEAK_STRIP_TAC;
120 SUBGOAL_THEN `(!i. i = 0 \/ i IN 1..n - 1 ==> cc_4cell_v9 cc i ==> cc_azim_v9 cc i < #2.8) /\ (!i. i = 0 \/ i IN 1..n - 1 ==> cc_qu_v9 cc i ==> --cc_eps <= cc_gg_v9 cc i) /\ (!i. i = 0 \/ i IN 1..n - 1 ==> cc_qu_v9 cc i /\ ~cc_small_eta_v9 cc i ==> cc_eps <= cc_gg_v9 cc i) /\ (!i. i = 0 \/ i IN 1..n - 1 ==> cc_4cell_v9 cc i ==> a_spine5 + b_spine5 * cc_azim_v9 cc i <= cc_gg_v9 cc i) /\ (!i. i = 0 \/ i IN 1..n - 1 ==> cc_qu_v9 cc i ==> -- #0.0659 + #0.042 * cc_azim_v9 cc i <= cc_gg_v9 cc i) /\ (!i. i = 0 \/ i IN 1..n - 1 ==> cc_qu_v9 cc i ==> -- #0.0142852 + #0.00609451 * cc_azim_v9 cc i <= cc_gg_v9 cc i) /\ (!i. i = 0 \/ i IN 1..n - 1 ==> cc_qu_v9 cc i ==> #0.161517 - #0.119482 * cc_azim_v9 cc i <= cc_gg_v9 cc i) /\ (!i. i = 0 \/ i IN 1..n - 1 ==> cc_qx_v9 cc i ==> #0.0 <= cc_gg_v9 cc i) /\ (!i. i = 0 \/ i IN 1..n - 1 ==> cc_qx_v9 cc i /\ #2.3 < cc_azim_v9 cc i ==> cc_eps <= cc_gg_v9 cc i)` (unlist REWRITE_TAC);
121 FIRST_X_ASSUM_ST `cc_real_model_v9` MP_TAC;
122 REWRITE_TAC[cc_real_model_v9];
123 REPEAT WEAK_STRIP_TAC;
124 REWRITE_TAC[MESON[] `((!i. p i ) /\ (!i. q i)) <=> (!i. p i /\ q i)`];
126 ASM_CASES_TAC `i = 0`;
127 BY(ASM_REWRITE_TAC[]);
129 comment "unfinished, to here";
131 repeat conj then st/r then asimp[cc_real_model_v9]
132 rep 5 (fxa mp) then mt[]
133 fxast `cc_real_model_v9` mp
136 rep 5 (fxa mp) then mt[]
137 fxast `cc_real_model_v9` mp
147 let XSBYGIQ = prove_by_refinement(
151 GOAL_TERM (fun w -> (ABBREV_TAC ( env w `bad_set = \cc. {i | i IN 0..(cc_card_v9 cc - 1) /\ cc_qy_v9 cc i /\ cc_qy_v9 cc (i+1) }`)));
152 GOAL_TERM (fun w -> (SUBGOAL_THEN ( env w `!cc. FINITE (bad_set cc)`) ASSUME_TAC));
154 EXPAND_TAC "bad_set";
155 MATCH_MP_TAC FINITE_SUBSET;
156 GOAL_TERM (fun w -> (EXISTS_TAC ( env w `0.. cc_card_v9 cc - 1`)));
157 REWRITE_TAC[FINITE_NUMSEG;SUBSET];
158 REWRITE_TAC[IN_ELIM_THM];
160 COMMENT "set up induction";
161 REPEAT WEAK_STRIP_TAC;
163 GOAL_TERM (fun w -> (ENOUGH_TO_SHOW_TAC ( env w `(!k. (!cc. (bad_set cc) HAS_SIZE k ==> ~( cc_bool_model_v9 cc /\ cc_real_model_v9 cc /\ sum (0..cc_card_v9 cc - 1) (cc_gg_v9 cc) < &0)))`)));
164 DISCH_THEN (C INTRO_TAC [`CARD(bad_set cc)`;`cc`]);
166 BY(ASM_MESON_TAC[HAS_SIZE]);
169 REWRITE_TAC[HAS_SIZE_0];
170 EXPAND_TAC "bad_set";
171 ONCE_REWRITE_TAC[EXTENSION];
172 REWRITE_TAC[IN_ELIM_THM;NOT_IN_EMPTY];
173 REPEAT WEAK_STRIP_TAC;
174 FIRST_X_ASSUM_ST `?` MP_TAC;
176 GOAL_TERM (fun w -> (EXISTS_TAC ( env w `cc'`)));
178 REWRITE_TAC[cc_bool_prep_v9];
180 SUBGOAL_THEN `~(cc_card_v9 cc' = 0)` ASSUME_TAC;
181 BY(ASM_MESON_TAC[cc_bool_model_v9]);
182 ABBREV_TAC `x = i MOD cc_card_v9 cc'`;
183 FIRST_X_ASSUM_ST `cc_qy_v9` (C INTRO_TAC [`x`]);
184 REPEAT WEAK_STRIP_TAC;
185 FIRST_X_ASSUM_ST `~` MP_TAC;
188 GMATCH_SIMP_TAC MOD_IN_NUMSEG;
190 INTRO_TAC periodic_fn [`cc'`];
192 REPEAT WEAK_STRIP_TAC;
195 GMATCH_SIMP_TAC (GSYM periodic_mod);
196 BY(ASM_REWRITE_TAC[]);
198 SUBGOAL_THEN `cc_qy_v9 cc' ((i DIV cc_card_v9 cc') * cc_card_v9 cc' + (i MOD cc_card_v9 cc' + 1))` MP_TAC;
199 INTRO_TAC (GSYM DIVISION) [`i`;`cc_card_v9 cc'`];
201 REPEAT WEAK_STRIP_TAC;
202 SUBGOAL_THEN `i DIV cc_card_v9 cc' * cc_card_v9 cc' + x + 1 = i + 1` SUBST1_TAC;
203 BY(FIRST_X_ASSUM_ST `DIV` MP_TAC THEN ARITH_TAC);
204 BY(ASM_REWRITE_TAC[]);
205 SUBST1_TAC (arith `i DIV cc_card_v9 cc' * cc_card_v9 cc' + i MOD cc_card_v9 cc' + 1 = (i MOD cc_card_v9 cc' + 1) + i DIV cc_card_v9 cc' * cc_card_v9 cc'`);
206 GMATCH_SIMP_TAC periodic_nk;
207 BY(ASM_SIMP_TAC[arith `~(n=0) ==> (0 < n)`]);
208 COMMENT "base case of induction completed, now induct step";
209 REPEAT WEAK_STRIP_TAC;
210 COMMENT "pick element in bad set";
211 GOAL_TERM (fun w -> (SUBGOAL_THEN ( env w `?x. x IN bad_set cc'`) MP_TAC));
212 REWRITE_TAC[MEMBER_NOT_EMPTY];
213 REWRITE_TAC[GSYM HAS_SIZE_0];
214 FIRST_X_ASSUM_ST `SUC` MP_TAC;
215 REWRITE_TAC[HAS_SIZE];
216 DISCH_THEN (unlist REWRITE_TAC);
218 REPEAT WEAK_STRIP_TAC;
219 COMMENT "construct reduced cc";
220 ABBREV_TAC `n = cc_card_v9 cc' - 1`;
221 ABBREV_TAC `cutr = \ (f:num->real) j. if (0 = j MOD n) then f x + f (x+1) else f (x + 1 + (j MOD n))`;
222 ABBREV_TAC `cutb = \ (g:num->bool) j. if (0 = j MOD n) then g x else g (x + 1 + (j MOD n))`;
223 INTRO_TAC CC_EXISTS [`cutr (cc_azim_v9 cc')`;`cutr (cc_gg_v9 cc')`;`cutr (cc_gg3a_v9 cc')`;`cutr (cc_gg3b_v9 cc')`;`cutb (cc_subcrit_v9 cc')`;`cutb (cc_crit_v9 cc')`;`cutb (cc_supercrit_v9 cc')`;`cutb (cc_small_v9 cc')`;`cutb (cc_small_eta_v9 cc')`;`cutb (cc_4cell_v9 cc')`;`n`];
224 REPEAT WEAK_STRIP_TAC;
225 GOAL_TERM (fun w -> (FIRST_X_ASSUM (MP_TAC o (ISPEC ( env w `cc''`)))));
226 REWRITE_TAC[TAUT (`((x ==> ~y) ==> F) <=> x /\ y`)];
228 SUBGOAL_THEN `~(cc_card_v9 cc'' = 0)` ASSUME_TAC;
229 INTRO_TAC CC_CARD2 [`cc'`];
231 BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC);
232 COMMENT "periodicity";
233 GOAL_TERM (fun w -> (SUBGOAL_THEN ( env w `!f. periodic (cutr f) n`) ASSUME_TAC));
234 REWRITE_TAC[periodic];
236 REPEAT WEAK_STRIP_TAC;
237 SUBGOAL_THEN ` (i + n) MOD n = i MOD n` SUBST1_TAC;
238 BY(MESON_TAC[MOD_MULT_ADD;arith `(i + n) = (1 * n + i)`]);
240 GOAL_TERM (fun w -> (SUBGOAL_THEN ( env w `!g. periodic (cutb g) n`) ASSUME_TAC));
241 REWRITE_TAC[periodic];
243 REPEAT WEAK_STRIP_TAC;
244 SUBGOAL_THEN ` (i + n) MOD n = i MOD n` SUBST1_TAC;
245 BY(MESON_TAC[MOD_MULT_ADD;arith `(i + n) = (1 * n + i)`]);
248 SUBGOAL_THEN `BIJ (\j. j+ (x + 1)) (1..(n-1)) ((x+2)..(x+n))` ASSUME_TAC;
249 REWRITE_TAC[BIJ;INJ];
251 REWRITE_TAC[IN_NUMSEG];
253 REPEAT WEAK_STRIP_TAC;
256 REWRITE_TAC[IN_NUMSEG];
257 REPEAT WEAK_STRIP_TAC;
258 GOAL_TERM (fun w -> (EXISTS_TAC ( env w `x' - (x + 1)`)));
259 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC);
261 SUBGOAL_THEN `1 <= n` ASSUME_TAC;
262 INTRO_TAC (CC_CARD2) [`cc'`];
264 REPLICATE_TAC 2 (FIRST_X_ASSUM_ST `x - 1` MP_TAC);
266 SUBGOAL_THEN `!i. i IN 1..(n-1) ==> i MOD n = i` ASSUME_TAC;
267 REWRITE_TAC[IN_NUMSEG];
269 INTRO_TAC MOD_LT [`i`;`n`];
271 GOAL_TERM (fun w -> (SUBGOAL_THEN ( env w `!f. cutr f 0 = (f:num->real) x + f (x + 1)`) ASSUME_TAC));
273 GMATCH_SIMP_TAC MOD_0;
274 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC);
276 GOAL_TERM (fun w -> (SUBGOAL_THEN ( env w `!g. cutb g 0 = (g:num->bool) x `) ASSUME_TAC));
278 GMATCH_SIMP_TAC MOD_0;
279 REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC);
281 GOAL_TERM (fun w -> (SUBGOAL_THEN ( env w `!i f. i IN 1..(n-1) ==> cutr f i = f (x + 1 + i)`) ASSUME_TAC));
282 REPEAT WEAK_STRIP_TAC;
284 GOAL_TERM (fun w -> (FIRST_X_ASSUM (MP_TAC o ISPEC ( env w `i`))));
286 DISCH_THEN SUBST1_TAC;
288 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC);
289 REWRITE_TAC[IN_NUMSEG];
292 GOAL_TERM (fun w -> (SUBGOAL_THEN ( env w `!i g. i IN 1..(n-1) ==> cutb g i = g (x + 1 + i)`) ASSUME_TAC));
293 REPEAT WEAK_STRIP_TAC;
295 GOAL_TERM (fun w -> (FIRST_X_ASSUM_ST `MOD` (MP_TAC o ISPEC ( env w `i`))));
297 DISCH_THEN SUBST1_TAC;
299 REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC);
300 REWRITE_TAC[IN_NUMSEG];
303 (COMMENT " NOT FINISHED TO HERE, 4 CONJUNCTS TO GO. ")