]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/ng_paramodulation/nCicBlob.ml
Added an implicit parameter to branch_tac to allow branching on a
[helm.git] / helm / software / components / ng_paramodulation / nCicBlob.ml
index 39bc9523a12791f82b85c121ec8dd3aea5f0db51..c1c7a9071fdee01ed9ad69959782f7e73886ad25 100644 (file)
@@ -18,6 +18,18 @@ let default_eqP() =
   let uri = NUri.uri_of_string "cic:/matita/ng/Plogic/equality/eq.ind" in
   let ref = NReference.reference_of_spec uri (NReference.Ind(true,0,2)) in
     NCic.Const ref
+;;
+
+let equivalence_relation =
+  let uri = NUri.uri_of_string "cic:/matita/ng/properties/relations/eq_rel.con"
+  in
+  let ref = NReference.reference_of_spec uri (NReference.Fix(0,1,2)) 
+  in NCic.Const ref
+
+let setoid_eq =
+  let uri = NUri.uri_of_string "cic:/matita/ng/sets/setoids/eq.con" in
+  let ref = NReference.reference_of_spec uri (NReference.Fix(0,0,2)) 
+  in NCic.Const ref
 
 let set_default_eqP() = eqPref := default_eqP
 
@@ -48,11 +60,24 @@ with type t = NCic.term and type input = NCic.term = struct
   let eq x y = x = y;;
     (* NCicReduction.alpha_eq C.metasenv C.subst C.context x y;; *)
 
+  let height_of_ref = function
+    | NReference.Def h -> h
+    | NReference.Fix(_,_,h) -> h
+    | _ -> 0
+
+  let compare_refs (NReference.Ref (u1,r1)) (NReference.Ref (u2,r2)) =
+    let x = height_of_ref r2 - height_of_ref r1 in
+      if x = 0 then 
+       Hashtbl.hash (NUri.string_of_uri u1,r1) - 
+         Hashtbl.hash (NUri.string_of_uri u2,r2)
+      else x 
+
   let rec compare x y = 
     match x,y with
     | NCic.Rel i, NCic.Rel j -> j-i
     | NCic.Meta (i,_), NCic.Meta (j,_) -> i-j
-    | NCic.Const r1, NCic.Const r2 -> NReference.compare r1 r2
+    | NCic.Const r1, NCic.Const r2 -> compare_refs r1 r2
+    (*NReference.compare r1 r2*)
     | 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
@@ -71,6 +96,18 @@ with type t = NCic.term and type input = NCic.term = struct
     else compare x y
   ;;
 
+  let eqP = (!eqPref)()
+  ;;
+
+  let is_eq = function
+    | Terms.Node [ Terms.Leaf eqt ; ty; l; r ] when eq eqP eqt ->
+        Some (ty,l,r) 
+(*
+    | Terms.Node [ Terms.Leaf eqt ; _; Terms.Node [Terms.Leaf eqt2 ; ty]; l; r]
+       when eq equivalence_relation eqt && eq setoid_eq eqt2 ->
+        Some (ty,l,r) *)
+    | _ -> None
+
   let pp t = 
     NCicPp.ppterm ~context:C.context ~metasenv:C.metasenv ~subst:C.subst t;;
 
@@ -93,7 +130,7 @@ with type t = NCic.term and type input = NCic.term = struct
 
   let saturate t ty = 
     let sty, _, args = 
-      NCicMetaSubst.saturate ~delta:max_int C.metasenv C.subst C.context
+      NCicMetaSubst.saturate ~delta:0 C.metasenv C.subst C.context
         ty 0
     in
     let proof = 
@@ -104,7 +141,4 @@ with type t = NCic.term and type input = NCic.term = struct
     proof, sty
   ;;
   
-  let eqP = (!eqPref)()
-  ;;
-
  end