sig
  type t = Q.t
  val compare : t -> t -> int
  val zero : t
  val one : t
  val of_float : float -> t
  val to_float : t -> float
  val of_q : Q.t -> t
  val to_q : t -> Q.t
  val add : t -> t -> t
  val sub : t -> t -> t
  val mult : t -> t -> t
  val div : t -> t -> t
  val pp : Format.formatter -> t -> unit
  val minus_one : t
  val of_int : int -> t
  val neg : t -> t
  val inv : t -> t
  val equal : t -> t -> bool
  val leq : t -> t -> bool
  val geq : t -> t -> bool
  val lt : t -> t -> bool
  val gt : t -> t -> bool
  val sign : t -> int
  val ( ~- ) : t -> t
  val ( + ) : t -> t -> t
  val ( - ) : t -> t -> t
  val ( * ) : t -> t -> t
  val ( / ) : t -> t -> t
  val ( = ) : t -> t -> bool
  val ( <> ) : t -> t -> bool
  val ( <= ) : t -> t -> bool
  val ( >= ) : t -> t -> bool
  val ( < ) : t -> t -> bool
  val ( > ) : t -> t -> bool
end