@INPROCEEDINGS{AntoyHanus15LOPSTR,
author       = {Antoy, S. and Hanus, M.},
title        = {From Boolean Equalities to Constraints},
year         = {2015},
booktitle    = {Proceedings of the 25th International Symposium on Logic-Based
                Program Synthesis and Transformation (LOPSTR 2015)},
publisher    = {Springer LNCS 9527},
pages        = "73-88",
abstract = {
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.
}
}

