sig
  type q
  val eq : Euclid.Rat.q -> Euclid.Rat.q -> bool
  val ( + ) : Euclid.Rat.q -> Euclid.Rat.q -> Euclid.Rat.q
  val zero : Euclid.Rat.q
  val inv : Euclid.Rat.q -> Euclid.Rat.q
  val ( * ) : Euclid.Rat.q -> Euclid.Rat.q -> Euclid.Rat.q
  val one : Euclid.Rat.q
  val ( / ) : Euclid.Rat.q -> Euclid.Rat.q -> Euclid.Rat.q
  val floor : Euclid.Rat.q -> Euclid.Rat.q
  val is_int : Euclid.Rat.q -> bool
end