aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorEnrico Tassi2013-12-20 17:37:09 +0100
committerEnrico Tassi2014-01-05 16:55:58 +0100
commitd5e353ded3282b2cb2314e8ee59315e3d14c4ce1 (patch)
tree359416eb027b698e175f1cb3875bba175552cf25 /kernel
parentcccabf3859d3b7fb79d0a9f477ea284d38a70dab (diff)
Environ: export API to transitively close a set of section variables
Diffstat (limited to 'kernel')
-rw-r--r--kernel/environ.ml30
-rw-r--r--kernel/environ.mli4
2 files changed, 20 insertions, 14 deletions
diff --git a/kernel/environ.ml b/kernel/environ.ml
index 679c807d65..105eb7da1b 100644
--- a/kernel/environ.ml
+++ b/kernel/environ.ml
@@ -261,21 +261,23 @@ let global_vars_set env constr =
contains the variables of the set [ids], and recursively the variables
contained in the types of the needed variables. *)
+let really_needed env needed =
+ Context.fold_named_context_reverse
+ (fun need (id,copt,t) ->
+ if Id.Set.mem id need then
+ let globc =
+ match copt with
+ | None -> Id.Set.empty
+ | Some c -> global_vars_set env c in
+ Id.Set.union
+ (global_vars_set env t)
+ (Id.Set.union globc need)
+ else need)
+ ~init:needed
+ (named_context env)
+
let keep_hyps env needed =
- let really_needed =
- Context.fold_named_context_reverse
- (fun need (id,copt,t) ->
- if Id.Set.mem id need then
- let globc =
- match copt with
- | None -> Id.Set.empty
- | Some c -> global_vars_set env c in
- Id.Set.union
- (global_vars_set env t)
- (Id.Set.union globc need)
- else need)
- ~init:needed
- (named_context env) in
+ let really_needed = really_needed env needed in
Context.fold_named_context
(fun (id,_,_ as d) nsign ->
if Id.Set.mem id really_needed then add_named_decl d nsign
diff --git a/kernel/environ.mli b/kernel/environ.mli
index 66cb03a1cd..652cd59bf1 100644
--- a/kernel/environ.mli
+++ b/kernel/environ.mli
@@ -171,6 +171,10 @@ val global_vars_set : env -> constr -> Id.Set.t
(** the constr must be a global reference *)
val vars_of_global : env -> constr -> Id.Set.t
+(** closure of the input id set w.r.t. dependency *)
+val really_needed : env -> Id.Set.t -> Id.Set.t
+
+(** like [really_needed] but computes a well ordered named context *)
val keep_hyps : env -> Id.Set.t -> section_context
(** {5 Unsafe judgments. }