1 let clear_goalstack() =
2 current_goalstack := [];;
6 if !current_goalstack = [] then
7 (null_meta, [], fun _ [th] -> th)
9 hd (!current_goalstack);;
12 let raw_print_string str =
13 print_string ("$begin$" ^ str ^ "$end$");;
16 let raw_string_of_int i = string_of_num i;;
19 let raw_string_of_bool b = if b then "true" else "false";;
22 let raw_string_of_string str = "\"" ^ str ^ "\"";;
25 let rec raw_string_of_type =
27 (Tyapp(name, args)) -> "Tyapp(\"" ^ name ^ "\"[" ^ String.concat "," (map raw_string_of_type args) ^ "])"
28 | (Tyvar v) -> "Tyvar(\"" ^ v ^ "\")";;
32 let rec raw_string_of_term =
34 Var(name,ty) -> "Var(\"" ^ name ^ "\"," ^ raw_string_of_type ty ^ ")"
35 | Const(name,ty) -> "Const(\"" ^ name ^ "\"," ^ raw_string_of_type ty ^ ")"
36 | Comb(f,a) -> "Comb(" ^ raw_string_of_term f ^ "," ^ raw_string_of_term a ^ ")"
37 | Abs(v,b) -> "Abs(" ^ raw_string_of_term v ^ "," ^ raw_string_of_term b ^ ")";;
42 let raw_string_of_list el_type el_f list =
43 let str = String.concat ";" (map el_f list) in
44 "List(" ^ el_type ^ ",[" ^ str ^ "])";;
48 let raw_string_of_thm th =
49 let c = raw_string_of_term (concl th) in
50 let h = raw_string_of_list "Term" raw_string_of_term (hyp th) in
51 "Theorem(" ^ h ^ "," ^ c ^ ")";;
55 let raw_string_of_pair f_fst f_snd p =
56 "Pair(" ^ f_fst (fst p) ^ "," ^ f_snd (snd p) ^ ")";;
60 let raw_string_of_goal (g:goal) =
61 let assumptions = raw_string_of_list "Pair(String,Theorem)" (raw_string_of_pair raw_string_of_string raw_string_of_thm) (fst g) in
62 let c = raw_string_of_term (snd g) in
63 "Goal(" ^ assumptions ^ "," ^ c ^ ")";;
67 let raw_string_of_goalstate (g:goalstate) =
69 let goals = raw_string_of_list "Goal" raw_string_of_goal (s g) in
70 "Goalstate("^goals^")";;