The implementation achieves domain consistency iff C is instantiated at call time, otherwise only bounds consistency.
    ?- [X,Y] &:: weekday, shift(X, 1, Y).
    X = X{[mo, tu, we, th, fr, sa]}
    Y = Y{[tu, we, th, fr, sa, su]}
    There is 1 delayed goal.
    Yes (0.00s cpu)
    [eclipse 4]: [X,Y]&::weekday, shift(X,C,Y). 
    X = X{[mo, tu, we, th, fr, sa, su]}
    C = C{-6 .. 6}
    Y = Y{[mo, tu, we, th, fr, sa, su]}
    There are 3 delayed goals.
    Yes (0.00s cpu)
    ?- shift(we, 1, th).
    Yes (0.00s cpu)
    ?- shift(we, 2, fr).
    Yes (0.00s cpu)
    ?- shift(X, -1, th).
    X = fr
    Yes (0.00s cpu)
    ?- shift(tu, X, fr).
    X = 3
    Yes (0.00s cpu)
    ?- shift(tu,X,Y).
    X = X{-1 .. 5}
    Y = Y{[mo, tu, we, th, fr, sa, su]}
    Delayed goals: ...
    ?- shift(tu, 1, th).
    No (0.00s cpu)
    ?- shift(X, 1, Y).
    Arguments have no domains in shift(X, 1, Y) in module eclipse
    Abort
    ?- X &:: weekday, shift(X, 1, red).
    Arguments have different domains (weekday,colour) in shift(X, 1, red) ...
    Abort