(* ========================================================================= *) (* FLYSPECK - BOOK FORMALIZATION *) (* *) (* Authour : VU KHAC KY *) (* Book lemma: YNHYJIT *) (* Chaper : Packing (Marchal cells) *) (* *) (* ========================================================================= *) (* ========================================================================= *) (* FILES NEED TO BE LOADED *) (* *) (* ========================================================================= *) module Ynhyjit = struct open Rogers;; open Vukhacky_tactics;; open Pack_defs;; open Pack_concl;; open Pack1;; open Sphere;; open Marchal_cells;; open Emnwuus;; open Marchal_cells_2_new;; open Lepjbdj;; let YNHYJIT_concl = `!V ul i p vl. saturated V /\ packing V /\ barV V 3 ul /\ i IN {2,3,4} /\ hl (truncate_simplex (i-1) ul) < sqrt (&2) /\ sqrt (&2) <= hl ul /\ p permutes 0..(i - 1) /\ vl = left_action_list p ul ==> barV V 3 vl /\ (!j. i-1 <= j/\ j <= 3 ==> omega_list_n V vl j = omega_list_n V ul j)`;; (* ========================================================================= *)end;;let YNHYJIT = prove_by_refinement (YNHYJIT_concl, [(REPEAT GEN_TAC THEN STRIP_TAC); (ASM_CASES_TAC `i = 2`); (NEW_GOAL `vl IN barV V 3 /\ omega_list_n V vl 1 = omega_list_n V ul 1 /\ omega_list_n V vl 2 = omega_list_n V ul 2 /\ omega_list_n V vl 3 = omega_list_n V ul 3 /\ mxi V vl = mxi V ul`); (MATCH_MP_TAC LEFT_ACTION_LIST_1_PROPERTIES); (EXISTS_TAC `p:num->num`); (ASM_REWRITE_TAC[]); (ASM_MESON_TAC[ARITH_RULE `2 - 1 = 1`]); (UP_ASM_TAC THEN REWRITE_TAC[IN] THEN REPEAT STRIP_TAC); (ASM_REWRITE_TAC[]); (ASM_CASES_TAC `j = 1`); (REWRITE_TAC[ASSUME `j = 1`]); (ASM_REWRITE_TAC[]); (ASM_CASES_TAC `j = 2`); (REWRITE_TAC[ASSUME `j = 2`]); (ASM_REWRITE_TAC[]); (ASM_CASES_TAC `j = 3`); (REWRITE_TAC[ASSUME `j = 3`]); (ASM_REWRITE_TAC[]); (NEW_GOAL `F`); (ASM_ARITH_TAC); (ASM_MESON_TAC[]); (ASM_CASES_TAC `i = 3`); (NEW_GOAL `vl IN barV V 3 /\ omega_list_n V vl 2 = omega_list_n V ul 2 /\ omega_list_n V vl 3 = omega_list_n V ul 3 /\ mxi V vl = mxi V ul`); (MATCH_MP_TAC LEFT_ACTION_LIST_PROPERTIES); (EXISTS_TAC `p:num->num`); (ASM_REWRITE_TAC[]); (ASM_MESON_TAC[ARITH_RULE `3 - 1 = 2`]); (UP_ASM_TAC THEN REWRITE_TAC[IN] THEN REPEAT STRIP_TAC); (ASM_REWRITE_TAC[]); (ASM_CASES_TAC `j = 2`); (REWRITE_TAC[ASSUME `j = 2`]); (ASM_REWRITE_TAC[]); (ASM_CASES_TAC `j = 3`); (REWRITE_TAC[ASSUME `j = 3`]); (ASM_REWRITE_TAC[]); (NEW_GOAL `F`); (ASM_ARITH_TAC); (ASM_MESON_TAC[]); (NEW_GOAL `i = 4`); (ASM_SET_TAC[]); (NEW_GOAL `F`); (UNDISCH_TAC `hl (truncate_simplex (i - 1) (ul:(real^3)list)) < sqrt (&2)`); (ASM_REWRITE_TAC[ARITH_RULE `4 - 1 = 3`]); (REWRITE_WITH `truncate_simplex 3 (ul:(real^3)list) = ul`); (NEW_GOAL `?u0 u1 u2 u3. ul = [u0;u1;u2;u3:real^3]`); (MATCH_MP_TAC BARV_3_EXPLICIT); (EXISTS_TAC `V:real^3 ->bool` THEN ASM_REWRITE_TAC[]); (UP_ASM_TAC THEN STRIP_TAC); (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_3]); (ASM_REAL_ARITH_TAC); (ASM_MESON_TAC[])]);;