  Previous results on proving confluence for Constraint Handling Rules are
extended in two ways in order to allow a larger and more realistic class of CHR
programs to be considered confluent. Firstly, we introduce the relaxed notion
of confluence modulo equivalence into the context of CHR: while confluence for
a terminating program means that all alternative derivations for a query lead
to the exact same final state, confluence modulo equivalence only requires the
final states to be equivalent with respect to an equivalence relation tailored
for the given program. Secondly, we allow non-logical built-in predicates such
as var/1 and incomplete ones such as is/2, that are ignored in previous work on
confluence.
  To this end, a new operational semantics for CHR is developed which includes
such predicates. In addition, this semantics differs from earlier approaches by
its simplicity without loss of generality, and it may also be recommended for
future studies of CHR.
  For the purely logical subset of CHR, proofs can be expressed in first-order
logic, that we show is not sufficient in the present case. We have introduced a
formal meta-language that allows reasoning about abstract states and
derivations with meta-level restrictions that reflect the non-logical and
incomplete predicates. This language represents subproofs as diagrams, which
facilitates a systematic enumeration of proof cases, pointing forward to a
mechanical support for such proofs.
