1 (* ========================================================================= *)
\r
2 (* FLYSPECK - BOOK FORMALIZATION *)
\r
4 (* Authour : VU KHAC KY *)
\r
5 (* Book lemma: YNHYJIT *)
\r
6 (* Chaper : Packing (Marchal cells) *)
\r
8 (* ========================================================================= *)
\r
10 (* ========================================================================= *)
\r
11 (* FILES NEED TO BE LOADED *)
\r
17 (* ========================================================================= *)
\r
19 module Ynhyjit = struct
\r
22 open Vukhacky_tactics;;
\r
27 open Marchal_cells;;
\r
29 open Marchal_cells_2_new;;
\r
33 let YNHYJIT_concl =
\r
35 saturated V /\ packing V /\ barV V 3 ul /\ i IN {2,3,4} /\
\r
36 hl (truncate_simplex (i-1) ul) < sqrt (&2) /\ sqrt (&2) <= hl ul /\
\r
37 p permutes 0..(i - 1) /\
\r
38 vl = left_action_list p ul
\r
40 (!j. i-1 <= j/\ j <= 3 ==> omega_list_n V vl j = omega_list_n V ul j)`;;
\r
41 (* ========================================================================= *)
\r
42 let YNHYJIT = prove_by_refinement (YNHYJIT_concl,
\r
44 [(REPEAT GEN_TAC THEN STRIP_TAC);
\r
45 (ASM_CASES_TAC `i = 2`);
\r
46 (NEW_GOAL `vl IN barV V 3 /\
\r
47 omega_list_n V vl 1 = omega_list_n V ul 1 /\
\r
48 omega_list_n V vl 2 = omega_list_n V ul 2 /\
\r
49 omega_list_n V vl 3 = omega_list_n V ul 3 /\
\r
50 mxi V vl = mxi V ul`);
\r
51 (MATCH_MP_TAC LEFT_ACTION_LIST_1_PROPERTIES);
\r
52 (EXISTS_TAC `p:num->num`);
\r
53 (ASM_REWRITE_TAC[]);
\r
54 (ASM_MESON_TAC[ARITH_RULE `2 - 1 = 1`]);
\r
55 (UP_ASM_TAC THEN REWRITE_TAC[IN] THEN REPEAT STRIP_TAC);
\r
56 (ASM_REWRITE_TAC[]);
\r
57 (ASM_CASES_TAC `j = 1`);
\r
58 (REWRITE_TAC[ASSUME `j = 1`]);
\r
59 (ASM_REWRITE_TAC[]);
\r
60 (ASM_CASES_TAC `j = 2`);
\r
61 (REWRITE_TAC[ASSUME `j = 2`]);
\r
62 (ASM_REWRITE_TAC[]);
\r
63 (ASM_CASES_TAC `j = 3`);
\r
64 (REWRITE_TAC[ASSUME `j = 3`]);
\r
65 (ASM_REWRITE_TAC[]);
\r
70 (ASM_CASES_TAC `i = 3`);
\r
71 (NEW_GOAL `vl IN barV V 3 /\
\r
72 omega_list_n V vl 2 = omega_list_n V ul 2 /\
\r
73 omega_list_n V vl 3 = omega_list_n V ul 3 /\
\r
74 mxi V vl = mxi V ul`);
\r
75 (MATCH_MP_TAC LEFT_ACTION_LIST_PROPERTIES);
\r
76 (EXISTS_TAC `p:num->num`);
\r
77 (ASM_REWRITE_TAC[]);
\r
78 (ASM_MESON_TAC[ARITH_RULE `3 - 1 = 2`]);
\r
79 (UP_ASM_TAC THEN REWRITE_TAC[IN] THEN REPEAT STRIP_TAC);
\r
80 (ASM_REWRITE_TAC[]);
\r
81 (ASM_CASES_TAC `j = 2`);
\r
82 (REWRITE_TAC[ASSUME `j = 2`]);
\r
83 (ASM_REWRITE_TAC[]);
\r
84 (ASM_CASES_TAC `j = 3`);
\r
85 (REWRITE_TAC[ASSUME `j = 3`]);
\r
86 (ASM_REWRITE_TAC[]);
\r
94 (UNDISCH_TAC `hl (truncate_simplex (i - 1) (ul:(real^3)list)) < sqrt (&2)`);
\r
95 (ASM_REWRITE_TAC[ARITH_RULE `4 - 1 = 3`]);
\r
96 (REWRITE_WITH `truncate_simplex 3 (ul:(real^3)list) = ul`);
\r
97 (NEW_GOAL `?u0 u1 u2 u3. ul = [u0;u1;u2;u3:real^3]`);
\r
98 (MATCH_MP_TAC BARV_3_EXPLICIT);
\r
99 (EXISTS_TAC `V:real^3 ->bool` THEN ASM_REWRITE_TAC[]);
\r
100 (UP_ASM_TAC THEN STRIP_TAC);
\r
101 (ASM_REWRITE_TAC[TRUNCATE_SIMPLEX_EXPLICIT_3]);
\r
102 (ASM_REAL_ARITH_TAC);
\r
103 (ASM_MESON_TAC[])]);;
\r