23.01.2015 Aufrufe

Kapitel 4. Eingabe (Anfrage) : Formel ...

Kapitel 4. Eingabe (Anfrage) : Formel ...

Kapitel 4. Eingabe (Anfrage) : Formel ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!