sig
  type t
  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