male(george). male(phillip). male(spencer). male(charles). male(mark). male(andrew). male(edward). male(william). male(harry). male(peter). male(mike). male(james). male(george2). spouse(george, mum). spouse(elizabeth, philip). spouse(spencer, kydd). spouse(diana, charles). spouse(anne, mark). spouse(andrew, sarah). spouse(edward, sophie). spouse(william, catherine). spouse(peter, autumn). spouse(zara, mike). child(elizabeth, mum). child(margaret, mum). child(charles, elizabeth). child(anne, elizabeth). child(andrew, elizabeth). child(edward, elizabeth). child(diana, kydd). child(william, diana). child(harry, diana). child(peter, anne). child(zara, anne). child(beatrice, sarah). child(eugenie, sarah). child(louise, sophie). child(james, sophie). child(george2, catherine). child(charlotte, catherine). child(savannah, autumn). child(isla, autumn). child(mia, zara). is_spouse(X, Y) :- spouse(X,Y); spouse(Y,X). is_child(X, Y) :- child(X, Y); (is_spouse(Z, Y), child(X, Z)). grandchild(X, Y) :- is_child(Z, Y), is_child(X, Z). greatgrandparent(X, Y) :- (is_child(Z, X), is_child(A, Z), is_child(Y, A)); (is_spouse(X,B), is_child(Z, B), is_child(A, Z), is_child(Y, A)). ancestor(X, Y) :- is_child(Y, X); (is_child(Z, X), ancestor(Z, Y)). brother(X, Y) :- child(X, A), child(Y, A), male(X), \==(X, Y). sister(X, Y) :- child(X, A), child(Y, A), \+ male(X), \==(X, Y). daughter(X, Y) :- is_child(X, Y), \+ male(X). son(X, Y) :- is_child(X, Y), male(X). first_cousin(X, Y) :- (uncle(A, X), is_child(Y, A)). brother_in_law(X, Y) :- (spouse(B, X), child(B, A), child(Z, A), spouse(Y, Z), \+ is_spouse(Y, X), male(X)); (child(X, A), child(Z, A), spouse(Y, Z), \+ is_spouse(Y, X), male(X)). sister_in_law(X, Y) :- (spouse(B, X), child(B, A), child(Z, A), spouse(Y, Z), \+ is_spouse(Y, X), \+ male(X)); (child(X, A), child(Z, A), spouse(Y, Z), \+ is_spouse(Y, X), \+ male(X)). aunt(X, Y) :- is_child(Y, Z), sister(X, Z). uncle(X, Y) :- is_child(Y, Z), brother(X, Z). cousin(X, Y) :- first_cousin(X, Y).