To the Gates of HAL: A HAL Tutorial

Experience using constraint programming to solve real-life problems has shown that finding an efficient solution to the problem often requires experimentation with different constraint solvers or even building a problem-specific constraint solver. HAL is a new constraint logic programming language expressly designed to facilitate this process. It provides semi-optional type, mode and determinism declarations. These allow natural constraint specification by means of type overloading, better compile-time error checking and generation of more efficient run-time code. Importantly, it provides type classes which can be used to specify solver interfaces, allowing the constraint programmer to support modelling of a constraint problem independent of a particular solver, leading to easy "plug and play" experimentation with different solvers. Other interesting features include mutable global variables for implementing a constraint store, and dynamic scheduling and Constraint Handling Rules (CHRs) for combining, extending and writing new constraint solvers.

[1]  Peter J. Stuckey,et al.  A model for inter-module analysis and optimizing compilation , 2000, LOPSTR.

[2]  Peter J. Stuckey,et al.  Building Constraint Solvers with HAL , 2001, ICLP.

[3]  Thom W. Frühwirth,et al.  Theory and Practice of Constraint Handling Rules , 1998, J. Log. Program..

[4]  Peter J. Stuckey,et al.  Programming with Constraints: An Introduction , 1998 .

[5]  Peter J. Stuckey,et al.  Constraint Representation for Propagation , 1998, CP.

[6]  David Jeffery,et al.  Type classes in Mercury , 2000, Proceedings 23rd Australasian Computer Science Conference. ACSC 2000 (Cat. No.PR00518).

[7]  Blas Carlos Ruiz Jiménez,et al.  Una semántica operacional para CProlog , 1996 .

[8]  Peter J. Stuckey,et al.  Optimizing Compilation of Constraint Handling Rules , 2001, ICLP.

[9]  Christian Holzbaur Metastructures vs. Attributed Variables in the Context of Extensible Uniication | Applied for the Implementation of Clp Languages , 1992 .

[10]  Peter J. Stuckey,et al.  An Overview of HAL , 1999, CP.

[11]  Peter J. Stuckey,et al.  Model Checking in HAL , 2000, Computational Logic.

[12]  Roland H. C. Yap,et al.  The CLP( R ) language and system , 1992, TOPL.

[13]  Stefan Kaes,et al.  Parametric Overloading in Polymorphic Programming Languages , 1988, ESOP.

[14]  Philippe Codognet,et al.  A Minimal Extension of the WAM for clp(FD) , 1993, ICLP.

[15]  Luís Moniz Pereira,et al.  Proceedings of the First International Conference on Computational Logic , 2000 .

[16]  Manuel V. Hermenegildo,et al.  The CIAO multi-dialect compiler and system: A demo and status report , 1996, ICLP 1996.

[17]  Zoltan Somogyi,et al.  The Execution Algorithm of Mercury, an Efficient Purely Declarative Logic Programming Language , 1996, J. Log. Program..

[18]  Philip Wadler,et al.  How to make ad-hoc polymorphism less ad hoc , 1989, POPL '89.

[19]  Peter J. Stuckey,et al.  Type constraint solving for parametric and ad-hoc polymorphism , 1998 .

[20]  Peter J. Stuckey,et al.  Herbrand Constraint Solving in HAL , 1999, ICLP.