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.
This commit is contained in:
notoria
2024-01-07 20:15:28 +01:00
parent fe371ff1d1
commit 770ead9c05

View File

@@ -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