Abstract. Constraint Logic Programming (CLP) is one of the most successful branches of Logic Programming; it attracts the interest of theoreticians and practitioners, and it is currently used in many commercial applications. Since the original proposal, it has developed enormously: many languages and systems are now available either as open source programs or as commercial systems.Also, CLP has been one of the technologies able to recruit researchers from other communities to the declarative programming cause. Current CLP engines include technologies and results developed in other communities, which themselves discovered logic as an invaluable tool to model and solve real-life problems.
The CLP ParadigmConstraint Logic Programming (CLP) [7] represents a successful attempt to merge the best features of logic programming (LP) and constraint solving.Constraint solving [127,6,56,31] includes a variety of expressive modelling frameworks and efficient solving tools for real-life problems that can be described via a set of variables and constraints over them. A constraint is just a restriction imposed over the combination of values of some variables of the problem. Solving a problem with constraints means finding a way to assign values to all its variables such that all constraints are satisfied. Constraint solving methods have been successfully applied to many application domains, such as scheduling, planning, resource allocation, vehicle routing, computer networks, and bioinformatics [137,127,51].Embedding the notion of constraint into a high-level programming language allows for a more flexible and practical constraint processing environment, where constraints can be represented as formulae and can be incrementally accumulated. Moreover, the presence of constraints in a programming language usually augments its expressive power, in the sense that some complex relations can be defined easily by means of constraints, and there are also efficient techniques to prove them.For these reasons, constraints have been embedded in many programming environments, but some are more suitable than others. For example, the fact that constraints can be seen as relations or predicates, that constraint solving can be seen as a generalized form of unification, that their conjunction can be seen as a logical and, and that backtracking search is the base methodology to A. Dovier, E. Pontelli (Eds.): 25