sig
  module Z :
    sig
      type t
      val zero : Mpa.Z.t
      val one : Mpa.Z.t
      val two : Mpa.Z.t
      val add : Mpa.Z.t -> Mpa.Z.t -> Mpa.Z.t
      val sub : Mpa.Z.t -> Mpa.Z.t -> Mpa.Z.t
      val succ : Mpa.Z.t -> Mpa.Z.t
      val mult : Mpa.Z.t -> Mpa.Z.t -> Mpa.Z.t
      val divexact : Mpa.Z.t -> Mpa.Z.t -> Mpa.Z.t
      val expt : Mpa.Z.t -> int -> Mpa.Z.t
      val equal : Mpa.Z.t -> Mpa.Z.t -> bool
      val compare : Mpa.Z.t -> Mpa.Z.t -> int
      val lt : Mpa.Z.t -> Mpa.Z.t -> bool
      val le : Mpa.Z.t -> Mpa.Z.t -> bool
      val gt : Mpa.Z.t -> Mpa.Z.t -> bool
      val ge : Mpa.Z.t -> Mpa.Z.t -> bool
      val of_int : int -> Mpa.Z.t
      val to_int : Mpa.Z.t -> int
      val gcd : Mpa.Z.t -> Mpa.Z.t -> Mpa.Z.t
      val lcm : Mpa.Z.t -> Mpa.Z.t -> Mpa.Z.t
      val pow : int -> int -> Mpa.Z.t
      val to_string : Mpa.Z.t -> string
      val pp : Format.formatter -> Mpa.Z.t -> unit
    end
  module Q :
    sig
      type t
      val negone : Mpa.Q.t
      val zero : Mpa.Q.t
      val one : Mpa.Q.t
      val two : Mpa.Q.t
      val is_zero : Mpa.Q.t -> bool
      val is_one : Mpa.Q.t -> bool
      val is_negone : Mpa.Q.t -> bool
      val is_pos : Mpa.Q.t -> bool
      val is_neg : Mpa.Q.t -> bool
      val is_nonneg : Mpa.Q.t -> bool
      val is_nonpos : Mpa.Q.t -> bool
      val of_int : int -> Mpa.Q.t
      val of_ints : int -> int -> Mpa.Q.t
      val min : Mpa.Q.t -> Mpa.Q.t -> Mpa.Q.t
      val max : Mpa.Q.t -> Mpa.Q.t -> Mpa.Q.t
      val add : Mpa.Q.t -> Mpa.Q.t -> Mpa.Q.t
      val sub : Mpa.Q.t -> Mpa.Q.t -> Mpa.Q.t
      val minus : Mpa.Q.t -> Mpa.Q.t
      val mult : Mpa.Q.t -> Mpa.Q.t -> Mpa.Q.t
      val div : Mpa.Q.t -> Mpa.Q.t -> Mpa.Q.t
      val inv : Mpa.Q.t -> Mpa.Q.t
      val expt : Mpa.Q.t -> int -> Mpa.Q.t
      val abs : Mpa.Q.t -> Mpa.Q.t
      val floor : Mpa.Q.t -> Mpa.Z.t
      val ceil : Mpa.Q.t -> Mpa.Z.t
      val frac : Mpa.Q.t -> Mpa.Q.t
      val def : Mpa.Q.t -> Mpa.Q.t
      val compare : Mpa.Q.t -> Mpa.Q.t -> int
      val equal : Mpa.Q.t -> Mpa.Q.t -> bool
      val lt : Mpa.Q.t -> Mpa.Q.t -> bool
      val le : Mpa.Q.t -> Mpa.Q.t -> bool
      val gt : Mpa.Q.t -> Mpa.Q.t -> bool
      val ge : Mpa.Q.t -> Mpa.Q.t -> bool
      type cmp = Equal | Greater | Less
      val cmp : Mpa.Q.t -> Mpa.Q.t -> Mpa.Q.cmp
      val denominator : Mpa.Q.t -> Mpa.Z.t
      val numerator : Mpa.Q.t -> Mpa.Z.t
      val is_integer : Mpa.Q.t -> bool
      val to_z : Mpa.Q.t -> Mpa.Z.t
      val of_z : Mpa.Z.t -> Mpa.Q.t
      val hash : Mpa.Q.t -> int
      val to_string : Mpa.Q.t -> string
      exception ZeroDivision
      val of_string : string -> Mpa.Q.t
      val pp : Format.formatter -> Mpa.Q.t -> unit
      module Hash :
        sig
          type key = t
          and 'a t
          val create : int -> 'a t
          val clear : 'a t -> unit
          val copy : 'a t -> 'a t
          val add : 'a t -> key -> '-> unit
          val remove : 'a t -> key -> unit
          val find : 'a t -> key -> 'a
          val find_all : 'a t -> key -> 'a list
          val replace : 'a t -> key -> '-> unit
          val mem : 'a t -> key -> bool
          val iter : (key -> '-> unit) -> 'a t -> unit
          val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
        end
    end
end