sig
  type elt
  type set
  type +'a t
  val empty : 'a SetMap.Map.t
  val is_empty : 'a SetMap.Map.t -> bool
  val size : 'a SetMap.Map.t -> int
  val root : 'a SetMap.Map.t -> (SetMap.Map.elt * 'a) option
  val max_key : 'a SetMap.Map.t -> SetMap.Map.elt option
  val add : SetMap.Map.elt -> 'a -> 'a SetMap.Map.t -> 'a SetMap.Map.t
  val remove : SetMap.Map.elt -> 'a SetMap.Map.t -> 'a SetMap.Map.t
  val add_while_testing_freshness :
    ('parameters, 'error,
     SetMap.Map.elt ->
     'a -> 'a SetMap.Map.t -> 'error * bool * 'a SetMap.Map.t)
    SetMap.with_log_wrap
  val remove_while_testing_existence :
    ('parameters, 'error,
     SetMap.Map.elt -> 'a SetMap.Map.t -> 'error * bool * 'a SetMap.Map.t)
    SetMap.with_log_wrap
  val pop : SetMap.Map.elt -> 'a SetMap.Map.t -> 'a option * 'a SetMap.Map.t
  val merge : 'a SetMap.Map.t -> 'a SetMap.Map.t -> 'a SetMap.Map.t
  val min_elt : 'a SetMap.Map.t -> (SetMap.Map.elt * 'a) option
  val find_option : SetMap.Map.elt -> 'a SetMap.Map.t -> 'a option
  val find_default : 'a -> SetMap.Map.elt -> 'a SetMap.Map.t -> 'a
  val find_option_with_logs :
    ('parameters, 'error,
     SetMap.Map.elt -> 'a SetMap.Map.t -> 'error * 'a option)
    SetMap.with_log_wrap
  val find_default_with_logs :
    ('parameters, 'error,
     'a -> SetMap.Map.elt -> 'a SetMap.Map.t -> 'error * 'a)
    SetMap.with_log_wrap
  val mem : SetMap.Map.elt -> 'a SetMap.Map.t -> bool
  val diff :
    'a SetMap.Map.t -> 'a SetMap.Map.t -> 'a SetMap.Map.t * 'a SetMap.Map.t
  val union : 'a SetMap.Map.t -> 'a SetMap.Map.t -> 'a SetMap.Map.t
  val update : 'a SetMap.Map.t -> 'a SetMap.Map.t -> 'a SetMap.Map.t
  val diff_pred :
    ('a -> 'a -> bool) ->
    'a SetMap.Map.t -> 'a SetMap.Map.t -> 'a SetMap.Map.t * 'a SetMap.Map.t
  val add_with_logs :
    ('parameters, 'error,
     SetMap.Map.elt -> 'a -> 'a SetMap.Map.t -> 'error * 'a SetMap.Map.t)
    SetMap.with_log_wrap
  val remove_with_logs :
    ('parameters, 'error,
     SetMap.Map.elt -> 'a SetMap.Map.t -> 'error * 'a SetMap.Map.t)
    SetMap.with_log_wrap
  val join_with_logs :
    ('parameters, 'error,
     'a SetMap.Map.t ->
     SetMap.Map.elt -> 'a -> 'a SetMap.Map.t -> 'error * 'a SetMap.Map.t)
    SetMap.with_log_wrap
  val split_with_logs :
    ('parameters, 'error,
     SetMap.Map.elt ->
     'a SetMap.Map.t ->
     'error * ('a SetMap.Map.t * 'a option * 'a SetMap.Map.t))
    SetMap.with_log_wrap
  val update_with_logs :
    ('parameters, 'error,
     'a SetMap.Map.t -> 'a SetMap.Map.t -> 'error * 'a SetMap.Map.t)
    SetMap.with_log_wrap
  val map2_with_logs :
    ('parameters, 'error,
     ('parameters -> 'error -> 'a -> 'error * 'c) ->
     ('parameters -> 'error -> 'b -> 'error * 'c) ->
     ('parameters -> 'error -> 'a -> 'b -> 'error * 'c) ->
     'a SetMap.Map.t -> 'b SetMap.Map.t -> 'error * 'c SetMap.Map.t)
    SetMap.with_log_wrap
  val map2z_with_logs :
    ('parameters, 'error,
     ('parameters -> 'error -> 'a -> 'a -> 'error * 'a) ->
     'a SetMap.Map.t -> 'a SetMap.Map.t -> 'error * 'a SetMap.Map.t)
    SetMap.with_log_wrap
  val fold2z_with_logs :
    ('parameters, 'error,
     ('parameters ->
      'error -> SetMap.Map.elt -> 'a -> 'b -> 'c -> 'error * 'c) ->
     'a SetMap.Map.t -> 'b SetMap.Map.t -> 'c -> 'error * 'c)
    SetMap.with_log_wrap
  val fold2_with_logs :
    ('parameters, 'error,
     ('parameters -> 'error -> SetMap.Map.elt -> 'a -> 'c -> 'error * 'c) ->
     ('parameters -> 'error -> SetMap.Map.elt -> 'b -> 'c -> 'error * 'c) ->
     ('parameters ->
      'error -> SetMap.Map.elt -> 'a -> 'b -> 'c -> 'error * 'c) ->
     'a SetMap.Map.t -> 'b SetMap.Map.t -> 'c -> 'error * 'c)
    SetMap.with_log_wrap
  val fold2_sparse_with_logs :
    ('parameters, 'error,
     ('parameters ->
      'error -> SetMap.Map.elt -> 'a -> 'b -> 'c -> 'error * 'c) ->
     'a SetMap.Map.t -> 'b SetMap.Map.t -> 'c -> 'error * 'c)
    SetMap.with_log_wrap
  val iter2_sparse_with_logs :
    ('parameters, 'error,
     ('parameters -> 'error -> SetMap.Map.elt -> 'a -> 'b -> 'error) ->
     'a SetMap.Map.t -> 'b SetMap.Map.t -> 'error)
    SetMap.with_log_wrap
  val diff_with_logs :
    ('parameters, 'error,
     'a SetMap.Map.t ->
     'a SetMap.Map.t -> 'error * 'a SetMap.Map.t * 'a SetMap.Map.t)
    SetMap.with_log_wrap
  val diff_pred_with_logs :
    ('parameters, 'error,
     ('a -> 'a -> bool) ->
     'a SetMap.Map.t ->
     'a SetMap.Map.t -> 'error * 'a SetMap.Map.t * 'a SetMap.Map.t)
    SetMap.with_log_wrap
  val merge_with_logs :
    ('parameters, 'error,
     'a SetMap.Map.t -> 'a SetMap.Map.t -> 'error * 'a SetMap.Map.t)
    SetMap.with_log_wrap
  val union_with_logs :
    ('parameters, 'error,
     'a SetMap.Map.t -> 'a SetMap.Map.t -> 'error * 'a SetMap.Map.t)
    SetMap.with_log_wrap
  val fold_restriction_with_logs :
    ('parameters, 'error,
     (SetMap.Map.elt -> 'a -> 'error * 'b -> 'error * 'b) ->
     SetMap.Map.set -> 'a SetMap.Map.t -> 'b -> 'error * 'b)
    SetMap.with_log_wrap
  val fold_restriction_with_missing_associations_with_logs :
    ('parameters, 'error,
     (SetMap.Map.elt -> 'a -> 'error * 'b -> 'error * 'b) ->
     (SetMap.Map.elt -> 'error * 'b -> 'error * 'b) ->
     SetMap.Map.set -> 'a SetMap.Map.t -> 'b -> 'error * 'b)
    SetMap.with_log_wrap
  val iter : (SetMap.Map.elt -> 'a -> unit) -> 'a SetMap.Map.t -> unit
  val fold :
    (SetMap.Map.elt -> 'a -> 'b -> 'b) -> 'a SetMap.Map.t -> 'b -> 'b
  val fold_with_interruption :
    (SetMap.Map.elt -> 'a -> 'b -> ('b, 'c) Stop.stop) ->
    'a SetMap.Map.t -> 'b -> ('b, 'c) Stop.stop
  val monadic_fold2 :
    'parameters ->
    'method_handler ->
    ('parameters ->
     'method_handler ->
     SetMap.Map.elt -> 'a -> 'b -> 'c -> 'method_handler * 'c) ->
    ('parameters ->
     'method_handler -> SetMap.Map.elt -> 'a -> 'c -> 'method_handler * 'c) ->
    ('parameters ->
     'method_handler -> SetMap.Map.elt -> 'b -> 'c -> 'method_handler * 'c) ->
    'a SetMap.Map.t -> 'b SetMap.Map.t -> 'c -> 'method_handler * 'c
  val monadic_fold2_sparse :
    'parameters ->
    'method_handler ->
    ('parameters ->
     'method_handler ->
     SetMap.Map.elt -> 'a -> 'b -> 'c -> 'method_handler * 'c) ->
    'a SetMap.Map.t -> 'b SetMap.Map.t -> 'c -> 'method_handler * 'c
  val monadic_iter2_sparse :
    'parameters ->
    'method_handler ->
    ('parameters ->
     'method_handler -> SetMap.Map.elt -> 'a -> 'b -> 'method_handler) ->
    'a SetMap.Map.t -> 'b SetMap.Map.t -> 'method_handler
  val monadic_fold_restriction :
    'parameters ->
    'method_handler ->
    ('parameters ->
     'method_handler -> SetMap.Map.elt -> 'a -> 'b -> 'method_handler * 'b) ->
    SetMap.Map.set -> 'a SetMap.Map.t -> 'b -> 'method_handler * 'b
  val mapi :
    (SetMap.Map.elt -> 'a -> 'b) -> 'a SetMap.Map.t -> 'b SetMap.Map.t
  val map : ('a -> 'b) -> 'a SetMap.Map.t -> 'b SetMap.Map.t
  val map2 :
    ('a -> 'a -> 'a) -> 'a SetMap.Map.t -> 'a SetMap.Map.t -> 'a SetMap.Map.t
  val for_all : (SetMap.Map.elt -> 'a -> bool) -> 'a SetMap.Map.t -> bool
  val filter_one :
    (SetMap.Map.elt -> 'a -> bool) ->
    'a SetMap.Map.t -> (SetMap.Map.elt * 'a) option
  val compare :
    ('a -> 'a -> int) -> 'a SetMap.Map.t -> 'a SetMap.Map.t -> int
  val equal :
    ('a -> 'a -> bool) -> 'a SetMap.Map.t -> 'a SetMap.Map.t -> bool
  val bindings : 'a SetMap.Map.t -> (SetMap.Map.elt * 'a) list
  val print :
    (Format.formatter -> 'a -> unit) ->
    Format.formatter -> 'a SetMap.Map.t -> unit
  val of_json :
    ?lab_key:string ->
    ?lab_value:string ->
    ?error_msg:string ->
    (Yojson.Basic.json -> SetMap.Map.elt) ->
    (Yojson.Basic.json -> 'value) -> Yojson.Basic.json -> 'value SetMap.Map.t
  val to_json :
    ?lab_key:string ->
    ?lab_value:string ->
    (SetMap.Map.elt -> Yojson.Basic.json) ->
    ('value -> Yojson.Basic.json) -> 'value SetMap.Map.t -> Yojson.Basic.json
end