Einführung in die Methoden der Künstlichen Intelligenz - Goethe ...
Einführung in die Methoden der Künstlichen Intelligenz - Goethe ...
Einführung in die Methoden der Künstlichen Intelligenz - Goethe ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
5.3 Implementierung logischer Programmiersprachen: Prolog<br />
Beispiel 5.3.1. Nehmen wir an, wir wollen das Prädikat vorfahr(X, Y ) implementieren, das wahr<br />
ist, wenn X e<strong>in</strong> Vorfahre von Y ist (über beliebig viele Generationen h<strong>in</strong>weg). Mit dem bestehenden<br />
Prädikat eltern kann man <strong>die</strong>s <strong>in</strong> Prolog implementieren als:<br />
vorfahr1(X,Z) :- vorfahr1(X,Y),vorfahr1(Y,Z).<br />
vorfahr1(X,Y) :- eltern(X,Y).<br />
Je<strong>der</strong> Aufruf von vorfahr1 (z.B. mit konkreten Werten vorfahr1(karl,maria))<br />
führt direkt zur nicht Term<strong>in</strong>ierung, da mit <strong>der</strong> ersten Klausel<br />
vorfahr1(X,Z) :- vorfahr1(X,Y),vorfahr1(Y,Z). resolviert wird, und im Anschluss<br />
wie<strong>der</strong> usw.<br />
Dreht man <strong>die</strong> Klauseln um, so erhält man:<br />
vorfahr2(X,Y) :- eltern(X,Y).<br />
vorfahr2(X,Z) :- vorfahr2(X,Y),vorfahr2(Y,Z).<br />
Dann erhält man Antworten, aber <strong>die</strong> Suche nach weiteren Antworten führt <strong>in</strong> den nichtterm<strong>in</strong>ierenden<br />
Zweig (nachdem alle Instanziierungen für eltern(X,Y) probiert wurden, wird <strong>die</strong> zweite<br />
Klausel verwendet, <strong>die</strong> dann zur Nichtterm<strong>in</strong>ierung führt).<br />
E<strong>in</strong>e bessere Variante ist:<br />
vorfahr(X,Y) :- eltern(X,Y).<br />
vorfahr(X,Z) :- eltern(X,Y),vorfahr(Y,Z).<br />
Diese term<strong>in</strong>iert stets, da sie stets <strong>die</strong> Relation eltern(X,Y) <strong>in</strong>stanzieren muss: Da es nur endlich<br />
viele solcher Instanziierungen gibt, term<strong>in</strong>iert <strong>die</strong> Suche.<br />
E<strong>in</strong> weiteres Beispiel zeigt, dass man <strong>die</strong> Klauseln nicht immer so anordnen kann, dass<br />
<strong>die</strong> Suche term<strong>in</strong>iert:<br />
Beispiel 5.3.2. Sei p e<strong>in</strong> zweistelliges Prädikat, das symmetrisch und transitiv ist. Wir geben<br />
e<strong>in</strong>ige Fakten an und <strong>die</strong> beiden Eigenschaften:<br />
p(a,b).<br />
p(c,b).<br />
p(X,Y) :- p(Y,X).<br />
p(X,Z) :- p(X,Y),p(Y,Z).<br />
Für <strong>die</strong> Anfrage p(a,c) (<strong>die</strong> offensichtlich true geben sollte) f<strong>in</strong>det Prolog ke<strong>in</strong>e Anwort (son<strong>der</strong>n<br />
term<strong>in</strong>iert nicht), unabhängig davon, wie man <strong>die</strong> 4 Klauseln anordnet, es gibt aber e<strong>in</strong>e erfolgreiche<br />
SLD-Ableitung, <strong>die</strong>se muss jedoch e<strong>in</strong>mal <strong>die</strong> Symmetrie-Klausel und e<strong>in</strong>mal <strong>die</strong> Transitivität-<br />
Klausel anwenden. Die Prolog-Ausführung wendet aber je nach Reihenfolge immer <strong>die</strong> gleiche<br />
Klausel an.<br />
M. Schmidt-Schauß & D. Sabel, Skript KI, WS 2012/13 163 Stand: 7. Januar 2013