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

Post on 21-Feb-2020

3 views 0 download

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

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

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.

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

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

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.

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

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

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.

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.

Einführungsbeispiel

Fakten Fragen Konjunktionen Regeln

Natürlichsprachlich: John gehört das Buch

Objekt1: JohnObjekt2: BuchEigentum: gerichtete Relation zwischen Objekten

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

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

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

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.

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

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.

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

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 */

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!

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.

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.

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

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

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!

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.

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.

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.

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.

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.

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.

Regeln Beispiel

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

?- likes(john, X).

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 .

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

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.