:- initialization(main).
main :-
grandmother(X, sazae),
halt.
% 既存の親子関係
parent(namihei, sazae).
parent(namihei, katuo).
parent(namihei, wakame).
parent(fune, sazae).
parent(fune, katuo).
parent(masuo, tara).
parent(sazae, tara).
parent(umi, namihei).
male(namihei).
male(katuo).
male(masuo).
male(tara).
female(fune).
female(wakame).
female(sazae).
female(umi).
% 親子関係
child(X, Y) :- parent(Y, X).
mother(X, Y):- parent(X, Y), female(X).
father(X, Y):- parent(X, Y), male(X).
sister(X, Y):-
parent(Z, X),
parent(Z, Y),
female(X), X \= Y.
brother(X, Y):-
parent(Z, X),
parent(Z, Y),
male(X), X \= Y.
% 祖母の定義
grandmother(X, Y):-
female(X),
parent(X, Z),
parent(Z, Y).
% 孫の定義
grandchild(X, Y):-
male(Y), female(X),
parent(Y, Z), parent(Z, X).
% いとこの定義
cousin(X, Y):-
parent(Z, X),
parent(W, Y),
sister(Z, W). % ZとWが兄妹姉妹の場合、XとYは従兄弟
% フグタ家の定義
% マスオの親
parent(masuo_mother, masuo). % マスオの母親
parent(masuo_father, masuo). % マスオの父親(死亡したと仮定)
% サケオの家族
parent(sakeo, masuo_mother). % マスオの兄
parent(sakeo_wife, sakeo). % サケオの嫁
parent(norio, sakeo). % サケオの息子
parent(norio, sakeo_wife). % サケオの妻と共にノリオの親
male(masuo_mother). % マスオの母は女性
female(sakeo_wife). % サケオの妻は女性
male(sakeo). % サケオは男性
male(norio). % ノリオは男性
female(masuo_mother). % マスオの母
% 終了
Oi0gaW5pdGlhbGl6YXRpb24obWFpbikuCm1haW4gOi0gCglncmFuZG1vdGhlcihYLCBzYXphZSksCgl3cml0ZShYKSwgbmwsIGZhaWwsCgloYWx0LgoKJSDml6LlrZjjga7opqrlrZDplqLkv4IKcGFyZW50KG5hbWloZWksIHNhemFlKS4KcGFyZW50KG5hbWloZWksIGthdHVvKS4KcGFyZW50KG5hbWloZWksIHdha2FtZSkuCnBhcmVudChmdW5lLCBzYXphZSkuCnBhcmVudChmdW5lLCBrYXR1bykuCnBhcmVudChtYXN1bywgdGFyYSkuCnBhcmVudChzYXphZSwgdGFyYSkuCnBhcmVudCh1bWksIG5hbWloZWkpLgoKbWFsZShuYW1paGVpKS4gCm1hbGUoa2F0dW8pLgptYWxlKG1hc3VvKS4KbWFsZSh0YXJhKS4KZmVtYWxlKGZ1bmUpLgpmZW1hbGUod2FrYW1lKS4KZmVtYWxlKHNhemFlKS4KZmVtYWxlKHVtaSkuCgolIOimquWtkOmWouS/ggpjaGlsZChYLCBZKSA6LSBwYXJlbnQoWSwgWCkuCgptb3RoZXIoWCwgWSk6LSBwYXJlbnQoWCwgWSksIGZlbWFsZShYKS4KZmF0aGVyKFgsIFkpOi0gcGFyZW50KFgsIFkpLCBtYWxlKFgpLgoKc2lzdGVyKFgsIFkpOi0gCglwYXJlbnQoWiwgWCksCglwYXJlbnQoWiwgWSksCglmZW1hbGUoWCksIFggXD0gWS4KCmJyb3RoZXIoWCwgWSk6LSAKCXBhcmVudChaLCBYKSwKCXBhcmVudChaLCBZKSwKCW1hbGUoWCksIFggXD0gWS4KCiUg56WW5q+N44Gu5a6a576pCmdyYW5kbW90aGVyKFgsIFkpOi0KCWZlbWFsZShYKSwKCXBhcmVudChYLCBaKSwKCXBhcmVudChaLCBZKS4KCiUg5a2r44Gu5a6a576pCmdyYW5kY2hpbGQoWCwgWSk6LSAKCW1hbGUoWSksIGZlbWFsZShYKSwgCglwYXJlbnQoWSwgWiksIHBhcmVudChaLCBYKS4KCiUg44GE44Go44GT44Gu5a6a576pCmNvdXNpbihYLCBZKTotIAoJcGFyZW50KFosIFgpLCAKCXBhcmVudChXLCBZKSwgCglzaXN0ZXIoWiwgVykuICUgWuOBqFfjgYzlhYTlprnlp4nlprnjga7loLTlkIjjgIFY44GoWeOBr+W+k+WFhOW8nwoKJSDjg5XjgrDjgr/lrrbjga7lrprnvqkKJSDjg57jgrnjgqrjga7opqoKcGFyZW50KG1hc3VvX21vdGhlciwgbWFzdW8pLiAlIOODnuOCueOCquOBruavjeimqgpwYXJlbnQobWFzdW9fZmF0aGVyLCBtYXN1bykuICUg44Oe44K544Kq44Gu54i26Kaq77yI5q275Lqh44GX44Gf44Go5Luu5a6a77yJCiUg44K144Kx44Kq44Gu5a625pePCnBhcmVudChzYWtlbywgbWFzdW9fbW90aGVyKS4gJSDjg57jgrnjgqrjga7lhYQKcGFyZW50KHNha2VvX3dpZmUsIHNha2VvKS4gJSDjgrXjgrHjgqrjga7lq4EKcGFyZW50KG5vcmlvLCBzYWtlbykuICUg44K144Kx44Kq44Gu5oGv5a2QCnBhcmVudChub3Jpbywgc2FrZW9fd2lmZSkuICUg44K144Kx44Kq44Gu5aa744Go5YWx44Gr44OO44Oq44Kq44Gu6KaqCgptYWxlKG1hc3VvX21vdGhlcikuICUg44Oe44K544Kq44Gu5q+N44Gv5aWz5oCnCmZlbWFsZShzYWtlb193aWZlKS4gJSDjgrXjgrHjgqrjga7lprvjga/lpbPmgKcKbWFsZShzYWtlbykuICUg44K144Kx44Kq44Gv55S35oCnCm1hbGUobm9yaW8pLiAlIOODjuODquOCquOBr+eUt+aApwpmZW1hbGUobWFzdW9fbW90aGVyKS4gJSDjg57jgrnjgqrjga7mr40KCiUg57WC5LqGCg==