diff options
| author | msozeau | 2013-06-19 11:49:49 +0000 |
|---|---|---|
| committer | msozeau | 2013-06-19 11:49:49 +0000 |
| commit | d3762a646a1ed6cb4ddef47453944ba7e9caa8bd (patch) | |
| tree | 812d3d3697a3e8bc87e5a3387117deef6599f0d1 | |
| parent | 4b2963052ac92e67f08651d8f01e562007c07a34 (diff) | |
- Keep the refinement of existing evars comming from unification with a rewrite lemma.
- Do an nf_meta before get_type_of in unify_to_type to avoid a possible NotAnArity exception,
raised by type_of_*_knowing_parameters.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@16592 85f007b7-540e-0410-9357-904b9bb8a0f7
| -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 = |
