aboutsummaryrefslogtreecommitdiffhomepage
path: root/toplevel/discharge.ml
diff options
context:
space:
mode:
Diffstat (limited to 'toplevel/discharge.ml')
-rw-r--r--toplevel/discharge.ml15
1 files changed, 13 insertions, 2 deletions
diff --git a/toplevel/discharge.ml b/toplevel/discharge.ml
index bd5218eff..971ae70d8 100644
--- a/toplevel/discharge.ml
+++ b/toplevel/discharge.ml
@@ -77,12 +77,23 @@ let refresh_polymorphic_type_of_inductive (_,mip) =
let process_inductive (sechyps,abs_ctx) modlist mib =
let nparams = mib.mind_nparams in
+ let subst, univs =
+ if mib.mind_polymorphic then
+ let inst = Univ.UContext.instance mib.mind_universes in
+ let cstrs = Univ.UContext.constraints mib.mind_universes in
+ inst, Univ.UContext.make (inst, Univ.subst_instance_constraints inst cstrs)
+ else Univ.Instance.empty, mib.mind_universes
+ in
let inds =
Array.map_to_list
(fun mip ->
let ty = refresh_polymorphic_type_of_inductive (mib,mip) in
let arity = expmod_constr modlist ty in
- let lc = Array.map (expmod_constr modlist) mip.mind_user_lc in
+ let arity = Vars.subst_instance_constr subst arity in
+ let lc = Array.map
+ (fun c -> Vars.subst_instance_constr subst (expmod_constr modlist c))
+ mip.mind_user_lc
+ in
(mip.mind_typename,
arity,
Array.to_list mip.mind_consnames,
@@ -90,7 +101,7 @@ let process_inductive (sechyps,abs_ctx) modlist mib =
mib.mind_packets in
let sechyps' = map_named_context (expmod_constr modlist) sechyps in
let (params',inds') = abstract_inductive sechyps' nparams inds in
- let univs = Univ.UContext.union abs_ctx mib.mind_universes in
+ let univs = Univ.UContext.union abs_ctx univs in
let record = match mib.mind_record with
| None -> None
| Some (_, a) -> Some (Array.length a > 0)