einführung in die logische programmierung mit prolog

18
Institut für Softwarewissenschaft – Universität Wien P.Brezany 1 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

Upload: neith

Post on 18-Mar-2016

35 views

Category:

Documents


2 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 1

Einführung in die logische Programmierung mit

PROLOG

Prof.-Dr. Peter BrezanyInstitut für Scientific Computing

Universität Wien, Nordbergstraße 15/C315

1090 Wien

Tel. : 01/4277 39425E-mail : [email protected]

Sprechstunde: Dienstag, 13.00-14.00

Page 2: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 2

Literatur

1. Fevzi Belli. Einführung in die logische Programmie-rung 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.

Page 3: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 3

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äziseSpezifikation dieses Algorithmus an.Die Steuerungs-Komponente gibt dagegen die „Strategie“ an, d.h. wiediese Definitionen einzusetzen sind.

Programm = Logik + Datenstruktur + Steuerung

Programmierungsmodel (Was sieht der Programmierer?):

PROGRAMM = LOGIK

Page 4: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 4

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“.

Page 5: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 5

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.“ /* Formulierung auf Deutsch */ „lieb(otto).“ /* Prolog-Formulierung */

„Otto ist Vater von Karl.“ /* natürlich-sprachliche Formulierung */ „ist_vater(otto, karl).“ /* Prolog-Formulierung, wobei die Reihenfolge der Argumente „otto“ und „karl“ wichtig sind */

Page 6: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 6

Bestandteile eines Prolog-Programms (2) - „Regeln“ („rules“), z.B.

„Wenn ein Mann lieb ist undVater eines Kindes ist, so ist er ein lieber Vater vom Kind.“

In Prolog:

„ist_lieb_vater(Mann, Kind) :-lieb(Mann),ist_vater(Mann, Kind).“

Page 7: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 7

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:

– „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])

Page 8: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 8

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.

Page 9: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 9

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.

Page 10: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 10

Andere Beispiele für Fakten

männlich(otto). männlich(gustav). männlich(eike). weiblich(utta). teuer(pelzmantel).------------------------

Das ist eine Wissensbasis.

Page 11: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 11

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). ?- männlich(gustav). yes yes

?- männlich(eike). ?- männlich(utta). yes no ?- männlich(dallidallimatschocha). 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.

Page 12: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 12

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.

Page 13: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 13

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“.

Auch mit Variablen können Konjunktionen gebildet werden: ?- mag(otto, Irgendwas), mag(utta, Irgendwas). Irgendwas = milch; no

Page 14: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 14

RegelnNehmen wir an, wir wollen folgende Tatsache angeben: „Otto mag essen.“

Wir können schreiben„Otto mag Brot.“ „Otto mag Wurst.“„Otto mag Käse.“ ...

und„Brot is essbar.“ „Wurst ist essbar.“ „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.“

Page 15: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 15

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.

Page 16: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 16

Beispiele für RegelnFolgende 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

Page 17: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 17

Logische Grundlagen1. 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.

Page 18: Einführung in die logische Programmierung mit PROLOG

Institut für Softwarewissenschaft – Universität Wien

P.Brezany 18

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: