To take a simple example: a chain has 5 links, each link capable of holding a maximum weight of 5, 7, 4, 8 and 6 tonnes respectively. The maximum weight the chain can hold is clearly 4 tonnes – the limit imposed by the weakest link. In this case, all 5 links have limits to their strength, but the 3rd link is the constraint because it is the greatest restriction on the system.
Constraints differ from the common primitives of other programming languages in that they do not specify a set of steps for finding a solution but rather the properties such solution is expected to satisfy.
Constraints are embedded in an imperative language in Kaleidoscope.
Constraint propagation may solve the problem by reducing all domains to a single value, it may prove that the problem has no solution by reducing a domain to the empty set, but may also terminate without proving satisfiability or unsatisfiability.