Logisches und funktionales Programmieren

Ähnliche Dokumente
mathematik und informatik

mathematik und informatik

Logische und funktionale Programmierung

Rekursive Listenverarbeitung

Logikprogrammierung. Berechnung durch Resolution Die Programmiersprache Prolog

Logik-Grundlagen. Syntax der Prädikatenlogik

Eigenschaften der Resolution für PL1 Formeln

Wiederholung zur SLD-Resolution (1)

Beweisen mit Semantischen Tableaux

Grundlagen der Logik

Die Prädikatenlogik erster Stufe: Syntax und Semantik

Programmiersprache Prolog

Resolution für die Aussagenlogik

mathematik und informatik

Bernd Marcus & Jane Hergert. Berufsleistung und Leistungsbeurteilung

Einführung in die Geschichtswissenschaft

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

Präsenzveranstaltung B-Modul Theorie der Leistungserstellung. Thomas Solga. Hagen, 17. Februar 2014

Deklarative Semantik

mathematik und informatik

Logische Programmierung

Maximale Punktzahl erreichte Punktzahl

kultur- und sozialwissenschaften

Politikwissenschaft, Verwaltungswissenschaft, Soziologie

5 Logische Programmierung

Logik für Informatiker

Einführung in die Allgemeine Bildungswissenschaft

Aussagenlogik. Übersicht: 1 Teil 1: Syntax und Semantik. 2 Teil 2: Modellierung und Beweise. Aussagenlogik H. Kleine Büning 1/37

Unifikation. T eine Menge von Termen. σ(t) einelementig ist. Definition: Unifikator. Eine Substitution σ ist Unifikator von T, falls

Prof. Dr. André Schulz. Kurs Komplexitätstheorie LESEPROBE

Einführung in Prolog. Simon Bischof. IPD Snelting

Substitution. Unifikation. Komposition der Substitution. Ausführung der Substitution

Was bisher geschah: klassische Aussagenlogik

Klinische Soziologie:

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

Gliederung. Programmierparadigmen. Einführung in Prolog: Einführung in Prolog: Programmieren in Prolog. Einführung Syntax Regeln Listen Relationen

Deduktion in der Aussagenlogik. Semantische Folgerungsbeziehung. Zusammenhang zwischen semantischer und syntaktischer Folgerung

Deduktion in der Aussagenlogik

Karl-Heinz Renner. Einführung in die Differentielle Psychologie und Persönlichkeitsforschung. kultur- und sozialwissenschaften

kultur- und sozialwissenschaften

kultur- und sozialwissenschaften

Hans-Peter Müller. Emile Durkheim. kultur- und sozialwissenschaften

Labor Compilerbau. Jan Hladik. Sommersemester DHBW Stuttgart. Jan Hladik (DHBW Stuttgart) Labor Compilerbau Sommersemester / 20

Einführung in die Erziehungs- und Bildungswissenschaft

Prolog-Strukturen. bersicht. Woraus besteht ein Prolog-Programm? EinfŸhren wichtiger Begriffe Verschiedene Arten von Termen Unifikation

Modellierungsmethoden der Informatik Kapitel 2: Logikkalküle

Prolog basiert auf Prädikatenlogik

Resolutionskalkül. wird t als eine Menge K t von Klauseln geschrieben, welche die einzelnen Maxterme repräsentieren:

Logik Vorlesung 4: Horn-Logik und Kompaktheit

Prolog. Modellieren in Prolog. Argumente eines Prädikates. Fakten

Logik Vorlesung 5: Grundlagen Resolution

Universelle Algebra. Zur Erinnerung: Definition von Gruppe, Ring (mit 1), R-Vektorraum.

Wissensrepräsentation und -verarbeitung in Logiken. bereinigt Pränex Skolem ( -Eliminierung) Klausel (Menge von Klauseln, Notation ohne Quantoren)

Aussagenlogik. Übersicht: 1 Teil 1: Syntax und Semantik. 2 Teil 2: Modellierung und Beweise. Aussagenlogik H. Kleine Büning 1/25

Deduktion. Semantische Folgerungsbeziehung. Syntaktische Folgerungsbeziehung. Zusammenhang zwischen semantischer und syntaktischer Folgerung

Prof. Dr. Andreas Glöckner. Sprache, Denken, Urteilen, Entscheiden und Bewusstsein. kultur- und sozialwissenschaften

Logische Programmierung & Deduktive Datenbanken Klausur

kultur- und sozialwissenschaften

Expertensysteme Sprachverarbeitung Symbolische Informationsverarbeitung Graphentheoretische Probleme Planungsprobleme Rapid Prototyping...

Entscheidungsverfahren für Bernays/Schönfinkelbzw. Datenlogik-Formeln

Grundlagen der Künstlichen Intelligenz

Automaten und Coinduktion

kultur- und sozialwissenschaften

Kurseinheit 1 Einführung und mathematische Grundlagen Aussagenlogik

Erläuterungen. Grundlagen der Leistungserstellung. Übersichtsdiagramm. Internes Rechnungswesen und funktionale Steuerung

1 Aussagenlogik. 1.1 Aussagen. 15 ist eine Primzahl. 3 < 8 x < 15 (hängt von x ab, keine Aussage) Aussage = Behauptung Beispiele: Es regnet.

kultur- und sozialwissenschaften

Logische und funktionale Programmierung

kultur- und sozialwissenschaften

Abstrakte Syntax von Prolog (1)

Grundlagen der Theoretischen Informatik

Wissenschaftliches Arbeiten Eine Einführung für den Studiengang B.A. Kulturwissenschaften

Wissenschaftliches Arbeiten Eine Einführung für den Studiengang B.A. Kulturwissenschaften

Einführung in die mathematische Logik

Prof. Dr. Kathrin Jonkmann. Einführung in die Pädagogische Psychologie. kultur- und sozialwissenschaften

Was bisher geschah Modellierung in Logiken: klassische Prädikatenlogik FOL(Σ, X) Spezialfall klassische Aussagenlogik AL(P)

Modellierungsmethoden der Informatik Kapitel 2: Logikkalküle

Wiederholung: Resolution in der Aussagenlo. Resolution in der Prädikatenlogik. Definition von Res(F) (Wiederholung)

Logik Vorlesung 9: Normalformen

Deduktion in der Prädikatenlogik

Kapitel 1.5. Ein adäquater Kalkül der Aussagenlogik. Teil 1: Kalküle und Beweisbarkeit und die Korrektheit des Shoenfield-Kalküls

Transkript:

Prof. Dr. Christoph Beierle, Dr. Harald Ganzinger, Prof. Dr. Michael Hanus Kurs 01816 Logisches und funktionales Programmieren LESEPROBE

Das Werk ist urheberrechtlich geschützt. Die dadurch begründeten Rechte, insbesondere das Recht der Vervielfältigung und Verbreitung sowie der Übersetzung und des Nachdrucks bleiben, auch bei nur auszugsweiser Verwertung, vorbehalten. Kein Teil des Werkes darf in irgendeiner Form (Druck, Fotokopie, Mikrofilm oder ein anderes Verfahren) ohne schriftliche Genehmigung der FernUniversität reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden.

26 Kapitel 1. Logisches Programmieren 1.3 Beweisstrategie Die prinzipielle Aufgabe eines Prolog-Systems ist es, Literale in Anfragen aufgrund vorgegebener Fakten und Regeln zu beweisen. Zur Konstruktion solcher Beweise wird eine bestimmte Strategie verwendet, die wir in diesem Abschnitt kennenlernen werden. Zunächst wird das allgemeine Resolutionsprinzip vorgestellt, mit dem man immer einen Beweis finden kann, falls überhaupt einer existiert (die theoretischen Hintergründe hierfür werden im Rahmen dieses Kurses nicht behandelt; genauere Informationen kann man im anfangs angegebenen Buch von Lloyd oder im Kurs 1695 Deduktions- und Inferenzsysteme finden). Aus Effizienzgründen wird in Prolog-Systemen jedoch eine eingeschränkte Strategie verwendet, die wir im Anschluß erläutern. 1.3.1 Das Prinzip der Resolution Die Semantik von Regeln haben wir oben wie folgt definiert: Wenn jedes der Literale L 1,..., L n beweisbar ist und L 0 :- L 1,...,L n. eine Regel ist, dann ist auch das Literal L 0 beweisbar. Diese wichtige Schlußregel ist in der mathematischen Logik schon lange unter der Bezeichnung modus ponens oder Abtrennungsregel bekannt. Wenn wir Fakten als Regeln mit leerer rechter Seite (n = 0) auffassen, dann erhält durch diese Schlußregel ein Prolog-Programm (Menge von Fakten und Regeln) eine Bedeutung. Eine Umformulierung dieser Schlußregel ergibt eine Methode zum Beweisen von Literalen. Diese Methode heißt Resolutionsprinzip : Ist L 0 :- L 1,...,L n. eine Regel, dann ist das Literal L 0 beweisbar, wenn jedes der Literale L 1,..., L n beweisbar ist. Obwohl das Resolutionsprinzip und die Abtrennungsregel in ihren Aussagen äquivalent sind, haben sie eine unterschiedliche Sichtweise. Das Resolutionsprinzip besagt, wie man vorgegebene Literale beweisen kann: Indem eine passende Regel gesucht wird, deren linke Seite mit dem vorgegebenen Literal übereinstimmt, und dann versucht wird, die Literale auf der rechten Seite der Regel zu beweisen. Allerdings gibt es im allgemeinen keine Regel, die direkt zu dem vorgegebenen Literal paßt. Wenn wir das Literal member(x, [a,b]) bzgl. der o.a. Klauseln für member beweisen wollen, dann gibt es keine Klausel, deren linke Seite mit dem Literal übereinstimmt. Es gibt aber die Klausel

1.3. Beweisstrategie 27 member(e,[e ]). die passen könnte : Über die Bedeutung von Variablen hatten wir gesagt, daß an ihrer Stelle beliebige andere Objekte eingesetzt werden dürfen. Wenn wir also die Variablen X und E durch das Atom a und die anonyme Variable durch die Liste [b] ersetzen, dann paßt das Faktum zu dem vorgegebenen Literal, und nach Anwendung des Resolutionsprinzips ist das Literal bewiesen (die rechte Regelseite ist ja bei Fakten leer). Zu beachten ist jedoch, daß das vorgegebene Literal nicht in der vollen Allgemeinheit beweisbar ist, sondern nur, wenn die Variable X durch das Atom a ersetzt wird. Genau dies wird auch vom Prolog-System ausgegeben. Um also das Resolutionsprinzip auf Prolog-Programme anzuwenden, muß der Prozeß des Ersetzens von Variablen berücksichtigt werden. Wenn wir zusätzlich noch berücksichtigen, daß wir im allgemeinen nicht ein einzelnes Literal, sondern eine Menge von Literalen zu beweisen haben, erhalten wir das allgemeine Resolutionsprinzip: Der Beweis der Anfrage?- A 1,...,A i 1,A i,a i+1,...,a m. läßt sich zurückführen auf den Beweis der Anfrage wenn?- σ(a 1,...,A i 1,L 1,...,L n,a i+1,...,a m ). L 0 :- L 1,...,L n. eine Regel ist, deren Variablen verschieden sind von denen in A 1,...,A m (dies kann man durch Umbenennung der in dieser Regel verwendeten Variablen immer erreichen), und wenn gilt: 1. Die Funktion σ ersetzt nur Variablen durch neue Terme, wobei gleiche Variablen auch durch gleiche Terme ersetzt werden. Alles andere (Konstanten, Funktoren) wird durch σ nicht verändert. 2. Die Literale σ(a i ) und σ(l 0 ) sind identisch. Mit diesem allgemeinen Resolutionsprinzip können alle Anfragen bewiesen werden, die bzgl. der eingegebenen Fakten und Regeln beweisbar sind. Ein Resolutionsbeweis ist dabei eine Folge von Anfragen, wobei in jedem Schritt das allgemeine Resolutionsprinzip angewendet wird und die letzte Anfrage keine Literale mehr enthält. Beispiel: Gegeben seien die Klauseln für das Prädikat member : member(e,[e ]). member(e,[ R]) :- member(e,r).

28 Kapitel 1. Logisches Programmieren Die folgenden Anfragen bilden einen Resolutionsbeweis:?- member(norbert,[heinz,fritz,herbert,hubert,norbert,andreas]).?- member(norbert,[fritz,herbert,hubert,norbert,andreas]).?- member(norbert,[herbert,hubert,norbert,andreas]).?- member(norbert,[hubert,norbert,andreas]).?- member(norbert,[norbert,andreas]).?-. In den ersten vier Schritten wurde die zweite Klausel angewendet, während im letzten Schritt die erste Klausel (Faktum) angewendet worden ist. Jedes Prolog-System arbeitet nach diesem Resolutionsprinzip, wobei am Ende eines Beweises yes oder no (Beweis gefunden bzw. nicht gefunden) oder die Terme, die anstelle der Variablen in der Anfrage im Verlauf des Beweises eingesetzt wurden, ausgegeben werden. Die beiden Klauseln last([e],e). last([ R],E) :- last(r,e). definieren ein Prädikat last, das die Relation zwischen einer Liste und dem letzten Element dieser Liste beschreibt. Am Ende des folgenden Resolutionsbeweises wird vom Prolog-System X=c ausgegeben:?- last([a,b,c],x).?- last([b,c],x).?- last([c],x).?-. Bevor wir uns genauer mit der Frage beschäftigen, nach welcher Strategie ein Prolog-System die einzelnen Klauseln ausprobiert, gehen wir auf das Problem ein, wie man in einem Resolutionsschritt die Funktion σ findet, die zwei Literale durch Ersetzung von Variablen in Übereinstimmung bringt. 1.3.2 Unifikation In einem Resolutionsschritt müssen die Variablen in einem Literal und einer Klausel derart durch neue Terme ersetzt werden, daß das Literal und die linke Seite der Klausel übereinstimmen. Dieser Prozeß der Ersetzung von Variablen heißt Unifikation. Die Unifikation berechnet Funktionen, die Variablen durch neue Terme ersetzen. Solche Funktionen heißen Substitutionen: Eine Substitution kann auf beliebige Terme, Literale, Klauseln und Anfragen angewendet werden und ersetzt dabei gewisse Variablen durch neue Terme, wobei gleiche Variablen auch durch gleiche Terme ersetzt werden und alles andere gleich bleibt. Insbesondere verändert eine Substitution nicht die Namen von Prädikaten oder Funktoren und löscht auch keine Atome oder Strukturen. Da jede Substitution nur bestimmte Variablen verändert und alles andere gleich läßt, werden Substitutionen durch die Veränderung dieser Variablen charakterisiert. So bezeichnet

1.3. Beweisstrategie 29 σ = {N/mueller, J/23} die Substitution, die jedes Vorkommen der Variablen N durch das Atom mueller und jedes Vorkommen der Variablen J durch die Zahl 23 ersetzt. Also gilt σ(person(christine,n,datum(12,7,j))) = person(christine,mueller,datum(12,7,23)) Weiterhin definieren wir: Sind T 1 und T 2 zwei Terme oder Literale, dann heißt eine Substitution σ Unifikator für T 1 und T 2, wenn gilt: σ(t 1 ) =σ(t 2 ). Zwei Terme oder Literale heißen unifizierbar, falls ein Unifikator für sie existiert. σ heißt allgemeinster Unifikator für T 1 und T 2, wenn für jeden anderen Unifikator σ für T 1 und T 2 gilt: Es existiert eine Substitution ϕ, so daß σ = ϕ σ gilt, d.h. σ ist die Komposition von σ und ϕ (zuerst σ, dann ϕ). Aus allgemeinsten Unifikatoren kann man also alle anderen Unifikatoren als Spezialfälle ableiten. Allgemeinste Unifikatoren haben die Eigenschaft, nur die Variablen durch andere Terme zu ersetzen, für die das unbedingt notwendig ist, um die beiden Terme in Übereinstimmung zu bringen. Alle anderen Variablen bleiben unverändert. So ist die Substitution σ 1 = {Tag/3, Monat/4, M/4, J/83} zwar ein Unifikator für die Terme datum(tag,monat,83) und datum(3,m,j), aber kein allgemeinster, weil er für den Monat einen konkreten Wert (4) einsetzt, was aber nicht notwendig ist. Dagegen ist σ 2 = {Tag/3, Monat/M, J/83} ein allgemeinster Unifikator für diese Terme. Bei der Anwendung des allgemeinen Resolutionsprinzips ist es wichtig, die Unifikatoren nicht zu speziell zu wählen, da man sonst beim Beweisen zu leicht in Sackgassen laufen kann. Glücklicherweise existieren für Prolog-Terme und Literale immer allgemeinste Unifikatoren, falls sie unifizierbar sind. Es gibt sogar eine effektive Methode, um sie zu berechnen: