if t1 = t2 then
subst, metasenv,ugraph
else
- raise (UnificationFailure (lazy "6.2"))
- (* (sprintf
+ raise (UnificationFailure (lazy
+ (sprintf
"Can't unify %s with %s because they are not convertible"
(CicMetaSubst.ppterm subst t1)
- (CicMetaSubst.ppterm subst t2))) *)
+ (CicMetaSubst.ppterm subst t2))))
| (C.Appl (C.Meta(i,l)::args),t2) when not(exists_a_meta args) ->
let subst,metasenv,beta_expanded,ugraph1 =
beta_expand_many
* (source, list of coercions to follow, target)
*)
let get_closure_coercions src tgt uri coercions =
+ let eq_carr s t =
+ try
+ CoercDb.eq_carr s t
+ with
+ | CoercDb.EqCarrNotImplemented _ | CoercDb.EqCarrOnNonMetaClosed -> false
+ in
match src,tgt with
| CoercDb.Uri _, CoercDb.Uri _ ->
let c_from_tgt =
- List.filter (fun (f,_,_) -> CoercDb.eq_carr f tgt) coercions
+ List.filter (fun (f,_,_) -> eq_carr f tgt) coercions
in
let c_to_src =
- List.filter (fun (_,t,_) -> CoercDb.eq_carr t src) coercions
+ List.filter (fun (_,t,_) -> eq_carr t src) coercions
in
(List.map (fun (_,t,u) -> src,[uri; u],t) c_from_tgt) @
(List.map (fun (s,_,u) -> s,[u; uri],tgt) c_to_src) @