sig
  module MappeX : Mappe.S
  module MappeY : Mappe.S
  type x = MappeX.key
  type y = MappeY.key
  type t
  val mapx : DMappe.S.t -> DMappe.S.y MappeX.t
  val mapy : DMappe.S.t -> DMappe.S.x MappeY.t
  val is_empty : DMappe.S.t -> bool
  val empty : DMappe.S.t
  val add : DMappe.S.x -> DMappe.S.y -> DMappe.S.t -> DMappe.S.t
  val y_of_x : DMappe.S.x -> DMappe.S.t -> DMappe.S.y
  val x_of_y : DMappe.S.y -> DMappe.S.t -> DMappe.S.x
  val remove : DMappe.S.x -> DMappe.S.t -> DMappe.S.t
  val memx : DMappe.S.x -> DMappe.S.t -> bool
  val memy : DMappe.S.y -> DMappe.S.t -> bool
  val merge : DMappe.S.t -> DMappe.S.t -> DMappe.S.t
  val common : DMappe.S.t -> DMappe.S.t -> DMappe.S.t
  val intersetx : DMappe.S.t -> MappeX.Setkey.t -> DMappe.S.t
  val intersety : DMappe.S.t -> MappeY.Setkey.t -> DMappe.S.t
  val diffsetx : DMappe.S.t -> MappeX.Setkey.t -> DMappe.S.t
  val diffsety : DMappe.S.t -> MappeY.Setkey.t -> DMappe.S.t
  val iter : (DMappe.S.x -> DMappe.S.y -> unit) -> DMappe.S.t -> unit
  val fold : (DMappe.S.x -> DMappe.S.y -> '-> 'a) -> DMappe.S.t -> '-> 'a
  val setx : DMappe.S.t -> MappeX.Setkey.t
  val sety : DMappe.S.t -> MappeY.Setkey.t
  val equalx : DMappe.S.t -> DMappe.S.t -> bool
  val equaly : DMappe.S.t -> DMappe.S.t -> bool
  val subsetx : DMappe.S.t -> DMappe.S.t -> bool
  val subsety : DMappe.S.t -> DMappe.S.t -> bool
  val cardinal : DMappe.S.t -> int
  val print :
    ?first:(unit, Format.formatter, unit) Pervasives.format ->
    ?sep:(unit, Format.formatter, unit) Pervasives.format ->
    ?last:(unit, Format.formatter, unit) Pervasives.format ->
    ?firstbind:(unit, Format.formatter, unit) Pervasives.format ->
    ?sepbind:(unit, Format.formatter, unit) Pervasives.format ->
    ?lastbind:(unit, Format.formatter, unit) Pervasives.format ->
    (Format.formatter -> DMappe.S.x -> unit) ->
    (Format.formatter -> DMappe.S.y -> unit) ->
    Format.formatter -> DMappe.S.t -> unit
end