eq (string_of_rule rule);
Format.fprintf f "|%d with %d dir %s))" eq1 eq2
(string_of_direction dir);
- let (_, _, _, proof1),_,_ = Terms.get_from_bag eq1 bag in
- let (_, _, _, proof2),_,_ = Terms.get_from_bag eq2 bag in
+ let (_, _, _, _, proof1),_,_ = Terms.get_from_bag eq1 bag in
+ let (_, _, _, _, proof2),_,_ = Terms.get_from_bag eq2 bag in
Format.fprintf f "@[<v 2>";
aux eq1 proof1;
aux eq2 proof2;
| Terms.Incomparable -> "=?="
| Terms.Invertible -> "=<->="
+let pp_literal ~formatter:f l =
+ match l with
+ | Terms.Predicate t,sel ->
+ Format.fprintf f "@[<hv>{";
+ if sel then Format.fprintf f "*";
+ pp_foterm f t;
+ if sel then Format.fprintf f "*";
+ Format.fprintf f "}@;"
+ | Terms.Equation (lhs, rhs, ty, comp),sel ->
+ Format.fprintf f "@[<hv>{";
+ if sel then Format.fprintf f "*";
+ pp_foterm f ty;
+ Format.fprintf f "}:@;@[<hv>";
+ pp_foterm f lhs;
+ Format.fprintf f "@;%s@;" (string_of_comparison comp);
+ pp_foterm f rhs;
+ if sel then Format.fprintf f "*";
+ Format.fprintf f "@]@;"
+;;
+
let pp_unit_clause ~formatter:f c =
let (id, l, vars, proof) = c in
Format.fprintf f "Id : %3d, " id ;
Format.fprintf f "%s %d with %d at %s"
(string_of_rule rule) id1 id2 (String.concat
"," (List.map string_of_int p)));
- Format.fprintf f "@]"
+ Format.fprintf f "@]"
+;;
+
+let pp_clause ~formatter:f c =
+ let (id, nlit, plit, vars, proof) = c in
+ Format.fprintf f "Id : %3d, " id ;
+ let pr_literals l =
+ if l <> [] then begin
+ pp_literal f (List.hd l);
+ List.iter (fun lit -> Format.fprintf f "\\/"; pp_literal f lit) (List.tl l);
+ end
+ in
+ pr_literals nlit;
+ Format.fprintf f " -> ";
+ pr_literals plit;
+ Format.fprintf f "[%s] by " (String.concat ", " (List.map string_of_int vars));
+ match proof with
+ | Terms.Exact t -> pp_foterm f t
+ | Terms.Step (rule, id1, id2, _, p, _) ->
+ Format.fprintf f "%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,d,_) -> pp_unit_clause ~formatter:f c;
+ (fun _ (c,d,_) -> pp_clause ~formatter:f c;
if d then Format.fprintf f " (discarded)@;"
else Format.fprintf f "@;") bag;
Format.fprintf f "@]"
on_buffer ?margin pp_unit_clause x
;;
+let pp_clause ?margin x =
+ on_buffer ?margin pp_clause x
+;;
+
end