]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/library/coercDb.ml
added minimal euristic for generic terms carrier comparison
[helm.git] / helm / software / components / library / coercDb.ml
index 7203f3647e6eefb642c5fd93be6ff7d465918aa5..8b7982ea0576645c531fc82e5c599633ffcf39b2 100644 (file)
@@ -32,15 +32,13 @@ exception EqCarrOnNonMetaClosed
 let db = ref []
 
 let coerc_carr_of_term t =
-  try
-    Uri (CicUtil.uri_of_term t)
-  with Invalid_argument _ ->
-    match t with
-    | Cic.Sort s -> Sort s
-    | Cic.Appl ((Cic.Const (uri, _))::_) 
-    | Cic.Appl ((Cic.MutInd (uri, _, _))::_) 
-    | Cic.Appl ((Cic.MutConstruct (uri, _, _, _))::_) -> Uri uri
-    | t -> Term t
+ try
+  match t with
+     Cic.Sort s -> Sort s
+   | Cic.Appl (t::_)
+   | t -> Uri (CicUtil.uri_of_term t)
+ with Invalid_argument _ ->
+  Term t
 ;;
 
 let rec name_of_carr = function
@@ -61,12 +59,14 @@ let eq_carr src tgt =
   | Sort (Cic.Type _), Sort (Cic.Type _) -> true
   | Sort src, Sort tgt when src = tgt -> true
   | Term t1, Term t2 ->
-    if CicUtil.is_meta_closed t1 && CicUtil.is_meta_closed t2 then
-      raise 
-        (EqCarrNotImplemented 
+      if t1 = t2 then true
+      else
+        if CicUtil.is_meta_closed t1 && CicUtil.is_meta_closed t2 then
+          raise 
+          (EqCarrNotImplemented 
           (lazy ("Unsupported carr for coercions: " ^ 
-            CicPp.ppterm t1 ^ " or " ^ CicPp.ppterm t2)))
-    else raise EqCarrOnNonMetaClosed
+          CicPp.ppterm t1 ^ " or " ^ CicPp.ppterm t2)))
+      else raise EqCarrOnNonMetaClosed
   | _, _ -> false
 
 let to_list () =