% krotki komentarz
/* dlugi komentarz */

% dziecko(Dziecko, Matka, Ojciec)


dziecko(1,2,3).
dziecko(1,2,3).

dziecko(bulka,bulka(pomidory(eko)),bulka(ser, szynka)).

% bulka(ser,szynka) == bulka(ser,szynka) != bulka(1,7)
% bulka(pomidory)

dziecko(michal, sylwia, jan).
dziecko(brat, sylwia, jan).
dziecko(jan, ewa, edward).
dziecko(sylwia, krystyna, leszek).
dziecko(jakub, ona, michal).


% ?- dziecko(X,X,jan).

% matka(Matka, Dziecko)

% implikacja w lewą stronę
% aby sprawdzic czy matka(M,D) to trzeba wykonać zapytanie dziecko(D,M,_)

matka(Matka, Dziecko) :- dziecko(Dziecko, Matka, _Ojciec).

% ojciec(Ojciec, Dziecko)

ojciec(Ojciec, Dziecko) :- dziecko(Dziecko, _Matka, Ojciec).

% matka(Matka)

matka(Matka) :- dziecko(_Dziecko, Matka, _Ojciec).


% rodzic(Rodzic, Dziecko)

rodzic(Rodzic, Dziecko) :- matka(Rodzic, Dziecko).

rodzic(Rodzic, Dziecko) :- ojciec(Rodzic, Dziecko).

% rodzic(jan, _).

% wnuk(Dziadek, Wnuk)

% implikacja z koniunkcji:
% (...) <- (...) AND (...)

% by sprawdzić czy wnuk(D,W) trzeba:
% - najpierw przeszukać rodzic(D,R)
% - potem dla każdego wyniku przeszukać rodzic(R,W)

wnuk(Dziadek, Wnuk) :- rodzic(Dziadek, Rodzic), rodzic(Rodzic, Wnuk).

% Rodzic = drzewo(X, wisnia)
% Rodzic = drzewo(sliwka, Y)

% X = sliwka
% Y = wisnia

% przodek(Przodek, Potomek)

przodek(Przodek, Potomek) :- rodzic(Przodek, Potomek).

przodek(Przodek, Potomek) :-
	rodzic(Rodzic, Potomek),
	przodek(Przodek, Rodzic).

% przodek(Przodek, Potomek) :- przodek(Rodzic, Potomek), przodek(Przodek, Rodzic).

/*
 E(x,y) -> domkniecie przechodnie to najmniejsza relacja R spelniajaca:
   E(x,y) -> R(x,y)
   R(x,y), R(y,z) -> R(x,z)
*/









