3. Logik-Programmierung



Ähnliche Dokumente
Logik-Programme. Eine Tatsachenklausel ist eine einelementige positive Klausel, d.h. sie hat

Grundlagen der Künstlichen Intelligenz

Prolog basiert auf Prädikatenlogik


1 topologisches Sortieren

Satz. Für jede Herbrand-Struktur A für F und alle t D(F ) gilt offensichtlich

Binäre Suchbäume (binary search trees, kurz: bst)

Logische Folgerung. Definition 2.11

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Erfüllbarkeit und Allgemeingültigkeit

Informationsblatt Induktionsbeweis

Programmiersprachen und Übersetzer

I. Aussagenlogik. Aussagenlogik untersucht Verknüpfungen wie "und", "oder", "nicht", "wenn... dann" zwischen atomaren und komplexen Sätzen.

Theoretische Grundlagen des Software Engineering

Übungen für Woche 10

Übungen Programmieren 1 Felix Rohrer. Übungen

Auswahl von Klauseln und Atomen in Prolog

Formale Systeme, WS 2012/2013 Lösungen zu Übungsblatt 4

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Logik für Informatiker

Terme stehen für Namen von Objekten des Diskursbereichs (Subjekte, Objekte des natürlichsprachlichen Satzes)

Theorie der Informatik

Theoretische Grundlagen der Informatik

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

3.Inferenzsysteme 3.4 Logische Programme und Antwortmengensemantik

6.1 Syntax und Semantik von Constraint-Logikprogrammen

4.9 Deterministische Kellerautomaten Wir haben bereits definiert: Ein PDA heißt deterministisch (DPDA), falls

Logische und funktionale Programmierung

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Primzahlen und RSA-Verschlüsselung

Kurzanleitung MAN E-Learning (WBT)

Basis und Dimension. Als nächstes wollen wir die wichtigen Begriffe Erzeugendensystem und Basis eines Vektorraums definieren.

WS 2013/14. Diskrete Strukturen

9.2. DER SATZ ÜBER IMPLIZITE FUNKTIONEN 83

Nichtmonotones Schließen

Beispiel. Bsp.: Betrachte Schlussweise in: (3) folgt aus (1) und (2), siehe z.b. Resolutionsregel. was ist mit folgender Schlußweise:

a n auf Konvergenz. Berechnen der ersten paar Folgenglieder liefert:

Einführung. Vorlesungen zur Komplexitätstheorie: Reduktion und Vollständigkeit (3) Vorlesungen zur Komplexitätstheorie. K-Vollständigkeit (1/5)

Was ist Logische Programmierung?

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

4. AUSSAGENLOGIK: SYNTAX. Der Unterschied zwischen Objektsprache und Metasprache lässt sich folgendermaßen charakterisieren:

Repetitionsaufgaben Wurzelgleichungen

Formale Methoden II. Gerhard Jäger. SS 2008 Universität Bielefeld. Teil 8, 11. Juni Formale Methoden II p.1/30

Tangentengleichung. Wie lautet die Geradengleichung für die Tangente, y T =? Antwort:

Formeln. Signatur. aussagenlogische Formeln: Aussagenlogische Signatur

Erwin Grüner

der Eingabe! Haben Sie das Ergebnis? Auf diesen schwarzen Punkt kommen wir noch zu sprechen.

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.

Mai Hauptseminar: Nichtrelationale Datenbanken Historisch-Kulturwissenschaftliche Informationsverarbeitung Universität zu Köln

Kapitalerhöhung - Verbuchung

Professionelle Seminare im Bereich MS-Office

3. LINEARE GLEICHUNGSSYSTEME

Constraint-Algorithmen in Kürze - Mit der Lösung zur Path-Consistency-Aufgabe 9

Was meinen die Leute eigentlich mit: Grexit?

Lineare Gleichungssysteme

Diana Lange. Generative Gestaltung Operatoren

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Programmierkurs Java

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse Lösung 10 Punkte

Formale Sprachen. Der Unterschied zwischen Grammatiken und Sprachen. Rudolf Freund, Marian Kogler

Korrelation (II) Korrelation und Kausalität

Gleichungen und Ungleichungen

Güte von Tests. die Wahrscheinlichkeit für den Fehler 2. Art bei der Testentscheidung, nämlich. falsch ist. Darauf haben wir bereits im Kapitel über

Wissensbasierte Systeme

Lineare Gleichungssysteme

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Erstellen von x-y-diagrammen in OpenOffice.calc

Mathematik: Mag. Schmid Wolfgang Arbeitsblatt 3 1. Semester ARBEITSBLATT 3 RECHNEN MIT GANZEN ZAHLEN

Prozentrechnung. Wir können nun eine Formel für die Berechnung des Prozentwertes aufstellen:

Also kann nur A ist roter Südler und B ist grüner Nordler gelten.

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r )

ERGÄNZUNGEN ZUR ANALYSIS II MITTELWERTSATZ UND ANWENDUNGEN

Grundlagen der Künstlichen Intelligenz

Formale Sprachen und Grammatiken

Das Briefträgerproblem

Absolute Stetigkeit von Maßen

Semantik von Formeln und Sequenzen

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel

Klausur für Studiengänge INF und IST

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Grammatiken. Einführung

SWP Prüfungsvorbereitung

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

Anwendungsbeispiele Buchhaltung

Vorkurs Mathematik Übungen zu Polynomgleichungen

1 Mathematische Grundlagen

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Übung Theoretische Grundlagen

Software Engineering Klassendiagramme Assoziationen

Second Steps in eport 2.0 So ordern Sie Credits und Berichte

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen

Grundlagen der Theoretischen Informatik - Sommersemester Übungsblatt 1: Lösungsvorschläge

Zeichen bei Zahlen entschlüsseln

Mediator 9 - Lernprogramm

Mathematischer Vorbereitungskurs für Ökonomen

Dokumentation für das Spiel Pong

Transkript:

3. Logik-Programmierung 3.1. Vorbemerkungen Idee: Ausführen eines Logik-Programms entspricht Herleitung leerer Klausel. Zusätzliche Verwendung einer Antworterzeugungskomponente (liefert Rechenergebnis). Erzeugen von Antworten: Beispiel F: liebt(franz, Amy), liebt(franz, Madonna), liebt(x,madonna) liebt(x,amy) liebt(peter,x) "Aufruf" des Programms: Gibt es jemanden, den Peter liebt? G = y liebt(peter,y) Gesucht nicht nur JA-NEIN-Antwort, sondern falls JA auch das betreffende Individuum. Herleitung der leeren Klausel: liebt(peter,y) liebt(x,madonna) liebt(x,amy) liebt(peter,x) sub = [x/y] liebt(y,madonna) liebt(y,amy) liebt(franz, Madonna) sub = [y/franz] liebt(franz,amy) liebt(franz, Amy) [] Gesuchtes Individuum kann aus Substitution für y abgelesen werden: y = Franz Kann auch hergeleitet werden durch Einführung eines Antwortprädikats: statt der Klausel für das negierte Ziel liebt(peter,y) verwendet man: liebt(peter,y) Antwort(y). Jetzt wird nicht mehr leere Klausel abgeleitet, sondern Klausel, die nur das Antwortprädikat enthält: liebt(peter,y) Antwort(y) liebt(x,madonna) liebt(x,amy) liebt(peter,x) sub = [x/y] liebt(y,madonna) liebt(y,amy) Antwort(y) liebt(franz, Madonna) sub = [y/franz] liebt(franz,amy) Antwort(Franz) liebt(franz, Amy) [Antwort(Franz)] 45

Zu beachten: in obigem Madonna-Beispiel wurde in 2stelligem Zielprädikat "liebt" das erste Argument als Eingabeparameter verwendet (Peter), das zweite als Ausgabeparameter (Wen liebt Peter)? Dasselbe Programm kann aber auch verwendet werden, um etwa zu prüfen, wer Franz liebt. man spricht von Invertibilität der Parameter. liebt(y,franz) Antwort(y) liebt(x,madonna) liebt(x,amy) liebt(peter,x) sub = [y/peter, x/franz] liebt(franz,madonna) liebt(franz,amy) Antwort(Peter) liebt(franz, Madonna) sub = [y/franz] liebt(franz,amy) Antwort(Peter) liebt(franz, Amy) [Antwort(Peter)] Bsp. Invertibilität: Programm add(x,0,x) (1) add(x,s(y),s(z)) add(x,y,z) (2) add(s(0),s(s(0)),u) Ans(u) add(x,s(y),s(z)) add(x,y,z) (2) [x/s(0), y/s(0), u/(s(z)] danach [z/u] (Variablen disjunkt) add(s(0),s(0),u) Ans(s(u)) add(x,s(y),s(z)) add(x,y,z) (2) [x/s(0), y/0, u/s(z)] add(s(0),0,z) Ans(s(s(z))) add(x,0,x) (1) [x/s(0), z/s(0)] Ans(s(s(s(0))) kann auch für Subtraktion verwendet werden: 46

add(v,s(s(0)),s(s(s(0)))) Ans(v) add(x,s(y),s(z)) add(x,y,z) (2) [x/v, y/s(0), z/s(s(0))] add(v,s(0),s(s(0))) Ans(v) add(x,s(y),s(z)) add(x,y,z) (2) [x/v, y/0, z/s(0)] add(v,0,s(0)) Ans(v) add(x,0,x) (1) [x/s(0), v/s(0)] Ans(s(0)) Planungsbeispiel: Peter braucht Bananen, hat kein Geld, aber ein Konto bei der Bank. Bananen gibt es bei Aldi. Peter kann alle relevanten Örtlichkeiten zu Fuß erreichen. Idee: wenn Peter in einer Situation s Objekt t besitzt, so schreiben wir Has(t,s). Aktionen (wie Buy-Bananas) sind Funktionen, die von einer Situation in einen Nachfolgesituation führen. Ziel: s Has(Bananas, s) Programm: Has(Bananas,Buy-Bananas(s)) At-Aldi(s) Has(Money,s) 1 Has(Money,Get-Cash(s)) At-Bank(s) 2 At-Bank(Go(Bank,s)) 3 At-Aldi(Go(Aldi,s)) 4 Has(Money,Go(x,s)) Has(Money(s)) 5 Has(Bananas, s) Antwort(s) 6 +1 At-Aldi(s) Has(Money,s) Antwort(Buy-Bananas(s)) 7 +4 Has(Money,Go(Aldi,s)) Antwort(Buy-Bananas(Go(Aldi,s))) 8 +5 Has(Money,s) Antwort(Buy-Bananas(Go(Aldi,s))) 9 +2 At-Bank(s) Antwort(Buy-Bananas(Go(Aldi,Get-Cash(s)))) 10 +3 Antwort(Buy-Bananas(Go(Aldi,Get-Cash(Go(Bank,s))))) 3.2 Hornklauselprogramme Man beschränkt sich beim logischen Programmieren oft auf Hornklauseln: recht ausdrucksmächtig, Antworterzeugung einfach, effizient: SLD-Resolution vollständig. Fakten (Tatsachenklauseln): einelementige positive Klauseln. 47

Regeln (Prozedurklauseln): gemischte Hornklauseln: Notation in Prolog 1 : P :- Q 1,..., Q k P heißt Kopf, Q 1,...,Q n Körper der Regel. Logik-Programm: endliche Menge von Fakten und Regeln. Aufruf eines Logikprogramms durch Zielklausel: :- Q 1,...,Q k (man schreibt auch?- Q 1,...,Q k ) Wir werden im Folgenden sowohl Klausel- wie Prolog-Regel-Notation verwenden. Prozedurale Interpretation von P :- Q 1,..., Q k : wenn P abgeleitet werden soll, dann leite Q 1,..., Q k ab. Annahme: Variablenumbenennungen immer in Programmklauseln: standardisierte SLD- Resolution. Def.: Konfiguration, Konfigurationsübergang Sei F ein Logikprogramm. Eine Konfiguration ist ein Paar (G,sub), wobei G Zielklausel und sub Substitution ist. Ein Konfigurationsübergang (bzgl. F) wird wie folgt definiert: (G 1,sub 1 ) -- (G 2,sub 2 ) falls gilt: G 1 = { A 1,..., A k } und es gibt eine Programmklausel K = {B, C 1,..., C n } in F die durch Variablenumbenennung bereits keine Variablen mit G 1 mehr gemeinsam hat. B und A i seien durch mgu s unifizierbar. G 2 hat die Form und sub 2 = sub 1 s. { A 1,..., A i-1, A i+1,..., A k, C 1,..., C n }s Eine Berechnung von F bei Eingabe G 1 ist eine Folge von Konfigurationen (G i,sub i ) so dass gilt sub 1 = [] und (G i,sub i ) -- (G i+1, sub i+1 ), für alle i 1. Falls die Berechnung endlich ist und mit der Konfiguration ([],sub) terminiert, so heißt die Berechnung erfolgreich und (A 1... A k )sub ist das Rechenergebnis. Also: standardisierte SLD-Resolutionen, wobei Substitution mitgeführt wird. Bemerkung: da die berechnete Substitution nur dazu verwendet wird, das Rechenergebnis zu erzeugen, genügt es, sich die Ersetzungen von Variablen in G 1 zu merken. Berechnungen nichtdeterministisch: Konfiguration kann mehrere Nachfolgekonfigurationen haben. Mögliche Berechnungen bilden Baum: endlich verzweigt, aber möglicherweise unendliche Pfade. Beispiel: Ziel: P(x) :- P(f(x)) P(a) :- P(a) ({ P(a)}, []) -- ({ P(f(a))}, [x/a]) -- ({ P(f(f(a)))}, [x/a][x/f(a)]) --... unendlich -- ([], []) 1 Prolog ist eine Klasse von Logikprogrammiersystemen. 48

Satz: (Clark) Sei F ein Logik-Programm und G = :- A 1,...,A k eine Zielklausel. 1. (Korrektheit) Falls es eine erfolgreiche Berechnung von F bei Eingabe G gibt, so ist jede Grundinstanz des Rechenergebnisses (A 1... A k )sub Folgerung von F. 2. (Vollständigkeit) Falls jede Grundinstanz von (A 1... A k )sub' Folgerung von F ist, so gibt es eine erfolgreiche Rechnung von F bei Eingabe G mit Rechenergebnis (A 1... A k )sub, so dass für eine geeignete Substitution s (A 1... A k )sub' = (A 1... A k )sub s Def.: Prozedurale vs. modelltheoretische Semantik Sei F ein Logik-Programm, G = :- A 1,..., A k Zielklausel. Die prozedurale Semantik von (F,G) ist die Menge Sp(F,G) = {H H ist Grundinstanz eines Rechenergebnisses von F bei Eingabe G} Die modelltheoretische Semantik von (F,G) ist die Menge Sm(F,G) = {H H ist Grundinstanz von (A 1... A k ) und folgt aus F} Satz: Für alle Hornklauselprogramme F und Zielklauseln G: Sp(F,G) = Sm(F,G). Def.: Sei F ein Hornklauselprogramm. Wir definieren einen Operator OF über Mengen von Grundatomen wie folgt: OF(M) = {A' es gibt Klausel K = {A, B 1,..., B n } in F, {A', B 1 ',..., B n '} ist Grundsubstitution von K und B 1 ',..., B n ' in M} Dieser Operator ist monoton und besitzt kleinsten Fixpunkt Fp = n 0 OF n ({}). Hierbei ist OF n (M) = M falls n = 0, OF(OF n-1 (M)) sonst. OF liefert alle Atome, die in einem Schritt aus Regeln von F abgeleitet werden können, falls M bereits abgeleitet ist. Fixpunktsemantik: Sf(F,G) = {H H Grundinstanz von (A 1... A k ) und für alle Atome A in H gilt A Fp}. Satz: Für alle Hornklauselprogramme F und Zielklauseln G: Sp(F,G) = Sm(F,G) = Sf(F,G). Auswertungsstrategien: Logik-Programme sind nichtdeterministisch: nach jedem Berechnungsschritt kann es verschiedene Nachfolgekonfigurationen geben. Auswertungsstrategie schreibt vor, in welcher Reihenfolge die Schritte ausgeführt werden. 2 Gründe für Nichtdeterminismus: 49

Nichtdet. 1. Art: Auswahl der Programmklausel, die für Resolutionsschritt verwendet wird Nichtdet. 2. Art: Auswahl des Literals der jeweiligen Zielklausel, das als nächstes abgearbeitet wird Nichtdet. der 2. Art (Reihenfolge der Abarbeitung der Teilziele) irrelevant in folgendem Sinn: Def.: Eine Berechnung eines Logik-Programmes heißt kanonisch, falls bei jedem Konfigurationsübergang mit dem ersten (am weitesten links stehenden) Literal der Zielklausel resolviert wird (Klauseln werden hier also nicht mehr als Mengen, sondern als Listen aufgefaßt). Satz: Sei (G,[]) --... -- ([], sub) eine erfolgreiche Berechnung des Logik-Programms F. Dann gibt es eine erfolgreiche kanonische Berechnung von F bei Eingabe G derselben Länge und mit demselben Rechenergebnis. Bemerkung: Reihenfolge der Teilziele spielt natürlich eine Rolle bei nicht erfolgreichen Berechnungen: je später man merkt, dass ein Teilziel nicht abgeleitet werden kann, desto schlechter ist das für die Effizienz des Systems. Kanonische Berechnungen werden oft als Bäume dargestellt: Wurzel (G,[]), Nachfolger jeweils alle in einem kanonischen Rechenschritt erreichbaren Nachfolgekonfigurationen. Substitutionen häufig weggelassen. Beispiel: 1) Q(x,z) :- Q(y,z), R(x,y). 2) Q(x,x) 3) R(b,c) Zielklausel:?- Q(x,c)?- Q(x,c) 1 2?- Q(y,c), R(x,y) [] Ergebnis Q(c,c) 1 2?- Q(v,c), R(y,v), R(x,y)?- R(x,c) 1 2 3 unendliche...?- R(y,c), R(x,y) [] Ergebnis Q(b,c) Rechnung 3?- R(x,b) nicht erfolgreiche Rechnung 50

Beispiel zeigt, dass Auswahl der im jeweiligen Resolutionsschritt verwendeten Programmklauseln kritisch ist. Berechnungsbaum muss vollständig durchsucht werden 2 wichtige Strategien: Breitensuche (breadth first): alle Knoten im Baum der Tiefe t werden abgearbeitet, bevor ein Knoten der Tiefe t+1 abgearbeitet wird. Tiefensuche (depth first): von den noch weiter resolvierbaren Knoten der größten Tiefe wird jeweils der am weitesten links stehende Knoten abgearbeitet. Wichtig: Breitensuche ist vollständig, d.h. wenn es eine Lösung gibt, dann wird sie auch nach endlicher Zeit gefunden, aber extrem ineffizient: wenn der Baum einen durchschnittlichen Verzweigungsgrad von m hat und die Lösung in Tiefe t liegt, so sind im schlechtesten Fall m + m 2 +... + m t Resolutionsschritte auszuführen (also exponentiell in der Lösungstiefe). Tiefensuche ist nicht vollständig: im obigen Beipielbaum führt Tiefensuche zu keiner Lösung. Allerdings häufig effizienter als Breitensuche, wird deshalb in den meisten PROLOG- Systemen verwendet. Aufgabe des Programmierers ist es dann, Programme so zu schreiben, dass System nicht in Endlosschleife gerät. Ziel der Logik-Programmierung (Programmierer sagt nur, was gilt, nicht wie abgeleitet werden soll) in Prolog also nur teilweise erreicht. Prolog-Algorithmus: Eingabe: Logik-Programm F = (K 1,..., K n ), wobei K i = B i :- C i,1,...,c i, ni und Zielklausel G =?- A 1,..., A n. Hauptprogramm: success:= false; auswerte(g,[]); if success = false then write('nicht ableitbar'); Prozedur auswerte: procedure auswerte(g,sub); begin if G = [] then begin write('ergebnis:', (A 1... A n )sub; success := true end else begin {G habe die Form?- D 1,..., D k } i:= 0; while (i < n) and not success do begin i:= i+1; if {D 1,B i ) unifizierbar mit mgu s then auswerte(?- (Ci,1,..., Ci,ni,D2,...,Dk)s, sub s) end end end 51

Bemerkungen: Tiefensuche wird zu Breitensuche, indem man im rekursiven Aufruf von auswerte den Körper der resolvierten Klausel hinten statt vorne im ersten Argument anhängt. Alle Ergebnisse werden ausgegeben, wenn man in while-bedingung "and not success" weglässt. Prolog Beispiel: 1) Vater(Peter, Hans) 2) Vater(Peter, Maria) 3) Vater(Hans, Uli) 4) Vater(Karl, Anton) 5) Mutter(Maria, Anna) 6) Großvater(X,Y) :- Vater(X,Z), Vater(Z,Y) 7) Großvater(X,Y) :- Vater(X,Z), Mutter(Z,Y) Anfrage: :- Großvater(Peter,V) 6) [X/Peter, Y/V] :- Vater(Peter,Z), Vater(Z,V) 1) [Z/Hans] :- Vater(Hans,V) 3) [V/Uli] :- [] erste Antwort: V = Uli falls weitere Antworten gewünscht: backtracking (Rücksprung zu letzter Stelle, an der eine alternative Regelauswahl existiert): :- Vater(Peter,Z), Vater(Z,V) 2) [Z/Maria] :- Vater(Maria,V) nicht erfolgreich backtracking: :- Großvater(Peter,V) 7) [X/Peter, Y/V] :- Vater(Peter,Z), Mutter(Z,V) 1) [Z/Hans] :- Mutter(Hans,V) nicht erfolgreich backtracking: :- Vater(Peter,Z), Mutter(Z,V) 2) [Z/Maria] :- Mutter(Maria,V) 5) [V/Anna] ;- [] zweite Antwort: V = Anna keine weiteren Lösungen. 3.3 Behandlung negativer Information in Logikprogrammen Anfragen bisher: G = :- A 1,...,A k, intuitiv: "ist A 1... A n ableitbar?" bzw, gibt es Substitution sub für freie Variablen in G, so dass (A 1... A n ) sub ableitbar? 52

Also nur positive Anfragen (werden bei Widerspruchsbeweis zu negativen Klauseln). Negative Anfragen: Negative Literale können aus bisher betrachteten Logikprogrammen im klassischen Sinn nie abgeleitet werden: es gibt für jedes Atom ein Modell, das das Atom wahr macht: man nehme das (Herbrand-) Modell, in dem alle Atome wahr sind => macht alle Regeln wahr. Im Kontext von Datenbanken und Logikprogrammen geht man häufig davon aus, dass man über vollständige positive Information verfügt, d.h. man betrachtet Atome, die nicht abgeleitet werden können, als falsch. Modelltheoretische Semantik: nicht alle Modelle betrachten, sondern nur das (Herbrand-) Modell, in dem am wenigsten Atome wahr sind. Modelle repräsentiert durch Menge der Atome, die wahr sind. M 1 M 2 gdw M 1 M 2. Kleinstes Modell Mm existiert für Hornklausen. Wir definieren: Literal "not A" folgerbar aus P gdw. A nicht in Mm. (Aussagenlogisches) Beispiel P 1 : a :- b, c c :- d d Modelle: M 1 = {d,c}, M 2 = {d,c,a}, M 3 = {d,c,b,a} M 1 minimal, damit ist "not a" und "not b" ableitbar, da a und b in M 1 falsch sind. Verwendung von not statt zeigt an, dass wir es hier nicht mit klassischer Negation zu tun haben. Bemerkung: der hier zugrundeliegende Ableitbarkeitsbegriff ist nichtmonoton: Monotonie: p ableitbar aus F => p ableitbar aus F {q} für beliebige Formel q. Beispiel: "not a" aus P 1 ableitbar, aber nicht aus P 1 {b}. Prozedurale Semantik für negative Anfragen: SLDNF: SLD mit negation as finite failure: Überprüfen eines negativen Zielliterals not L durch Starten eines SLD-Beweises für L. Schlägt der Beweis in endlicher Zeit fehl, dann ist not L ableitbar, sonst nicht. Zu beachten: da das Resolutionsverfahren nicht immer terminiert, klaffen modelltheoretische und prozedurale Semantik hier auseinander. Negation as finite failure korrekt bzgl. der Semantik des kleinsten Modells, aber nicht vollständig. Normale Logikprogramme: Da ein Ableitungsmechanismus für "not" vorhanden ist, lässt sich Negation auch in den Programmen selbst verwenden (genauer: im Körper der Regeln): normale Logik-Programme: 53

Regeln der Form A :- B 1,...,B n, not C 1,..., not C m wobei A, B i und C j Atome (möglicherweise freie Variablen) Problem: es gibt nicht immer ein kleinstes Herbrand-Modell, sondern möglicherweise mehrere minimale: (Aussagenlogisches) Beispiel: a :- c, not b b :- c, not a c :- not d 3 minimale Modelle: M 1 = {a,c}, M 2 = {b,c}, M 3 = {d}. Nicht jedes minimale Modell intendiert: M 3 unerwünscht, da d nicht hergeleitet werden kann. (Grundprinzip: für jedes wahre Atom A sollte es mindestens eine Regel mit Kopf A geben, deren Vorbedingung auch wahr ist). Begriff des stabilen Modells (nur definiert für Programme ohne Variablen): Idee: wir raten ein Modell und überprüfen dann, ob man mit den sich daraus ergebenden Auswertungen der not-literale dasselbe Modell wieder herleiten kann. Diese Konstruktion garantiert, dass nur minimale Modelle erzeugt werden, und unter diesen nur solche, in denen jedes wahre Atome eine gültige Herleitung hat. Def. Sei M ein Modell, P ein variablenfreies Programm. Das um M reduzierte Programm, P M, ergibt sich aus P durch 1. Streichen aller Regeln mit (not C i ) im Körper und C i M. 2. Streichen aller not-literale aus allen anderen Regeln. Das reduzierte Programm enthält kein Vorkommen von not, hat also ein kleinstes Modell. M heißt stabil gdw. M das kleinste Modell von P M ist. obiges Beispiel: P M 1 : a :- c minimales Modell: {a,c} = M 1 c P M 2 : b :- c minimales Modell: {b,c} = M 2 c P M 3 : a :- c minimales Modell: {} M 3 b :- c Also 2 stabile Modelle, M 1 und M 2. Prozedural: dieselbe Idee wie vorher: wann immer ein negatives goal (not L) abgearbeitet wird, wird ein Beweis für L gestartet. Wenn der endlich misslingt, ist not L wahr, sonst nicht. Programm läuft möglicherweise endlos: 54

Beispiel: a :- not b b :- not a c :- not c, a stabiles Modell: {b} aber prozedurale Interpretation (SLDNF) geht in Endlosschleife: Überprüfen von b liefert Teilziel not a, Beweis für a wird gestartet, liefert Teilziel not b, Beweis für b wird gestartet,... Deshalb: Beweiser für normale Logikprogramme unter stabiler Semantik deutlich aufwändiger als SLDNF. 55