Fix the build script.
[tatoo.git] / src / utils / finiteCofinite.ml
index 8d3c3ee..2bfe70c 100644 (file)
 (***********************************************************************)
 
 (*
-  Time-stamp: <Last modified on 2013-01-30 19:09:01 CET by Kim Nguyen>
+  Time-stamp: <Last modified on 2013-03-05 01:50:21 CET by Kim Nguyen>
 *)
 
 INCLUDE "utils.ml"
 
-include Sigs.FINITECOFINITE
+include FiniteCofinite_sig
 
 module type HConsBuilder =
-  functor (H : Sigs.AUX.HashedType) -> Hcons.S with type data = H.t
+  functor (H : Common_sig.HashedType) -> Hcons.S with type data = H.t
 
 module Builder (HCB : HConsBuilder) (E : Ptset.S) :
   S with type elt = E.elt and type set = E.t =
@@ -34,9 +34,9 @@ struct
     type t = node
     let equal a b =
       match a, b with
-        Finite (s1), Finite (s2)
-      | CoFinite (s1), CoFinite (s2) -> E.equal s1 s2
-      | _ -> false
+        Finite s1, Finite s2
+      | CoFinite s1, CoFinite s2 -> E.equal s1 s2
+      | (Finite _| CoFinite _), _ -> false
 
     let hash = function
       | Finite s -> HASHINT2 (PRIME1, E.hash s)
@@ -48,20 +48,21 @@ struct
   let finite x = make (Finite x)
   let cofinite x = make (CoFinite x)
 
-  let is_empty =  function
-    | { node = Finite s } when E.is_empty s -> true
-    | _ -> false
+  let is_empty t =  match t.node with
+    | Finite s -> E.is_empty s
+    | CoFinite _  -> false
 
-  let is_any = function
-    | { node = CoFinite s } when E.is_empty s -> true
-    | _ -> false
+  let is_any t = match t.node with
+    | CoFinite s -> E.is_empty s
+    | Finite _  -> false
 
   let is_finite t = match t.node with
-    | Finite _ -> true | _ -> false
+    | Finite _ -> true
+    | CoFinite _ -> false
 
   let kind t = match t.node with
     | Finite _ -> `Finite
-    | _ -> `Cofinite
+    | CoFinite _  -> `Cofinite
 
   let mem x t = match t.node with
     | Finite s -> E.mem x s
@@ -124,21 +125,21 @@ struct
 
     let rec next_finite_cofinite facc cacc = function
       | [] -> finite facc, cofinite (E.diff cacc facc)
-      | { node = Finite s } ::r ->
+      | { node = Finite s; _ } ::r ->
         next_finite_cofinite (E.union s facc) cacc r
-      | { node = CoFinite _ } ::r when E.is_empty cacc ->
+      | { node = CoFinite _ ; _ } ::r when E.is_empty cacc ->
         next_finite_cofinite facc cacc r
-      | { node = CoFinite s } ::r ->
+      | { node = CoFinite s; _ } ::r ->
         next_finite_cofinite facc (E.inter cacc s) r
     in
     let rec first_cofinite facc = function
       | [] -> empty,empty
-      | { node = Finite s } :: r-> first_cofinite (E.union s facc) r
-      | { node = CoFinite s } :: r -> next_finite_cofinite facc s r
+      | { node = Finite s ; _ } :: r-> first_cofinite (E.union s facc) r
+      | { node = CoFinite s ; _ } :: r -> next_finite_cofinite facc s r
     in
       first_cofinite E.empty l
 
-  let exn = Sigs.FINITECOFINITE.InfiniteSet
+  let exn = FiniteCofinite_sig.InfiniteSet
 
   let fold f t a = match t.node with
     | Finite s -> E.fold f s a
@@ -177,42 +178,40 @@ struct
 
   let choose t = match t.node with
       Finite s -> E.choose s
-    | _ -> raise exn
+    | CoFinite _ -> raise exn
 
   let is_singleton t = match t.node with
     | Finite s -> E.is_singleton s
-    | _ -> false
+    | CoFinite _ -> false
 
   let intersect s t = match s.node, t.node with
     | Finite s, Finite t -> E.intersect s t
     | CoFinite s, Finite t -> not (E.subset t s)
     | Finite s, CoFinite t -> not (E.subset s t)
-    | CoFinite s, CoFinite t -> true
+    | CoFinite _ , CoFinite _ -> true
 
   let split x s = match s.node with
     | Finite s ->
       let s1, b, s2 = E.split x s in
       finite s1, b, finite s2
 
-    | _ -> raise exn
+    | CoFinite _ -> raise exn
 
   let min_elt s = match s.node with
     | Finite s -> E.min_elt s
-    | _ -> raise exn
+    | CoFinite _ -> raise exn
 
   let max_elt s = match s.node with
     | Finite s -> E.min_elt s
-    | _ -> raise exn
+    | CoFinite _ -> raise exn
 
-  let positive t =
-    match t.node with
+  let positive t = match t.node with
       | Finite x -> x
-      | _ -> E.empty
+      | CoFinite _ -> E.empty
 
-  let negative t =
-    match t.node with
+  let negative t = match t.node with
       | CoFinite x -> x
-      | _ -> E.empty
+      | Finite _ -> E.empty
 
   let inj_positive t = finite t
   let inj_negative t = cofinite t