Prólogo: una persona es un hermano de sí mismo?

Tengo algunos problemas para entender por qué mi código en prólogo hace algo según el orden en el que puse mis reglas.

Aquí está mi base de datos:

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

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

Y aquí están las reglas:

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

El problema es que cuando hago esto,

?- sibling(bob, X).

yo obtengo

X = bob ;
X = liz ;
false.

Pero cuando cambio el orden (puse la diferencia (X, Y) en la última parte)

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

y llamo

?- sibling(bob, X).

yo obtengo

X = liz;
false.

que es lo que quiero

Hasta ahora, solo he visto que el orden de las reglas es importante cuando se hace una recursión. Así que no entiendo cómo Bob sigue siendo un hermano de sí mismo solo porque primero pongo la verificación de la diferencia.

¡Gracias por cualquier ayuda!

Respuestas a la pregunta(2)

Su respuesta a la pregunta