(* file combining all the function data *) (* This gives the verification of a sample inequality drawn from ineq.hl. *) flyspeck_needs "../formal_lp/formal_interval/interval_m/recurse.hl";; flyspeck_needs "../formal_lp/formal_interval/interval_m/verifier.hl";; open Interval;; open Univariate;; open Line_interval;; open Taylor;; open Recurse;; (********************************) let delta_x_poly = let tm = (rand o concl o SPEC_ALL) Sphere.delta_x in expr_to_vector_fun tm;; let delta_y_poly = let tm = (rand o concl o SPEC_ALL o REWRITE_RULE[Sphere.delta_x]) Sphere.delta_y in expr_to_vector_fun tm;; let delta_x4_poly = let tm = (rand o concl o SPEC_ALL) Sphere.delta_x4 in expr_to_vector_fun tm;; let delta_y4_poly = let tm = (rand o concl o SPECL[`y1*y1`; `y2*y2`; `y3*y3`; `y4*y4`; `y5*y5`; `y6*y6`]) Sphere.delta_x4 in expr_to_vector_fun tm;; let tf_delta_x = build_taylor pp delta_x_poly;; let tf_delta_y = build_taylor pp delta_y_poly;; let tf_delta_x4 = build_taylor pp delta_x4_poly;; let tf_delta_y4 = build_taylor pp delta_y4_poly;; let x = replicate 1.0 8 and y = replicate 2.0 8 and z = replicate 3.0 8 and w = replicate 1.0 8;; evalf4 tf_delta_x w x y z;; evalf4 tf_delta_y w x y z;; evalf4 tf_delta_x4 w x y z;; (************************************) let four_y1_delta_y_poly = let x_var, tm = dest_abs delta_y_poly in mk_abs (x_var, mk_binop mul_op_real `&4` (mk_binop mul_op_real `(x:real^6)$1 * x$1` tm));; let neg_delta_y4_poly = let x_var, tm = dest_abs delta_y4_poly in mk_abs (x_var, mk_comb (neg_op_real, tm));; let four_y1_delta_y = build_taylor pp four_y1_delta_y_poly;; let neg_delta_y4 = build_taylor pp neg_delta_y4_poly;; dih_y_taylor;; let pi_taylor = build_taylor 10 `\x:real^1. pi`;; let neg_pi_taylor = build_taylor 10 `\x:real^1. --pi`;; let pi2_taylor = build_taylor 10 `\x:real^1. pi / &2`;; let f = tf_product x1 (tf_product x1 x3);; let f = Uni_compose (uinv, x2);; evalf0 f 0 x y;; evalf0 f 2 x y;; (* dih_y *) let dih_y_taylor = let denom = Uni_compose (uinv, Uni_compose (usqrt, four_y1_delta_y)) in Plus (pi2_taylor, Uni_compose (uatan, tf_product neg_delta_y4 denom));; (* sol_y *) Sphere.sol_y;; let sol_y_taylor = let dih1 = dih_y_taylor and dih2 = Composite (dih_y_taylor, x2, x3, x1, x5, x6, x4, unit, unit) and dih3 = Composite (dih_y_taylor, x3, x1, x2, x6, x4, x5, unit, unit) in Plus (dih1, Plus (dih2, Plus (dih3, neg_pi_taylor)));; let pi_val= 3.1415926535897932;; let sol0_val = 0.5512855984325308;; let const1_val = sol0_val /. pi_val;; let const1_plus1 = const1_val +. 1.0;; let ly_taylor = build_taylor pp `\x:real^1. #2.52 / #0.52 - x$1 * inv(#0.52)`;; let lnazim_y_taylor = tf_product ly_taylor dih_y_taylor;; Sphere.taum;; let taum_taylor = let azim1 = lnazim_y_taylor and azim2 = Composite (lnazim_y_taylor, x2, x3, x1, x5, x6, x4, unit, unit) and azim3 = Composite (lnazim_y_taylor, x3, x1, x2, x6, x4, x5, unit, unit) in let f1 = Scale (sol_y_taylor, mk_interval (const1_plus1, const1_plus1)) and f2 = Plus (azim1, Plus (azim2, azim3)) in Plus (f1, Scale (f2, mk_interval (~-.const1_val, ~-.const1_val)));; (*********************) let rec count_f0_flags r = match r with | Result_false _ -> failwith "False result" | Result_glue (_,_,_,r1,r2) -> count_f0_flags r1 + count_f0_flags r2 | Result_pass (_,flag,_,_) -> if flag then 1 else 0 | Result_pass_mono _ -> 0;; let rec all_mono r = match r with | Result_false _ -> failwith "False result" | Result_glue (mono,_,_,r1,r2) -> List.concat mono @ all_mono r1 @ all_mono r2 | Result_pass (mono,_,_,_) -> List.concat mono | Result_pass_mono _ -> [];; let rec all_pass r = match r with | Result_false _ -> failwith "False result" | Result_glue (_,_,_,r1,r2) -> all_pass r1 @ all_pass r2 | Result_pass (_,_,x,z) -> [x,z] | Result_pass_mono _ -> [];; let rec count_pass_mono r = match r with | Result_false _ -> failwith "False result" | Result_glue (_,_,_,r1,r2) -> count_pass_mono r1 + count_pass_mono r2 | Result_pass (_,_,_,_) -> 0 | Result_pass_mono _ -> 1;; let rec count_convex r = match r with | Result_false _ -> failwith "False result" | Result_glue (_,_,flag,r1,r2) -> (if flag then 1 else 0) + count_convex r1 + count_convex r2 | _ -> 0;; (*********************) let x = [2.0001; 2.0001; 2.0001; 2.0; 2.0; 2.0; 0.0; 0.0] and z = [2.52; 2.52; 2.52; 2.0; 2.0; 2.0; 0.0; 0.0];; let taum_test1 = run_test taum_taylor x z true 0.0 true true true;; (* 79 *) result_size taum_test1;; let taum_test1_0 = run_test0 taum_taylor x z true 0.0 true true true;; (* 57281 *) result_size taum_test1_0;; count_f0_flags taum_test1;; length (all_mono taum_test1);; count_pass_mono taum_test1;; count_convex taum_test1;; (***) let x = [2.0; 2.0; 2.0; 2.0; 2.0; 2.52; 0.0; 0.0] and z = [2.52; 2.52; 2.52; 2.0; 2.0; 2.52; 0.0; 0.0];; (CONV_RULE (NUM_REDUCE_CONV THENC REAL_RAT_REDUCE_CONV) o SPECL[`2`; `1`]) Sphere.tame_table_d;; let taum_test2 = run_test taum_taylor x z true 0.103 false;; result_size taum_test2;; (***) let x = [2.0; 2.0; 2.0; 2.1771; 2.0; 2.0; 0.0; 0.0] and z = [2.52; 2.52; 2.52; 2.52; 2.52; 2.52; 0.0; 0.0];; let taum_test3 = run_test taum_taylor x z true 0.04 false;; result_size taum_test3;; (***) let x, z = replicate 2.0 6 @ [0.;0.], replicate 2.52 6 @ [0.;0.];; let ineq = Plus (taum_taylor, Scale (dih_y_taylor, mk_interval (0.626, 0.626)));; let taum_test4 = run_test ineq x z true 0.77 true true true;; (* 52540 (48014) *) result_size taum_test4;; count_f0_flags taum_test4;; length (all_mono taum_test4);; count_pass_mono taum_test4;; count_convex taum_test4;; let ineq = Plus (taum_taylor, Scale (dih_y_taylor, mk_interval (-0.259, -0.259)));; let taum_test5 = run_test ineq x z true (-0.32) false;; (* 37737 *) result_size taum_test5;; let x, z = replicate 2.0 6 @ [0.;0.], replicate 2.52 6 @ [0.;0.];; let ineq1_test = run_test dih_y_taylor x z true 0.852 true true true;; (* 10298 (10142) *) result_size ineq1_test;; let ineq1_test0 = run_test0 dih_y_taylor x z true 0.852 true true true;; (* 604796 (true false true) 308962 (true true true) *) result_size ineq1_test0;; count_f0_flags ineq1_test;; all_mono ineq1_test;; count_pass_mono ineq1_test;; count_convex ineq1_test;; let pp = 10;; let n = 6;; let xx = `[&2;&2;&2;&2;&2;&2]` and zz = `[#2.52;#2.52;#2.52;#2.52;#2.52;#2.52]`;; let xx1 = convert_to_float_list pp true xx and zz1 = convert_to_float_list pp false zz;; m_verify_domain_test n pp eval_delta_x4 ineq1_test xx1 zz1;; ineq1_test;; let dd = (evalf dih_y_taylor x x).dd;; map (fun i -> mth (mth dd i) i) iter8;; let ineq2_test = run_test dih_y_taylor x z false 1.893 true true false;; (* 4905 (4886 with derivatives) *) result_size ineq2_test;; let ineq2_test0 = run_test0 dih_y_taylor x z false 1.893 true true true;; (* 35842 (true false true) 35842 (true true true) *) result_size ineq2_test0;; let all_p = all_pass ineq2_test;; let xx, zz = List.nth all_p 134;; let dd = (evalf dih_y_taylor xx zz).dd;; map (fun i -> mth (mth dd i) i) iter8;; count_f0_flags ineq2_test;; all_mono ineq2_test;; count_pass_mono ineq2_test;; count_convex ineq2_test;; count_f0_flags ineq2_test0;; length (all_mono ineq2_test0);; count_pass_mono ineq2_test0;; count_convex ineq2_test0;; let rec pass_intervals r = match r with | Result_false _ -> failwith "False result" | Result_glue (_,r1,r2) -> pass_intervals r1 @ pass_intervals r2 | Result_pass (x,z) -> [x,z];; let intersect_results r1 r2 = let i1 = pass_intervals r1 and i2 = pass_intervals r2 in let i = intersect i1 i2 in length i, i;; (* 1683 *) let n1, i1 = intersect_results ineq1_test ineq2_test;; (* 583 *) let n2, i2 = intersect_results ineq1_test taum_test4;; (* 5 *) let n3, i3 = intersect_results ineq2_test taum_test4;; (* 14486 *) let n4, i4 = intersect_results taum_test4 taum_test5;; maxl (map (maxl o filter (fun x -> x <> 0.) o snd o center_form) (pass_intervals taum_test4));; let x = 2;; (*****************************) (* Sphere.dih_x;; Ineq.I_5735387903;; Ineq.dart_std3;; Ineq.getexact "5735387903";; Ineq.getexact "5490182221";; Ineq.getexact "2570626711";; Ineq.getexact "3296257235";; Ineq.getexact "8519146937";; Ineq.getexact "4667071578";; Ineq.getexact "1395142356";; Ineq.getexact "7394240696";; Ineq.getexact "7726998381";; Ineq.getexact "4047599236";; Ineq.getexact "8248508703";; Ineq.getexact "7931207804";; Ineq.getexact "4491491732";; *) (**********************************)