aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre-Marie Pédrot2020-10-06 14:58:45 +0200
committerPierre-Marie Pédrot2020-11-04 13:43:57 +0100
commitab6ebfc1f42d96d50763f2dcd6b8322b12613d3d (patch)
treec7f7a53b2d563c481f43ef3c416f92bcb4164c8e
parentf4c1b8b9ffdb5e531685130824fc4ce03a3e9794 (diff)
Further code simplification in arbitrary hint interpretation.
We reuse the standard code path for term interpretation instead of trying to mangle it.
-rw-r--r--engine/eConstr.ml3
-rw-r--r--engine/eConstr.mli1
-rw-r--r--vernac/comHints.ml11
3 files changed, 8 insertions, 7 deletions
diff --git a/engine/eConstr.ml b/engine/eConstr.ml
index bb2873b486..0c84dee572 100644
--- a/engine/eConstr.ml
+++ b/engine/eConstr.ml
@@ -628,6 +628,9 @@ let subst_var subst c = of_constr (Vars.subst_var subst (to_constr c))
let subst_univs_level_constr subst c =
of_constr (Vars.subst_univs_level_constr subst (to_constr c))
+let subst_univs_constr subst c =
+ of_constr (UnivSubst.subst_univs_constr subst (to_constr c))
+
(** Operations that dot NOT commute with evar-normalization *)
let noccurn sigma n term =
let rec occur_rec n c = match kind sigma c with
diff --git a/engine/eConstr.mli b/engine/eConstr.mli
index a018f4064f..882dfe2848 100644
--- a/engine/eConstr.mli
+++ b/engine/eConstr.mli
@@ -295,6 +295,7 @@ val closedn : Evd.evar_map -> int -> t -> bool
val closed0 : Evd.evar_map -> t -> bool
val subst_univs_level_constr : Univ.universe_level_subst -> t -> t
+val subst_univs_constr : Univ.universe_subst -> t -> t
val subst_of_rel_context_instance : rel_context -> t list -> t list
diff --git a/vernac/comHints.ml b/vernac/comHints.ml
index 0d32f28d79..f642411fa4 100644
--- a/vernac/comHints.ml
+++ b/vernac/comHints.ml
@@ -101,13 +101,10 @@ let interp_hints ~poly h =
let () = warn_deprecated_hint_constr () in
let env = Global.env () in
let sigma = Evd.from_env env in
- let sigma, c = Constrintern.interp_open_constr env sigma c in
- let sigma = Typeclasses.resolve_typeclasses ~fail:false env sigma in
- let sigma, _ = Evd.nf_univ_variables sigma in
- let c = Evarutil.nf_evar sigma c in
- let c = Termops.drop_extra_implicit_args sigma c in
- let () = Pretyping.check_evars env sigma c in
- let diff = Evd.universe_context_set sigma in
+ let c, uctx = Constrintern.interp_constr env sigma c in
+ let subst, uctx = UState.normalize_variables uctx in
+ let c = EConstr.Vars.subst_univs_constr subst c in
+ let diff = UState.context_set uctx in
let c =
if poly then (c, Some diff)
else