diff options
| author | Pierre-Marie Pédrot | 2020-10-04 16:16:53 +0200 |
|---|---|---|
| committer | Pierre-Marie Pédrot | 2020-11-04 13:43:57 +0100 |
| commit | f4c1b8b9ffdb5e531685130824fc4ce03a3e9794 (patch) | |
| tree | b68dcc1bd537c1108d2aa92642bca3b2725c9333 /vernac/comHints.ml | |
| parent | be332604f4d495ea875185ff1b5aee1eb12b4178 (diff) | |
Do not try to be clever for term-as-hint interpretation.
The prepare_hint function was trying to requantify over all undefined evars,
but actually this should not happen when defining generic terms as hints through
some Hint vernacular command.
Diffstat (limited to 'vernac/comHints.ml')
| -rw-r--r-- | vernac/comHints.ml | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/vernac/comHints.ml b/vernac/comHints.ml index 6cc1940b40..0d32f28d79 100644 --- a/vernac/comHints.ml +++ b/vernac/comHints.ml @@ -101,10 +101,20 @@ let interp_hints ~poly h = let () = warn_deprecated_hint_constr () in let env = Global.env () in let sigma = Evd.from_env env in - let evd, c = Constrintern.interp_open_constr env sigma c in - let h, diff = Hints.hint_constr env sigma ~poly (evd, c) in - let () = DeclareUctx.declare_universe_context ~poly:false diff [@ocaml.warning "-3"] in - (PathAny, h) + 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 = + if poly then (c, Some diff) + else + let () = DeclareUctx.declare_universe_context ~poly:false diff in + (c, None) + in + (PathAny, Hints.hint_constr c) [@ocaml.warning "-3"] in let fp = Constrintern.intern_constr_pattern env sigma in let fres (info, b, r) = |
