sig
  val init : (Smt.Symbol.t * Smt.Type.t) list -> unit
  val close : unit -> unit
  val assign_constr : Smt.Symbol.t -> Hstring.t -> unit
  val assign_var : Smt.Symbol.t -> Smt.Symbol.t -> unit
  val print : unit -> unit
  val get_variants : Smt.Symbol.t -> Hstring.HSet.t
end