sig
  module Polynomial :
    functor (F : Field.T->
      sig
        type t = Ring.Polynomial(F).t
        val eq : t -> t -> bool
        val add : t -> t -> t
        val zero : t
        val neg : t -> t
        val mul : t -> t -> t
        val one : t
        val to_string : t -> string
        val div : t -> t -> t * t
      end
  type t = Polynomial(K).t * Polynomial(K).t
  val gcd : Polynomial(K).t -> Polynomial(K).t -> Polynomial(K).t
  val canonize : t -> t
  val eq : t -> t -> bool
  val add : t -> t -> t
  val zero : t
  val neg : t -> t
  val mul : t -> t -> t
  val one : t
  val inv : t -> t
  val to_string : t -> string
end