From 770ead9c05a5427503fffd4f7b2ce83b8d84eb30 Mon Sep 17 00:00:00 2001 From: notoria Date: Sun, 7 Jan 2024 20:15:28 +0100 Subject: [PATCH] Remove `min/2` and `max/2` when possible ?- A #= min(A,B). clpz:(B#>=A), clpz:(A#=min(A,B)). % unexpected. ?- A #= min(A,0). clpz:(A in inf..0), clpz:(A#=min(A,0)). % unexpected. --- src/lib/clpz.pl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib/clpz.pl b/src/lib/clpz.pl index c0c30681..d699cad1 100644 --- a/src/lib/clpz.pl +++ b/src/lib/clpz.pl @@ -5384,6 +5384,7 @@ run_propagator(pmax(X,Y,Z), MState) --> ; Z > X -> queue_goal(Z = Y) ; { false } % Z < X ) + ; Y == Z -> kill(MState), queue_goal(Y #>= X) ; { fd_get(Y, _, YInf, YSup, _) }, ( { YInf cis_gt n(X) } -> queue_goal(Z = Y) ; { YSup cis_lt n(X) } -> queue_goal(Z = X) @@ -5419,6 +5420,7 @@ run_propagator(pmin(X,Y,Z), MState) --> ; Z < X -> Z = Y ; { false } % Z > X ) + ; Y == Z -> kill(MState), queue_goal(Y #=< X) ; { fd_get(Y, _, YInf, YSup, _) }, ( { YSup cis_lt n(X) } -> Z = Y ; { YInf cis_gt n(X) } -> Z = X -- 2.54.0