Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
Einführung in die KI – Prolog
Michael Schenke | Einführung in die KI -Prolog 20/09/18 | Seite 1
2
Aussagen bekommen Struktur
Prädikatenlogik Aussagen bekommen Struktur
3
Prädikatenlogik Zwei Aspekte der PL: Erweiterung der Aussagenlogik
Hinzu kommen Individuen, Individuenvariablen Funktionen Relationen Quantoren (, ) Es entfallen: Aussagenvariablen (AVar) Präzisierung der Aussagenlogik Darstellung von Aussagen durch Strukturierung
4
3.1 Syntax der Prädikatenlogik
5
Syntax der Prädikatenlogik
Logische Bestandteile: Junktoren wie in der Aussagenlogik, Quantoren (, ). Nicht logische Bestandteile: Variablen (Individuenvariablen), Var = Menge der Variablen, Signaturen.
6
Syntax der Prädikatenlogik
Definition (Signatur): Eine Signatur ist ein Paar S=(Funk, Präd) mit: Funk und Präd haben leeren Schnitt und sind Mengen von Paaren aus einem Symbol und einem Element von ℕ0. Die Symbole in Funk heißen Funktionssymbole, die in Präd heißen Prädikatssymbole und die Elemente von ℕ0 heißen die Stelligkeit des Symbols.
7
Syntax der Prädikatenlogik
Beispiel: Die Zahlentheorie basiert auf der Signatur (Funk, Präd) mit Funk = { + 2 , ∗ 2 , 0 0 , 1 0 } Stelligkeit Präd = { = 2 , < 2 }
8
Syntax der Prädikatenlogik
Definition (Sprache): Sei S eine Signatur. Die Sprache LS der Prädikatenlogik zu S ist LS = TermS FormS. Es gelte: Sei X Var X TermS Seien t1, …, tk TermS, 𝑓 𝑘 Funk f(t1,…, tk) TermS
9
Syntax der Prädikatenlogik
Seien t1, …, tk TermS, 𝑝 𝑘 Präd p(t1,…, tk) FormS (atomare Formeln) Seien F1, F2 FormS F1 F2, F1 F2, F1 F2, F1 F2, F1 sind Elemente von FormS Seien X Var, F FormS X F, X F FormS
10
Syntax der Prädikatenlogik
Beispiel 1 r ℝ n ℕ: r n Die Ausdrücke ℝ und ℕ erfordern noch eine mengentheoretische Begründung. Beispiel 2 (mit Signatur der Zahlentheorie) x, +(x,y) x+y (Infixnotation) Konstanten sind 0-stellige Funktionen: 1 0 Funk, abgekürzt 1 1()
11
Syntax der Prädikatenlogik
Welche der folgenden Formeln sind syntaktisch korrekt? x: 2=2 x: 2= 1+2 1 + 1 = 1 2 0: 2=2
12
Syntax der Prädikatenlogik
Beispiel 2 (Fortsetzung) weitere Def.: 2=1+1, 3=2+1, … syntaktisch korrekte Formeln: x: 2=2 x: 2= (Semantisch falsch) syntaktisch nicht korrekte Formeln: 1 + 1 = 1 2 (Junktoren dürfen nur zwischen Formeln stehen.) 0: 2=2 (Null ist keine Variable.)
13
Substitution Definition:
Eine (einfache) Substitution ist eine Abbildung θ von Variablen in Terme, geschrieben als θ = { X1/t1,…, Xn/tn }, falls jede Variable Xi auf den Term ti abgebildet wird. Insbesondere seien alle Xi paarweise verschieden. Im folgenden wird eine Substitution θ = { X1/t1,…, Xn/tn } hochgehoben zu einer Abbildung θ : FormS → FormS. Dabei bedeute F{ X1/t1,…, Xn/tn }, daß jedes freie Vorkommen einer Variablen Xi in der Formel F durch den Term ti ersetzt wird. Ist θ = { }, so ist die hochgehobenen Abbildung die Identität.
14
Substitution Die Ersetzung aller freien Vorkommen aller Xi in F durch ti muss dabei simultan erfolgen, nicht in der Reihenfolge, die in der Substitution angegeben ist. Ist eine nichtsimultane Ersetzung gemeint, müssen mehrere Substitutionen nacheinander angewandt werden. Auch eine solche Hintereinanderausführung von endlich vielen einfachen Substitutionen wird dann „Substitution“ genannt. Die Hintereinanderausführung von Substitutionen ist offenbar assoziativ, allerdings normalerweise nicht kommutativ.
15
Substitution Definition: Seien L1 und L2 Literale. Ein Unifikator von L1 und L2 ist eine Substitution θ mit L1θ = L2 θ. Eine Substitution θ heißt allgemeiner als eine Substitution θ´, wenn es eine Substitution θ´´ gibt mit θ´= θ θ´´. Ein Unifikator θ von L1 und L2 heißt allgemeinster Unifikator, wenn θ allgemeiner ist als alle Unifikatoren von L1 und L2.
16
Substitution Beispiel: L1 = p(X) und L2 = p(Y) mit Variablen X und Y. Unifikatoren sind folgende Substitutionen : θ1 ={X/Z, Y/Z} L1θ1 = L2θ1 = p(Z). θ2={Y/X} L1θ2 = L2θ2 = p(X). θ3={X/t, Y/t} L1θ3 = L2θ3 = p(t). Dabei sei t eine atomare Konstante.
17
Substitution Die ersten beiden Substitutionen sind allgemeinste Unifikatoren. Die dritte ist kein allgemeinster Unifikator, denn es gilt: θ3= θ1{Z/t}= θ2{X/t} Die Idee bei allgemeinsten Unifikatoren ist es, daß man sich bei der Angleichung der Literale noch möglichst viele Freiheiten offen halten möchte.
18
3.2 Semantik der Prädikatenlogik
19
Semantik der Prädikatenlogik
Definition Eine Struktur zu einer Signatur (Funk,Präd) ist ein Paar (D,I) mit: D ist eine Menge (Definitionsbereich, Individuenbereich, Universum), I ist eine Interpretation, also eine Zuordnung von Funktionen und Relationen zu Funktions- und Prädikatssymbolen, jeweils in der richtigen Stelligkeit.
20
Semantik der Prädikatenlogik
Festlegung des Datenbereiches D Zuordnung I: f Funk mit 𝑓 𝑛 wird zugeordnet I(f):Dn D p Präd mit 𝑝 𝑛 wird zugeordnet I(p):Dn 𝔹 Belegungen sind Zuordnungen :Var D (anders als in AL!) -> Boolsche Werte
21
Semantik der Prädikatenlogik
Beispiel (Zahlentheorie) D=ℤ + 2 ⤳ I(+): ℤ x ℤ ℤ ∗ 2 ⤳ I(*): ℤ x ℤ ℤ = 2 ⤳ I(=): ℤ x ℤ 𝔹 < 2 ⤳ I(): ℤ x ℤ 𝔹 0 0 ⤳ I(0): ℤ (Definition von 0 als ganzer Zahl) 1 0 ⤳ I(1): ℤ (Definition von 1 als ganzer Zahl)
22
Semantik der Prädikatenlogik
Definition der Semantik: Terme: M(x)() = (x) M(f(t1,…,tn))() = I(f)(M(t1)(),…,M(tn)())
23
Semantik der Prädikatenlogik
Formeln: M(p(t1,…,tn))()= I(p)(M(t1)(),…,M(tn)()) M(FG)() = M(F)() M(G)(), entspr. für die anderen Junktoren M( x F)() =1 F.a. d D: M(F{ x d })()=1 M( x F)() =1 Ex. d D: M(F{ x d })()=1
24
Semantik der Prädikatenlogik
Satz: x F x F x F x F x (FG) x F x G x (FG) x F x G x y F y x F x y F y x F x F F („implizite Allquantifizierung“)
25
Semantik der Prädikatenlogik
Definition: Die Erfüllungsmenge einer Formel F ist E(F) = { | M(F)()=1} Satz: E(FG) = E(F) E(G) E(F) = \ E(F) E(FG) = E(F) E(G) E(F1 F2) = E(F2) ( \ E(F1))
26
Der logische Folgerungsbegriff
Definition: Seien P Formelmenge, F Formel. P ╞ F F.a. Modelle M gilt M╞ P M╞ F. F ist eine allgemeingültige Formel ╞ F auch abgekürzt durch ╞ F. F heißt erfüllbar ╞ F gilt nicht. G╞ F {G}╞ F
27
Der logische Folgerungsbegriff
Satz: G F G╞ F und F╞ G G╞ F E(G) E(F)
28
3.3 Prädikaten-logische Normalformen
29
Prädikatenlogische Normalformen
Definition: Eine PL-Formel F heißt bereinigt, wenn keine Variable sowohl gebunden als auch frei in F vorkommt und keine zwei durch verschiedene Quantoren gebundene Variablen den gleichen Namen haben. x: x 27 x2 ist nicht zulässig bzw. falsch Weiterführend:
30
Prädikatenlogische Normalformen
Für jede PL Formel F existieren eine PL-Formel G, Variablen Vi und Quantoren Q1, …, Qn, so daß gilt F Q1 V1, Q2 V2,…Qn Vn G, und so daß und G bereinigt ist und keine Quantoren enthält. Definition: Diese Form heißt Pränex–Normalform. x: x 27 x2 ist nicht zulässig bzw. falsch Weiterführend:
31
Prädikatenlogische Normalformen
Beispiel (Konstruktion einer Pränex–Normalform): x: x 27 x: x2 ursprüngliches Format x: x 27 y: y2 bereinigt x y: (x 27 y 2) Pränex-Normalform x: x 27 x2 ist nicht zulässig bzw. falsch Weiterführend:
32
Prädikatenlogische Normalformen
Skolemisierung: Es wird eine Normalform gesucht, die keine Existenzquantoren enthält. In Prolog wird genau das benötigt. Dort gibt es allquantifizierte Formeln. Es werden Instanzen dieser Formeln gesucht. Die Idee der Skolemisierung ist es, daß eine Formel genau dann erfüllbar ist, wenn ihre skolemisierte Form erfüllbar ist.
33
Prädikatenlogische Normalformen
zur Skolemisierung: Gegeben die Formel F. Entferne den am weitesten links stehenden Existenzquantor der Form ∃x in F. Ersetze in F die Variable x durch den Term f(y1, ..., yn) wobei „f“ ein neues Funktionssymbol ist und y1, ... , yn alle Variablen der Allquantoren links des entfernten Existenzquantors sind. Das Ergebnis ist in Skolem-Normalform. Die neuen Funktionen f heißen Skolemfunktionen.
34
Prädikatenlogische Normalformen
Beispiel zur Skolemisierung: In r n: r<n wird der Quantor mit Hilfe der Skolemfunktion größerals ersetzt. r: r<n {n / größerals(r)} = r: r< größerals(r)
35
Prädikatenlogische Normalformen
Idee der Skolemisierung: Eine Formel ist genau dann erfüllbar, wenn ihre skolemisierte Form erfüllbar ist. Der Zeuge der Existenz des Objekts in einem Universum kann nur davon abhängen welche Objekte den Variablen in den Allquantoren links des entsprechenden Existenzquantors vorher zugewiesen wurde. Die Soklemfunktion „berechnet“ eines dieser Objekte.
36
Prädikatenlogische Normalformen
Ziel der Skolemisierung: Soll (wie in PROLOG) eine Lösung, also eine Belegung der freien Variablen, für eine Formel F gefunden werden, so braucht man nur die skolemisierte Form von F zu betrachten, kann also alle Existenzquantoren ignorieren. Wegen der impliziten Allquantifizierung können in PROLOG auch alle Allquantoren beseitigt werden. Dann wird wie in AL gearbeitet.
37
Prädikatenlogische Normalformen
Man kann also jede Formel F in PNF bringen F Q1 V1, Q2 V2,…Qn Vn G, und sich G als bereinigt und skolemisiert vorstellen. G ist jetzt eine Instanz einer AL-Formel, kann also als KKNF gesehen werden: (p11 p12 … p1m1 q11 q12 q1n1) (p21 p22 … p2m2 q21 q22 q2n2) ⁞ ⁞ ⁞ ⁞ ⁞ ⁞ (pk1 pk2 … pkmk qk1 qk2 qknk)
38
Prädikatenlogische Normalformen
In der Logik-Programmierung, dem logischen Teil von Prolog, werden aber nur „Klauseln“ verwendet. Das sind Disjunkte, bei denen mi=1 gilt (ni kann beliebig sein). (pi1 qi1 qi2 … qin) wird durch logische Umformung zu qi1 … qin pi1 .
39
PROgrammieren in LOGik
3.4 PROLOG PROgrammieren in LOGik Programmation en Logique
40
Historie Prolog (vom Französischen: Programmation en Logique, dt.: „Programmieren in Logik“) ist eine Programmiersprache, die Anfang der 1970er Jahre maßgeblich von dem französischen Informatiker Alain Colmerauer entwickelt wurde.
41
Historie Erste Implementierungen wichen in ihrer Syntax stark voneinander ab, aber der Edinburgh-Dialekt setzte sich bald als Quasistandard durch. Er war jedoch nicht formal definiert, bis er 1995 zur Grundlage eines ISO-Standards wurde (ISO/IEC ), der auch ISO-Prolog genannt wird.
42
Historie Der erste Prolog-Interpreter wurde in Marseille in ALGOL W realisiert. Der erste Ansatz für einen Compiler stammte von David H. D. Warren aus Edinburgh. Der erste voll nutzbare Compiler wurde von Preben Folkjaer in München entwickelt. Er verwandte einen von der TU Wien stammenden Zwischencode.
43
Prolog aus logischer Sicht
Prolog besteht im Grunde aus zwei Teilen: dem eigentlichen Kernbestand der logischen Anteile, auch oft Logik-Programmierung genannt. Den nicht-logischen Bestandteilen, z.B. Listenverarbeitung, Arithmetik, „Cut“ (Beeinflussung der Ablaufreihenfolge), …
44
Prolog aus logischer Sicht
Ein Logik-Programm ist eine geordnete Liste von Horn-Klauseln, also einer eingeschränkten Form der Prädikatenlogik erster Ordnung. PL 1. Ordnung: Erweiterung der Aussagenlogik um Prädikate, Allquantor, Existenzquantor. Betrachtet werden Objekte keine Mengen von Objekten. Es ist keine Quantifizierung über Funktions- oder Relationssymbole möglich.
45
Grundprinzip Logik-Programme bestehen aus einer Datenbasis, deren Einträge sich Fakten und Regeln nennen. Beides sind Klauseln, nur daß Fakten keine negativen Literale enthalten, Regeln jedoch mindestens ein solches. pi1 Faktum qi1 … qin pi1 Regel
46
Prolog aus logischer Sicht
Es können eine oder mehrere Anfragen an ein Prolog-Programm gestellt werden. Diese werden in einem Keller verwaltet. Logische Struktur: P Logik-Programm, A Anfrage(-Keller) Ziel: Beweise P A false
47
Prolog aus logischer Sicht
Stellt man dem System eine Anfrage (Query), versucht es, diese auf der Grundlage dieser Datenbasis mittels Resolution zu beweisen. Resolution: Beweisverfahren, das auf dem prädikatenlogischen Schließen beruht (analog dem aussagenlogischen Schließen).
48
Prolog aus logischer Sicht
Formale Struktur der Resolution: Gearbeitet wird mit dem SLD-Kalkül, einem Kalkül, der nur aus einer Regel besteht, der SLD-Regel.
49
Die SLD-Regel Prämissen: Gegeben Anfrage-Keller: A1, …, Am Regel: B1 … Bn B Nebenbedingungen: Θ allgemeinster Unifikator von A1 und B keine gemeinsamen Variablen in A1 und B m≥1, n≥0 Konklusion: Neuer Anfrage-Keller ist (B1, …, Bn, A2, …, Am)Θ
50
Prolog aus logischer Sicht
Bei einer Anwendung der SLD-Regel wird die Prämisse so - entsprechend den prädikatenlogischen Gesetzen – durch die Unifikation umgeformt und erweitert, daß Schlüsse gezogen werden können. Zu jedem Zeitpunkt ist gemäß Konstruktion klar, wie der Anfragekeller aussieht. Prolog muß eine Klausel finden, die zum obersten Kellerelement paßt (Unifikation). Diese ist meist nicht eindeutig.
51
Prolog aus logischer Sicht
Beispiel: Gegeben sei das Logik-Programm, das aus den folgenden abstrakten Programmklauseln und Fakten besteht. K1. B C → A K2. D → A K3. A E → B K4. F G → B K5. E → C K6. E → D K7. → E
52
Prolog aus logischer Sicht
Die Anfrage B läßt sich nur mit den Conclusionen von K3 und K4 unifizieren. Es ergeben sich also die folgenden Möglichkeiten: Es reicht, A E zu beweisen (wegen K3) Der Anfragekeller ist A, E. Es reicht, F G zu beweisen (wegen K4). Der Anfragekeller ist F, G.
53
Prolog aus logischer Sicht
Das Ergebnis einer einzelnen Anfrage wird durch den SLD-Kalkül gefunden, also wiederholte Anwendung der SLD-Regel. In jedem Schritt i: schon konstruiert: Anfragekeller Ai Suche einer Klausel Ki, so daß es einen Unifikator wie in der SLD-Regel gibt (Quelle von Nichtdeterminismus), 1. Ergebnis: Unifikator Θi, 2. Ergebnis: neuer Anfragekeller Ai+1
54
Prolog aus logischer Sicht
Beendigung einer einzelnen Anfrage (Terminierung): Das Verfahren terminiert nicht. Das Verfahren terminiert, weil keine Klausel gefunden werden kann, die sich unifizieren läßt. -> Backtracking Das Verfahren terminiert, weil der Anfragekeller leer ist. Antwortsubstitution: Θ =Θ1 … Θn Ergebnis: A0Θ
55
Prolog aus logischer Sicht
Seine eigentliche Wirkung entfaltet ein Prolog-Programm streng genommen durch Nebenwirkungen, die während der Beweissuche auftreten. Also kann ein Prolog-System auch als ein sehr effizienter – wenn auch eingeschränkter – automatischer Theorembeweiser verstanden werden. Anfragemöglichkeiten: Gilt A? Finde eine (alle) Instanzen, auf die A zutrifft.
56
Prolog aus logischer Sicht
Durch die Möglichkeit des Backtracking wird de facto ein Baumdurchlauf organisiert (Ableitungsbaum). Der Ableitungsbaum wird nicht explizit konstruiert. Die einzige in Prolog eingebaute Suchstrategie beim Durchlauf des Ableitungsbaum ist die Tiefensuche in der „left first“-Strategie.
57
Prolog aus logischer Sicht
Tiefensuche, left first
58
Prolog aus logischer Sicht
Das allgemeine Backtracking geht nach dem Prinzip von Versuch und Irrtum (trial and error) vor, das heißt, es wird versucht, eine erreichte Teillösung zu einer Gesamtlösung auszubauen. Wenn absehbar ist, daß eine Teillösung nicht zu einer endgültigen Lösung führen kann, wird der letzte Schritt beziehungsweise werden die letzten Schritte zurückgenommen, und es werden stattdessen alternative Wege probiert.
59
Prolog aus logischer Sicht
Auf diese Weise ist sichergestellt, daß alle in Frage kommenden Lösungswege ausprobiert werden können (Prinzip des Ariadnefadens). Mit Backtracking-Algorithmen wird eine vorhandene Lösung entweder gefunden (unter Umständen nach sehr langer, genauer: exponentieller Laufzeit), oder es kann definitiv ausgesagt werden, daß keine Lösung existiert.
60
Prolog aus logischer Sicht
Backtracking wird meistens am einfachsten rekursiv implementiert und ist ein prototypischer Anwendungsfall von Rekursion. Bäume, Keller In Prolog wird das Backtracking gesteuert durch: Reihenfolge der Klauseln, Reihenfolge der Literale in den Klauseln, den Cut.
61
Prolog aus logischer Sicht
Beispiel: Gegeben sei das Logik-Programm, das aus den folgenden abstrakten Programmklauseln und Fakten besteht. K1. B C → A K2. D → A K3. A E → B K4. F G → B K5. E → C K6. E → D K7. → E
62
Prolog aus logischer Sicht
Erfolgreiche Ableitung für die Anfrage A beispielsweise die folgende A Ⱶ(Θ1 ,K2) D Ⱶ(Θ2 ,K6) E Ⱶ(Θ3 ,K7) false Also gilt A. Denn alle Substitutionen Θi sind leer, auch die Antwortsubstitution, ihre Hintereinanderausführung Θ = Θ1 Θ2 Θ3
63
Prolog aus logischer Sicht
Eine fehlgeschlagene SLD-Ableitung ist beispielsweise A Ⱶ (Θ1 ,K1.) B C Ⱶ (Θ2 ,K4) F G C Wieder sind alle Substitutionen Θi leer, aber jetzt ist die SLD-Regel nicht anwendbar, da es keine Programmklausel gibt, die mit F, dem ersten Konjunkt der Anfrage, unifizierbar wäre.
64
Prolog aus logischer Sicht
Der Prolog-Interpreter benutzt die Fakten und Regeln, um systematisch eine Antwort zu finden. Ein positives Resultat bedeutet, daß die Anfrage logisch ableitbar ist. Ein negatives Resultat bedeutet nur, daß aufgrund der Datenbasis keine Ableitung gefunden werden kann. „Closed World Assumption“ Ein negatives Resultat ist rechenaufwendig.
65
3.5 Arbeit mit Logik-Programmierung
66
Anwendungsgebiete In den 1980er Jahren spielte die Sprache Prolog eine wichtige Rolle beim Bau von Expertensystemen. Die Sprache wird heute noch in vielen Bereichen der Künstlichen Intelligenz, etwa der Computerlinguistik, verwendet. Zum Beispiel sind Sprachverarbeitungskomponenten des durch seinen Auftritt bei Jeopardy! bekannt gewordenen KI-Systems Watson in Prolog geschrieben.
67
Anwendungsgebiete Außerdem gibt es einige kommerzielle Anwendungen im Bereich des Systemmanagements, bei denen asynchrone Ereignisse (Events) mit Hilfe von Prolog oder darauf basierenden proprietären Erweiterungen verarbeitet werden. Ein Beispiel hierzu ist das Produkt Tivoli Enterprise Console (TEC) von IBM, das auf IBM-Prolog basiert.
68
Folgendes Beispiel repräsentiert den Stammbaum einer kleinen Familie.
Grundprinzip Das typische erste Programm in Prolog ist nicht wie in prozeduralen Programmiersprachen ein Hallo-Welt-Beispiel, sondern eine Datenbasis mit Stammbauminformationen. Folgendes Beispiel repräsentiert den Stammbaum einer kleinen Familie.
69
Beispiel Datenbank einstellige Relationen
weiblich(loreena). weiblich(anja). weiblich(monika). weiblich(kerstin). weiblich(heike). weiblich(birgitt). maennlich(thomas). maennlich(dieter). maennlich(joerg). maennlich(nico). maennlich(jens). maennlich(ronny). maennlich(manfred).
70
Beispiel Datenbank zweistellige Relationen
elternteil(anja,celina). elternteil(anja,lorenna). elternteil(thomas,celina). elternteil(thomas,loreena). elternteil(monika,thomas). elternteil(monika,kerstin). elternteil(dieter,thomas). elternteil(dieter,kerstin).
71
Beispiel Datenbank zweistellige Relationen
elternteil(birgitt,anja). elternteil(manfred,anja). elternteil(birgitt,jens). elternteil(manfred,jens). elternteil(jens,ronny). elternteil(heike,ronny). elternteil(kerstin,nico). elternteil(joerg,nico).
72
SWI-Prolog Freie Prolog-Umgebung
73
Anfragen an die Datenbank
In einem Prolog-Interpreter können nun interaktiv Anfragen an die Datenbasis gestellt werden. Das Ausführen eines Prolog-Programms bedeutet immer das Stellen einer Anfrage. Das System, falls es terminiert, antwortet entweder mit yes. oder no., abhängig davon, ob die Anfrage bewiesen werden konnte.
74
Anfragen an die Datenbank
Der Interpreter signalisiert mit der Eingabeaufforderung ?- , daß er eine Anfrage erwartet. ?- maennlich(dieter). yes. ?- maennlich(heinrich). no.
75
Eine Anfrage mit einer Variablen liefert als Antwort zusätzlich Belegungen, mit denen die Anfrage wahr wird. Variablen sind in Prolog Token, die mit einem Großbuchstaben beginnen: ?- weiblich(X). X=loreena; X=anja; X=monika.
76
Kleine Übung Stellen Sie fest, ob in der gegebenen Datenbasis ein Mann namens Thomas, ein Mann Namens Peter eine Frau mit Namen Loreena , eine Frau mit Namen Margot vorhanden sind. Geben Sie alle Relationen „maennlich „ aus.
77
Kleine Übung
78
Regeln Zusätzlich zu Fakten lassen sich in Prolog Regeln formulieren. Der Regeloperator :- ist dabei wie ein umgedrehter Implikationspfeil zu lesen. Beispiel: grossvater(X,Y) :- vater(X,Z), vater(Z,Y).
79
Regeln Die Regel besagt: X ist Großvater von Y, wenn es ein Z gibt, sodaß X Vater von Z ist und Z Vater von Y. Damit ist der Großvater väterlicherseits definiert. Eine zweite Regel für den Großvater mütterlicherseits sieht so aus: grossvater(X,Y) :- vater(X,Z), mutter(Z,Y).
80
Der Operator "," in dieser Regel definiert eine Konjunktion und liest sich "und".
Der Term links vom Implikationsoperator nennt sich auch Kopf oder Konsequenz. Haben zwei Regeln (wie oben) die gleiche Konsequenz, folgt diese, wenn mindestens in einer Regel die Vorbedingung erfüllt ist (Disjunktion).
81
Durch die Definition von Regeln können auch Fakten geschlossen werden, die nicht explizit in der Datenbasis stehen: ?- grossvater(adam,ulrike). yes. ?- grossvater(X,frank). X=adam.
82
Junktoren Das logische Und wird durch ein Komma dargestellt: ?- true,true. true. ?- true,false. false. ?- false,true. ?- false,false.
83
Junktoren
84
Junktoren Das logische Oder wird durch ein Semikolon dargestellt: ?- true;true. true. ?- true;false. ?- false;true. ?- false;false. false.
85
Relationen ?- 3 < 4. true. ?- 3 > 4. false. ?- anton == anton.
% == prüft, ob das muster links % und rechts übereinstimmt ?- 3 == 1+2. % muster stimmt % nicht überein
86
Relationen ?- 3 =:= 1+2. % =:= ist der numerische Vergleich true. ?- 3 =\= 4. % =\= bedeutet ungleich ?- 3 =< 4. % =< bedeutet kleiner/gleich; '<=' ist nicht zulässig ?- 3 >= 4. % >= bedeutet größer/gleich false.
88
Wenn-dann (Regeln) Das Zeichen :- beschreibt eine wenn-dann-Relation. Eine Relation kann symmetrisch gemacht werden. Vorsicht: Hohes Potential für Endlosschleifen! ?- ehepaar(X,Y) :- ehepaar(Y,X). ?- ehepaar(anton,berta). ?- ehepaar(berta,anton). true.
89
Kleine Übung Schreiben Sie eine Regel, die in der Datenbasis die Großeltern definiert und überprüfen Sie die Regel. Welche Großeltern hat Loreena? Definieren Sie das Prädikat Vorfahr.
90
3.6 Listen und nicht-logische Bestandteile von Prolog
91
Arithmetik Prolog kennt die Grundrechnungsarten, also Addition +, Subtraktion -, Produkt *, Division /, Modulo mod und die ganzzahlige Division div. Die Zuweisung eines Wertes zu einer Variablen erfolgt mit dem Schlüsselwort is.
92
Listen Listen sind rekursive Datenstrukturen bestehend aus einem Kopf (Head) und einem Rest (Tail). Der Kopf ist ein Element. Der Rest ist wieder eine Liste. Liste=[Kopf | Rest] % Kopf ist die Ziffer 1. % Rest ist die Liste [2,3]. [1,2,3]=[1 | [2,3]] % Kopf ist die Zahl 1. % Rest ist die leere Liste. [1]=[1 | [ ]]
93
Listen Um zu prüfen, ob ein bestimmtes Element in einer Liste enthalten ist, wird die vordefinierte Funktion member verwendet: member(X,L) :- L = [H|T], (X = H ; member(X,T)). Wenn das Element X gleich dem Kopf ist, gib 'true‚ zurück. Oder prüfe, ob das Element X in der Rest-Liste enthalten ist.
94
Listen ?- member(2, ['anton', 'berta', 'caesar']). false. ?- member('berta', ['anton', 'berta', 'caesar']). true.
95
Listenverarbeitung Auch Listen sind ein entscheidender Bestandteil von Prolog. Die meisten Prolog-Implementationen bringen dafür viele Basisfunktionen mit ("concat" = Anhängen von Werten, "count" = Anzahl der Werte, usw.), die sich aber auch alle selbst definieren lassen. Da das nicht Funktionen sind sondern Relationen, gibt es mehrere Lesarten: concat([1], [2],X), concat([1],X, [1,2]), concat(X, [2], [1,2]), concat(X,Y,[1,2])
96
Listenverarbeitung Beispiel: In einer gedachten Familienstruktur muß die Anzahl der Kinder variabel sein. Folgendes wäre denkbar: familie(heinz,jutta,[peter,laura]). familie(karl,gertrud,[]). Abfrage nach allen Männern ohne Kinder: ?- familie(X, _, []). X=karl. Dabei ist X die Variable, deren verschiedene Werte ausgegeben werden sollen.
97
Listenverarbeitung Die eckigen Klammern [] stehen für die leere Menge, welche die nicht vorhandenen Kinder repräsentiert. Der Unterstrich _ ist in Prolog die anonyme Variable, wodurch Prolog veranlaßt wird, hier jeden Wert zuzulassen. Anonyme Variablen unifizieren nicht miteinander, auch wenn sie in der gleichen Klausel sehen. So würde elternteil(_,_) alle möglichen Paare liefern, im Gegensatz zu elternteil(X,X).
98
Anwendungsbeispiel: Planungssysteme
Planungssysteme suchen eine Möglichkeit, von einem Ausgangszustand in einen gewünschten Zielzustand zu gelangen. Sie lassen sich für die Suche von Straßen- oder Verkehrsverbindungen, aber auch für allgemeinere Problemstellungen einsetzen. Zunächst soll der allgemeinste Ansatz für eine blinde Tiefensuche (d. h. es ist unbekannt, ob der einzelne Schritt auch näher zum Ziel führt) vorgestellt werden.
99
Anwendungsbeispiel: Planungssysteme
weg(Ziel,Ziel,Zustandsliste) :- write(Zustandsliste),nl. /* Argument: Startpunkt, Argument: Zielpunkt, Argument: Zwischenstationen (Weg zum Ziel). Ziel erreicht, Abbruch der Rekursion und Ausgabe */
100
Anwendungsbeispiel: Planungssysteme
weg(Start,Ziel,Zustandsliste) :- /* Es gibt einen Weg vom Start zum Ziel, wenn ... */ operator(Op), /* ... es einen Operator gibt, ... */ anwendbar(Op,Start), /* ... der im Startzustand anwendbar ist, ... */ fuehrt_zu(Op,Start,Neu), /* ... von dort zu einem neuen Zustand führt, ... */ not(member(Neu,Zustandsliste)), /* ... der noch nie da war (Verhinderung von Schleifen) ... */ zulaessig(Neu), /* ... und zulässig ist, ... */ weg(Neu,Ziel,[Neu|Zustandsliste]). /* ... und es dann einen Weg zum Ziel gibt. */
101
Anwendungsbeispiel: Planungssysteme
Nur die Prädikate operator, anwendbar, fuehrt_zu und zulaessig sowie die Beschreibung eines Zustands sind problemspezifisch zu formulieren. Aufgerufen wird das Prädikat mit einer Zustandsliste, die den Anfangszustand als erstes Element enthält. Abhängig vom Problemtyp läßt sich einiges vereinfachen und/oder weglassen.
102
Anwendungsbeispiel: Planungssysteme
Beispiel: Für eine Wegesuche in einem Straßennetz ergibt sich: weg(Ziel,Ziel,Ortsliste):- write(Ortsliste),nl. /* Ziel erreicht, Abbruch der Rekursion und Ausgabe */ weg(Start,Ziel,Ortsliste):- /* Es gibt einen Weg vom Start zum Ziel, wenn ... */ strasse(Start,Neu), /* ... es eine Straße vom Start zu einem neuen Ort gibt, ... */ not(member(Neu,Ortsliste)), /* ... in dem man noch nicht war (Verhinderung von Schleifen), ... */ weg(Neu,Ziel,[Neu|Ortsliste]). /* ... und von dem es einen Weg zum Ziel gibt. */
103
Anwendungsbeispiel: Planungssysteme
Bei realen Problemen führt eine blinde Suche selten zum Ziel; man benutzt eine Breitensuche, bei der alle vom Start aus erreichbaren neuen Zustände ermittelt, mit einer Heuristikfunktion bewertet (Heuristische Suche) und nur der beste oder eine sortierte Liste der besten (Best-first-Suche, „gready-Algorithmen“) weiterverfolgt werden.
104
Anwendungsbeispiel: Planungssysteme
Eine einfache heuristische Suche kann dazu führen, daß nicht immer die optimale Lösung gefunden wird, da bestimmte Lösungsschritte, die fälschlicherweise als ungünstig aussortiert wurden, sich als bessere Lösung ergeben. Weitere Anwendungsbeispiele: Arbeiten auf Strukturen und Hierarchien.
105
abschließendes Beispiel: Einsteins Rätsel
Dies ist eine Version einer ganzen Klasse von Logik-Rätseln. Es wurde angeblich von Albert Einstein im 19. Jahrhundert verfaßt. Einstein wird oft der Vermerk zugeschrieben, nur 2 % der Weltbevölkerung seien im Stande, das Rätsel zu lösen. Es existiert jedoch kein Hinweis auf jedwede Autorenschaft. Hier soll es ein Beispiel für ein Problem darstellen, das mit Prolog leicht lösbar ist, wenn man sich vorher die nötigen Datenstrukturen überlegt hat.
106
abschließendes Beispiel: Einsteins Rätsel
1. Es gibt fünf Häuser mit je einer anderen Farbe. 2. In jedem Haus wohnt eine Person anderer Nationalität. 3. Jeder Hausbewohner bevorzugt ein bestimmtes Getränk, raucht eine bestimmte Zigarettenmarke und hält ein bestimmtes Haustier. 4. Keine der fünf Personen trinkt das gleiche Getränk, raucht die gleichen Zigaretten oder hält das gleiche Tier wie seine Nachbarn.
107
abschließendes Beispiel: Einsteins Rätsel
Hinweise: Der Brite lebt im roten Haus. Der Schwede hält einen Hund. Der Däne trinkt gern Tee. Das grüne Haus steht direkt links neben dem weißen Haus. Der Besitzer des grünen Hauses trinkt Kaffee. Die Person, die Pall Mall raucht, hält einen Vogel. Der Mann, der im mittleren Haus wohnt, trinkt Milch. Der Besitzer des gelben Hauses raucht Dunhill.
108
abschließendes Beispiel: Einsteins Rätsel
Hinweise2: Der Norweger wohnt im ersten Haus. Der Marlboro-Raucher wohnt neben dem, der eine Katze hält. Der Mann, der ein Pferd hält, wohnt neben dem, der Dunhill raucht. Der Winfield-Raucher trinkt gern Bier. Der Norweger wohnt neben dem blauen Haus. Der Deutsche raucht Rothmans. Der Marlboro-Raucher hat einen Nachbarn, der Wasser trinkt.
109
abschließendes Beispiel: Einsteins Rätsel
Frage: Wem gehört der Fisch?
110
Lösung: Datenstruktur:
Jedes Haus ist eine Liste der Form [Farbe, Nationalität, Getränk, Zigarettenmarke, Haustier].
111
Zuerst vier einfache Hilfsprädikate zur Listenbearbeitung:
erstes(E,[E|_]). mittleres(M,[_,_,M,_,_]). links(A,B,[A,B|_]). links(A,B,[_|R]) :- links(A,B,R). neben(A,B,L) :- links(A,B,L);links(B,A,L).
112
abschließendes Beispiel: Einsteins Rätsel
Hinweise: Der Brite lebt im roten Haus. Der Schwede hält einen Hund. Der Däne trinkt gern Tee. Das grüne Haus steht direkt links neben dem weißen Haus. Der Besitzer des grünen Hauses trinkt Kaffee. Die Person, die Pall Mall raucht, hält einen Vogel. Der Mann, der im mittleren Haus wohnt, trinkt Milch. Der Besitzer des gelben Hauses raucht Dunhill.
113
member([rot,brite,_,_,_],X). member([_,schwede,_,_,hund],X).
Lösungsprädikat: member([rot,brite,_,_,_],X). member([_,schwede,_,_,hund],X). member([_,daene,tee,_,_],X). links([gruen,_,_,_,_],[weiss,_,_,_,_],X). member([gruen,_,kaffee,_,_],X). member([_,_,_,pallmall,vogel],X). mittleres([_,_,milch,_,_],X). member([gelb,_,_,dunhill,_],X).
114
abschließendes Beispiel: Einsteins Rätsel
Hinweise2: Der Norweger wohnt im ersten Haus. Der Marlboro-Raucher wohnt neben dem, der eine Katze hält. Der Mann, der ein Pferd hält, wohnt neben dem, der Dunhill raucht. Der Winfield-Raucher trinkt gern Bier. Der Norweger wohnt neben dem blauen Haus. Der Deutsche raucht Rothmans. Der Marlboro-Raucher hat einen Nachbarn, der Wasser trinkt.
115
erstes([_,norweger,_,_,_],X).
Lösungsprädikat: erstes([_,norweger,_,_,_],X). neben([_,_,_,marlboro,_],[_,_,_,_,katze],X). neben([_,_,_,_,pferd],[_,_,_,dunhill,_],X). member([_,_,bier,winfield,_],X). neben([_,norweger,_,_,_],[blau,_,_,_,_],X). member([_,deutsche,_,rothmans,_],X). neben([_,_,_,marlboro,_],[_,_,wasser,_,_],X).
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.