diff options
author | filliatr <filliatr@85f007b7-540e-0410-9357-904b9bb8a0f7> | 2001-03-20 16:11:48 +0000 |
---|---|---|
committer | filliatr <filliatr@85f007b7-540e-0410-9357-904b9bb8a0f7> | 2001-03-20 16:11:48 +0000 |
commit | 578753fbd584d07968d694012f85f995ddaa0251 (patch) | |
tree | 09d8b8bd5c1f38a46e9ebb06d943f51b6443542a /contrib/extraction | |
parent | 03682a1d55252a5ba1cc02f42bfb487b3be96e18 (diff) |
mlutil
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@1472 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'contrib/extraction')
-rw-r--r-- | contrib/extraction/mlutil.ml | 23 | ||||
-rw-r--r-- | contrib/extraction/mlutil.mli | 4 |
2 files changed, 27 insertions, 0 deletions
diff --git a/contrib/extraction/mlutil.ml b/contrib/extraction/mlutil.ml new file mode 100644 index 000000000..33c1e32bf --- /dev/null +++ b/contrib/extraction/mlutil.ml @@ -0,0 +1,23 @@ + +open Util +open Miniml + +(* [occurs : int -> ml_ast -> bool] + [occurs k M] returns true if (Rel k) occurs in M. *) + +let rec occurs k = function + | MLrel i -> i=k + | MLapp(t,argl) -> (occurs k t) or (occurs_list k argl) + | MLlam(_,t) -> occurs (k+1) t + | MLcons(_,_,argl) -> occurs_list k argl + | MLcase(t,pv) -> + (occurs k t) or + (List.exists (fun (k',t') -> occurs (k+k') t') + (array_map_to_list (fun (_,l,t') -> + let k' = List.length l in (k',t')) pv)) + | MLfix(_,_,l,cl) -> let k' = List.length l in occurs_list (k+k') cl + | _ -> false + +and occurs_list k l = + List.exists (fun t -> occurs k t) l + diff --git a/contrib/extraction/mlutil.mli b/contrib/extraction/mlutil.mli new file mode 100644 index 000000000..224236fec --- /dev/null +++ b/contrib/extraction/mlutil.mli @@ -0,0 +1,4 @@ + +open Miniml + +val occurs : int -> ml_ast -> bool |