diff options
| author | Pierre-Marie Pédrot | 2018-10-16 10:50:51 +0200 |
|---|---|---|
| committer | Pierre-Marie Pédrot | 2018-10-16 10:50:51 +0200 |
| commit | 697a59de8a39f3a4b253ced93ece1209b7f0eb1b (patch) | |
| tree | 60fe9cb964ee6a1be68c0333270f29f996af0574 | |
| parent | 1b4e757a90d8c0a5fc8599fffcda75618b468032 (diff) | |
| parent | 23fc1c59d78ffb524265caa1908503f50816335a (diff) | |
Merge PR #8695: Adding a functional version of constant- and mind_of_delta_kn + functional version of is_polymorphic
| -rw-r--r-- | kernel/environ.ml | 10 | ||||
| -rw-r--r-- | kernel/environ.mli | 2 | ||||
| -rw-r--r-- | kernel/safe_typing.ml | 6 | ||||
| -rw-r--r-- | kernel/safe_typing.mli | 3 | ||||
| -rw-r--r-- | library/global.ml | 20 |
5 files changed, 23 insertions, 18 deletions
diff --git a/kernel/environ.ml b/kernel/environ.ml index dffcd70282..2fa33eb1cd 100644 --- a/kernel/environ.ml +++ b/kernel/environ.ml @@ -680,6 +680,16 @@ let remove_hyps ids check_context check_value ctxt = in fst (remove_hyps ctxt) +(* A general request *) + +let is_polymorphic env r = + let open Names.GlobRef in + match r with + | VarRef _id -> false + | ConstRef c -> polymorphic_constant c env + | IndRef ind -> polymorphic_ind ind env + | ConstructRef cstr -> polymorphic_ind (inductive_of_constructor cstr) env + (*spiwack: the following functions assemble the pieces of the retroknowledge note that the "consistent" register function is available in the module Safetyping, Environ only synchronizes the proactive and the reactive parts*) diff --git a/kernel/environ.mli b/kernel/environ.mli index 55ff7ff162..031e7968d7 100644 --- a/kernel/environ.mli +++ b/kernel/environ.mli @@ -315,7 +315,7 @@ val apply_to_hyp : named_context_val -> variable -> val remove_hyps : Id.Set.t -> (Constr.named_declaration -> Constr.named_declaration) -> (lazy_val -> lazy_val) -> named_context_val -> named_context_val - +val is_polymorphic : env -> Names.GlobRef.t -> bool open Retroknowledge (** functions manipulating the retroknowledge diff --git a/kernel/safe_typing.ml b/kernel/safe_typing.ml index 820c5b3a2b..625b7e5073 100644 --- a/kernel/safe_typing.ml +++ b/kernel/safe_typing.ml @@ -168,6 +168,12 @@ let is_initial senv = let delta_of_senv senv = senv.modresolver,senv.paramresolver +let constant_of_delta_kn_senv senv kn = + Mod_subst.constant_of_deltas_kn senv.paramresolver senv.modresolver kn + +let mind_of_delta_kn_senv senv kn = + Mod_subst.mind_of_deltas_kn senv.paramresolver senv.modresolver kn + (** The safe_environment state monad *) type safe_transformer0 = safe_environment -> safe_environment diff --git a/kernel/safe_typing.mli b/kernel/safe_typing.mli index 0f150ea971..26fa91adbd 100644 --- a/kernel/safe_typing.mli +++ b/kernel/safe_typing.mli @@ -204,6 +204,9 @@ val exists_objlabel : Label.t -> safe_environment -> bool val delta_of_senv : safe_environment -> Mod_subst.delta_resolver * Mod_subst.delta_resolver +val constant_of_delta_kn_senv : safe_environment -> KerName.t -> Constant.t +val mind_of_delta_kn_senv : safe_environment -> KerName.t -> MutInd.t + (** {6 Retroknowledge / Native compiler } *) open Retroknowledge diff --git a/library/global.ml b/library/global.ml index 0e236e6d34..769a4bea38 100644 --- a/library/global.ml +++ b/library/global.ml @@ -147,18 +147,10 @@ let body_of_constant cst = body_of_constant_body (lookup_constant cst) (** Operations on kernel names *) let constant_of_delta_kn kn = - let resolver,resolver_param = Safe_typing.delta_of_senv (safe_env ()) - in - (* TODO : are resolver and resolver_param orthogonal ? - the effect of resolver is lost if resolver_param isn't - trivial at that spot. *) - Mod_subst.constant_of_deltas_kn resolver_param resolver kn + Safe_typing.constant_of_delta_kn_senv (safe_env ()) kn let mind_of_delta_kn kn = - let resolver,resolver_param = Safe_typing.delta_of_senv (safe_env ()) - in - (* TODO idem *) - Mod_subst.mind_of_deltas_kn resolver_param resolver kn + Safe_typing.mind_of_delta_kn_senv (safe_env ()) kn (** Operations on libraries *) @@ -235,13 +227,7 @@ let universes_of_global env r = let universes_of_global gr = universes_of_global (env ()) gr -let is_polymorphic r = - let env = env() in - match r with - | VarRef id -> false - | ConstRef c -> Environ.polymorphic_constant c env - | IndRef ind -> Environ.polymorphic_ind ind env - | ConstructRef cstr -> Environ.polymorphic_ind (inductive_of_constructor cstr) env +let is_polymorphic r = Environ.is_polymorphic (env()) r let is_template_polymorphic r = let env = env() in |
