+exception InfiniteSet
+
+module type S =
+ sig
+ type elt
+ type t
+ type set
+ val empty : t
+ val any : t
+ val is_empty : t -> bool
+ val is_any : t -> bool
+ val is_finite : t -> bool
+ val kind : t -> [ `Cofinite | `Finite ]
+ val singleton : elt -> t
+ val mem : elt -> t -> bool
+ val add : elt -> t -> t
+ val remove : elt -> t -> t
+ val cup : t -> t -> t
+ val cap : t -> t -> t
+ val diff : t -> t -> t
+ val neg : t -> t
+ val compare : t -> t -> int
+ val subset : t -> t -> bool
+ val kind_split : t list -> t * t
+ val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a
+ val for_all : (elt -> bool) -> t -> bool
+ val exists : (elt -> bool) -> t -> bool
+ val filter : (elt -> bool) -> t -> t
+ val partition : (elt -> bool) -> t -> t * t
+ val cardinal : t -> int
+ val elements : t -> elt list
+ val from_list : elt list -> t
+ val choose : t -> elt
+ val hash : t -> int
+ val equal : t -> t -> bool
+ val uid : t -> Uid.t
+ val positive : t -> set
+ val negative : t -> set
+ val inj_positive : set -> t
+ val inj_negative : set -> t
+ end
+
+module Make : functor (E : Ptset.S) -> S with type elt = E.elt and type set = E.t
+