aboutsummaryrefslogtreecommitdiffhomepage
path: root/kernel/declareops.ml
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/declareops.ml')
-rw-r--r--kernel/declareops.ml20
1 files changed, 17 insertions, 3 deletions
diff --git a/kernel/declareops.ml b/kernel/declareops.ml
index 4524b55bb..f583bff64 100644
--- a/kernel/declareops.ml
+++ b/kernel/declareops.ml
@@ -37,10 +37,22 @@ let hcons_template_arity ar =
(** {6 Constants } *)
+let instantiate cb c =
+ if cb.const_polymorphic then
+ Vars.subst_instance_constr (Univ.UContext.instance cb.const_universes) c
+ else c
+
let body_of_constant cb = match cb.const_body with
| Undef _ -> None
- | Def c -> Some (force_constr c)
- | OpaqueDef o -> Some (Opaqueproof.force_proof o)
+ | Def c -> Some (instantiate cb (force_constr c))
+ | OpaqueDef o -> Some (instantiate cb (Opaqueproof.force_proof o))
+
+let type_of_constant cb =
+ match cb.const_type with
+ | RegularArity t as x ->
+ let t' = instantiate cb t in
+ if t' == t then x else RegularArity t'
+ | TemplateArity _ as x -> x
let constraints_of_constant cb = Univ.Constraint.union
(Univ.UContext.constraints cb.const_universes)
@@ -57,7 +69,9 @@ let universes_of_constant cb =
(Univ.ContextSet.to_context (Opaqueproof.force_constraints o))
let universes_of_polymorphic_constant cb =
- if cb.const_polymorphic then universes_of_constant cb
+ if cb.const_polymorphic then
+ let univs = universes_of_constant cb in
+ Univ.instantiate_univ_context univs
else Univ.UContext.empty
let constant_has_body cb = match cb.const_body with