Skip to content

Commit 8079fe5

Browse files
committed
Add pattern term to rewrite rule record
1 parent 008c029 commit 8079fe5

4 files changed

Lines changed: 7 additions & 2 deletions

File tree

checker/values.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,7 @@ let v_rewrule = v_tuple "rewrite_rule"
549549
v_array v_name; (* rr_evars *)
550550
v_map v_evar v_int; (* esubst *)
551551
v_pattern; (* pattern *)
552+
v_constr; (* pat_term *)
552553
v_constr|] (* replacement *)
553554

554555
let v_puniv = v_opt v_int

kernel/declarations.mli

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,7 @@ type rewrite_rule = {
346346
rr_evars: Name.t array;
347347
esubst: int Evar.Map.t;
348348
pattern: pattern;
349+
pat_term: constr;
349350
replacement: constr;
350351
}
351352

kernel/declareops.ml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -452,15 +452,17 @@ let subst_machine_pattern subst p =
452452
let subst_rewrite_rules subst ({ rewrules_rules; rewrules_machine } as rules) =
453453
let body' = List.Smart.map (fun rule ->
454454
let pattern' = subst_pattern subst rule.pattern in
455+
let pat_term' = subst_mps subst rule.pat_term in
455456
let replacement' = subst_mps subst rule.replacement in
456457
if
457458
pattern' == rule.pattern &&
459+
pat_term' == rule.pat_term &&
458460
replacement' == rule.replacement
459461
then
460462
rule
461463
else
462464
{ rr_uctx = rule.rr_uctx; rr_evars = rule.rr_evars; esubst = rule.esubst;
463-
pattern=pattern'; replacement=replacement'
465+
pattern=pattern'; pat_term=pat_term'; replacement=replacement'
464466
})
465467
rewrules_rules
466468
in

vernac/comRewriteRule.ml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,9 +171,10 @@ let interp_rule (pattern, rhs) =
171171
++ fnl() ++ Himsg.explain_pretype_error env evd err)
172172
in
173173

174+
let pat_term = Vars.subst_univs_level_constr usubst (Environ.j_val j_pat) in
174175
let replacement = EConstr.to_constr ~abort_on_undefined_evars:false evd (EConstr.Vars.subst_univs_level_constr usubst rhs) in
175176

176-
let rule = { rr_evars = names.evar_names; rr_uctx = { quals = names.sort_names; univs = names.level_names }; esubst; pattern; replacement } in
177+
let rule = { rr_evars = names.evar_names; rr_uctx = { quals = names.sort_names; univs = names.level_names }; esubst; pattern; pat_term; replacement } in
177178

178179
let machine =
179180
match Rewrite_rules_ops.translate_rewrite_rule env evd rule with

0 commit comments

Comments
 (0)