;;
let string_of_rule = function
- | Terms.SuperpositionRight -> "SupR"
- | Terms.SuperpositionLeft -> "SupL"
- | Terms.Demodulation -> "Demod"
+ | Terms.Superposition -> "Super"
+ | Terms.Demodulation -> "Demod"
;;
let string_of_direction = function
let pp_proof bag ~formatter:f p =
let rec aux eq = function
| Terms.Exact t ->
- Format.fprintf f "%d: Exact (%s)@;" eq (B.pp t)
+ Format.fprintf f "%d: Exact (" eq;
+ pp_foterm f t;
+ Format.fprintf f ")@;";
| Terms.Step (rule,eq1,eq2,dir,pos,subst) ->
Format.fprintf f "%d: %s("
eq (string_of_rule rule);
;;
let string_of_comparison = function
- | Terms.Lt -> "<"
- | Terms.Gt -> ">"
- | Terms.Eq -> "="
- | Terms.Incomparable -> "I"
+ | Terms.Lt -> "=<="
+ | Terms.Gt -> "=>="
+ | Terms.Eq -> "==="
+ | Terms.Incomparable -> "=?="
let pp_unit_clause ~formatter:f c =
- let (id, l, vars, _) = c in
+ let (id, l, vars, proof) = c in
Format.fprintf f "Id : %d, " id ;
match l with
| Terms.Predicate t ->
pp_foterm f ty;
Format.fprintf f "}: ";
pp_foterm f lhs;
- Format.fprintf f " =(%s) " (string_of_comparison comp);
+ Format.fprintf f " %s " (string_of_comparison comp);
pp_foterm f rhs;
- Format.fprintf f " [%s]"
- (String.concat ", " (List.map string_of_int vars))
+ Format.fprintf f " [%s] by %s"
+ (String.concat ", " (List.map string_of_int vars))
+ (match proof with
+ | Terms.Exact _ -> "axiom"
+ | Terms.Step (rule, id1, id2, _, p, _) ->
+ Printf.sprintf "%s %d with %d at %s"
+ (string_of_rule rule)
+ id1 id2 (String.concat
+ "," (List.map string_of_int p)))
+;;
+
+let pp_bag ~formatter:f bag =
+ Format.fprintf f "@[<v>";
+ Terms.M.iter
+ (fun _ c -> pp_unit_clause ~formatter:f c;Format.fprintf f "@;") bag;
+ Format.fprintf f "@]"
;;
(* String buffer implementation *)
Buffer.contents buff
;;
+let pp_bag =
+ on_buffer pp_bag
+;;
+
let pp_foterm =
on_buffer pp_foterm
;;