1 (* ========================================================================= *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
4 (* Chapter: nonlinear inequalities *)
5 (* Author: Thomas Hales *)
7 (* ========================================================================= *)
11 Initialize the set of functions that are generated in interval calculations
14 module Function_list = struct
16 let function_list = ref
20 Functional_equation.cos797;
29 Functional_equation.rh0;
30 SYM Nonlinear_lemma.sol0_over_pi_EQ_const1;
36 Nonlinear_lemma.rho_alt;
37 (* deprecated 2013-08-17
40 REWRITE_RULE[Sphere.flat_term] Sphere.flat_term_x;
42 Nonlinear_lemma.quad_root_plus_curry;
48 Functional_equation.scalar6;
49 Functional_equation.promote1_to_6;
50 Functional_equation.promote3_to_6;
51 Nonlinear_lemma.unit6;
52 Nonlinear_lemma.proj_x1;
53 Nonlinear_lemma.proj_x2;
54 Nonlinear_lemma.proj_x3;
55 Nonlinear_lemma.proj_x4;
56 Nonlinear_lemma.proj_x5;
57 Nonlinear_lemma.proj_x6;
58 Functional_equation.compose6;
59 Functional_equation.functional_rotate2;
60 Functional_equation.functional_rotate3;
61 Functional_equation.functional_rotate4;
62 Functional_equation.functional_rotate5;
63 Functional_equation.functional_rotate6;
64 Functional_equation.proj_y1;
65 Functional_equation.functional_proj_y2;
66 Functional_equation.functional_proj_y3;
67 Functional_equation.functional_proj_y4;
68 Functional_equation.functional_proj_y5;
69 Functional_equation.functional_proj_y6;
79 Functional_equation.uni;
80 Functional_equation.constant6;
81 Functional_equation.two6;
82 Functional_equation.zero6;
83 Functional_equation.four6;
84 Functional_equation.dummy6;
85 Functional_equation.add6;
86 Functional_equation.sub6;
87 Functional_equation.mul6;
88 Functional_equation.div6;
89 Functional_equation.mk_126;
90 Functional_equation.mk_135;
91 Functional_equation.mk_456;
92 Functional_equation.rotate126;
93 (* by hand: Functional_equation.domain6; *)
95 Functional_equation.rotate234;
96 Functional_equation.rotate345;
98 Functional_equation.functional_norm2hh_x;
99 Functional_equation.functional_eta2_126;
100 Functional_equation.functional_x1_delta_x;
101 Functional_equation.functional_delta4_squared_x;
102 Functional_equation.functional_vol_x;
103 Functional_equation.functional_dih2_x;
104 Functional_equation.functional_dih3_x;
105 Functional_equation.functional_dih4_x;
106 Functional_equation.functional_dih5_x;
107 Functional_equation.functional_dih6_x;
108 Functional_equation.functional_lfun_y1;
109 Functional_equation.functional_ldih_x;
110 Functional_equation.functional_ldih2_x;
111 Functional_equation.functional_ldih3_x;
112 Functional_equation.functional_ldih6_x;
113 Functional_equation.functional_eulerA_x;
114 Functional_equation.functional_gchi1_x;
115 Functional_equation.functional_gchi2_x;
116 Functional_equation.functional_gchi3_x;
117 Functional_equation.functional_gchi4_x;
118 Functional_equation.functional_gchi5_x;
119 Functional_equation.functional_gchi6_x;
121 Nonlinear_lemma.halfbump_x;
122 Functional_equation.functional_halfbump_x1;
123 Functional_equation.functional_halfbump_x4;
124 Functional_equation.functional_eta2_135;
125 Functional_equation.functional_eta2_456;
126 Functional_equation.functional_vol3_x_sqrt;
127 Functional_equation.functional_vol3f_x_lfun;
128 Functional_equation.functional_vol3f_x_sqrt2_lmplus;
129 Functional_equation.functional_asn797k;
130 Functional_equation.functional_asnFnhk;
131 Functional_equation.functional_acs_sqrt_x1_d4;
132 Functional_equation.functional_acs_sqrt_x2_d4;
133 Functional_equation.functional_arclength_x_123;
134 Functional_equation.functional_sol_euler_x_divsqrtdelta;
135 Functional_equation.functional_sol246_euler_x_div_sqrtdelta;
136 Functional_equation.functional_sol345_euler_x_div_sqrtdelta;
137 Functional_equation.functional_sol156_euler_x_div_sqrtdelta;
138 Functional_equation.functional_dih_x_div_sqrtdelta_posbranch;
139 Functional_equation.functional_dih3_x_div_sqrtdelta_posbranch;
140 Functional_equation.functional_dih4_x_div_sqrtdelta_posbranch;
142 Functional_equation.functional_rhazim_x;
143 Functional_equation.functional_rhazim2_x;
144 Functional_equation.functional_rhazim3_x;
145 Functional_equation.functional_taum_x;
146 Functional_equation.functional_ldih_x_div_sqrtdelta_posbranch;
147 Functional_equation.functional_ldih2_x_div_sqrtdelta_posbranch;
148 Functional_equation.functional_ldih3_x_div_sqrtdelta_posbranch;
149 Functional_equation.functional_ldih5_x_div_sqrtdelta_posbranch;
150 Functional_equation.functional_ldih6_x_div_sqrtdelta_posbranch;
151 Functional_equation.functional_arclength_x1;
152 Functional_equation.functional_arclength_x2;
153 Functional_equation.functional_delta_126_x;
154 Functional_equation.functional_delta_234_x;
155 Functional_equation.functional_delta_135_x;
156 Functional_equation.functional_rhazim_x_div_sqrt_delta_posbranch;
157 Functional_equation.functional_rhazim2_x_div_sqrt_delta_posbranch;
158 Functional_equation.functional_rhazim3_x_div_sqrt_delta_posbranch;
159 Functional_equation.functional_tau_residual;
160 Functional_equation.h0cut;
161 (* Functional_equation.gamma2_x_div_azim; deprecated =gamma2= *)
162 Nonlin_def.gamma2_x_div_azim_v2;
163 (* Functional_equation.gamma2_x1_div_a; deprecated =gamma2= *)
164 Nonlin_def.gamma2_x1_div_a_v2;
165 Functional_equation.gamma3f_x_div_sqrtdelta_alt;
166 Functional_equation.vol3f_456;
167 Functional_equation.gamma3_x;
168 Functional_equation.gamma23_full8_x;
169 Functional_equation.gamma23_keep135_x;
171 Functional_equation.functional_dnum1;
172 (* added 2013-05-13 *)
173 Functional_equation.functional_delta_x1;Nonlin_def.mu6_x;Functional_equation.taud_x_ALT;
174 Nonlin_def.taud_D2_num_x;Nonlin_def.taud_D1_num_x;
175 Functional_equation.functional_mud_135_x;Functional_equation.functional_mud_126_x;
176 Functional_equation.functional_mud_234_x;Nonlin_def.mudLs_234_x;Nonlin_def.mudLs_126_x;
177 Nonlin_def.mudLs_135_x;
179 Functional_equation.functional_edge2_126_x;Functional_equation.functional_edge2_135_x;
180 Functional_equation.functional_edge2_234_x;
181 Nonlin_def.flat_term2_126_x;Nonlin_def.flat_term2_135_x;Nonlin_def.flat_term2_234_x;
182 Functional_equation.functional_ups_126;
189 (* Test code to determine which functions are actually used.
190 The list of rewrites are more accurate than the function list above in what is
195 flyspeck_needs "nonlinear/prep.hl";;
197 let suppress = Print_types.suppress;;
199 (* univariate functions *)
200 map suppress ["matan";"acs";"asn";"sin";"pow2";"sqrt";];;
202 map suppress ["cos797";"sqrt3";"pi";"hminus";"hplus";"h0";"const1";"mm1";"mm2";"sqrt8";"sol0"];;
203 (* functional constants and operators *)
204 map suppress ["two6";"dummy6"];;
205 map suppress ["add6";"mul6";"compose6";"proj_x1";"proj_x2";"proj_x3";"proj_x4"];;
206 map suppress ["proj_x5"; "proj_x6"; "proj_y1"; "scalar6"; "sub6"];;
207 map suppress ["sqrt_x1";"sqrt_x2";"sqrt_x3";"sqrt_x4";"sqrt_x5";"sqrt_x6"];;
208 map suppress ["unit6";"constant6";"uni"];;
209 map suppress ["div6";"zero6";"promote1_to_6"];;
210 (* Lib.h univariate *)
211 map suppress ["flat_term_x";"gamma2_x1_div_a_v2";"lfun";"halfbump_x";"rho";];;
212 (* Lib.h multivariate *)
213 map suppress ["delta_x";"delta_x4";"sol_x";"rad2_x";"eta2_126";"ups_126";"dih_x"];;
215 let const_types i = setify (map fst (Print_types.get_const_types i));;
218 let p1 = !Prep.prep_ineqs in
219 let i1 = map (fun t -> t.ineq) p1 in
220 fun k-> (ASSUME (snd(strip_forall (List.nth i1 k))));;
222 (* ignore domain6 constraints *)
224 let domain6_assum = prove_by_refinement(
225 `!h g f. domain6 h f g ==> (F ==> (f = g))`,
232 let strip_domain6 thm =
234 UNDISCH (MATCH_MP domain6_assum (SPEC_ALL thm))
235 with Failure _ -> thm;;
237 let rewrite_to_cpp_library_functions = map strip_domain6 [
240 Functional_equation.uni;
241 Functional_equation.functional_vol_x;
242 Functional_equation.functional_dih2_x;
243 Functional_equation.functional_dih3_x;
244 Functional_equation.functional_dih4_x;
245 Functional_equation.functional_dih5_x;
246 Functional_equation.functional_dih6_x;
247 Functional_equation.functional_gchi1_x;
248 Functional_equation.functional_gchi2_x;
249 Functional_equation.functional_gchi3_x;
250 Functional_equation.functional_gchi4_x;
251 Functional_equation.functional_gchi5_x;
252 Functional_equation.functional_gchi6_x;
253 Functional_equation.functional_ldih2_x;
254 Functional_equation.functional_ldih3_x;
255 Functional_equation.functional_eulerA_x;
256 Functional_equation.functional_sol156_euler_x_div_sqrtdelta;
257 Functional_equation.functional_sol246_euler_x_div_sqrtdelta;
258 Functional_equation.functional_sol345_euler_x_div_sqrtdelta;
259 Functional_equation.add6;
260 Functional_equation.sub6;
261 Functional_equation.mul6;
262 Functional_equation.div6;
263 Functional_equation.mk_126;
264 Functional_equation.mk_135;
265 Functional_equation.mk_456;
266 Nonlinear_lemma.proj_x1;
267 Nonlinear_lemma.proj_x2;
268 Nonlinear_lemma.proj_x3;
269 Nonlinear_lemma.proj_x4;
270 Nonlinear_lemma.proj_x5;
271 Nonlinear_lemma.proj_x6;
272 Functional_equation.compose6;
273 Functional_equation.functional_rotate2;
274 Functional_equation.functional_rotate3;
275 Functional_equation.functional_rotate4;
276 Functional_equation.functional_rotate5;
277 Functional_equation.functional_rotate6;
278 Functional_equation.proj_y1;
279 Functional_equation.functional_proj_y2;
280 Functional_equation.functional_proj_y3;
281 Functional_equation.functional_proj_y4;
282 Functional_equation.functional_proj_y5;
283 Functional_equation.functional_proj_y6;
284 Functional_equation.functional_delta_126_x;
285 Functional_equation.functional_delta_234_x;
286 Functional_equation.functional_delta_135_x;
287 Nonlin_def.flat_term2_135_x;Nonlin_def.flat_term2_234_x;
288 Functional_equation.functional_mud_135_x;Functional_equation.functional_mud_126_x;
289 Functional_equation.functional_mud_234_x;
290 Functional_equation.functional_ldih2_x_div_sqrtdelta_posbranch;
291 Functional_equation.functional_ldih3_x_div_sqrtdelta_posbranch;
292 Functional_equation.functional_ldih5_x_div_sqrtdelta_posbranch;
293 Functional_equation.functional_ldih6_x_div_sqrtdelta_posbranch;
295 Functional_equation.functional_ldih_x_div_sqrtdelta_posbranch;
296 Functional_equation.functional_sol_euler_x_divsqrtdelta;
297 Functional_equation.functional_dih_x_div_sqrtdelta_posbranch;
298 Functional_equation.functional_rhazim_x;
299 Functional_equation.functional_rhazim2_x;
300 Functional_equation.functional_rhazim3_x;
301 Functional_equation.rh0;
302 Functional_equation.functional_delta4_squared_x;
303 Functional_equation.functional_x1_delta_x;
304 Functional_equation.functional_tau_residual;
305 Nonlin_def.mu6_x;Functional_equation.taud_x_ALT;
306 Nonlin_def.taud_D2_num_x;Nonlin_def.taud_D1_num_x;
307 Functional_equation.functional_edge2_126_x;Functional_equation.functional_edge2_135_x;
308 Functional_equation.functional_edge2_234_x;
309 Nonlin_def.flat_term2_126_x;Nonlin_def.flat_term2_135_x;Nonlin_def.flat_term2_234_x;
310 Functional_equation.functional_delta_x1;
311 REWRITE_RULE[Sphere.flat_term] Sphere.flat_term_x;
312 Functional_equation.functional_rhazim_x_div_sqrt_delta_posbranch;
313 Functional_equation.functional_rhazim2_x_div_sqrt_delta_posbranch;
314 Functional_equation.functional_rhazim3_x_div_sqrt_delta_posbranch;
315 Nonlin_def.mudLs_234_x;Nonlin_def.mudLs_126_x;
316 Nonlin_def.mudLs_135_x;
317 Functional_equation.functional_taum_x;
318 Functional_equation.functional_dnum1;
319 Nonlinear_lemma.halfbump_x;
320 Functional_equation.functional_halfbump_x1;
321 Functional_equation.functional_halfbump_x4;
322 Functional_equation.functional_asn797k;
323 Functional_equation.functional_asnFnhk;
324 Functional_equation.functional_acs_sqrt_x1_d4;
326 Functional_equation.functional_arclength_x1;
327 REWRITE_RULE[LET_DEF;LET_END_DEF] Functional_equation.functional_arclength_x_123;
328 Functional_equation.vol3f_456;
329 Functional_equation.functional_vol3_x_sqrt;
330 Functional_equation.functional_vol3f_x_sqrt2_lmplus;
331 Functional_equation.functional_vol3f_x_lfun;
332 Functional_equation.functional_eta2_135;
333 Functional_equation.functional_eta2_456;
334 Functional_equation.gamma3_x;
335 Functional_equation.gamma23_full8_x;
336 Functional_equation.gamma23_keep135_x;
337 Functional_equation.gamma3f_x_div_sqrtdelta_alt;
338 Functional_equation.functional_dih4_x_div_sqrtdelta_posbranch;
339 Functional_equation.functional_ldih6_x;
340 Functional_equation.functional_ldih_x;
341 Functional_equation.functional_norm2hh_x;
345 let u = REWRITE_RULE rewrite_to_cpp_library_functions
349 let cons = (map (const_types o test) (0--(List.length !Prep.prep_ineqs - 1)));;
350 let nubcons = Flyspeck_lib.nub cons;;
353 let functions() = (!function_list);;
355 let function_remove thm =
356 let _ = (function_list:= (filter (fun t -> not(t = thm)) !function_list)) in
359 let function_add thm =
360 let _ = function_remove thm in
361 let _ = (function_list:= (!function_list) @ [thm]) in