Prolog-Kurs SomSem 2017 Daniel Beßler/Hagen Langer

Slides:



Advertisements
Ähnliche Präsentationen
Abschlussprüfung an Realschulen
Advertisements

Programmieren in Logik
Resolution und Prädikatenlogik erster Stufe
Algorithmen für das Erfüllbarkeitsproblem SAT
Deduktive Datenbanken
Einführung in Prolog Copyright © 1999 by Michael Neumann
Kapitel 1 Der Boolesche Kalkül
6. Regelbasierte Systeme
Domänenwissen: Wissen über das Anwendungsgebiet
Schwierigkeit von Aufgabenstellungen
Kapitel 6: Logikorientierte Anfragesprachen
2. Programmstruktur – Teil 2
4. Logik – und ihre Bedeutung für WBS
5. Aussagenlogik und Schaltalgebra
Organisatorisches Klausur für Übungsschein (Anfang Januar)
Planares 3 SAT ist NP-vollständig
Syntax der Aussagenlogik
Verifizieren versus Berechnen
Algorithmen und Komplexität
Training IT-Grundlagen Interaktive Web-Seiten (HTML-Forms, CGI, Servlets) - Prof. Dr. Böttcher - S. cgi/ 1 Prolog als Datenbanksprache.
1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen und Komplexität Einführung in Berechenbarkeit, Formale Sprachen und Komplexitätstheorie Wintersemester.
Christian Schindelhauer
Teil 7 Grundlagen Logik.
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.
1 Computergestützte Verifikation SAT-basiertes Model Checking Ansatz: Übersetze das Model Checking Problem in ein aussagenlogisches Erfüllbarkeitsproblem.
Logikbasierte Agenten
Syntax von Prolog & Familiendatenbasis
Fakten, Regeln und Anfragen
PROLOG Die Rose ist rot. Die Tulpe ist gelb. Die Nelke ist weiss.
Günter Kniesel Advanced Prolog. 2 Bisher: Grundlagen Klauseln –Regeln –Fakten Terme –Die einzige Datenstruktur in Prolog –Listen als Sonderfall mit eigener.
§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.
Handlungsplanung und Allgemeines Spiel „Instanziierung Allgemeiner Spiele“ Peter Kissmann.
Beweiser für quantifizierte Boolesche Ausdrücke - QUAFFLE
SAT-Engines Seminar WS 2000/2001
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Eine Einführung in Prolog und die logische Programmierung
Wissensbasierte Systeme JESS Java Expert System Shell.
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Hartmut Klauck Universität Frankfurt WS 06/
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Resolution-based theorem proving (first-order logic) Otter / Prover9.
Einführung in PROLOG StD G. Noll f ( x ) f ( ) g ( ) g ( x ) barbara
Informatik III Christian Schindelhauer Wintersemester 2006/07
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.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Arne Vater Wintersemester 2006/07 26.
Integritätserhaltung und -Überprüfung in deduktiven Datenbanken
Algorithmen für das Erfüllbarkeitsproblem SAT
Aussagenlogik G. Laner 03/04
11. Wissenbasis und Regelsysteme Sebastian Linek.
Einführung in die logische Programmierung mit PROLOG
Tupelkalkül: Notation (1)
Kapitel 4: Aussagen-, Prädikatenlogik
© 2004 Pohlig Informatik Kurse © 2004 Pohlig Informatik Kurse Der Tramp tanzt die Rekursion zünderUntersuchen(…) Basisfall Rückmeldung:
Technische Informatik I Vorlesung 4: Vereinfachung von Schaltfunktionen Mirco Hilbert Universität Bielefeld Technische Fakultät.
Folie 1 §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.
Anbindung eines Ontologie- basiertes Risikomanagement- systems an eine XML-Datenbank Datenbankseminar am Lehrstuhl für Praktische Informatik III Vortrag.
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.
§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.
Prolog-Kurs SomSem 2017 Daniel Beßler/Hagen Langer
Prolog-Kurs SomSem 2017 Daniel Beßler/Hagen Langer
Datentypen: integer, char, string, boolean
Logik in der Informatik II
4. Logik – und ihre Bedeutung für WBS
Substitution bei Nullstellen
 Präsentation transkript:

Prolog-Kurs SomSem 2017 Daniel Beßler/Hagen Langer Prolog – erste Schritte 11.4.2017

Plan der Veranstaltung (1) Grundlagen der Prädikatenlogik (optional und Umfang je nach vorhandenen Vorkenntnissen) Prolog-Einführung Fakten und Regeln Rekursive Definitionen ‚Pure Prolog‘ und prozedurale Erweiterungen Spezielle Programmiertechniken (Differenzlisten etc.) Warren Abstract Machine (WAM)

Prolog-Interpreter http://www.swi-prolog.org/ Wissenbasis mit Prolog als Anfragesprache: http://www.open-ease.org/

Rückblick: Syntax FOL Variablensymbole Prädikatensymbole x, y, z, ... bzw. xi mit i=1,2, ... Prädikatensymbole P, Q, R, ... bzw. Pik, i=1,2, ... k Funktionssymbole f, g, h oder bzw. fik, i=1,2, ... mit Stelligkeit k Funktionssymbole mit Stelligkeit 0 sind Konstanten

Konjunktive Normalform Ein Literal ist eine atomare Formel oder die Negation einer atomaren Formel z.B. A, ¬A oder generell (L1, ¬L2) Eine Klausel ist eine Disjunktion von Literalen z.B. (A  B  D), (A  ¬ B  ¬ D) , einzelne Literale sind ebenfalls Klauseln Eine Formel  ist in konjunktiver Normalform (KNF, engl. CNF) wenn sie eine Konjunktion von Klauseln ist  = (C1 ...  Cn) Konjunktion von Klauseln Ci = ( L1i  ...  L1ki) Disjunktion von Literalen

KNF (2) Theorem Transformation in KNF Zu jeder Formel  existiert eine Formel  in KNF mit    Transformation in KNF Negationen in die Klammern ziehen: Doppelte Negation, de Morgan Disjunktionen in die Klammern ziehen: Distributivität (Kommutativität)

KNF aus der Wahrheitstafel Jede Belegung, die kein Modell ist, entspricht einer Klausel Klausel Negation der Belegungen, die keine Modelle sind, z.B. ¬ (¬ A  ¬ B  C)  ( A  B  ¬ C) A B C  1 A  B  ¬ C 1 A  ¬ B  C 1 A  ¬ B  ¬ C 1 1 1 1 1 1 1 ¬A  ¬B  C 1 1 ¬A  ¬B  ¬C 1 1 1 KNF() = (A  B  ¬ C)  ... (¬A  ¬B  ¬C )

Horn-Formeln Definition Beispiel Eine Formel in KNF ist eine Horn-Formel, wenn jede Klausel höchstens ein positives Literal enthält Beispiel Horn-Formel (A  ¬B)  (¬A  ¬C  D)  D  ¬E Anschaulicher: (B  A)  (A  C  D)  (1  D)  (E  0) 0 für beliebige unerfüllbare Formel 1 für beliebige Tautologie

Fakten und Regeln: A (Fakt)‏ (A1  A2   An  D) (Regel)‏ D :- A1  A2 ,  An . head, neck, body

Notationskonventionen: Atome: a, b, a1, 'Hier ist alles erlaubt', ... Variablen: A, Abc, _, _3248, ... - “anonyme Variable”: _ Fakten: a(b,c), a(b), - N.B.: a/2 ist verschieden von a/1! b, b(b(c)), ...

Standardbeispiel Verwandtschaftsbeziehungen: /* Exemplarische Prolog-Wissensbasis */ kind_von(klaus, maria). % klaus ist kind von maria usw. kind_von(klaus, martin). weiblich(maria). männlich(klaus). männlich(martin).

Anfragen an eine Wissensbasis kind_von(klaus, maria). kind_von(klaus, martin). weiblich(maria). männlich(klaus). männlich(martin). ?- kind_von(X, Y). X = klaus, Y = maria; X = klaus, Y = martin; no 12

Anfragen an eine Wissensbasis kind_von(klaus, maria). kind_von(klaus, martin). weiblich(maria). männlich(klaus). männlich(martin). mutter(X) :- weiblich(X), kind_von(Y,X). ?-mutter(X). 13

Anfragen an eine Wissensbasis kind_von(klaus, maria). kind_von(klaus, martin). weiblich(maria). männlich(klaus). männlich(martin). mutter(X) :- weiblich(X), kind_von(Y,X). ?-mutter(X). weiblich(X) kind_von(Y,X)‏ X = maria 14

Anfragen an eine Wissensbasis kind_von(klaus, maria). kind_von(klaus, martin). weiblich(maria). männlich(klaus). männlich(martin). mutter(X) :- weiblich(X), kind_von(Y,X). ?-mutter(X). weiblich(X) kind_von(Y,X)‏ X = maria kind_von(Y,maria)‏ 15

Anfragen an eine Wissensbasis kind_von(klaus, maria). kind_von(klaus, martin). weiblich(maria). männlich(klaus). männlich(martin). mutter(X) :- weiblich(X), kind_von(Y,X). ?-mutter(X). weiblich(X) kind_von(Y,X)‏ X = maria kind_von(Y,maria)‏ kind_von(klaus, maria)‏ 16

Rekursive Regeln ?- kind_von(klaus, maria). kind_von(klaus, martin). kind_von(martin, ludwig). vorfahr(X,Y) :- kind(Y,X). kind_von(Y,Z), vorfahr(X,Z). ?- 17

Rekursive Regeln ?- vorfahr(ludwig,klaus). kind_von(klaus, maria). kind_von(klaus, martin). kind_von(martin, ludwig). vorfahr(X,Y) :- kind_von(Y,X). kind_von(Y,Z), vorfahr(X,Z). ?- vorfahr(ludwig,klaus). 18

Rekursive Regeln ?- vorfahr(ludwig,klaus). kind_von(klaus, ludwig)‏ kind_von(klaus, maria). kind_von(klaus, martin). kind_von(martin, ludwig). vorfahr(X,Y) :- kind_von(Y,X). kind_von(Y,Z), vorfahr(X,Z). ?- vorfahr(ludwig,klaus). kind_von(klaus, ludwig)‏ fail 19

Rekursive Regeln ?- vorfahr(ludwig,klaus). kind_von(klaus, ludwig)‏ kind_von(klaus, maria). kind_von(klaus, martin). kind_von(martin, ludwig). vorfahr(X,Y) :- kind_von(Y,X). kind_von(Y,Z), vorfahr(X,Z). ?- vorfahr(ludwig,klaus). kind_von(klaus, ludwig)‏ fail kind_von(klaus,Z) vorfahr(ludwig,Z)‏ Z = maria ... fail Z = martin vorfahr(ludwig, martin)‏ 20

list([X|R]) :- list(R). Listen: [a,b,c], [], [a,X,c], [a|X] [[a],b] list([]). list([X|R]) :- list(R). 21

Listen: ?- member(a,[a,b,c]). yes ?- member(X,[a,b,c]). X = a; ... ?- member(d,[a,b,c]). no ?- member(X,[]). 22

Listen: member(X,[X|R]). member(X,[Y|R]) :- member(X,R). 23

?- append([a],[b,c],[a,b,c,d]). no Listen: ?- append([a,b],[c,d],X). X = [a,b,c,d] ?- append([a],[b,c],[a,b,c,d]). no 24

?- append([a],[b,c],[a,b,c,d]). no Listen: ?- append([a,b],[c,d],X). X = [a,b,c,d] ?- append([a],[b,c],[a,b,c,d]). no append([],X,X). append([X|R],Y,[X|R2]) :- append(R,Y,R2). 25

Manipulation der Wissensbasis in Prolog Einfügen von Fakten oder Regeln in die aktuelle Wissensbasis assert, asserta, assertz Beispiel: ?- weiblich(anne). no ?- assert(weiblich(anne)). yes 26

Manipulation der Wissensbasis in Prolog (2)‏ Entfernen von Fakten oder Regeln aus der aktuellen Wissensbasis retract, retractall Beispiel: ?- weiblich(anne). yes ?- retract(weiblich(anne)). no 27

Manipulation der Wissensbasis in Prolog (3)‏ Enfernen von Fakten oder Regeln aus der aktuellen Wissensbasis retract, retractall Beispiel: ?- assert(weiblich(anne)), assert(weiblich(berta)). yes ?- retractall(weiblich(_)). ?- weiblich(anne). no 28

Manipulation der Wissensbasis in Prolog (4)‏ Laden eines Prolog-Programms (implementationsspezifisch)‏ ?- consult(family). - lädt family.pl ohne Überschreiben yes ?- [family]. - dto. ?- reconsult(family). - lädt family.pl mit Überschreiben ?- listing. - schreibt Wissensbasis 29

Weitere wichtige Builtin-Prädikate ?- halt. - beendet Prolog-Session ?- trace. - Startet Trace-Modus (Debugging)‏ yes ?- notrace. - Beendet Trace-Modus debug, nodebug 30