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