let debug_print s = if debug then prerr_endline (Lazy.force s) else ()
let saturate_coercion ul metasenv subst context =
- let cl = List.map CicUtil.term_of_uri ul in
+ let cl =
+ List.map (fun u,saturations -> CicUtil.term_of_uri u,saturations) ul in
let funclass_arityl =
- let _,tgtcarl = List.split (List.map CoercDb.get_carr ul) in
+ let _,tgtcarl = List.split (List.map (fun u,_ -> CoercDb.get_carr u) ul) in
List.map (function CoercDb.Fun i -> i | _ -> 0) tgtcarl
in
let freshmeta = CicMkImplicit.new_meta metasenv subst in
List.map2
- (fun arity c ->
+ (fun arity (c,saturations) ->
let ty,_ =
CicTypeChecker.type_of_aux' ~subst metasenv context c
- CicUniv.empty_ugraph in
+ CicUniv.oblivion_ugraph in
let _,metasenv,args,lastmeta =
- TermUtil.saturate_term freshmeta metasenv context ty arity in
+ TermUtil.saturate_term ~delta:false freshmeta metasenv context ty arity in
let irl =
CicMkImplicit.identity_relocation_list_for_metavariable context
in
- metasenv, Cic.Meta (lastmeta-1,irl),
+ metasenv, Cic.Meta (lastmeta - saturations - 1,irl),
match args with
[] -> c
| _ -> Cic.Appl (c::args)
Pp.node (CoercDb.name_of_carr carr)
~attrs:["href", UriManager.string_of_uri uri] fmt in
List.iter
- (fun (src, tgt, cl) ->
+ (fun (src, tgt, ul) ->
let src_name = CoercDb.name_of_carr src in
let tgt_name = CoercDb.name_of_carr tgt in
pp_description src;
pp_description tgt;
List.iter
- (fun c ->
+ (fun (u,saturations) ->
Pp.edge src_name tgt_name
- ~attrs:[ "label", UriManager.name_of_uri c;
- "href", UriManager.string_of_uri c ]
+ ~attrs:[ "label",
+ (UriManager.name_of_uri u ^
+ if saturations = 0 then
+ ""
+ else
+ "(" ^ string_of_int saturations ^ ")");
+ "href", UriManager.string_of_uri u ]
fmt)
- cl)
+ ul)
l;
Pp.trailer fmt;
Buffer.contents buf
| Cic.Appl (he::_) -> CicUtil.uri_of_term he
| _ -> CicUtil.uri_of_term t
in
- match CicEnvironment.get_obj CicUniv.empty_ugraph uri with
+ match CicEnvironment.get_obj CicUniv.oblivion_ugraph uri with
| Cic.Constant (_,_, _, _, attrs),_ ->
List.exists (function `Class (`Coercion _) -> true | _ -> false) attrs
| _ -> false
| _ -> 0
in
let uri = CicUtil.uri_of_term c in
- match fst(CicEnvironment.get_obj CicUniv.empty_ugraph uri) with
+ match fst(CicEnvironment.get_obj CicUniv.oblivion_ugraph uri) with
| Cic.Constant (_, _, ty, _, _) -> count_pi ty
| _ -> assert false
in
(************************* meet calculation stuff ********************)
let eq_uri_opt u1 u2 =
match u1,u2 with
- | Some u1, Some u2 -> UriManager.eq u1 u2
+ | Some (u1,_), Some (u2,_) -> UriManager.eq u1 u2
| None,Some _ | Some _, None -> false
| None, None -> true
;;