Logische Programmierung

Ähnliche Dokumente
1. Grundkonzepte der logischen Programmierung 2. Syntax von Prolog 3. Rechnen in Prolog. IV.1 Grundkonzepte der logischen Programmierung - 1 -

3. Exkurs in weitere Arten der Programmierung

Logik und Beweisbarkeit

Sudoku. Warum 6? Warum 6?

Motivation und Geschichte. Geschichte der Logik Logik und Informatik

Logische Programmierung

Logische Grundlagen der Mathematik, WS 2014/15

Motivation und Geschichte. Geschichte der Logik Logik und Informatik

Einführung in PROLOG. Christian Stocker

Künstliche Intelligenz Einführung in Prolog

DataLog. Datenbank-Programmiersprache für deduktive Datenbanken. Proseminar Programmierparadigmen und Sprachen. Nico Braunisch

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

Informatik A. Prof. Dr. Norbert Fuhr auf Basis des Skripts von Prof. Dr. Wolfram Luther und der Folien von Peter Fankhauser

Path Finding with Prolog. AAI Projekt Thien-An Bui und Marlene Wittwer FHNW Brugg-Windisch, HS 2014

Fragen zum Nachdenken: Wie könnte man das Fehlen eines Attribut-Wertes interpretieren?

Anwendungen der Logik: Deklarative bzw. Logik-Programmierung in PROLOG

Proseminar Programmiersprachen. Prolog. Johannes Weißl. TU München. 15. November 2006

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

Logik in der Informatik

Kurt Gödel und die Grundlagen der Mathematik

Programmierung Paradigmen und Konzepte

Logische und funktionale Programmierung

5 Logische Programmierung

Logische Programmierung

Berechenbarkeit, Beweisbarkeit. Geschichte

Übersicht. Prädikatenlogik höherer Stufe. Syntax der Prädikatenlogik 1. Stufe (mit Gleichheit)

Seminar Künstliche Intelligenz Wintersemester 2013/14

Formale Systeme. Übung: Reinhard Hemmerling Büsgenweg 4, Raum 89 (1. Stock) rhemmer<at>gwdg.de

Multiparadigmen- Programmiersprachen

Einführung in Prolog. Literatur

1 Funktionale vs. Imperative Programmierung

Formale Logik. PD Dr. Markus Junker Abteilung für Mathematische Logik Universität Freiburg. Wintersemester 16/17 Sitzung vom 7.

Einführung in PROLOG

Theorembeweiser und ihre Anwendungen

Prolog 1. Kapitel: Fakten, Regeln und Anfragen

Prolog 1. Kapitel: Fakten, Regeln und Anfragen

Künstliche Intelligenz

Vorlesung Programmierung

Klassische Aussagenlogik

Tiramisu Deklarativ Aus Eigelb, Mascarpone und in Likör und Kaffee getränkten Biskuits hergestellte cremige Süßspeise

Prolog Tutorial Norbert E. Fuchs Institut für Informatik Universität Zürich

Formale Systeme. Aussagenlogik: Sequenzenkalkül. Prof. Dr. Bernhard Beckert WS 2010/2011 KIT INSTITUT FÜR THEORETISCHE INFORMATIK

Programmieren in Haskell Einführung

Vorkurs Mathematik für Informatiker 5 Logik, Teil 1

Künstliche Intelligenz Hornklauseln & Prolog

Reihenfolge von Klauseln

Prolog 3. Kapitel: Rekursion

Bestandteile von Prolog-Programmen. Syntax und Datenstrukturen. Legende Syntaxdiagramme. Lesen von Syntaxdiagrammen. Ein Programm besteht aus

Prolog 3. Kapitel: Rekursion

Woher Methoden der KI stammen Gebiete der Künstlichen Intelligenz wissensbasierte Systeme

SWP Logische Programme

Answer Set Programming

1. Grundlagen. Gliederung 1.1 Was ist Analysis? 1.2 Aussagen und Mengen 1.3 Natürliche Zahlen 1.4 Ganze Zahlen, rationale Zahlen

Mathematik für Informatiker I

1. Grundlagen. 1.1 Was ist Analysis? 1.2 Aussagen und Mengen

b. Lehre des vernünftigen Schlussfolgerns (1. System von Regeln von Aristoteles ( v. Chr.); sprachliche Argumente

Vorlesung Programmierung

Vorsemesterkurs Informatik

Vorlesung Programmierung

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

Herzlich Willkommen zur Vorlesung Einführung in die Logik I (*)

Prolog. Vertiefungsmodul Programmiersprachen. VM Programmiersprachen - Prolog. Florian Kleene

Grundlagen von Datenbanken

Abschnitt 11: Korrektheit von imperativen Programmen

Grundlagen von Datenbanken

Aussagenlogische Kalküle

Künstliche Intelligenz für Ingenieure

Entwicklung und Einsatz von Expertensystemen

Unentscheidbarkeitssätze der Logik

Vorlesung Logik Wintersemester 2017/18 Universität Duisburg-Essen

Fakten, Regeln und Anfragen

1.3 Geschichte der Programmiersprachen

Die Church-Turing-These

Program = Logic + Control

Formale Logik. PD Dr. Markus Junker Abteilung für Mathematische Logik Universität Freiburg. Wintersemester 16/17 Sitzung vom 19.

Grundbegriffe aus Logik und Mengenlehre. Prädikatenlogik

Übersicht Formale Semantik. Übersicht Axiomatische Semantik. Inhaltsübersicht HPS WS 2003/04. Vorlesung Höhere Programmiersprachen,

Grundlagen von C# - 1

(Logik und) Logikprogrammierung

Verifizierende Testverfahren

Transkript:

Logische Programmierung Einleitung Elmar Eder () 1 / 27

Verschiedene Paradigmen der Programmierung Imperative Programmierung Einfache imperative Programmierung Prozedurale Programmierung Objektorientierte Programmierung Deklarative Programmierung Logische Programmierung Funktionale Programmierung () 2 / 27

Unterschiede Imperative Programmierung Befehls/Prozedur-Aufruf verändert Zustand. Seiteneffekt Ergebnis eines Aufrufs hängt vom momentanen Zustand ab. Zweimaliger Aufruf kann verschiedene Ergebnisse liefern. x = x+1; x = x+1; Deklarative Programmierung Keine Seiteneffekte Mathematische Beschreibung durch Prädikate (= Relationen) Funktionen (Logische Programmierung) (Funktionale Programmierung) Ein Prädikats-/Funktions-Aufruf liefert immer dasselbe Ergebnis unabhängig vom momentanen Zustand der Maschine Programm leichter zu verstehen Korrektheit leichter zu zeigen () 3 / 27

Logische Programmiersprachen Prolog (älteste, einfachste und verbreitetste) Erweiterungen und Multi-Paradigmen-Sprachen: Mercury Gödel Oz constraint logic programming concurrent logic programming higher order logic programming... () 4 / 27

Geschichte Mathematische Logik Aristoteles 4.Jh. vor Chr. Gottfried Wilhelm Leibniz 17.Jh. Entscheidungsproblem Gottlob Frege 1879 Begriffsschrift Bertrand Russell 1902: Begriffsschrift widersprüchlich Russell, Whitehead 1910 1913 Principia Mathematica David Hilbert Gerhard Gentzen 1934 Sequenzenkalkül, Schnittelimination Kurt Gödel 1930 Vollständigkeitssatz Kurt Gödel 1931 Unvollständigkeitssatz, Unentscheidbarkeit () 5 / 27

Geschichte Automatisches Beweisen Robinson 1965 Resolutionskalkül Prolog Programmation en Logique Programmieren in Logik Anfang der 70er Jahre: Colmerauer Warren s Abstract Machine 1983 () 6 / 27

Prolog: Einige der Einsatzgebiete Künstliche Intelligenz Automatisches logisches Schließen Expertensysteme, regelbasierte Systeme Datenbanken Automatische Programmsynthese, Programmverifikation Problemlösungs- und Planungssysteme Roboter Entwurfsysteme Sprachverarbeitung, Sprachverstehen, Übersetzen Rapid Prototyping Symbolisches Rechnen, Computeralgebra Computerspiele Web-Anwendungen () 7 / 27

Was ist logische Programmierung? Dinge, die beschrieben werden Objekte (Individuen, Gegenstände) Prädikate (Relationen, Beziehungen) zwischen Objekten Programmierung Logisches Programm logische Beschreibung eines Teils der Welt Anfragen an das System System der logischen Programmierung Ein automatischer Theorembeweiser soll beweisen, dass die Aussage der Anfrage logisch aus dem Programm folgt. () 8 / 27

Beispiel Dinge, die beschrieben werden Objekte: Steinbock, Gemse, Hai, Edelweiß, Enzian, Seetang, Gebirge, Meer Prädikate: ist ein Tier, ist eine Pflanze, lebt in Welche Prädikate treffen auf welche Objekte zu? () 9 / 27

Definition der Prädikate Der Steinbock ist ein Tier. Die Gemse ist ein Tier. Der Hai ist ein Tier. Das Edelweiß ist eine Pflanze. Der Enzian ist eine Pflanze. Der Seetang ist eine Pflanze. Der Steinbock lebt im Gebirge. Die Gemse lebt im Gebirge. Der Hai lebt im Meer. Das Edelweiß lebt im Gebirge. Der Enzian lebt im Gebirge. Der Seetang lebt im Meer. () 10 / 27

Das Prolog-Programm ist_tier(steinbock). ist_tier(gemse). ist_tier(hai). lebt.pl ist_pflanze(edelweiss). ist_pflanze(enzian). ist_pflanze(seetang). lebt_in(steinbock,gebirge). lebt_in(gemse,gebirge). lebt_in(hai,meer). lebt_in(edelweiss,gebirge). lebt_in(enzian,gebirge). lebt_in(seetang,meer). () 11 / 27

Stelligkeit eines Prädikats Jedes Prädikat bezieht sich auf eine fixe Anzahl von Objekten. Diese Zahl heißt die Stelligkeit des Prädikats. ist_tier bezieht sich auf 1 Objekt (z.b. steinbock). Daher ist ist_tier 1-stellig. In Prolog heißt das Prädikat ist_tier/1. lebt_in bezieht sich auf 2 Objekte (z.b. steinbock und gebirge). Daher ist lebt_in 2-stellig. In Prolog heißt das Prädikat lebt_in/2. () 12 / 27

Anfragen (queries) Ist die Gemse ein Tier??- ist_tier(gemse). true. (SWI-Prolog) yes (andere Prologs) Ist die Gemse eine Pflanze??- ist_pflanze(gemse). false. (SWI-Prolog) no (andere Prologs) Ist der Hund ein Tier??- ist_tier(hund). false. (SWI-Prolog) no (andere Prologs) Closed world assumption Prädikate treffen auf Objekte nur dann zu, wenn dies explizit im Programm steht oder logisch aus dem Programm folgt. () 13 / 27

Anfragen Ist der Hai ein Fisch??- ist_fisch(hai). ERROR: toplevel: Undefined procedure: ist_fisch/1... () 14 / 27

Variablen Wer ist ein Tier??- ist_tier(tier). Tier = steinbock ; Tier = gemse ; Tier = hai.?- Objekte, Prädikate, Variablen Tier ist eine Variable. Variablen: mit großem Anfangsbuchstaben Eine Variable kann für etwas beliebiges stehen. Ein Objekt ist ein konkretes Ding. Ein Prädikat ist eine konkrete Relation. Objekte und Prädikate: mit kleinem Anfangsbuchstaben () 15 / 27

Anfragen mit mehreren Variablen Wer lebt wo??- lebt_in(lebewesen,lebensraum). Lebewesen = steinbock, Lebensraum = gebirge ; Lebewesen = gemse, Lebensraum = gebirge ; Lebewesen = hai, Lebensraum = meer ; Lebewesen = edelweiss, Lebensraum = gebirge ; Lebewesen = enzian, Lebensraum = gebirge ; Lebewesen = seetang, Lebensraum = meer.?- () 16 / 27

Welches Lebewesen X lebt im Lebensraum X??- lebt_in(x,x). false.?- Eine Variable darf in einer Anfrage zweimal vorkommen. Dann steht sie beidemale für dasselbe Objekt. () 17 / 27

Zusammengesetzte Anfragen Welche Pflanze und welches Tier leben in welchem gemeinsamen Lebensraum??- ist_pflanze(pflanze), ist_tier(tier), lebt_in(pflanze,lebensraum), lebt_in(tier,lebensraum). Pflanze = edelweiss, Tier = steinbock, Lebensraum = gebirge; Pflanze = edelweiss, Tier = gemse, Lebensraum = gebirge ; Pflanze = enzian, Tier = steinbock, Lebensraum = gebirge ; Pflanze = enzian, Tier = gemse, Lebensraum = gebirge ; Pflanze = seetang, Tier = hai, Lebensraum = meer.?- Das Komma (,) ist als und zu lesen. Konjunktion () 18 / 27

Ein weiteres Beispiel Dinge, die beschrieben werden Objekte: Franz, Max, Christine, Anna, Hans Prädikate (Relationen): männlich, weiblich, Kind von Zwischen welchen Objekten bestehen welche Relationen? () 19 / 27

Beschreibung der Relationen Max ist männlich. Franz ist männlich. Hans ist männlich. Christine ist weiblich. Anna ist weiblich. Eva ist weiblich Max ist Kind von Franz. Christine ist Kind von Franz. Max ist Kind von Anna. Christine ist Kind von Anna. Hans ist Kind von Christine. Eva ist Kind von Hans. () 20 / 27

Das Prolog-Programm % maennlich(p): Die Person P ist maennlich. maennlich(max). maennlich(franz). maennlich(hans). % weiblich(p): Die Person P ist weiblich. weiblich(christine). weiblich(anna). weiblich(eva). % kind(k,p): K ist Kind der Person P. kind(max,franz). kind(christine,franz). kind(max,anna). kind(christine,anna). kind(hans,christine). kind(eva,hans). verwandtschaft.pl () 21 / 27

Kommentare Von % bis Ende der Zeile Von /* bis */ () 22 / 27

Anfragen (queries) Ist Christine Kind von Franz??- kind(christine,franz). Für welche G,X,K ist K Kind von X, X Kind von G und G männlich??- kind(k,x), kind(x,g), maennlich(g). K = hans, X = christine, G = franz () 23 / 27

Fakten Fakten kind(max,franz). Ein weiteres Beispiel: Das Gleichheitsprädikat gleich(x,x). () 24 / 27

Regeln G ist Großvater von K, wenn K Kind von X, X Kind von G und G männlich ist. Großvater grossvater(g,k) :- kind(k,x), kind(x,g), maennlich(g). :- ist zu lesen als wenn. () 25 / 27

Person person(p) :- maennlich(p). person(p) :- weiblich(p). () 26 / 27

Rekursion N ist Nachkomme von X, wenn N Kind von X ist. N ist Nachkomme von X, wenn K Kind von X und N Nachkomme von K ist. Nachkomme % nachkomme(n,x): N ist Nachkomme von X. nachkomme(n,x) :- kind(n,x). nachkomme(n,x) :- kind(k,x), nachkomme(n,k). Das Prädikat nachkomme/2 ist unter Bezug auf sich selbst definiert. () 27 / 27