aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tactics/equality.ml9
-rw-r--r--tactics/equality.mli8
-rw-r--r--tactics/tacinterp.ml5
3 files changed, 14 insertions, 8 deletions
diff --git a/tactics/equality.ml b/tactics/equality.ml
index 62581d74b2..23966b6c29 100644
--- a/tactics/equality.ml
+++ b/tactics/equality.ml
@@ -329,11 +329,14 @@ let general_multi_rewrite l2r with_evars ?tac c cl =
(general_rewrite_ebindings l2r (occs_of cl.concl_occs) true ?tac c with_evars)
do_hyps
+type delayed_open_constr_with_bindings =
+ env -> evar_map -> evar_map * constr with_bindings
+
let general_multi_multi_rewrite with_evars l cl tac =
- let do1 l2r c gl =
+ let do1 l2r f gl =
+ let sigma,c = f (pf_env gl) (project gl) in
Refiner.tclWITHHOLES with_evars
- (general_multi_rewrite l2r with_evars ?tac c.it)
- (Evd.merge (project gl) c.sigma) cl gl in
+ (general_multi_rewrite l2r with_evars ?tac c) sigma cl gl in
let rec doN l2r c = function
| Precisely n when n <= 0 -> tclIDTAC
| Precisely 1 -> do1 l2r c
diff --git a/tactics/equality.mli b/tactics/equality.mli
index 9986d230bb..b5c147393d 100644
--- a/tactics/equality.mli
+++ b/tactics/equality.mli
@@ -68,9 +68,13 @@ val general_rewrite_in :
val general_multi_rewrite :
orientation -> evars_flag -> ?tac:(tactic * conditions) -> constr with_bindings -> clause -> tactic
+
+type delayed_open_constr_with_bindings =
+ env -> evar_map -> evar_map * constr with_bindings
+
val general_multi_multi_rewrite :
- evars_flag -> (bool * multi * constr with_bindings sigma) list -> clause ->
- (tactic * conditions) option -> tactic
+ evars_flag -> (bool * multi * delayed_open_constr_with_bindings) list ->
+ clause -> (tactic * conditions) option -> tactic
val replace_in_clause_maybe_by : constr -> constr -> clause -> tactic option -> tactic
val replace : constr -> constr -> tactic
diff --git a/tactics/tacinterp.ml b/tactics/tacinterp.ml
index 719fa7f859..85986503ed 100644
--- a/tactics/tacinterp.ml
+++ b/tactics/tacinterp.ml
@@ -2417,9 +2417,8 @@ and interp_atomic ist gl tac =
(* Equality and inversion *)
| TacRewrite (ev,l,cl,by) ->
let l = List.map (fun (b,m,c) ->
- let sigma',c = interp_open_constr_with_bindings ist env sigma c in
- let _,sigma' = Evarutil.subtract_evars sigma sigma' in
- (b,m,{it=c;sigma=sigma'})) l in
+ let f env sigma = interp_open_constr_with_bindings ist env sigma c in
+ (b,m,f)) l in
let cl = interp_clause ist gl cl in
Equality.general_multi_multi_rewrite ev l cl
(Option.map (fun by -> tclCOMPLETE (interp_tactic ist by), Equality.Naive) by)