aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre-Marie Pédrot2018-10-16 10:50:51 +0200
committerPierre-Marie Pédrot2018-10-16 10:50:51 +0200
commit697a59de8a39f3a4b253ced93ece1209b7f0eb1b (patch)
tree60fe9cb964ee6a1be68c0333270f29f996af0574
parent1b4e757a90d8c0a5fc8599fffcda75618b468032 (diff)
parent23fc1c59d78ffb524265caa1908503f50816335a (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.ml10
-rw-r--r--kernel/environ.mli2
-rw-r--r--kernel/safe_typing.ml6
-rw-r--r--kernel/safe_typing.mli3
-rw-r--r--library/global.ml20
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