1 (* =========================================================== *)
\r
2 (* Miscellaneous functions *)
\r
3 (* Author: Alexey Solovyev *)
\r
4 (* Date: 2012-10-27 *)
\r
5 (* =========================================================== *)
\r
9 module Arith_misc = struct
\r
11 (* A little faster version of PROVE_HYP *)
\r
12 let MY_PROVE_HYP hyp th = EQ_MP (DEDUCT_ANTISYM_RULE hyp th) hyp;;
\r
14 (* A faster version of BETA_RULE *)
\r
15 let MY_BETA_RULE th =
\r
17 let op, arg = dest_comb tm in
\r
19 let op_th = AP_THM (beta op) arg in
\r
20 let beta_th = BETA_CONV (rand (concl op_th)) in
\r
24 EQ_MP (beta (concl th)) th;;
\r
27 (* Applies f to arg n times and returns the total execution time *)
\r
29 let start = Unix.gettimeofday() in
\r
33 Unix.gettimeofday() -. start;;
\r
35 (* Generates a power function for the given binary operation *)
\r
36 let gen_pow op id n x =
\r
40 else if n = 1 then x
\r
41 else if n land 1 = 1 then
\r
44 let t = pow (n lsr 1) in
\r
48 let rec shape_list n list =
\r
49 if length list <= n then [list]
\r
51 let l1, l2 = chop_list n list in
\r
52 l1 :: shape_list n l2;;
\r
54 (* map2 which works for lists of any size (no requirement |l1| = |l2|) *)
\r
55 let rec my_map2 f l1 l2 =
\r
61 | (h2::t2) -> (f h1 h2) :: my_map2 f t1 t2);;
\r