sig
  exception TypeMismatch of string
  type arith_view = [ `Int of Z.t | `Other of Builtin.t | `Rat of Q.t ]
  val view : Builtin.t -> Builtin.ArithOp.arith_view
  val parse_num : string -> Builtin.t
  val sign : Builtin.t -> int
  val one_i : Builtin.t
  val zero_i : Builtin.t
  val one_rat : Builtin.t
  val zero_rat : Builtin.t
  val zero_of_ty : [< `Int | `Rat ] -> Builtin.t
  val one_of_ty : [< `Int | `Rat ] -> Builtin.t
  val is_zero : Builtin.t -> bool
  val is_one : Builtin.t -> bool
  val is_minus_one : Builtin.t -> bool
  val floor : Builtin.t -> Builtin.t
  val ceiling : Builtin.t -> Builtin.t
  val truncate : Builtin.t -> Builtin.t
  val round : Builtin.t -> Builtin.t
  val prec : Builtin.t -> Builtin.t
  val succ : Builtin.t -> Builtin.t
  val sum : Builtin.t -> Builtin.t -> Builtin.t
  val difference : Builtin.t -> Builtin.t -> Builtin.t
  val uminus : Builtin.t -> Builtin.t
  val product : Builtin.t -> Builtin.t -> Builtin.t
  val quotient : Builtin.t -> Builtin.t -> Builtin.t
  val quotient_e : Builtin.t -> Builtin.t -> Builtin.t
  val quotient_t : Builtin.t -> Builtin.t -> Builtin.t
  val quotient_f : Builtin.t -> Builtin.t -> Builtin.t
  val remainder_e : Builtin.t -> Builtin.t -> Builtin.t
  val remainder_t : Builtin.t -> Builtin.t -> Builtin.t
  val remainder_f : Builtin.t -> Builtin.t -> Builtin.t
  val to_int : Builtin.t -> Builtin.t
  val to_rat : Builtin.t -> Builtin.t
  val abs : Builtin.t -> Builtin.t
  val divides : Builtin.t -> Builtin.t -> bool
  val gcd : Builtin.t -> Builtin.t -> Builtin.t
  val lcm : Builtin.t -> Builtin.t -> Builtin.t
  val less : Builtin.t -> Builtin.t -> bool
  val lesseq : Builtin.t -> Builtin.t -> bool
  val greater : Builtin.t -> Builtin.t -> bool
  val greatereq : Builtin.t -> Builtin.t -> bool
  val divisors : Z.t -> Z.t list
end