Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in...

34
Einführung in Prolog Literatur Clocksin/Mellish Programming in Prolog Skript aus dem Kurs Max Hadersbeck Skript aus dem Kurs Hans Leiss Bratko Prolog Programming for Artificial Intelligence Prolog Lexikon im Web http://www.cse.unsw.edu.au/~billw/prologdic t.html

Transcript of Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in...

Page 1: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Einführung in Prolog

Literatur

➲ Clocksin/Mellish Programming in Prolog➲ Skript aus dem Kurs Max Hadersbeck➲ Skript aus dem Kurs Hans Leiss➲ Bratko Prolog Programming for Artificial

Intelligence➲ Prolog Lexikon im Web

http://www.cse.unsw.edu.au/~billw/prologdict.html

Page 2: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Einführung in Prolog

Kurzcharakteristik:Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen Programmiersprache ist eine Sammlung von Formeln. Die Auswertungsstrategie gehört nicht zum Programm sondern ist in der Sprache selbst implementiert.Schleifenkonstrukte und Variablenzuweisungen sind nur sehr eingeschränkt möglich. Einmal gebundenen Variablen kann nur über Backttracking ein neuer Wert zugewiesen werden.

Page 3: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Kursübersicht

➲ Sitzung 1: 18.Oktober Tutorial = Kapitel1 Clocksin/Melish

➲ Sitzung 2: 25.OktoberSyntax Überblick = Kapitel2 Clocksin/Melish

➲ Sitzung 3: 8.November➲ Listen und Rekursive Suche = Kapitel2

Skript Max Hadersbeck, Abarbeitung Prolog = Kapitel 3 Hadersbeck

➲ Sitzung 4: 15.NovemberListen und Rekursive Suche = Kapitel3 Clocksin/Melish

Page 4: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Kursübersicht

➲ Sitzung 5 22.November Akkumulatoren und Differenzlisten=Kapitel 3 Clocksin/Melish/ + Kapitel 2/4 Hadersbeck

➲ Sitzung 6 29.NovemberCut Prädikat = Kapitel 4 Clocksin/Melish

➲ Sitzung 7 6.DezemberInput/Output = Kapitel 5 Clocksin/Melish, Skript Hadersbeck

➲ Sitzung 8 13.DezemberBuiltin Prädikate = Kapitel 6 + Hadersbeck

➲ Sitzung 9 20.DezemberAufgaben und Datenstrukturen = Kapitel 7

Page 5: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Organisatorisches

➲ Klausur I: Montag, 07.Februar 2011. Stoff der Vorlesung. 90 Minuten für alle. v.a. Theorie und Fragen zu Programmen.

➲ Klausur II: Dienstag, 08. Februar 2011.90 Minuten, nicht für Informatik Bachelor Studenten. Stoff sind die Aufgaben der Übung, praktischer Teil, selbstständig Programme auf dem Blatt schreiben können.

Page 6: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Organisatorisches II

➲ Übung Dienstag von 12-14 Uhr. Besprochen werden die Übungsaufgaben bzw. zusätzliche Aufgaben

➲ Abgabetermin für Aufgaben per Webseite: Montag 8.00 Uhr

➲ Aufgaben werden von allen Bachelor CL/SLK CL Magister Studenten korrigiert; müssen jedoch nicht gemacht werden.

➲ Webseite: http://www.cis.uni-munehnchen.de/kurse/ws_10/prolog

Page 7: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Ziel der Veranstaltung

Erlernen der Grundlagen der Programmiersprache PrologSelbstständiges Schreiben von ProgrammenFähigkeit ein grösseres Prologsystem zu verstehen, insbesondere als

Voraussetzung des Kurses im 4. Semester, CL2

Page 8: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Ein kurzes Tutorial zu Prolog

Prolog ist eine Sprache mit der man Probleme von Objekten und deren Beziehungen beschreiben kann. Die Programme definieren Eingaben für den Ablaufalgorithmus. Probleme werden deklarativ dargestellt. Rekursion spielt eine grosse Rolle. Klarheit über den Abarbeitungsmechanismus ist unverzichtbar.Einerseits Stärke. Auch komplexe Programme v.a. Im Bereich der Sprachmodellierung, der Beweismodellierung und der strategischen Planung können implementiert werden. Andererseits problematisch, da man die Programme kaum übersehen kann (unvorhersehbare Seiteneffekte von Änderungen) und kooperatives Programmieren

sehr schwer ist.

Page 9: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Elemente eines Prolog Programms

Prolog ist eine Programmiersprache um z.T. für andere Sprachen sehr schwierige Probleme zu lösen.Hauptmerkmal: Backtracking Algorithmus schon implementiertDeklariere Fakten über Objekte und ihre BeziehungenDefiniere Regeln über Objekte und ihre BeziehungenStelle Fragen über Objekte und ihre Beziehungen

Beispiel Schwestern: zwei Menschen sind Schwestern wenn beide weiblich sind und sie dieselben Eltern haben.Es handelt sich um eine Definition und nicht darum alle Aspekte

abzubilden die mit dem Begriff „Schwester“ verbunden sind.

Page 10: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Einführungsbeispiel

Fakten Fragen Konjunktionen Regeln

Natürlichsprachlich: John gehört das Buch

Objekt1: JohnObjekt2: BuchEigentum: gerichtete Relation zwischen Objekten

Page 11: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Pseudoformale Beschreibung des Schwesternbeispiels

Zwei Menschen sind Schwestern wenn Sie weiblich sind und dieselben Eltern haben. X=weiblich, Eltern(X,E1,E2), Y=weiblich, Eltern(Y,E1,E2).

',' wird in Prolog für die Konjunktion 'Λ' verwendet; das ist später sehr wichtig für die Variablenbindung d.h. Nur die Konjunktion stellt hier sicher dass die Variablen E1 und E2 in beiden Teilklauseln für dasselbe stehen

Page 12: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Elemente eines Prologprogramms

Deklarieren von Fakten Objekte, BeziehungenDefinieren von Regeln Objekte, Beziehungen

Stellen von Fragen Objekte Beziehungen

Programmieren: Stelle Fakten und Regeln in einem oder mehreren Programmen bereitProgrammablauf: Eine Frage setzt Inferenzen von einem Fakt zum anderen von einer Regel zur anderen in Gang

Page 13: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Fakten

In jedem Prologbuch, auch in der formalen Semantik: likes(john, mary).

Namen aller Beziehungen und Objekte beginnen mit KleinbuchstabenRelation wird nach vorne geschrieben, PräfixObjekte der Relation werden kommasepariert in runden Klammern angeordnetPunkt am Ende eines FaktsNamen zwischen Klammern, die Objekte bezeichnen heissen ArgumenteName der Relation vor der Klammer heisst Prädikat

likes : Prädikatjohn, mary: Argumente

Page 14: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Prolog Fakten

likes: Prädikat mit zwei Argumenten nämlich john und maryNamen für Prolog beliebig, Zahl der Argumente beliebigKollektion von Fakten und Regeln wird auch Datenbank (database) genannt. Achtung: john und John sind verschieden. mary und marry auch.

Page 15: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Prolog Fragen

Eine Frage sieht in Prolog aus wie ein Fakt mit einem speziellen führenden Symbol:?:- owns(john, house).Prolog nimmt das Fragesymbol zum Anlass seine Datenbank zu durchsuchen. Es sucht Fakten, die mit dem Fakt der Frage matchen.?:- likes(john,mary).

?:- likes(mary,john).

Page 16: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Prolog Match

Suche einen Fakt in der Datenbank der mit der Frage matcht.Wann gibt es einen Match

Prädikate müssen gleich sein. Achtung Spelling! Argumente müssen gleich sein. Achtung Ordnung! Achtung Spelling!

Findet Prolog einen Fakt der mit der Frage matcht:

yes.sonst

no.

Page 17: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Beispieldatenbank

Datenbank:

likes (joe, fish).likes (joe, mary).likes (mary,book).likes (john,book).

Anfragen:

?- likes(joe,money). ?- likes(mary, joe).?- likes(mary,book).?- likes(marry,book).?- king(john,france).

Page 18: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

BeispieldatenbankDatenbank:

likes (joe, fish).likes (joe, mary).likes (mary,book).likes (john,book).

Anfragen:

?- likes(joe,money). no. /*Prädikat matcht, Anzahl Argumente, aber zweites Argument nicht */ ?- likes(mary, joe). no. /*Prädikat matcht, Anzahl Argumente, aber Ordnung der Argumente stimmt nicht. Scheitert schon am ersten Argument*/?- likes(mary,book). yes /*Prädikat, Argumentzahl und Argumente */?- likes(marry,book). no /* mary = mary ? no */?- king(john,france). no /* scheitert schon beim Prädikat */

Page 19: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Was bedeutet 'no'

no heisst, kein match mit der Frage. no ≠ falsch.

no heisst nicht beweisbar gegeben die Datenbank.

human(socrates).human(aristoteles).athenian(socrates).?- athenian(socrates). yes.?- athenian(aristoteles). no.?- greek(socrates). no.

Aus unserer unvollständigen Datenbank können wir nicht die reale Geschichte beweisen!

Page 20: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Fragen allgemeinerer Natur

Bislang diskutierte Fragen nicht so interessant. Wir bekommen dieselbe Information zurück, die wir hineingetan haben.

Frage allgemeinerer Natur: Welche Objekte mag MaryDoes Mary like X. ?- likes(mary,X).Variablennamen beginnen in Prolog mit einem Grossbuchstaben. Benutzt Prolog eine Variable, so kann diese instantiert sein oder nicht.Instantiert heisst: ein Objekt ist an die Variable gebunden, für das die Variable steht.

Page 21: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Frage mit einer VariableProlog sucht durch alle Fakten um Dinge zu finden, die Mary mag.

likes(mary,flowers).likes(mary,john).likes(mary,mary).likes(paul,mary).

?- likes(mary,X).yes. X=flowers.

Beim Durchsuchen der Datenbank erlaubt Prolog der Variable mit jedem anderen Argument an der gleichen Position im Fakt zu matchen.Prolog sucht top down. Findet ein Prädikat likes, matcht mary und instantiert X mit flowers. Alles matcht also yes.

Page 22: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Ausgabe mehrerer Lösungen

Nach einem Match markiert Prolog die entsprechende Stelle in der Datenbank. Durch Eingabe des Strichpunktes ' ; ' wird eine neue Suche ausgelöst. Prolog kehrt in die Datenbank zurück und sucht ab der letzten Markierung topdown. So findet es die anderen Lösungen.X=john

X=mary

Page 23: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Konjunktionen

Do John and Mary like eachother?

zwei Fragen: mag John Mary und mag Mary John. In Prolog zwei goals verbunden durch die Konjunktion ' , '.

?-likes(john, mary), likes(mary, john)

In unserer Datenbank: no

Page 24: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Kombination von Variablen und Konjunktionen

likes(mary,food).likes(mary,wine).likes(john,wine).likes(john,mary).Gibt es etwas das sowohl john als auch mary mögen?Informal: irgendein X das mary mag Λ john mag X.?- likes(mary,X), likes(john,X).

Erfülle das erste Ziel, versuche das zweite Ziel zu erfüllen.!Im Backtrackingprozess hat jedes Ziel seinen eigenen Placemarker!

Page 25: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Kombination von Variablen und Konjunktionen

likes(mary,food). ↵ placemarker goal 1likes(mary,wine). ↵ placemarker goal 1likes(john,wine).likes(john,mary).?- likes(mary,X), likes(john,X).Erstes Ziel erfüllt, X wird mit food instantiert: X=food, placemarker gesetztZweites Ziel: likes (john, food). X Unifikation. failBacktracking: gehe unter den placemarker von goal 1 und versuche dieses anders zu erfüllen.Erstes Ziel erfüllt, X wird mit wine instantiert: X=wineZweites Ziel wird: likes(john,wine). X Unifikation. Dritter Fakt matcht. Beide Ziele der Konjunktion erfüllt. Gesamte Anfrage: yes, X=wineErzwungenes Backtraking: ' ; 'Bottom up: Fakt 4 matcht nicht, Versuch goal 1 anders zu lösen (resolve); keine weitere Möglichkeit goal 1 zu lösen also no.

Page 26: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Programm im trace Betrieb ?- consult('goalsconjunctions.pl').% goalsconjunctions.pl compiled 0.00 sec, 240 bytestrue.?- trace.true.[trace] ?- likes(mary,X),likes(john,X). Call: (7) likes(mary, _G901) ? creep Exit: (7) likes(mary, food) ? creep Call: (7) likes(john, food) ? creep Fail: (7) likes(john, food) ? creep Redo: (7) likes(mary, _G901) ? creep Exit: (7) likes(mary, wine) ? creep Call: (7) likes(john, wine) ? creep Exit: (7) likes(john, wine) ? creepX = wine ; Redo: (7) likes(john, wine) ? creep Fail: (7) likes(john, wine) ? creepfalse.

Page 27: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Variableninstantierung in Zielkonjunktionen

1. Ziel Fakt

likes(mary,X) likes(mary,wine)

2. Ziel

likes(john,X)Sobald eine Variable instantiert wird hier mit wine wird sie an allen

Stellen instantiert, also auch im zweiten Ziel.

Page 28: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Variableninstantierung: Backtracking

Resatisfy: uninstantiere alle Variablen, die in dem Ziel instantiert wurden das durch ' ; ' auf andere Art gelöst werden soll. Dasselbe gilt für Teilziele die durch Backtracking rückwärts zu Alternativen gezwungen werden.Dies ist gerade der Vorteil von Prolog: so eine Buchhaltung selbst zu

Programmieren ist durchaus anspruchsvoll.

Page 29: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Regeln

John mag alle Menschen

Lösung 1: schreibe separate Fakten für alle Personen in der DatenbankLösung 2: verallgemeinere zu John mag jedes Objekt, gegeben das Objekt ist ein Mensch. Prolog Regeln drücken aus, dass ein Fakt von einer Gruppe anderer

Fakten abhängt.

Page 30: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Regeln

John mag jeden der Wein mag.John likes X if X likes wineIn Prolog besteht eine Regel aus einem Kopf und einem Rumpf verbunden durch ' :- '

likes(john, X) :- likes(X, wine).

Ein heikler john: likes(john, X) :- likes(X, wine), likes(X,food).

Achtung Variableninstantierung: Variablen werden komplett instantiert vom Kopf bis zum Rumpf. Dies ist später sehr wichtig weil so über Regelaufrufe auch Variablen beim Aufrufer instantiert

werden.

Page 31: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Regeln Beispiel

likes(mary,food).likes(jane,wine).likes(mary,wine).likes(john,X) :- likes(X, wine), likes(X,food).

?- likes(john, X).

Page 32: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Regeln Beispiel

[trace] ?- consult('EXAMPLES/vl1.2_rules.pl').% EXAMPLES/vl1.2_rules.pl compiled 0.00 sec, 120 bytestrue.

[trace] ?- likes(john,X). Call: (6) likes(john, _G1284) ? creep Call: (7) likes(_G1284, wine) ? creep Exit: (7) likes(jane, wine) ? creep Call: (7) likes(jane, food) ? creep Fail: (7) likes(jane, food) ? creep Redo: (7) likes(_G1284, wine) ? creep Exit: (7) likes(mary, wine) ? creep Call: (7) likes(mary, food) ? creep Exit: (7) likes(mary, food) ? creep Exit: (6) likes(john, mary) ? creepX = mary .

Page 33: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Zusammenfassung

Fakten Objekten zuordnen Fragen zu Objekten stellen Variablen benutzen und den Skopus der Variablen sehen Konjunktionen Beziehungen in der Form von Regeln repräsentieren Einführung zum Backtracking

Page 34: Einführung in Prolog...Einführung in Prolog Kurzcharakteristik: Prolog steht für Programming in Logic. Entwickelt in den 70er Jahren von Colmerauer. Ein Programm in einer logischen

Hausaufgabe

1.Lesen Sie Kapitel 1, Clocksin/Melish2.Bilden von Arbeitsgruppen, 3er Gruppen sind optimal3.Schreiben Sie ein Prolog Programm, das die Relation Bruder und

Schwester abbildet.