aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbarras2001-06-29 08:16:09 +0000
committerbarras2001-06-29 08:16:09 +0000
commit1b20fdfdf7f9ab6a92494c413c919635101e7f34 (patch)
treeaf7414e8df67d28ab52f914627d12f91f8af5707
parent9816d0201e8c72fb469706dd8739bec424a8ba5c (diff)
traitement du let dans red_product (tactique Red)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@1815 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--pretyping/tacred.ml8
-rw-r--r--tactics/tactics.ml2
2 files changed, 6 insertions, 4 deletions
diff --git a/pretyping/tacred.ml b/pretyping/tacred.ml
index f3f010e5e7..8523752d29 100644
--- a/pretyping/tacred.ml
+++ b/pretyping/tacred.ml
@@ -403,17 +403,19 @@ and construct_const env sigma =
(* Red reduction tactic: reduction to a product *)
let internal_red_product env sigma c =
+ let simpfun = clos_norm_flags (UNIFORM,betaiotazeta_red) env sigma in
let rec redrec env x =
match kind_of_term x with
- | IsApp (f,l) -> appvect (redrec env f, l)
+ | IsApp (f,l) -> simpfun (appvect (redrec env f, l))
| IsCast (c,_) -> redrec env c
| IsProd (x,a,b) -> mkProd (x, a, redrec (push_rel_assum (x,a) env) b)
+ | IsLetIn (x,a,b,t) -> redrec env (subst1 a t)
| _ when isEvalRef x ->
(match reference_opt_value sigma env (destEvalRef x) with
| None -> raise Redelimination
- | Some c -> c)
+ | Some c -> simpfun c)
| _ -> raise Redelimination
- in nf_betaiota (redrec env c)
+ in redrec env c
let red_product env sigma c =
try internal_red_product env sigma c
diff --git a/tactics/tactics.ml b/tactics/tactics.ml
index 7b441e1f49..bb34e96dec 100644
--- a/tactics/tactics.ml
+++ b/tactics/tactics.ml
@@ -493,7 +493,7 @@ let apply_with_bindings (c,lbind) gl =
try
let clause = make_clenv_binding_apply wc (c,thm_ty) lbind in
apply kONT clause gl
- with (Logic.RefinerError _|UserError _) as exn ->
+ with (RefinerError _|UserError _|Failure _) as exn ->
let ored =
try Some (Tacred.red_product (w_env wc) (w_Underlying wc) thm_ty)
with Tacred.Redelimination -> None