Übungen Teil 2

Aufgabe 1 / Lösungsvorschlag

Das Programm stellt die Prolog-Implementierung eines semantischen Netzes dar. Semantische Netze konstituieren sich aus Knoten und Kanten, wobei die Knoten Klassen von Objekten ('Lebenwesen', 'Tier', 'Fisch' usw.) oder Eigenschaften von Objekten, also Deskriptoren ('wächst', 'atmet' usw.) repräsentieren, die Knoten dagegen Relationen zwischen Objekten ('ist-ein') oder Relationen zwischen Objekten und Deskriptoren ('hat', 'kann'). Die Organisationsform eines semantischen Netzes ist hierarchisch, im konkreten Fall dahingehend, dass neben der ist_ein-Beziehung zwischen zwei unmittelbar verbundenen Knoten auch die Unterbegriffs-Beziehung zwischen einem Knoten und einem (nicht direkt damit verbundenen, also in der Hierarchie höher stehenden Knoten) aus dem Netz ableitbar ist und dass sich die einem bestimmten Objekt-Knoten zugeordneten Deskriptoren top-down auf alle von diesem Knoten direkt oder indirekt abhängenden Knoten vererben.

Die im Netz kodierte Information ist in Prolog in einer Reihe von Fakten (d.h. Aussagen über Individuenkonstanten, Klauseln ohne Rumpf bzw. mit dem Rumpf 'true', sprich Klasuseln, die immer beweisbar sind) einerseits und Regeln (d.h. gemeingültige Aussagen an deren Erfüllbarkeit im Regelrumpf bestimmte Bedingungen geknüpft sind) andererseits notiert. Die Fakten geben Aufschluß über a) die 'ist_ein'-Beziehung zwischen zwei unmittelbar (d.h. über eine Kante direkt) verbundenen Knoten (Prädikat ist_ein/2) b) die 'kann'- und 'hat'-Beziehung zwischen einem Objekt und dem diesen Objekt direkt zugewiesenen Eigenschaften (Prädikat merkmal/2).

In den Regeln (Prädikate unterbegriff/2 und eigenschaft/2) ist das o.a. Vererbungsprinzip kodiert. Beide Prädikate sind jeweils in Form von zwei Regeln notiert: eine rekursive Regel und eine 'Erfolgs-' oder 'Abbruchbedingung'.

Wesentliches Merkmal einer rekursiven Regel ist die Tatsache, dass der Regelkopf erneut im Regelrumpf vertreten ist und sich rekursive Prädikate selber aufrufen können. Auf diese Art wird im konkreten Fall gewährleistet, dass Prolog die Wissensbasis solange durchläuft, bis tatsächlich alle Instanzen der Unterbegriffs- bzw. Eigenschaftsrelation gefunden werden.

Im Falle von unterbegriff/2 rekurriert die Erfolgsbedingung auf das Prädikat ist_ein/2; im Falle von eigenschaft/2 rekurriert sie auf merkmal/2.

Die rekursiven Regeln regeln jeweils durch den erneuten Aufruf von unterbegriff/2 bzw. eigenschaft/2 im Regelrumpf die komplette Abarbeitung der vorhandenen Information.

Konkretisiert am Beispiel von unterbegriff/2 mit 'hai' als erstem Argument (gesucht wird ein Wert für Y):

unterbegriff(hai,Y):-
ist_ein(hai,Y).

Rekurriert auf Fakt ist_ein(hai,fisch), ergo: Y = fisch.

Erneuter Aufruf:

unterbegriff(hai,Y):-
ist_ein(hai,Z),
unterbegriff(Z,Y).

Wiederum gilt ist_ein(hai,fisch), also Z = fisch:

unterbegriff(hai,Y1):-
ist_ein(hai,fisch),
unterbegriff(fisch,Y1).

Das nächste Teilziel ruft unterbegriff/2 erneut auf – diesmal mit 'fisch' als erstem Argument:

unterbegriff(fisch,Y1):-
ist_ein(fisch,Y1).

Prolog findet in der Wissensbasis das Fakt ist_ein(fisch,tier) und substituiert Y1 durch 'tier':

Da Y = Y1 lautet die nächste Bindung für Y: Y = tier