From: notoria Date: Sun, 25 May 2025 11:37:28 +0000 (+0200) Subject: Strengthened `(mod)/2` in CLP(Z) X-Git-Tag: v0.10.0~43^2~2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=37ac5bb3c1bcb4e7d973c9074cebf3536c2bb6de;p=scryer-prolog.git Strengthened `(mod)/2` in CLP(Z) ?- Z = 8, X = 9, #Z #= #X mod #Y. Z = 8, X = 9, clpz:(Y in 9..sup), clpz:(9 mod#Y#=8). % unexpected Expected: false --- diff --git a/src/lib/clpz.pl b/src/lib/clpz.pl index b14546bc..9daad75c 100644 --- a/src/lib/clpz.pl +++ b/src/lib/clpz.pl @@ -5088,11 +5088,21 @@ run_propagator(pmod(X,Y,Z), MState) --> ; nonvar(Z), nonvar(X) -> ( Z > 0 -> ( X < 0 -> true - ; X >= Z + ; X >= Z, + % due to X = Z+Y*_ and Y > Z + ( X-Z > 0 -> + X-Z > Z + ; true + ) ) ; Z < 0 -> ( X > 0 -> true - ; X =< Z + ; X =< Z, + % due to X = Z+Y*_ and Y < Z + ( X-Z < 0 -> + X-Z < Z + ; true + ) ) ; Z =:= 0 % Multiple solutions so do nothing special. ),