From 7002b3daca6da29eadf80019847630b8583c3daf Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Sun, 3 Aug 2014 20:02:49 +0200 Subject: 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. --- library/lib.ml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'library/lib.ml') 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 (*************) -- cgit v1.2.3