let build_proof_tree () root =
Message.msg_string Message.Normal "In build_proof_tree";
Message.msg_string Message.Error "In build_proof_tree";
let lfPfFile = Options.getValueOfString "pffile" in
let _ = (VampyreErrormsg.proofChannel := open_out lfPfFile;
ignore (VampyrePretty.fprintf (!VampyreErrormsg.proofChannel) "ANN_STARTLF\n");
ignore (VampyrePretty.fprintf (!VampyreErrormsg.proofChannel) "IMPORT blast.ans\n"))
in
let rec process_node (n ,np ):proof_tree_node =
let process_child n_1 =
let op = get_op n_1 in
let (child_proof_region,lemma_token) =
Abstraction.post_proof (get_region n) op global_variable_table
in
let np_1_data =
{ pt_id = (get_id n_1);
pt_region = child_proof_region;
covering_nodes = None;
}
in
stats_nb_proof_tree_nodes := (!stats_nb_proof_tree_nodes) + 1;
let np_1 = ((Tree.create_child np_1_data (op,lemma_token) np) : proof_tree_node)
in
if (Abstraction.check_reg_eq child_proof_region (get_region n_1))
then
process_node (n_1,np_1)
else (Message.msg_string Message.Error "mismatched regions!";
process_node (n_1, np_1))
in
let children = get_children n in
if ((List.length children) = 0) then stats_nb_proof_tree_covered_nodes := !stats_nb_proof_tree_covered_nodes + 1;
let _ = List.map process_child children in
np
in
let pt_root_data =
{ pt_id = (get_id root);
pt_region = Abstraction.extract_proof_region (get_region root) ;
covering_nodes = None;
}
in
let pt_root = process_node (root, ((Tree.create_root pt_root_data) : proof_tree_node))
in
let tree_chan = open_out_bin "foo.tree" in
Marshal.to_channel tree_chan pt_root [];
close_out tree_chan;
Abstraction.print_proofTable ();
ignore (VampyrePretty.fprintf !VampyreErrormsg.proofChannel "ANN_ENDLF\n");
close_out (!VampyreErrormsg.proofChannel);
let _ = Unix.system ("gzip -9 -f foo.tree") in
let lfsz = (Unix.stat lfPfFile).Unix.st_size in
let treesz = (Unix.stat "foo.tree.gz").Unix.st_size in
Message.msg_string Message.Normal ("Proof size: (tree)"^(string_of_int treesz));
Message.msg_string Message.Normal (" (Vampyre)"^(string_of_int lfsz));
()