sig
  val bitv2nat : Bitv.t -> int
  val nat2bitv : int -> int -> Bitv.t
  val width : Term.t -> int option
  val d_const : Term.t -> Bitv.t
  val mk_const : Bitv.t -> Term.t
  val mk_eps : unit -> Term.t
  val mk_one : int -> Term.t
  val mk_zero : int -> Term.t
  val mk_conc : int -> int -> Term.t -> Term.t -> Term.t
  val mk_sub : int -> int -> int -> Term.t -> Term.t
  val is_interp : Term.t -> bool
  val is_const : Bitv.t -> Term.t -> bool
  val is_zero : Term.t -> bool
  val is_one : Term.t -> bool
  val is_diseq : Term.t -> Term.t -> bool
  val sigma : Sym.bv -> Term.t list -> Term.t
  val iter : (Term.t -> unit) -> Term.t -> unit
  val fold : (Term.t -> '-> 'a) -> Term.t -> '-> 'a
  val map : (Term.t -> Term.t) -> Term.t -> Term.t
  val apply : Term.Equal.t -> Term.t -> Term.t
  val solve : Term.t * Term.t -> (Term.t * Term.t) list
end