sig
  type t
  module Element : sig type t end
  val nil : Cf_set.T.t
  val empty : Cf_set.T.t -> bool
  val size : Cf_set.T.t -> int
  val member : Cf_set.T.Element.t -> Cf_set.T.t -> bool
  val singleton : Cf_set.T.Element.t -> Cf_set.T.t
  val min : Cf_set.T.t -> Cf_set.T.Element.t
  val max : Cf_set.T.t -> Cf_set.T.Element.t
  val put : Cf_set.T.Element.t -> Cf_set.T.t -> Cf_set.T.t
  val clear : Cf_set.T.Element.t -> Cf_set.T.t -> Cf_set.T.t
  val union : Cf_set.T.t -> Cf_set.T.t -> Cf_set.T.t
  val diff : Cf_set.T.t -> Cf_set.T.t -> Cf_set.T.t
  val intersect : Cf_set.T.t -> Cf_set.T.t -> Cf_set.T.t
  val compare : Cf_set.T.t -> Cf_set.T.t -> int
  val subset : Cf_set.T.t -> Cf_set.T.t -> bool
  val of_list : Cf_set.T.Element.t list -> Cf_set.T.t
  val of_list_incr : Cf_set.T.Element.t list -> Cf_set.T.t
  val of_list_decr : Cf_set.T.Element.t list -> Cf_set.T.t
  val of_seq : Cf_set.T.Element.t Cf_seq.t -> Cf_set.T.t
  val of_seq_incr : Cf_set.T.Element.t Cf_seq.t -> Cf_set.T.t
  val of_seq_decr : Cf_set.T.Element.t Cf_seq.t -> Cf_set.T.t
  val to_list_incr : Cf_set.T.t -> Cf_set.T.Element.t list
  val to_list_decr : Cf_set.T.t -> Cf_set.T.Element.t list
  val to_seq_incr : Cf_set.T.t -> Cf_set.T.Element.t Cf_seq.t
  val to_seq_decr : Cf_set.T.t -> Cf_set.T.Element.t Cf_seq.t
  val nearest_decr :
    Cf_set.T.Element.t -> Cf_set.T.t -> Cf_set.T.Element.t Cf_seq.t
  val nearest_incr :
    Cf_set.T.Element.t -> Cf_set.T.t -> Cf_set.T.Element.t Cf_seq.t
  val iterate : (Cf_set.T.Element.t -> unit) -> Cf_set.T.t -> unit
  val predicate : (Cf_set.T.Element.t -> bool) -> Cf_set.T.t -> bool
  val fold : ('-> Cf_set.T.Element.t -> 'a) -> '-> Cf_set.T.t -> 'a
  val filter : (Cf_set.T.Element.t -> bool) -> Cf_set.T.t -> Cf_set.T.t
  val partition :
    (Cf_set.T.Element.t -> bool) -> Cf_set.T.t -> Cf_set.T.t * Cf_set.T.t
end