Die Darstellung von Familienbeziehungen ist eines der klassischen Beispiele für die Anwendung von Prädikatenlogik und wird häufig in Prolog, einer logikbasierten Programmiersprache, verwendet. In diesem Kapitel wird gezeigt, wie man mit Prädikatenlogik eine Wissensbasis über Familienbeziehungen aufbaut und daraus logische Schlussfolgerungen zieht.
In Prolog werden Fakten und Regeln definiert, um
Beziehungen innerhalb einer Familie zu modellieren. Dazu werden
Prädikate wie elternteil/2, vater/2,
mutter/2 und geschwister/2 genutzt.
% Fakten
mutter(maria, anna).
mutter(maria, tom).
vater(peter, anna).
vater(peter, tom).
mutter(lisa, lena).
vater(karl, lena).
% Allgemeine Regeln
elternteil(X, Y) :- mutter(X, Y).
elternteil(X, Y) :- vater(X, Y).
geschwister(X, Y) :-
elternteil(Z, X),
elternteil(Z, Y),
X \= Y.
% Regel zur Großeltern-Beziehung
grosseltern(X, Y) :-
elternteil(X, Z),
elternteil(Z, Y).mutter(X, Y): X ist die Mutter von Y.vater(X, Y): X ist der Vater von Y.elternteil(X, Y): X ist ein Elternteil von Y (Ableitung
aus mutter/2 und vater/2).geschwister(X, Y): X und Y sind Geschwister, wenn sie
mindestens ein gemeinsames Elternteil haben.grosseltern(X, Y): X ist ein Großelternteil von Y, wenn
X ein Elternteil von Z ist und Z ein Elternteil von Y.?- elternteil(X, anna).
X = maria;
X = peter.Erklärung: Das System gibt beide Elternteile von
anna aus.
?- geschwister(anna, X).
X = tom.Erklärung: Da anna und tom
dieselben Eltern haben (maria und peter), sind
sie Geschwister.
?- grosseltern(X, lena).
X = maria;
X = peter.Erklärung: Die Eltern von lisa sind
maria und peter, und lisa ist die
Mutter von lena. Somit sind maria und
peter die Großeltern von lena.