diff options
| -rw-r--r-- | pretyping/unification.ml | 2 | ||||
| -rw-r--r-- | tactics/rewrite.ml4 | 9 |
2 files changed, 8 insertions, 3 deletions
diff --git a/pretyping/unification.ml b/pretyping/unification.ml index e037ab6a9a..5dd7942437 100644 --- a/pretyping/unification.ml +++ b/pretyping/unification.ml @@ -816,7 +816,7 @@ let w_coerce env evd mv c = let unify_to_type env sigma flags c status u = let c = refresh_universes c in - let t = get_type_of env sigma c in + let t = get_type_of env sigma (nf_meta sigma c) in let t = nf_betaiota sigma (nf_meta sigma t) in unify_0 env sigma CUMUL flags t u diff --git a/tactics/rewrite.ml4 b/tactics/rewrite.ml4 index 580f8c8bea..e2dff62f88 100644 --- a/tactics/rewrite.ml4 +++ b/tactics/rewrite.ml4 @@ -378,6 +378,9 @@ let extend_evd sigma ext sigma' = Evd.add acc i (Evarutil.nf_evar_info sigma' (Evd.find sigma' i))) ext sigma +let shrink_evd sigma ext = + Int.Set.fold (fun i acc -> Evd.remove acc i) ext sigma + let no_constraints cstrs = fun ev _ -> not (Int.Set.mem ev cstrs) @@ -413,8 +416,10 @@ let unify_eqn env (sigma, cstrs) hypinfo by t = (if occur_meta_or_existential prf then (hypinfo := refresh_hypinfo env env'.evd !hypinfo; env'.evd, prf, c1, c2, car, rel) - else (** Evars have been solved, we can go back to the initial evd *) - sigma, prf, c1, c2, car, rel) + else (** Evars have been solved, we can go back to the initial evd, + but keep the potential refinement of existing evars. *) + let evd' = shrink_evd env'.evd ext in + evd', prf, c1, c2, car, rel) else raise Reduction.NotConvertible in let res = |
