Logische Programmierung: Prolog

Slides:



Advertisements
Ähnliche Präsentationen
Programmieren in Logik
Advertisements

Algorithmentheorie 08 – Dynamische Programmierung (1)
Grundlagen des A*-Algorithmus und Anwendung in der Routenplanung
Einführung in Prolog Copyright © 1999 by Michael Neumann
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
6. Regelbasierte Systeme
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (26-Graphenalgorithmen: Wiederholung und Übung) Prof. Th. Ottmann.
Domänenwissen: Wissen über das Anwendungsgebiet
Algebraische Zahlen: Exaktes Rechnen mit Wurzeln
Schnelle Matrizenoperationen von Christian Büttner
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Frame-Logik Eine Einführung Andreas Glausch.
A.o.Univ.Prof. Dr. Franz Hörmann1 PROgramming in LOGic Von Alain Colmerauer in Marseille entwickelt (70er Jahre) Standardwerk Programming in Prolog (Clocksin/Mellish)
2. Programmstruktur – Teil 2
Programmieren in Logik
5. Sortier-Algorithmen Vorbemerkungen:
Listen [mia, vincent, jules, yolanda] [mia, robber(honey_bunny), X, 2, mia] [] [mia, [vincent, jules], [butch, girlfriend(butch)]] [[], dead(zed), [2,
Parallel Prolog SS Seminar Programmiersprachenkonzepte Vortrag von Zehra Öztürk am 17. Juni 2004.
Algorithmen und Komplexität
Training IT-Grundlagen Interaktive Web-Seiten (HTML-Forms, CGI, Servlets) - Prof. Dr. Böttcher - S. cgi/ 1 Prolog als Datenbanksprache.
Listen & Beweisstrategie
Rekursive Listenverarbeitung
Cut, Negation, Manipulation der Datenbasis
Prolog und Prädikatenlogik I
1 Computergestützte Verifikation SAT-basiertes Model Checking Ansatz: Übersetze das Model Checking Problem in ein aussagenlogisches Erfüllbarkeitsproblem.
Garbage Collection Maik Theisen Betreuer: Guido Tack
Repräsentation von Datenstrukturen im -Kalkül Simon Pinkel, Betreuer: Guido Tack Seminar: Theorie kommunizierender Systeme: Der -Kalkül.
Thomas Kloecker Betreuer: Tim Priesnitz
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
Prinzipien des Algorithmenentwurfs Backtracking Prof. Dr. Th. Ottmann
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Bäume: Grundlagen und natürliche Suchbäume) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Semantik von Prolog & Unifikation
Syntax von Prolog & Familiendatenbasis
Fakten, Regeln und Anfragen
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Prof. Dr. T. Kudraß1 Relationenkalkül. Prof. Dr. T. Kudraß2 Relationenkalkül Zwei Ausprägungen: Tupelrelationenkalkül (TRK) und Domänenrelationenkalkül.
Günter Kniesel Advanced Prolog. 2 Bisher: Grundlagen Klauseln –Regeln –Fakten Terme –Die einzige Datenstruktur in Prolog –Listen als Sonderfall mit eigener.
Intelligentes Crawling im WWW mit Hilfe intuitiver Suchbedingungen
Visualisierung funktionaler Programme
grundlagen der Wirtschafts- informatik
Eine Einführung in Prolog und die logische Programmierung
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/ /23.1.
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Programmierung
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Aufgabenstellung Aufgabenstellung: What do the following terms (formulae) express? Which of these terms characterize all sequences of real numbers , x_n.
Einführung in PROLOG StD G. Noll f ( x ) f ( ) g ( ) g ( x ) barbara
Automaten, formale Sprachen und Berechenbarkeit II SoSe 2004 Prof. W. Brauer Teil 1: Wiederholung (Vor allem Folien von Priv.-Doz. Dr. Kindler vom WS 2001/02.
MODULA-2.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
SWE1 / Übung 10 ( ) Rekursion Binärbäume.
Christian Schindelhauer Wintersemester 2006/07 6. Vorlesung
Integritätserhaltung und -Überprüfung in deduktiven Datenbanken
Einführung in die logische Programmierung mit PROLOG
Algorithmen und Datenstrukturen 1 SS 2002
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Suche des kürzesten Weges in einem Netz.
Dr. Wolfram Amme, Semantik funktionaler Programme, Informatik II, FSU Jena, SS Semantik funktionaler Programme.
Lukas Kerecz - Edits1 Edits Lukas Kerecz. Lukas Kerecz - Edits2 Gliederung  Einführung  Edits – warum und wofür?  Edits – Definiton  einleitende Beispiele.
Dr. Wolfram Amme, Grundsätze der Logikprogrammierung, Informatik II, FSU Jena, SS Grundsätze der Logikprogrammierung.
 Präsentation transkript:

Logische Programmierung: Prolog Proseminar Programmiersprachen WS 2003/2004 Jochen Frey Betreuer: Prof. Dr. Gert Smolka

Logische Programmierung: Prolog Übersicht Jochen Frey Logische Programmierung: Prolog

Deklarative Programmierung Zwei Interpretationen: Prozedurale Interpretation: „Wie wird etwas berechnet ?“ Deklarative Interpretation: „Was wird berechnet ?“ Logische Programmierung ist deklarative Programmierung mit Prädikatenlogik Jochen Frey Logische Programmierung: Prolog

Logische Programmierung: Prolog Geschichte von Prolog Entwickelt 1970 (Kowalski, Colmerauer) PROrammieren in LOGik Beeinflusste viele Entwicklungen: 5th Generation Project Deductive Databases Constraint Logic Programming Jochen Frey Logische Programmierung: Prolog

Logische Programmierung: Prolog Terme Grundlegende Datenstruktur in Prolog Grammatik: <Term> ::= <Variable> | <ETerm> <ETerm> ::= <Zahl> | <Symbol(Term, …, Term)> <Fakt> ::= <ETerm> <Regel> ::= <ETerm :- ETerm, …, ETerm> Jochen Frey Logische Programmierung: Prolog

Logische Programmierung: Prolog Logische Programme := Folge von Klauseln (Fakten und Regeln) H :- B1, …, B2 Regelkopf Regelkörper Deklarative Semantik Prozedurale Semantik H erfüllt, fall sowohl B1 als auch B2 erfüllt werden können H erfüllt, falls zuerst B1 und dann B2 erfüllt werden können Für die Abarbeitung von Prolog-Programmen wird den Programmklauseln eine prozedurale Semantik unterstellt Jochen Frey Logische Programmierung: Prolog

Beispiel: Biblische Familie father(terach, abraham). father(terach, nachor). father(terach, haran). father(abraham, isaac). father(haran, lot). father(haran, milcah). father(haran, yiscah). mother(sarah, isaac). son(X,Y) :- father(Y,X), male(X). daughter(X,Y) :- father(Y,X), female(X). male(terach). male(abraham). male(nachor). male(haran). male(isaac). male(lot). female(sarah). female(milcah). female(yiscah). Fakten Regeln Jochen Frey Logische Programmierung: Prolog

Anfragen Prolog prüft nun, ob die Anfrage eine logische Konsequenz des Programms ist Ist dies der Fall so antwortet Prolog mit Yes Andernfalls mit No Hier: ?- father(abraham, isaac). Yes Jochen Frey Logische Programmierung: Prolog

Logische Programmierung: Prolog Unifikation Lösen von Gleichungen zwischen Termen durch Unifikation: finden einer Substitution s zwischen Termen t1 und t2, mit s(t1) = s(t2) allgemeinste Lösung wird als allgemeinster Unifikator bezeichnet Jochen Frey Logische Programmierung: Prolog

Ein Unifikations-Algorithmus f(s1, …, sn) = f(t1, …, tn) ersetzen durch s1=t1, …, sn=tn f(s1, …, sn) = g(t1, …, tm), mit f≠g Fehler x=x löschen t=x, wobei t keine Variable ist ersetzen durch x=t x=t, wobei x nicht in t aber woanders Substitution vorkommt {x/t} anwenden x=t, wobei x in t vorkommt und x≠t Fehler Jochen Frey Logische Programmierung: Prolog

Logische Programmierung: Prolog Beispiele father(X, isaac) father(abraham, Y) Y father(haran, lot) father(abraham, isaac) mother(sarah, isaac) X=abraham Y=isaac Y=father(X,isaac) nicht unifizierbar nicht unifizierbar Jochen Frey Logische Programmierung: Prolog

Beispiel: Biblische Familie Datenbasis Anfrage Antwort father(terach, abraham). father(terach, nachor). father(terach, haran). father(abraham, isaac). father(haran, lot). father(haran, milcah). father(haran, yiscah). mother(sarah, isaac). ?- father(abraham, isaac). Yes Jochen Frey Logische Programmierung: Prolog

Auswertungsmechanismus Prolog sucht eine Auflösungssequenz um eine Anfrage zu beantworten durch: Backward-Chaining (top-down) Tiefensuche Jochen Frey Logische Programmierung: Prolog

Beispiel father(abraham,isaac). father(haran,lot). father(haran,milcah). father(haran,yiscah). male(isaac). male(lot). female(milcah). female(yiscah). son(X,Y) :- father(Y,X), male(X). daughter(X,Y) :- father(Y,X), female(X). ?- son(X,abraham). father(abraham,X),male(X). X=isaac male(isaac). Output: X=isaac Jochen Frey Logische Programmierung: Prolog

Logische Programmierung: Prolog Rücksetzen Problem: Bei der Unifikation innerhalb einer Resolution einer Anfrage tritt ein Fehler auf Lösung: Rückschritt zum letzten Punkt an dem Prolog eine Auswahl treffen musste Rückgängigmachen der Variablenbindungen Nächste Klausel auswählen Jochen Frey Logische Programmierung: Prolog

Rücksetzen father(abraham,isaac). father(haran,lot). father(haran,milcah). father(haran,yiscah). male(isaac). male(lot). female(milcah). female(yiscah). son(X,Y) :- father(Y,X), male(X). daughter(X,Y) :- father(Y,X), female(X). ?- daughter(X,haran)? father(haran,X),female(X). X=lot female(lot). X=milcah female(milcah). X=yiscah female(yiscah). No Output: X=milcah Output: X=yiscah ; Jochen Frey Logische Programmierung: Prolog

Logische Programmierung: Prolog Beispiel: member member(X, [X|Xs]). member(X, [Y|Ys]) :- member(X, Ys). ?- member(X, [1,2,3]). X=1 ?- member(X, [2,3]). ; X=2 ?- member(X, [3]). ; X=3 Jochen Frey Logische Programmierung: Prolog

Beispiel: append append([], Ys, Ys). append([X|Xs], YS, [X|Zs]) :- append(Xs, Ys, Zs). ?- append([a,b],[c,d],[a,b,c,d]). ?- append([b],[c,d],[b,c,d]). ?- append([],[c,d],[c,d]). Yes Jochen Frey Logische Programmierung: Prolog

Logische Programmierung: Prolog Beispiel: last last([X], X). last([Y|Ys], X) :- last(Ys, X). ?- last([1,2,3], X). ?- last([2,3], X). ?- last([3], X). X=3 Alternative: last(List, Last) :- append(_, [Last], List). Jochen Frey Logische Programmierung: Prolog

Evaluation arithmetischer Ausdrücke built-in Prädikat is/2: nimmt eine Variable und ein Term als Argumente berechnet den Term und bindet die Variable an den berechneten Term falls linkes Argument keine Variable Vergleich Fehlermeldung wenn im rechten Argument eine ungebundene Variable steht Jochen Frey Logische Programmierung: Prolog

Logische Programmierung: Prolog Beispiele 5 is 2+3 Yes X is 2+3 X=5 X is Y+3 Fehler Unterschied: X = 2+3 Unifikation Jochen Frey Logische Programmierung: Prolog

Logische Programmierung: Prolog Beispiele if_then_else: „if P then Q else R“ Intuitiv: if_then_else(P, Q, R) :- P, Q. if_then_else(P, Q, R) :- not P, R. if_then_else(P, Q, R) :- R. Lösung mit Cut: if_then_else(P, Q, R) :- P, !, Q. ineffizient falsch Jochen Frey Logische Programmierung: Prolog

built-in Prädikat cut („ ! “) Idee: Suchbäume „stutzen“ um unnötige Berechnungen zu vermeiden 2 Arten: grüne cuts: schneiden Suchbäume weg, die nicht zur Lösung beitragen Effizienssteigerung rote cuts: schneiden Suchbäume weg, die Lösungen enthalten Bedeutung des Prog. wird geändert meistens Programmierfehler Jochen Frey Logische Programmierung: Prolog

Logische Programmierung: Prolog Negation Implementierung mit cut: not(X) :- X, !, fail. not(X). Unterscheiden von Fehlschlagen und Erfolg einer Berechnung Beispiel: alle Elemente einer Liste ≠ 3: ?- member(X, [1,2,3,4]), not(X=3). Jochen Frey Logische Programmierung: Prolog

Problem mit built-in Prädikaten Der Programmierer muss über die Resolution nachdenken Es besteht also keine deklarative Semantik mehr Falsche Reihenfolge führt zu Fehlern Beispiele: ?- Y = 2, X is Y+3. ?- X is Y+3, Y = 2. X = 5 Fehler X = 1; X = 2; X = 4 ?- member(X, [1,2,3,4]), not(X=3). ?- not(X=3), member(X, [1,2,3,4]). No. Jochen Frey Logische Programmierung: Prolog

freeze freeze(X, Goal). Die Ausführung eines Ziels kann verzögert werden, bis die Variable X gebunden wird Somit kann z. B. die Problematik von einigen built-in Prädikaten behoben werden ?- freeze(Y,(X is Y+3)), Y = 2. X = 5 ?- freeze(X, not(X=3)), member(X, [1,2,3,4]). X = 1; X = 2; X = 4 Jochen Frey Logische Programmierung: Prolog

Logische Programmierung: Prolog N-Dame-Problem Auf einem N x N Schachbrett sollen N Damen so angeordnet werden, dass sie sich nicht gegenseitig schlagen können 1 2 Lösung: [2,4,1,3] 3 4 Jochen Frey Logische Programmierung: Prolog

Logische Programmierung: Prolog N-Dame-Problem queens(N,Qs) :- range(1,N,Ns), permutation(Ns,Qs), safe(Qs). range(M,N,[M|Ns]) :- M < N, M1 is M+1, range(M1,N,Ns). range(N,N,[N]). permutation(Xs,[Z|Zs]) :- select(Z,Xs,Ys), permutation(Ys,Zs). permutation([],[]). safe([Q|Qs]) :- safe(Qs), not(attack(Q,Qs)). safe([]). attack(X,Xs) :- attack(X,1,Xs). attack(X,N,[Y|Ys]) :- X is Y+N. attack(X,N,[Y|Ys]) :- X is Y-N. attack(X,N,[Y|Ys]) :- N1 is N+1, attack(X,N1,Ys). Jochen Frey Logische Programmierung: Prolog

Logische Programmierung: Prolog Zusammenfassung deklarative Programmiersprache Suche eingebaut sehr effiziente Techniken für Rück-setzen und Unifikation fehlende Typen keine Module problematische Arithmetik spezifische Kontrollmechanismen Jochen Frey Logische Programmierung: Prolog

Logische Programmierung: Prolog Anwendungen Automatisierte Beweise Expertensysteme Computerlinguistik Rapid Prototyping ... Jochen Frey Logische Programmierung: Prolog

Logische Programmierung: Prolog Literatur Kowalski, R.: Algorithm = Logic + Control, Communication of the ACM 22, pp.424-436, 1979 Mitchell, J.C.: Concepts in Programming Languages. 1.Aufl., Cambridge University Press, 2003 Sterling, L.; Shapiro, E.: The Art of Prolog. 1. Aufl., MIT, 1986 Jochen Frey Logische Programmierung: Prolog