'aX=bY+c'(A,X,B,Y,C) =>
'aX=bY+c_reduce_domain'(A,X,B,Y,C),
'aX=bY+c_forward'(A,X,B,Y,C),
'aX=bY+c_interval'(A,X,B,Y,C),
'aX=bY+c_arc'(A,X,B,Y,C).
'aX=bY+c_arc'(A,X,B,Y,C) =>
'aX in bY+c_arc'(A,X,B,Y,C), % reduce X when Y changes
MC is -C,
'aX in bY+c_arc'(B,Y,A,X,MC). % reduce Y when X changes
'aX in bY+c_arc'(A,X,B,Y,C),var(X),var(Y),{dom(Y,Ey)} =>
T is B*Ey+C,
Ex is T//A,
(A*Ex=:=T -> fd_set_false(X,Ex);true).
'aX in bY+c_arc'(A,X,B,Y,C) => true.
Whenever an element, Ey, is excluded from the domain of Y, the propagator 'aX in bY+c_arc'(A,X,B,Y,C) is activated. If both X and Y are variables, the propagator will exclude Ex, which is the counterpart of Ey, from the domain of X. Again, if either X or Y becomes an integer, the propagator does nothing. The forward-checking rule will take care of that situation.