datalog/prolog - deduktion mit datalog/logikprogrammierung · datalog/prolog deduktion mit...

60
Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr [email protected] 01. M¨ arz 2005 Tobias Buhr ([email protected]) Datalog/Prolog 01. M¨ arz 2005 1 / 40

Upload: others

Post on 28-Oct-2019

26 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Datalog/PrologDeduktion mit Datalog/Logikprogrammierung

Tobias Buhr

[email protected]

01. Marz 2005

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 1 / 40

Page 2: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Inhalt

Deduktion mit DatalogEinfuhrungDatalogZusammenfassungAufgaben

Prolog - LogikprogrammierungEinfuhrungTerme als DatenstrukturenListenZusammenfassungAufgaben

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 2 / 40

Page 3: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

EinfuhrungKlassifikation von Programmiersprachen

Imperative Sprachen

I Folge von nacheinanderausgefuhrten Anweisungen

Prozedurale Sprachen

I Variablen, Zuweisungen,Kontrollstrukturen

Objektorientierte Sprachen

I Objekte und Klassen

I ADT und Vererbung

Deklarative Sprachen

I Spezifikation dessen, wasberechnet werden soll

Funktionale Sprachen

I keine Seiteneffekte

I Rekursion

Logische Sprachen

I Regeln zur Definition vonRelationen

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 3 / 40

Page 4: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Inhalt

Deduktion mit DatalogEinfuhrungDatalogZusammenfassungAufgaben

Prolog - LogikprogrammierungEinfuhrungTerme als DatenstrukturenListenZusammenfassungAufgaben

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 4 / 40

Page 5: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Deduktion mit Datalog

I Datalog ermoglicht die deduktive Erweiterung einer relationalen DB

I auf Basis eines eingeschrankten Pradikatenkalkuls

I Faktenbasis

I Regeln

I gefolgertes Wissen

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 5 / 40

Page 6: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Datalog - kleines Beispiel(1)

Fakten (Wissen):

stadt(aachen).stadt(bonn).

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 6 / 40

Page 7: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Datalog - kleines Beispiel(1)

Fakten (Wissen):

stadt(aachen).stadt(bonn).

Anfrage:

?-stadt(X).

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 6 / 40

Page 8: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Datalog - kleines Beispiel(1)

Fakten (Wissen):

stadt(aachen).stadt(bonn).

Anfrage:

?-stadt(X).

Ergebnis:

X=aachen

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 6 / 40

Page 9: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Datalog - kleines Beispiel(1)

Fakten (Wissen):

stadt(aachen).stadt(bonn).

Anfrage:

?-stadt(X).

Ergebnis:

X=aachen ;X=bonn

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 6 / 40

Page 10: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Datalog - kleines Beispiel(1)

Fakten (Wissen):

stadt(aachen).stadt(bonn).

Anfrage:

?-stadt(X).

Ergebnis:

X=aachen ;X=bonn ;no

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 6 / 40

Page 11: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Datalog - kleines Beispiel(1)

Fakten (Wissen):

stadt(aachen).stadt(bonn).

Anfrage:

?-stadt(X).

Ergebnis:

X=aachen ;X=bonn ;no

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 6 / 40

Page 12: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Datalog - kleines Beispiel(2)

Fakten (Wissen):

stadtInNrw(aachen).stadtInNrw(bonn).

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 7 / 40

Page 13: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Datalog - kleines Beispiel(2)

Fakten (Wissen):

stadtInNrw(aachen).stadtInNrw(bonn).

Regel:

stadtInDeutschland(S):-stadtInNrw(S).

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 7 / 40

Page 14: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Datalog - kleines Beispiel(2)

Fakten (Wissen):

stadtInNrw(aachen).stadtInNrw(bonn).

Regel:

stadtInDeutschland(S):-stadtInNrw(S).

Anfrage:

?-stadtInDeutschland(S).

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 7 / 40

Page 15: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Datalog - kleines Beispiel(2)

Fakten (Wissen):

stadtInNrw(aachen).stadtInNrw(bonn).

Regel:

stadtInDeutschland(S):-stadtInNrw(S).

Anfrage:

?-stadtInDeutschland(S).

Ergebnis:

S=aachen

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 7 / 40

Page 16: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Datalog - kleines Beispiel(2)

Fakten (Wissen):

stadtInNrw(aachen).stadtInNrw(bonn).

Regel:

stadtInDeutschland(S):-stadtInNrw(S).

Anfrage:

?-stadtInDeutschland(S).

Ergebnis:

S=aachen ;S=bonn

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 7 / 40

Page 17: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Datalog - kleines Beispiel(2)

Fakten (Wissen):

stadtInNrw(aachen).stadtInNrw(bonn).

Regel:

stadtInDeutschland(S):-stadtInNrw(S).

Anfrage:

?-stadtInDeutschland(S).

Ergebnis:

S=aachen ;S=bonn ;no

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 7 / 40

Page 18: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Datalog - kleines Beispiel(2)

Fakten (Wissen):

stadtInNrw(aachen).stadtInNrw(bonn).

Regel:

stadtInDeutschland(S):-stadtInNrw(S).

Anfrage:

?-stadtInDeutschland(S).

Ergebnis:

X=aachen ;X=bonn ;no

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 7 / 40

Page 19: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Fakten

I (Datalog-)Fakten

I entsprechen Tupeln von RelationenI Beispiele

I stadt(aachen)I hauptstadt(bonn, deutschland)

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 8 / 40

Page 20: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

(Datalog-)Regeln

I (Datalog-)Regeln

I basieren auf Pradikatenkalkul

I Schreibweise in Prolog:p(...) : −p1(...), ..., pk(...).father(X ) : −parent(X ),male(X ).

I Regeln sind Implikationen

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 9 / 40

Page 21: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Anfragen

I Anfrage (Ziel, goal)I Beispiel

I Schreibweise in Prolog: ?− father(otto,X )

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 10 / 40

Page 22: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Beispiel Mortal

Mortal.pl:

mortal(X ) : −person(X ).person(socrates).

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 11 / 40

Page 23: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Beispiel Mortal

Mortal.pl:

mortal(X ) : −person(X ).person(socrates).

Anfrage:

?−mortal(socrates).

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 11 / 40

Page 24: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Beispiel Mortal

Mortal.pl:

mortal(X ) : −person(X ).person(socrates).

Anfrage:

?−mortal(socrates).

Antwort:

yes

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 11 / 40

Page 25: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Beantworten von AnfragenResolution, Unifikation

I Herleiten der Antworten mit einem logischen Beweisverfahren

I Beweisidee: Behaupte Unerfullbarkeit der Anfrage und findeGegenbeispiele

I Resolution (Robinson 1965)I Verbinde zwei Klauseln, die dasselbe Literal, aber mit verschiedenen

Vorzeichen enthaltenI vollstandiges und korrektes Verfahren zum Ableiten von Widerspruchen

in Klauselmengen

I Unifikation: Zwei atomare Formeln, bzw. Terme unifizieren, falls:I sie syntaktisch gleich sind, oderI falls ihre Variablen so belegt werden konnen, dass eine Substitution

existiert, so dass beide Terme syntaktisch gleich werden.

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 12 / 40

Page 26: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Anfrage an Mortal.pl

I Ist Socrates sterblich?

?−mortal(socrates) Anfrage Klauseln mussen durchmortal(X ) : −person(X ) Regel geeignete Substitutionperson(socrates) Resolvente unifiziert werden

I Dahinter steckt die allgemeine Schlussregel:((A → B) ∧ (B → C )) → (A → C )

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 13 / 40

Page 27: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

BacktrackingAncestor-Beispiel (1)

ancestor.pl:

anc(X,Y):-par(X,Y). par(otto,anna).anc(adam,X):-person(X). par(berta,otto).

par(berta,email).

person(X):-lives(X,Y). lives(otto,hamburg).lives(anna,kiel).

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 14 / 40

Page 28: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

BacktrackingAncestor-Beispiel (1)

ancestor.pl:

anc(X,Y):-par(X,Y). par(otto,anna).anc(adam,X):-person(X). par(berta,otto).

par(berta,email).

person(X):-lives(X,Y). lives(otto,hamburg).lives(anna,kiel).

I Anfrage: ?− anc(X , anna).

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 14 / 40

Page 29: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

BacktrackingAncestor-Beispiel (1)

ancestor.pl:

anc(X,Y):-par(X,Y). par(otto,anna).anc(adam,X):-person(X). par(berta,otto).

par(berta,email).

person(X):-lives(X,Y). lives(otto,hamburg).lives(anna,kiel).

I Anfrage: ?− anc(X , anna).

I X = otto

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 14 / 40

Page 30: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

BacktrackingAncestor-Beispiel (1)

ancestor.pl:

anc(X,Y):-par(X,Y). par(otto,anna).anc(adam,X):-person(X). par(berta,otto).

par(berta,email).

person(X):-lives(X,Y). lives(otto,hamburg).lives(anna,kiel).

I Anfrage: ?− anc(X , anna).

I X = otto

I Backtracking ...!

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 14 / 40

Page 31: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

BacktrackingAncestor-Beispiel (1)

ancestor.pl:

anc(X,Y):-par(X,Y). par(otto,anna).anc(adam,X):-person(X). par(berta,otto).

par(berta,email).

person(X):-lives(X,Y). lives(otto,hamburg).lives(anna,kiel).

I Anfrage: ?− anc(X , anna).

I X = otto

I Backtracking ...!

I X = adam

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 14 / 40

Page 32: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

RekursionAncestor-Beispiel (2)

ancestor.pl:

anc(X,Y):-par(X,Y). par(otto,anna).anc(adam,X):-person(X). par(berta,otto).anc(X,Y):-par(Z,Y),anc(X,Z). par(berta,email).

person(X):-lives(X,Y). lives(otto,hamburg).lives(anna,kiel).

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 15 / 40

Page 33: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

RekursionAncestor-Beispiel (2)

ancestor.pl:

anc(X,Y):-par(X,Y). par(otto,anna).anc(adam,X):-person(X). par(berta,otto).anc(X,Y):-par(Z,Y),anc(X,Z). par(berta,email).

person(X):-lives(X,Y). lives(otto,hamburg).lives(anna,kiel).

I Rekursion: anc(X ,Y ) : −anc(X ,Z ), par(Z ,Y ).

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 15 / 40

Page 34: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

RekursionAncestor-Beispiel (2)

ancestor.pl:

anc(X,Y):-par(X,Y). par(otto,anna).anc(adam,X):-person(X). par(berta,otto).anc(X,Y):-par(Z,Y),anc(X,Z). par(berta,email).

person(X):-lives(X,Y). lives(otto,hamburg).lives(anna,kiel).

I Rekursion: anc(X ,Y ) : −anc(X ,Z ), par(Z ,Y ).I Anfrage: ?− anc(X , anna).

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 15 / 40

Page 35: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

RekursionAncestor-Beispiel (2)

ancestor.pl:

anc(X,Y):-par(X,Y). par(otto,anna).anc(adam,X):-person(X). par(berta,otto).anc(X,Y):-par(Z,Y),anc(X,Z). par(berta,email).

person(X):-lives(X,Y). lives(otto,hamburg).lives(anna,kiel).

I Rekursion: anc(X ,Y ) : −anc(X ,Z ), par(Z ,Y ).I Anfrage: ?− anc(X , anna).I Backtracking...!

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 15 / 40

Page 36: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Rekursion, BacktrackingAncestor-Beispiel (3)

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 16 / 40

Page 37: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Inhalt

Deduktion mit DatalogEinfuhrungDatalogZusammenfassungAufgaben

Prolog - LogikprogrammierungEinfuhrungTerme als DatenstrukturenListenZusammenfassungAufgaben

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 17 / 40

Page 38: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Zusammenfassung

I Fakten stadt(koeln).

I Datalog-Regeln stadtInDL(X ) : −stadtInNrw(X ).

I Anfragen ?−mortal(X ).

I Widerspruchsbeweis, Resolution, Unifikation

I Backtracking

I Rekursion

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 18 / 40

Page 39: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

ZusammenfassungNotation

Variable: Zeichenkette, die mit Großbuchstaben beginntX ,X1,Haus

Konstante: Zahl/Zeichenkette, die mit Kleinbuchstaben beginnteins, 1, bauhaus

Pradikat: Zeichenkette, die mit Kleinbuchstaben beginntp, add

Term: Konstante oder Variablebauhaus,X

Atom: n-stelliges Pradikat angewandt auf n Termep/2 : p(eins, zwei)

Klausel: Liste von Literalen{p(X ),¬q(X )}

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 19 / 40

Page 40: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Datalog/PrologAllgemeines

I Datalog ⊂ Prolog

I Datalog ermoglicht die deduktive Erweiterung einer Relationalen DB

I Prolog: Interpreter fur Logikprogramme

I SWI-Prolog (frei)

I http://www.swi-prolog.org

I ReferenzI links zu Tutorials und Beispiel-Programmen

I SICStus-Prolog (kommerziell)

http://www.sics.se/sicstus

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 20 / 40

Page 41: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Inhalt

Deduktion mit DatalogEinfuhrungDatalogZusammenfassungAufgaben

Prolog - LogikprogrammierungEinfuhrungTerme als DatenstrukturenListenZusammenfassungAufgaben

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 21 / 40

Page 42: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Ende (Ihr seid dran!)

I Aufgabe 1I Fakten,RegelnI AnfragenI Datalog-Programm

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 22 / 40

Page 43: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Aufgabe 1 (1)vatermutter.pl

weiblich(ada) maennlich(fritz).weiblich(eva) maennlich(hans).weiblich(maria) maennlich(heinz).weiblich(ana) maennlich(otto).weiblich(petra) maennlich(paul).

maennlich(peter).

istMutterVon(ada, ana). verheiratet(ada, hans).istMutterVon(eva, paul). verheiratet(eva, heinz).istMutterVon(Maria,petra). verheiratet(maria, fritz).istMutterVon(Maria, peter).istMutterVon(ana, otto).

istVaterVon(V,K):- verheiratet(M,V), istMutterVon(K,M).istOnkelVon(O,K):- maennlich(O), istMutterVon(G,O),

istMutterVon(G, ), istVaterVon( , ).Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 23 / 40

Page 44: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Aufgabe 1 (2)Fakten, Regeln, Anfragen

1. Identifiziere Fakten und Regeln in vatermutter .pl .

2. Finde und korrigiere die Fehler in vatermutter .pl .

3. Erweitere vatermutter .pl um

3.1 ada ist Mutter von Fritz.3.2 ana ist verheiratet mit paul.3.3 die fehlenden Variablen in istOnkelVon(...) : −....3.4 jemand ist eine Tante, wenn ... .

4. Stelle 2 beliebige Anfragen.

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 24 / 40

Page 45: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Aufgabe 1 (1)vatermutter.pl

weiblich(ada). maennlich(fritz).weiblich(eva). maennlich(hans).weiblich(maria). maennlich(heinz).weiblich(ana). maennlich(otto).weiblich(petra). maennlich(paul).

maennlich(peter).% arg1 istMutterVon arg2 % arg1 ist verheiratet mit arg2istMutterVon(ada, ana). verheiratet(ada, hans).istMutterVon(eva, paul). verheiratet(eva, heinz).istMutterVon(maria,petra). verheiratet(maria, fritz).istMutterVon(maria, peter). verheiratet(ana, paul).istMutterVon(ana, otto).istMutterVon(ada, fritz).istVaterVon(V,K):- verheiratet(M,V), istMutterVon(M,K).istOnkelVon(O,K):- maennlich(O), istMutterVon(G,O),

istMutterVon(G,B), istVaterVon(B,K).Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 25 / 40

Page 46: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Inhalt

Deduktion mit DatalogEinfuhrungDatalogZusammenfassungAufgaben

Prolog - LogikprogrammierungEinfuhrungTerme als DatenstrukturenListenZusammenfassungAufgaben

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 26 / 40

Page 47: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Einfuhrung

I ”echte”/”volle” Logikprogrammierung

I Spezialpradikate (Listen-Konstruktion)

I Terme als Datenstrukturen

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 27 / 40

Page 48: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Inhalt

Deduktion mit DatalogEinfuhrungDatalogZusammenfassungAufgaben

Prolog - LogikprogrammierungEinfuhrungTerme als DatenstrukturenListenZusammenfassungAufgaben

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 28 / 40

Page 49: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Terme als Datenstrukturen

I Konstruktorsymbol

I Bsp.: nat. Zahlen: 0, suc(0), suc(suc(0)), ...

I Addition:

Rekursive Definition (math.): x + 0 = 0(x + y ′) = (x + y)′

Prolog:add(X , 0,X ).add(X , suc(Y ), suc(Z )) : −add(X ,Y ,Z ).

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 29 / 40

Page 50: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

AdditionBerechne 3 + 2

I Anfrage: ?− add(suc(suc(suc(0))), suc(suc(0)),U)

I Programmklauseln(1){add(X , 0,X )}(2){add(X , suc(Y ), suc(Z )),¬add(X ,Y ,Z )}

I Resolution mit Anfrage:

¬add(suc(suc(suc(0))), suc(suc(0)),U) (2)| �

¬add(suc(suc(suc(0))), suc(0),Z ) (2)| �

¬add(suc(suc(suc(0))), 0,Z ′) (1)| ��

I Substitutionen: [U/suc(Z )], [Z/suc(Z ′)], [Z ′/suc(suc(suc(0)))]

I U = suc(suc(suc(suc(suc(0))))))

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 30 / 40

Page 51: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Inhalt

Deduktion mit DatalogEinfuhrungDatalogZusammenfassungAufgaben

Prolog - LogikprogrammierungEinfuhrungTerme als DatenstrukturenListenZusammenfassungAufgaben

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 31 / 40

Page 52: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Listen

I Liste: verschachtelte Datenstruktur

I Konstruktor: cons(x , y)I Prolog bietet abkurzende Schreibweise

I [a1, a2, ..., ak ] steht fur cons(a1, cons(a2, ...cons(ak , nil)))I [x |y ] steht fur cons(x , y)I [] steht fur die leere Liste nil

I Beispiel: [a, b, c] steht fur cons(a, cons(b, cons(c , nil)))

I verschachtelte Listen

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 32 / 40

Page 53: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Listen - Hilfspradikate

I Einfugen: insert

insert(X ,Xs, [X |Xs]).

I Listen-Konkatenation: append

append([],Xs,Xs).append([X |Xs],Ys, [X |Zs]) : −append(Xs,Ys,Zs).

I enthalten-sein: member

member(X , [X | ]).member(X , [ |Ys]) : −member(X ,Ys).

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 33 / 40

Page 54: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Listen - Permutation

I Permutieren:

permut([X ], [X ]).permut([X |Xs],Zs) : −permut(Xs,Ts), nd ins(X ,Ts,Zs).

I dafur benotigt: nicht-deterministisches Einfugen

nd ins(X ,Xs, [X |Xs]).nd ins(X , [Y |Ys], [Y |Zs]) : −nd ins(Xs,Ys,Zs).

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 34 / 40

Page 55: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Inhalt

Deduktion mit DatalogEinfuhrungDatalogZusammenfassungAufgaben

Prolog - LogikprogrammierungEinfuhrungTerme als DatenstrukturenListenZusammenfassungAufgaben

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 35 / 40

Page 56: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Zusammenfassung

I Terme als Datenstrukturen suc(suc(...suc(0)...))

I Listen [a, b, c]

I Reihenfolge der Anweisungen spielt u.U. eine Rolle

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 36 / 40

Page 57: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Inhalt

Deduktion mit DatalogEinfuhrungDatalogZusammenfassungAufgaben

Prolog - LogikprogrammierungEinfuhrungTerme als DatenstrukturenListenZusammenfassungAufgaben

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 37 / 40

Page 58: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Ende - Ihr seid dran!

I Aufgabe 1I Listen

I Aufgabe 2I Strings

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 38 / 40

Page 59: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Aufgabe 1

1. Listen

1.1 Forme in Prolog-Listendarstellung um: cons(a, cons(b, cons(c , nil))).1.2 Wofur steht folgende abkurzende Bezeichnung: [[a, [b, c]]|[d , e]]?1.3 Erstelle auf der Basis von permut(...) einen Sortieralgorithmus fur

Listen.

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 39 / 40

Page 60: Datalog/Prolog - Deduktion mit Datalog/Logikprogrammierung · Datalog/Prolog Deduktion mit Datalog/Logikprogrammierung Tobias Buhr tobiasbuhr@gmx.de 01. M¨arz 2005 Tobias Buhr (tobiasbuhr@gmx.de)

Aufgabe 2

1. Was konnte die Anfrage ?− concat(′hallo ′,′ Welt ′,X ). bewirken?

2. Benutze concat um das Prafix von Test in getTest zu bestimmen.

3. Benutze concat um alle Suffixe von get in der Liste[′getInstance ′,′ getDefault ′,′ getChildren′] zu bestimmen.

Tobias Buhr ([email protected]) Datalog/Prolog 01. Marz 2005 40 / 40