
% ==========================================
% A. FACTS
% ==========================================

parent(robert, john).
parent(roberta, john).
parent(robert, sarah).
parent(roberta, sarah).

parent(john, alice).
parent(maria, alice).
parent(john, ben).
parent(maria, ben).

parent(sarah, chloe).
parent(david, chloe).

% ==========================================
% B. RULES
% ==========================================

grandparent(X, Z) :-
    parent(X, Y),
    parent(Y, Z).

sibling(X, Y) :-
    parent(P, X),
    parent(P, Y),
    X \= Y.

% ==========================================
% C. INPUT AND CHECK RELATIONSHIP
% ==========================================

main :-
    read(Relation),
    read(Person1),
    read(Person2),

    (   check_relation(Relation, Person1, Person2)
    ->  format('true: ~w(~w, ~w)~n',
               [Relation, Person1, Person2])
    ;   format('false: ~w(~w, ~w)~n',
               [Relation, Person1, Person2])
    ),
    halt.

check_relation(parent, X, Y) :-
    parent(X, Y).

check_relation(grandparent, X, Y) :-
    grandparent(X, Y).

check_relation(sibling, X, Y) :-
    sibling(X, Y).

:- initialization(main).
