sig
  type r
  type t
  val compare : Polynome.T.t -> Polynome.T.t -> int
  val hash : Polynome.T.t -> int
  val create :
    (Num.num * Polynome.T.r) list -> Num.num -> Ty.t -> Polynome.T.t
  val add : Polynome.T.t -> Polynome.T.t -> Polynome.T.t
  val sub : Polynome.T.t -> Polynome.T.t -> Polynome.T.t
  val mult : Polynome.T.t -> Polynome.T.t -> Polynome.T.t
  val mult_const : Num.num -> Polynome.T.t -> Polynome.T.t
  val div : Polynome.T.t -> Polynome.T.t -> Polynome.T.t * bool
  val modulo : Polynome.T.t -> Polynome.T.t -> Polynome.T.t
  val is_empty : Polynome.T.t -> bool
  val find : Polynome.T.r -> Polynome.T.t -> Num.num
  val choose : Polynome.T.t -> Num.num * Polynome.T.r
  val subst : Polynome.T.r -> Polynome.T.t -> Polynome.T.t -> Polynome.T.t
  val remove : Polynome.T.r -> Polynome.T.t -> Polynome.T.t
  val to_list : Polynome.T.t -> (Num.num * Polynome.T.r) list * Num.num
  val print : Format.formatter -> Polynome.T.t -> unit
  val type_info : Polynome.T.t -> Ty.t
  val is_monomial : Polynome.T.t -> (Num.num * Polynome.T.r * Num.num) option
  val ppmc_denominators : Polynome.T.t -> Num.num
  val pgcd_numerators : Polynome.T.t -> Num.num
  val normal_form : Polynome.T.t -> Polynome.T.t * Num.num * Num.num
  val normal_form_pos : Polynome.T.t -> Polynome.T.t * Num.num * Num.num
end