
Over the last ten years, constraint logic programming (CLP) has evolved into a interesting research held. In this tutorial we show that CLP is now also an industrial reality with an increasing number of fielded applications. The tutorial is organized in the following parts: We start with a short background discussion showing why CLP is thought interesting for application development. We then give an overview of different tools, followed by a survey of their applications and describe several large-scale applications based on CHIP in more detail. Finally, we evaluate some of the claims made for CLP from an industrial point of view.
This paper describes the application of CLP (constraint logic programming) to several digital circuit design problems. It is shown that logic programming together with efficient constraint propagation techniques is an adequate programming environment for complex real world problems like high level synthesis, simulation, code generation, and memory synthesis. Different types of constraints — Boolean, integer, symbolic, structural, and type binding ones — are used to express relations between the components of a digital circuit and efficient propagation is achieved by the coroutining mechanism. To deal with the increasing complexity of digital circuits we use HDL's (hardware description languages) to represent structure and behaviour of circuits.
Set constraints are inclusion relations between expressions denoting sets of ground terms over a ranked alphabet. They are the main ingredient in set-based program analysis. In this paper we describe a constraint logic programming languageclp(sc) over set constraints in the style of J. Jaffar and J.-L. Lassez (1987, “Proc. Symp. Principles of Programming Languages 1987,” pp. 111–119). The language subsumes ordinary logic programs over an Herbrand domain. We give an efficient unification algorithm and operational, declarative, and fixpoint semantics. We show how the language can be applied in set-based program analysis by deriving explicitly the monadic approximation of the collecting semantics of N. Heintze and J. Jaffar (1992, “Set Based Program Analysis”; 1990, “Proc. 17th Symp. Principles of Programming Languages,” pp. 197–209).
Future redundant inequalities in a constraint logic program are those that are guaranteed to be subsumed after no more than one subsequent procedure call, usually in the context of a recursive procedure. It has been noted that such inequalities need only be tested for consistency with the current constraint set, thus resulting in dramatic savings in execution speed and space usage. We generalize the notion of future redundancy in a number of ways and thus broaden its applicability. Thus we show how to dramatically improve the performance of a wider class of programs that rely heavily on linear inequalities.