sig
  module Coeff :
    sig
      type t = float
      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