Skip to content

Wissensbasierte Ansätze & Prolog ​

Warum Prolog im KI-Kapitel?

Bei Künstlicher Intelligenz denken wir heute oft zuerst an Machine Learning, neuronale Netze oder Sprachmodelle. Ein anderer grundlegender KI-Ansatz arbeitet jedoch nicht primär mit Trainingsdaten, sondern mit explizit formuliertem Wissen.

Bei solchen wissensbasierten Systemen werden Fakten und Regeln in einer Wissensbasis gespeichert. Eine Inferenzmaschine versucht daraus passende Antworten und neue Schlussfolgerungen abzuleiten.

Prolog eignet sich besonders gut, um dieses Prinzip sichtbar zu machen:

Wissen → Fakten und Regeln → Anfrage → Schlussfolgerung

Wir lernen damit einen wichtigen Zugang der KI kennen und können später gut vergleichen, wie sich wissensbasierte und datenbasierte Verfahren unterscheiden.

Orientierung

Auf dieser Seite findest du zuerst den Lerntext. Die praktischen Arbeitsaufträge stehen gesammelt am Ende.

Direkt zu den Arbeitsaufträgen

Wissensbasierte KI und Expertensysteme ​

Bei einem wissensbasierten Ansatz wird Wissen ausdrücklich beschrieben, zum Beispiel als:

  • Fakten,
  • Regeln,
  • Tabellen,
  • Suchstrategien,
  • Entscheidungsbäume.

Ein Expertensystem enthält Fachwissen in einer Wissensbasis. Eine Inferenzmaschine verwendet dieses Wissen, um Anfragen zu beantworten oder neue Aussagen abzuleiten.

text
WISSENSBASIS
Fakten + Regeln
      │
      ▼
INFERENZMASCHINE ◄──── Anfrage
      │
      ▼
Antwort / Schlussfolgerung

Ein historisch bekanntes Beispiel ist MYCIN. Das System arbeitete mit mehreren hundert medizinischen Regeln und unterstützte bei Empfehlungen zur Behandlung bakterieller Infektionen.

Warum ist dieser Ansatz interessant? ​

Wissensbasierte Systeme sind besonders geeignet, wenn:

  • Fachwissen klar formuliert werden kann,
  • Regeln nachvollziehbar sein sollen,
  • Schlussfolgerungen erklärbar bleiben sollen,
  • Wissen gezielt ergänzt oder verändert werden soll.

Ihre Grenze zeigt sich dort, wo sich ein Problem kaum vollständig mit festen Regeln beschreiben lässt. Schon das zuverlässige Erkennen von Tieren auf beliebigen Fotos würde sehr viele Sonderfälle erfordern. Für solche Probleme sind datenbasierte Verfahren oft geeigneter.

Merke

Bei wissensbasierter KI steckt das Wissen sichtbar in der Wissensbasis. Das System versucht, mit diesem Wissen logisch zu schließen.

Logik als Grundlage ​

Prolog greift Ideen aus der Theoretischen Informatik und der mathematischen Logik auf. Für den Einstieg reichen zwei Ebenen.

Aussagenlogik ​

In der Aussagenlogik betrachten wir vollständige Aussagen, die wahr oder falsch sein können.

text
A: Das Labor ist geöffnet.
B: Eine Lehrkraft ist anwesend.
C: Die Gruppe darf hinein.

Aussagen können logisch verknüpft werden:

LogikBedeutung
A ∧ BA UND B
A ∨ BA ODER B
¬ANICHT A
A → BWenn A, dann B

Zum Beispiel:

text
A ∧ B → C

liest man als:

Wenn das Labor geöffnet ist UND eine Lehrkraft anwesend ist, dann darf die Gruppe hinein.

Prädikatenlogik ​

Die Prädikatenlogik kann zusätzlich über Objekte, Eigenschaften, Beziehungen und Variablen sprechen.

prolog
besucht(lea, codelab).

Das Prädikat besucht/2 beschreibt eine Beziehung zwischen einer Person und einem Kurs.

Mit einer Variable wird daraus eine Suchfrage:

prolog
?- besucht(Person, codelab).

Prolog sucht nun passende Werte für Person.

Vereinfacht gesagt

Die Aussagenlogik verbindet ganze Aussagen.

Die Prädikatenlogik beschreibt zusätzlich wer oder was in einer Beziehung steht.

Prolog macht solche logischen Beziehungen programmierbar. Für die tatsächliche Ausführung verwendet Prolog zusätzlich eine konkrete Suchstrategie.

Prolog: Wissen statt Ablauf beschreiben ​

Prolog steht für Programming in Logic.

In vielen Programmiersprachen beschreiben wir Schritt für Schritt, wie ein Problem gelöst werden soll.

In Prolog formulieren wir vor allem:

  1. Fakten – Was gilt?
  2. Regeln – Was folgt woraus?
  3. Anfragen – Was möchten wir wissen?

Der Interpreter versucht anschließend, eine passende Herleitung zu finden.

SWISH im Browser ​

Für den Einstieg verwenden wir SWISH, eine browserbasierte Umgebung für SWI-Prolog:

SWISH öffnen

Alle benötigten Beispieldateien findest du gesammelt im Materialpaket:

📦 Prolog-Materialien herunterladen (ZIP)

Im Paket liegt jede Vorlage sowohl als .pl als auch als .txt vor. Für SWISH kannst du einfach die .txt-Datei öffnen, den Inhalt kopieren und links in den Editor einfügen.

Arbeiten mit SWISH ​

  1. Öffne SWISH.
  2. Füge den Prolog-Code links in den Editor ein.
  3. Gib rechts unter Your query eine Anfrage ein.
  4. Wähle Run!.
  5. Gibt es mehrere Lösungen, kannst du weitere Ergebnisse anzeigen lassen.

Erste Live-Demo: Wissen verknüpfen ​

Wir beginnen mit einer kleinen Mediathek.

prolog
ausleihe(lea, dune).
ausleihe(noah, hobbit).

genre(dune, science_fiction).
genre(hobbit, fantasy).

Das sind Fakten.

Eine erste Anfrage lautet:

prolog
?- ausleihe(lea, dune).

Ergebnis:

text
true

Mit einer Variable können wir suchen:

prolog
?- ausleihe(Person, dune).

Prolog findet:

text
Person = lea

Jetzt verbinden wir zwei Arten von Wissen:

prolog
liest_genre(Person, Genre) :-
    ausleihe(Person, Buch),
    genre(Buch, Genre).

Die Regel bedeutet:

Eine Person liest ein bestimmtes Genre, wenn sie ein Buch ausgeliehen hat und dieses Buch zu diesem Genre gehört.

Nun kann Prolog eine Aussage beantworten, die nicht als einzelner Fakt gespeichert wurde:

prolog
?- liest_genre(lea, science_fiction).

Ergebnis:

text
true

Genau darin steckt die zentrale Idee: Aus bekannten Fakten und Regeln wird eine neue Aussage abgeleitet.

Fakten ​

Ein Fakt beschreibt eine Eigenschaft oder Beziehung, die in der Wissensbasis als gegeben gilt.

prolog
ausleihe(lea, dune).
genre(dune, science_fiction).

Ein Fakt besteht aus:

  • einem Prädikatsnamen,
  • Argumenten in Klammern,
  • einem abschließenden Punkt.

Beispiel:

prolog
genre(dune, science_fiction).

Hier ist genre der Prädikatsname. Die beiden Argumente sind dune und science_fiction.

Atome, Variablen und _ ​

Konkrete symbolische Werte heißen in Prolog Atome.

prolog
lea
dune
science_fiction

Variablen beginnen mit einem Großbuchstaben:

prolog
?- ausleihe(Person, Buch).

Prolog sucht passende Belegungen für Person und Buch.

Die anonyme Variable _ verwenden wir, wenn uns ein bestimmter Wert nicht interessiert:

prolog
?- ausleihe(lea, _).

Die Anfrage prüft, ob Lea irgendein Buch ausgeliehen hat, ohne den Buchtitel als Variable weiterzuverwenden.

Regeln und Prädikate ​

Regeln beschreiben, unter welchen Bedingungen eine Aussage gilt.

prolog
liest_genre(Person, Genre) :-
    ausleihe(Person, Buch),
    genre(Buch, Genre).

Wichtige Zeichen:

PrologBedeutung
:-gilt, wenn
,UND
;ODER
_anonyme Variable
\+nicht beweisbar / Negation as Failure

Alle Fakten und Regeln mit demselben Namen und derselben Anzahl an Argumenten bilden ein Prädikat.

text
ausleihe/2
genre/2
liest_genre/2

Die Zahl gibt die Anzahl der Argumente an.

Die Inferenzmaschine ​

Die Inferenzmaschine versucht, eine Anfrage mithilfe der vorhandenen Fakten und Regeln zu beweisen.

Eine klassische Schlussregel ist der Modus ponens:

text
Wenn A gilt, dann gilt B.
A gilt.
⇒ B gilt.

Beispiel:

text
Wenn ein Gerät keinen Strom erhält, startet es nicht.
Das Gerät erhält keinen Strom.
⇒ Das Gerät startet nicht.

Auch ein Kettenschluss ist möglich:

text
A → B
B → C
⇒ A → C

Prolog automatisiert solche Schlussprozesse für formal beschriebene Fakten und Regeln.

Rekursion: Beziehungen beliebiger Länge ​

Manche Beziehungen bestehen nicht aus einer festen Anzahl von Schritten.

Wir betrachten ein kleines Wegenetz:

prolog
direkt(zentrum, museum).
direkt(zentrum, park).
direkt(museum, markt).
direkt(markt, kino).
direkt(park, bibliothek).

Eine direkte Verbindung ist leicht zu prüfen:

prolog
?- direkt(park, bibliothek).

Für eine Verbindung über beliebig viele Zwischenstationen brauchen wir Rekursion:

prolog
erreichbar(Start, Ziel) :-
    direkt(Start, Ziel).

erreichbar(Start, Ziel) :-
    direkt(Start, Zwischenziel),
    erreichbar(Zwischenziel, Ziel).

Die erste Regel ist der Basisfall:

Das Ziel ist direkt erreichbar.

Die zweite Regel ist der rekursive Fall:

Vom Start führt eine direkte Verbindung zu einem Zwischenziel, von dem aus das eigentliche Ziel erreichbar ist.

Reihenfolge ist wichtig

Prolog durchsucht Regeln und Fakten von oben nach unten und bearbeitet Teilziele von links nach rechts.

Wird ein rekursiver Aufruf ungünstig angeordnet, kann Prolog immer weiter rekursiv suchen, ohne einen überprüfbaren Basisfall zu erreichen.

Rekursion mit trace sichtbar machen ​

Wir untersuchen:

prolog
?- erreichbar(zentrum, bibliothek).

Prolog probiert nicht alle Wege gleichzeitig aus. Es verfolgt zunächst einen Weg möglichst weit.

Suchbaum ​

text
erreichbar(zentrum, bibliothek)
│
├─ direkt(zentrum, bibliothek)
│  ✗
│
└─ Zwischenziel suchen
   │
   ├─ Zwischenziel = museum
   │  │
   │  └─ erreichbar(museum, bibliothek)
   │     │
   │     ├─ direkt(museum, bibliothek)
   │     │  ✗
   │     │
   │     └─ Zwischenziel = markt
   │        │
   │        └─ erreichbar(markt, bibliothek)
   │           │
   │           └─ Zwischenziel = kino
   │              │
   │              └─ erreichbar(kino, bibliothek)
   │                 ✗ Sackgasse
   │
   │                 ↶ Backtracking
   │
   └─ Zwischenziel = park
      │
      └─ erreichbar(park, bibliothek)
         │
         └─ direkt(park, bibliothek)
            ✓

Das zeigt zwei zentrale Eigenschaften:

Tiefensuche: Prolog verfolgt zunächst einen möglichen Weg möglichst weit.

Backtracking: Scheitert dieser Weg, springt Prolog zur letzten Stelle mit einer noch nicht getesteten Alternative zurück.

Mit trace beobachten ​

Starte die Anfrage mit:

prolog
?- trace, erreichbar(zentrum, bibliothek).

Eine vereinfachte Darstellung des Ablaufs sieht so aus:

text
Call: erreichbar(zentrum, bibliothek)
  Call: direkt(zentrum, bibliothek)
  Fail: direkt(zentrum, bibliothek)

  Call: direkt(zentrum, Zwischenziel)
  Exit: Zwischenziel = museum

  Call: erreichbar(museum, bibliothek)
    ...
    Fail: Weg über museum

Redo: direkt(zentrum, Zwischenziel)
Exit: Zwischenziel = park

Call: erreichbar(park, bibliothek)
  Call: direkt(park, bibliothek)
  Exit: direkt(park, bibliothek)

Exit: erreichbar(zentrum, bibliothek)

Die konkrete Trace-Ausgabe enthält zusätzliche interne Details. Für das Verständnis sind vor allem diese Begriffe wichtig:

BegriffBedeutung
Callein Ziel wird aufgerufen
Exitein Ziel wurde erfolgreich erfüllt
Failder aktuelle Versuch ist gescheitert
RedoProlog kehrt zurück und versucht eine weitere Möglichkeit

Beobachte beim Tracing

Achte nicht nur auf true oder false. Interessant ist der Weg zur Antwort: Welche Möglichkeit wird zuerst getestet? Wo scheitert sie? Wo wird zurückgesprungen?

Tiefensuche und Backtracking ​

Für die Abarbeitung sind zwei Regeln besonders wichtig:

  1. Teilziele werden von links nach rechts bearbeitet.
  2. Passende Fakten und Regeln werden von oben nach unten gesucht.

Dadurch entsteht eine Tiefensuche. Existieren mehrere Möglichkeiten, kann Prolog beim Scheitern zu einer früheren Entscheidung zurückkehren und eine Alternative ausprobieren.

Dieses Zurückspringen heißt Backtracking.

Negation: „nicht beweisbar“ ist nicht automatisch „falsch“ ​

Prolog verwendet bei \+ die sogenannte Negation as Failure.

Angenommen, unsere Wissensbasis enthält nur:

prolog
ausleihe(lea, dune).

Dann liefert:

prolog
?- \+ ausleihe(lea, foundation).

true, weil Prolog die positive Aussage ausleihe(lea, foundation) nicht beweisen kann.

Das bedeutet jedoch nur:

Mit der vorhandenen Wissensbasis konnte die positive Aussage nicht bewiesen werden.

Es bedeutet nicht zwingend:

In der Wirklichkeit ist die Aussage sicher falsch.

Gerade bei unvollständigem Wissen ist dieser Unterschied wichtig.

Wo wissensbasierte Systeme an Grenzen stoßen ​

Die Stärke wissensbasierter Systeme liegt in der Nachvollziehbarkeit. Gleichzeitig muss relevantes Wissen ausdrücklich vorhanden sein.

Probleme entstehen beispielsweise, wenn:

  • Regeln fehlen,
  • Wissen veraltet ist,
  • Regeln einander widersprechen,
  • sehr viele Sonderfälle auftreten,
  • die reale Welt nicht sauber in eindeutige Regeln passt.

Genau hier wird später der Vergleich mit datenbasierten KI-Verfahren interessant.

Materialpaket ​

📦 Prolog-Materialien herunterladen (ZIP)

Enthalten sind die Vorlagen zu Schule, Geographie, Fehleranalyse, Stammbaum und Rekursion, Maturareise sowie weitere Übungsdateien.

Arbeitsaufträge ​

Aufgabe 1 – Schule ​

Öffne:

text
01_schule.txt

Finde mit eigenen Anfragen heraus:

  1. Welche Lehrkräfte sind gespeichert?
  2. Wer unterrichtet die Klasse 7a?
  3. Welche Fächer werden in der 7a unterrichtet?
  4. Welche Schüler·innen sind gespeichert?
  5. Welchen Raum hat die Klasse 8b?
  6. Welche Klassen gehören zum Zweig rg?

Formuliere zusätzlich eine eigene Anfrage mit mindestens zwei Variablen.

Aufgabe 2 – Geographie ​

Öffne:

text
02_geographie.txt

Bearbeite:

  1. Welche Millionenstädte gibt es? Gib zunächst Stadt und Land aus.
  2. Verändere die Anfrage so, dass das Land nicht ausgegeben wird.
  3. Auf welchem Kontinent liegt Brunei?
  4. Welche Millionenstädte gibt es in Italien?
  5. Formuliere eine eigene Anfrage zu Österreich.

Aufgabe 3 – Fehlerjagd ​

Öffne:

text
03_fehlerjagd.txt
  1. Finde die Syntaxfehler.
  2. Begründe jeden Fehler.
  3. Korrigiere die rekursive Regel.
  4. Teste, was passiert, wenn du den rekursiven Aufruf ungünstig anordnest.

Aufgabe 4 – Maturareise und trace ​

Öffne:

text
05_maturareise.txt

Analysiere zuerst die Fakten und Regeln.

Teste anschließend:

prolog
?- alle_fahren_mit(berge, kw27).
?- alle_fahren_mit(Ort, Woche).
?- trace, alle_fahren_mit(Ort, Woche).

Halte fest:

  • einen erfolgreichen Suchpfad,
  • einen fehlgeschlagenen Suchpfad,
  • eine Stelle mit Backtracking.

Erkläre anschließend in eigenen Worten, warum Prolog hier eine Tiefensuche verwendet.

Aufgabe 5 – Stammbaum und Rekursion ​

Öffne:

text
04_stammbaum_rekursion.txt

Analysiere zunächst die vorhandenen Fakten und Regeln.

Teste danach:

prolog
?- grosselternteil(anna, X).
?- vorfahr(anna, david).
?- vorfahr(anna, felix).
?- trace, vorfahr(anna, felix).

Erweitere den Stammbaum anschließend um mindestens drei Personen.

Formuliere eine eigene Anfrage, bei der Prolog mehrere Möglichkeiten untersuchen muss.

Aufgabe 6 – Mini-Expertensystem ​

Entwickle zu zweit ein kleines wissensbasiertes System.

Mögliche Themen:

  • technische Fehlersuche,
  • Lernempfehlung,
  • Pflanzenpflege,
  • Ausflugsplanung,
  • einfache Geräteberatung.

Mindestanforderungen:

  • mindestens 8 Fakten,
  • mindestens 4 Regeln,
  • mindestens 5 sinnvolle Anfragen,
  • mindestens eine Anfrage mit Variable,
  • mindestens eine Regel mit UND,
  • mindestens eine Regel mit ODER oder Rekursion.

Beantworte zum Schluss:

  1. Was kann euer System gut?
  2. Welches Wissen fehlt ihm?
  3. Wo könnte es zu einer unpassenden Schlussfolgerung kommen?
  4. Warum ist euer Programm ein Beispiel für einen wissensbasierten KI-Ansatz?

Kurz-Check ​

  1. Warum beschäftigen wir uns beim Einstieg in KI mit wissensbasierten Ansätzen?
  2. Was ist ein Expertensystem?
  3. Was ist ein Fakt in Prolog?
  4. Was ist eine Regel?
  5. Was ist ein Prädikat?
  6. Woran erkennst du eine Variable?
  7. Was bedeuten :-, ,, ; und _?
  8. Was macht die Inferenzmaschine?
  9. Was ist der Unterschied zwischen Aussagenlogik und Prädikatenlogik?
  10. Was bedeuten Tiefensuche und Backtracking?
  11. Warum braucht eine rekursive Regel einen Basisfall?
  12. Was bedeuten Call, Exit, Fail und Redo im Trace?
  13. Warum bedeutet „nicht beweisbar“ nicht automatisch „in der Wirklichkeit falsch“?