19.2.1 Model Generation vs Model Elimination

Many of you may have grown up, professionally speaking, on a diet of logic programming or on even more classical fare. As such, you have been encouraged to think about problems in a generative/constructive way. Constraint programming requires a completely different perspective. This is best illustrated with an analogy:

In constraint programming, you state an ideal, then remove undesirable models from consideration by incremental strengthening of your judgement. You might look at it as computational philosophy... or not, if you happen to be a philosopher! This chapter illustrates the point quite clearly with dependency structures:

It is important not to fall in the generate and test trap. In order to take full advantage of constraint programming, you must model your problem in a way that takes maximal advantage of constraint propagation. In constraint programming, negative information plays an essential role: you first state a universal truth, and then indicate which parts of it are not true. In the end, as Sherlock Holmes might put it, ``what ever remains must be the case.''


Denys Duchier, Claire Gardent and Joachim Niehren
Version 1.3.99 (20050412)