@ARTICLE{AntoyHanus17FAOC,
author       = {Antoy, S. and Hanus, M.},
title        = {Transforming Boolean equalities into constraints},
year         = {2017},
journal      = {Formal Aspects of Computing},
number       = {3},
pages        = {475-494},
volume       = {29},
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.
}
}
