From: notoria Date: Mon, 8 Jan 2024 20:50:02 +0000 (+0100) Subject: Special case for `(^)/2` X-Git-Tag: v0.9.4~36^2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=902cd5c3eadf8deb52a25bbfe199a9dacdb2b12b;p=scryer-prolog.git Special case for `(^)/2` The only solutions for `Z #= X^Z` are `X = Z, X in -1\/1`. Also helps avoid big numbers. --- diff --git a/src/lib/clpz.pl b/src/lib/clpz.pl index 8c21a6e9..57309470 100644 --- a/src/lib/clpz.pl +++ b/src/lib/clpz.pl @@ -5454,6 +5454,7 @@ run_propagator(pexp(X,Y,Z,Morph), MState) --> morph_into_propagator(MState, [Y,Z], reified_eq(1,Y,1,0,[],Z), Morph) ; Y == 0 -> kill(MState), Z = 1 ; Y == 1 -> kill(MState), Z = X + ; Y == Z -> kill(MState), X = Y, queue_goal(X in -1\/1) ; nonvar(X) -> ( nonvar(Y) -> ( Y >= 0 -> true ; X =:= -1 ),