Listen & Beweisstrategie

Slides:



Advertisements
Ähnliche Präsentationen
Programmieren in Logik
Advertisements

8. Termin Teil B: Wiederholung Begriffe Baum
Deduktive Datenbanken
Hier einige Hieroglyphen:
XML-Programmierung mit XDuce
Einführung in Prolog Copyright © 1999 by Michael Neumann
Vorlesung Compilertechnik Sommersemester 2008
Falls Algorithmen sich selbst rekursiv aufrufen, so kann ihr Laufzeitverhalten bzw. ihr Speicherplatzbedarf in der Regel durch eine Rekursionsformel (recurrence,
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
6. Regelbasierte Systeme
Das LCA – Problem in Suffixbäumen
2. Programmstruktur – Teil 2
7. Natürliche Binärbäume
Kapitel 6. Suchverfahren
R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister)
Organisatorisches Klausur für Übungsschein (Anfang Januar)
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
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.
Kapitel 4 Syntaktische Analyse: LR Parsing.
Rekursive Listenverarbeitung
Cut, Negation, Manipulation der Datenbasis
Maschinelle Übersetzung I
Prolog und Prädikatenlogik I
FH-Hof Extensible Markup Language Richard Göbel. FH-Hof Extensible Markup Language XML XML ist universeller Ansatz für die Strukturierung von Zeichenketten.
Sortierverfahren Richard Göbel.
FH-Hof Grammatiken Richard Göbel. FH-Hof Begriffe Eine Grammatik definiert die Struktur (Syntax) einer Zeichenkette Eine Grammatik definiert nicht die.
Logische Programmierung: Prolog
Thomas Kloecker Betreuer: Tim Priesnitz
REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.
REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.
Suche in Texten: Suffix-Bäume
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 (11-3 –Selbstanordnende lineare Listen) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27-Selbstanordnende lineare Listen) Prof. Th. Ottmann.
Union-Find-Strukturen
Algorithmen und Datenstrukturen
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten Suffix - Bäume.
Semantik von Prolog & Unifikation
Verschachtelte Listen, Differenzlisten, Graphen
Prolog Grundkurs WS 99/00 Christof Rumpf
Syntax von Prolog & Familiendatenbasis
Fakten, Regeln und Anfragen
Prolog Grundkurs WS 98/99 Christof Rumpf
Parsing Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf.
Merkmalslogik Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf.
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.
Grammatik als Deduktionssystem
Klausur „Diskrete Mathematik II“
Günter Kniesel Advanced Prolog. 2 Bisher: Grundlagen Klauseln –Regeln –Fakten Terme –Die einzige Datenstruktur in Prolog –Listen als Sonderfall mit eigener.
Minimum Spanning Tree: MST
Der VFP Debugger - Coverage und Profiling. © 1999 TMN-Systemberatung GmbH Der VFP Debugger n Neues Aussehen, eigene Task n Erweiterte Möglichkeiten n.
§8 Gruppen und Körper (8.1) Definition: Eine Gruppe G ist eine Menge zusammen mit einer Verknüpfung, die jedem Paar (a,b) von Elementen aus G ein weiteres.
Eine Einführung in Prolog und die logische Programmierung
Einführung in PROLOG StD G. Noll f ( x ) f ( ) g ( ) g ( x ) barbara
Algorithmen und Datenstrukturen Übungsmodul 8
Logische Programmierung mit PROLOG
Algorithmen für das Erfüllbarkeitsproblem SAT
Einführung in die logische Programmierung mit PROLOG
7. Formale Sprachen und Grammatiken
Grammatik als Deduktionssystem Theorie, Grammatik, Grammatiktheorie Grammatik Sprache Hypothese Sprachtheorie Theorie Erklärung Theoretisches Konstrukt.
Prolog Grundkurs WS 99/00 Christof Rumpf
Binärbäume.
Reihenfolge der Operatoren
Dr. Wolfram Amme, Grundsätze der Logikprogrammierung, Informatik II, FSU Jena, SS Grundsätze der Logikprogrammierung.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Prolog-Kurs SomSem 2017 Daniel Beßler/Hagen Langer
Prolog-Kurs SomSem 2017 Daniel Beßler/Hagen Langer
REKURSION + ITERATION.
 Präsentation transkript:

Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

GK Prolog - Listen, Beweisstrategie Listen sind zusammengesetzte Terme, die in eckigen Klammern eine beliebige Anzahl von Termen als Elemente haben können, die durch Kommata getrennt werden. Die Reihenfolge der Elemente ist im Gegensatz zu Mengen relevant: Listen sind Sequenzen, bzw. Folgen. [atom,1,X,2.0,p(Y),[],[x]] 15.11.99 GK Prolog - Listen, Beweisstrategie

Rekursive Definition von Listen Listen sind Terme. Es gibt zwei Arten von Listen: leere und nichtleere. leere Liste: [] nichtleere Liste: [Head|Tail] wobei Head ein Term ist und Tail eine Liste. 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie Listenzerlegung Nichtleere Listen können mit dem Listenkonstruktor in Kopf und Rest zerlegt werden. ?- [1,2,3] = [H|T]. H = 1 Kopf T = [2,3] Rest yes 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie Leere Liste Die leere Liste ist nicht zerlegbar. Nichtleere Listen haben als Rest hinter dem letzten Listenelement die leere Liste. Das bedeutet nicht, daß die leere Liste Element in jeder nichtleeren Liste ist. ?-[a]=[H|T]. H=a, T=[], yes 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie Zerlegungen von [1,2,3,4] ?- [1,2,3,4]=[A|T]. A=1, T=[2,3,4], yes ?- [1,2,3,4]=[A,B|T]. A=1, B=2, T=[3,4], yes ?- [1,2,3,4]=[A,B,C|T]. A=1, B=2, C=3, T=[4], yes ?- [1,2,3,4]=[A,B,C,D|T]. A=1, B=2, C=3, D=4, T=[], yes 15.11.99 GK Prolog - Listen, Beweisstrategie

Zerlegen von Zerlegungen ?- [1,2,3,4]=[H1|T1], T1=[H2|T2], T2=[H3|T3], T3=[H4|T4]. H1=1, T1=[2,3,4] H2=2, T2=[3,4] H3=3, T3=[4] H4=4, T4=[] yes 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie Listen als Strukturen Listen sind eigentlich Strukturen, für die eine besondere Schreibweise vereinbart wurde. Listennotation Prädikatsnotation [] [] [H|T] `.`(H,T) [1,2,3,4] `.`(1, `.`(2, `.`(3, `.`(4,[])))) 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie Listenunifikation Leere Liste: mit Variablen und der leeren Liste unifizierbar. Nichtleere Listen: mit Variablen und nichtleeren Listen unifizierbar, wobei die Anzahl der Elemente gleich sein und das i-te Element der einen mit dem i-ten Element der anderen Liste unifizierbar sein muß. 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie Listenkonstruktor Der Listenkonstruktor „|“ zerlegt nichtleere Listen in Kopf und Rest. Eine Liste [H1|T1] unifiziert mit einer Liste L, wenn L in [H2|T2] zerlegbar ist, die Terme H1 und H2 unifizierbar sind und die Listen T1 und T2 unifizierbar sind. 15.11.99 GK Prolog - Listen, Beweisstrategie

Beispiele zur Listenunifikation ?- [X,Y,Z]=[paul,klaut,bananen]. ?- [katze]=[X|Y]. ?- [X,Y|Z]=[anna,liebt,wein]. ?- [[die,Y]|Z]=[[X,katze],[ist,weg]]. ?- [a|B]=[A|b]. !!! ?- [X,anna]=[Y|[maria]]. 15.11.99 GK Prolog - Listen, Beweisstrategie

Rekursive Listenverarbeitung Listen sind eine rekursiv definierte Datenstruktur. Deshalb sind Prädikate zur Listenverarbeitung meist rekursive Prädikate mit folgender Strategie: Zerlege die Liste in Kopf und Rest. Mach was mit dem Kopf und verarbeite den (verkürzten) Rest rekursiv weiter. Terminiere, wenn die Liste leer ist, oder der aktuelle Kopf bestimmte Merkmale aufweist. 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie member/2 % member(Term,Liste) member(X,[X|_]). member(X,[_|T]):- member(X,T). Das Prädikat member/2 ist beweisbar, wenn Term ein Element von Liste ist. 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie Anfragen an member/2 ?- member(2,[1,2,3]). yes ?- member(4,[1,2,3]). no ?- member([],[1,2,3]). ?- member(2,[1,X,3]). X=2 ?- member(X,[1,2,3]). X=1 ->; X=2 ->; X=3 ->; no ?- member(X,Y). X=_1 Y=[_1|_2] ->; Y=[_3,_1|_2] ->; ... 15.11.99 GK Prolog - Listen, Beweisstrategie

Beweisstrategie des Interpreters Anfrage gilt als zu beweisende Behauptung. Anfrage unifiziert mit Kopf einer Klausel. Unifikation liefert Variableninstanzen. Klauselrumpf wird bewiesen. Alternative Lösungen über Backtracking. Reihenfolge der Suchraumtraversierung: top-down depth-first left-to-right. 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie Anfragen Anfragen werden als zu beweisende Behauptungen interpretiert. Der Beweis kann nur über entsprechende Klauseln in der Prolog-Datenbasis erbracht werden. ?- sterblich(X). Es gibt ein X mit der Eigenschaft sterblich. 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie Head-Matching Ein Prädikat aus einer Anfrage muß mit dem Kopf einer Klausel unifizierbar sein. ?- sterblich(sokrates). sterblich(X):- mensch(X).  = {X=sokrates} 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie Top-Down-Verfahren Das Head-Matching wird im top-down-Verfahren durchgeführt. Der Interpreter durchsucht die Datenbasis von oben nach unten, um passende Klauseln für einen Beweis zu finden. vorfahr(X,Y):- et(X,Y). vorfahr(X,Y):- et(X,Z), vorfahr(Z,Y). 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie Lokale Variablen Variablen sind in Prolog immer lokale Variablen, d.h. Variablenidentität gleichnamiger Variablen existiert nur innerhalb einer Klausel. Unifikation ermöglicht Variablenidentität über Klauselgrenzen hinweg. 15.11.99 GK Prolog - Listen, Beweisstrategie

Beweis von Regeln: left-to-right Regelrümpfe werden von links nach rechts bewiesen (left-to-right). Erst wenn ein Beweis für das i-te Prädikat im Rumpf gefunden ist, kann das i+1-te Prädikat bewiesen werden. P0:- P1, ..., Pi, Pi+1, ..., Pn 15.11.99 GK Prolog - Listen, Beweisstrategie

Backtracking: depth-first Backtracking kann durch zwei Ursachen ausgelöst werden: Eine alternative Lösung soll berechnet werden. Der aktuelle Beweis ist in einer Sackgasse. In jedem Fall geht der Interpreter zur letzten Verzweigung im Beweisbaum zurück, an der noch Alternativen offen waren (depth-first). 15.11.99 GK Prolog - Listen, Beweisstrategie

Backtracking Beispiel oma(X,Y):- et(X,Z), %1. et(Z,Y). %2. et(anna,maria). et(maria,ilse). et(maria,petra). et(petra,ulla). ?- oma(X,Y). X = anna Y = ilse ->; Y = petra ->; X = maria Y = ulla ->; no Die Alternativen des zweiten et/2 im Rumpf von oma/2 werden vor den Alternativen des ersten et/2 berechnet. 15.11.99 GK Prolog - Listen, Beweisstrategie

Suchraum-Traversierung oma(X,Y) 1 3 et(X,Z) et(Z,Y) 2 4 et(anna,maria) et(anna,maria) et(maria,ilse) et(maria,ilse) et(maria,petra) et(maria,petra) et(petra,ulla) et(petra,ulla) 15.11.99 GK Prolog - Listen, Beweisstrategie

Alternative Verfahren top-down bottom-up, left-corner depth-first breadth-first, best-first left-to-right right-to-left, Zufallsauswahl 15.11.99 GK Prolog - Listen, Beweisstrategie

Ablaufprotokoll (Trace) Der Prolog-Interpreter verwendet ein Ablaufprotokoll, das 4 Typen von Beweisschritten unterscheidet: CALL Anfrage, neuer Schritt REDO Backtracking, alternativer Schritt EXIT Beweisschritt gelungen FAIL Beweischritt gescheitert 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie Trace von member/2 (0) CALL: member(1,[1,2,1,3]) (0) EXIT(N): member(1,[1,2,1,3]) Backtracking (0) REDO: member(1,[1,2,1,3]) (1) CALL: member(1,[2,1,3]) (2) CALL: member(1,[1,3]) (2) EXIT(N): member(1,[1,3]) (1) EXIT(N): member(1,[2,1,3]) (0) REDO: member(1,[1,2,1,3]) (1) REDO: member(1,[2,1,3]) (2) REDO: member(1,[1,3]) (3) CALL: member(1,[3]) (4) CALL: member(1,[]) (4) FAIL: member(1,[]) (3) FAIL: member(1,[3]) (2) FAIL: member(1,[1,3]) (1) FAIL: member(1,[2,1,3]) (0) FAIL: member(1,[1,2,1,3]) No more solutions. EXIT(N) steht für „nondeterministic exit“, d.h. es gibt noch nicht besuchte Verzweigungen im Suchraum. 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie Debugger Das Ablaufprotokoll des Interpreters kann mit dem Debugger angesehen werden. ?- trace. Debugger einschalten. ?- notrace. Debugger ausschalten. Bei eingeschaltetem Debugger wird nach jeder Anfrage das Debugger-Fenster eingeblendet. 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie Deklarativ? Die Beweisstrategie des Prolog-Interpreters liefert eine prozedurale Interpretation von Prolog-Programmen, da Beweise Schritt für Schritt betrachtet werden. Trotzdem lohnt sich in der Regel eine deklarative Perspektive auf Prolog-Programme, bei der vom Beweisverfahren abstrahiert wird. 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie member/2 deklarativ Logisch/deklarative Perspektive auf member/2. Wenn der Term X in der Liste ist, dann ist er entweder im Kopf der Liste, oder er ist im Rest der Liste. member(X,[X|_]). member(X,[_|T]):- member(X,T). 15.11.99 GK Prolog - Listen, Beweisstrategie

GK Prolog - Listen, Beweisstrategie Deklarativ ist besser. Die deklarative Logik von member/2 erfaßt ver-schiedene Fälle, für die in prozedurealen Sprachen separate Prozeduren geschrieben werden müßten. ?- member(1,[1,2,3]). Ist 1 in Liste [1,2,3]? ?- member(1,L). In welchen Listen ist 1? ?- member(X,[1,2,3]). Welche X sind in [1,2,3]? ?- member(X,L). In welchen Listen ist X? 15.11.99 GK Prolog - Listen, Beweisstrategie