sig
  type elt
  type t
  val size : Multiset_intf.S.t -> int
  val cardinal : Multiset_intf.S.t -> Z.t
  val empty : Multiset_intf.S.t
  val is_empty : Multiset_intf.S.t -> bool
  val mem : Multiset_intf.S.t -> Multiset_intf.S.elt -> bool
  val find : Multiset_intf.S.t -> Multiset_intf.S.elt -> Z.t
  val singleton : Multiset_intf.S.elt -> Multiset_intf.S.t
  val doubleton :
    Multiset_intf.S.elt -> Multiset_intf.S.elt -> Multiset_intf.S.t
  val add : Multiset_intf.S.t -> Multiset_intf.S.elt -> Multiset_intf.S.t
  val add_coeff :
    Multiset_intf.S.t -> Multiset_intf.S.elt -> Z.t -> Multiset_intf.S.t
  val union : Multiset_intf.S.t -> Multiset_intf.S.t -> Multiset_intf.S.t
  val intersection :
    Multiset_intf.S.t -> Multiset_intf.S.t -> Multiset_intf.S.t
  val sum : Multiset_intf.S.t -> Multiset_intf.S.t -> Multiset_intf.S.t
  val difference :
    Multiset_intf.S.t -> Multiset_intf.S.t -> Multiset_intf.S.t
  val product : Z.t -> Multiset_intf.S.t -> Multiset_intf.S.t
  val filter :
    (Multiset_intf.S.elt -> Z.t -> bool) ->
    Multiset_intf.S.t -> Multiset_intf.S.t
  val map :
    (Multiset_intf.S.elt -> Multiset_intf.S.elt) ->
    Multiset_intf.S.t -> Multiset_intf.S.t
  val map_coeff :
    (Multiset_intf.S.elt -> Z.t -> Z.t) ->
    Multiset_intf.S.t -> Multiset_intf.S.t
  val filter_map :
    (Multiset_intf.S.elt -> Z.t -> (Multiset_intf.S.elt * Z.t) option) ->
    Multiset_intf.S.t -> Multiset_intf.S.t
  val flat_map :
    (Multiset_intf.S.elt -> Multiset_intf.S.t) ->
    Multiset_intf.S.t -> Multiset_intf.S.t
  module Seq :
    sig
      val of_seq :
        Multiset_intf.S.t ->
        Multiset_intf.S.elt Sequence.t -> Multiset_intf.S.t
      val to_seq : Multiset_intf.S.t -> Multiset_intf.S.elt Sequence.t
      val of_coeffs :
        Multiset_intf.S.t ->
        (Multiset_intf.S.elt * Z.t) Sequence.t -> Multiset_intf.S.t
      val to_coeffs :
        Multiset_intf.S.t -> (Multiset_intf.S.elt * Z.t) Sequence.t
    end
  val iter : (Multiset_intf.S.elt -> unit) -> Multiset_intf.S.t -> unit
  val fold :
    ('-> Multiset_intf.S.elt -> 'a) -> '-> Multiset_intf.S.t -> 'a
  val iter_coeffs :
    (Multiset_intf.S.elt -> Z.t -> unit) -> Multiset_intf.S.t -> unit
  val fold_coeffs :
    ('-> Multiset_intf.S.elt -> Z.t -> 'a) -> '-> Multiset_intf.S.t -> 'a
  val for_all : (Multiset_intf.S.elt -> bool) -> Multiset_intf.S.t -> bool
  val exists : (Multiset_intf.S.elt -> bool) -> Multiset_intf.S.t -> bool
  val choose : Multiset_intf.S.t -> Multiset_intf.S.elt
  val of_list : Multiset_intf.S.elt list -> Multiset_intf.S.t
  val of_coeffs : (Multiset_intf.S.elt * Z.t) list -> Multiset_intf.S.t
  val of_iarray : Multiset_intf.S.elt IArray.t -> Multiset_intf.S.t
  val of_array : Multiset_intf.S.elt array -> Multiset_intf.S.t
  val to_list : Multiset_intf.S.t -> (Multiset_intf.S.elt * Z.t) list
  val eq : Multiset_intf.S.t -> Multiset_intf.S.t -> bool
  val cancel :
    Multiset_intf.S.t ->
    Multiset_intf.S.t -> Multiset_intf.S.t * Multiset_intf.S.t
  val compare : Multiset_intf.S.t -> Multiset_intf.S.t -> int
  val compare_partial :
    (Multiset_intf.S.elt -> Multiset_intf.S.elt -> Comparison.t) ->
    Multiset_intf.S.t -> Multiset_intf.S.t -> Comparison.t
  val is_max :
    (Multiset_intf.S.elt -> Multiset_intf.S.elt -> Comparison.t) ->
    Multiset_intf.S.elt -> Multiset_intf.S.t -> bool
  val max :
    (Multiset_intf.S.elt -> Multiset_intf.S.elt -> Comparison.t) ->
    Multiset_intf.S.t -> Multiset_intf.S.t
  val max_seq :
    (Multiset_intf.S.elt -> Multiset_intf.S.elt -> Comparison.t) ->
    Multiset_intf.S.t -> (Multiset_intf.S.elt, Z.t) Sequence.t2
  val max_l :
    (Multiset_intf.S.elt -> Multiset_intf.S.elt -> Comparison.t) ->
    Multiset_intf.S.elt list -> Multiset_intf.S.elt list
  val compare_partial_l :
    (Multiset_intf.S.elt -> Multiset_intf.S.elt -> Comparison.t) ->
    Multiset_intf.S.elt list -> Multiset_intf.S.elt list -> Comparison.t
  val pp :
    Multiset_intf.S.elt CCFormat.printer ->
    Multiset_intf.S.t CCFormat.printer
end