From: notoria Date: Sun, 25 May 2025 11:38:56 +0000 (+0200) Subject: Strengthened `(mod)/2` in CLP(Z) X-Git-Tag: v0.10.0~43^2~1 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=4a6f86591cc8c5108910e4117b47395b2a817799;p=scryer-prolog.git Strengthened `(mod)/2` in CLP(Z) ?- 0 #= 2 mod #Y. clpz:(Y in inf.. -1\/1..sup), clpz:(2 mod#Y#=0). % unexpected Expected: clpz:(Y in-2.. -1\/1..2), clpz:(2 mod Y#=0) --- diff --git a/src/lib/clpz.pl b/src/lib/clpz.pl index 9daad75c..0f383094 100644 --- a/src/lib/clpz.pl +++ b/src/lib/clpz.pl @@ -5122,7 +5122,16 @@ run_propagator(pmod(X,Y,Z), MState) --> domain_remove_greater_than(YD, YMax, YD1) }, fd_put(Y, YD1, YPs) % queue_goal(Y #< Z) - ; true + ; Z =:= 0, + ( X =:= 0 -> + kill(MState) % trivial + ; % only 4 solutions {-abs(X),-1,1,abs(X)} + { YL is -abs(X), YU is abs(X), + fd_get(Y, YD0, YPs), + domain_remove_smaller_than(YD0, YL, YD1), + domain_remove_greater_than(YD1, YU, YD) }, + fd_put(Y, YD, YPs) + ) ) ) ; run_propagator(pmodz(X,Y,Z), MState),