Logische Programmierung & Programme


[ Zum Seminar "Programmierkonzepte und Programmiersprachen" ][ Zum Inhalt ][ PROLOG ]

Übersicht:



Der Umsturz der klassischen Programmdefinition


Die von Niklas Wirth aufgestellte klassische, prozedurale Definition von Programmen bestand aus zwei Teilen und sah folgendermassen aus:

Programs = Algorithms + Data Structures

Der Algorithmus stellten dabei den Anweisungsteil mit der Verarbeitungslogik, die DatenStrukturen den Deklarationsteil für Datenstrukturen dar.


Diese Sichtweise stürzte Robert Kowalski mit seiner 1979 aufgestellten Neudefinition wonach gelten sollte:

Algorithms(Programs) = Logic + Control

Die beiden Komponenten sollten hierbei als völlig unabhängig voneinander und austauschbar angesehen und angewendet werden.
Die logische Komponente spezifiziert hierbei das Wissen, dass zur Problemlösung gebraucht wird.
Sie drückt aus was der Algorithmus leisten soll.
Die steuernde Komponente benutzt dieses Wissen nach einer Lösungsstrategie und steuert somit die Effizienz des Algorithmus bzw. Programms.
Sie sagt aus wie der Lösungsalgorithmus arbeitet.



Grundgedanke


Der Grundgedanke der logischen Programmierung lässt sich sehr einfach in folgender Grafik darstellen:
(
Quelle: Bolkart : Programmiersprachen der 4. und 5. Generation)



ggd.gif nicht gefunden...


Auf Basis möglichst genauen Wissens über einen speziellen Problembereich sollen angemessene Schlüsse gezogen werden um so eine Antwort ( wenn es eine gibt) zu finden.
Charakteristisch für die logische Programmierung ist die klare Trennung von Daten (in der Grafik die Wissensbasis) und dem Verfahren (die Schlussfolgerungen), welches dieses Wissen nutzt um das gestellte Problen zu lösen.


Eine (schöne) Defintition


Ein Logikprogramm ist eine Menge von Axiomen oder Regeln, die die Beziehungen zwischen Objekten definieren.
Die Berechnung eines Logikprogramms ist die Ableitung der Folgerungen dieses Programms.
Ein Programm definiert eine Menge von Folgerungen, die seine Bedeutung sind.
Die Kunst der Logikprogrammierung ist das Schreiben kurzer und eleganter Programme, die die beabsichtigte Bedeutung haben.
(
Quelle: Sterling,Shapiro : PROLOG)

Was leider nicht genau Definiert ist, ist die Zeichenwahl. Im folgenden habe ich daher einen PROLOG-änlichen Zeichen-Bedeutungssatz verwendet.


Grundlegende Elemente


Basis der logischen Programmierung ist die Prädikatenlogik.
(Man findet dazu allerlei in den
FH-Wedel Pages, bei wikipedia oder Mama Google)

Jetzt aber zu den grundlegenden Elementen:

1.Fakten
Bsp: männlich(isaak). oder vater(abraham,isaak).
Fakten regeln die Beziehung von Objekten zueinander ( wie im Beispiel in der Relation namens "vater" zwischen den Objekten "isaak" und "abraham") und stellen Aussagen über Objekte dar (männlich(isaak)).
Die einfachste Form eines Logikprogramms ist daher eine Menge von Fakten.

2.Objekte/Atome/Konstanten
Bezogen auf das Beispiel für die Fakten stellen "isaak" und "abraham" die Art der Objekte dar.Es können ausser Namen auch Zahlen sein.

3.(An-)Fragen
Anfragen werden zur Gewinnung von Informationen aus Logikprogrammen verwendet.
Mit der Anfrage vater(abraham,isaak)? fragen wir in unserer Wissensbasis an ob es eine Realtion namens "vater" zwischen den Objekten "abraham" und "isaak" gibt.

4.Variablen
Variablen sind in der logischen Programmierung ungetypt, können also Werte jeder Art annehmen.
In der Anfrage vater(abraham,X )? ist das X die variable und würde mit dem Wert "isaak" belegt werden.

5.Regeln
Regeln sind Formulierungen die zur Bildung neuer Beziehungen zwischen Objekten mittels alter, existierender genutzt werden.
Bsp: sohn (X,Y) ← vater(Y,X), männlich (X).


Ein logisches Programm (also ein Beispiel)


Die Regel für Traumschiff-Crewmitglieder:
crewmitglied(traumschiff,X) ← misswaikiki(X),mag(kaesesahne,X).

Weitere Eingaben in die Wissensbasis:
misswaikiki(mrspuck).
mag(kaesesahne,mrspuck).
misswaikiki(kaeptnkork).
mag(kaesesahne,kaeptnkork).
misswaikiki(schrotty).
mag(kaesesahne,schrotty).


Stellt man folgende Anfrage:
crewmitglied(traumschiff,X) ?

ergeben sich für die Variable X folgende Werte:
{X=mrspuck} {X=kaeptnkork} {X= schrotty}

So erhält man mittels Schlussfolgerungen "neue" Informationen aus der Wissenbasis, die nicht direkt eingegeben werden mussten.
Deswegen nennt man Wissensbasen auch Deduktive Datenbanken, da sie nicht nur reines Wissen(Fakten), sodern auch Regeln enthalten aus denen neues Wissen gewonnen werden kann.


[ Zum Seminar "Programmierkonzepte und Programmiersprachen" ][ Zum Inhalt ][ Seitenanfang ][ PROLOG ]