Background: Constraint Satisfaction Problems
a set of variables which take their values from finite, discrete domains
a set of constraints; a constraint is represented as a predicate
to find the value assignment of the variables that satisfies all constraints