Cut, Negation, Manipulation der Datenbasis

Slides:



Advertisements
Ähnliche Präsentationen
Wurzelziehen ist das Gegenteil von quadrieren.. Beim Quadrieren berechnet man den Flächeninhalt eines Quadrats mit einer gegebenen Seitenlänge.
Advertisements

Programmieren in Logik
Deduktive Datenbanken
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
6. Regelbasierte Systeme
Programmierung II Prof. Dr. Michael Löwe
2. Programmstruktur – Teil 2
Programmieren in Logik
Listen [mia, vincent, jules, yolanda] [mia, robber(honey_bunny), X, 2, mia] [] [mia, [vincent, jules], [butch, girlfriend(butch)]] [[], dead(zed), [2,
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
Maschinelle Übersetzung I
Prolog und Prädikatenlogik I
Java: Dynamische Datentypen
FH-Hof Effizienz - Grundlagen Richard Göbel. FH-Hof Inhalt Einführung Aufwand für Anfragen ohne Indexierung Indexstrukturen für Anfragen an eine Tabelle.
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
FH-Hof Optimierungsverfahren für kombinatorische Probleme Richard Göbel.
Java: Referenzen und Zeichenketten
Logische Programmierung: Prolog
Dateihandles Um in Perl eine bestimmte Datei zum Lesen, Schreiben oder Anhängen zu öffnen, benötigt man so genannte Dateihandles. Ein Dateihandle ist der.
Thomas Kloecker Betreuer: Tim Priesnitz
Algorithmentheorie 04 –Hashing
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
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
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
PROLOG Die Rose ist rot. Die Tulpe ist gelb. Die Nelke ist weiss.
Zusammenfassung Vorwoche
1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen und Komplexität Einführung in Berechenbarkeit, Formale Sprachen und Komplexitätstheorie Wintersemester.
Günter Kniesel Advanced Prolog. 2 Bisher: Grundlagen Klauseln –Regeln –Fakten Terme –Die einzige Datenstruktur in Prolog –Listen als Sonderfall mit eigener.
Machine Learning Decision Trees (2).
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Effiziente Algorithmen
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.
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Effiziente Algorithmen
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
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 Programmiersprache C 4
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
CGI (Common Gateway Interface)
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
Torque in Turbine Team 4 Josef Bohninger Thomas Lindenhofer
Christian Schindelhauer Wintersemester 2006/07 6. Vorlesung
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Das Traveling Salesman Problem (TSP)
1 Tagesüberblick 6 Lösung Hausaufgabe/Fragen Weitere besondere Variablen Hier-Dokument Unterprogramme.
11. Wissenbasis und Regelsysteme Sebastian Linek.
Der A*-Algorithmus.
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Reihenfolge der Operatoren
Dr. Wolfram Amme, Grundsätze der Logikprogrammierung, Informatik II, FSU Jena, SS Grundsätze der Logikprogrammierung.
Tutorium Software-Engineering SS14 Florian Manghofer.
Prolog-Kurs SomSem 2017 Daniel Beßler/Hagen Langer
Vorlesung #5 SQL (Teil 2).
Prolog-Kurs SomSem 2017 Daniel Beßler/Hagen Langer
 Präsentation transkript:

Cut, Negation, Manipulation der Datenbasis Prolog Grundkurs WS 08/09 Christof Rumpf rumpf@uni-duesseldorf.de 15.01.09 GK Prolog - Cut, Negation, Datenbasis

GK Prolog - Cut, Negation, Datenbasis Der Cut Der Cut „!“ ist ein eingebautes Prädikat, mit dem Backtracking kontrolliert werden kann. Der Cut kann folgendes bewirken: Effizienzsteigerung Speichereinsparung Kürzere Programme 15.01.09 GK Prolog - Cut, Negation, Datenbasis

GK Prolog - Cut, Negation, Datenbasis Wirkungsweise des Cut Der Cut wird im Rumpf von Regeln eingesetzt und verhindert Backtracking. Der Top-Down-Beweis des Cut gelingt immer. Gelangt der Interpreter beim Backtracking zurück zu einem Cut, scheitert der Beweis des Prädikats im Kopf der Regel endgültig - ungeachtet weiterer Backtrackingmöglichkeiten vor dem Cut bzw durch nachfolgende Klauseln. 15.01.09 GK Prolog - Cut, Negation, Datenbasis

GK Prolog - Cut, Negation, Datenbasis Generelles Beispiel A1:- ... . ... Aj:- B1,...,Bi-1,!,Bi+1,..., Bn. Am:- ... . Das Prädikat A ist durch m Klauseln definiert. Ein Beweis des Cut in Aj beschränkt Backtracking auf den blau umrahmten Bereich. 15.01.09 GK Prolog - Cut, Negation, Datenbasis

GK Prolog - Cut, Negation, Datenbasis max/3 mit und ohne Cut % ohne Cut max(X,Y,X):- X >= Y. max(X,Y,Y):- X < Y. % mit Cut max(X,Y,X):- X >= Y, !. max(X,Y,Y). Die Lösung mit Cut macht den Test X < Y für die zweite Klausel überflüssig und verleiht der zweiten Klausel Default-Charakter: Y ist immer das Maximum, außer wenn X größer oder gleich Y ist. 15.01.09 GK Prolog - Cut, Negation, Datenbasis

GK Prolog - Cut, Negation, Datenbasis ifthenelse/3 % ohne Cut ifthenelse(B,P,Q):- call(B), call(P). call(not(B)), call(Q). % mit Cut ifthenelse(B,P,Q):- call(B), !, call(P). ifthenelse(B,P,Q):- call(Q). Der Cut macht die nochmalige Prüfung der Bedingung B in der zweiten Klausel überflüssig. 15.01.09 GK Prolog - Cut, Negation, Datenbasis

GK Prolog - Cut, Negation, Datenbasis Rote und grüne Cuts In der Literatur wird oft zwischen roten und grünen Cuts unterschieden. Ein grüner Cut kann aus einem Programm entfernt werden, ohne daß sich die Bedeutung des Programms ändert. Ein roter Cut kann nicht aus einem Programm entfernt werden, ohne daß sich die Bedeutung des Programms ändert. 15.01.09 GK Prolog - Cut, Negation, Datenbasis

max/3 mit grünen und roten Cuts % grüne Cuts max(X,Y,X):- X >= Y, !. max(X,Y,Y):- X < Y, !. % roter Cut max(X,Y,X):- X >= Y, !. max(X,Y,Y). Die grünen Cuts könnten genausogut weggelassen werden. 15.01.09 GK Prolog - Cut, Negation, Datenbasis

Ist es ein roter oder grüner Cut? Die Entscheidung ist nicht immer trivial. Beispiel: append([],L,L):- !. append([H|T1],L,[H|T2]):- append(T1,L,T2). Bei einer Anfrage ?- append([1,2],[3,4],L). liefert append/3 mit Cut korrekt L=[1,2,3,4]. Bei einer Anfrage ?- append(X,Y,[1,2,3,4]). bekommen wir allerdings nur noch (deterministisch) die Lösung X=[] und Y=[1,2,3,4] . 15.01.09 GK Prolog - Cut, Negation, Datenbasis

Die Schattenseite des Cut Der Cut zertört die Deklarativität von Prolog-Programmen. Die Interpretation einer Prädikatsdefinition mit roten Cuts ist i.d.R. nur noch unter Berücksichtigung der Reihenfolge der Beweisschritte möglich. Deshalb: Cut nur einsetzen, wenn ein offensichtlicher Vorteil erzielt werden kann. 15.01.09 GK Prolog - Cut, Negation, Datenbasis

Verwendungsweisen des Cut Die Verwendung des Cuts kann je nach Anwendungsfall verschieden charakterisiert werden: Beschneiden des Suchraums. Erzwingen von Determinismus. Modellierung von Defaults. Modellierung von Negation. 15.01.09 GK Prolog - Cut, Negation, Datenbasis

GK Prolog - Cut, Negation, Datenbasis Negation wird in Prolog mit Hilfe einer Cut-Fail-Kombination realisiert und zur Unterscheidung von der Negation z.B. in der Prädikatenlogik „Negation als Scheitern“ bzw „negation as failure“ genannt. Hier die Definition des eingebauten Prädikats not/1: not(G):- call(G), !, fail. not(G). 15.01.09 GK Prolog - Cut, Negation, Datenbasis

Probleme mit der Negation Negation als Scheitern ist nur dann mit Sicherheit deklarativ, wenn in dem negierten Beweisziel beim Aufruf keine Variablen enthalten sind. ledigerStudent(X):- not verheiratet(X), student(X). student(peter). verheiratet(klaus). ?- ledigerStudent(peter). yes ?- ledigerStudent(X). no 15.01.09 GK Prolog - Cut, Negation, Datenbasis

GK Prolog - Cut, Negation, Datenbasis Anwendung: Defaults Cut-Fail-Version (schlecht) Version mit Negation (ok) can_fly(X):- penguin(X), !, fail. can_fly(X):- bird(X). bird(X):- penguin(X). bird(X):- eagle(X). penguin(tweety). eagle(klaus). can_fly(X):- bird(X), not penguin(X). bird(X):- penguin(X). bird(X):- eagle(X). penguin(tweety). eagle(klaus). 15.01.09 GK Prolog - Cut, Negation, Datenbasis

Manipulation der Datenbasis Prolog stellt eine Reihe von Prädikaten zur Verfügung, die eine Manipulation der Datenbasis während der Laufzeit eines Programms ermöglichen. assert/1 retract/1 clause/2 ... 15.01.09 GK Prolog - Cut, Negation, Datenbasis

Erweitern der Datenbasis assert(Clause) fügt eine Klausel am Ende der Datenbasis hinzu. asserta(Clause) fügt eine Klausel am Anfang der Datenbasis hinzu. Beispiel: ?- assert((sterblich(X):-mensch(X))). yes. 15.01.09 GK Prolog - Cut, Negation, Datenbasis

Anwendung: Memo-Funktion Memo-Funktionen dienen zur Speicherung von berechneten Ergebnissen, um eine erneute Berechnung zu vermeiden. lemma(G):- call(G), asserta((G:- !)). ?- lemma(vorfahr(X,Y)), fail. Die Anfrage berechnet die Vorfahr-Relation vollständig und schreibt die Ergebnisse mit asserta/1 in die Datenbasis. 15.01.09 GK Prolog - Cut, Negation, Datenbasis

Löschen in der Datenbasis retract(+Clause) entfernt die erste Klausel aus der Datenbasis, die mit Clause unifiziert. ?- retract(mensch(X)). X = sokrates ->; X = aristoteles ->; no ?- retract((sterblich(_):- mensch(_))). yes 15.01.09 GK Prolog - Cut, Negation, Datenbasis

Anwendung: Kopieren von Termen copy_term(Term1,Term2) erstellt in Term2 eine Kopie von Term1 mit neuen Variablen. copy_term(T1,T2):- assert( ´TMP´(T1)), retract(´TMP´(T2)). ?- copy_term(rel(A,A,B),Copy). Copy = rel(C,C,D), yes 15.01.09 GK Prolog - Cut, Negation, Datenbasis

GK Prolog - Cut, Negation, Datenbasis Zugriff auf Klauseln clause(Head,Body) erlaubt einen Zugriff auf Klauseln. Head muß beim Aufruf instantiiert sein. Body hat bei Fakten die Instanz true. ?-clause(sterblich(_),T). T = mensch(X) ->; ... 15.01.09 GK Prolog - Cut, Negation, Datenbasis

Löschen einer Prädikatsdefinition retractall(H):- % Regeln clause(H,B), retract((H:-B)), fail. retractall(H):- % Fakten retract(H), fail. retractall(_). ?- retractall(vorfahr(_,_)). yes 15.01.09 GK Prolog - Cut, Negation, Datenbasis

GK Prolog - Cut, Negation, Datenbasis name/2 name(Atom,List) wandelt ein Atom in eine Liste von ASCII-Symbolen um und umgekehrt. ?- name(sokrates,L). L = [115,111,107,114,97,116,101,115] yes ?- name(A,[115,111,107,114,97,116,101,115]). A = sokrates 15.01.09 GK Prolog - Cut, Negation, Datenbasis

Anwendung: Erzeugen neuer Atome gensym(Root,Symbol) erzeugt bei jedem Auruf ein neues Atom Symbol, indem an eine spezifizierbare Wurzel Root eine fortlaufende Zahl angehängt wird. ?- gensym(x, S). S = x0, yes S = x1, yes Definition 15.01.09 GK Prolog - Cut, Negation, Datenbasis

GK Prolog - Cut, Negation, Datenbasis gensym/2 gensym(Root,Symbol):- symbol(Root,Nr), name(Root,RootL), name(Nr,NrL), append(RootL,NrL,SymbolL), name(Symbol,SymbolL). symbol(Root,Nr):- retract(symb(Root,ONr)),!,Nr is ONr+1, assert(symb(Root,Nr)). symbol(Root,0):- assert(symb(Root,0)). 15.01.09 GK Prolog - Cut, Negation, Datenbasis