Constraint Processing and Logic Programming

Constraint processing is complementary to logic programming: logic programming is concerned with proving theorems from a set Γ of sentences which are assumed to have a model; constraint processing is concerned with finding a model for Γ. This view of constraint processing has been realized in the language Galileo which we introduce in this paper. In Galileo, any sentence (atomic, compound or quantified) from full first-order classical logic is a well-formed constraint. In fact, classical logic sentences are only a subset of the well-formed constraints in Galileo; any sentence in first-order Free Logic, which subsumes classical logic, is a well-formed constraint in Galileo. This expressive power comes at the price of involving the user in the constraint satisfaction process. The user of a Galileo program and the Galileo interpreter form a composite constraint satisfaction system in which the run-time system performs what we call constraint monitoring. We have successfully used Galileo to implement several CAD applications, fragments from one of which we present in the paper, in order to illustrate the usage of Free Logic.