2 Modellierung und Programmierung
6. Vorlesung: KI-Programmierung. Lisp.
Von Logik zu PROLOG.
– Prozeduraler Programmierstil
Schrittweise ausgeführte Folgen von Anweisungen (Prozeduren) modifizieren Daten in einem Speicher
– Funktionaler Programmierstil
Berechnung durch Auswertung von Funktionen (Abbildung von Definitionsbereich in Wertebereich)
– Logikorientierter Programmierstil
Deklarative Notierung von Problem und Lösungs"wissen" als logische Formeln, Berechnung durch Theorembeweisen
– Objektorientierter Programmierstil
Berechnung durch Kommunikation: Austausch von Nachrichten zwischen aktiven unabhängigen Objekten Die zugrundeliegenden
Verarbeitungsmodelle (Programmiersprache + ausführende Maschine) sind sehr verschieden.
! #
Typische Anwendungen für KI-Methoden:
– Verarbeitung natürlicher Sprache – Bildverarbeitung
– Konstruktion (teil-)autonomer Systeme (Roboter);
– maschinelles Problemlösen – Entscheidungsunterstützung
• Aufgaben i.a. sehr komplex und auf abstraktem Niveau
• Lösungsansätze basieren häufig auf kognitiven Modellen Klassen von Problemen führen zu
problemspezifischen Verarbeitungsmodellen
(auf höherer Ebene als programmiersprachlicheVerarbeitungsmodelle)
• Entwurf, formale Spezifikation und Implementierung problemspezifischer Verarbeitungsmodelle
• Programmierung in diesen Modellen Voraussetzung:
angemessene Programmiersprachen mit mächtigen Mitteln zum Aufbau und zur Verarbeitung komplexer symbolischer Daten
Frage nicht:
Welches ist die grundsätzlich bessere KI-Programmiersprache?
sondern:
Welche Sprache ist zur Implementierung eines Verarbeitungsmodells für eine bestimmte
Problemklasse besser geeignet?
! %
• früher Basissprache für viele KI-Systeme
• Flexibilität
• bestens geeignet (erfunden) für Symbolmanipulation und Zuordnung von Information zu Symbolen
• einfache Konstruktion neuer Datenstrukturen
• Befreiung von expliziter Speicherverwaltung (garbage collection)
• uniforme Behandlung von Daten und Programmen
Lisp ist
• eine mathematische formale Sprache mit präziser formaler Beschreibung, die einen funktionalen Programmierstil unterstützt
• die Grundlage etlicher
"höherer" Sprachen und KI- Entwicklungswerkzeuge
JOHN McCARTHY Asst. Professor of Mathematics in Dartmouth
1 9 5 8 McCarthy (MIT) formuliert die Eigenschaften von LISP
1 9 5 9 McCarthy schafft die theoretische Grundlage („Recursive Functions of Symbolic Expressions and their Computation by Machine“) 1 9 6 0 / 6 2 LISP1 / LISP 1.5 (MIT), lange ein Quasistandard
1 9 6 6 BBN LISP (Bolt, Beranek & Newman), MAC LISP (Project MAC am MIT), 1973 BBN LISP in InterLISP-10 umbenannt
1 9 7 5 LISP Machine LISP , Scheme (MIT), FranzLISP (MAC LISP auf Unix, Berkeley), UCI-LISP 1 9 7 7 LISP-Maschinen-Entwicklung beginnt am MIT
1 9 7 8 NIL für kommerzielle timesharing-Systeme
1 9 8 0 ZetaLISP ( Symbolics), LM LISP (LMI), InterLISP-D (Xerox), SPICE LISP (CMU) 1 9 8 1 LISP-Maschinen kommen auf den Markt, LeLISP
1 9 8 2 S1 LISP für Supercomputer mit MultiProcessing (CMU, MIT, Lawrence Livermore Lab) CommonLISP (viele Firmen und Institutionen)
...
Anfang 90er: EuLISP, ISO LISP AutoLISP für AutoCAD-Systeme ...
! &
Lisp ist (in erster Linie) eine interpretierte Sprache.
Ein Lisp-System stellt eine Programmierumgebung zur Verfügung.
Lisp-Ausdrücke werden gelesen, evaluiert, das Resultat gedruckt (read-eval-print loop).
lisp -> 5 5
-> -2.71 -2.71 -> (+ 3 4) 7
-> (* 2 3 -1) -6
-> (/ (+ 81 12) 3) 31
-> (* 2 (_ 15 8))
Error: eval: Undefined function _
<1>: (return '-) 14
-> (exit)
-> (defun square (num) (* num num)) square
-> (square 9) 81
-> (defun in-order (first second third)) (cond ((> first second)(> second third)))) in-order
-> (in-order 3 2 1) t
-> (in-order 1 2 3) nil
Alle Programme sind Funktionen, d.h.
• erwarten 0 oder mehr Argumente
• geben genau einen Wert aus
• sind entweder vordefiniert oder nach Wunsch geschrieben
Konsequenz:
Programmieren = Funktionen schreiben
Einführung weiterer Sprachkonstrukte
(setq, car, cdr etc): -> angegebene Literatur
! (
)
Grundlage logikbasierter Systeme: automatische Theorembeweiser
)
basieren in vielen Fällen auf der Resolutionsregel:
*
allgemeineres Schlußverfahren als Modus ponens
+
arbeitet auf Formeln in Klauseldarstellung
,
Resolutionsbeweiser sind zwar allgemein langsam, für Hornklauseln in der Aussagenlogik jedoch sehr effizient
,
sind auf Klauseln der Prädikatenlogik erweiterbar und haben dort für Hornklauseln immer noch Effizienzvorteile
PROLOG
D E FG H IJ FKL K M FH NH OH NP
– Probleme können als logische Aussagen formuliert werden (Theoreme, die man "anfragt").
– Das zur Lösung eines Problems benötigte Wissen kann ebenfalls in Form logischer Aussagen ausgedrückt werden (Axiome, die man "assertiert").
– Die Lösung eines Problems besteht dann im Finden eines logischen Beweises für das angefragte Theorem.
Idee: Das Finden des Beweises wird einem automatischen Theorembeweiser übertragen, der den Beweis (sofern existent) konstruieren kann.
Damit reduziert sich das Problemlösen auf ein ein Formulierungsproblem.
(Aber: noch nicht in vollem Umfang erreicht!)
- . / 0 123 4 5 6 7 8 3 9: 0 ; 3 6 ; 3 1 < = 6 4 92> ? : 3 6 @ 6 93 22> 7 3 6 A B B
Modus ponens
A → B
QA v B A A B B
Modus tollens
A → B
QA v B
Q
B
QB
Q
A
QA
Resolution
A v B
QB v C A v C
Resolution ist eine allgemeinere Schlußregel; sie beinhaltet zugleich Modus ponens und Modus tollens.
D E FG H IJ FKL K M FH NH OH NP
Direkter Beweis
+
bei den Axiomen beginnen
+
Schlußregeln anwenden, bis zu beweisender Satz dasteht.
Beweis durch Widerlegung (indirekt)
+
Nimm an, die Verneinung (das Negat) des Theorems sei wahr.
+
Zeige, daß die Axiome und das Negat zusammen etwas als wahr bezeichnen, das nicht stimmt.
+
Folgere, daß das Negat nicht wahr sein kann, da ein Widerspruch folgt.
+
Schließe, daß das Theorem wahr sein muß, da das Negat nicht wahr
sein kann.
- . / 0 123 4 5 6 7 8 3 9: 0 ; 3 6 ; 3 1 < = 6 4 92> ? : 3 6 @ 6 93 22> 7 3 6 A B S
Ich trage die
Sonnenbrille ODER Es regnet Es regnet
nicht
ODER Ich nehme den Schirm mit Ich trage die
Sonnenbrille ODER Ich nehme den Schirm mit
gegeben:
gegeben:
Schluß:
A B
Q
B C
A C
D E FG H IJ FKL K M FH NH OH NP
Ich trage die
Sonnenbrille ODER Es regnet Es regnet
nicht
ODER Ich nehme den Schirm mit Ich trage die
Sonnenbrille ODER Ich nehme den Schirm mit
gegeben:
gegeben:
gilt:
A B
Q
B C
A C
A v B
QB v C
QA &
QC
Q
B
B
∅
?
Das Negat der Anfrage
also gilt: A v C
Beweis durch
Widerlegung
des Gegenteils
- . / 0 123 4 5 6 7 8 3 9: 0 ; 3 6 ; 3 1 < = 6 4 92> ? : 3 6 @ 6 93 22> 7 3 6 A B U
,
Unifikation ermöglicht die Anwendung des Resolutions- verfahrens auf Klauseln, die scheinbar nichts miteinander zu tun haben (d.h. verschiedene Variablen haben)
=> Erweiterung des Resolutionsverfahrens auf die Prädikatenlogik
,
Unifikation:
Prozeß des Findens von Variablensubstitutionen in zwei Ausdrücken, die die Ausdrücke gleich machen
D E FG H IJ FKL K M FH NH OH NP
Freund (x,Hans) Freund (Fritz,y)
unifiziert mit der Variablensubstitution {x/Fritz, y/Hans}
Freund (x,x)
Freund (Fritz,Hans)
unifiziert nicht (x kann nicht zwei Dinge zugleich sein) Freund (Fritz,Hans)
?
- . / 0 123 4 5 6 7 8 3 9: 0 ; 3 6 ; 3 1 < = 6 4 92> ? : 3 6 @ 6 93 22> 7 3 6 A B V
D E FG H IJ FKL K M FH NH OH NP
Für alle x, y, z, ... gelte die Aussage C1 und C2 und ... und Cn
(Voraussetzung).
Dann gilt auch die Aussage A1 oder A2 oder ... oder Ak (zu Zeigendes).
Abstrakte Form eines Theorems:
Beweis:
Man zeigt, daß für jede Einsetzung der in den Cj vorkommenden
Variablen mit Konstanten
auch die zu zeigende
Aussage wahr ist.
- . / 0 123 4 5 6 7 8 3 9: 0 ; 3 6 ; 3 1 < = 6 4 92> ? : 3 6 @ 6 93 22> 7 3 6 A B X
– Jede geschlossene Formel der Prädikatenlogik läßt sich in eine äquivalente KNF in Pränexform bringen (alle Quantoren stehen vorn).
Der Pränex-Teil enthält aber u.U. noch Existenzquantoren.
– Beseitigt man in einer KNF die Existenzquantoren (durch sog. Skolemisierung), so erhält man die Skolem-Normalform; diese ist zwar nicht äquivalent zur
Ausgangsformel, aber immerhin erfüllbarkeitsäquivalent, und das reicht.
– Die Skolem-Normalform wird in der Literatur häufig auch als "Klauselform"
bezeichnet.
Eine Klausel hat die Gestalt:
∀x1...∀xs (L1 ∨ ... ∨ Lm) Lj:
Literale– Die Skolem-Normalform (Klauselform) besteht aus einer Konjunktion von Klauseln (die wiederum Disjunktionen von Literalen sind).
– Auf Klauseln läßt sich das Resolutionsverfahren anwenden.
D E FG H IJ FKL K M FH NH OH NP
∀ x1... ∀ xs (L1 ∨ ... ∨ Lm)
∀ x1... ∀ xs (A1 ∨ ... ∨ Ak ∨ ¬ C1 ∨ ... ∨ ¬ Cn)
∀ x1... ∀ xs (A1 ∨ ... ∨ Ak <− C1 & ... & Cn)
( A1 , ... , Ak <− C1 , ... , Cn) Kurzschreibweise:
Atome oder negierte Atome
- . / 0 123 4 5 6 7 8 3 9: 0 ; 3 6 ; 3 1 < = 6 4 92> ? : 3 6 @ 6 93 22> 7 3 6 A R B
∀x1...∀xs (A ∨
¬
C1 ∨ ... ∨¬
Cn)∀x1...∀xs (A <− C1 & ... & Cn)
( A <− C1 , ... , Cn)
Beschränkung auf Klauseln mit höchstens einem nicht negierten Atom:
Prozedurale Semantik: Um A zu zeigen, müssen die Cj gezeigt werden.
D E FG H IJ FKL K M FH NH OH NP
Eine Definition von "Großvater":
Für alle x, für alle y, für alle z gilt:
x ist Großvater von y, wenn
x Vater von z ist und z Vater von y.
oder ganz formal:
∀x∀y∀z (grossvater x y) ← (vater x z)(vater z y) Die entsprechende Definition
"über die Mutter":
∀x∀y∀z (grossvater x y)
← (vater x z)(mutter z y)
In PROLOG gelten alle Variablen als implizit
allquantifiziert (d.h. die operationale Semantik erlaubt Ersetzungen durch beliebige, in der Wissensbasis vorhandene Terme); Quantoren werden weggelassen:
(grossvater ?x ?y) 1 ← (vater ?x ?z)(vater ?z ?y)
(grossvater ?x ?y) 2
← (vater ?x ?z)(mutter ?z ?y)
Seien jetzt diese beiden Implikationen (Regeln) assertiert, zusammen mit folgenden Fakten:
(vater fritz hans) (vater fritz klara) (mutter klara peter)
Ist Fritz ein Großvater?
("?" kennzeichnet implizit allquantifizierte Variablen)
(grossvater fritz ?u)
- . / 0 123 4 5 6 7 8 3 9: 0 ; 3 6 ; 3 1 < = 6 4 92> ? : 3 6 @ 6 93 22> 7 3 6 A R S
show: (grossvater fritz ?u) show: (vater fritz ?z) success: (vater fritz hans) show: (vater hans ?y) redo: (vater hans ?y) fail: (vater hans ?y) redo: (vater fritz ?z) success: (vater fritz klara) show: (vater klara ?y) redo: (vater klara ?y) fail: (vater klara ?y)
(grossvater fritz ?u)
(grossvater ?x ?y) (grossvater ?x ?y)
(vater ?x ?z) (vater ?z ?y) (vater ?x ?z) (mutter ?z ?y)
(vater fritz
hans)
(vater fritz klara)
(vater fritz
hans)
(vater fritz klara)
(vater fritz
hans)
(vater fritz klara)
(mutter klara peter)
1 2
redo: (grossvater fritz ?u) show: (vater fritz ?z) success: (vater fritz hans) show: (mutter hans ?y) fail: (mutter hans ?y) redo: (vater fritz ?z) success: (vater fritz klara) show: (mutter klara ?y) success: (mutter klara peter) success: (grossvater fritz peter)
Mit diesem Beispiel werden wir uns in Kap. 6 noch ausführlicher beschäftigen!
D E FG H IJ FKL K M FH NH OH NP
,
Charniak & McDermott, Kapitel 2, Seite 33-48
,