sig
  type t = string
  module Vars :
    sig
      type elt = string
      type t
      val empty : Var.Vars.t
      val is_empty : Var.Vars.t -> bool
      val mem : Var.Vars.elt -> Var.Vars.t -> bool
      val add : Var.Vars.elt -> Var.Vars.t -> Var.Vars.t
      val singleton : Var.Vars.elt -> Var.Vars.t
      val remove : Var.Vars.elt -> Var.Vars.t -> Var.Vars.t
      val union : Var.Vars.t -> Var.Vars.t -> Var.Vars.t
      val inter : Var.Vars.t -> Var.Vars.t -> Var.Vars.t
      val diff : Var.Vars.t -> Var.Vars.t -> Var.Vars.t
      val compare : Var.Vars.t -> Var.Vars.t -> int
      val equal : Var.Vars.t -> Var.Vars.t -> bool
      val subset : Var.Vars.t -> Var.Vars.t -> bool
      val iter : (Var.Vars.elt -> unit) -> Var.Vars.t -> unit
      val fold : (Var.Vars.elt -> '-> 'a) -> Var.Vars.t -> '-> 'a
      val for_all : (Var.Vars.elt -> bool) -> Var.Vars.t -> bool
      val exists : (Var.Vars.elt -> bool) -> Var.Vars.t -> bool
      val filter : (Var.Vars.elt -> bool) -> Var.Vars.t -> Var.Vars.t
      val partition :
        (Var.Vars.elt -> bool) -> Var.Vars.t -> Var.Vars.t * Var.Vars.t
      val cardinal : Var.Vars.t -> int
      val elements : Var.Vars.t -> Var.Vars.elt list
      val min_elt : Var.Vars.t -> Var.Vars.elt
      val max_elt : Var.Vars.t -> Var.Vars.elt
      val choose : Var.Vars.t -> Var.Vars.elt
      val split :
        Var.Vars.elt -> Var.Vars.t -> Var.Vars.t * bool * Var.Vars.t
      val of_list : Var.Vars.elt list -> Var.Vars.t
      val print : Pervasives.out_channel -> Var.Vars.t -> unit
    end
end