sig
  module Coeff : Scalar.S
  type t
  val of_list : (Monomial.t * Coeff.t) list -> Polynomial.S.t
  val to_list : Polynomial.S.t -> (Monomial.t * Coeff.t) list
  val zero : Polynomial.S.t
  val one : Polynomial.S.t
  val var : ?c:Coeff.t -> ?d:int -> int -> Polynomial.S.t
  val const : Coeff.t -> Polynomial.S.t
  val monomial : Monomial.t -> Polynomial.S.t
  val mult_scalar : Coeff.t -> Polynomial.S.t -> Polynomial.S.t
  val add : Polynomial.S.t -> Polynomial.S.t -> Polynomial.S.t
  val sub : Polynomial.S.t -> Polynomial.S.t -> Polynomial.S.t
  val mult : Polynomial.S.t -> Polynomial.S.t -> Polynomial.S.t
  val power : Polynomial.S.t -> int -> Polynomial.S.t
  exception Dimension_error
  val compose : Polynomial.S.t -> Polynomial.S.t list -> Polynomial.S.t
  val derive : Polynomial.S.t -> int -> Polynomial.S.t
  val eval : Polynomial.S.t -> Coeff.t list -> Coeff.t
  val compare : Polynomial.S.t -> Polynomial.S.t -> int
  val nb_vars : Polynomial.S.t -> int
  val degree : Polynomial.S.t -> int
  val degree_list : Polynomial.S.t -> int list
  val is_homogeneous : Polynomial.S.t -> bool
  val is_var : Polynomial.S.t -> (Coeff.t * int * int) option
  val is_const : Polynomial.S.t -> Coeff.t option
  val is_monomial : Polynomial.S.t -> Monomial.t option
  val ( ?? ) : int -> Polynomial.S.t
  val ( ! ) : Coeff.t -> Polynomial.S.t
  val ( *. ) : Coeff.t -> Polynomial.S.t -> Polynomial.S.t
  val ( ~- ) : Polynomial.S.t -> Polynomial.S.t
  val ( + ) : Polynomial.S.t -> Polynomial.S.t -> Polynomial.S.t
  val ( - ) : Polynomial.S.t -> Polynomial.S.t -> Polynomial.S.t
  val ( * ) : Polynomial.S.t -> Polynomial.S.t -> Polynomial.S.t
  val ( / ) : Polynomial.S.t -> Coeff.t -> Polynomial.S.t
  val ( /. ) : Coeff.t -> Coeff.t -> Polynomial.S.t
  val ( ** ) : Polynomial.S.t -> int -> Polynomial.S.t
  val pp : Stdlib.Format.formatter -> Polynomial.S.t -> unit
  val pp_names :
    string list -> Stdlib.Format.formatter -> Polynomial.S.t -> unit
  val merge :
    (Monomial.t -> Coeff.t option -> Coeff.t option -> Coeff.t option) ->
    Polynomial.S.t -> Polynomial.S.t -> Polynomial.S.t
  val fold :
    (Monomial.t -> Coeff.t -> '-> 'a) -> Polynomial.S.t -> '-> 'a
end