aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorherbelin2005-03-10 23:18:47 +0000
committerherbelin2005-03-10 23:18:47 +0000
commit0367df1ed02906d86b10e78a73e48ccd84bbd9a7 (patch)
tree38ed1bd26123e0df7ce892528b4eb8bd5817a1e9
parent8a2c1dba09e78129b279e0fe9e862f8cecbcf2aa (diff)
A défaut de substitution paresseuse ou explicite, ajout d'une substitution optimisée pour le prétypage qui normalise les evars à la volée (cf bug #932)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@6820 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--pretyping/pretyping.ml8
-rw-r--r--pretyping/reductionops.ml3
2 files changed, 7 insertions, 4 deletions
diff --git a/pretyping/pretyping.ml b/pretyping/pretyping.ml
index 55fad22826..a56280ba83 100644
--- a/pretyping/pretyping.ml
+++ b/pretyping/pretyping.ml
@@ -349,7 +349,8 @@ let rec pretype tycon env isevars lvar = function
let hj = pretype (mk_tycon c1) env isevars lvar c in
let newresj =
{ uj_val = applist (j_val resj, [j_val hj]);
- uj_type = subst1 hj.uj_val c2 } in
+ uj_type = subst1_nf_evar (evars_of !isevars)
+ hj.uj_val c2 } in
apply_rec env (n+1) newresj rest
| _ ->
@@ -363,7 +364,8 @@ let rec pretype tycon env isevars lvar = function
let apply_one_arg (floc,tycon,jl) c =
let (dom,rng) = split_tycon floc env isevars tycon in
let cj = pretype dom env isevars lvar c in
- let rng_tycon = option_app (subst1 cj.uj_val) rng in
+ let rng_tycon =
+ option_app (subst1_nf_evar (evars_of !isevars) cj.uj_val) rng in
let argloc = loc_of_rawconstr c in
(join_loc floc argloc,rng_tycon,(argloc,cj)::jl) in
let _,_,jl =
@@ -398,7 +400,7 @@ let rec pretype tycon env isevars lvar = function
let tycon = option_app (lift 1) tycon in
let j' = pretype tycon (push_rel var env) isevars lvar c2 in
{ uj_val = mkLetIn (name, j.uj_val, t, j'.uj_val) ;
- uj_type = type_app (subst1 j.uj_val) j'.uj_type }
+ uj_type = subst1_nf_evar (evars_of !isevars) j.uj_val j'.uj_type }
| RLetTuple (loc,nal,(na,po),c,d) ->
let cj = pretype empty_tycon env isevars lvar c in
diff --git a/pretyping/reductionops.ml b/pretyping/reductionops.ml
index f77dfe3c29..6ed5f2468a 100644
--- a/pretyping/reductionops.ml
+++ b/pretyping/reductionops.ml
@@ -441,7 +441,8 @@ let subst1_nf_evar sigma v =
else mkRel (k-1)
| Evar (ev,args as evar) ->
(try substrec depth (Evd.existential_value sigma evar)
- with Not_found -> mkEvar (ev, Array.map (substrec depth) args))
+ with Evd.NotInstantiatedEvar ->
+ mkEvar (ev, Array.map (substrec depth) args))
| _ -> map_constr_with_binders succ substrec depth c
in
substrec 0