sig
  type t = Var.t Var.Map.t
  type var = Var.t
  type var_container = Var.Set.t
  val empty : t
  val singleton : var -> var -> t
  val of_list : (var * var) list -> t
  val avoid : var_container -> var_container -> t
  val pp : Format.formatter -> t -> unit
  val to_string : t -> string
  val apply : t -> var -> var
  val partition : t -> t * t
  val strip : t -> t
  val mk_free_subst : var_container -> var_container -> t
  val mk_ex_subst : var_container -> var_container -> t
end