]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/ng_paramodulation/pp.ml
New age selection
[helm.git] / helm / software / components / ng_paramodulation / pp.ml
index 609ca47a7b1a5cce9eff53df81efc39ec71de449..625de5c31994b08f8b6fc0c08a85c5b1c620584a 100644 (file)
@@ -36,9 +36,8 @@ let pp_foterm ~formatter:f t =
 ;;
 
 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
@@ -48,12 +47,14 @@ let string_of_direction = function
 ;;
 
 let pp_substitution ~formatter:f subst =
-     (List.iter
-       (fun (i, t) ->
-          (Format.fprintf f "?%d -> " i;
-          pp_foterm f t)
-       )
-       subst)
+  Format.fprintf f "@[<v 2>";
+  List.iter
+    (fun (i, t) ->
+       (Format.fprintf f "?%d -> " i;
+       pp_foterm f t;
+       Format.fprintf f "@;"))
+    subst;
+  Format.fprintf f "@]";
 ;;
 
 let pp_proof bag ~formatter:f p =
@@ -67,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;
@@ -80,37 +81,68 @@ let pp_proof bag ~formatter:f p =
 ;;
 
 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
-    Format.fprintf f "Id : %d, " id ;
+  let (id, l, vars, proof) = c in
+    Format.fprintf f "Id : %3d, " id ;
     match l with
       | Terms.Predicate t ->
-         pp_foterm f t
+         Format.fprintf f "@[<hv>{";
+         pp_foterm f t;
+          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)));
+          Format.fprintf f "@]"
       | Terms.Equation (lhs, rhs, ty, comp) ->
-         Format.fprintf f "{";
+         Format.fprintf f "@[<hv>{";
          pp_foterm f ty;
-         Format.fprintf f "}: ";
+          Format.fprintf f "}:@;@[<hv>";
          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 "
+            (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)));
+          Format.fprintf f "@]"
+;;
+
+let pp_bag ~formatter:f (_,bag) = 
+  Format.fprintf f "@[<v>";
+  Terms.M.iter 
+  (fun _ (c,d,_) -> pp_unit_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
 ;;
 
+let pp_bag =
+  on_buffer pp_bag
+;;
+
 let pp_foterm =
  on_buffer pp_foterm
 ;;
@@ -123,8 +155,8 @@ 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
 ;;
 
 end