sig
  type pred = Mpa.Q.t -> Term.t -> bool
  val is_true : Arith.Monomials.pred
  val is_pos : Arith.Monomials.pred
  val is_neg : Arith.Monomials.pred
  val is_var : Term.t -> Arith.Monomials.pred
  val mapq : (Mpa.Q.t -> Mpa.Q.t) -> Term.t -> Term.t
  val fold :
    Arith.Monomials.pred ->
    (Mpa.Q.t -> Term.t -> '-> 'a) -> Term.t -> '-> 'a
  val exists : Arith.Monomials.pred -> Term.t -> bool
  val for_all : Arith.Monomials.pred -> Term.t -> bool
  val variable_choose : Arith.Monomials.pred -> Term.t -> Term.t
  val coefficient_choose : Arith.Monomials.pred -> Term.t -> Mpa.Q.t
  module Pos :
    sig
      val is_empty : Term.t -> bool
      val exists : Arith.Monomials.pred -> Term.t -> bool
      val for_all : Arith.Monomials.pred -> Term.t -> bool
      val fold : (Mpa.Q.t -> Term.t -> '-> 'a) -> Term.t -> '-> 'a
      val iter : (Mpa.Q.t -> Term.t -> unit) -> Term.t -> unit
      val mem : Term.t -> Term.t -> bool
      val variable_choose : (Mpa.Q.t -> Term.t -> bool) -> Term.t -> Term.t
      val variable_least_of : Term.t -> Term.t
      val coefficient_of : Term.t -> Term.t -> Mpa.Q.t
    end
  module Neg :
    sig
      val is_empty : Term.t -> bool
      val exists : Arith.Monomials.pred -> Term.t -> bool
      val for_all : Arith.Monomials.pred -> Term.t -> bool
      val fold : (Mpa.Q.t -> Term.t -> '-> 'a) -> Term.t -> '-> 'a
      val iter : (Mpa.Q.t -> Term.t -> unit) -> Term.t -> unit
      val mem : Term.t -> Term.t -> bool
      val variable_choose : (Mpa.Q.t -> Term.t -> bool) -> Term.t -> Term.t
      val variable_least_of : Term.t -> Term.t
      val coefficient_of : Term.t -> Term.t -> Mpa.Q.t
    end
end