Поскольку мой аналогичный ответ содержит все объяснения, я приведу здесь только код.
friend(P3,P4) :-
likes(P1,G1),
likes(P2,G1),
P1 \= P2,
normalize(P1,P2,P3,P4).
normalize(P1,P2,P1,P2) :- P1 @> P2.
normalize(P1,P2,P2,P1) :- P1 @=< P2.
friends(List) :-
setof((P1,P2), (P1,P2)^friend(P1,P2), List).
Пример:
?- friends(List).
List = [(ali, ahmad), (samir, ahmad)].