sig
  type t
  val empty : IntSet.t
  val singleton : int -> IntSet.t
  val of_list : int list -> IntSet.t
  val is_empty : IntSet.t -> bool
  val size : IntSet.t -> int
  val equal : IntSet.t -> IntSet.t -> bool
  val contains : IntSet.t -> int -> bool
  val is_subset : IntSet.t -> IntSet.t -> bool
  val choose : IntSet.t -> int
  val add : IntSet.t -> int -> IntSet.t
  val remove : IntSet.t -> int -> IntSet.t
  val pop : IntSet.t -> int * IntSet.t
  val union : IntSet.t -> IntSet.t -> IntSet.t
  val minus : IntSet.t -> IntSet.t -> IntSet.t
  val intersection : IntSet.t -> IntSet.t -> IntSet.t
  val do_intersect : IntSet.t -> IntSet.t -> bool
  val intersection_size : IntSet.t -> IntSet.t -> int
  val split : IntSet.t -> int -> IntSet.t * bool * IntSet.t
  val partition : (int -> bool) -> IntSet.t -> IntSet.t * IntSet.t
  val find_opt : (int -> 'a option) -> IntSet.t -> 'a option
  val find : (int -> bool) -> IntSet.t -> int
  val for_all : (int -> bool) -> IntSet.t -> bool
  val fold : ('-> int -> 'a) -> IntSet.t -> '-> 'a
  val fold_intersection :
    ('-> int -> 'a) -> IntSet.t -> IntSet.t -> '-> 'a
  val iter : (int -> unit) -> IntSet.t -> unit
  val output : Pervasives.out_channel -> IntSet.t -> unit
  val print : IntSet.t -> unit
  val dump : IntSet.t -> unit
end