aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorfilliatr1999-10-20 09:53:38 +0000
committerfilliatr1999-10-20 09:53:38 +0000
commit264afb325ec8e34009cf267d418ff0ba3ceb1da5 (patch)
tree1afbb27971648af739d1babb8c9a28cd36aa1445 /kernel
parenta6f5bbb9ffa576226e64f75a04799690426b06a3 (diff)
modules Evar_refiner et Typing_ev
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@110 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'kernel')
-rw-r--r--kernel/generic.ml18
-rw-r--r--kernel/generic.mli2
-rw-r--r--kernel/reduction.ml2
3 files changed, 22 insertions, 0 deletions
diff --git a/kernel/generic.ml b/kernel/generic.ml
index 3e33dca7b7..6b38b72ff6 100644
--- a/kernel/generic.ml
+++ b/kernel/generic.ml
@@ -301,6 +301,24 @@ let occur_oper s =
in
occur_rec
+let process_opers_of_term p f l constr =
+ let rec filtrec acc = function
+ | DOP0 oper -> if p oper then ((f oper)::acc) else acc
+ | VAR _ -> acc
+ | DOP1(oper,c) -> let newacc = filtrec acc c in
+ if p oper then ((f oper)::newacc) else newacc
+ | DOP2(oper,c1,c2) -> let newacc = filtrec (filtrec acc c1) c2 in
+ if p oper then ((f oper)::newacc) else newacc
+ | DOPN(oper,cl) -> let newacc = (Array.fold_left filtrec acc cl) in
+ if p oper then ((f oper)::newacc) else newacc
+ | DOPL(oper,cl) -> let newacc = (List.fold_left filtrec acc cl) in
+ if p oper then ((f oper)::newacc) else newacc
+ | DLAM(_,c) -> filtrec acc c
+ | DLAMV(_,v) -> Array.fold_left filtrec acc v
+ | _ -> acc
+ in
+ filtrec l constr
+
(* Returns the list of global variables in a term *)
let global_varsl l constr =
diff --git a/kernel/generic.mli b/kernel/generic.mli
index 49ec5bfbe5..cad600a50c 100644
--- a/kernel/generic.mli
+++ b/kernel/generic.mli
@@ -81,6 +81,8 @@ val occur_opern : 'a -> 'a term -> bool
val occur_oper0 : 'a -> 'a term -> bool
val occur_var : identifier -> 'a term -> bool
val occur_oper : 'a -> 'a term -> bool
+val process_opers_of_term :
+ ('a -> bool) -> ('a -> 'b) -> 'b list -> 'a term -> 'b list
val dependent : 'a term -> 'a term -> bool
val global_varsl : identifier list -> 'a term -> identifier list
val global_vars : 'a term -> identifier list
diff --git a/kernel/reduction.ml b/kernel/reduction.ml
index ac32e2eabd..7119729c7d 100644
--- a/kernel/reduction.ml
+++ b/kernel/reduction.ml
@@ -1425,3 +1425,5 @@ let rec strip_all_casts t =
| DLAMV(na,c) -> DLAMV(na,Array.map (under_outer_cast strip_all_casts) c)
| VAR _ as t -> t
| Rel _ as t -> t
+
+