Some and Only (SOMLY)
===========


In Gendifs gibt es nur ein SOME. Das aus der Description Logic zugehörige ONLY ist nicht implementiert, und wird wohl auch nicht implementiert werden.

Angedacht ist aber ein SOMLY:
* Kombination von SOME und ONLY
* nicht als Klassifikationsregel, sondern als Integritäts-Check.

ONLY
-----

Wir zeigen zunächst, worin die Idee von ONLY besteht.

Beispiel:

    Pferd
      BY has_color SOME Color
        Schimmel
          SOME weiß
          
Semantik: Ein Pferd, das eine weiße Farbe hat, ist ein Schimmel. Auch ein Zebra wird also als Schimmel klassifiziert. 

Wenn wir wollen, dass als Schimmel nur Pferde klassifiziert werden, die ausschließlich weiße Farben haben, scheint eine naheliegende Lösung in Anlehnung an OWL so aussehen:

    Pferd
      BY has_color SOME Color
        Schimmel
          ONLY weiß
        
Scheinbare Semantik: Ein Pferd, das ausschließlich weiße Farben hat, ist ein Schimmel.

Problem 1, bekanntes unintuitives Verhalten: In Verbindung mit der Open World Assumption (OWA) greift die Bedingung "ausschließlich weiß" auch für Pferde, bei denen die Farbe nicht angegeben ist: Pferde ohne Farbe werden als Schimmel klassiert! Mögliche Lösung:

* Ein ONLY ohne SOME ist meistens nutzlos. In der Praxis wird man bei einem ONLY immer auch ein SOME angeben. Z.T. gibt es auch das Konstrukt "Some and Only".

Problem 2: Ein Reasoner kann auf Basis von `SOME weiß` ein Pferd schnell als Schimmel klassifizieren, wenn sobald er ein Beispiel einer weißen Farbe entdeckt. Bei einem `ONLY weiß` muss ein Reasoner allerdings feststellen, ob ein Pferd noch eine andere, und zwar nicht-weiße Farbe hat (was die Klassifizierung verhindern würde). Dazu muss eine Negation ausgewertet und eine aufwändige Sub-Suche gestartet  werden. 

Problem 3: Negationen, die Zyklen enthalten (wie z.B. `männlich := not(weiblich)` und `weiblich := not(männlich) `, führen zu einem Versagen des Inferencing. Klassische Lösung: <https://de.wikipedia.org/wiki/Stratifikation_(Logik)> von Negationen. Mögliche Lösung:

* Da in einer Gendifs-Map die Axiome in einer wohlgeordneten Reihenfolge vorliegen, könnte man das für eine syntaxbasierte Stratifikation nutzen. So könnte man z.B. vereinbaren, dass in einem `not(..)` die negierte Klasse bereits vorher vereinbart sein muss - eine zirkuläre Negation wie beim männlich-weiblich-Beispiel wird so ausgeschlossen.
* Durch solche Verfahren steigt die Komplexität der Modellierung und des Inferencing allerdings erheblich. 

Alle drei Probleme sind schwerwiegend. Wo Lösungen bekannt sind, führen diese zu einer erheblichen Komplexitätserhöhung im Inferencing. Um solche Komplexität nicht entstehen zu lassen. verzichten wir in Gendifs auf alle Elemente, die konzeptuell eine direkte oder versteckte Negation erfordern - also auch auf ONLY.
                           


SOMLY
------

Grundsätzlich denkbar wäre ein *SOMLY*. Die Semantik wäre:

* ähnlich wie SOME\_and\_ONLY
* aber nicht mit Klassifikationsaxiomen hinterlegt, weil diese eine Negation enthalten würden,
* sondern mit einer Integritätsbedingung versehen.

Beispiel:

    Pferd
      BY has_color SOME Color
        Schimmel
          SOMLY weiß
        Rappe
          SOMLY schwarz

(Klassifikations-) Semantik identisch mit SOME. 

Dazu wird syntaktisch die eine Subclass von *integrity constraint violation (ICV)* angelegt, hier z.B.  `ICV_Schimmel`: Eine Pferd, das dank seiner weißer Farbe als Schimmel klassifiziert wurde, dazu aber auch noch *andere* Farben hat, wird auch als `ICV-Schimmel` klassifiziert. Über SQL kann man dann die Instanzen der ICV-Klassen abfragen und die Applikation entscheiden lassen, wie damit umzugehen ist. 

Die *anderen* Farben können zur Kompilierungszeit syntaktisch aus der lokalen Umgebung (hier: `BY has_color SOME Color`) bestimmt werden.

Aber das ist insbesondere für User nur schwer nachzuvollziehen. Vorläufig steht SOMLY nicht auf der Prioritäten-Liste.
           
