Seite 1 von 2

Übung 4

Verfasst: 18. Feb 2012 20:48
von tonyp
Hallo,

ist bei Übung 4 Aufgabe 1 ein Fehler in der Aufgabenstellung?
Gegeben folgende Ontologie:
:Baby rdfs:subClassOf :Human .
:Adult rdfs:subClassOf :Human .
:Andy a :Baby .
:Andy a :Human .

(...)

Lösung :
Dieselbe Ontologie in DL-NNF:
¬Baby ⊔ Human
¬Adult ⊔ Human
Baby(Andy)
Adult(Andy)
Hab das grade mit Human(Andy) statt Adult(Andy) durchgezogen und kam dadurch natürlich auch beim 2. Teil auf keinen Wiederspruch.


Edit:
Noch eine Frage zum Tableuverfahren - nur um ganz sicher zu gehen.
Ich darf die Aussagen doch in beliebiger Reihenfolge hinzufügen, oder?
Also dass ich die Aussagen so hinzufüge, dass ein schneller Wiederspruch (und damit ein schneller Abbruch des Verfahrens) provoziert wird.

Re: Übung 4

Verfasst: 18. Feb 2012 21:04
von HeikoPaulheim
Ja, da müsste in der Aufgabenstellung :Andy a :Adult stehen.
Noch eine Frage zum Tableuverfahren - nur um ganz sicher zu gehen.
Ich darf die Aussagen doch in beliebiger Reihenfolge hinzufügen, oder?
Also dass ich die Aussagen so hinzufüge, dass ein schneller Wiederspruch (und damit ein schneller Abbruch des Verfahrens) provoziert wird.
Das ist sogar sinnvoll! Der Algorithmus sagt ja explizit: Wähle eine Aussage. Diese Wahl so zu treffen, dass der Algorithmus schnell terminiert, ist legitim und vernünftig, das macht ein guter Reasoner auch so.

Re: Übung 4

Verfasst: 19. Feb 2012 13:33
von DreamFlasher
Wie darf denn bei Regel 3 ein Individuum gewählt werden? Wenn ich das richtig sehe haben wir bei rdf doch immer C(a). Oder ist das so gemeint, wenn wir z.B. nur ne Klassendefinition haben :c a owl:Class, dass wir dann uns ein Individuum a ausdenken dürfen? (Weil wir haben ja keine Individuen ohne Klasse)
Ebenso bei Regel 4: Darf da einfach ein beliebiges Individuum gewählt werden, auch wenn es das Individuum in einer Klasse gar nicht gibt? Finde ich seltsam, weil wir so ja neue Aussagen zu unserer Wissensbasis hinzufügen können.

Re: Übung 4

Verfasst: 19. Feb 2012 20:35
von HeikoPaulheim
Wie darf denn bei Regel 3 ein Individuum gewählt werden?
Man wählt ein beliebiges, schon existierendes Individuum.

Bei Regel 3 hat man es hier mit "reinen" DL-,Klassendefinitionen zu tun, wie z.B.

Code: Alles auswählen

(not Animal) or (not Human)
auf Folie 8.35. Diese Definition heißt: Für alle Instanzen x gilt

Code: Alles auswählen

((not Animal) or (not Human))(x)
d.h., kein x kann gleichzeitig Animal und Human sein - das ist ja gerade die DL-Schreibweise für Disjointness.

Das heißt, es ist völlig legitim, sich irgendeine existierende Instanz herzunehmen und die entsprechende Aussage hinzuzufügen.

Re: Übung 4

Verfasst: 19. Feb 2012 20:57
von DreamFlasher
Hmm ne hab ich noch nicht ganz:

Code: Alles auswählen

:Haus a owl:Class.
:Baum a owl:Class.
:Haus owl:disjointWith :Baum.
:tannenbaum a :Baum.
T1=

Code: Alles auswählen

Baum(tannenbaum), (!Haus || !Baum)(tannenbaum)
nun wenden wir Regeln 3 an, können wir ja machen, wir ham da noch ne Klasse und ja auch ne Instanz.
T1=

Code: Alles auswählen

Baum(tannenbaum), (!Haus || !Baum)(tannenbaum), Haus(tannenbaum)
-> Widerspruch. Problem.

Re: Übung 4

Verfasst: 19. Feb 2012 21:04
von HeikoPaulheim
Diese beiden Definitionen

Code: Alles auswählen

:Haus a owl:Class.
:Baum a owl:Class.
werden nicht in DL-Axiome umgewandelt, d.h., die DL zu Deiner Ontologie sieht nur so aus:

Code: Alles auswählen

!Haus || !Baum
Baum(tannenbaum)
Es gibt darin aber nicht die Axiome

Code: Alles auswählen

Haus
Baum
Folglich kann man auf diese auch nicht Regel 3 anwenden.

Re: Übung 4

Verfasst: 19. Feb 2012 21:14
von DreamFlasher
Okay, dh. ich kann mit owl gar nicht C was für Regel 3 benötigt wird erzeugen?

Re: Übung 4

Verfasst: 19. Feb 2012 21:19
von HeikoPaulheim
Okay, dh. ich kann mit owl gar nicht C was für Regel 3 benötigt wird erzeugen?
Doch, natürlich. In Deinem Beispiel nämlich die folgende Klassendefinition:

Code: Alles auswählen

!Haus || !Baum
Dass damit das Statement

Code: Alles auswählen

(!Haus || !Baum)(tannenbaum)
zum Tableau hinzugefügt wird, resultiert ja gerade aus der Anwendung von Regel 3 auf diese Klassendefinition. Analog auch alles, was z.B. aus Subklassenbeziehungen kommt, also etwa

Code: Alles auswählen

!Nadelbaum || Baum

Re: Übung 4

Verfasst: 19. Feb 2012 21:28
von DreamFlasher
Das ist aber nicht Regel 3 sondern Regel 5 und ich habe sehr den Eindruck wenn wir tatsächlich Regel 3 mal anwenden könnten, dann lässt sich immer ein Widerspruch erzeugen.

Ein bisschen unintuitiv finde ich:

Code: Alles auswählen

:Haus a owl:Class.
:Baum a owl:Class.
:Fenster a owl:Class.
:Haus owl:disjointWith :Fenster.
:tannenbaum a :Baum.
Das ich da jetzt sowas bilden kann:

Code: Alles auswählen

Baum(tannenbaum), (!Haus || !Fenster)(tannenbaum)
=

Code: Alles auswählen

T1 = Baum(tannenbaum), !Haus(tannenbaum)
T2 = Baum(tannenbaum), !Fenster(tannenbaum)
Wenn ich jetzt noch :Baum owl:disjointWith :Fenster und :Baum owl:disjointWith :Haus hinzufüge gibt das doch auf jeden Fall nen Widerspruch... oder was übersehe ich da :)

Re: Übung 4

Verfasst: 19. Feb 2012 21:42
von HeikoPaulheim
Das ist aber nicht Regel 3 sondern Regel 5
Nein! Regel 3 fügt das Instanz-Statement dem Tableau hinzu, Regel 5 teilt das Tableau, wenn das Statement bereits enthalten ist.
Wenn ich jetzt noch :Baum owl:disjointWith :Fenster und :Baum owl:disjointWith :Haus hinzufüge gibt das doch auf jeden Fall nen Widerspruch...
Also, schauen wir mal. Unsere DL sähe jetzt so aus:

Code: Alles auswählen

!Haus || !Baum
!Baum || !Fenster
!Fenster || !Haus
Baum(tannenbaum)
Jetzt wenden wir zunächst 3x Regel 3 an, dann haben wir

Code: Alles auswählen

T1 = Baum(tannenbaum), (!Haus ||!Baum)(tannenbaum), (!Baum || !Fenster)(tannenbaum), (!Fenster||!Haus)(tannenbaum).
Jetzt wenden wir auf das erste zusammengesetzte Statement Regel 5 an und bekommen

Code: Alles auswählen

T1 = Baum(tannenbaum), !Haus(tannenbaum), (!Baum || !Fenster)(tannenbaum), (!Fenster||!Haus)(tannenbaum).
T2 = Baum(tannenbaum), !Baum(tannenbaum), (!Baum || !Fenster)(tannenbaum), (!Fenster||!Haus)(tannenbaum).
T2 ist abgeschlossen, bei T1 wenden wir jetzt auf das nächste zusammengesetzte Statement Regel 5 an und bekommen

Code: Alles auswählen

T1a = Baum(tannenbaum), !Haus(tannenbaum), !Baum(tannenbaum), (!Fenster||!Haus)(tannenbaum).
T1b = Baum(tannenbaum), !Haus(tannenbaum), !Fenster(tannenbaum), (!Fenster||!Haus)(tannenbaum). 
T2 = Baum(tannenbaum), !Baum(tannenbaum), (!Baum || !Fenster)(tannenbaum), (!Fenster||!Haus)(tannenbaum).
T1a ist auch abgeschlossen, jetzt wenden wir in T1b nochmal Regel 5 auf das letzte zusammengesetzt Statement an und bekommen

Code: Alles auswählen

T1a = Baum(tannenbaum), !Haus(tannenbaum), !Baum(tannenbaum), (!Fenster||!Haus)(tannenbaum).
T1b1 = Baum(tannenbaum), !Haus(tannenbaum), !Fenster(tannenbaum) // das 2. Mal !Fenster(tannenbaum) sparen wir uns
T1b2 = Baum(tannenbaum), !Haus(tannenbaum), !Fenster(tannenbaum) // das 2. Mal !Haus(tannenbaum) sparen wir uns
T1b = Baum(tannenbaum), !Haus(tannenbaum), !Fenster(tannenbaum), (!Fenster||!Haus)(tannenbaum). 
T2 = Baum(tannenbaum), !Baum(tannenbaum), (!Baum || !Fenster)(tannenbaum), (!Fenster||!Haus)(tannenbaum).
T1b1 und T1b2 sind beide widerspruchsfrei. Da die Wissensbasis widerspruchsfrei ist, wenn es mindestens ein Teiltableau ohne Widerspruch gibt, ist auch die Wissensbasis widerspruchsfrei.

Re: Übung 4

Verfasst: 19. Feb 2012 22:15
von DreamFlasher
Verrückt!
Dankeschön. Okay Regel 3 sehe ich jetzt ein. Und ich hätte echt schwören können, da ne Lücke zu finden... aber das scheint echt zu funktionieren :D

Re: Übung 4

Verfasst: 20. Feb 2012 08:28
von HeikoPaulheim
aber das scheint echt zu funktionieren
Das wird viele Entwickler und Nutzer von Reasonern enorm beruhigen ;-)

Re: Übung 4

Verfasst: 20. Feb 2012 14:17
von DreamFlasher
Die ham sich da bestimmt was bei gedacht ;)

Re: Übung 4

Verfasst: 20. Feb 2012 20:10
von Anne
Ich habe eine Frage zur Aufgabe 3. Es geht um die SPARQL-Abfragen für "Finde alle ungeraden Zahlen" und "Finde alle Primzahlen".

In der Musterlösung ist "Finde alle ungeraden Zahlen" über Verneinung der geraden Zahlen gelöst, aber kann man das nicht auch definieren als "Ungerade Zahlen sind alle Zahlen, auf die eine gerade Zahl folgt"? In SPARQL:

Code: Alles auswählen

SELECT ?n WHERE {?n next ?k . ?k primefactor :2 . }
"Finde alle Primzahlen" hätte ich auch ohne OPTIONAL und FILTER gelöst: "Eine Primzahl ist eine Zahl, die sich selbst als Primfaktor hat und größer 1 ist." Damit hat sie insbesondere keine anderen Primfaktoren (ausgehend davon, dass 1 nicht als Primzahl definiert ist), weil das Produkt sonst größer als die Zahl selbst wäre, und sie ist eine Primzahl, weil sie als Objekt von "primefactor" vorkommt, was per Definition Primzahlen sein sollten. In SPARQL:

Code: Alles auswählen

SELECT ?n WHERE { ?n primefactor ?n . ?n greaterThan :1. }
Sind diese beiden Varianten auch korrekt, oder habe ich etwas übersehen?

Danke schon mal, wenn mir jemand weiterhelfen kann :-)

Re: Übung 4

Verfasst: 20. Feb 2012 20:38
von DreamFlasher
Jupp ist beides korrekt :)