(try
let (_, t') = CicMetaSubst.lookup_subst i subst in
aux metasenv subst n context (CicSubstitution.lift_meta l t')
- with
- CicMetaSubst.SubstNotFound _ -> subst,metasenv,t)
+ with CicMetaSubst.SubstNotFound _ ->
+ let (subst, metasenv, context, local_context) =
+ List.fold_left
+ (fun (subst, metasenv, context, local_context) t ->
+ match t with
+ | None -> (subst, metasenv, context, None :: local_context)
+ | Some t ->
+ let (subst, metasenv, t) =
+ aux metasenv subst n context t
+ in
+ (subst, metasenv, context, Some t :: local_context))
+ (subst, metasenv, context, []) l
+ in
+ (subst, metasenv, C.Meta (i, local_context)))
| C.Sort _
| C.Implicit _ as t -> subst,metasenv,t
| C.Cast (te,ty) ->
fo_unif_subst test_equality_only subst context metasenv h1 h2
| ([h],l)
| (l,[h]) ->
- fo_unif_subst
- test_equality_only subst context metasenv h (C.Appl (List.rev l))
+ fo_unif_subst test_equality_only subst context metasenv
+ h (C.Appl (List.rev l))
| ((h1::l1),(h2::l2)) ->
let subst', metasenv' =
fo_unif_subst test_equality_only subst context metasenv h1 h2