ge(X, Y) :-
suspend(ge(X,Y,MySusp), 0, [X->ic:max, Y->ic:min], MySusp),
ge(X, Y, MySusp).
:- demon ge/3.
ge(X, Y, MySusp) :-
get_bounds(X, _, XH),
get_bounds(Y, YL, _),
( var(X),var(Y) ->
true % implicitly re-suspend
;
kill_suspension(MySusp)
),
X #>= YL, % impose new bounds
Y #=< XH.