sig
  type elt
  type t
  val empty : SetMap.Set.t
  val is_empty : SetMap.Set.t -> bool
  val singleton : SetMap.Set.elt -> SetMap.Set.t
  val is_singleton : SetMap.Set.t -> bool
  val add : SetMap.Set.elt -> SetMap.Set.t -> SetMap.Set.t
  val add_with_logs :
    ('parameters, 'error,
     SetMap.Set.elt -> SetMap.Set.t -> 'error * SetMap.Set.t)
    SetMap.with_log_wrap
  val remove : SetMap.Set.elt -> SetMap.Set.t -> SetMap.Set.t
  val add_while_testing_freshness :
    ('parameters, 'error,
     SetMap.Set.elt -> SetMap.Set.t -> 'error * bool * SetMap.Set.t)
    SetMap.with_log_wrap
  val remove_while_testing_existence :
    ('parameters, 'error,
     SetMap.Set.elt -> SetMap.Set.t -> 'error * bool * SetMap.Set.t)
    SetMap.with_log_wrap
  val remove_with_logs :
    ('parameters, 'error,
     SetMap.Set.elt -> SetMap.Set.t -> 'error * SetMap.Set.t)
    SetMap.with_log_wrap
  val split :
    SetMap.Set.elt -> SetMap.Set.t -> SetMap.Set.t * bool * SetMap.Set.t
  val union : SetMap.Set.t -> SetMap.Set.t -> SetMap.Set.t
  val disjoint_union : SetMap.Set.t -> SetMap.Set.t -> SetMap.Set.t option
  val inter : SetMap.Set.t -> SetMap.Set.t -> SetMap.Set.t
  val minus : SetMap.Set.t -> SetMap.Set.t -> SetMap.Set.t
  val diff : SetMap.Set.t -> SetMap.Set.t -> SetMap.Set.t
  val minus_with_logs :
    ('parameters, 'error,
     SetMap.Set.t -> SetMap.Set.t -> 'error * SetMap.Set.t)
    SetMap.with_log_wrap
  val union_with_logs :
    ('parameters, 'error,
     SetMap.Set.t -> SetMap.Set.t -> 'error * SetMap.Set.t)
    SetMap.with_log_wrap
  val disjoint_union_with_logs :
    ('parameters, 'error,
     SetMap.Set.t -> SetMap.Set.t -> 'error * SetMap.Set.t)
    SetMap.with_log_wrap
  val inter_with_logs :
    ('parameters, 'error,
     SetMap.Set.t -> SetMap.Set.t -> 'error * SetMap.Set.t)
    SetMap.with_log_wrap
  val diff_with_logs :
    ('parameters, 'error,
     SetMap.Set.t -> SetMap.Set.t -> 'error * SetMap.Set.t)
    SetMap.with_log_wrap
  val size : SetMap.Set.t -> int
  val mem : SetMap.Set.elt -> SetMap.Set.t -> bool
  val exists : (SetMap.Set.elt -> bool) -> SetMap.Set.t -> bool
  val filter : (SetMap.Set.elt -> bool) -> SetMap.Set.t -> SetMap.Set.t
  val filter_with_logs :
    ('parameters, 'error,
     (SetMap.Set.elt -> bool) -> SetMap.Set.t -> 'error * SetMap.Set.t)
    SetMap.with_log_wrap
  val for_all : (SetMap.Set.elt -> bool) -> SetMap.Set.t -> bool
  val partition :
    (SetMap.Set.elt -> bool) -> SetMap.Set.t -> SetMap.Set.t * SetMap.Set.t
  val partition_with_logs :
    ('parameters, 'error,
     (SetMap.Set.elt -> bool) ->
     SetMap.Set.t -> 'error * SetMap.Set.t * SetMap.Set.t)
    SetMap.with_log_wrap
  val compare : SetMap.Set.t -> SetMap.Set.t -> int
  val equal : SetMap.Set.t -> SetMap.Set.t -> bool
  val subset : SetMap.Set.t -> SetMap.Set.t -> bool
  val iter : (SetMap.Set.elt -> unit) -> SetMap.Set.t -> unit
  val fold : (SetMap.Set.elt -> '-> 'a) -> SetMap.Set.t -> '-> 'a
  val fold_inv : (SetMap.Set.elt -> '-> 'a) -> SetMap.Set.t -> '-> 'a
  val elements : SetMap.Set.t -> SetMap.Set.elt list
  val print : Format.formatter -> SetMap.Set.t -> unit
  val choose : SetMap.Set.t -> SetMap.Set.elt option
  val random : Random.State.t -> SetMap.Set.t -> SetMap.Set.elt option
  val min_elt : SetMap.Set.t -> SetMap.Set.elt option
  val max_elt : SetMap.Set.t -> SetMap.Set.elt option
end