sig
  type elt
  type t
  module T : sig type 'a elt = elt type 'a t = t end
  type sexpable = t
  val sexp_of_t : sexpable -> Sexplib.Sexp.t
  val t_of_sexp : Sexplib.Sexp.t -> sexpable
  val empty : Core_set_intf.S.t
  val is_empty : Core_set_intf.S.t -> bool
  val mem : Core_set_intf.S.t -> Core_set_intf.S.elt -> bool
  val add : Core_set_intf.S.t -> Core_set_intf.S.elt -> Core_set_intf.S.t
  val singleton : Core_set_intf.S.elt -> Core_set_intf.S.t
  val remove : Core_set_intf.S.t -> Core_set_intf.S.elt -> Core_set_intf.S.t
  val union : Core_set_intf.S.t -> Core_set_intf.S.t -> Core_set_intf.S.t
  val union_list : Core_set_intf.S.t list -> Core_set_intf.S.t
  val inter : Core_set_intf.S.t -> Core_set_intf.S.t -> Core_set_intf.S.t
  val diff : Core_set_intf.S.t -> Core_set_intf.S.t -> Core_set_intf.S.t
  val compare : Core_set_intf.S.t -> Core_set_intf.S.t -> int
  val equal : Core_set_intf.S.t -> Core_set_intf.S.t -> bool
  val subset : Core_set_intf.S.t -> Core_set_intf.S.t -> bool
  val iter : Core_set_intf.S.t -> f:(Core_set_intf.S.elt -> unit) -> unit
  val fold :
    Core_set_intf.S.t -> init:'-> f:(Core_set_intf.S.elt -> '-> 'a) -> 'a
  val fold_until :
    Core_set_intf.S.t ->
    init:'->
    f:(Core_set_intf.S.elt -> '-> [ `Continue of '| `Stop of 'a ]) -> 'a
  val for_all : Core_set_intf.S.t -> f:(Core_set_intf.S.elt -> bool) -> bool
  val exists : Core_set_intf.S.t -> f:(Core_set_intf.S.elt -> bool) -> bool
  val filter :
    Core_set_intf.S.t -> f:(Core_set_intf.S.elt -> bool) -> Core_set_intf.S.t
  val partition :
    Core_set_intf.S.t ->
    f:(Core_set_intf.S.elt -> bool) -> Core_set_intf.S.t * Core_set_intf.S.t
  val cardinal : Core_set_intf.S.t -> int
  val length : Core_set_intf.S.t -> int
  val elements : Core_set_intf.S.t -> Core_set_intf.S.elt list
  val min_elt : Core_set_intf.S.t -> Core_set_intf.S.elt option
  val min_elt_exn : Core_set_intf.S.t -> Core_set_intf.S.elt
  val max_elt : Core_set_intf.S.t -> Core_set_intf.S.elt option
  val max_elt_exn : Core_set_intf.S.t -> Core_set_intf.S.elt
  val choose : Core_set_intf.S.t -> Core_set_intf.S.elt option
  val choose_exn : Core_set_intf.S.t -> Core_set_intf.S.elt
  val of_list : Core_set_intf.S.elt list -> Core_set_intf.S.t
  val to_list : Core_set_intf.S.t -> Core_set_intf.S.elt list
  val of_array : Core_set_intf.S.elt array -> Core_set_intf.S.t
  val to_array : Core_set_intf.S.t -> Core_set_intf.S.elt array
  val split :
    Core_set_intf.S.elt ->
    Core_set_intf.S.t -> Core_set_intf.S.t * bool * Core_set_intf.S.t
  val group_by :
    Core_set_intf.S.t ->
    equiv:(Core_set_intf.S.elt -> Core_set_intf.S.elt -> bool) ->
    Core_set_intf.S.t list
  val find :
    Core_set_intf.S.t ->
    f:(Core_set_intf.S.elt -> bool) -> Core_set_intf.S.elt option
  val find_exn :
    Core_set_intf.S.t ->
    f:(Core_set_intf.S.elt -> bool) -> Core_set_intf.S.elt
  val find_index : Core_set_intf.S.t -> int -> Core_set_intf.S.elt option
  val remove_index : Core_set_intf.S.t -> int -> Core_set_intf.S.t
end