sig
  type set
  type elt
  val empty : set
  val is_empty : set -> bool
  val mem : elt -> set -> bool
  val add : elt -> set -> set
  val singleton : elt -> set
  val remove : elt -> set -> set
  val union : set -> set -> set
  val inter : set -> set -> set
  val diff : set -> set -> set
  val compare : set -> set -> int
  val equal : set -> set -> bool
  val subset : set -> set -> bool
  val iter : (elt -> unit) -> set -> unit
  val fold : (elt -> '-> 'a) -> set -> '-> 'a
  val for_all : (elt -> bool) -> set -> bool
  val exists : (elt -> bool) -> set -> bool
  val filter : (elt -> bool) -> set -> set
  val partition : (elt -> bool) -> set -> set * set
  val cardinal : set -> int
  val elements : set -> elt list
  val min_elt : set -> elt
  val max_elt : set -> elt
  val choose : set -> elt
  val split : elt -> set -> set * bool * set
  val of_seq : elt Sequence.t -> Sequence.Set.S.set
  val to_seq : Sequence.Set.S.set -> elt Sequence.t
end