]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/ng_paramodulation/nCicBlob.ml
Various architectural changes
[helm.git] / helm / software / components / ng_paramodulation / nCicBlob.ml
index 7cd4e5762f7d57c61c9caf179b9af64865ae4a1f..3383e01f2b383e3ff1e7032892f55a057641fcce 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 = struct
 
   type t = NCic.term
 
@@ -27,42 +28,26 @@ module NCicBlob(C : NCicContext) : Terms.Blob with type t = NCic.term = struct
   let rec compare x y = 
     match x,y with
     | NCic.Rel i, NCic.Rel j -> i-j
+    | NCic.Meta (i,_), NCic.Meta (j,_) -> i-j
     | NCic.Const r1, NCic.Const r2 -> NReference.compare r1 r2
-    | NCic.Appl l1, NCic.Appl l2 -> assert false (* TODO *)
+    | NCic.Appl l1, NCic.Appl l2 -> FoUtils.lexicograph compare l1 l2
+    | NCic.Rel _, ( NCic.Meta _ | NCic.Const _ | NCic.Appl _ ) -> ~-1
+    | ( NCic.Meta _ | NCic.Const _ | NCic.Appl _ ), NCic.Rel _ -> 1
+    | NCic.Const _, ( NCic.Meta _ | NCic.Appl _ ) -> ~-1
+    | ( NCic.Meta _ | NCic.Appl _ ), NCic.Const _ -> 1
+    | NCic.Appl _, NCic.Meta _ -> ~-1
+    | NCic.Meta _, NCic.Appl _ -> 1
     | _ -> assert false
   ;;
+  
+  let compare x y = 
+    if NCicReduction.alpha_eq C.metasenv C.subst C.context x y then 0 
+    else compare x y
+  ;;
 
   let pp t = 
     NCicPp.ppterm ~context:C.context ~metasenv:C.metasenv ~subst:C.subst t;;
 
-  let rec embed = function
-    | NCic.Meta (i,_) -> Terms.Var i, [i]
-    | NCic.Appl l ->
-       let rec aux acc l = function
-         |[] -> acc@l
-         |hd::tl -> if List.mem hd l then aux acc l tl else aux (hd::acc) l tl
-       in
-       let res,vars = List.fold_left
-         (fun (r,v) t -> let r1,v1 = embed t in (r1::r),aux [] v v1) ([],[]) l
-       in (Terms.Node (List.rev res)), vars
-    | t -> Terms.Leaf t, []
-  ;;
-
-  let embed t = fst (embed t) ;;
-
-  let saturate t ty = 
-    let sty, _, args = 
-      NCicMetaSubst.saturate ~delta:max_int C.metasenv C.subst C.context
-        ty 0
-    in
-    let proof = 
-      if args = [] then Terms.Leaf t 
-      else Terms.Node (Terms.Leaf t :: List.map embed args)
-    in
-    let sty = embed sty in
-    proof, sty
-  ;;
-
   let eqP = 
     let r = 
       OCic2NCic.reference_of_oxuri 
@@ -72,5 +57,4 @@ module NCicBlob(C : NCicContext) : Terms.Blob with type t = NCic.term = struct
     NCic.Const r
   ;;
 
-
  end