functor (SC : Scalar.S->
  sig
    module Coeff :
      sig
        type t = SC.t
        val compare : t -> t -> int
        val zero : t
        val one : t
        val of_float : float -> t
        val to_float : t -> float
        val of_q : Q.t -> t
        val to_q : t -> Q.t
        val add : t -> t -> t
        val sub : t -> t -> t
        val mult : t -> t -> t
        val div : t -> t -> t
        val pp : Format.formatter -> t -> unit
        val minus_one : t
        val of_int : int -> t
        val neg : t -> t
        val inv : t -> t
        val equal : t -> t -> bool
        val leq : t -> t -> bool
        val geq : t -> t -> bool
        val lt : t -> t -> bool
        val gt : t -> t -> bool
        val sign : t -> int
        val ( ~- ) : t -> t
        val ( + ) : t -> t -> t
        val ( - ) : t -> t -> t
        val ( * ) : t -> t -> t
        val ( / ) : t -> t -> t
        val ( = ) : t -> t -> bool
        val ( <> ) : t -> t -> bool
        val ( <= ) : t -> t -> bool
        val ( >= ) : t -> t -> bool
        val ( < ) : t -> t -> bool
        val ( > ) : t -> t -> bool
      end
    type t
    val of_list : (Monomial.t * Coeff.t) list -> t
    val to_list : t -> (Monomial.t * Coeff.t) list
    val zero : t
    val one : t
    val var : ?c:Coeff.t -> ?d:int -> int -> t
    val const : Coeff.t -> t
    val monomial : Monomial.t -> t
    val mult_scalar : Coeff.t -> t -> t
    val add : t -> t -> t
    val sub : t -> t -> t
    val mult : t -> t -> t
    val power : t -> int -> t
    exception Dimension_error
    val compose : t -> t list -> t
    val derive : t -> int -> t
    val eval : t -> Coeff.t list -> Coeff.t
    val compare : t -> t -> int
    val nb_vars : t -> int
    val degree : t -> int
    val degree_list : t -> int list
    val is_homogeneous : t -> bool
    val is_var : t -> (Coeff.t * int * int) option
    val is_const : t -> Coeff.t option
    val is_monomial : t -> Monomial.t option
    val ( ?? ) : int -> t
    val ( ! ) : Coeff.t -> t
    val ( *. ) : Coeff.t -> t -> t
    val ( ~- ) : t -> t
    val ( + ) : t -> t -> t
    val ( - ) : t -> t -> t
    val ( * ) : t -> t -> t
    val ( / ) : t -> Coeff.t -> t
    val ( /. ) : Coeff.t -> Coeff.t -> t
    val ( ** ) : t -> int -> t
    val pp : Format.formatter -> t -> unit
    val pp_names : string list -> Format.formatter -> t -> unit
    val merge :
      (Monomial.t -> Coeff.t option -> Coeff.t option -> Coeff.t option) ->
      t -> t -> t
    val fold : (Monomial.t -> Coeff.t -> '-> 'a) -> t -> '-> 'a
  end