From 0367df1ed02906d86b10e78a73e48ccd84bbd9a7 Mon Sep 17 00:00:00 2001 From: herbelin Date: Thu, 10 Mar 2005 23:18:47 +0000 Subject: 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 --- pretyping/pretyping.ml | 8 +++++--- pretyping/reductionops.ml | 3 ++- 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 -- cgit v1.2.3