Half-checking propagators
  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.
