Set variables are variables which can eventually take a ground integer set as their value. They are characterized by a lower bound (the set of elements that are definitely in the set) and an upper bound (the set of elements that may be in the set). A set variable can be declared as follows:
SetVar :: []..[1,2,3,4,5,6,7]
If the lower bound is the empty set (like in this case) this can be written as
SetVar subset [1,2,3,4,5,6,7]
If the lower bound is the empty set and the upper bound is a set of consecutive integers, one can also declare it like
intset(SetVar, 1, 7)
which is equivalent to the above.
The predicates to declare sets are:
Set variables are by default printed in a particular way, e.g.
?- X :: [2,3]..[1,2,3,4], write(X). X{[2, 3] \/ ([] .. [1, 4]) : _308{[2 .. 4]}}
The curly brackets contain