sig
  type ('a, 'typ) t
  val empty : ('a, 'typ) Syntax.Expr.Set.t
  val add :
    ('a, 'typ) Syntax.expr ->
    ('a, 'typ) Syntax.Expr.Set.t -> ('a, 'typ) Syntax.Expr.Set.t
  val union :
    ('a, 'typ) Syntax.Expr.Set.t ->
    ('a, 'typ) Syntax.Expr.Set.t -> ('a, 'typ) Syntax.Expr.Set.t
  val inter :
    ('a, 'typ) Syntax.Expr.Set.t ->
    ('a, 'typ) Syntax.Expr.Set.t -> ('a, 'typ) Syntax.Expr.Set.t
  val enum : ('a, 'typ) Syntax.Expr.Set.t -> ('a, 'typ) Syntax.expr BatEnum.t
  val mem : ('a, 'typ) Syntax.expr -> ('a, 'typ) Syntax.Expr.Set.t -> bool
end