]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/ng_paramodulation/pp.ml
Fixed pretty printer and debug printings
[helm.git] / helm / software / components / ng_paramodulation / pp.ml
index e9628220d501e6d30ef9c69d82d5aec3fd43ffb3..d93fade272e9479be851a5dbb33853f6d26ecf8e 100644 (file)
@@ -68,8 +68,8 @@ let pp_proof bag ~formatter:f p =
           eq (string_of_rule rule);
        Format.fprintf f "|%d with %d dir %s))" eq1 eq2
          (string_of_direction dir);
-       let (_, _, _, proof1),_ = Terms.M.find eq1 bag in
-       let (_, _, _, proof2),_ = Terms.M.find 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;
@@ -85,6 +85,23 @@ let string_of_comparison = function
   | Terms.Gt -> "=>="
   | Terms.Eq -> "==="
   | Terms.Incomparable -> "=?="
+  | Terms.Invertible -> "=<->="
+
+let pp_literal ~formatter:f l =
+    match fst l with
+      | Terms.Predicate t ->
+         Format.fprintf f "@[<hv>{";
+         pp_foterm f t;
+          Format.fprintf f "}@;"
+      | Terms.Equation (lhs, rhs, ty, comp) ->
+         Format.fprintf f "@[<hv>{";
+         pp_foterm f ty;
+          Format.fprintf f "}:@;@[<hv>";
+         pp_foterm f lhs;
+          Format.fprintf f "@;%s@;" (string_of_comparison comp);
+         pp_foterm f rhs;
+          Format.fprintf f "@]@;"
+;;
 
 let pp_unit_clause ~formatter:f c =
   let (id, l, vars, proof) = c in
@@ -117,20 +134,44 @@ let pp_unit_clause ~formatter:f c =
                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_bag ~formatter:f bag = 
+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,_) -> pp_unit_clause ~formatter:f c;Format.fprintf f "@;") bag;
+  (fun _ (c,d,_) -> pp_clause ~formatter:f c;
+     if d then Format.fprintf f " (discarded)@;"
+     else Format.fprintf f "@;") bag;
   Format.fprintf f "@]"
 ;;
 
 (* String buffer implementation *)
-let on_buffer f t = 
+let on_buffer ?(margin=80) f t = 
   let buff = Buffer.create 100 in
   let formatter = Format.formatter_of_buffer buff in
+  Format.pp_set_margin formatter margin;
   f ~formatter:formatter t;
   Format.fprintf formatter "@?";
   Buffer.contents buff
@@ -152,8 +193,12 @@ let pp_proof bag =
   on_buffer (pp_proof bag)
 ;;
 
-let pp_unit_clause =
-  on_buffer pp_unit_clause
+let pp_unit_clause ?margin x=
+  on_buffer ?margin pp_unit_clause x
+;;
+
+let pp_clause ?margin x =
+  on_buffer ?margin pp_clause x
 ;;
 
 end