In Prolog - Universität Wien

Werbung
Einführung in die logische
Programmierung mit PROLOG
Prof.-Dr. Peter Brezany
Institut für Scientific Computing
Universität Wien, Nordbergstraße 15/C315
1090 Wien
Tel. : 01/4277 39425
E-mail : [email protected]
Sprechstunde: Dienstag, 13.00-14.00
P.Brezany
Institut für Softwarewissenschaft – Universität Wien
1
Literatur
1. Fevzi Belli. Einführung in die logische Programmierung mit Prolog.B.I. Wissenschaftsverlag, 1988
(benutzt für dieses Skriptum)
2. Carlton Mc, Donald, Masoud Yazdani. Prolog
Programming – a Tutorial Introduction. Blackwell
Scientific Publications, 1990.
3. Jean B. Rogers. A Prolog Primer.Addison-Wesley,
1986.
P.Brezany
Institut für Softwarewissenschaft – Universität Wien
2
Einleitung
- prozedurale Denkweise als Grundlage konventioneller, imperativer
Programmierung
PROGRAMM = ALGORITHMUS + DATENSTRUKTUR
___________________________________________________
- Übergang zur logischen Programmierung (Anfangsüberlegung)
ALGORITHMUS = LOGIK + STEUERUNG
Die Logik-Komponente definiert, welches Wissen und welche
Zielsetzung dem Algorithmus zugrunde liegen; sie also gibt die präzise
Spezifikation dieses Algorithmus an.
Die Steuerungs-Komponente gibt dagegen die „Strategie“ an, d.h. wie
diese Definitionen einzusetzen sind.
Programm = Logik + Datenstruktur + Steuerung
Programmierungsmodel (Was sieht der Programmierer?):
PROGRAMM = LOGIK
P.Brezany
Institut für Softwarewissenschaft – Universität Wien
3
Geschichte von Prolog
• PROLOG (PROgramming in LOGic) wurde Anfang der
siebziger Jahre von A. Colmerauer und einer Reihe
von Wissenschaftlern an der Universität Marseille
konzipiert und erstmal implementiert.
• Durch die Wahl von Prolog als Sprache der Rechner
„5th. Generation“ in dem breit angelegten
japanischen Forschungs- und Entwicklungsvorhaben
gelang dieser Sprache der weltweite Durchbruch zu
einer „Sprache der Künstlichen Intelligenz“.
P.Brezany
Institut für Softwarewissenschaft – Universität Wien
4
Bestandteile eines Prolog-Programms
• Prolog-Programme bestehen aus Aussagen („Klauseln“,
„clauses“ oder „statements“, jedoch nicht aus
Anweisungen!).
• Die Reihenfolge der Aussagen spielt bei der Ausführung
der Programme keine Rolle.
• „Klauseln“ („clauses“)
– „Fakten“ („facts“) auch „allgemeine Tatsachen“ genannt, z.B.
„Otto ist lieb.“
„lieb(otto).“
/* Formulierung auf Deutsch */
/* Prolog-Formulierung */
„Otto ist Vater von Karl.“
„ist_vater(otto, karl).“
P.Brezany
/* natürlich-sprachliche Formulierung */
/* Prolog-Formulierung, wobei die
Reihenfolge der Argumente „otto“ und
„karl“ wichtig sind */
Institut für Softwarewissenschaft – Universität Wien
5
Bestandteile eines Prolog-Programms (2)
- „Regeln“ („rules“), z.B.
„Wenn ein Mann lieb ist und
Vater eines Kindes ist,
so ist er ein lieber Vater vom Kind.“
In Prolog:
„ist_lieb_vater(Mann, Kind) :lieb(Mann),
ist_vater(Mann, Kind).“
P.Brezany
Institut für Softwarewissenschaft – Universität Wien
6
Bestandteile eines Prolog-Programms (3)
- „Abfragen“ („queries“) fangen mit “?-“ an, z.B.
“?- lieb(otto).“
(Sprich: „Ist Otto lieb?“
• Bestandteile von Klauseln sind „Terme“, die folgende
Ausprägungen haben können:
–
–
–
–
P.Brezany
„Atom“ oder „Funktor“, z.B. otto, ‘OTTO‘
ganze Zahl, z.B. 1923
„Variable“, z.B. Papa, SOHN
„Struktur“, z.B. date(05, 6, 16, [samstag, samedi])
Institut für Softwarewissenschaft – Universität Wien
7
Typisches Prolog-Programm
• Ein typisches Prolog-Programm besteht aus:
- Aufstellung von Fakten,
- Aufstellung von Regeln
- vielen, vielen /* Kommentaren */
- und – während der Benutzung –
- Abfragen
- Hinzufügung weiterer Fakten und Regeln.
Fakten und Regeln bilden die Wissensbasis. Z.B.
bildet der Fakt
lieb(otto). /* Otto ist lieb. */
bereits eine (allerdings sehr „kleine“) Wissensbasis.
P.Brezany
Institut für Softwarewissenschaft – Universität Wien
8
Typischer Mensch-/Maschine-Dialog bei Prolog-Programmen
• Im Abfrage-Modus („query“) können an die Wissensbasis
beliebige Fragen gestellt werden, z.B. bei der o.g.
Beispiel-Wissensbasis:
?- lieb(otto). /* Ist Otto lieb? */
antwortet das (Laufzeit-)System (Übersetzer)
yes
Hat man die Beispiel-Wissensbasis gelöscht, so erhält
man die Antwort
no
Wegen des „yes/no“-Verhaltens wird der Übersetzer oft
„Beweiser“ genannt – das ist aber nicht die einzige
Kommunikationsform.
Mann kann die Wissensbasis während des Dialogs durch
weiteres Wissen erweitern und dadurch „qualifiziertere“
Antworten vom System erweitern.
P.Brezany
Institut für Softwarewissenschaft – Universität Wien
9
Andere Beispiele für Fakten
männlich(otto).
männlich(gustav).
männlich(eike).
weiblich(utta).
teuer(pelzmantel).
-----------------------Das ist eine Wissensbasis.
P.Brezany
Institut für Softwarewissenschaft – Universität Wien
10
Variablen
• Will man z.B. alle mänlichen Objekte der o.g. Beispiel-Wissenbasis
aufstellen oder „generieren“, wäre es möglich, wie folgt vorzugehen:
?- männlich(otto).
yes
?- männlich(eike).
yes
?- männlich(dallidallimatschocha).
no
?- männlich(gustav).
yes
?- männlich(utta).
no
Einfacher und eleganter ist es, mit „Variablen“ zu arbeiten, die mit einem
Grossbuchstaben anfangen und Stellvertreter aller Objekte des Prädikats
darstelen:
?- männlich(Person).
/* Das System antwortet dann: */
Person = otto
In der obigen Abfrage ist „Person“ eine Variable. Sie bewirkt sinngemäß eine
Fragestellung an das System: „Gib mir alle Objekte in der Wissensbasis, die die
Argumente des Prädikats „männlich“ sind.“
Eine Variable wird auf eine Konstante „instanziert“, wenn in der Wissensbasis
durch „pattern matching“ ein Objekt gefunden werden kann, für das sie steht.
Sonnst kann sie nicht instanziert werden.
P.Brezany
Institut für Softwarewissenschaft – Universität Wien
11
Variablen (2)
Die Variable „Person“ wird oben auf die Konstante „otto“ instanziert.
Diese Stelle wird in der Wissensbasis markiert.
Die Abfrage kann mit “;“ fortgesetzt werden, um evtl. Weitere
passende Objekte zu finden:
?- männlich(Person).
Person = otto; /* 1. Antwort */
Person = gustav; /* 2. Antwort */
Person = eike;
/* 3. Antwort */
no
/* kein passendes Objekt mehr */
Das ist die 2. Form der Benutzung einer Wissensbasis und der
Kommunikation mit dem System: die „Generierung“ von Antworten.
P.Brezany
Institut für Softwarewissenschaft – Universität Wien
12
Konjunktionen bei Abfragen
• Folgende Fakten mögen gelten, d.h. Sie bilden eine Wissensbasis:
mag(otto, essen).
mag(utta, otto).
mag(utta, milch).
mag(otto, utta).
mag(otto, milch).
• Abfragen:
?- mag(otto, utta), mag(utta, essen).
no
?- mag(otto, utta), mag(utta, milch).
yes
Hier sind 2 Ziele („goals“) zu erreichen oder 2 Aussagen zu beweisen, die
durch ein Komma im Sinne einer logischen UND-Verknüpfung aneinander
gekettet sind.
Die Ziele werden einzeln und hintereinander („vom links nach rechts“) bewiesen
oder abgelehnt. Mißlingt der Beweis des ersten Ziels, so wird nicht weiter
„gematcht“.
P.Brezany
Auch mit Variablen können Konjunktionen gebildet werden:
?- mag(otto, Irgendwas), mag(utta, Irgendwas).
Irgendwas = milch;
no
Institut für Softwarewissenschaft – Universität Wien
13
Regeln
Nehmen wir an, wir wollen folgende Tatsache angeben:
„Otto mag essen.“
Wir können schreiben
„Otto mag Brot.“ „Otto mag Wurst.“
und
„Brot is essbar.“
„Wurst ist essbar.“
„Otto mag Käse.“ ...
„Käse ist essbar.“ ...
Besser wäre die Angabe einer allgemeinen Regel, z.B.:
„Otto mag ein Objekt O, wenn O esbar ist.“
Eine Regel kann auch Definitions-Charakter haben, z.B. Bruder-Beziehung:
„Person ist der Bruder der Person2,
wenn
Person1 männlich ist, und
Person1 und Person2 dieselben Eltern haben.“
P.Brezany
Institut für Softwarewissenschaft – Universität Wien
14
Darstellung der Regeln in Prolog
Die o.a. Regel wird in Prolog wie folgt formuliert:
mag(otto, O) :- essbar(O).
Außerhalb dieser Regel kann der Bezeichner O wieder (z.B. zur Bezeichnung
anderer Variablen) benutzt werden; diese Variable steht mit der obigen
Relation nicht mehr im Zusammenhang.
Das Symbol “:-“ (sprich: „wenn“) deutet das Zeichen ““ (Implikation)
an. Eine Regel („rule“) in Prolog besteht aus 2 Teilen:
- einem „Kopf“ („head“) (prädikatenlogisch: „Konklusion“)
- einem „Rumpf“ („body“) (prädikatenlogisch: „Prämisse“)
Der Kopf darf nur eine Aussage (als Ergebnis) enthalten, während der
Rumpf aus mehreren, durch Konjunktion miteinander verbundenen
Aussagen bestehen kann.
P.Brezany
Institut für Softwarewissenschaft – Universität Wien
15
Beispiele für Regeln
Folgende Wissensbasis sei gegeben:
männlich(otto).
männlich(karl).
weiblich(brunhild).
weiblich(irmhild).
eltern(karl, irmhild, otto).
eltern(brunhild, irmhild, otto).
Die letzten Prädikate haben drei Objekte:
eltern(Kind, Mutter, Vater).
ist_bruder(Bru, Person1) :-
/* Regel in Wissenbasis */
männlich(Bru),
eltern(Bru, Ma, Pa),
eltern(Person1, Ma, Pa).
?- ist_bruder(karl, brunhild).
Yes
?- ist_bruder(karl, Person).
Person = brunhild
P.Brezany
Institut für Softwarewissenschaft – Universität Wien
16
Logische Grundlagen
1. Prädikatenlogik erster Ordnung, Ableitkarbeit der Aussagen
Diese Themen haben wir schon in der VU diskutiert.
2. Horn-Klauseln und Prolog
Für maschinelles Beweisen können effiziente Algorithmen
für spezielle Klauselsysteme erstellt werden. Diese Systeme
haben eingeschränkte Allgemeinheit, ohne dadurch an der
Pragmatik viel zu verlieren., d.h. ohne als Ergebnis Trivialitäten
erzielen zu müssen.
Durch solche Einschränkungen soll eine spezielle Klauselform
gefunden werden.
P.Brezany
Institut für Softwarewissenschaft – Universität Wien
17
Horn-Klauseln
• Eine Horn-Klausel (Horn publizierte das in 1951) ist eine
Klausel mit höchstens einer Konklusion. Es gibt folgende
zulässige Formen von Horn-Klauseln.
– Allgemeine Horn-Klauseln:
b  a1  ...  an
- Horn-Klauseln ohne rechten Teil: Das sind Tatsachen (d.h. sie gelten
ohne Prämisse, oder sie sind immer wahr) und werden „asserions“ genannt:
b 
- Horn-Klausel ohne Kopf: Das sind Behauptungen oder Aussagen, die
abgeleitet (d.h. bewiesen oder verworfen) werden müssen. Sie werden
auch „procedure calls“, „Negationen“ oder „denials“ genannt:
 a1  ...  an
(sprich: „Behauptung, dass für kein Argument a1 und ... an gilt.)
- Leere Horn-Klausel: Diese Klausel ist immer falsch und wird auch
„Widerspruch“ oder „contradiction“ genannt:

P.Brezany
Institut für Softwarewissenschaft – Universität Wien
18
Herunterladen