Propagators are central to the success of constraint programming, that
is contracting functions removing values proven not to be in any
solution of a given constraint. The literature contains numerous
propagation algorithms, for many different constraints, and common to
all these propagation algorithms is the notion of correctness: only
values that appear in no solution to the respective constraint
may be removed.
In this paper half-checking propagators are introduced, for
which the only requirements are that identified solutions (by the
propagators) are actual solutions (to the corresponding constraints),
and that the propagators are contracting. In particular, a
half-checking propagator may remove solutions resulting in an
incomplete solving process, but with the upside that (good) solutions
may be found faster. Overall completeness can be obtained by running
half-checking propagators as one component in a portfolio solving
process. Half-checking propagators opens up a wider variety of
techniques to be used when designing propagation algorithms, compared
to what is currently available.
A formal model for half-checking propagators is introduced, together
with a detailed description of how to support such propagators in a
constraint programming system. Three general directions for creating
half-checking propagation algorithms are introduced, and used for
designing new half-checking propagators for the cost-circuit
constraint as examples. The new propagators are implemented in the
Gecode system.