aboutsummaryrefslogtreecommitdiffhomepage
path: root/kernel/typeops.ml
diff options
context:
space:
mode:
authorGravatar Matthieu Sozeau <matthieu.sozeau@inria.fr>2014-08-03 20:02:49 +0200
committerGravatar Matthieu Sozeau <matthieu.sozeau@inria.fr>2014-08-03 23:39:01 +0200
commit7002b3daca6da29eadf80019847630b8583c3daf (patch)
tree9dcc3b618d33dd416805f70e878d71d007ddf4ff /kernel/typeops.ml
parent5de89439d459edd402328a1e437be4d8cd2e4f46 (diff)
Move to a representation of universe polymorphic constants using indices for variables.
Simplifies instantiation of constants/inductives, requiring less allocation and Map.find's. Abstraction by variables is handled mostly inside the kernel but could be moved outside.
Diffstat (limited to 'kernel/typeops.ml')
-rw-r--r--kernel/typeops.ml7
1 files changed, 2 insertions, 5 deletions
diff --git a/kernel/typeops.ml b/kernel/typeops.ml
index cd1f2c856..cb0c429a9 100644
--- a/kernel/typeops.ml
+++ b/kernel/typeops.ml
@@ -189,9 +189,7 @@ let type_of_projection env (cst,u) =
match cb.const_proj with
| Some pb ->
if cb.const_polymorphic then
- let mib,_ = lookup_mind_specif env (pb.proj_ind,0) in
- let subst = make_inductive_subst mib u in
- Vars.subst_univs_level_constr subst pb.proj_type
+ Vars.subst_instance_constr u pb.proj_type
else pb.proj_type
| None -> raise (Invalid_argument "type_of_projection: not a projection")
@@ -388,8 +386,7 @@ let judge_of_projection env p cj =
with Not_found -> error_case_not_inductive env cj
in
assert(eq_mind pb.proj_ind (fst ind));
- let usubst = make_inductive_subst (fst (lookup_mind_specif env ind)) u in
- let ty = Vars.subst_univs_level_constr usubst pb.Declarations.proj_type in
+ let ty = Vars.subst_instance_constr u pb.Declarations.proj_type in
let ty = substl (cj.uj_val :: List.rev args) ty in
(* TODO: Universe polymorphism for projections *)
{uj_val = mkProj (p,cj.uj_val);