let db =
DB.fold (fst (status#coerc_db)) (fun _ v l -> (CoercionSet.elements v)@l) []
in
- try
- Some
- (List.find
- (fun (p,_,_) ->
+ (HExtlib.list_findopt
+ (fun (p,arity,cpos) _ ->
try
let t =
match p,t with
| _,NCic.Appl (he::_) -> he
| _,_ -> t
in
- NCicReduction.alpha_eq metasenv subst context p t
+ let b = NCicReduction.alpha_eq metasenv subst context p t in
+ if not b then None else
+ let ty = NCicTypeChecker.typeof ~metasenv:[] ~subst:[] [] p in
+ let pis =
+ let rec aux = function NCic.Prod (_,_,t) -> 1+aux t | _ -> 0 in
+ aux ty
+ in
+ Some (p,pis - arity - cpos - 1,cpos)
with
- Failure _ -> false (* raised by split_nth *)
+ Failure _ -> None (* raised by split_nth *)
) db)
- with
- Not_found -> None
;;