aboutsummaryrefslogtreecommitdiffhomepage
path: root/library/lib.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 /library/lib.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 'library/lib.ml')
-rw-r--r--library/lib.ml10
1 files changed, 6 insertions, 4 deletions
diff --git a/library/lib.ml b/library/lib.ml
index 92bace745..1ee3ca57b 100644
--- a/library/lib.ml
+++ b/library/lib.ml
@@ -382,8 +382,9 @@ let find_opening_node id =
type variable_info = Names.Id.t * Decl_kinds.binding_kind * Term.constr option * Term.types
type variable_context = variable_info list
-type abstr_list = variable_context Univ.in_universe_context Names.Cmap.t *
- variable_context Univ.in_universe_context Names.Mindmap.t
+type abstr_info = variable_context * Univ.universe_level_subst * Univ.UContext.t
+
+type abstr_list = abstr_info Names.Cmap.t * abstr_info Names.Mindmap.t
let sectab =
Summary.ref ([] : ((Names.Id.t * Decl_kinds.binding_kind *
@@ -427,8 +428,9 @@ let add_section_replacement f g hyps =
| (vars,exps,abs)::sl ->
let sechyps,ctx = extract_hyps (vars,hyps) in
let ctx = Univ.ContextSet.to_context ctx in
+ let subst, ctx = Univ.abstract_universes true ctx in
let args = instance_from_variable_context (List.rev sechyps) in
- sectab := (vars,f (Univ.UContext.instance ctx,args) exps,g (sechyps,ctx) abs)::sl
+ sectab := (vars,f (Univ.UContext.instance ctx,args) exps,g (sechyps,subst,ctx) abs)::sl
let add_section_kn kn =
let f x (l1,l2) = (l1,Names.Mindmap.add kn x l2) in
@@ -464,7 +466,7 @@ let full_replacement_context () = List.map pi2 !sectab
let full_section_segment_of_constant con =
List.map (fun (vars,_,(x,_)) -> fun hyps ->
named_of_variable_context
- (try fst (Names.Cmap.find con x)
+ (try pi1 (Names.Cmap.find con x)
with Not_found -> fst (extract_hyps (vars, hyps)))) !sectab
(*************)