(* ========================================================================== *) (* FLYSPECK - BOOK FORMALIZATION *) (* *) (* Chapter: Packing *) (* Author: Thomas C. Hales *) (* Date: 2012-11-23 *) (* ========================================================================== *) (* Dec 21, 2012. Use nonlinear inequalities to prove OXLZLEZ The purpose of this file is to justify the hypothesis cc_bool_prep_v9. by means of an induction argument. However, this was abandoned midstream, because there is difficultly in applying the reduction step to the hypothesis 'txq' in OXL_def.hl. *) module Oxl_lemma = struct open Oxl_def;; open Hales_tactic;; end;; (* let cc_real_model_simple2 = prove_by_refinement( `!cc n cc' x. ~(n=0) /\ cc_card_v9 cc = n /\ cc_card_v9 cc' = (n+1) /\ cc_bool_model_v9 cc /\ cc_real_model_v9 cc' /\ cc_bool_model_v9 cc' /\ periodic (cc_azim_v9 cc) (n) /\ periodic (cc_gg_v9 cc) (n) /\ periodic (cc_gg3a_v9 cc) (n) /\ periodic (cc_gg3b_v9 cc) (n) /\ (cc_qy_v9 cc' x) /\ (cc_qy_v9 cc' (x+1)) /\ cc_azim_v9 cc 0 = cc_azim_v9 cc' x + cc_azim_v9 cc' (x+1) /\ cc_gg_v9 cc 0 = cc_gg_v9 cc' x + cc_gg_v9 cc' (x+1) /\ cc_gg3a_v9 cc 0 = cc_gg3a_v9 cc' x + cc_gg3a_v9 cc' (x+1) /\ cc_gg3b_v9 cc 0 = cc_gg3b_v9 cc' x + cc_gg3b_v9 cc' (x+1) /\ (!i. i IN 1..n - 1 ==> cc_azim_v9 cc i = cc_azim_v9 cc' (x + 1 +i)) /\ (!i. i IN 1..n - 1 ==> cc_gg_v9 cc i = cc_gg_v9 cc' (x + 1 +i)) /\ (!i. i IN 1..n - 1 ==> cc_gg3a_v9 cc i = cc_gg3a_v9 cc' (x + 1 +i)) /\ (!i. i IN 1..n - 1 ==> cc_gg3b_v9 cc i = cc_gg3b_v9 cc' (x + 1 +i)) /\ cc_subcrit_v9 cc 0 = cc_subcrit_v9 cc' x /\ cc_crit_v9 cc 0 = cc_crit_v9 cc' x /\ cc_supercrit_v9 cc 0 = cc_supercrit_v9 cc' x /\ cc_small_v9 cc 0 = cc_small_v9 cc' x /\ cc_small_eta_v9 cc 0 = cc_small_eta_v9 cc' x /\ cc_4cell_v9 cc 0 = cc_4cell_v9 cc' x /\ (!i. i IN 1..n - 1 ==> cc_subcrit_v9 cc i = cc_subcrit_v9 cc' (x + 1 +i)) /\ (!i. i IN 1..n - 1 ==> cc_crit_v9 cc i = cc_crit_v9 cc' (x + 1 +i)) /\ (!i. i IN 1..n - 1 ==> cc_supercrit_v9 cc i = cc_supercrit_v9 cc' (x + 1 +i)) /\ (!i. i IN 1..n - 1 ==> cc_small_v9 cc i = cc_small_v9 cc' (x + 1 +i)) /\ (!i. i IN 1..n - 1 ==> cc_small_eta_v9 cc i = cc_small_eta_v9 cc' (x + 1 +i)) /\ (!i. i IN 1..n - 1 ==> cc_4cell_v9 cc i = cc_4cell_v9 cc' (x + 1 +i)) ==> cc_real_model_v9 cc`, (* {{{ proof *) [ REPEAT WEAK_STRIP_TAC; MATCH_MP_TAC cc_real_model_simple; EXISTS_TAC `n:num`; ASM_REWRITE_TAC[]; 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; REPEAT (FIRST_X_ASSUM_ST `cc_bool_model_v9` MP_TAC); EXPAND_TAC "n"; BY(MESON_TAC[cc_bool_model_v9]); REPEAT WEAK_STRIP_TAC; ASM_REWRITE_TAC[]; 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; EXPAND_TAC "n"; MATCH_MP_TAC periodic_fn; BY(ASM_REWRITE_TAC[]); REPEAT WEAK_STRIP_TAC; ASM_REWRITE_TAC[]; SUBGOAL_THEN `cc_qy_v9 cc 0` ASSUME_TAC; ASM_REWRITE_TAC[cc_qy_v9]; BY(ASM_REWRITE_TAC[GSYM cc_qy_v9]); 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); BY(ASM_MESON_TAC[CASE_3Q1H]); SUBGOAL_THEN `sum (0..n - 1) (cc_azim_v9 cc) = &2 * pi` (unlist REWRITE_TAC); INTRO_TAC (cc_cut_sum) [`cc_azim_v9 cc'`;`x:num`]; DISCH_THEN GMATCH_SIMP_TAC; ASM_SIMP_TAC[]; REPEAT (FIRST_X_ASSUM_ST `cc_real_model_v9` MP_TAC); FIRST_X_ASSUM_ST `cc_card_v9` MP_TAC; COPY_TAC; DISCH_THEN (SUBST1_TAC o GSYM); REWRITE_TAC[cc_real_model_v9]; REPEAT WEAK_STRIP_TAC; ASM_REWRITE_TAC[]; SUBGOAL_THEN `n = cc_card_v9 cc' - 1` SUBST1_TAC; FIRST_X_ASSUM_ST `~(n=0)` MP_TAC; REPEAT (FIRST_X_ASSUM_ST `cc_card_v9` MP_TAC); BY(ARITH_TAC); BY(ASM_REWRITE_TAC[]); COMMENT "done with exceptional conjuncts"; SUBGOAL_THEN `!i. i IN 0..n-1 <=> (i=0 \/ i IN 1..n-1)` (unlist REWRITE_TAC); REWRITE_TAC[IN_NUMSEG]; BY(ARITH_TAC); CONJ_TAC THEN REPEAT WEAK_STRIP_TAC THEN ASM_SIMP_TAC[cc_real_model_v9]; ENOUGH_TO_SHOW_TAC `#0.606 <= cc_azim_v9 cc' x /\ #0.606 <= cc_azim_v9 cc' (x+1)`; BY(REAL_ARITH_TAC); REPEAT (FIRST_X_ASSUM_ST `cc_real_model_v9` MP_TAC); BY(REWRITE_TAC[cc_real_model_v9] THEN DISCH_THEN (unlist REWRITE_TAC)); REPEAT (FIRST_X_ASSUM_ST `cc_real_model_v9` MP_TAC); BY(REWRITE_TAC[cc_real_model_v9] THEN DISCH_THEN (unlist REWRITE_TAC)); 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; FIRST_X_ASSUM MP_TAC; ASM_REWRITE_TAC[cc_qy_v9;cc_qu_v9;cc_qx_v9]; BY(MESON_TAC[]); REPEAT WEAK_STRIP_TAC; 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); FIRST_X_ASSUM_ST `cc_real_model_v9` MP_TAC; REWRITE_TAC[cc_real_model_v9]; REPEAT WEAK_STRIP_TAC; REWRITE_TAC[MESON[] `((!i. p i ) /\ (!i. q i)) <=> (!i. p i /\ q i)`]; GEN_TAC; ASM_CASES_TAC `i = 0`; BY(ASM_REWRITE_TAC[]); (ASM_SIMP_TAC[]); comment "unfinished, to here"; (* repeat conj then st/r then asimp[cc_real_model_v9] rep 5 (fxa mp) then mt[] fxast `cc_real_model_v9` mp rt[cc_real_model_v9] dthen (unlist amt) rep 5 (fxa mp) then mt[] fxast `cc_real_model_v9` mp rt[cc_real_model_v9] *) ]);; (* }}} *) *) (* g XSBYGIQ_concl;; let XSBYGIQ = prove_by_refinement( XSBYGIQ_concl, (* {{{ proof *) [ 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) }`))); GOAL_TERM (fun w -> (SUBGOAL_THEN ( env w `!cc. FINITE (bad_set cc)`) ASSUME_TAC)); GEN_TAC; EXPAND_TAC "bad_set"; MATCH_MP_TAC FINITE_SUBSET; GOAL_TERM (fun w -> (EXISTS_TAC ( env w `0.. cc_card_v9 cc - 1`))); REWRITE_TAC[FINITE_NUMSEG;SUBSET]; REWRITE_TAC[IN_ELIM_THM]; BY(MESON_TAC[]); COMMENT "set up induction"; REPEAT WEAK_STRIP_TAC; PROOF_BY_CONTR_TAC; 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)))`))); DISCH_THEN (C INTRO_TAC [`CARD(bad_set cc)`;`cc`]); ASM_REWRITE_TAC[]; BY(ASM_MESON_TAC[HAS_SIZE]); INDUCT_TAC; GEN_TAC; REWRITE_TAC[HAS_SIZE_0]; EXPAND_TAC "bad_set"; ONCE_REWRITE_TAC[EXTENSION]; REWRITE_TAC[IN_ELIM_THM;NOT_IN_EMPTY]; REPEAT WEAK_STRIP_TAC; FIRST_X_ASSUM_ST `?` MP_TAC; REWRITE_TAC[]; GOAL_TERM (fun w -> (EXISTS_TAC ( env w `cc'`))); ASM_REWRITE_TAC[]; REWRITE_TAC[cc_bool_prep_v9]; GEN_TAC; SUBGOAL_THEN `~(cc_card_v9 cc' = 0)` ASSUME_TAC; BY(ASM_MESON_TAC[cc_bool_model_v9]); ABBREV_TAC `x = i MOD cc_card_v9 cc'`; FIRST_X_ASSUM_ST `cc_qy_v9` (C INTRO_TAC [`x`]); REPEAT WEAK_STRIP_TAC; FIRST_X_ASSUM_ST `~` MP_TAC; REWRITE_TAC[]; EXPAND_TAC "x"; GMATCH_SIMP_TAC MOD_IN_NUMSEG; ASM_REWRITE_TAC[]; INTRO_TAC periodic_fn [`cc'`]; ASM_REWRITE_TAC[]; REPEAT WEAK_STRIP_TAC; CONJ_TAC; EXPAND_TAC "x"; GMATCH_SIMP_TAC (GSYM periodic_mod); BY(ASM_REWRITE_TAC[]); EXPAND_TAC "x"; 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; INTRO_TAC (GSYM DIVISION) [`i`;`cc_card_v9 cc'`]; ASM_REWRITE_TAC[]; REPEAT WEAK_STRIP_TAC; SUBGOAL_THEN `i DIV cc_card_v9 cc' * cc_card_v9 cc' + x + 1 = i + 1` SUBST1_TAC; BY(FIRST_X_ASSUM_ST `DIV` MP_TAC THEN ARITH_TAC); BY(ASM_REWRITE_TAC[]); 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'`); GMATCH_SIMP_TAC periodic_nk; BY(ASM_SIMP_TAC[arith `~(n=0) ==> (0 < n)`]); COMMENT "base case of induction completed, now induct step"; REPEAT WEAK_STRIP_TAC; COMMENT "pick element in bad set"; GOAL_TERM (fun w -> (SUBGOAL_THEN ( env w `?x. x IN bad_set cc'`) MP_TAC)); REWRITE_TAC[MEMBER_NOT_EMPTY]; REWRITE_TAC[GSYM HAS_SIZE_0]; FIRST_X_ASSUM_ST `SUC` MP_TAC; REWRITE_TAC[HAS_SIZE]; DISCH_THEN (unlist REWRITE_TAC); BY(ARITH_TAC); REPEAT WEAK_STRIP_TAC; COMMENT "construct reduced cc"; ABBREV_TAC `n = cc_card_v9 cc' - 1`; 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))`; ABBREV_TAC `cutb = \ (g:num->bool) j. if (0 = j MOD n) then g x else g (x + 1 + (j MOD n))`; 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`]; REPEAT WEAK_STRIP_TAC; GOAL_TERM (fun w -> (FIRST_X_ASSUM (MP_TAC o (ISPEC ( env w `cc''`))))); REWRITE_TAC[TAUT (`((x ==> ~y) ==> F) <=> x /\ y`)]; COMMENT "size of n"; SUBGOAL_THEN `~(cc_card_v9 cc'' = 0)` ASSUME_TAC; INTRO_TAC CC_CARD2 [`cc'`]; ASM_REWRITE_TAC[]; BY(REPEAT (FIRST_X_ASSUM MP_TAC) THEN ARITH_TAC); COMMENT "periodicity"; GOAL_TERM (fun w -> (SUBGOAL_THEN ( env w `!f. periodic (cutr f) n`) ASSUME_TAC)); REWRITE_TAC[periodic]; EXPAND_TAC "cutr"; REPEAT WEAK_STRIP_TAC; SUBGOAL_THEN ` (i + n) MOD n = i MOD n` SUBST1_TAC; BY(MESON_TAC[MOD_MULT_ADD;arith `(i + n) = (1 * n + i)`]); BY(MESON_TAC[]); GOAL_TERM (fun w -> (SUBGOAL_THEN ( env w `!g. periodic (cutb g) n`) ASSUME_TAC)); REWRITE_TAC[periodic]; EXPAND_TAC "cutb"; REPEAT WEAK_STRIP_TAC; SUBGOAL_THEN ` (i + n) MOD n = i MOD n` SUBST1_TAC; BY(MESON_TAC[MOD_MULT_ADD;arith `(i + n) = (1 * n + i)`]); BY(MESON_TAC[]); (COMMENT "bad_set"); SUBGOAL_THEN `BIJ (\j. j+ (x + 1)) (1..(n-1)) ((x+2)..(x+n))` ASSUME_TAC; REWRITE_TAC[BIJ;INJ]; SUBCONJ_TAC; REWRITE_TAC[IN_NUMSEG]; BY(ARITH_TAC); REPEAT WEAK_STRIP_TAC; REWRITE_TAC[SURJ]; ASM_REWRITE_TAC[]; REWRITE_TAC[IN_NUMSEG]; REPEAT WEAK_STRIP_TAC; GOAL_TERM (fun w -> (EXISTS_TAC ( env w `x' - (x + 1)`))); REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC); BY(ARITH_TAC); SUBGOAL_THEN `1 <= n` ASSUME_TAC; INTRO_TAC (CC_CARD2) [`cc'`]; ASM_REWRITE_TAC[]; REPLICATE_TAC 2 (FIRST_X_ASSUM_ST `x - 1` MP_TAC); BY(ARITH_TAC); SUBGOAL_THEN `!i. i IN 1..(n-1) ==> i MOD n = i` ASSUME_TAC; REWRITE_TAC[IN_NUMSEG]; GEN_TAC; INTRO_TAC MOD_LT [`i`;`n`]; BY(ARITH_TAC); GOAL_TERM (fun w -> (SUBGOAL_THEN ( env w `!f. cutr f 0 = (f:num->real) x + f (x + 1)`) ASSUME_TAC)); EXPAND_TAC "cutr"; GMATCH_SIMP_TAC MOD_0; REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC); BY(ARITH_TAC); GOAL_TERM (fun w -> (SUBGOAL_THEN ( env w `!g. cutb g 0 = (g:num->bool) x `) ASSUME_TAC)); EXPAND_TAC "cutb"; GMATCH_SIMP_TAC MOD_0; REPLICATE_TAC 3 (FIRST_X_ASSUM MP_TAC); BY(ARITH_TAC); GOAL_TERM (fun w -> (SUBGOAL_THEN ( env w `!i f. i IN 1..(n-1) ==> cutr f i = f (x + 1 + i)`) ASSUME_TAC)); REPEAT WEAK_STRIP_TAC; EXPAND_TAC "cutr"; GOAL_TERM (fun w -> (FIRST_X_ASSUM (MP_TAC o ISPEC ( env w `i`)))); ASM_REWRITE_TAC[]; DISCH_THEN SUBST1_TAC; COND_CASES_TAC; REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC); REWRITE_TAC[IN_NUMSEG]; BY(ARITH_TAC); BY(REWRITE_TAC[]); GOAL_TERM (fun w -> (SUBGOAL_THEN ( env w `!i g. i IN 1..(n-1) ==> cutb g i = g (x + 1 + i)`) ASSUME_TAC)); REPEAT WEAK_STRIP_TAC; EXPAND_TAC "cutb"; GOAL_TERM (fun w -> (FIRST_X_ASSUM_ST `MOD` (MP_TAC o ISPEC ( env w `i`)))); ASM_REWRITE_TAC[]; DISCH_THEN SUBST1_TAC; COND_CASES_TAC; REPLICATE_TAC 2 (FIRST_X_ASSUM MP_TAC); REWRITE_TAC[IN_NUMSEG]; BY(ARITH_TAC); BY(REWRITE_TAC[]); (COMMENT " NOT FINISHED TO HERE, 4 CONJUNCTS TO GO. ") (* NOT FINISHED *) ]);; (* }}} *) *)