What is the logical ‘not’ in Prolog?

In place of not(X = Y) you need to write \+ X = Y or X \= Y. But consider to use dif(X,Y) instead. dif/2 is present in B, SWI, YAP, SICStus. To see the difference:

?- X = b, dif(a, X).
X = b.

?- X = b, \+ a = X.
X = b.

So up to now everything seems to be fine. But what, if we simply
exchange the order of the two goals?

?- \+ a = X, X = b.
false.

?- dif(a, X), X = b.
X = b.

(\+)/1 now gives us a different result, because there is an answer
for a = X, the goal \+ a = X will fail.

(\+)/1 is thus not negation, but means not provable at this point
in time
.

A safe approximation of dif/2 is possible in ISO Prolog, too.

Leave a Comment