2.3.2 Observing Propagation

It might be instructive to observe propagation independently from distribution. Propagation relies on the concept of a constraint store which is simply a set of simple constraints on values of variables. New information can be added to the constraint store by propagation. Propagation is done by propagators. These are agents observing the constraint store and getting active whenever they are able to add information. The Oz programmer can observe the constraint store by using the Oz Browser. For instance, feed the following Oz-code into the Oz-compiler:

declare X Y Z in [X Y Z] ::: 1#10  
{Browse [X Y Z]}

This declares three new variables X Y Z for integers in the domain 1, ..., 10 and browses whatever the constraint store knows about their values. When new information is added the browser updates its output. For instance, you may feed the propagator:

   2 * Y =: Z

This propagator tells the constraint store new information on upper and lower bounds of Y and Z whenever possible. For example, it adds the information that Y must be at most 5 and Z must be at least 2 to the constraint store. However, it cannot tell the constraint store to remove odd numbers from the interior of the domain of Z. We next might feed a new propagator stating that X is strictly smaller than Y:

   X <: Y

One of the effect of this propagator is that 1 is removed from the lower bound of Y. This reactivates the observing propagators * Y =: Z which excludes 2 and 3 from the domain of Z.


Denys Duchier, Claire Gardent and Joachim Niehren
Version 1.2.4 (20020829)