]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/ng_paramodulation/paramod.ml
Various architectural changes
[helm.git] / helm / software / components / ng_paramodulation / paramod.ml
index 48811239bf08a30caaca026a3c97929be3e4e590..8024dbba02e085fb8e730ab21a9cfc2ecc6a8368 100644 (file)
@@ -19,27 +19,22 @@ let monster = 100;;
 module type Paramod =
   sig
     type t
-    type input
     type szsontology = 
       | Unsatisfiable of (t Terms.bag * int * int list) list
       | GaveUp 
       | Error of string 
       | Timeout of int * t Terms.bag
-    type bag = t Terms.bag * int
-    val mk_passive : bag -> input * input -> bag * t Terms.clause
-    val mk_goal : bag -> input * input -> bag * t Terms.clause
     val paramod :
       useage:bool ->
       max_steps:int ->
+      print_problem:bool ->
       ?timeout:float ->
-      bag -> 
-      g_passives:t Terms.clause list -> 
-      passives:t Terms.clause list -> szsontology
+      t Terms.foterm * (t Terms.foterm list * t Terms.foterm list) -> 
+      (t Terms.foterm * (t Terms.foterm list * t Terms.foterm list)) list -> szsontology
   end
 
 module Paramod (B : Orderings.Blob) = struct
   type t = B.t
-  type input = B.input
   type szsontology = 
     | Unsatisfiable of (B.t Terms.bag * int * int list) list
     | GaveUp 
@@ -125,16 +120,6 @@ module Paramod (B : Orderings.Blob) = struct
     else WeightPassiveSet.min_elt passives_w
   ;;
 
-  let mk_clause bag maxvar (t,ty) =
-    let (proof,ty) = B.saturate t ty in
-    let c, maxvar = Utils.mk_clause maxvar [] [ty] proof in
-    let bag, c = Terms.add_to_bag c bag in
-    (bag, maxvar), c
-  ;;
-  
-  let mk_passive (bag,maxvar) = mk_clause bag maxvar;;
-  let mk_goal (bag,maxvar) = mk_clause bag maxvar;;
-
   (* TODO : global age over facts and goals (without comparing weights) *)
   let select ~use_age passives g_passives =
     if is_passive_set_empty passives then begin
@@ -347,16 +332,32 @@ module Paramod (B : Orderings.Blob) = struct
         actives passives g_actives g_passives
   ;;
 
-  let paramod ~useage ~max_steps ?timeout (bag,maxvar) ~g_passives ~passives =
+  let paramod ~useage ~max_steps ~print_problem ?timeout goal hypotheses =
     let initial_timestamp = Unix.gettimeofday () in
+    let bag = Terms.empty_bag in
+    let maxvar = 0 in
+    let build_clause (bag,maxvar,l) (t,(nlit,plit)) =
+      let c,maxvar = Utils.mk_clause maxvar nlit plit t in
+      let bag,c = Terms.add_to_bag c bag in
+      (bag,maxvar,c::l)
+    in
+    let bag,maxvar,hypotheses = List.fold_left build_clause (bag,maxvar,[]) hypotheses in
+    let bag,maxvar,goals = build_clause (bag,maxvar,[]) goal in
+    let goal = match goals with | [g] -> g | _ -> assert false in
     let passives =
-      add_passive_clauses ~no_weight:true passive_empty_set passives
+      add_passive_clauses ~no_weight:true passive_empty_set hypotheses
     in
     let g_passives =
-      add_passive_goals ~no_weight:true passive_empty_set g_passives
+      add_passive_goal ~no_weight:true passive_empty_set goal
     in
     let g_actives = [] in
     let actives = [], IDX.DT.empty in
+    if print_problem then begin
+       prerr_endline "Facts:";
+       List.iter (fun x -> prerr_endline (" " ^ Pp.pp_clause x)) hypotheses;
+       prerr_endline "Goal:";
+       prerr_endline (" " ^ Pp.pp_clause goal);
+    end;
     try 
      given_clause ~useage ~noinfer:false
       bag maxvar 0  0 max_steps timeout actives passives g_actives g_passives