We could use clpfd to represent evens
That is what we did in the case of our logtalk implementation of sets.
:- object(evens, imports(default_set_behaviour), implements(set)).
:- use_module(library(clpfd)).
member(X) :- (integer(X); var(X)), X mod 2 #= 0.
:- end_object.
as an example. I have no problem with sets being problem-specific but I do want unions and intersections to be general enough that one could theoretically write sets which would behave well under combinations of union and intersection