:- dynamic mutter/2.

% Definition der Ehefrau-Ehemann-Relation:
ehemann(christine, heinz).
ehemann(maria,     fritz).
ehemann(monika,    herbert).
ehemann(angelika,  hubert).

% Definition der Kind-Mutter-Relation:
mutter(herbert, christine).
mutter(angelika,christine).
mutter(hubert,  maria).
mutter(susanne, monika).
mutter(norbert, monika).
mutter(andreas, angelika).

vater(Kind,Vater) :-
	ehemann(Mutter,Vater),
	mutter(Kind,Mutter).

grossvater(E,G) :- vater(E,V), vater(V,G).
grossvater(E,G) :- mutter(E,M), vater(M,G).

istEhemann(Person) :- ehemann(_,Person).


%geschwister(S,P) :- mutter(S,M), mutter(P,M), \+ P=S.
geschwister(S,P) :-
	when(ground(P=S), \+ P=S),
	mutter(S,M), mutter(P,M).

muetter(Ms) :- findall(M,mutter(_,M),Ms).
kinder(M,Ks) :- setof(K,mutter(K,M),Ks).

vorfahre(P,V) :- mutter(P,V).
vorfahre(P,V) :- vater(P,V).
vorfahre(P,V) :- mutter(P,M), vorfahre(M,V).
vorfahre(P,V) :- vater(P,Va), vorfahre(Va,V).

grossvaeter(Gs) :- findall(G,grossvater(_,G),Gs).

allevorfahren(P,Vs) :- bagof(V,vorfahre(P,V),Vs).
