Kurze Einführung in PROLOG Aussagenlogik

Werbung
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
Herunterladen