Another idea is to phrase predicates in terms of set membership,
e.g.
x in odd_numbers
or
x in { x s.t. x in Z and mod(x, 2) = 1 }
or something, so x in foo_set is just a circumlocution for foo_p(x).
I believe that could be workable, although I'm not too crazy
about it, since I was secretly or not-so-secretly hoping that
sets could be implemented in terms of predicates instead of
vice versa.
A symbolic set implementation could, by convention, avoid
evaluating literal predicates e.g. { x s.t. oddp(x) } but that
would be confusing to explain since otherwise oddp(x) is
always evaluated.
best
Robert Dodier