Deklarative Programmierung und wissensbasierte Systeme
Du fragst ein System: „Wer sind die Großeltern von Clara?“ Du schreibst dafür keine Schleife über alle Personen. Du sagst, was du wissen willst, und das System findet die Antwort. Bisher hast du Programme geschrieben, die Schritt für Schritt vorgeben, wie etwas berechnet wird. Es geht auch anders: Man beschreibt, was gilt oder was gesucht ist, und überlässt den Lösungsweg dem System.
Zwei Wege führen dorthin. Bei der funktionalen Modellierung ist ein Programm eine Kombination von Funktionen. Bei der logischen Modellierung ist es eine Sammlung von Fakten und Regeln, aus denen das System Antworten herleitet. So entsteht ein wissensbasiertes System, zum Beispiel ein Stammbaum, der Verwandtschaftsfragen beantwortet.
Funktionale Modellierung
Ein funktionales Programm besteht aus Funktionen im mathematischen Sinn: Das Ergebnis hängt nur von den Argumenten ab, und keine Variable ändert im Lauf des Programms ihren Wert. Solche Funktionen heißen rein. Schleifen werden durch Rekursion ersetzt. Zwei Mittel prägen den Stil:
- Kombination: Eine Funktion ruft andere Funktionen auf oder bekommt deren Ergebnis als Argument. So entstehen aus kleinen Funktionen größere.
- Abstraktion: Ein Muster, das mehrfach vorkommt, wird zu einer Funktion mit Parameter. Auch eine Funktion kann Parameter sein (Funktion höherer Ordnung).
Wir schreiben die Funktionen in Python-Schreibweise, aber ohne Schleifen und ohne veränderte Variablen.
Funktionen kombinieren und abstrahieren
Funktionen kombinieren und abstrahieren
| Zeile | Einrückung | Anweisung |
|---|---|---|
| 1 | 0 | |
| 2 | 1 | |
| 3 | 0 | |
| 4 | 1 | |
| 5 | 0 | |
| 6 | 1 |
Was liefern und ?
Zeile 3 und 4 kombinieren: ist , also .
Zeile 5 und 6 abstrahieren: wendet eine beliebige Funktion auf jedes Element an. Die Abbruchbedingung ist die leere Liste. Für entsteht gefolgt vom Ergebnis für , am Ende .
Regelbasierte und logische Modellierung
Hier beschreibst du ein Gebiet durch Wissen. Wir nutzen die Schreibweise der Sprache Prolog. Grundlage ist die Prädikatenlogik: Ein Prädikat ist eine Aussage über Dinge, etwa für „Anna ist Elternteil von Ben“. Die Zahl der Argumente heißt Stelligkeit, ist zweistellig. Namen mit kleinem Anfangsbuchstaben sind feste Dinge, Namen mit großem Anfangsbuchstaben sind Variablen. Aussagen mit Variablen gelten für alle Belegungen (Allquantor ). Eine Anfrage mit Variablen fragt, ob es mindestens eine Belegung gibt (Existenzquantor ).
Das Wissen steht in Klauseln, hier in zwei Arten:
- Ein Fakt ist eine Klausel ohne Bedingung, etwa
- Eine Regel liest man „kopf gilt, wenn rumpf gilt“. Im Rumpf bedeutet das Komma „und“. „Oder“ schreibst du als mehrere Regeln mit demselben Kopf.
Eine Anfrage beginnt mit und fragt, ob eine Aussage aus dem Wissen folgt und für welche Werte der Variablen. Fakten und Regeln zusammen heißen Wissensbasis. Eine Regel entspricht einer Formel der Prädikatenlogik:
Wissensbasis zum Stammbaum
Wissensbasis zum Stammbaum
| Zeile | Einrückung | Anweisung |
|---|---|---|
| 1 | 0 | |
| 2 | 0 | |
| 3 | 0 | |
| 4 | 0 | |
| 5 | 0 | |
| 6 | 0 | |
| 7 | 0 | |
| 8 | 0 |
Welche Antworten liefert die Anfrage ?
Regel 6 verlangt ein mit und dann . Für gibt Zeile 3 die Antwort . Für geben Zeile 4 und 5 die Antworten und . Es gibt drei Antworten, in dieser Reihenfolge.
Die Regeln 7 und 8 definieren rekursiv: Regel 7 ist der Abbruch, Regel 8 der rekursive Schritt.
Inferenzmaschine, Tiefensuche und Backtracking
Die Inferenzmaschine leitet aus der Wissensbasis Antworten her. Sie arbeitet rückwärts vom Ziel:
- Sie sucht von oben nach unten die erste Klausel, deren Kopf zum Ziel passt, und bindet dabei Variablen an Werte.
- Bei einem Fakt ist das Ziel erfüllt. Bei einer Regel werden die Teilziele des Rumpfs von links nach rechts bearbeitet.
- Findet sie für ein Teilziel keine Klausel, schlägt es fehl. Dann kehrt sie zum letzten Punkt zurück, an dem noch eine andere Klausel zur Wahl stand, löst die Bindungen wieder und probiert die nächste. Das ist Backtracking.
Alle Möglichkeiten bilden einen Baum, in dem jedes Ziel zu Teilzielen verzweigt. Die Inferenzmaschine durchläuft ihn per Tiefensuche: Sie folgt einem Pfad bis zum Erfolg oder Misserfolg und geht erst dann zurück. Das ist dasselbe Prinzip wie bei der Tiefensuche in Graphen und beim Backtracking in der Rekursion.
Eine Anfrage Schritt für Schritt beantworten
Eine Anfrage Schritt für Schritt beantworten
Die Anfrage an die Wissensbasis oben. Wie sucht die Inferenzmaschine?
| Schritt | Ziel | Was passiert |
|---|---|---|
| 1 | mit Regel 7 | neues Ziel : kein Fakt passt, Misserfolg |
| 2 | dasselbe Ziel mit Regel 8 | neue Ziele und |
| 3 | erster Fakt: | |
| 4 | Regel 7 misslingt. Regel 8 gibt , dann | |
| 5 | Regel 7 misslingt, für Regel 8 gibt es keinen Fakt : Misserfolg | |
| 6 | Backtracking | Für gibt es keinen weiteren Fakt, also misslingt auch Schritt 4. Zurück zu Schritt 3: nächster Fakt, |
| 7 | Regel 7: ist ein Fakt. Erfolg |
Antwort: . Der Weg über Ben war eine Sackgasse, die Tiefensuche hat sie erst vollständig durchlaufen und dann die Alternative gewählt.
Wissensbasis modellieren und implementieren
Vorgehen: Du klärst, welche Dinge und Beziehungen vorkommen, und legst die Prädikate mit Stelligkeit fest. Gesicherte Tatsachen werden Fakten, allgemeine Zusammenhänge Regeln. Zuletzt testest du mit Anfragen, die gelingen, und mit solchen, die misslingen sollen.
Beispiel Schulbibliothek: Mitglieder dürfen verfügbare Bücher ausleihen. Fakten: Regel: Die Anfrage liefert und . Die Anfrage liefert , weil nicht in der Wissensbasis steht. Was nicht herleitbar ist, gilt dem System als falsch (Annahme der geschlossenen Welt).
Imperative und deklarative Programmierung im Vergleich
| Merkmal | imperativ | deklarativ |
|---|---|---|
| Programm | Befehlsfolge, die den Zustand ändert | Funktionen oder Fakten und Regeln |
| Ablauf | legt die Programmiererin fest | bestimmt das System (Auswertung, Inferenzmaschine) |
| Stärke | genaue Kontrolle über Ablauf und Speicher | kurz, nah an der Problembeschreibung, gut prüfbar |
| Schwäche | länger, mehr Fehlerquellen durch Zustände | Laufzeit schwer vorhersagbar |
SQL ist ebenfalls deklarativ: beschreibt das Ergebnis, nicht den Weg. Die Regel ist eine Zeile, imperativ bräuchtest du zwei verschachtelte Schleifen über alle Elternpaare.
Die Reihenfolge der Klauseln ist egal
Die Reihenfolge der Klauseln ist egal
„Logisch ist es gleich, wo eine Regel steht. Also darf ich sie beliebig anordnen.“
Logisch stimmt das, für die Inferenzmaschine nicht. Sie probiert Klauseln von oben nach unten und Teilziele von links nach rechts. Das ändert die Reihenfolge der Antworten und kann eine Endlosschleife auslösen: Die Regel ruft sich als erstes Teilziel selbst auf und kommt nie zu einem Fakt.
false heißt: in der Wirklichkeit falsch
false heißt: in der Wirklichkeit falsch
„Das System antwortet false, also stimmt die Aussage nicht.“
heißt nur: Die Aussage ist aus der Wissensbasis nicht herleitbar. Fehlt ein Fakt, antwortet das System trotz wahrer Aussage mit .
Zusammenfassung
Deklarative Programme beschreiben, was gilt oder gesucht ist. Der Lösungsweg liegt beim System.
Funktionale Programme bestehen aus reinen Funktionen. Kombination baut größere aus kleineren, Abstraktion fasst Muster zu Funktionen zusammen.
Eine Wissensbasis besteht aus Klauseln: Fakten und Regeln der Form kopf :- rumpf. Prädikate mit Variablen stammen aus der Prädikatenlogik.
Die Inferenzmaschine arbeitet rückwärts vom Ziel per Tiefensuche. Schlägt ein Teilziel fehl, probiert sie per Backtracking die nächste Klausel.
Die Reihenfolge der Klauseln kann Antworten und Abbruch der Suche beeinflussen. false heißt nur: nicht herleitbar.
Wissensbasen entstehen in Schritten: Beziehungen finden, Prädikate festlegen, Fakten und Regeln schreiben, mit Anfragen testen.
Übungen
Mit den Funktionen aus dem Beispiel: Welchen Wert liefert summe_quadrate(5, 12)?
Welche Funktion ist rein im Sinne der funktionalen Modellierung?
Welches Ergebnis liefert die Anfrage ?- vorfahre(ben, finn). an die Wissensbasis des Stammbaums?
Formuliere eine Regel geschwister(X, Y) für den Stammbaum. Erkläre, welche zusätzliche Bedingung nötig ist und warum.