Prolog: uma pessoa é um irmão de si mesmo?

Estou tendo algum problema para entender por que meu código no prólogo faz alguma coisa com base na ordem em que eu coloco minhas regras.

Aqui está meu banco de dados:

parent(tom, bob).
parent(tom, liz).
parent(mary, bob).
parent(mary, liz).

male(tom).
male(bob).
female(mary).
female(liz).

E aqui estão as regras:

%difference(X, Y) ==> Predicate to check if two people X and Y are not the same person.
difference(X, Y) :- \==(X, Y).
father(X, Y) :- male(X), parent(X, Y), difference(X, Y).
mother(X, Y) :- female(X), parent(X, Y), difference(X, Y).
sibling(X, Y) :-
    difference(X, Y),
    mother(M, X), mother(M, Y),
    father(F, X), father(F, Y).

O problema é que quando eu faço isso,

?- sibling(bob, X).

eu recebo

X = bob ;
X = liz ;
false.

Mas quando eu mudo a ordem (eu coloco a diferença (X, Y) na última parte)

sibling(X, Y) :-
    mother(M, X), mother(M, Y),
    father(F, X), father(F, Y),
    difference(X, Y).

e eu chamo

?- sibling(bob, X).

eu recebo

X = liz;
false.

que é o que eu quero.

Até agora, só vi que a ordenação das regras é importante quando se faz recursão. Então eu não entendo como Bob ainda é um irmão de si mesmo só porque eu coloquei a diferença primeiro.

Obrigado por qualquer ajuda!

questionAnswers(2)

yourAnswerToTheQuestion