In this section we cover several 
guidelines on how to use CHR to write constraint solvers and how to do 
so efficiently.
- Set semantics
The CHR system allows the presence of identical constraints, i.e. 
multiple constraints with the same functor, arity and arguments. For 
most constraint solvers, this is not desirable: it affects efficiency 
and possibly termination. Hence appropriate simpagation rules should be 
added of the form: [ constraint \constraint <=> true ]
 - Multi-headed rules
Multi-headed rules are executed more efficiently when the constraints 
share one or more variables.