Fixed-point pruning of finite constraint domains (source code)

= Fixed-point pruning of finite constraint domains

Repeatedly apply a <constraint propagation> operation that only deletes values from finite <constraint domains>, preserves their order, and preserves every valid assignment. The sum of domain sizes is a nonnegative <loop variant> at every changing step, so repetition reaches a <fixed point>. For $N$ initial candidate values there are at most $N$ changing steps. An empty domain proves failure; a non-singleton fixed point may still require <backtracking> or explicit enumeration. Preservation of solutions, rather than mere deletion, is essential.