% Lecture slide 4
male(albert).
female(alice).
male(edward).
female(victoria).
parent(albert,edward).
parent(victoria,edward).
parent(albert,alice).
parent(victoria,alice).
parent(john,albert).
parent(joseph,victoria).
parent(ani,john).
parent(ani,joseph).

% Lecture slide 12
father(X,Y) :- male(X), parent(X,Y).
child_of(C,P) :- parent(P,C).

% Lecture slide 13
sibling(X,Y) :- parent(P,X), parent(P,Y), \+(X=Y).

% Lecture slide 16
brother(X,Y):- male(X), sibling(X,Y).

sister(X,Y):- female(X), sibling(X,Y).

uncle(X,Y):- brother(X,Z), parent(Z,Y).

aunt(X,Y):- sister(X,Z), parent(Z,Y).

nephew(X,Y):- male(X), uncle(Y,X).
nephew(X,Y):- male(X), aunt(Y,X).

niece(X,Y):- female(X), uncle(Y,X).
niece(X,Y):- female(X), aunt(Y,X).

% Tutorial examples
grandchild(X,Y) :- parent(Y,Z), parent(Z,X).
descendant(X,Y) :- parent(Y,X).
descendant(X,Y) :- parent(Y,Z), descendant(X,Z).
second_cousin(X,Y) :- grandchild(X,Z), grandchild(Y,V),
                      sibling(Z,V).
cousin(X,Y) :- parent(A,X), parent(B,Y), sibling(A,B).
first_cousin_once_removed(X,Y) :- cousin(X,Z), parent(Z,Y).
first_cousin_once_removed(X,Y) :- cousin(Y,Z), parent(Z,X).

