sig
  type t
  val i2e : int -> Arith.t
  val fd2e : Var.Fd.t -> Arith.t
  val e2fd : Arith.t -> Var.Fd.t
  val ( +~ ) : Arith.t -> Arith.t -> Arith.t
  val ( -~ ) : Arith.t -> Arith.t -> Arith.t
  val ( *~ ) : Arith.t -> Arith.t -> Arith.t
  val ( **~ ) : Arith.t -> int -> Arith.t
  val ( /~ ) : Arith.t -> Arith.t -> Arith.t
  val ( %~ ) : Arith.t -> Arith.t -> Arith.t
  val abs : Arith.t -> Arith.t
  val sum : Arith.t array -> Arith.t
  val sum_fd : Var.Fd.t array -> Arith.t
  val scalprod : int array -> Arith.t array -> Arith.t
  val scalprod_fd : int array -> Var.Fd.t array -> Arith.t
  val prod : Arith.t array -> Arith.t
  val prod_fd : Var.Fd.t array -> Arith.t
  val fprint : Pervasives.out_channel -> Arith.t -> unit
  val eval : Arith.t -> int
  val min_of_expr : Arith.t -> int
  val max_of_expr : Arith.t -> int
  val min_max_of_expr : Arith.t -> int * int
  val ( <~ ) : Arith.t -> Arith.t -> Cstr.t
  val ( <=~ ) : Arith.t -> Arith.t -> Cstr.t
  val ( =~ ) : Arith.t -> Arith.t -> Cstr.t
  val ( >=~ ) : Arith.t -> Arith.t -> Cstr.t
  val ( >~ ) : Arith.t -> Arith.t -> Cstr.t
  val ( <>~ ) : Arith.t -> Arith.t -> Cstr.t
  val shift : Var.Fd.t -> int -> Var.Fd.t
  val ( <~~ ) : Arith.t -> Arith.t -> Arith.t
  val ( <=~~ ) : Arith.t -> Arith.t -> Arith.t
  val ( =~~ ) : Arith.t -> Arith.t -> Arith.t
  val ( >=~~ ) : Arith.t -> Arith.t -> Arith.t
  val ( >~~ ) : Arith.t -> Arith.t -> Arith.t
  val ( <>~~ ) : Arith.t -> Arith.t -> Arith.t
  val get_boolsum_threshold : unit -> int
  val set_boolsum_threshold : int -> unit
end