Constraint-Based Reasoning by Eugene C. Freuder & Alan K. Mackworth