From 578753fbd584d07968d694012f85f995ddaa0251 Mon Sep 17 00:00:00 2001 From: filliatr Date: Tue, 20 Mar 2001 16:11:48 +0000 Subject: mlutil git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@1472 85f007b7-540e-0410-9357-904b9bb8a0f7 --- contrib/extraction/mlutil.ml | 23 +++++++++++++++++++++++ contrib/extraction/mlutil.mli | 4 ++++ 2 files changed, 27 insertions(+) create mode 100644 contrib/extraction/mlutil.ml create mode 100644 contrib/extraction/mlutil.mli diff --git a/contrib/extraction/mlutil.ml b/contrib/extraction/mlutil.ml new file mode 100644 index 0000000000..33c1e32bfe --- /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 0000000000..224236fecf --- /dev/null +++ b/contrib/extraction/mlutil.mli @@ -0,0 +1,4 @@ + +open Miniml + +val occurs : int -> ml_ast -> bool -- cgit v1.2.3