Extending a Concurrent Constraint Language by Propagators

To solve large and hard discrete combinatorial problems it is often necessary to design new constraints. Current systems either focus on the high-level modeling aspect or on very efficient implementation technology. While each approach lacks the advantages of the other one, this paper describes the combination of both approaches in the concurrent constraint language Oz. Through an interface to program new finite domain constraints efficiently in C++, the benefits of a high-level language to model a problem and of an efficient implementation technology for user-defined constraints are inherited. Constraints and the Oz runtime system are linked together only by the interface abstractions. The interface supplies adequate abstractions to implement advanced algorithmic techniques. It provides, for example, also means to reflect the validity of a constraint and to control and inspect the state of the actual implementation of a constraint. This allows to solve demanding combinatorial problems, as for instance hard scheduling problems. The described interface is not limited to concurrent constraint languages or a particular constraint system.