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