]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/library/coercDb.ml
new compose tactic, still undocumented.
[helm.git] / helm / software / components / library / coercDb.ml
index ac57aa40a82b3f4fde03e07e588646ab10f40871..2e93efa0eb8e09c43bc47b7946e83069491ac14c 100644 (file)
@@ -82,6 +82,8 @@ let eq_carr src tgt =
       else raise EqCarrOnNonMetaClosed
   | Fun _,Fun _ -> true (* only one Funclass? *)
 (*   | Fun i,Fun j when i=j -> true *)
+  | Term t, _
+  | _, Term t when not (CicUtil.is_meta_closed t) -> raise EqCarrOnNonMetaClosed
   | _, _ -> false
 ;;
 
@@ -116,12 +118,6 @@ let find_coercion f =
     (HExtlib.filter_map (fun (s,t,l) -> if f (s,t) then Some l else None) !db))
 ;;
 
-let is_a_coercion u = 
-  List.exists 
-    (fun (_,_,xl) -> List.exists (fun (x,_) -> UriManager.eq u x) xl) 
-    !db
-;;
-
 let get_carr uri =
   try
     let src, tgt, _ = 
@@ -133,6 +129,28 @@ let get_carr uri =
   with Not_found -> assert false (* uri must be a coercion *)
 ;;
 
+let is_a_coercion u = 
+  List.exists 
+    (fun (_,_,xl) -> List.exists (fun (x,_) -> UriManager.eq u x) xl) 
+    !db
+;;
+
+let is_a_coercion' t = 
+  try
+    let uri = CicUtil.uri_of_term t in
+     is_a_coercion uri
+  with Invalid_argument _ -> false
+;;
+
+let is_a_coercion_to_funclass t =
+  try
+    let uri = CicUtil.uri_of_term t in
+    match snd (get_carr uri) with
+    | Fun i -> Some i
+    | _ -> None
+  with Invalid_argument _ -> None
+  
+
 let term_of_carr = function
   | Uri u -> CicUtil.term_of_uri u
   | Sort s -> Cic.Sort s