aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormsozeau2013-06-19 11:49:49 +0000
committermsozeau2013-06-19 11:49:49 +0000
commitd3762a646a1ed6cb4ddef47453944ba7e9caa8bd (patch)
tree812d3d3697a3e8bc87e5a3387117deef6599f0d1
parent4b2963052ac92e67f08651d8f01e562007c07a34 (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.ml2
-rw-r--r--tactics/rewrite.ml49
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 =