X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fcic_unification%2FcoercDb.ml;h=e636f87596a8e9e86729bc2c5e0c99e072151b21;hb=0245778d76e4d7656c1d8a05dc19738f1a953d68;hp=859445f44110fa2879cae2393bb3574216fa6bca;hpb=edad2cd49734428c522afaa01201bb0a49346d42;p=helm.git diff --git a/helm/ocaml/cic_unification/coercDb.ml b/helm/ocaml/cic_unification/coercDb.ml index 859445f44..e636f8759 100644 --- a/helm/ocaml/cic_unification/coercDb.ml +++ b/helm/ocaml/cic_unification/coercDb.ml @@ -23,9 +23,41 @@ * http://helm.cs.unibo.it/ *) +type coerc_carr = Uri of UriManager.uri | Sort of Cic.sort | Term of Cic.term +exception EqCarrNotImplemented of string +exception EqCarrOnNonMetaClosed + let db = ref [] let use_coercions = ref true +let coerc_carr_of_term t = + try + Uri (CicUtil.uri_of_term t) + with Invalid_argument _ -> + match t with + | Cic.Sort s -> Sort s + | t -> Term t +;; + +let eq_carr src tgt = + match src, tgt with + | Uri src, Uri tgt -> UriManager.eq src tgt + | Sort (Cic.Type _), Sort (Cic.Type _) -> true + | Sort src, Sort tgt when src = tgt -> true + | Term t1, Term t2 when + CicUtil.is_meta_closed t1 && CicUtil.is_meta_closed t2 -> + raise + (EqCarrNotImplemented + ("Unsupported carr for coercions: " ^ + CicPp.ppterm t1 ^ " or " ^ CicPp.ppterm t2)) + | _ -> raise EqCarrOnNonMetaClosed + +let name_of_carr = function + | Uri u -> UriManager.name_of_uri u + | Sort s -> CicPp.ppsort s + | Term _ -> assert false + + let to_list () = !db