voriges Kapitel | Startseite | Inhalt | nächstes Kapitel

© 2001 François Bry
Dieses Lehrmaterial wird ausschließlich zur privaten Verwendung angeboten. Eine nichtprivate Nutzung (z.B. im Unterricht oder eine Veröffentlichung von Kopien oder Übersetzungen) dieses Lehrmaterials bedarf der Erlaubnis des Autors.


1. Reason-Maintenance-Systeme

Ein System zur "Reason Maintenance" (zu Deutsch Begründungsverwaltung)kann wie folgt beschrieben werden:
  • Es beantwortet Anfragen gegenüber einer Formelmenge M, die die Vereinigung von zwei disjunkten Formelmengen AW und SW ist, wo
    • AW "allgemeines Wissen" darstellt, und
    • SW "spezielles Wissen" darstellt.

    und liefert dabei als Begründung B einer Antwort alle Formeln aus SW, der Menge des speziellen Wissens, die zum Beweis dieser Antwort beitragen.

    Wird das spezielle Wissen SW geändert, dann werden solche Begründungen an diese Änderungen angepaßt, was zu der Bezeichnung "Begründungsverwaltung" geführt hat.

  • Die Formelmenge M, die die Vereinigung von AW und SW ist, muß nicht widerspruchsfrei sein. Es kann aber verlangt werden, daß eine Begründung (einer Antwort) dem allgemeinen Wissen nicht widerspricht.
Eine verbreitete "Verwirklichung" dieses Konzeptes ist die folgende:
  • Die Formelmenge AW, die das allgemeine Wissen darstellt, ist eine Menge von Regeln, die Rechtfertigungen ("justifications") genannt werden.
  • Die Formelmenge SW, die das spezielle Wissen darstellt, ist eine Menge von Fakten, die Basisfakten (zur Unterscheidung von hergeleiteten Fakten) genannt werden.

Dabei wird üblicherweise angenommen, daß die Regeln bereichsbeschränkt und die Fakten variablenfrei sind.

Das Beweisverfahren steht im Grunde genommen nicht fest. Oft wird das Vorwärtsschließen angewendet.

In diesem Kapitel behandeln wir Reason-Maintenance-Systeme, die als allgemeines Wissen bereichsbeschränkte Regeln und als spezielles Wissen variablenfreie Fakten voraussetzen. Als Beweisverfahren wird das Vorwärtsschließen angewendet.

Darstellung der Regeln oder Rechtfertigungen: [L1, ..., Ln] ---> K. mit 1<=n, wobei jedes Li die Gestalt +Ai oder -Ai hat und die Ai und K Atome sind. Dabei steht +Ai für ein Atom, -Ai für ein negiertes Atom. Diese ungewöhnliche symmetrische Darstellung von positiven und negativen Literalen im Rumpf einer Regel erleichtert die Implementierung der Begründungsverwaltung.
Im Gegensatz zu den meisten anderen im Rahmen dieser Vorlesung vorgestellten Meta-Interpretern wird hier der Rumpf einer Regel (bzw. Rechtfertigung) nicht als Prolog-Konjunktion dargestellt, sondern als Liste. Diese Darstellung vereinfacht die Implementierung der im folgenden vorgestellten Auswerter, da nun eine Reihe bekannter Prädikate verwendet werden können.
Darstellung der Basisfakten:

Ein Basisfaktum F wird dargestellt als: [] ---> F. wobei [] als andere Bezeichnung für true angesehen werden kann. Damit haben beide Arten von Wissen eine einheitliche syntaktische Darstellung.

Eine Regel oder Rechtfertigung, in derem Rumpf negative Literale vorkommen, heißt bereichsbeschränkt, wenn jede Variable, die im Regelkopf oder in einem negativen Rumpfliteral vorkommt, ebenfalls in einem positiven Rumpfliteral der Regel vorkommt. Diese Definition verallgemeinert die zuvor eingeführte Definition für negationsfreie Regeln.
Eine Regel oder Rechtfertigung heißt monoton, wenn ihr Rumpf kein negatives Literal enthält.

zum Seitenanfang

Reason-Maintenance-Systeme


Ein System zur "Reason Maintenance" (zu Deutsch Begründungsverwaltung)kann wie folgt beschrieben werden:
  • Es beantwortet Anfragen gegenüber einer Formelmenge M, die die Vereinigung von zwei disjunkten Formelmengen AW und SW ist, wo
    • AW "allgemeines Wissen" darstellt, und
    • SW "spezielles Wissen" darstellt.

    und liefert dabei als Begründung B einer Antwort alle Formeln aus SW, der Menge des speziellen Wissens, die zum Beweis dieser Antwort beitragen.

    Wird das spezielle Wissen SW geändert, dann werden solche Begründungen an diese Änderungen angepaßt, was zu der Bezeichnung "Begründungsverwaltung" geführt hat.

  • Die Formelmenge M, die die Vereinigung von AW und SW ist, muß nicht widerspruchsfrei sein. Es kann aber verlangt werden, daß eine Begründung (einer Antwort) dem allgemeinen Wissen nicht widerspricht.

2. Ein grundlegender vorwärtsschließender Auswerter zur Herleitung von begründeten Fakten aus monotonen Rechtfertigungen

Der in diesem Absatz eingeführte Auswerter ist für variablenfreie Fakten und bereichsbeschränkte, monotone Rechtfertigungen (d.h. Regeln) gedacht.
Das Programm P80 ist ein grundlegender vorwärtsschließender Auswerter für monotone Rechtfertigungen.
Jedes hergeleitete Faktum F hat eine oder mehrere "Begründungen". Eine Begründung ist eine Liste aller Fakten, die zur Herleitung von F beigetragen haben. Ein Faktum zusammen mit einer Begründung nennen wir ein begründetes Faktum. Die begründeten Fakten werden in der PROLOG-Datenbank gespeichert durch PROLOG-Fakten der Form begruendet(F,Begruendung), wobei es mehrere begründete Fakten für dasselbe F geben kann. Jedes Basisfaktum F, dargestellt in der Form [] ---> F, führt dabei zu einem begründeten Faktum begruendet(F,[]).
Ein Nachteil vom Programm P80 ist, daß es Antworten wohl berechnet, aber nicht liefert. Darüberhinaus terminiert es bei zyklischen Rechtfertigungen nicht.
Das Prädikat hilfs_auswerten/2 generiert durch Rücksetzen mehrere Antworten. Diese Antworten werden durch das Prädikat anfrage_reicht/2 wieder verbraucht.
Mit Hilfe dieser Programmiertechnik können in Prolog potentiell unendliche Sequenzen implementiert werden, wobei diese Sequenzen anders als bei Listen nicht zu einer Zeit als Datenstruktur im Speicher liegen, sondern elementweise erzeugt und auch wieder verbraucht werden.
Bei dieser Art der Darstellung von Sequenzen entspricht fail der leeren Liste [] und die Disjunktion ';' dem Paarbildungsoperator '.'.
Die folgende Sitzung bezieht sich auf Programm P81
:- [user]. [] ---> r(a, b). [] ---> r(b, a). [+t(X, Y), +t(Y, Z)] ---> t(X, Z). [+r(X, Y)] ---> t(X, Y). Yes :- auswerten(t(a, a)). Antwort: t(a, a) Begruendung: [t(a, b), t(b, a), r(a, b), r(b, a)] weiter? (ja./nein.) ja. Antwort: t(a, a) Begruendung: [t(a, b), t(b, a), r(a, b), t(b, a), t(a, a), r(b, a), t(a, b), t(b, a), r(a, b), r(b, a)] weiter? (ja./nein.) ja. Antwort: t(a, a) Begruendung: [t(a, b), t(b, a), r(a, b), t(b, a), t(a, a), r(b, a), t(a, b), t(b, a), r(a, b), t(b, a), t(a, a), r(b, a), t(a, b), t(b, a), r(a, b), r(b, a)] weiter? (ja./nein.) nein. Yes
Man beachte, daß der Auswerter redundante, zyklische Begründungen liefert. Das liegt daran, daß ein gleiches Faktum, wie z.B. t(a,a) auf verschiedene Weisen hergeleitet werden kann: aus r(a,b) und r(b,a), aus r(a,b), r(b,a) und t(a,a), was wiederum aus r(a,b) und r(b,a) hergeleitet wurde, usw.
Die folgende Sitzung bezieht sich auf Programm P82:
:- [user]. [] ---> r(a, b). [] ---> r(b, a). [+t(X, Y), +t(Y, Z)] ---> t(X, Z). [+r(X, Y)] ---> t(X, Y). Yes :- auswerten(t(a, a)). Antwort: t(a, a) Begruendung: [r(a, b), r(b, a), t(a, b), t(b, a)] weiter? (ja./nein.) ja. No
Man sieht, daß die Auswertung nun terminiert und eine einzige nichtredundante Begründung liefert.
Die folgende Sitzung zeigt, wie mehrere verschiedene Begründungen für eine gleiche Antwort erhalten werden können:
:- [user]. [] ---> student(anna). [] ---> student(berndt). [] ---> hoert(anna, prolog). [] ---> hoert(anna, ml). [+student(X), +hoert(X, prolog)] ---> mag(X, logik). [+student(X), +hoert(X, ml)] ---> mag(X, logik). Yes :- auswerten(mag(X, logik)). Antwort: mag(anna, logik) Begruendung: [hoert(anna, prolog), student(anna)] weiter? (ja./nein.) ja. Antwort: mag(anna, logik) Begruendung: [hoert(anna, ml), student(anna)] weiter? (ja./nein.) ja. No

zum Seitenanfang

Ein grundlegender vorwärtsschließender Auswerter zur Herleitung von begründeten Fakten aus monotonen Rechtfertigungen


  • Jedes hergeleitete Faktum F hat eine oder mehrere "Begründungen".
  • Eine Begründung ist eine Liste aller Fakten, die zur Herleitung von F beigetragen haben.
  • Ein Faktum zusammen mit einer Begründung nennen wir ein begründetes Faktum.
  • Die begründeten Fakten werden in der PROLOG-Datenbank gespeichert durch PROLOG-Fakten der Form begruendet(F,Begruendung), wobei es mehrere begründete Fakten für dasselbe F geben kann.
  • Jedes Basisfaktum F, dargestellt in der Form [] ---> F, führt dabei zu einem begründeten Faktum begruendet(F,[]).

3. Behandlung von Änderungen des speziellen Wissens bei monotonen Rechtfertigungen

Es wird angenommen, daß Formeln vom speziellen Wissen gelöscht oder zum speziellen Wissen hinzugefügt werden können. In unserem Fall besteht das spezielle Wissen aus variablenfreien Basisfakten, die syntaktisch wie Rechtfertigungen mit Rumpf [] dargestellt sind. Die Menge der hergeleiteten Fakten mit ihren Begründungen soll dann so verändert werden, daß sie der Änderung des speziellen Wissens entspricht. Dabei will man natürlich die Berechnungen so weit wie möglich einschränken (sonst könnte man ja einfach sämtliche hergeleiteten Fakten samt Begründungen ganz neu berechnen).

In diesem Abschnitt wird angenommen, daß alle Rechtfertigungen monoton sind, d.h. ihre Rümpfe enthalten keine negativen Literale.

  1. Basisfakten löschen

    Wenn ein Basisfaktum F gelöscht wird, gelten alle hergeleiteten Fakten nicht mehr, deren Herleitungen Bezug auf F nehmen. Es müssen also genau diejenigen begründeten Fakten entfernt werden, deren Begründung F enthält.

    Aus dieser Bemerkung ergibt sich das folgende Programm zur Aktualisierung eines Reason-Maintenance-Systems nach dem Löschen eines Basisfaktums F, wobei diese Änderung -F notiert wird:

  2. Basisfakten löschen und einfügen

    Wie zuvor wird das Löschen eines Basisfaktums F mit -F notiert. Das Einfügen eines Basisfaktums F wird +F notiert. Das Einfügen verursacht mehr Arbeit als das Löschen.

    Zunächst kann ein hinzuzufügendes Basisfaktum F schon vorhanden sein. In diesem Fall ist es angemessen, gar nichts weiter zu tun.

    Sonst müssen die Rechtfertigung [] ---> F sowie das begründete Faktum begruendet(F, []) in die Prolog-Datenbank hinzugefügt und die vorhandene Menge der begründeten Fakten aktualisiert werden. Diese Aktualisierung leistet das Prädikat aenderungen_propagieren/3, das wiederum als Generator implementiert ist.


zum Seitenanfang

Behandlung von Änderungen des speziellen Wissens bei monotonen Rechtfertigungen (1)


Es wird angenommen, daß Formeln vom speziellen Wissen gelöscht oder zum speziellen Wissen hinzugefügt werden können. In unserem Fall besteht das spezielle Wissen aus variablenfreien Basisfakten, die syntaktisch wie Rechtfertigungen mit Rumpf [] dargestellt sind. Die Menge der hergeleiteten Fakten mit ihren Begründungen soll dann so verändert werden, daß sie der Änderung des speziellen Wissens entspricht. Dabei will man natürlich die Berechnungen so weit wie möglich einschränken (sonst könnte man ja einfach sämtliche hergeleiteten Fakten samt Begründungen ganz neu berechnen).

In diesem Abschnitt wird angenommen, daß alle Rechtfertigungen monoton sind, d.h. ihre Rümpfe enthalten keine negativen Literale.

  • Basisfakten löschen

    Wenn ein Basisfaktum F gelöscht wird, gelten alle hergeleiteten Fakten nicht mehr, deren Herleitungen Bezug auf F nehmen. Es müssen also genau diejenigen begründeten Fakten entfernt werden, deren Begründung F enthält.

    Aus dieser Bemerkung ergibt sich das folgende Programm zur Aktualisierung eines Reason-Maintenance-Systems nach dem Löschen eines Basisfaktums F, wobei diese Änderung -F notiert wird:

Behandlung von Änderungen des speziellen Wissens bei monotonen Rechtfertigungen (2)


  • Basisfakten löschen und einfügen

    Wie zuvor wird das Löschen eines Basisfaktums F mit -F notiert. Das Einfügen eines Basisfaktums F wird +F notiert. Das Einfügen verursacht mehr Arbeit als das Löschen.

    Zunächst kann ein hinzuzufügendes Basisfaktum F schon vorhanden sein. In diesem Fall ist es angemessen, gar nichts weiter zu tun.

    Sonst müssen die Rechtfertigung [] ---> F sowie das begründete Faktum begruendet(F, []) in die Prolog-Datenbank hinzugefügt und die vorhandene Menge der begründeten Fakten aktualisiert werden. Diese Aktualisierung leistet das Prädikat aenderungen_propagieren/3, das wiederum als Generator implementiert ist.

4. Behandlung von Änderungen des speziellen Wissens bei nichtmonotonen Rechtfertigungen

Zur Behandlung von Änderungen auch bei nichtmonotonen Rechtfertigungen scheint es zunächst auszureichen, im Programm P84, genauer in den Prädikaten beweisen und einfuegen, negative Literale -A zu berücksichtigen.
Eine solche "Lösung" wäre aber inkorrekt, wie das Beispiel des Einfügens des Basisfaktums p(a) bei den folgenden Rechtfertigungen zeigt:
[+p(X), -q(X)] ---> r(X). [+p(X)] ---> q(X).
Zunächst gibt es gar keine begründeten Fakten. Nachdem p(a) als Basisfaktum hinzugefügt wurde, kann wegen der ersten Rechtfertigung r(a) hergeleitet werden mit der Begründung, daß p(a) gilt und q(a) nicht gilt. Außerdem kann wegen der zweiten Rechtfertigung q(a) hergeleitet werden, wodurch aber die Begründung für r(a) ungültig wird.
Betrachten wir das modifizierte Beispiel
[] ---> p(a). [+p(X), -q(X)] ---> r(X).
Hier sollte das Einfügen von q(a) zum Löschen des vorher herleitbaren r(a) führen. Deswegen spricht man von nichtmonotonen Rechtfertigungen.
Ein weiteres Problem stellen zyklische nichtmonotone Rechtfertigungen dar.
Dabei sind zwei Arten von Zyklen zu unterscheiden:
  1. ungerade Zyklen:
    [-p] ---> p.
    Ungerade Zyklen stellen einen Widerspruch dar.
    Das Problem kann als "überspezifiziert" angesehen werden.
  2. gerade Zyklen:
    [-p] ---> q. [-q] ---> p.
    Wenn weder p noch q mittels einer weiteren Rechtfertigung begründet werden, hat diese Regelmenge zwei stabile Zustände: Entweder p wird als wahr betrachtet (und damit q als falsch) oder q wird als wahr betrachtet (und damit p als falsch).
    In diesem Fall kann das Problem als "unterspezifiziert" angesehen werden.
Für das effiziente Propagieren von Begründungen in Netzen von nichtmonotonen Rechtfertigungen sind kompliziertere Algorithmen notwendig, die die globale Struktur der Rechtfertigungen analysieren müssen.
Weitergehende Informationen zum Thema Begründungsverwaltung findet man z.B. in den beiden folgenden Büchern:
  • C. Beckstein, Begründungsverwaltung: Grundlagen, Systeme und Algorithmen, Teubner, 1996
  • K. D. Forbus and J. de Kleer, Building Problem Solvers, MIT Press, 1993

zum Seitenanfang

Behandlung von Änderungen des speziellen Wissens bei nichtmonotonen Rechtfertigungen (1)


Zur Behandlung von Änderungen auch bei nichtmonotonen Rechtfertigungen scheint es zunächst auszureichen, im Programm P84, genauer in den Prädikaten beweisen und einfuegen, negative Literale -A zu berücksichtigen.
Eine solche "Lösung" wäre aber inkorrekt, wie das Beispiel des Einfügens des Basisfaktums p(a) bei den folgenden Rechtfertigungen zeigt:
[+p(X), -q(X)] ---> r(X). [+p(X)] ---> q(X).
Zunächst gibt es gar keine begründeten Fakten. Nachdem p(a) als Basisfaktum hinzugefügt wurde, kann wegen der ersten Rechtfertigung r(a) hergeleitet werden mit der Begründung, daß p(a) gilt und q(a) nicht gilt. Außerdem kann wegen der zweiten Rechtfertigung q(a) hergeleitet werden, wodurch aber die Begründung für r(a) ungültig wird.
Betrachten wir das modifizierte Beispiel
[] ---> p(a). [+p(X), -q(X)] ---> r(X).
Hier sollte das Einfügen von q(a) zum Löschen des vorher herleitbaren r(a) führen. Deswegen spricht man von nichtmonotonen Rechtfertigungen.

Behandlung von Änderungen des speziellen Wissens bei nichtmonotonen Rechtfertigungen (2)


Ein weiteres Problem stellen zyklische nichtmonotone Rechtfertigungen dar.
Dabei sind zwei Arten von Zyklen zu unterscheiden:
  1. ungerade Zyklen:
    [-p] ---> p.
    Ungerade Zyklen stellen einen Widerspruch dar.
    Das Problem kann als "überspezifiziert" angesehen werden.
  2. gerade Zyklen:
    [-p] ---> q. [-q] ---> p.
    Wenn weder p noch q mittels einer weiteren Rechtfertigung begründet werden, hat diese Regelmenge zwei stabile Zustände: Entweder p wird als wahr betrachtet (und damit q als falsch) oder q wird als wahr betrachtet (und damit p als falsch).
    In diesem Fall kann das Problem als "unterspezifiziert" angesehen werden.
Für das effiziente Propagieren von Begründungen in Netzen von nichtmonotonen Rechtfertigungen sind kompliziertere Algorithmen notwendig, die die globale Struktur der Rechtfertigungen analysieren müssen.
voriges Kapitel | Startseite | Inhalt | nächstes Kapitel

Letzte Änderung: 18. August 1998

Valid 
	    XHTML 1.0!