functor (R : Rat) -> sig type t = R.q val euclid : Euclid.S.t -> Euclid.S.t -> Euclid.S.t * Euclid.S.t * Euclid.S.t val solve : Euclid.S.t list -> Euclid.S.t -> (Euclid.S.t * Euclid.S.t list) option end