Title: Einf
1Einführung in PROLOG
Referat zur Veranstaltung Informatik VI
(18.635) StD G. Noll Rhein Gymnasium
Sinzig Februar 2001
f
(
x
)
f
(
)
g
(
)
g
(
x
)
sterblich(A) - mensch(A). mensch(x).
barbara
2Logik
- Aristoteles Syllogismen ( 330 v. Chr.)
- Gottlob Frege Begriffsschrift (1879)
- Bertrand Russel, Alfred North Whitehead Principia
Mathematica (1910) - Colmerauer e.a. System-Q (1971)
3PROLOG
- PROgrammieren in LOGik
- Anfang der 70er Jahre in Edinburgh von Kowalski
und van Emden entwickelt - in Marseille von Colmerauer zum ersten Mal
implementiert - in der Mitte der 80er Jahre weltweiter Durchbruch
als Sprache der KI und bei der Entwicklung von
Expertensystemen - heute hat das Interesse an PROLOG nachgelassen
4Vorteile für die Schule
- interaktive Programmerstellung
- deklaratives Programmieren als Gegenstück zum
imperativen Konzept - kostenlose (gepflegte) PROLOG-Implementationen im
InternetSWI-Prolog www.swi.psy.uva.nl/projects/S
WI-Prolog/Strawberry Prolog www.dobrev.com/Visua
l Prolog www.visual-prolog.com/
5PROLOG-Programm
- Programmieren in PROLOG bedeutet
- das Erstellen einer Wissensbasis
- die Formulierung intelligenter Anfragen
6Wissensbasis
- Wissen ist die Fähigkeit zur sachgerechten
Interpretation von Daten
- Daten führen über eine Interpretation zur
Information - Daten werden für PROLOG in einer Wissensbasis
gespeichert
7PROLOG - System
Eingabe von Daten
Benutzerin Benutzer
Anfrage
Suchstrategien
Inferenzmaschine
Logik
Antworten
8Klauseln
Fakten Eigenschaften von Objekten
oder Beziehungen zwischen
ihnen Regeln wenn-dann Aussagen
9Fakten
- Mit Fakten stellt man Konstanten, Eigenschaften
von Objekten oder Beziehungen zwischen Objekten
dar
sonnig. frau(elisabeth). mutter(elisabeth,gre
gor).
- Fakten bestehen aus einem Klauselkopf, d. h.
einem Funktor mit keinem, einem oder mehreren
Argumenten
10Regeln
- Mit Regeln beschreibt man wenn-dann Aussagen (
d. h. bedingte Beziehungen) zwischen Objekten
- Sie bestehen aus einem (Klausel-) Kopf und einem
Körper mit Termen (Zielen) frau(X) -
mutter(X,_). - Der Körper beschreibt eine Folge von
Voraussetzungen, aus deren Gültigkeit auf die
Gültigkeit des Kopfes geschlossen wird
11Terme
- Im Körper einer Regel können als Terme auftreten
- Klauselköpfe frau(X) - mutter(X,_).
- Operationen old(X) - X gt 80.
- Systemprozeduraufrufe out(X) - write(X), nl.
12Termverknüpfungen
- Terme im Regelkörper lassen sich logisch
miteinander verbinden - ein Komma , steht für UND
- ein Semikolon für ODER
- Die ODER-Verknüpfung wird selten verwendet.
Stattdessen fügt man eine weitere Regel hinzu.
- opa(O,E) - vater(O,V), vater(V,E).
- opa(O,E) - vater(O,M), mutter(M,E).
13Prädikate
- Klauseln werden identifiziert über ihren
eindeutigen Bezeichner, den Funktor, und ihre
Stelligkeit.
mutter(claudia). mutter/1mutter(else,pia). mutt
er/2
- Alle Klauseln mit gleichem Funktor und gleicher
Stelligkeit bilden ein Prädikat
14Syntax
- Bezeichner werden aus Buchstaben, Ziffern und
Unterstrich gebildet
- Bezeichner für Funktoren beginnen mit einem
Kleinbuchstaben - Bezeichner für Konstanten beginnen mit einem
Kleinbuchstaben - Bezeichner für Variable beginnen mit einem
Großbuchstaben - der Unterstrich _ bezeichnet eine anonyme
Variable
- Klauseln und Abfragen enden mit einem Punkt .
- Kommentare stehen zwischen / und /
15Anfragen
- Erkenntnisse aus einer Datenbasis gewinnen wir
durch Anfragen. Diese werden interaktiv an das
System als Ziele (goals) in Form von
Klauselköpfen gestellt
- ?- mutter(claudia). Antwort yes
- ?- mutter(M,pia). Antwort
Melse more (y/n)?
16Übung 1
- Geben Sie in das PROLOG-System folgende Daten
ein - vater(egon,hans). / vater(Vater,Kind) /
- vater(hans,fritz).
- vater(emil,maria).
- mutter(maria,fritz). / mutter(Mutter,Kind) /
- Definieren Sie eine Regel für opa(Opa,Enkelkind)
und stellen Sie geeignete Anfragen, u.a. nach dem
Opa von Fritz - Untersuchen Sie, was passiert, wenn Sie die
Reihenfolge der Klauseln im Programm ändern - Wie findet PROLOG die Antworten auf Ihre Anfragen
17Semantik
- PROLOG besitzt neben der deklarativen Semantik
auch eine prozedurale. - deklarativ logische Bedeutung des Programms
- prozedural Abarbeitung des Programms
- Anfragen werden mit Hilfe der Klauseln solange
auf einfachere Aussagen zurückgeführt, bis diese
Fakten des Programms sind. Dies leistet die
Inferenzmaschine.
18Matching
- Das Systems geht auf die Suche nach einer
passenden Klausel
- Eine Klausel passt zu einem Ziel (matched),
wenn der Klauselkopf mit dem Ziel unifiziert
(verschmilzt) - Klausel und Ziel haben den gleichen Namen und
gleiche Stelligkeit - die Parameter passen zueinander, d. h. sie sind
entweder identisch oder mindestens ein Parameter
ist eine Variable - Im Prozess der Unifikation werden die Variablen
an die Parameter des anderen Ausdrucks gebunden
sie werden instantiiert (instanziert) oder
gleichgesetzt
19Backtracking
- Der Suchprozess nach einer passenden Klausel kann
in Sackgassen gelangen - eine ausgewählte passende Klausel führt nicht zum
Ziel, so dass später eine alternative, ebenfalls
passende Klausel versucht werden muss
- Ein damit verbundenes Zurücksetzen auf einen
früheren Zustand im Suchprozess wird Backtracking
genannt - Die Rückkehr ist verbunden mit der Freigabe aller
Variablenbindungen, die seit dem ersten Anlauf
des früheren Zustandes vorgenommen wurden
20UND-ODER-Baum
- An der Wurzel steht der Funktor des Prädikats,
das mit der Anfrage matched.
- Die Nachfolgeknoten enthalten die Klauseln des
PrädikatesBei Regeln bilden die Klauseln des
Rumpfes die Nachfolgeknoten - UND-Verknüpfungen von Klauseln werden mit einem
Winkelbogen dargestellt.
21opa(Opa,fritz).
opa / 2
Ident OOpa Inst Efritz
opa(O,E)
opa(O,E)
Vfritz Efritz
Vhans Efritz
mutter(M,E)
vater(V,E)
vater(O,M)
vater(O,V)
vater(egon,hans)
vater(egon,hans)
vater(egon,hans)
mutter(maria,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater (hans,fritz)
Inst Oegon Inst Vhans
vater(emil,maria)
vater(emil,maria)
vater(emil,maria)
Opa egon
Inst Ohans Inst Vfritz
22opa(Opa,fritz).
opa / 2
Ident OOpa Inst Efritz
opa(O,E)
opa(O,E)
Vfritz Efritz
Vmaria Efritz
mutter(M,E)
vater(V,E)
vater(O,M)
vater(O,V)
vater(egon,hans)
vater(egon,hans)
vater(egon,hans)
mutter(maria,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater(emil,maria)
vater(emil,maria)
vater(emil,maria)
Inst Ohans Inst Vmaria
Inst Ohans Inst Vfritz
23opa(Opa,fritz).
opa / 2
Ident OOpa Inst Efritz
Ident OOpa Inst Efritz
opa(O,E)
opa(O,E)
Vmaria Efritz
mutter(M,E)
vater(V,E)
vater(O,M)
vater(O,V)
vater(egon,hans)
vater(egon,hans)
vater(egon,hans)
mutter(maria,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater(emil,maria)
vater(emil,maria)
vater(emil,maria)
Inst Ohans Inst Vmaria
24opa(Opa,fritz).
opa / 2
Ident OOpa Inst Efritz
opa(O,E)
opa(O,E)
Mhans Efritz
Mfritz Efritz
mutter(M,E)
vater(V,E)
vater(O,M)
vater(O,V)
vater(egon,hans)
vater(egon,hans)
vater(egon,hans)
mutter(maria,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater(emil,maria)
vater(emil,maria)
vater(emil,maria)
Inst Oegon Inst Mhans
Inst Ohans Inst Mfritz
25opa(Opa,fritz).
opa / 2
Ident OOpa Inst Efritz
opa(O,E)
opa(O,E)
Mmaria Efritz
Mfritz Efritz
mutter(M,E)
vater(V,E)
vater(O,M)
vater(O,V)
vater(egon,hans)
vater(egon,hans)
vater(egon,hans)
mutter(maria,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater(emil,maria)
vater(emil,maria)
vater(emil,maria)
Inst Oemil Inst Mmaria
Inst Ohans Inst Mfritz
26opa(Opa,fritz).
opa / 2
Ident OOpa Inst Efritz
opa(O,E)
opa(O,E)
Mmaria Efritz
mutter(M,E)
vater(V,E)
vater(O,M)
vater(O,V)
Opa emil
vater(egon,hans)
vater(egon,hans)
vater(egon,hans)
mutter(maria,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater(emil,maria)
vater(emil,maria)
vater(emil,maria)
Inst Oemil Inst Mmaria
27Trace
- Einem Trace liegt das Vier-Port-Boxmodell zugrunde
- call das Ziel wird das erste Mal aufgerufen
- exit das Ziel ist erfolgreich abgearbeitet worden
- redo nach erfolgreicher Abarbeitung wird das Ziel
zu einem späteren Zeitpunkt nochmals über
Backtracking aktiviert - fail der Versuch das Ziel zu beweisen scheitert
28fixPROLOG Trace
- Die Trace-Implementation von fixPROLOG entspricht
leider nicht dem Standard
?- opa(Opa,fritz).
- CALL opa(Opa_1,fritz)
- COMP opa(O_2,E_2) - vater(O_2,V_2)
, vater(V_2,E_2) - IDEN O_2 lt-- Opa_1
- INST E_2 lt-- fritz
- CALL vater(O_2,V_2)
- COMP vater(egon,hans)
- INST Opa_1 lt-- egon
- INST V_2 lt-- hans
- EXIT vater(egon,hans)
- CALL vater(hans,fritz)
- COMP vater(egon,hans)
- FAIL vater(hans,fritz)
- REDO vater(hans,fritz)
- COMP vater(hans,fritz)
- EXIT vater(hans,fritz)
-
- Opa egon
-
- REDO vater(hans,fritz)
29Übung 2
- Bearbeiten Sie die Arbeitsanweisungen des
Kapitels 4.4 der Handreichung
Wissensverarbeitung mit PROLOG
- Verwenden Sie auch die Möglichkeit, die Arbeit
der Inferenzmaschine mit einem Trace zu verfolgen.
30Rekursion
- Eine besondere Stärke erfährt PROLOG durch die
Möglichkeit, eine Beziehung durch Rückgriff auf
sich selbst definieren zu können.
- In der Wissenbasis sei das Ergebnis eines kleinen
Wettlaufs erfasst. Dabei besagt das Prädikat
vor/2 beim Faktum vor(L1,L2). , dass L1
unmittelbar vor L2 ins Ziel kommt. - vor(lisa,tom). vor(tom,elke). vor(elke,karl).
- vor(karl,petra). vor(petra,ria). vor(ria,mario).
- Wir wollen ein Prädikat besser/2 definieren mit
folgender Bedeutung besser(L1,L2). / L1 hat
eine bessere Zeit als L2 /
31besser/2
- Ein erster Ansatz wäre
- besser(L1,L2) - vor(L1,L2).
- L1 braucht aber nicht unmittelbar vor L2 ins Ziel
zu kommen, um eine bessere Zeit zu haben, deshalb
wären - besser(L1,L2) - vor(L1,L3),vor(L3,L2).
oder - besser(L1,L2) - vor(L1,L3),vor(L3,L4),vor(L4,L2
). usw. - ebenfalls mögliche Klauseln.
32besser/2
besser(L1,L2) - vor(L1,L3), besser (L3,L2).
33besser/2
- Testen Sie das Prädikat besser/2 z. B. mit der
Anfrage besser(tom,petra).
- Leider erhalten Sie nicht die erwarteten
Antworten! - Es fehlt eine Abbruchbedingung für die Rekursion
besser(L1,L2) - vor(L1,L3), besser(L3,L2).besser
(L1,L2) - vor(L1,L2).
34besser/2
- Testen Sie, wie sich für besser/2
- eine Vertauschung der beiden Klauseln
- eine Vertauschung der Ziele im Regelrumpf
- auf die Abfragen auswirken
35Übung 3
- Wir betrachten das Prädikat wechsel/2 mit den
Klauseln wechsel(a,b). wechsel(X,Y) -
wechsel(Y,X).Welche Ausgabe liefert die Anfrage
wechsel(A,B) ?
- Untersuchen Sie auch hier die Wirkung einer
Vertauschung der beiden Klauseln
36Übung 4
- Bearbeiten Sie die Arbeitsanweisungen des
Kapitels 4.5 der Handreichung
Wissensverarbeitung mit PROLOG
37Listen
- Die Liste ist die zentrale Datenstruktur in
PROLOG.Sie besteht aus einer Folge beliebiger
Elemente - liste( ).
- liste(Kopf Rest) - liste(Rest).
- Beispiele a,b,c a,b,c,d /
geschachtelte Liste/ / leere
Liste /
38Listenstruktur
- Die Zerlegung einer Liste in Kopf und Rest ist
sehr flexibelrhein,ahr,mosel rhein
ahr,mosel - rhein,ahr mosel rhein,ahr,mosel
- ?- a,b,c,d K Rs. / Rs
Listenvariable / K aRs b,c,d
39Listenoperationen
- Listen sind rekursive Datenstrukturen.
Dementsprechend sind auch die Operationen auf
Listen rekursiv erklärt.
- member/2 / member(X,Xs) ? X ist Element der
Liste Xs /member(X,XLs).member(X,YXs) -
member(X,Xs).
40member/2
- Wir können member/2 auf dreierlei Arten verwenden
- als Zugehörigkeitstest ?- member(c,a,b,c). Ant
wort yes ?- member(e,a,b,c). Antwort no - zur Erzeugung aller Elemente einer Liste?-
member(X,a,b,c). Antwort Xa Xb Xc no - zur Erzeugung von Listen, die ein bestimmtes
Element enthalten?- member(a,Ls). Antwort Ls
aRs_2 - Ls X_2,aRs_3 Ls
X_3,X_3,aRs_4
41laenge/2 - append/3
- laenge/2 / laenge(Xs,N) ? die Liste Xs hat N
Elemente /
- laenge( ,0).laenge(XXs,N) -
laenge(Xs,N1), N is N11. - append/3 / append(Xs,Ys,Es) ? die Liste Es ist
die Verkettung von Xs und Ys/ - append( ,Ls,Ls).append(XXs,Ys,XEs) -
append(Xs,Ys,Es).
42delete/3 - insert/3
- delete/3 / delete(X,Xs,Es) ? Es ist die Liste
Xs ohne das Element X /
- delete(X,XLs,Ls).delete(X,YYs,YEs) -
delete(X,Ys,Es). - insert/3 / insert(X,Xs,Es) ? die Liste Es ist
die Liste Xs mit eingefügtem X/ - insert(X,Xs,Es) - delete(X,Es,Xs).
43Beispiel für insert/3
- Wie verarbeitet PROLOG die Anfrage
insert(3,1,2,Es) ?
insert(X,Xs,Es) - delete(X,Es,Xs).
- Die Anfrage verlangt den Beweis von
delete(3,Es,1,2) - Die erste delete-Klausel delete(X,XLs,Ls)
passt dazu mit den Instantiierungen X ? 3, Ls ?
1,2 und damit Es ? 31,2 - Als Ergebnis wird somit Es 3,1,2 ausgegeben
44Ablaufsteuerung
- Bei der Bearbeitung einer Anfrage führt PROLOG
automatisch Backtracking durch, wenn dies zur
Erfüllung des Ziels erforderlich ist. Manchmal
ist dies aber nicht notwendig oder nicht
gewünscht.
- max(X,Y,X) - X gt Y. / X max(X,Y)
/ max(X,Y,Y) - X lt Y. / Y max(X,Y) / - Das Systemprädikat ! (Cut) verhindert die
Suche nach alternativen Lösungen - über nachfolgende Klauseln des gerade
bearbeiteten Prädikats - über Ziele des Regelkörpers, die vor dem Cut
stehen
45Probleme mit dem Cut
- Bei Programmen ohne Cut spielt die Reihenfolge
der Klauseln für die Lösung höchstens
hinsichtlich der Effizienz der Lösungssuche eine
Rolle
- Bei Verwendung des Cut erhalten wir je nach
Klauselreihenfolge eventuell verschiedene
logische Bedeutungen
p - c.p - a, !, b.
p - a, !, b.p - c.
46Verneinung
- Neben den logischen Standardverknüpfungen UND und
ODER gibt es das Systemprädikat NOT/1
- not(X) - X, !, fail. / X ist beweisbar
/not(X). / X ist nicht beweisbar / - Die Verwendung von not/1 ist nicht
unproblematischfrau(else). frau(petra).
mann(peter). mann(frank).?- not
frau(karin). ?- mann(heinz). - Antwort yes Antwort no closed world
assumption
47Übung 5
- Laden Sie das Menue-Programm. Stellen Sie
geeignete Anfragen und analysieren Sie die
Prädikate start/0 und null_auffuellen/1
- Laden Sie das Inssort-Programm. Stellen Sie
geeignete Anfragen und analysieren Sie die
Prädikate insertsort/2 und fuege_ein/3
48Startprädikat
- Querydatei für die Datenbasis menue.dtb
start - reconsult('menue.dtb'),
write('Menues unter 20 DM'),nl,
write('-----------------------------'),nl,
write('Gregor Noll 2001'),nl,nl,nl,
menue(V,H,N,DM,Pf),
DMlt20, write(V),tab(15),write(H),tab(15)
,write(N),tab(15),write(DM),write(','),write(Pf),
null_auffuellen(Pf),
tab(15),write('DM'),nl, nl, fail.
null_auffuellen(Pf) - Pf0,!,
write('0'). null_auffuellen(Pf).
49Sortieren
start - L-2,22,1,10,-3,4,2,-1,5,9,4,32,
nl,nl,nl,nl,nl, write('Insertsort '),nl,nl,
write(L),nl,nl, insertsort(L,S),
write(S),nl,nl, fail.
insertsort( , ). insertsort(XRest,Sortiert)
- insertsort(Rest,Sortierter_Rest),fuege_ein(X,
Sortierter_Rest,Sortiert).
fuege_ein(X,Sortierter_Rest,Sortiert). fuege_ein(X
,YSortiert,YSortiert1) - XgtY,!,
fuege_ein(X,Sortiert,Sortiert1). fuege_ein(X,Sorti
ert,XSortiert).
50Endliche Automaten
- Mit PROLOG lassen sich besonders durchsichtige
Simulationsprogramme für endliche Automaten
schreiben
- Laden Sie das Programm Akzeptor und analysieren
Sie seine Funktionsweise - Laden Sie das Programm RightShi und analysieren
Sie seine Funktionsweise
51Akzeptor
start - akzeptiert (a,b,a,b,a,b,a),!,fail. akze
ptiert(W) - nl,schreibe(W),
startzustand(S), akzeptiert(S,W),
write(' lt--- Wort akzeptiert'),nl,nl,
!,fail. akzeptiert(W) - write(' lt---
Wort nicht akzeptiert'),nl,nl.
akzeptiert(S,KRs) - pfeil(S,K,S1),
akzeptiert(S1,Rs). akzeptiert(S, ) -
endzustand(S).
startzustand(s). endzustand(s). pfeil(s,a,r).
pfeil(r,b,s).
schreibe(KRs) - write(K),
schreibe(Rs). schreibe( ).
52Right - Shifter
start - nl, write('RIGHT-SHIFTER'),nl,nl, tra
nsduktor(1,0,1,1,0,1,0), !,fail. transduktor(Ei
ngabe) - schreibe(Eingabe), write(' ---gt
'), startzustand(S), transduktor(S,Eingabe). tr
ansduktor(Zustand,ERest) - pfeil(Zustand,E,A,
Neuer_Zustand), write(A), transduktor(Neuer_Zust
and,Rest). transduktor(S, ) - nl,nl.
startzustand(s). pfeil(s,0,0,n).
pfeil(s,1,0,e). pfeil(n,0,0,n).
pfeil(n,1,0,e). pfeil(e,0,1,n). pfeil(e,1,1,e).
schreibe(KRs) - write(K),
schreibe(Rs). schreibe( ).
53Literatur
- Wissensverarbeitung mit PROLOGHandreichung zum
Lehrplan InformatikKoblenz 1995
(LMZ)informatikag.bildung-rp.de
- Bothe,K. / Stojanow,St.Praktische
Prolog-ProgrammierungBerlin 1991 (ISBN
3-341-01035-7) - Göhner,H. / Hafenbrak,B.Arbeitsbuch PROLOGBonn
1991 (ISBN3-427-46861-5)