sig
  type t = Condition.event list * Condition.guard list
  and event = string
  and guard = Expr.t
  type env = (string * Expr.value) list
  exception Illegal_guard_expr of Expr.t
  val vars_of : Condition.t -> Expr.VarSet.t
  val events_of : Condition.t -> Expr.VarSet.t
  val eval_guard : Condition.env -> Condition.guard -> bool
  val eval_guards : Condition.env -> Condition.guard list -> bool
  val rename : (string -> string) -> Condition.t -> Condition.t
  val subst : Eval.env -> Condition.t -> Condition.t
  val string_of_guard : Condition.guard -> string
  val to_string : Condition.t -> string
end