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