needs "../formal_lp/hypermap/main/prove_flyspeck_lp.hl";; module Verify_all = struct open List;; open Flyspeck_lp;; open Lp_certificate;; let cert_dir = ref (flyspeck_dir ^ "/../formal_lp/glpk/binary");; let get_files_with_prefix dir prefix = let files = Array.to_list (Sys.readdir dir) in let n = String.length prefix in let files1 = filter (fun f -> String.length f >= n) files in let files2 = filter (fun f -> String.sub f 0 n = prefix) files1 in map (fun f -> sprintf "%s/%s" dir f) files2;; let get_certificate_files_with_prefix dir prefix = let alt_dir = dir ^ "/lp_certificates" in let files1 = get_files_with_prefix dir prefix in let files2 = if Sys.file_exists alt_dir then get_files_with_prefix alt_dir prefix else [] in files1 @ files2;; let mem_stat () = let stat = Gc.stat() in let word = float_of_int (Sys.word_size / 8) in let free = float_of_int stat.Gc.free_words *. word /. 1024.0 in let total = float_of_int stat.Gc.heap_words *. word /. 1024.0 in let allocated = total -. free in let str = sprintf "allocated = %f (free = %f; total_size = %f; %f)\n" allocated free total (free /. total) in print_string str;; let verify_file = let counter = ref 0 and total = ref 0 in let report s = Format.print_string s; Format.print_newline(); Format.print_flush() in let process certificate = let _ = counter := !counter + 1 in let _ = report (sprintf "%d/%d" !counter !total) in verify_lp_certificate certificate in let process_all file = let certificates = read_lp_certificates file in let _ = counter := 0 in let _ = total := length certificates in let start = Unix.gettimeofday() in let result = map process certificates in let finish = Unix.gettimeofday() in result, finish -. start in fun file -> let _ = report (sprintf "Verifying %s" file) in let result, time = process_all file in let _ = Gc.compact() in let _ = mem_stat() in result, time;; let init_ineqs() = try let _ = Lp_ineqs.find_ineq false 3 "y1_def" in let _ = report "Inequalities are already initialized" in () with Not_found -> Flyspeck_lp.init_ineqs();; let verify_easy() = let _ = init_ineqs() in let files = get_certificate_files_with_prefix !cert_dir "easy" in map verify_file files;; let verify_hard() = let _ = init_ineqs() in let files = get_certificate_files_with_prefix !cert_dir "hard" in map verify_file files;; let verify_all() = let result_hard = verify_hard() in let result_easy = verify_easy() in result_hard @ result_easy;; let test_result result = let ths = List.flatten (map fst result) in let time = map snd result in let total = end_itlist (+.) time in let concls = setify (map concl ths) in let hyps = unions (map (fun th -> filter (fun tm -> not (is_binary "iso" tm)) (hyp th)) ths) in total, concls, hyps;; end;;