aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pretyping/reductionops.ml13
-rw-r--r--pretyping/reductionops.mli2
2 files changed, 15 insertions, 0 deletions
diff --git a/pretyping/reductionops.ml b/pretyping/reductionops.ml
index a7573f5343..f77dfe3c29 100644
--- a/pretyping/reductionops.ml
+++ b/pretyping/reductionops.ml
@@ -433,6 +433,19 @@ let rec whd_evar sigma c =
let nf_evar sigma =
local_strong (whd_evar sigma)
+let subst1_nf_evar sigma v =
+ let rec substrec depth c = match kind_of_term c with
+ | Rel k ->
+ if k <= depth then c
+ else if k = depth+1 then lift depth 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))
+ | _ -> map_constr_with_binders succ substrec depth c
+ in
+ substrec 0
+
(* lazy reduction functions. The infos must be created for each term *)
let clos_norm_flags flgs env sigma t =
norm_val (create_clos_infos flgs env) (inject (nf_evar sigma t))
diff --git a/pretyping/reductionops.mli b/pretyping/reductionops.mli
index 29a28f0f74..f8baac5ea4 100644
--- a/pretyping/reductionops.mli
+++ b/pretyping/reductionops.mli
@@ -120,6 +120,8 @@ val hnf_lam_app : env -> evar_map -> constr -> constr -> constr
val hnf_lam_appvect : env -> evar_map -> constr -> constr array -> constr
val hnf_lam_applist : env -> evar_map -> constr -> constr list -> constr
+val subst1_nf_evar : evar_map -> constr -> constr -> constr
+
val splay_prod : env -> evar_map -> constr -> (name * constr) list * constr
val splay_lambda : env -> evar_map -> constr -> (name * constr) list * constr
val splay_arity : env -> evar_map -> constr -> (name * constr) list * sorts