sig
  type varexp = Var.t * int
  type monomial = Arith.Poly.varexp list
  type term = Mpqf.t * Arith.Poly.monomial
  type expr = Arith.Poly.term list
  val compare_varexp : Arith.Poly.varexp -> Arith.Poly.varexp -> int
  val compare_monomial : Arith.Poly.monomial -> Arith.Poly.monomial -> int
  val normalize_monomial : Arith.Poly.monomial -> Arith.Poly.monomial
  val normalize : Arith.Poly.expr -> Arith.Poly.expr
  val normalize_full : Arith.Poly.expr -> Arith.Poly.expr
  val compare : Arith.Poly.expr -> Arith.Poly.expr -> int
  val cst : Mpqf.t -> Arith.Poly.expr
  val var : Var.t -> Arith.Poly.expr
  val add : Arith.Poly.expr -> Arith.Poly.expr -> Arith.Poly.expr
  val sub : Arith.Poly.expr -> Arith.Poly.expr -> Arith.Poly.expr
  val scale :
    Mpqf.t * Arith.Poly.monomial -> Arith.Poly.expr -> Arith.Poly.expr
  val mul : Arith.Poly.expr -> Arith.Poly.expr -> Arith.Poly.expr
  val div : Arith.Poly.expr -> Arith.Poly.expr -> Arith.Poly.expr
  val negate : Arith.Poly.expr -> Arith.Poly.expr
  val support : Arith.Poly.expr -> Var.Set.t
  val rename : Arith.Poly.expr -> Var.t Var.Map.t -> Arith.Poly.expr
  val normalize_as_constraint : Arith.Poly.expr -> Arith.Poly.expr
  val print : Format.formatter -> Arith.Poly.expr -> unit
end