]> matita.cs.unibo.it Git - helm.git/commitdiff
the prover is almost OK, types in fuctors a bit extended to
authorEnrico Tassi <enrico.tassi@inria.fr>
Thu, 25 Jun 2009 16:47:21 +0000 (16:47 +0000)
committerEnrico Tassi <enrico.tassi@inria.fr>
Thu, 25 Jun 2009 16:47:21 +0000 (16:47 +0000)
ease their instantiation

helm/software/components/binaries/matitaprover/matitaprover.ml
helm/software/components/ng_paramodulation/cicBlob.ml
helm/software/components/ng_paramodulation/nCicBlob.ml
helm/software/components/ng_paramodulation/nCicBlob.mli
helm/software/components/ng_paramodulation/nCicParamod.ml
helm/software/components/ng_paramodulation/paramod.ml
helm/software/components/ng_paramodulation/paramod.mli
helm/software/components/ng_paramodulation/pp.ml
helm/software/components/ng_paramodulation/superposition.ml
helm/software/components/ng_paramodulation/terms.ml
helm/software/components/ng_paramodulation/terms.mli

index 5a438c7b6fa700d9a139669b32765db58530bb60..b80091e810701b15ad5cb0b0b300e8772e3143a3 100644 (file)
@@ -1,3 +1,22 @@
+module OT = struct type t = string  let compare = Pervasives.compare end 
+module HC = Map.Make(OT)
+
+type leaf = int * string
+
+let cache = ref HC.empty 
+let num = ref 100
+
+let hash s = 
+  try HC.find s !cache
+  with Not_found ->
+          cache := HC.add s (!num,s) !cache;
+          decr num;
+          HC.find s !cache
+;;
+
+hash "==";;
+hash "_";;
+
 let main () =
   let problem_file = ref "no-file-given" in
   let tptppath = ref "./" in
@@ -6,40 +25,34 @@ let main () =
    ] (fun x -> problem_file := x) "matitaprover [problemfile]";
   let hypotheses, goals = Tptp_cnf.parse ~tptppath:!tptppath !problem_file in
   let goal = match goals with [x] -> x | _ -> assert false in
-  let module B : Terms.Blob with type t = Ast.term = struct
-        type t = Ast.term
-        let eq a b = a = b
-        let compare = Pervasives.compare
-        let eqP = Ast.Constant "=="
-        let pp = function
-          | Ast.Constant x -> x
-          | Ast.Variable _ -> assert false
-          | Ast.Function _ -> assert false
-        ;;
-        let embed x = 
-          let rec aux m = function
+  let module B : Terms.Blob with type t = leaf and type input = Ast.term = struct
+        type t = leaf
+        let eq a b = a == b
+        let compare (a,_) (b,_) = Pervasives.compare a b
+        let eqP = hash "=="
+        let pp (_,a) =  a 
+        type input = Ast.term
+        let rec embed m = function
             | Ast.Variable name ->
                 (try m, List.assoc name m
                  with Not_found -> 
-                    let t = Terms.Var (List.length m) in
+                    let t = Terms.Var ~-(List.length m) in
                     (name,t)::m, t)
-            | Ast.Constant _ as t -> m, Terms.Leaf t
+            | Ast.Constant name -> m, Terms.Leaf (hash name)
             | Ast.Function (name,args) -> 
                 let m, args = 
                   HExtlib.list_mapi_acc 
-                    (fun x _ m -> aux m x) m args
+                    (fun x _ m -> embed m x) m args
                 in
-                m, Terms.Node (Terms.Leaf (Ast.Constant name):: args) 
-          in
-            aux [] x
+                m, Terms.Node (Terms.Leaf (hash name):: args) 
         ;;
         let saturate bo ty = 
-          let vars, ty = embed ty in
-          let _, bo = embed bo in
+          let vars, ty = embed [] ty in
+          let _, bo = embed vars bo in
           let bo = Terms.Node (bo :: List.map snd (List.rev vars)) in
           bo, ty
         ;;
-        let embed t = snd(embed t);;
+        let embed t = snd(embed [] t);;
 
   end
   in
@@ -50,10 +63,12 @@ let main () =
   let bag, passives = 
     HExtlib.list_mapi_acc (fun x _ b -> P.mk_passive b x) bag hypotheses 
   in
+  prerr_endline "Order";
+  HC.iter (fun _ (w,x) -> prerr_endline (" " ^ x ^ " is " ^ string_of_int w)) !cache;
   prerr_endline "Facts";
-  prerr_endline (String.concat "\n" (List.map Pp.pp_unit_clause passives));
+  List.iter (fun x -> prerr_endline (" " ^ Pp.pp_unit_clause x)) passives;
   prerr_endline "Goal";
-  prerr_endline (Pp.pp_unit_clause g_passives);
+  prerr_endline (" " ^ Pp.pp_unit_clause g_passives);
   ignore(P.paramod bag ~g_passives:[g_passives] ~passives);
   ()
 ;;
index 5c672cddfd0e9614dd905242b991a5aa7e5da6fe..fd6947e9c1521a79371503f08dd165cfa88171bd 100644 (file)
@@ -32,6 +32,8 @@ module CicBlob(C : CicContext) : Terms.Blob with type t = Cic.term = struct
   let names = List.map (function Some (x,_) -> Some x | _ -> None) C.context;;
   let pp t = CicPp.pp t names;;
 
+  type input = t
+
   let embed t = assert false;;
 
   let eqP = assert false;;
index aa2f4f9397cc31ee4a4066fe2011e526b84157b7..2ed7eef23b005efff510e2daa6a9619f9ea67d84 100644 (file)
@@ -18,7 +18,8 @@ module type NCicContext =
     val context : NCic.context
   end
 
-module NCicBlob(C : NCicContext) : Terms.Blob with type t = NCic.term = struct
+module NCicBlob(C : NCicContext) : Terms.Blob 
+with type t = NCic.term and type input = NCic.term = struct
 
   type t = NCic.term
 
@@ -47,6 +48,8 @@ module NCicBlob(C : NCicContext) : Terms.Blob with type t = NCic.term = struct
   let pp t = 
     NCicPp.ppterm ~context:C.context ~metasenv:C.metasenv ~subst:C.subst t;;
 
+  type input = NCic.term
+
   let rec embed = function
     | NCic.Meta (i,_) -> Terms.Var i, [i]
     | NCic.Appl l ->
index 5fafaf54f386510e0f5032e4f0170be1a1e0b502..16a8c33a2b06b64e657f1180cfd084d81298e4a4 100644 (file)
@@ -18,5 +18,6 @@ module type NCicContext =
     val context : NCic.context
   end
 
-module NCicBlob(C : NCicContext) : Terms.Blob with type t = NCic.term
+module NCicBlob(C : NCicContext) : Terms.Blob 
+with type t = NCic.term and type input = NCic.term
 
index 5fe0a34c1c074424ad958dbc1ce7498805df790d..dc346d7c457ba5dab5855e174e674c6028fc1f59 100644 (file)
@@ -19,7 +19,10 @@ let nparamod rdb metasenv subst context t table =
       let context = context
     end
   in
-  let module B = NCicBlob.NCicBlob(C) in
+  let module B : Terms.Blob 
+      with type t = NCic.term and type input = NCic.term 
+    = NCicBlob.NCicBlob(C) 
+  in
   let module P = Paramod.Paramod(B) in
   let bag, maxvar = Terms.M.empty, 0 in
   let (bag,maxvar), passives = 
index 47975fb3b7b7aca845e1121d6ef1444f08f70f71..d63d1449a2236d51f531b9c226e5d6818ebcf692 100644 (file)
@@ -14,7 +14,7 @@
  (*let debug s = prerr_endline s ;;*)
  let debug _ = ();;
     
-let max_nb_iter = 999999999 ;;
+let max_nb_iter = max_int ;;
 let amount_of_time = 300.0 ;;
 
 module Paramod (B : Terms.Blob) = struct
index 2664494993095eac6ea96f1464638ffd51930a7a..9a2d397ca471bd0bc418f441638c2f4da9ef467b 100644 (file)
@@ -14,8 +14,8 @@
 module Paramod ( B : Terms.Blob ) : 
   sig
     type bag = B.t Terms.bag * int
-    val mk_passive : bag -> B.t * B.t -> bag * B.t Terms.unit_clause
-    val mk_goal : bag -> B.t * B.t -> bag * B.t Terms.unit_clause
+    val mk_passive : bag -> B.input * B.input -> bag * B.t Terms.unit_clause
+    val mk_goal : bag -> B.input * B.input -> bag * B.t Terms.unit_clause
     val paramod : 
       bag -> g_passives:B.t Terms.unit_clause list -> 
       passives:B.t Terms.unit_clause list ->
index 8a74fa762301589b5b79611575b29b1c37bd271b..e9628220d501e6d30ef9c69d82d5aec3fd43ffb3 100644 (file)
@@ -123,7 +123,7 @@ let pp_unit_clause ~formatter:f c =
 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,_) -> pp_unit_clause ~formatter:f c;Format.fprintf f "@;") bag;
   Format.fprintf f "@]"
 ;;
 
index e931423b96b9d011965f13e8b1487e54c9c8c52b..3957e925e469d895f08ba866517e8a89497e54a3 100644 (file)
@@ -178,11 +178,12 @@ module Superposition (B : Terms.Blob) =
     ;;
 
     (* move away *)
-    let is_identity_clause = function
+    let is_identity_clause ~unify = function
       | _, Terms.Equation (_,_,_,Terms.Eq), _, _ -> true
-      | _, Terms.Equation (l,r,_,_), vl, proof ->
+      | _, Terms.Equation (l,r,_,_), vl, proof when unify ->
          (try ignore(Unif.unification vl [] l r); true
          with FoUnif.UnificationFailure _ -> false)
+      | _, Terms.Equation (_,_,_,_), _, _ -> false
       | _, Terms.Predicate _, _, _ -> assert false       
     ;;
 
@@ -404,7 +405,7 @@ module Superposition (B : Terms.Blob) =
     (* this is like simplify but raises Success *)
     let simplify_goal maxvar table bag g_actives clause = 
       let bag, clause = demodulate bag clause table in
-      if (is_identity_clause clause)
+      if (is_identity_clause ~unify:true clause)
       then raise (Success (bag, maxvar, clause))
 (*
       else   
index f2a3de0209e190e349a0435604ea0d9cc91d55ce..1d1465f9e6d7cfe5525792835ddafed373f44706 100644 (file)
@@ -65,7 +65,8 @@ module type Blob =
     val compare : t -> t -> int
     val eqP : t
     val pp : t -> string
-    val embed : t -> t foterm
-    val saturate : t -> t -> t foterm * t foterm
+    type input
+    val embed : input -> t foterm
+    val saturate : input -> input -> t foterm * t foterm
   end
 
index 7c60f056276f1b2f65175c9b0f974ed79692f305..e0576d1f3e95dea87cd8d3955b125ac41e4f9588 100644 (file)
@@ -71,9 +71,10 @@ module type Blob =
      * *)
     val pp : t -> string
 
-    val embed : t -> t foterm 
+    type input
+    val embed : input -> t foterm
     (* saturate [proof] [type] -> [proof] * [type] *)
-    val saturate : t -> t -> t foterm * t foterm
+    val saturate : input -> input -> t foterm * t foterm
 
   end