sig
  type key
  type value
  type t
  val empty : CCMultiMap.S.t
  val is_empty : CCMultiMap.S.t -> bool
  val add :
    CCMultiMap.S.t ->
    CCMultiMap.S.key -> CCMultiMap.S.value -> CCMultiMap.S.t
  val remove :
    CCMultiMap.S.t ->
    CCMultiMap.S.key -> CCMultiMap.S.value -> CCMultiMap.S.t
  val remove_all : CCMultiMap.S.t -> CCMultiMap.S.key -> CCMultiMap.S.t
  val mem : CCMultiMap.S.t -> CCMultiMap.S.key -> bool
  val find : CCMultiMap.S.t -> CCMultiMap.S.key -> CCMultiMap.S.value list
  val find_iter :
    CCMultiMap.S.t ->
    CCMultiMap.S.key -> (CCMultiMap.S.value -> unit) -> unit
  val count : CCMultiMap.S.t -> CCMultiMap.S.key -> int
  val iter :
    CCMultiMap.S.t ->
    (CCMultiMap.S.key -> CCMultiMap.S.value -> unit) -> unit
  val fold :
    CCMultiMap.S.t ->
    '-> ('-> CCMultiMap.S.key -> CCMultiMap.S.value -> 'a) -> 'a
  val size : CCMultiMap.S.t -> int
  val union : CCMultiMap.S.t -> CCMultiMap.S.t -> CCMultiMap.S.t
  val inter : CCMultiMap.S.t -> CCMultiMap.S.t -> CCMultiMap.S.t
  val diff : CCMultiMap.S.t -> CCMultiMap.S.t -> CCMultiMap.S.t
  val equal : CCMultiMap.S.t -> CCMultiMap.S.t -> bool
  val compare : CCMultiMap.S.t -> CCMultiMap.S.t -> int
  val submap : CCMultiMap.S.t -> CCMultiMap.S.t -> bool
  val to_seq :
    CCMultiMap.S.t ->
    (CCMultiMap.S.key * CCMultiMap.S.value) CCMultiMap.sequence
  val of_seq :
    ?init:CCMultiMap.S.t ->
    (CCMultiMap.S.key * CCMultiMap.S.value) CCMultiMap.sequence ->
    CCMultiMap.S.t
  val keys : CCMultiMap.S.t -> CCMultiMap.S.key CCMultiMap.sequence
  val values : CCMultiMap.S.t -> CCMultiMap.S.value CCMultiMap.sequence
end