From Boolean Equalities to Constraints

by Sergio Antoy, Michael Hanus

Proceedings of the 25th International Symposium on Logic-Based Program Synthesis and Transformation (LOPSTR 2015), Springer LNCS 9527, pp. 73-88, 2015

Although functional as well as logic languages use equality to discriminate between logically different cases, the operational meaning of equality is different in such languages. Functional languages reduce equational expressions to their Boolean values, True or False, logic languages use unification to check the validity only and fail otherwise. Consequently, the language Curry, which amalgamates functional and logic programming features, offers two kinds of equational expressions so that the programmer has to distinguish between these uses. We show that this distinction can be avoided by providing an analysis and transformation method that automatically selects the appropriate operation. Without this distinction in source programs, the language design can be simplified and the execution of programs can be optimized. As a consequence, we show that one kind of equational expressions is sufficient and unification is nothing else than an optimization of Boolean equality.

Preprint (PDF) BibTeX-Entry Online