Пролог: человек родной брат?

У меня возникли проблемы с пониманием того, почему мой код в прологе делает что-то, основываясь на порядке, в котором я ввел свои правила

Вот моя база данных:

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

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

И вот правила:

%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).

Проблема в том, что когда я делаю это,

?- sibling(bob, X).

я получил

X = bob ;
X = liz ;
false.

Но когда я меняю порядок (я помещаю разницу (X, Y) в последнюю часть)

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

и я звоню

?- sibling(bob, X).

я получил

X = liz;
false.

что я и хочу

До сих пор я видел только то, что порядок правил имеет значение при выполнении рекурсии. Так что я не понимаю, как Боб по-прежнему является родным братом только потому, что я поставил проверку различий первым.

Спасибо за любую помощь!

Ответы на вопрос(2)

Ваш ответ на вопрос