sig
  type pool = (string, int option) Hashtbl.t
  type var = Fol.Var.t
  val pool : unit -> ('a, 'b) Hashtbl.t
  val fresh_var : ('a, int option) Hashtbl.t -> '-> int option
  val fresh :
    (string, int option) Hashtbl.t -> string -> Formula.kind -> Fol.Var.t
  val var : Fol.Var.t -> 'Fol.d_term
  val tau_of_var : Fol.Var.t -> Formula.tau
  val name_of_var : Fol.Var.t -> string
  val basename_of_var : Fol.Var.t -> string
  val kind_of_var : Fol.Var.t -> Formula.kind
  val freshen : (string, int option) Hashtbl.t -> Fol.Var.t -> Fol.Var.t
end