Constraint Logic Programming

CLP(D) is a language framework

syntax much like Prolog

Prolog rules:

P :- Q1, ... Qn CLP rules P :- Q1, ... Qn, C1, ... Cm where constraints Ci are over some domain D

Example CLP languages:

In contrast to Prolog, the function symbols for constraints over the domain D are interpreted

Examples:

cf(C,F) :- F = 1.8*C + 32. ?- 2*A+B=7, 3*A+B=9. A=2, B=3 ?- X*X*X + X = 10. ("maybe" answer)
To run clpr on lynx/grizzly/wolf:
put this in your .login setenv CLPRLIB ~borning/clpr/lib then execute: ~borning/bin/clpr For example programs see ~borning/clpr/myprogs/* and ~borning/clpr/progs/* )

ordinary prolog examples (no use of constraints on the reals):

examples illustrating use of constraints: unification vs equality -- there are actually two domains: the Herbrand universe and D (in this case the real numbers)

unification is solving equations over the Herbrand universe

For a given Prolog program, the Herbrand universe contains all values that can possibly be produced by the program example:

p(f(X)) :- q(X). q(a). q(b). Herbrand Universe:
a, b, f(a), f(b), f(f(a)), f(f(b)), ...
Other example -- peano arithmetic in Prolog /* addition */ plus(X,0,X). plus(X,s(Y),s(Z)) :- plus(X,Y,Z). Herbrand universe is 0, s(0), s(s(0)), ...

In contrast, CLP programs are not restricted to the Herbrand Universe


CLP(R) system

an instance of the CLP scheme: explores efficient implementation; used for a variety of applications

benefits of CLP scheme (pointed out in paper)

some efficiency issues:
[online demo happens here]
points to notice from demo:

The CLP(R) interpreter

Constraint Logic Abstract Machine (CLAM) -- derived from Warren Abstract Machine (WAM)

The Engine

The engine is a structure sharing Prolog interpreter (see Figure 2, page 360)

Distinguish between constraints that can be handled in the engine (e.g. nonsolver variable = number) and those that must be passed to the interface. Constraints that can be handled in the engine are shown in figure 3, page 361.

The Interface

Simplify input constraint by evaluating arithmetic expressions. If constraint is ground, test it

If there is one non-solver variable, set up a binding. Otherwise put constraint into a canonical form and invoke solver.

Solver

solver modules: Equality Solver: variant of Gaussian elimination.

Represent nonparametric variables in terms of parametric variables and constants. Central data structure: a tableau (2d array). Each row represents some nonparametric variable as a linear combination of parametric variables.

Equality solver is invoked by the interface with a new equality, from the inequality solver with an implicit equality, or with a delayed constraint from the nonlinear handler. Inequality Solver: adapted from first phase of two-phase Simplex algorithm

augmentations of basic Simplex algorithm:

detection of implicit equalities (could scrap equality solver and just do it all with Simplex ...)

Nonlinear handler: delay nonlinear constraints until they become linear


Hierarchical Constraint Logic Programming

HCLP is a generalization of the CLP scheme that allows both required and preferential constraints

Like CLP, it is parameterized by D, the domain of the constraints.
See UW papers on HCLP for more information.