Was ist Logische Programmierung?

Werbung
Was ist Logische Programmierung?
Die Bedeutung eines Computer-Programms kann durch
Logik erklärt werden.
Die Idee der logischen Programmierung besteht darin, die
Logik eines Programms selber als Programm zu betrachten.
Was ist Logische Programmierung? 1
Was ist Logische Programmierung?
Programme, um die Länge einer Liste zu bestimmen.
Modula-2
PROCEDURE length(x: list): INTEGER;
VAR n: INTEGER;
BEGIN
n := 0;
WHILE x # NIL DO
n := n + 1;
x := x^.cdr
END;
RETURN n
END length.
Bedeutung (Spezifikation)
IF Liste leer
IF Liste nicht leer
THEN Länge = 0
THEN Länge = Länge des
Schwanzes der Liste + 1
Prolog
length([], 0).
length([X|Xs], N):length(Xs, N1),
N is N1+1.
Was ist Logische Programmierung? 2
Was ist Logische Programmierung?
Die logische Programmierung verwendet
Logik für die explizite Repräsentation von Wissen, d.h.
von Problemen und ihren Lösungen
logische Inferenz (Beweise) zur Lösung dieser Probleme
Konkret ist
die Repräsentationssprache eine Teilmenge der
Prädikatenlogik – Hornklauseln
die Problemlösungsmethode eine spezielle Form der
logischen Inferenz – Resolution
Während des Beweises werden Unbekannte an Werte
gebunden, die die Lösung darstellen (konstruktiver Beweis).
Was ist Logische Programmierung? 3
Prolog
In der logischen Programmiersprache Prolog kommen aus
Effizienzgründen hinzu
eine Kontrollstrategie für die Resolution
Algorithmus = Logik + Kontrolle
nichtlogische Systemprädikate, z.B. für Arithmetik und
die Ein- und Ausgabe
Was ist Logische Programmierung? 4
Deklarative und prozedurale Interpretation
Programme, um die Länge einer Liste zu bestimmen.
Modula-2
PROCEDURE length(x: list): INTEGER;
VAR n: INTEGER;
BEGIN
n := 0;
WHILE x # NIL DO
n := n + 1;
x := x^.cdr
END;
RETURN n
END length.
Prolog
length([], 0).
length([X|Xs], N):length(Xs, N1),
N is N1+1.
Was ist Logische Programmierung? 5
Deklarative und prozedurale Interpretation
Logische Programme haben eine deklarative und eine
prozedurale Interpretation.
Eine Prolog-Klausel
K :- B1, B2, ..., Bn.
wird in der deklarativen Interpretation gelesen
K gilt, wenn B1 und B2 und ... und Bn gelten.
Die deklarative Interpretation erlaubt, über die logische
Korrektheit der Klausel zu diskutieren.
In der prozeduralen Interpretation wird die Klausel als
Definition einer Prozedur durch eine Reihe von
Prozeduraufrufen gelesen
Um K zu beweisen, beweise B1, dann B2, dann ...
schliesslich Bn.
Die prozedurale Interpretation wird durch den Ablauf des
Programms bestimmt. Sie ist die Interpretation, die durch die
Kontrollstrategie des Prolog-Interpreter geliefert wird.
Was ist Logische Programmierung? 6
Beispiel
Alle Mütter lieben ihre Kinder.
Marion ist die Mutter von Thomas.
-----------------------------------------------Marion liebt Thomas.
Prädikatenlogik
"X("Y( mutter(X) Ÿ kind(Y, X) Æ liebt(X, Y)))
mutter(marion) Ÿ kind(thomas, marion)
--------------------------------------------------------------liebt(marion, thomas)
liebt(Mutter, Kind) ?
Mutter=marion, Kind=thomas
Was ist Logische Programmierung? 7
Beispiel
Prolog
liebt(X,Y) :- mutter(X), kind(Y, X).
mutter(marion).
kind(thomas, marion).
---------------------------------------------
?- liebt(Mutter, Kind).
Mutter=marion, Kind=thomas
Was ist Logische Programmierung? 8
Vorteile der Logischen Programmierung
Wissen wird deklarativ, d.h. explizit und maschinenunabhängig dargestellt.
Wissen wird damit vielseitig verwendbar.
Logische Programme ähneln eher Spezifikationen, d. h. sie
sind kompakt, verständlich und flexibel.
Die logische Programmierung kann Metawissen, andere
Logiken und nicht-logische Wissensrepräsentationen
darstellen.
Was ist Logische Programmierung? 9
Vorteile der Logischen Programmierung
Die Ergebnisse eines logischen Programms folgen logisch
aus ihm.
Logische Programme haben eine saubere mathematische
Basis, d. h. man kann die Beziehungen zwischen
logischen Programmen und ihren Resultaten
logischen Programmen und ihren Spezifikationen
logischen Programmen und aus ihnen abgeleiteten
anderen logischen Programmen
klar charakterisieren.
Damit bildet die logische Programmierung eine uniforme
Grundlage für alle Phasen der Programmentwicklung.
Was ist Logische Programmierung? 10
(Vermeintliche) Schwächen der Logischen Programmierung
Die oft gehörte Aussage Prolog ist langsam. ist falsch.
Bezüglich Effizienz und Komfort der Programmierumgebung
haben moderne Prolog-Implementationen mit herkömmlichen
Sprachen praktisch gleichgezogen.
Allerdings ist Prolog – wie jede andere Programmiersprache
auch – nicht für jedes Problem die geeignetste Sprache.
Alle logischen Programmiersprachen mischen deklarative
(logische) Elemente mit prozeduralen (nichtlogischen).
Für notwendige Seiteneffekte (destructive assignment, data
base updates) gibt es keine befriedigenden deklarativen
Lösungen.
D.h. man sollte die Kombination deklarativ/prozedural als
notwendig und nützlich akzeptieren.
Es stehen verschiedene prozedurale Interpretationen zur
Verfügung.
Was ist Logische Programmierung? 11
Herunterladen