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:
@@ -5384,6 +5384,7 @@ run_propagator(pmax(X,Y,Z), MState) -->
|
|||||||
; Z > X -> queue_goal(Z = Y)
|
; Z > X -> queue_goal(Z = Y)
|
||||||
; { false } % Z < X
|
; { false } % Z < X
|
||||||
)
|
)
|
||||||
|
; Y == Z -> kill(MState), queue_goal(Y #>= X)
|
||||||
; { fd_get(Y, _, YInf, YSup, _) },
|
; { fd_get(Y, _, YInf, YSup, _) },
|
||||||
( { YInf cis_gt n(X) } -> queue_goal(Z = Y)
|
( { YInf cis_gt n(X) } -> queue_goal(Z = Y)
|
||||||
; { YSup cis_lt n(X) } -> queue_goal(Z = X)
|
; { YSup cis_lt n(X) } -> queue_goal(Z = X)
|
||||||
@@ -5419,6 +5420,7 @@ run_propagator(pmin(X,Y,Z), MState) -->
|
|||||||
; Z < X -> Z = Y
|
; Z < X -> Z = Y
|
||||||
; { false } % Z > X
|
; { false } % Z > X
|
||||||
)
|
)
|
||||||
|
; Y == Z -> kill(MState), queue_goal(Y #=< X)
|
||||||
; { fd_get(Y, _, YInf, YSup, _) },
|
; { fd_get(Y, _, YInf, YSup, _) },
|
||||||
( { YSup cis_lt n(X) } -> Z = Y
|
( { YSup cis_lt n(X) } -> Z = Y
|
||||||
; { YInf cis_gt n(X) } -> Z = X
|
; { YInf cis_gt n(X) } -> Z = X
|
||||||
|
|||||||
Reference in New Issue
Block a user