Logische Programmierung

Als ob ein vernünftiger Quelltext nicht immer logisch wäre! - Ja OK, so ist es natürlich nicht gemeint. Es um ein vollständig anderes Programmier-Paradigma. Die Sprache, die wir zur logischen Programmierung verwendet haben heißt Prolog.

Kurze Vorbemerkung:

Prämisse Voraussetzung oder Annahme
Konklusion Folgerung aus den Prämissen
Modus ponens Schlussregel

Hier kommt Schluss nicht von Ende, sondern von implizieren.

Vorgehensweise

  1. Wissensbasis aufstellen
    1. direkte Angaben durch Fakten: Prädikat(Konstante).
    2. indirekte Angaben durch Regeln: Regelkopf :- Regelrumpf.
  2. Anfrage formulieren

Hinweise:

  • :- Implikation
  • , Konjunktion (UND)
  • ; Disjunktion (ODER)
  • Alle Worte mit großem Anfangsbuchstaben sind Variablen.

Fakten und Regeln

Modellierungsansatz
Eine (Mini-)Welt besteht aus Objekten (Personen, Gegenständen, …),
die Eigenschaften haben und in Beziehung zueinander stehen.
Objekte: Hera, Zeus.
Eigenschaften: weiblich, männlich.
Beziehung: ist verheiratet mit.
Objekte werden mit Konstanten (allg. mit Termen) beschrieben,
Eigenschaften und Beziehungen mit Hilfe von Prädikaten.
Konstanten: Zeus, Hera.
Prädikate: weiblich, männlich, verheiratet.
Sachverhalte der Miniwelt können
direkt mit Hilfe von Fakten beschrieben werden.
Fakten: Prädikat(Konstanten)
weiblich(hera).
maennlich(zeus).
verheiratet(zeus,hera).
weiblich(maja).
kind(hermes, zeus).
kind(hermes, maja).
Sachverhalte der Miniwelt können
auch indirekt mit Hilfe von Regeln beschrieben werden.
Regeln:
vater(X, Y) :- kind(Y, X), maennlich(X).
mutter(X, Y) :- kind(Y, X), weiblich(X).

Regeln

  • Regeln sind Wenn-Dann-Aussagen: (siehe Tabelle oben)
  X ist Vater von Y, wenn Y ein Kind von X ist und X männlich ist. 
  X ist Mutter von Y, wenn Y Kind von X ist und X weiblich ist.
  • rekursive Regeln
    Das Prädikat im Regelkopf darf im Regelrumpf vorkommen:
vorfahr(X, Y) :- kind(Y, X).
vorfahr(X, Y) :- kind(Y, Z), vorfahr(X, Z).
  • Regeln mit dem gleichen Regelkopf bilden eine Disjunktion, werden also mit oder verknüpft. Man kann statt dessen die Regelrümpfe auch mit Semikolon getrennt hintereinander schreiben.
  • Zwei Aussagen (zwei goals), die durch Komma getrennt werden, bilden eine Konjunktion, werden als mit und verknüpft.

Beispiele

Ein Familienbeispiel:

maennlich(lucas).
maennlich(linus).
maennlich(claudius).
weiblich(birgit).
verheiratet(birgit,claudius).
 
 
eltern(birgit,linus).
eltern(claudius,lucas).
 
eltern(X,Y):-verheiratet(X,Z),eltern(Z,Y).
eltern(X,Y):-verheiratet(Z,X),eltern(Z,Y).

Abfrageergebnis:

?- eltern(claudius,X).
X = lucas n
X = linus n
X = lucas n
X = linus n
X = lucas n
X = linus n
X = lucas n
X = linus n
X = lucas n
X = linus n
...

Die Rettung:

maennlich(lucas).
maennlich(linus).
maennlich(claudius).
weiblich(birgit).
verheiratet(birgit,claudius).
 
 
kind(linus,birgit).
kind(lucas,claudius).
 
eltern(X,Y):-kind(Y,X).
eltern(X,Y):-verheiratet(X,Z),kind(Y,Z).
eltern(X,Y):-verheiratet(Z,X),kind(Y,Z).

Abfrageergebnis:

?- eltern(claudius,X).
X = lucas n
X = linus n
false.

?- 

Rekursion ist in Prolog zwar möglich, jedoch muss sie auch hier abbrechen um Endlosschleifen zu verhindern.

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Noncommercial-Share Alike 4.0 International