diff options
| author | Pierre-Marie Pédrot | 2020-10-06 14:58:45 +0200 |
|---|---|---|
| committer | Pierre-Marie Pédrot | 2020-11-04 13:43:57 +0100 |
| commit | ab6ebfc1f42d96d50763f2dcd6b8322b12613d3d (patch) | |
| tree | c7f7a53b2d563c481f43ef3c416f92bcb4164c8e | |
| parent | f4c1b8b9ffdb5e531685130824fc4ce03a3e9794 (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.ml | 3 | ||||
| -rw-r--r-- | engine/eConstr.mli | 1 | ||||
| -rw-r--r-- | vernac/comHints.ml | 11 |
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 |
