A more compact assignment

So far an assignment is a tuple (P, Q, R); with more variables the tuple becomes hard to manage.

We store a whole assignment in a single integer, one bit per variable:

bit 2r
bit 1q
bit 0p
A = 4 = 0b100 → r = 1, q = 0, p = 0, i.e. (0, 0, 1)
assignment(A) :- A in [0b000 .. 0b111].
0b… is a binary literal, and X in [lo .. hi] ranges over the integers from lo to hi.

So this one rule lists all eight assignments.