functor (F : T->
  sig
    module Polynomial :
      functor (F : 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(F).t * Polynomial(F).t
    val gcd : Polynomial(F).t -> Polynomial(F).t -> Polynomial(F).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