muz(adam).   %   Tam vám byl jeden muž Adam
manz(adam,eva).  %  ti dva byli manželé.
rodic(adam,josef).  %  Adam byl rodičem Josefa
rodic(adam,hugo).  %  a Huga.
rodic(eva,josef).  %  Rodičem Josefa byla i Eva,
rodic(eva,hugo).  %  zrovna tak byla i rodičem Huga.
muz(karel).   %  Byl tam i další muž, jmenoval se Karel,
zena(helena).  %  a žena Helena.
manz(karel,helena).  %  Ti také byli manželé.
rodic(karel,zuzana).  %  Karel byl rodičem Zuzany,
rodic(helena,zuzana).  %  i Helena byla jejím rodičem.
rodic(helena,alfred).  %  Helena byla i rodičem Alfreda
rodic(karel,alfred).  %  a Karel taky.
zena(klara).  %  Byla tam i žena Klára,
rodic(klara,emil).  %  která byla rodičem Emila,
muz(emil).   %  což byl muž.
rodic(karel,emil).  %  Rodičem Emila byl i Karel
zena(kunhuta).  %  Byla tam i žena Kuhnuta,
manz(zibrid,kunhuta).  %  jejíž manželem byl Žibrid.
muz(zibrid).  %  Byl to muž.
rodic(kunhuta,eva).  %  Kunhuta byla rodičem Evy
rodic(kunhuta,katka).  %  a Katky.
zena(katka).  %  Katka byla žena.
rodic(zibrid,eva).  %  Rodičem Evy
rodic(zibrid,katka).  %  a Katky byl také Žibrid.
zena(ruzena).           %  Žena Růžena
rodic(ruzena,jan).      %  byla rodičem Jana.
manz(jan,lucie).        %  Jan byl manželem Lucie.
muz(jan).               %  Jan byl muž 
zena(lucie).            %  a Lucie žena.
rodic(jan,adam).        %  Oba byli
rodic(lucie,adam).      %  rodiči Adama.
muz(jose).              %  Muž José
manz(jose,katka).       %  byl manželem Katky.

otec(Otec,Dite):- rodic(Otec,Dite),muz(Otec). 

manzdite(X):- otec(Ot,X),matka(Mat,X),manz(Ot,Mat).

deda(D,V):- rodic(R,V),otec(D,R). 
    %  je-li D otec rodiče R, pak je dědou V
teta(T,X):- rodic(Y,X), sestra(T,Y). 
%   Je-li Y rodič X a T je jeho sestra, je T tetou X
sestra(Ses,X):- rodic(Y,Ses),rodic(Y,X),zena(Ses), Ses\=X. 

% anonymni promenne

% spy a trace

predek(Rod,Pot):- rodic(Rod,Pot).  %  Rod je rodičem potomka Pot
predek(Pred,Pot):- 
     rodic(Pred,MlPred),        %  Pred je rodičem mladšího
     predek(MlPred,Pot).            %  předka Mlpred potomka Pot

predek2(Rod,Pot):- rodic(Rod,Pot).  
predek2(Pred,Pot):-          
     rodic(Rod,Pot), 
     predek2(Pred,Rod).      
% predek se hodi spise na hledani potomku, predek2 na hledani predku
	 
predek3(Pred,Pot):- 
     predek3(MlPred,Pot), 
     rodic(Pred,MlPred). 
predek3(Rod,Pot):- 
     rodic(Rod,Pot). 
% predek3 se nezastavi

predek4(Pred,Pot):- 
     rodic(Pred,MlPred), 
     predek4(MlPred,Pot). 
predek4(Rod,Pot):- 
     rodic(Rod,Pot). 


% clen(?X,?L) - X je prvkem L
% nedeterministicka varianta
clen(X,[X|_]).
clen(X,[_|L]):-clen(X,L).

% spoj(?L1,?L2,?L) - spoji L1 a L2 do L
spoj([],L,L).
spoj([X|L1],L2,[X|L]):-spoj(L1,L2,L).
% spoj je ve vetsine slusnych interpretech implementovana jako append

% sublist(?S,?L) - S je podlistem L
sublist(S,L):-append(_,S,L1),append(L1,_,L).
% pekne je na tom videt, jak nam unifikace muze pomoct

% na rozmyslenou: reprezentace grafu a stromu




