Kapitel 4. Eingabe (Anfrage) : Formel ...
Kapitel 4. Eingabe (Anfrage) : Formel ...
Kapitel 4. Eingabe (Anfrage) : Formel ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
liebt(Eva, Essen)<br />
liebt(Eva, ¢ Wein)<br />
liebt(Adam, liebt(, Wein)<br />
)<br />
liebt(Adam,)<br />
liebt(Adam,) liebt(,Wein)<br />
<br />
<br />
sub<br />
liebt(Eva,Wein)<br />
<br />
Eva<br />
©<br />
<br />
sub<br />
liebt(,Wein)<br />
<strong>Kapitel</strong> <strong>4.</strong><br />
Logik-Programmierung<br />
<strong>4.</strong>1 Erzeugen von Antworten<br />
Logik-Programm<br />
: Menge von Klauseln (erfüllbar)<br />
<strong>Eingabe</strong> (<strong>Anfrage</strong>) : <strong>Formel</strong> ¡ ¢ £¤ ¥ £¦ ¥ §§§¥ £¨<br />
Ausführung<br />
Ergebnis<br />
Beispiel:<br />
: Resolutionsherleitung von © aus<br />
: Antworterzeugungskomponente<br />
¡ ¢ £¤§§§ £¨<br />
liebt(Adam,)<br />
Gilt ¡, d.h. ist unerfüllbar<br />
¢ ¡<br />
liebt(Adam,<br />
¡ ¢<br />
)<br />
¢ ¡<br />
Resolutionsbeweis:<br />
Antwort : Eva.<br />
132
Antwortprädikat: Aufrufklausel liebt(Adam,),Antwort()<br />
<br />
liebt(Adam,),Antwort()<br />
liebt(Adam,) liebt(,Wein)<br />
<br />
liebt(,Wein),Antwort()<br />
<br />
Eva <br />
<br />
Antwort(Eva)<br />
liebt(Eva,Wein)<br />
liebt(Eva, Essen)<br />
liebt(Eva, Wein),liebt(Anna,<br />
¢ Wein)<br />
liebt(Adam, liebt(, <br />
Wein)<br />
)<br />
liebt(,Wein),Antwort()<br />
liebt(Eva,W.),liebt(Anna,W.)<br />
<br />
<br />
liebt(Anna,Wein),Antwort(Eva)<br />
<br />
Beispiel:<br />
liebt(Adam, ¢ <br />
),Antwort()<br />
¡ liebt(Adam,) liebt(,Wein)<br />
liebt(Adam,),Antwort()<br />
<br />
Antwort(Anna),Antwort(Eva)<br />
oder-Verknüpfung von Antworten : nicht Hornklausel<br />
133
liebt(Eva, ),Antwort(<br />
)<br />
<br />
liebt(Eva, ),Antwort(<br />
¡ ¢<br />
liebt(Eva,Essen)<br />
) <br />
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡<br />
Antwort(Essen)<br />
<br />
liebt(Eva, ),Antwort( ) liebt(Eva,Wein)<br />
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡<br />
<br />
Beispiel:<br />
wie oben<br />
Antwort(Wein)<br />
und-Verknüpfung von Antworten :<br />
verschiedene Resolutionsherleitungen<br />
Bemerkung:<br />
Aufrufklausel : Antwort ¥ £ ¥<br />
¤ ¢ : aktueller £¤ <strong>Eingabe</strong>parameter<br />
: Ausgabeparameter<br />
134
¡ ¢ liebt(,Wein),Antwort()<br />
<br />
liebt(,Wein),Antwort()<br />
liebt(Eva,Wein)<br />
<br />
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡<br />
Antwort(Eva)<br />
<br />
Beispiel:<br />
wie oben<br />
Aufrufklausel : Antwort ¤ ¥ £<br />
: aktueller <strong>Eingabe</strong>parameter<br />
¥<br />
¤<br />
£ ¢<br />
: Ausgabeparameter<br />
Invertibilität des Parameterübergabemechanismus<br />
<br />
135
(2.) walk ¤¥ ¢ £¥ £ ¥<br />
Situation<br />
¤¥¥<br />
¢<br />
: £ £ ¢ £ ¥ £¦§¥ ¤<br />
(6.) Reach £ ¥ Antwort £ ¥<br />
Beispiel:<br />
” Affe-und-Bananen-Problem“<br />
(1.) <br />
Interpretation: Affe :<br />
¢£¥<br />
¡ £ ¢<br />
Pos.<br />
¡<br />
¢<br />
£<br />
Banane : Pos.<br />
Stuhl : Pos.<br />
Startsituation :<br />
walk : ¥ ¤¥ £ £¦§¥ ¢ £¥<br />
(3.)<br />
¥<br />
£<br />
push £ ¢ £¥ ¥ £ ¥ ¤¥¥<br />
¤¥ ¢<br />
Situation ¤ :<br />
push : ¥ ¤¥ £ £¦§¥ ¢ £¥ ¥<br />
(<strong>4.</strong>)<br />
¥<br />
£<br />
climb £ ¢ £ £ ¤¥¥<br />
¤¥ ¢<br />
£ £¦§¥ ¢ £ ¥<br />
Situation ¤ :<br />
climb £ ¤¥ :<br />
Affe auf Stuhl<br />
£ £¦§¥ ¢ £ ¥<br />
(5.) climb Reach(grasp(climb £ ¤¥¥ £<br />
Situation :<br />
¤¥¥¥<br />
£ ¢ £ £<br />
und Affe<br />
<br />
auf Stuhl,<br />
dann kann Affe die Banane erreichen<br />
¥ ¢ £¦§¥<br />
136
¤¢£ ¡¢£<br />
climb Antwort(grasp(climb<br />
¥¥¥¥¥¥¥¥¥¥¥¥¥<br />
££ £££<br />
¨ © ¦§<br />
Resolutionsherleitung:<br />
¢£<br />
Antwort(grasp(climb ¨ ¥¥¥¥¥¥¥¥¥¥¥¥¥<br />
£ £££<br />
© ¦<br />
¢£<br />
Antwort(grasp(climb(push ¨ ¥¥¥¥¥¥¥¥¥¥¥¥¥<br />
£ ££££<br />
© ¦<br />
Antwort(grasp(climb(push<br />
¦¢£<br />
walk<br />
¥¥¥¥¥¥¥¥¥¥¥¥¥<br />
£ £££££<br />
¨ © ¦<br />
¥¥¥¥¥¥¥¥¥¥¥¥¥<br />
©Antwort(grasp(climb(push<br />
¤¢£<br />
walk £££££<br />
¨ ¦<br />
Interpretation:<br />
Situation £:<br />
£ £¦§¥ ¢ £ ¡ ¢¥<br />
walk £ £¦§¥ ¢ £ ¢ ¡<br />
push<br />
¢¥<br />
£ £ ¡ ¢£¥<br />
£ £¦§¥ ¢ £¡ ¡ ¡<br />
climb,grasp<br />
¥<br />
§¥<br />
©<br />
137
<strong>4.</strong>2 Hornklauselprogramme und ihre Semantik<br />
Typen von Hornklauseln:<br />
- Tatsachenklausel : einelementige positive Klausel<br />
- Prozedurklausel : ¢ ¤§§§ ¡ ,<br />
¢ ¢ atom. <strong>Formel</strong>n<br />
PROLOG-Notation: ¢ £ ¤ ¦§§§ ¡ .<br />
¢ : Prozedurkopf oder -name<br />
¤§§§ ¡ : Prozedurkörper<br />
¢ : Prozeduraufruf<br />
Hornklauselprogramm (Logik-Programm):<br />
endliche Menge von Tatsachen- und Prozedurklauseln<br />
(Programmklauseln, definite Klauseln)<br />
Aufruf durch Zielklausel (Aufruf- oder Frageklausel):<br />
¤ ¦§§§ ¡ <br />
PROLOG-Notation : ¤ £ ¤ ¦§§§ ¡ .<br />
Halteklausel:<br />
Interpretation (prozedural) eines Hornklauselprogramms<br />
bei Zielklausel ¡:<br />
©<br />
SLD-Resolutionsherleitung von © aus ¡<br />
basierend auf ¡.<br />
Variablenumbenennungen:<br />
nur auf die Seitenklauseln anwenden<br />
standardisierte SLD-Resolution<br />
138
(2.) £ £ ¤ £ ¥¤ £ ¥¥ £ £ ¥<br />
Zielklausel: £ £ ¤ £ ¤ £ ¤ £ ¡¥¥¥¤ £ ¤ £ ¡¥¥¢¥ ££ ¤ ¢¤¥<br />
<br />
£ £ £ £ £ £ £ ¡¥¥¥¤ ¤ ¡¥¥¢ ¤§¥<br />
<br />
¥£££ ¥£¦ ¤ £ ¤ ¤<br />
§§§§§§§§§§§§§§§§§§§§§§§§§§§§<br />
£<br />
sub¨<br />
£ £ £ £ £ £ ¤ ¡¥¥¥¤ ¡¥ ¥ ¤§¥<br />
£ ¤ ¤<br />
§§§§§§§§§§§§§§§§§§§§§§§§§§§<br />
¨£ ¥£££¥ sub¨<br />
£ £ £ £ ¤ ¤ ¡¥¥¥ ¡ ¥ £© §¥<br />
<br />
¥£££¨ ¥£££<br />
sub¨ ¤ £<br />
§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§<br />
§ ©<br />
£ £ £ £ £ £ ¤ ¡¥¥¥¤ ¤ ¡¥¥¢¥sub¤sub¦sub<br />
£ £ ¤ £ ¤ £ ¤ £ ¡¥¥¥¤ £ ¤ £ ¡¥¥¤ £ ¤ £ ¤ £ ¤ £ ¤ £ ¡¥¥¥¥¥¥<br />
¤ ¤ £ ¢<br />
Beispiel:<br />
¡ ¢ £<br />
Prädikatenlogische Beschreibung:<br />
¥<br />
(1.)<br />
¢<br />
¡¥ £ £ <br />
standardisierte SLD-Resolutionsherleitung:<br />
Rechenresultat:<br />
¤£ ¥ ¤£<br />
sub<br />
¤ £ ¥¥ ¤£<br />
sub<br />
¤ £ ¤ £ ¤ £ ¤ £ ¡¥¥¥¥¥<br />
sub<br />
¢<br />
139
£ ¢ ¤§§§ £ ¡ ¤<br />
Definition (prozedurale Interpretation)<br />
Die prozedurale Interpretation von Hornklauselprogrammen<br />
ist gegeben durch einen abstrakten<br />
Interpreter:<br />
- Konfigurationen: £ ¡ sub¥ mit ¡ Zielklausel,<br />
sub Substitution<br />
Sei ein Logik-Programm.<br />
- Konfigurationsübergänge bzgl. :<br />
£ ¡¤ sub¤¥ ¡ £ ¡¦ sub¦¥,<br />
falls ¡¤ ¢ £¤ £¦§§§ £ ¡ £¢ £ © ¥<br />
und es eine Programmklausel<br />
¤ ¢ ¦ ¥ ¤ ¥ ¦§§§ ¥¨ £¦ £ ¡¥<br />
in gibt (¡¤ und ¤ seien Variablen-disjunkt), so<br />
dass ¦ und ein £ ¢ £§ ¨ © §§§ ¢ ¥ unifizierbar<br />
sind mit allgem. Unifikator ¤. Dann sind<br />
und<br />
¡¦ ¢ £¤§§§ £ ¢© ¤ ¥ ¤§§§ ¥¨<br />
sub¦ ¢ sub¤¤.<br />
140
Eine Rechnung von bei <strong>Eingabe</strong> von<br />
ist jede (endliche oder<br />
¡<br />
unendliche) Folge der Form<br />
£ £¤§§§ ¢ ¡<br />
£ ¡ ¡¥ ¡ £ ¡¤ sub¤¥ ¡ £ ¡¦ sub¦¥ ¡ §§§ §<br />
Ist die Rechnung endlich mit letzter Konfiguration<br />
£ ©sub¥, so heißt sie erfolgreich und<br />
£ £¤ ¥ §§§¥ £ ¡ ¥sub<br />
ist das Rechenergebnis.<br />
141
§§§§§§§§§§§§§§§§§§§§§§<br />
¡<br />
¡ ¥ ¡ sub<br />
¡¡¡¡¡¡¡¡¡¡¡¡¡<br />
£ ¡<br />
sub¤¥ ¡¤ £<br />
£ ¡¦ sub¦¥ ¨<br />
££££££££££££££<br />
£ ¡¡ sub¡ ¥<br />
£ ¡¤ sub¤ ¥<br />
Bemerkung:<br />
Diese Rechnungen von Hornklauselprogrammen sind<br />
nicht-deterministisch:<br />
jeder Schritt hängt ab von der Auswahl der Programmklausel.<br />
Die möglichen Rechnungen von bei <strong>Eingabe</strong> ¡:<br />
¢<br />
£ ¡ ¡¥<br />
¡<br />
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥<br />
¤<br />
£<br />
£££££££££££££ ¡<br />
£ ¡ sub ¥<br />
§ usw.<br />
¦<br />
¡¡¡¡¡¡¡¡¡¡¡¡¡¡<br />
¢<br />
£ ¡ © sub©¥<br />
endlich verzweigt, aber möglicherweise unendlich!<br />
142
¢ ¥ £ ¥ ¢ £ ¥ ¢ £ ¢¢¥ £ ¡<br />
PROLOG-Notation:<br />
¥<br />
¢ £ ¢ £ £ £ ¥ ¢ £ ¥<br />
¥ <br />
Ergebnis: ¢ £ ¡ ¥ ¡ ¡<br />
Ergebnis: ¢ £ ¡ ¥<br />
¡¡¡ <br />
Beispiel:<br />
£ ¢<br />
¥.<br />
Zielklausel:<br />
¢¢¥<br />
£<br />
¥, d.h. ¢ £<br />
¡ ¡ <br />
£ ¥.<br />
¢ £ ¡ ¤ ¢ ¡<br />
1. Rechnung:<br />
£¢ £ ¡ ¥ ¡¥ ¡ £ £ ¥ ¢ £ ¡ ¥ ¡<br />
¡<br />
¡¥<br />
¡¡<br />
¡ £¢ £¡ ¡ ¥ ¡ ¡<br />
¡<br />
¡¡<br />
¡<br />
¡ <br />
¡ £ £¡ ¥ ¢ £ ¡ ¥ ¡ ¡<br />
¡<br />
¡¡<br />
¡<br />
¡ <br />
¡ ¡¡ <br />
¡<br />
¡<br />
¡<br />
¡ ¡<br />
¡¥<br />
¡¥<br />
¡¡<br />
¡<br />
¡ ¡ ¡¡ ¡ ¡<br />
¡<br />
¡ ¡<br />
¡<br />
Diese Rechnung ist endlich, aber nicht erfolgreich.<br />
<br />
¡ £ £¡ ¡ ¥ ¡ ¡<br />
¡<br />
¡¡<br />
2. Rechnung:<br />
£¢ £ ¡ ¥ ¡¥ ¡ £ £ ¥ ¢ £ ¡ ¥ ¡<br />
¡<br />
¡¥<br />
¡¡<br />
¡ £¢ £¡ ¡ ¥ ¡ ¡<br />
¡<br />
¡¡<br />
¡<br />
¡ <br />
¡ £ © ¡ ¡<br />
¡<br />
¡¡<br />
¡<br />
¡ <br />
¡ ¡<br />
¡¥<br />
¡<br />
¡¡<br />
¡<br />
¡ <br />
¡¡ ¢ ¡ ¡<br />
¡ ¢ ¡<br />
¡ ¡¡ ¢ ¡ ¡<br />
¡¥<br />
3. Rechnung:<br />
¢ £ ¡ ¥<br />
¢ £¡ ¡ ¥<br />
£¢ £ ¡ ¥ ¡¥ ¡ £ ©<br />
¡¥<br />
¡¡<br />
¡ ¢<br />
¡¡<br />
143
Zielklausel: ¤ £ Diff £ ¢ sin £ ¥ ¡ ¥<br />
£ ¤ Diff sin £ ¥ ¡ ¥ ¡¥ £ £ ¢<br />
Diff Diff sin £ ¥ £ £ ¥ ¡¥ sub¤¥<br />
£ ¤ ¡<br />
£ Diff sin £ £ ¥ ¡¥ sub¤sub¦¥<br />
£ £ Diff £ ¥ sub¤sub¦sub ¥<br />
¤ ¡<br />
mit sub¤<br />
¡ £ © sub¤sub¦sub sub<br />
¥<br />
Beispiel:<br />
Symbolisches Differenzieren“<br />
”<br />
Konstanten: , 1<br />
Variable: ¡ ¡ ¡<br />
Prädikatsymbol:<br />
Diff<br />
Funktionssymbole: sin, cos, ¢<br />
Programmklauseln:<br />
Diff ¥.<br />
<br />
Diff £ £ £Diff Diff<br />
© ¡¥.<br />
£ ¥ £<br />
Diff<br />
¡ £ ¡ ¡¥ <br />
¡ ¡ ¢ ¥<br />
¢ ¡ ¢<br />
£Diff Diff ¡¥.<br />
£<br />
Diff sin cos £ £ £ £ £Diff ¥.<br />
¥ ¡ £ ¥ ¢ ¥ ¥<br />
¡<br />
¡ ¡<br />
¡ sin £ ¥¡ ¡ ¡ ¢ ¡ sin £ ¥ ¢ ¡<br />
¢<br />
¡<br />
¡©<br />
¡<br />
sub¦<br />
¢<br />
sub<br />
¡ ¡<br />
¡ cos £ ¥ ¢ ¡<br />
sub<br />
Ergebnis:<br />
¢<br />
¡<br />
¡©<br />
¡ sub¤sub¦sub sub<br />
¢ ¢ £ cos £ ¥ ¢ © ¥ sin £ ¥ ¢ © .<br />
144<br />
©
Lifting-Lemma (für Hornklauseln)<br />
Falls sub ¡¥ ¡ §§§ ¡ £ ©sub¥ eine Rechnung<br />
des Logik-Programms bei <strong>Eingabe</strong> £ sub<br />
ist, dann gibt es eine Rechnung derselben Länge<br />
¡<br />
von bei<br />
¡<br />
<strong>Eingabe</strong> der Form ¡<br />
£ ¡ ¡¥ ¡ §§§ ¡ £ © sub ¥<br />
mit sub sub ¢ sub ¤ für eine geeignete Subst. ¤.<br />
Satz (Clark)<br />
Sei ein Logik-Programm und ¡ ¢¤££¤§§§ £ ¡<br />
eine Zielklausel.<br />
1. (Korrektheitsaussage)<br />
Falls es eine erfolgreiche Rechnung von bei <strong>Eingabe</strong><br />
¡ gibt, so ist jede Grundinstanz des Rechenergebnisses<br />
£ £¤¥£¦¥§§§¥£ ¡ ¥sub eine Folgerung<br />
von .<br />
2. (Vollständigkeitsaussage)<br />
Falls jede Grundinstanz von<br />
£ £¤ ¥ £¦ ¥ §§§¥ £ ¡ ¥sub<br />
eine Folgerung von ist, so gibt es eine erfolgreiche<br />
Rechnung von bei <strong>Eingabe</strong> ¡ mit Rechenergebnis<br />
£ £¤ ¥ £¦ ¥ §§§ ¥ £ ¡ ¥sub, so dass es eine<br />
Substitution ¤ gibt mit<br />
¥sub ¥ £¦ ¥ §§§¥ £ ¡ ¢ £ £ ¥sub<br />
£¤<br />
£¦ ¥ §§§¥ £ ¡ ¤<br />
145<br />
¥ £¤
¢ £ ¡ ¡¥ ¡ £ ¡¤ sub¤¥ ¡ §§§ ¡<br />
£ £<br />
sub¤§§§ sub¨¥ ¢ £ © sub¥<br />
©<br />
£ ¡¤ ¡¥ ¡ §§§ ¡ £ ©sub¦ §§§ sub¨¥§<br />
Beweis:<br />
(1.) Korrektheit:<br />
£ ¡ ¡¥ ¡ §§§ ¡ £ ¡¨ sub¥ ¢ £ © sub¥.<br />
Beweis durch Induktion über ¦ :<br />
¢ ¡ ¡ ¢ © und sub<br />
¢ ¡.<br />
¢¤££¤§§§ ¢© ¢ £ ¢ ¤§§§ £ ¡ £¢ £ © ¥sub¤,<br />
¥<br />
¡ £ £ ¤£<br />
£ ¢© ¤ ¥ ¤§§§ ¥£ £ ¢ ¤ §§§ £ ¡ £¤§§§ ¢¤£ ¡¤<br />
wobei ¦ £ ¥ ¤§§§ ¥£ £¤ £ ¡¥ eine Programmklausel<br />
von ist, so dass sub¤ der allgemeinste<br />
Unifikator von ¦£ ¢ ist.<br />
Betrachte folgende Rechnung der Länge ¦ £ © :<br />
146
£¤ ¥ §§§¥ £ ¢ ¥ §§§¥ £ ¡ ¥sub¤ §§§ sub¨<br />
Folgerung von . £ ©<br />
Nach I.V.: ist jede Grundinstanz von<br />
¡ ¡ ¢£§ ¡ ¤§ ¡ ¢¢¢ ¡ ¤¥ ¡ ¢¦§ ¡ ¢¢¢ ¡ sub<br />
§£ §¢¢¢ sub¨<br />
eine Folgerung von .<br />
¢¢¢ §<br />
Jede Grundinstanz von £¥ ¤¥§§§¥ ¥£ ¥sub¤ §§§ sub¨<br />
ist Folgerung von .<br />
¦ sub¤ §§§ sub¨ ¢ £ ¢ sub¤ §§§ sub¨ und ¦ £ ¥ ¤§§§ ¥¨.<br />
Also ist jede Grundinstanz von<br />
147
£ ¡<br />
sub sub ¤ §§§ sub ¨ ¢ sub ¤ §§§ sub ¨ ¤§<br />
¥sub ¥sub §§§¥ £ ¡ ¢ £ £¤ ¥ §§§¥ £ ¡ ¤<br />
mit sub £ sub sub ¨.<br />
£¤ ¥<br />
©<br />
§§§ ¤ ¢<br />
(2.) Vollständigkeit:<br />
Seien die Variablen in sub ,<br />
und seien<br />
neue Konstanten.<br />
¤§§§ ¡<br />
¤§§§<br />
¡ ¢ ¡ sub ¤ ¡<br />
¤¡ §§§<br />
¡<br />
¡<br />
Nach Vor.: , d.h. ist unerfüllbar.<br />
<br />
SLD-Resolution ist vollständig für Hornklauseln:<br />
¡ ¡ ¢<br />
¡¥ §§§ ¡ £ © sub¤ §§§ sub¨¥§<br />
Es gilt<br />
¡<br />
§§§ sub¨ . ¢ ¡ sub¤<br />
Ersetzung von durch liefert:<br />
¡ ¢ ¢ <br />
sub sub §§§ ¡ £ © ¤ §§§ ¨¥<br />
und sub sub<br />
¡¥<br />
sub<br />
¡<br />
sub ¨. ¤ §§§ ¡ ¢ ¡<br />
£ ¡ sub<br />
Lifting-Lemma:<br />
©sub sub ¡ ¡<br />
und es gibt eine Substitution<br />
¨¥<br />
£<br />
mit<br />
§§§ ¤ £ §§§ ¡¥ ¡<br />
¤<br />
Also folgt<br />
148
Definition (prozedurale Semantik)<br />
Sei ein Logik-Programm und ¡ eine Zielklausel.<br />
Die £ ¡¥ zugeordnete prozedurale Semantik ist<br />
die folgende Menge von Grundinstanzen von ¡:<br />
§ proz<br />
¡<br />
¡ sub wobei<br />
£ ¡ ¤ ¡¥ ¢ ¢<br />
¡ £ © sub¥ und ¤ ist<br />
eine Grundsubstitution für alle<br />
in<br />
¡<br />
sub vorkommenden £ ¡¥<br />
Variablen<br />
¡<br />
Definition (modelltheoretische Semantik)<br />
Sei ein Logik-Programm und ¡ ¢¤££¤§§§ £ ¡<br />
eine Zielklausel.<br />
Die £ ¡¥ zugeordnete modelltheoretische Semantik<br />
ist die folgende Menge von Grundinstanzen von ¡:<br />
§ mod<br />
£ ¡<br />
¡ ist eine Grundinstanz von<br />
und<br />
¡¥ ¢ ¡ ¥ ¢ ¡ .<br />
£ £¤¥§§§¥£<br />
149
Satz von Clark (2.): £ ¡<br />
Satz<br />
Für alle Hornklauselprogramme und Zielklauseln<br />
¡ gilt<br />
Beweis:<br />
”<br />
Dann:<br />
§ proz<br />
£ ¡¥ ¢ §mod<br />
£ ¡¥§<br />
“: Sei ¡ ¨ § proz<br />
£ ¡¥.<br />
£ ¡ ¡¥ ¡ §§§ ¡ £ © sub¥<br />
und ¡ ist eine Grundinstanz von £ £¤¥§§§¥£ ¡ ¥sub.<br />
Satz von Clark (1.): ¢ ¡ , also ¡ ¨ § mod<br />
£ ¡¥.<br />
¡ “: Sei<br />
” § ¡ mod ¡¥.<br />
Dann ist ¨ eine<br />
£<br />
Grundinstanz von ¡ ¥,<br />
£<br />
und , d.h. ¥sub für eine<br />
¥ §§§¥ £ £ ¡ £¤ ¡ ¡ ¡<br />
Grundsubstitution sub . Also ist jede Grundinstanz<br />
¢<br />
von ¥sub eine Folgerung von<br />
¢<br />
.<br />
£¤¥ £ §§§¥ ¡ £ §§§¥ ¥ £¤ £<br />
¡ ¡ © sub¥<br />
und es gibt eine Substitution mit<br />
§§§ £ ¡¥<br />
¤<br />
¥sub ¥sub ¤.<br />
¥ §§§¥ £ ¡ ¢ £ £¤ ¥ §§§¥ £ ¡ £¤ £ ¢ ¡<br />
¡ § Also: proz ¡¥. £<br />
150<br />
©<br />
¨
¦§<br />
£ § ¦<br />
Zielklausel: ¤ £ £¦ ¥ §<br />
¦ 1. ¤ £ ausgewählt: (a) ¥<br />
(b)<br />
§ £ <br />
£ ¥ § £ ¤<br />
<strong>4.</strong>3 Auswertungsstrategien<br />
Logik-Programme sind nicht-deterministisch:<br />
¡ sub für £ ¡ ¢ ¢ ¥ § ¢ © ¤§§§ ¢ sub¥<br />
Eine Auswertungsstrategie legt fest, wie der jeweils<br />
nächste Schritt ausgewählt wird.<br />
¡ §<br />
£<br />
Zwei Ursachen für den Nicht-Determinismus:<br />
1. Art: Mehrere Programmklauseln sind auf ein<br />
Literal der Zielklausel anwendbar.<br />
2. Art: Zielklausel enthält mehrere Literale.<br />
Beispiel:<br />
Logik-Programm: ¦ £ .<br />
¤ (c) ¥ £<br />
Beachte: möglicherweise ergeben sich<br />
verschiedene Ergebnisse.<br />
§ £<br />
151
aktuelle Zielklausel<br />
Nicht-Det. 2. Art<br />
¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦<br />
Auswahl des<br />
Prozeduraufrufs<br />
Nicht-Det. 1. Art<br />
<br />
<br />
<br />
<br />
neue Zielklausel<br />
<br />
<br />
<br />
<br />
<br />
£<br />
¥<br />
¤ £<br />
<br />
<br />
¢ £<br />
¡<br />
<br />
£<br />
¤ £<br />
¥<br />
¥<br />
£<br />
§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§<br />
§<br />
¢ £<br />
<br />
¢ £<br />
¥<br />
¢ £<br />
¢ £<br />
¡<br />
¡<br />
¡<br />
<br />
£<br />
¥<br />
¢ £<br />
¡<br />
<br />
¤ £<br />
¥<br />
<br />
<br />
<br />
<br />
152<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
2.<br />
¨£<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©<br />
©
££££££££££££££££££££££££££££<br />
sub sub<br />
¤¢¢¢ ¥ ¢¢¢ ¨£ § <br />
§¢¢¢ ©<br />
§¢¢¢ ¢ ¢¢¢ ¡¢¢¢ ¨<br />
¤ ¨ ©¥§¢¢¢ ¥¦<br />
©<br />
£££££££££££££££££££££££££££<br />
§¢¢¢ ¢ ¢¢¢ ¥ ¢¢¢ ¨£ sub§§<br />
© ¨ © ¤§¢¢¢ ¤§<br />
¢<br />
££££££££££££££££££££££££££££<br />
§¢¢¢ ¤¢¢¢ ¥ ¢¢¢ ¨£ sub§§ sub§<br />
©<br />
Vertauschungslemma<br />
Gegeben seien zwei aufeinanderfolgende<br />
SLD-Resolutionsschritte<br />
§¢¢¢ ¢ ¢¢¢ ¡¢¢¢ ¨<br />
© ¨ © ¤§¢¢¢ ¤§<br />
¢<br />
£££££££££££££££££££££££££££<br />
<br />
sub<br />
¤¢¢¢ ¡¢¢¢ ¨£ § ¤ ¨ ©¥§¢¢¢ ¥¦<br />
§¢¢¢ ©<br />
Dann kann man die Reihenfolge der Literale, nach<br />
denen resolviert wird, vertauschen:<br />
wobei sub¤sub¦ mit sub ¤sub ¦ identisch sind bis auf<br />
eventuelle Variablenumbenennungen.<br />
153
Beweis:<br />
sub¤sub¦ sub¦ sub¤sub¦<br />
Also existiert Resolvent von<br />
und<br />
¢<br />
¡,<br />
£<br />
wobei sub der<br />
¢<br />
allgemeinste<br />
§§§ £¨<br />
¤££¤§§§ £<br />
£<br />
Unifikator von und sei. Dann gibt es eine Substitution<br />
<br />
mit<br />
¤§§§<br />
sub<br />
¤<br />
¤.<br />
£<br />
¤ ¢ sub¤sub¦ ¤<br />
¢ sub ¤ ¦ ¢ ¢ ¢<br />
¦¤ ¦ sub¤sub¦ sub¤sub¦<br />
sub ¤.<br />
Also existiert Resolvent<br />
¢ ¢ von<br />
£ ¤<br />
¤<br />
£¨¥sub und<br />
£<br />
§§§ ¤ ¤ £<br />
, wobei sub ¥ £¤§§§ £ der allgemeinste Uni-<br />
¥¡ £ §§§ ¢ ¦ ¤§§§ ¢ ¦<br />
fikator von £ ¢ sub ¤ und ¦ sei.<br />
noch z.z.:<br />
Es gibt Substitutionen ¤ und ¤ mit<br />
sub ¤sub und sub ¤sub ¤ sub¤sub¦ sub¤sub¦ ¦¤ .<br />
sub ¤¤, d.h. sub für eine Subst. .<br />
¦ ¢ ¢<br />
¦¤ ¤ ¦¤ ¤<br />
Damit: sub sub ¤sub .<br />
¢ ¢ ¢ £<br />
¦¤ ¢ ¤¤ sub¤sub¦ ¢<br />
sub ¤sub ¢ sub ¢ sub ¤sub ¦,<br />
¦ ¦<br />
d.h., sub ¢ ¤sub für eine Substitution .<br />
¥ £ ¥ ¦ ¦<br />
¤ sub¤¤ ¢ ¦<br />
sub¤¤ sub ¤sub sub ¤sub ¦ £ ¥ ¥ ,<br />
¢ ¥ £ ¦ ¢ ¢<br />
sub¤¤ ¤<br />
d.h., für eine Substitution .<br />
¢<br />
¤ ¥ ¤ sub¦¤<br />
Also: sub ¤sub .<br />
¢<br />
©<br />
sub¤sub¦¤ ¥ ¢ sub¤¤ ¢ ¦<br />
154
Definition<br />
Eine Rechnung eines Logik-Programms heißt<br />
kanonisch, wenn bei jedem Konfigurationsübergang<br />
nach dem am weitesten links stehenden Literal der<br />
aktuellen Zielklausel resolviert wird.<br />
Satz<br />
Sei £ ¡<br />
Rechnung des Logik-Programms . Dann gibt es<br />
eine erfolgreiche und kanonische Rechnung von<br />
bei <strong>Eingabe</strong> ¡ derselben Länge und mit demselben<br />
Rechenergebnis.<br />
¡¥ ¡ §§§ ¡ £ © sub¥ eine erfolgreiche<br />
Beweis:<br />
Vertauschungslemma anwenden, um gegebene<br />
Rechnung in eine kanonische Rechnung zu überführen.<br />
Ab jetzt nur noch kanonische Rechnungen.<br />
Nur noch Nicht-Determinismus der 1. Art!<br />
Alle kanonischen Rechnungen von bei <strong>Eingabe</strong><br />
©<br />
dargestellt.<br />
Zur Vereinfachung:<br />
Substitutionen nicht angeben.<br />
¡ werden durch einen Baum mit Wurzel £ ¡ ¡¥<br />
155
Beispiel:<br />
£ ¥ £ £ ¥ £ Logik-Programm :<br />
1. ¥.<br />
2. ¥.<br />
3. £¡ ¢¥.<br />
Zielklausel:<br />
Kanonische Rechnungen:<br />
¤ £ £ ¢¥.<br />
© ¡ £<br />
¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢<br />
§<br />
£££££££££ £<br />
¦<br />
¡ R-Ergebnis:<br />
£<br />
¡ £¤ £ ©<br />
<br />
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥<br />
§<br />
unendliche<br />
Rechnung<br />
¡ §£¤ §£¤ £ ©<br />
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨<br />
§<br />
¤ £ ©<br />
<br />
¦<br />
¡ R-Ergebnis:<br />
£<br />
© ¤ £¤ £<br />
<br />
¤<br />
nicht-erfolgr.<br />
Rechnung<br />
£ ©<br />
156
Deterministische Auswahlstrategie:<br />
systematischer Durchlauf des gesamten kanonischen<br />
Berechnungsbaums bis eine erfolgreiche Rechnung<br />
gefunden wird.<br />
Breadth-First Strategie: vollständig, aber aufwendig<br />
Depth-First Strategie:<br />
eventuell effizienter,<br />
aber nicht vollständig<br />
Kowalski:<br />
Algorithmus = Logic + Control<br />
157