  In this paper we discuss the optimizing compilation of Constraint Handling
Rules (CHRs). CHRs are a multi-headed committed choice constraint language,
commonly applied for writing incremental constraint solvers. CHRs are usually
implemented as a language extension that compiles to the underlying language.
In this paper we show how we can use different kinds of information in the
compilation of CHRs in order to obtain access efficiency, and a better
translation of the CHR rules into the underlying language, which in this case
is HAL. The kinds of information used include the types, modes, determinism,
functional dependencies and symmetries of the CHR constraints. We also show how
to analyze CHR programs to determine this information about functional
dependencies, symmetries and other kinds of information supporting
optimizations.
