29.05.2002 Kurze Einführung in PROLOG Programmieren mit Logik Vorlesung ITS - WS2001 Diplm.-Inform. (FH) Thomas Wendt 1 Aussagenlogik n Die klassische Logik betrachtet nur zweiwertige Aussagen: n n Jede Aussage ist entweder wahr oder falsch. Es gibt keine Aussage, die sowohl falsch als auch wahr sein kann. (Satz vom ausgeschlossenem Dritten bzw. Satz vom ausgeschlossenen Widerspruch) n Aussagen können sein: n n n n Aussagen können nicht sein: n n Celina ist die Tochter von Thomas. (WAHR) Loreena ist ein Mädchen. (WAHR) Der Mond ist ein grüner Käse. (FALSCH) Celina ist klein. Es können allerdings auch Aussagen existieren, deren Wahrheitswert noch nicht ermittelt ist: n Jede gerade natürliche Zahl lässt sich als Summe zweier Primzahlen darstellen (GOLDBACHsche Vermutung) Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 2 1 29.05.2002 Aussagenlogik Aussagen werden durch Symbole (aussagenlogische Variablen) repräsentiert n n n Sei A die Aussage: "Loreena ist ein Mädchen" Sei B die Aussage: "Loreena ist ein Kind von Anja" (Sowohl A als auch B sind atomare Aussagen) Aussagen können auch zu komplexen bzw. zusammengesetzten Aussagen gekoppelt werden n n A UND B bedeutet "Loreena ist ein Mädchen und Loreena ist ein Kind von Anja" Es gibt verschiedene Möglichkeiten der Kombination von Aussagen n Symbol Bezeichnung Beispiel Aussage ist wahr, wenn... ∩ Und A∩B A und B wahr sind ∪ Oder A∪B A oder B wahr sind ¬ Nicht (Negation) ⇒ Implikation A ⇒B B wahr ist, falss A wahr ist ⇔ Äquivalenz A⇔A A genau dann wahr ist, wenn B wahr ist ¬A Vorlesung ITS - WS2001 A nicht wahr ist Diplm.-Inform. (FH) Thomas Wendt 3 Aussagenlogik Die Definition von Verknüpfungen kann mit Hilfe einer Wahrheitswerttabelle erfolgen A ⇒ B steht für: Wenn A wahr ist, dann ist B zwingend wahr A ⇔ B steht für: A ist genau dann wahr, wenn B wahr ist Aussagenvariablen können sich auch auf zusammengesetzte Aussagen beziehen; (Sei X die Aussage A ∩ B) Die Verknüpfungsoperatoren können nun auch auf diese Variablen angewendet werden à Aussagelogische Formel n n n n A B ¬A A∩ ∩B A∪ ∪B A⇒ ⇒B A⇔ ⇔B w w f w w w w w f f f w f f f w w f w w f f f w f f w w Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 4 2 29.05.2002 Prädikatenlogik In der Aussagenlogik ist jede aussagenlogischen Variable im Grunde eine Konstante, da sie einen speziellen Sachverhalt beinhaltet. Die Prädikatenlogik erweitert die Aussagenlogik um drei wesentliche Merkmale: n n 1. 2. 3. Verwendung eine All-Quantors: Für alle ... gilt ... Symbol ∀ Verwendung eines Existenz-Quantors: Es existiert ein ... so dass gilt ... Symbol ∃ Verwendung von Variablen und somit Verallgemeinerungen z.B. kind(A,B) wenn A = "loreena" und B = "anja" , dann erhält man kind(loreena,anja) mit der Interpretation "Loreena ist ein Kind von Anja" Klassisches Beispiel: (Syllogismus) ∀ X (mensch(X) ⇒ sterblich(X)) mensch(sokrates) à Modus Pones sterblich(sokrates) n Vorlesung ITS - WS2001 (Prädikatenlogsicher Ausdruck) Diplm.-Inform. (FH) Thomas Wendt 5 Atom Kleinbuchstabe Grossbuchstabe Kleinbuchstabe Ziffer Atom _ ' Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Zeichen Diplm.-Inform. (FH) Thomas Wendt ' 6 3 29.05.2002 Variable Kleinbuchstabe Grossbuchstabe Grossbuchstabe Variable _ Ziffer _ Vorlesung ITS - WS2001 Diplm.-Inform. (FH) Thomas Wendt 7 Terme Variable Term Atom ( ) Term , Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 8 4 29.05.2002 Term n Terme erster Ordnung (Terme) sind die einzigen Datenstrukturen in Prolog n mit Termen werden sowohl die Daten als auch ein PROLOGProgramm dargestellt Terme können bestehen aus n n einfachen Atomen: • loreena • r2_3PO • tHOMAS n Variablen • X • Elternteil • _12Liste n Atomen, gefolgt von in Klammern gesetzten Termen • elternteil(anja, loreena) • alter(celina, 4) • vater(X, loreena) Vorlesung ITS - WS2001 Diplm.-Inform. (FH) Thomas Wendt 9 Prädikat-Argument-Notation n n n n n eine Darstellung der Form atom(term1,term2,...) heißt Prädikat-Argument-Notation das Atom ist dabei das Prädikat die Terme in Klammern bilden die Argumente Ein Prädikat praedikat mit n Argument wird als n-stelliges Prädikat bezeichnet Notation: praedikat/n elternteil(anja,loreena) à elternteil/2 Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 10 5 29.05.2002 Fakten n eine einfache prädikatenlogische Aussage beschreibt n n n Eine einfache Aussage wird als Faktum und durch einen Term, gefolgt durch eine Punkt (.) dargestellt. n n n n n n elternteil(anja, loreena). fakultaet(0,1). kind(anja, thomas, loreena). kind(anja, thomas, celina). Das Prädikat kind/3 beschreibt die Fakten, das Anja und Thomas zwei Kinder mit den Namen Loreena und Celina haben. Für das Prädikat kind/3 soll die Interpretation gelten: 1. 2. 3. n entweder ein Objekt und eine seiner Eigenschaften oder mehrere Objekte und die Relationen zwischen ihnen Argument: Name der Mutter Argument: Name des Vaters Argument: Name des Kindes Die Interpretation eines Prädikats und seiner Argumente ist grundsätzlich beliebig. Sie sollte allerdings für ein bestimmtes Prädikat in einem PROLOG-Programm immer konsistent beleiben. Vorlesung ITS - WS2001 Diplm.-Inform. (FH) Thomas Wendt 11 Fakten (Eindeutigkeit) n Angenommen, der Name des Kindes ist derselbe wie der Name der Mutter n n n kind(anja, thomas, anja). Diese Darstellung lässt sich zwar nach der Regel für das Prädikat kind/3 interpretieren, jedoch repräsentieren für PROLOG die beiden Atome anja dasselbe Objekt. In der inneren Logik bedeutet dies – alles, was für die Mutter anja gilt, gilt auch für die Tochter anja. Wird z.B. der Mann von Mutter anja abgeleitet, dann ist das auch der Mann von Tochter anja. Das sollte jedoch ein Widerspruch sein. Korrekte Darstellung n kind(anja_1, thomas, anja_2). Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 12 6 29.05.2002 Fakten (closed world assumption) n Betrachten wir eine alternative Darstellung der durch das Prädikat kind/3 repäsentieren Fakten: n n n n n n n elternteil(anja, loreena). elternteil(anja, celina). elternteil(thomas, loreena). elternteil(thomas, celina). frau(anja). mann(thomas). Der PROLOG-Interpreter hat außer dem programmierten Wissen kein zusätzliches Wissen über die Welt. Er geht immer von der Vollständigkeit des ihm zur Verfügung gestellten Wissens aus. Er kann nicht ermitteln n n ob noch weitere Kinder existieren (könnte ein Mensch aus den gegeben Fakten auch nicht) ob Loreena oder Celina Töchter oder Söhne sind (ein Mensch wäre auf Grund der gegebenen Fakten dazu in der Lage) Vorlesung ITS - WS2001 Diplm.-Inform. (FH) Thomas Wendt 13 Fakten (closed world assumption) n PROLOG geht dabei davon aus: Alles , was nicht durch Fakten in der Datenbasis belegt ist bzw. durch Regeln abgeleitet werden kann, ist grundsätzlich falsch. Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 14 7 29.05.2002 Regeln n n n Die Repräsentation von Wissen zur Lösung eines Problem einzig durch Fakten würde bedeuten, dass sämtliche Lösungen explizit durch Angabe der entsprechenden Fakten angegeben werden müssen. PROLOG gestattet Verallgemeinerungen in Form von Schlussregeln (kurz Regeln) Eine Regel wird in Form einer Implikation dargestellt. Prämisse (bzw. Antezedens) ⇒ Konklusion (bzw. Konsequenz) Aussage1 ∩ ...∩ Aussagen ⇒ Aussage0 n Ein Faktum ist eine Spezielle Regel, in der die Prämisse immer erf üllt ist: true ⇒ Faktum. n n Regeln, deren Prämisse aus beliebig vielen, durch Konjunktionen verknüpften Aussagen und deren Konklusion aus einer einfachen Aussage besteht, heißen Hornklauseln. Mit einer Regel kann eine prädikatenlogische Aussage abhängig von anderen Aussagen definiert werden. Die anderen Aussagen können durch Fakten beschrieben werden oder wiederum andere, durch Regeln definierte Aussagen sein. Vorlesung ITS - WS2001 Diplm.-Inform. (FH) Thomas Wendt 15 Regeln n Durch logische Kombinationen lassen sich lassen sich aus den Beispielen der Prädikate elternteil/2, frau/1 und mann/1 neue Aussagen definieren Anja ist die Mutter von Celina und Loreena n Celina und Loreena sind Geschwister n elternteil(anja, celina) ∩ frau(anja ) ⇒ mutter(anja, celina) elternteil(anja, loreena) ∩ frau(anja) ⇒ mutter(anja, loreena) elternteil(anja, celina) ∩ elternteil(anja, loreena) ⇒ geschwister(celina, loreena ) elternteil(anja , loreena) ∩ elternteil(anja, celina) ⇒ geschwister(celina, loreena) elternteil(thomas, celina) ∩ elternteil(thomas, loreena) ⇒ geschwister(celina , loreena) elternteil(thomas, loreena) ∩ elternteil(thomas , celina) ⇒ geschwister(celina , loreena) n Die explizite Definition der neuen Prädikate mutter/2 bzw. geschwister/2 ist mühsam und bei genügend großer Datenbasis kaum handhabbar; abhilfe schafft die Definition der Prädikate durch allgemeingültige Regeln unter Verwendung von Variablen: Z.B Jeder Elternteil eines Kindes, der eine Frau ist, ist die Mutter des Kindes elternteil(E, K) ∩ frau(E) ⇒ mutter(E,K) Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 16 8 29.05.2002 Regeln in PROLOG n n n n In PROLOG wird die Implikation bei der Definition einer Klausel umgekehrt aufgeschrieben: Konklusion ⇐ Prämisse Aussage0 ⇐ Aussage1 ∩ ... ∩ AussageN Der Implikationsoperator wird dabei durch das Symbol :ersetzt und der Konjunktion durch ein Komma (,). Am Ende der Definition schließt ein Punkt die Klausel ab: Aussage0 :- Aussage1 , ... , AussageN. Prädikat mutter/2 mutter(E,K) :elternteil(E,K), frau(E). Prädikat geschwister/2 geschwister(X,Y) :elternteil(E,X), elternteil(E,Y), X \= Y. Vorlesung ITS - WS2001 Diplm.-Inform. (FH) Thomas Wendt 17 Einfachen Abfragen mit Grundtermen n n n Unter Grundterme versteht man Terme ohne Variablen vorkommen Um Anfragen an ein PROLOG-System zu stellen, muss eine Datenbasis mit Fakten und Regeln vorhanden und geladen werden. Jedes PROLOG-Programm wird in einer einfachen ASCIIDatei entworfen. n Für die weiteren Betrachtungen wird das Beispielprogramm verwand.pl betrachtet. n Geladen wird die Datenbank durch die "Abfrage" ?- consult('verwand.pl'). ↵ yes Konnte ein Abfrage positiv evaluiert werden, dann wird yes ausgegeben, ansonsten no. n Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 18 9 29.05.2002 Abfragen mit Grundtermen n n n n n Einfache Abfragen sind Bestätigungsabfragen, bei denen der Wahrheitsgehalt eines Faktes oder eine Klausel gesucht wird: ?- elternteil(anja, celina). ↵ yes ?- elternteil(anja, thomas).↵ no Nach der Eingabe der Anfrage versucht der Interpreter durch Pattern Matching ein zur Anfrage passendes Prädikat (Fakt oder Regel) mit der gleichen Stelligkeit zu finden. Sämtliche Fakten und Regeln werden dabei in der Reihenfolge ihrer Definition von oben nach untern hin überprüft. Konnte ein passendes Prädikat gefunden werden, wird versucht, die Argumente des Prädikates mit den Argumenten in der Anfrage zu unifizieren. Schlägt das Pattern Matching bzw. das Unifizieren fehl, wird ein Backtracking ausgelöst, durch erneutes Pattern Matching und Unifizieren ein andere Fakt gesucht wird. Konnte keine positive Lösung gefunden werden, schlägt die Anfrage fehl. Vorlesung ITS - WS2001 Diplm.-Inform. (FH) Thomas Wendt 19 Einfachen Abfragen mit Variablen n n n n Terme mit Variablen werden auch offene Terme genannt. Bei einer Anfrage mit Variablen kann der Wert dieser durch Unifikation mit einem nicht variablen Term verändert werden. Konnte ein Anfrage positiv beantwortet werden, werden alle Variablen mit ihren aktuellen "Belegungen" ausgegeben: ?- elternteil(anja, X).↵ X = celina↵ yes Unter Umständen ist die gefundene Lösung nicht die einzige. Durch Eingabe eine Semikolon (;) nach der angezeigten Lösung wird ein Backtracking ausgelöst und nach weiteren Lösungen der Anfrage gesucht: ?- elternteil(anja,X).↵ X = celina; X = loreena; no Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 20 10 29.05.2002 SLD-Bäume n n n n n n n Für jede Anfrage wird vom PROLOG-Interpreter ein SLD-Baum erzeugt (selected literal with definite clauses). Die Knoten eines SLD-Baum sind einfache bzw. komplexe Anfragen. Die Blätter sind entweder true oder fail; sie kennzeichnen erfüllbare bzw. unerfüllbare Pfade durch den SLD-Baum. Um eine Lösung für eine Anfrage zu finden, wird ihr SLDBaum in der Tiefe zuerst und von rechts nach links traversiert. Dabei kennzeichnet jedes Blatt true eine Lösung für die Anfrage. Kommt der Interpeter bei der Traversierung zu einem trueBlatt, hält er an und gibt die aktuelle Belegung aller in der Anfrage vorkommenden Variablen aus Besitzt ein SLD-Baum nur fail-Blätter, dann gibt der Interpreter no aus. Der Interpreter simuliert die Traversierung; es wird nie der ganze SLD-Baum vorberechnet und durchlaufen, sondern nur die aktuell betrachteten Teile. Vorlesung ITS - WS2001 Diplm.-Inform. (FH) Thomas Wendt 21 Rekursion n Die Rekursion ist in PROLOG eine der grundlegendsten und wichtigsten Programmiertechniken. n Bei der Definition rekursiver Klauseln muss auf die Terminierung geachtet werden. Sie wird durch einen Term sichergestellt, der als Argument im Kopf einer rekursiven Klausel vorkommt. Dieser Term bzw. dieses Argument wird als Rekursionsargument genannt. Für ein Rekursionsargument muss n n n n entweder eine totale Ordnung (Existenz einer oberen bzw. eine unteren Schranke) oder eine partielle Ordnung (kettenabgeschlossen. dh. jede Teilmenge von Termen, die total geordnet sind, hat entweder eine untere oder eine obere Schranke) existieren. Welche Schranke benötigt wird, hängt vom Rekursionsschritt ab: Wird das Rekursionsargument n n reduziert (untere Schranke) oder erweitert (obere Schranke). Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 22 11 29.05.2002 Rekursion (Bsp. Fakultät1) n n n n! = n*(n-1)! n ∈ℵ (Fakultät) PROLOG-Regeln (Beispielprogramm fakultaet.pl) fak(N,Y):N1 is N – 1, fak(N1,Y1), Y is N*Y1. fak(0,1). Vorlesung ITS - WS2001 Diplm.-Inform. (FH) Thomas Wendt 23 Rekursion (Bsp. Fakultät2) n fak2(0,1). fak2(N,Y):N1 is N – 1, fak2(N1,Y1), Y is N*Y1. Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 24 12 29.05.2002 Rekursion (Bsp. Fakultät3) n fak3(0,1). fak3(N,Y):N > 0, N1 is N – 1, fak2(N1,Y1), Y is N*Y1. Vorlesung ITS - WS2001 Diplm.-Inform. (FH) Thomas Wendt 25 Reihenfolge der Klauseln n Betrachtet man die folgende logische Aussage Z = A ∩ B ∩ C dann ist der Wahrheitsgehalt von Z abhängig vom Wahrheitsgehalt von A, B und C. Sind die einzelnen Prämissen wahr, dann ist auch die Konklusion Z wahr. Das selbe gilt auch für die Aussagen Z = B ∩ A ∩ C Z = C ∩ B ∩ A u.ä. n Grund dafür ist die Assoziativität und Kommunikativität der logischen Operation UND. n n n Assoziativität: (A ∩ B) ∩ C = A ∩ (B ∩ C) Kommunikativität: A ∩ B = B ∩ C PROLOG: (zwei identische Anfragen) ?- frau(anja), elternteil(anja,loreena). ?- elternteil(anja, loreena), frau(anja). Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 26 13 29.05.2002 Reihenfolge der Klauseln (2) n In der logischen Theorie ist die Reihenfolge der einfachen Anfragen im Rumpf einer Klausel zwar beliebig, in der Praxis von PROLOG jedoch nicht immer. Sie ist immer dann relevant, wenn ein Argument eines Prädikates zum Zeitpunkt der Anfrage instantiiert sein muss und die Instantiierung durch eine andere Anfrage im selben Klauselrumpf erfolgt. n Die folgenden Anfrage sind daher nicht äquivalent: n n n korrekt: ?- X = 1, Y is X + 1. X = 1 Y = 2; (Backtracking) no falsch: ?- Y is X + 1, X = 1. (Laufzeitfehler) Vorlesung ITS - WS2001 Diplm.-Inform. (FH) Thomas Wendt 27 Der Cut n n n n n Ein Cut ist eine einfache Anfrage, die immer erfüllt ist und durch ein Ausrufezeichen (!) symbolisiert wird. Ein Cut besitzt Seiteneffekte, welche das prozedurale Verhalten des PROLOG-Interpreter beeinflussen. Ein Cut beschneidet den SLD-Baum für eine Anfrage, sobald das Cut ausgewertet wird. Die eigentliche Wirkung tritt aber erst beim Backtracking auf! Der Cut-Operator bietet die Möglichkeit, die Suche durch den SLD-Baum zu beschleunigen und ein PROLOGProgramm effizienter zu gestalten. Bei der Benutzung des Cuts können allerdings auch Resultate errechnet werden, die aus logischer Sicht nicht mehr zu erklären sind. Deshalb wird er Cut auch zu den Nichtlogischen Bestandteilen von PROLOG gezählt, ähnlich wie die Reihenfolgebedingung von Klauseln. Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 28 14 29.05.2002 Der Cut n Die Wirkungsweise des Cut-Operator kann wie folgt formuliert werden: Wenn im Beweis eines Prädikats p(…) die Regel p(…) :- A(…,X,…), !, B(…,X,…). verwendet wird und A zum ersten Mal bewiesen ist, dann wird dieser Beweis "eingefroren", also kein weiterer Beweis für p(…) und A(…,X,…) gesucht. D.h. weiter, p(…) ist nur noch beweisbar, falls B(…,X,…) mit den im Beweise von A(…,X,…) gefundenen Variablensubstitutionen bewiesen werden kann. Vorlesung ITS - WS2001 Diplm.-Inform. (FH) Thomas Wendt 29 Beispiel: union n Problembeschreibung n n n Definiert werden soll ein Prädikat für die Vereinigung zweier Mengen. Eine Menge wird dabei in Prolog als Liste dargestellt, wobei jedes Element nur einmal in der Menge vorkommt (also keine Wiederholungen). Sei L1 = { a, b, c, d, e } und L2 = { a, 1, d, e, 2}. Die Vereinigung ist union(L1,L2) = { a, b, c, d, 1, 2 } Naiver Versuch: union([], Menge, Menge). union([X|R], Menge, Menge2) :member(X, Menge), union(R, Menge, Menge2). union([X|R], Menge, [X|Menge2]) :union(R, Menge, Menge2). Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 30 15 29.05.2002 union – SLD-Baum n Öffne SWI mit mengen.pl n Öffne SLD-Union Vorlesung ITS - WS2001 Diplm.-Inform. (FH) Thomas Wendt 31 union – Komplementär Bedingung n union([], Menge, Menge). union([X|R], Menge, Menge2) :member(X, Menge), union(R, Menge, Menge2). union([X|R], Menge, [X|Menge2]) :not member(X, Menge), union(R, Menge, Menge2). n Öffne SLD-Baum Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 32 16 29.05.2002 union – Anwendung des Cut n union([], Menge, Menge). union([X|R], Menge, Menge2) :member(X, Menge), !, union(R, Menge, Menge2). union([X|R], Menge, [X|Menge2]) :union(R, Menge, Menge2). n Öffne SLD-Baum Vorlesung ITS - WS2001 Diplm.-Inform. (FH) Thomas Wendt 33 Cut-Arten n Ein Cut führt dazu, das folgende Alternativen bei der Auswertung im Falle eine Backtracking nicht mehr berücksichtigt werden: n n n Durch den Cut könnten true-Blätter (siehe union) als auch fail-Blätter (siehe fakultaet) entfernt werden n n n Innerhalb der selben Klausel, in der das Cut vorkommt, werden für sämtliche Anfragen vor dem Cut keine weiteren Lösungen mehr gesucht. Für sämtliche nachfolgenden Klauseln, die dasselbe Prädikat definieren wie die Klausel, in der das Cut vorkommt, werden ebenfalls keine weiteren Lösungen gesucht. Ein grünes Cut verändert die Semantik eines Programms nicht, weil es ausschließlich Unterbäume mit fail-Blättern aus einem SLD-Baum entfernt. Ein rotes Cut verändert die Semantik eines Programms, d.h., es verhindert mögliche weitere Lösungen, in dem es Unterbäume mit trueBlättern entfernt. Diese Lösungen müssen jedoch keine gültigen Lösungen für eine spezielle Aufgabe sein! Beispiel Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 34 17 29.05.2002 Explizite Formulierung von Determinismus n n n Backtracking ist nicht-deterministisch: zu einer Anfrage können verschiedene Lösungen gefunden werden. Manchmal ist es wünschenswert, nur eine Lösung zu besitzen; z.B. bei der Berechnung von Funktionswerten. Im allge. kann man für beliebige Prädikate p(…) erzwingen, daß höchstens eine Lösung gesucht wird, indem man jede Programmklausel mit einem Cut-Operator abschließt: p(…) :- …, !. p(…) :- …, !. … fakulaet(0,1). fakulaet(N,Y) :N1 is N – 1, fakulaet(N1,Y1), Y is N * Y1. ?- fakultaet(3,Y). Y = 6; fakulaet(0,1) :- ! . fakulaet(N,Y) :N1 is N – 1, fakulaet(N1,Y1), Y is N * Y1, !. ?- fakultaet(3,Y). Y = 6; no Vorlesung ITS - WS2001 (Laufzeitfehler; Stack-Overflow) Diplm.-Inform. (FH) Thomas Wendt 35 Simulation von Fallunterscheidungen n n n n n In jeder (?) Programmiersprache gibt es ein Konstrukt, um eine Fallunterscheidung der Form WENN Bedg DANN A SONST B zu realisieren. Für PROLOG könnte man diese Fallunterscheidung etwas umformulieren C :- WENN Bedg DANN A SONST B. In der korrekten Syntax: C :- Bedg, A. C :- not Bedg, B. Das Fehlen von not Bedg würde beim Backtracking dazu führen, das die Klausel B bewiesen wird, wenn beim ersten Beweis von C die Klausel A bewiesen wurde. Um not Bedg zu beweisen, muss aber auf jeden Fall auch im Backtracking Bedg bewiesen werden, selbst wenn Bedg im ersten Fall – bei A – schon bewiesen wurde. Dieser Beweis kann mittels Cut umgangen werden C :- Bedg, !, A. C :- B. Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 36 18 29.05.2002 Simulation einer Negation n n n n Eine Kombination von ! und fail/0 sagt dem PROLOGInterpreter, dass die Erfüllbarkeit der komplexen Anfrage vor dem Cut zwangsläufig zur Unerfüllbarkeit einer Anfrage führen muss. a:- b, !, fail. a:- c. Für jedes Prädikat, das mit einer !, fail -Kombination definiert wird, existiert eine äquivalente Definition mit dem Systemprädikat not/1. a:- not b, c. Beispiel: Ein Prädikat verschieden/2 soll auf der Basis des Prädikate gleich/2 definiert werden (ohne not) gleich(X,X). verschieden(X,Y) :- gleich(X,Y), !, fail. verschieden(X,Y). Allgemein gilt: a:- not b. a:- b, !, fail. a. Vorlesung ITS - WS2001 Dipl.-Inform. (FH) Thomas Wendt Diplm.-Inform. (FH) Thomas Wendt 37 19