1 (* ========================================================================= *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
4 (* Authour : VU KHAC KY *)
5 (* Book lemma: UPFZBZM *)
6 (* Chaper : Packing (Clusters) *)
8 (* ========================================================================= *)
10 (* ========================================================================= *)
11 (* FILES NEED TO BE LOADED *)
12 (* sum_beta_bump.hl *)
13 (* sum_gammaX_lmfun_estimate.hl *)
14 (* ========================================================================= *)
17 `!V. saturated V /\ packing V /\ cell_cluster_estimate V /\
19 lmfun_inequality V ==>
20 (?G. negligible_fun_0 G V /\ fcc_compatible G V)`;;
22 let FCC_COMPATABILITY_FUNC_concl =
23 `!V. saturated V /\ packing V /\ cell_cluster_estimate V /\
25 lmfun_inequality V /\ G = (\u. --vol(voronoi_open V u) +
26 &8 * mm1 - &8 * mm2 * sum { v | v IN V /\ ~(u=v) /\ dist(u,v) <= &2*h0 }
27 (\v. lmfun (hl [u;v])))
28 ==> fcc_compatible G V`;;
30 let NEGLIGIBLE_FUNC_concl =
33 cell_cluster_estimate V /\
37 (\u. --vol (voronoi_open V u) +
41 sum {v | v IN V /\ ~(u = v) /\ dist (u,v) <= &2 * h0}
42 (\v. lmfun (hl [u; v])))
43 ==> negligible_fun_0 G V`;;
45 (* ========================================================================= *)
47 (* ========================================================================= *)
49 (* PART 1 OF THE LEMMA *)
51 let FCC_COMPATABILITY_FUNC = prove_by_refinement (
52 FCC_COMPATABILITY_FUNC_concl,
53 [(REWRITE_TAC[lmfun_inequality;fcc_compatible]);
55 (ASM_REWRITE_TAC[Pack2.MEASURE_VORONOI_CLOSED_OPEN]);
56 (ASM_REWRITE_TAC[REAL_ARITH `a + --a + b - c = b - c`]);
57 (MATCH_MP_TAC (REAL_ARITH
58 `x = &8 * mm1 - &8 * (&12 * mm2) /\ y <= &8 * (&12 * mm2) ==>
61 (REWRITE_TAC[SQRT_OF_32_lemma]);
62 (REWRITE_TAC[REAL_ARITH `a * b - a * c = a * (b - c)`]);
63 (REWRITE_TAC[m1_minus_12m2]);
64 (MATCH_MP_TAC REAL_LE_LMUL);
65 (REWRITE_TAC[REAL_ARITH `&0 <= &8`]);
66 (REWRITE_TAC[REAL_ARITH `&12 * mm2 = mm2 * &12`]);
67 (MATCH_MP_TAC REAL_LE_LMUL);
68 (REWRITE_TAC[ZERO_LE_MM2_LEMMA]);
73 (* ========================================================================= *)
74 (* PART 2 OF THE LEMMA *)
75 (* ========================================================================= *)
77 let NEGLIGIBLE_FUNC = prove_by_refinement (
78 NEGLIGIBLE_FUNC_concl,
79 [(REWRITE_TAC[negligible_fun_0; negligible_fun_any_C]);
82 (MP_TAC (SPEC `V:real^3->bool` KIZHLTL1));
84 (MP_TAC (SPEC `V:real^3->bool` KIZHLTL2));
86 (MP_TAC (SPEC `V:real^3->bool` KIZHLTL4));
89 (MP_TAC (SPEC `V:real^3->bool` SUM_GAMMAX_LMFUN_ESTIMATE));
93 `!r. saturated V /\ packing V /\ &1 <= r
95 sum {X | X SUBSET ball (vec 0,r) /\ mcell_set V X}
96 (\X. gammaX V X lmfun)`);
98 (FIRST_ASSUM MATCH_MP_TAC);
100 (UP_ASM_TAC THEN REWRITE_TAC[gammaX] THEN STRIP_TAC);
102 (EXISTS_TAC `--c''' - c - c' - c''`);
105 (ABBREV_TAC `f1 = (\u:real^3. --vol (voronoi_open V u))`);
106 (ABBREV_TAC `f2 = (\u:real^3. &8 * mm1 - &8 * mm2 *
107 sum {v | v IN V /\ ~(u = v) /\ dist (u,v) <= &2 * h0}
108 (\v. lmfun (hl [u; v])))`);
109 (REWRITE_WITH `sum ((V:real^3->bool) INTER ball (vec 0,r)) G =
110 sum (V INTER ball (vec 0,r)) f1 +
111 sum (V INTER ball (vec 0,r)) f2`);
112 (ASM_REWRITE_TAC[] THEN EXPAND_TAC "f1" THEN EXPAND_TAC "f2");
113 (MATCH_MP_TAC SUM_ADD);
114 (ASM_SIMP_TAC[FINITE_PACK_LEMMA]);
115 (ABBREV_TAC `f3 = (\u:real^3. &8 * mm1)`);
116 (ABBREV_TAC `f4 = (\u:real^3. &8 * mm2 *
117 sum {v | v IN V /\ ~(u = v) /\ dist (u,v) <= &2 * h0}
118 (\v. lmfun (hl [u; v])))`);
119 (REWRITE_WITH `sum ((V:real^3->bool) INTER ball (vec 0,r)) f2 =
120 sum (V INTER ball (vec 0,r)) f3 -
121 sum (V INTER ball (vec 0,r)) f4`);
122 (EXPAND_TAC "f2" THEN EXPAND_TAC "f3" THEN EXPAND_TAC "f4");
123 (MATCH_MP_TAC SUM_SUB);
124 (ASM_SIMP_TAC[FINITE_PACK_LEMMA]);
125 (EXPAND_TAC "f4" THEN DEL_TAC THEN
126 ASM_SIMP_TAC[SUM_NEG;SUM_CONST;SUM_LMUL;FINITE_PACK_LEMMA]);
127 (ABBREV_TAC `f5 = (\u:real^3.
128 sum {v | v IN V /\ ~(u = v) /\ dist (u,v) <= &2 * h0}
129 (\v. lmfun (hl [u; v])))`);
130 (ABBREV_TAC `B = {X | X SUBSET ball (vec 0, r) /\ mcell_set V X}`);
131 (ABBREV_TAC `T1 = sum B vol`);
132 (ABBREV_TAC `T2 = --(&2 * mm1 / pi) * sum B (total_solid V)`);
133 (ABBREV_TAC `T3 = (&8 * mm2 / pi) * sum B (\X. sum (edgeX V X)
134 (\({u, v}). if {u, v} IN edgeX V X
135 then dihX V X (u,v) * lmfun (hl [u; v])
138 (NEW_GOAL `sum (V:real^3->bool INTER ball (vec 0,r)) f1 <= --T1 - c * r pow 2`);
139 (EXPAND_TAC "T1" THEN EXPAND_TAC "B");
141 (REWRITE_TAC[SUM_NEG; REAL_ARITH `-- a <= --b - c <=> b + c <= a`]);
142 (FIRST_ASSUM MATCH_MP_TAC);
146 `sum (V:real^3->bool INTER ball (vec 0,r)) f3 <= --T2 - c' * r pow 2`);
147 (EXPAND_TAC "T2" THEN EXPAND_TAC "B");
149 (REWRITE_TAC[SUM_NEG; REAL_ARITH `a <= --(-- b * d) - c<=> a + c <= b * d`]);
150 (REWRITE_WITH `sum (V INTER ball (vec 0,r)) (\u:real^3. &8 * mm1) =
151 &(CARD (V INTER ball (vec 0,r))) * (&8 * mm1)`);
152 (MATCH_MP_TAC SUM_CONST);
153 (ASM_SIMP_TAC[FINITE_PACK_LEMMA]);
154 (FIRST_ASSUM MATCH_MP_TAC);
157 (NEW_GOAL `T3 + c'' * r pow 2 <=
158 &8 * mm2 * sum (V:real^3->bool INTER ball (vec 0,r)) f5`);
159 (EXPAND_TAC "T3" THEN EXPAND_TAC "B");
161 (FIRST_ASSUM MATCH_MP_TAC);
164 (MATCH_MP_TAC (REAL_ARITH `(?s. A <= s /\ s <= b) ==> A <= b`));
165 (EXISTS_TAC `--T1 + --T2 + --T3 - (c + c' + c'') * r pow 2`);
167 (ASM_REAL_ARITH_TAC);
168 (REWRITE_TAC[REAL_ARITH
169 `--T1 + --T2 + --T3 - (c + c' + c'') * r pow 2 <=
170 (--c''' - c - c' - c'') * r pow 2
171 <=> c''' * r pow 2 <= T1 + T2 + T3`]);
172 (REWRITE_WITH `T1 + T2 + T3 =
173 sum {X | X SUBSET ball (vec 0,r) /\ mcell_set V X}
174 (\X. gammaX V X lmfun)`);
176 (REWRITE_TAC[gammaX]);
177 (NEW_GOAL `FINITE (B:(real^3->bool)->bool)`);
179 (ASM_SIMP_TAC [FINITE_MCELL_SET_LEMMA]);
180 (ASM_SIMP_TAC[SUM_ADD; SUM_SUB; SUM_LMUL; ETA_AX]);
183 (FIRST_ASSUM MATCH_MP_TAC);
184 (ASM_REWRITE_TAC[])]);;
187 (* ========================================================================= *)
189 (* ========================================================================= *)
191 let UPFZBZM = prove (UPFZBZM_concl,
192 (REPEAT STRIP_TAC) THEN (ABBREV_TAC `G = (\u. --vol (voronoi_open V u) +
196 sum {v:real^3 | v IN V /\ ~(u = v) /\ dist (u,v) <= &2 * h0}
197 (\v. lmfun (hl [u; v])))`) THEN
198 (EXISTS_TAC `G:real^3->real`) THEN
199 (ASM_MESON_TAC[NEGLIGIBLE_FUNC;FCC_COMPATABILITY_FUNC]));;