I am currently using OWLAPI and the HermiT reasoner on a simple ontology O
modelling delegation.
O
represents the M.W.E. showing the issue I am facing and defines a single class Person
, a single object property delegates(.,.)
(whose domain and range are Person
) and three individual of type Person
(A, B and C). Finally, I stated delegates(A, B)
, delegates(B, C)
, delegates(C, A)
.
I am trying to enforce the existence of an irreflexive transitive object property to cause an inconsistency in the ontology when a direct or indirect circular delegation exists.
To the best of my knowledge, this type of property is unsupported since it is non-simple.
I tried to work around this issue defining a SWRL rule of the shape:
Person(?p), delegates(?p, ?p) -> owl:Nothing(?p)
; however, HermiT DOES NOT identify any inconsistency, despite the fact that transitivity allows to infer that delegates(A, A)
.
I tried the Pellet reasoner and the ontology is correctly declared inconsistent (after that Protegè badly hangs and the UI becomes inconsistent as well), however in the non-MWE I have so many assertions that the Pellet reasoner is unable to process them in a practical time. This is why I am using HermiT, version 1.4.3.456
. (I also tried the same inference under the latest version 1.4.5.519
with no inconsistency result.)
Any suggestion to cause the inconsistency would be appreciated.
Here is the xml code encoding O
, I had to remove the ontology and prefix tags to avoid to trigger the spam filter
.
<Declaration>
<Class IRI="#Person"/>
</Declaration>
<Declaration>
<ObjectProperty IRI="#delegates"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#A"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#B"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#C"/>
</Declaration>
<ClassAssertion>
<Class IRI="#Person"/>
<NamedIndividual IRI="#A"/>
</ClassAssertion>
<ClassAssertion>
<Class IRI="#Person"/>
<NamedIndividual IRI="#B"/>
</ClassAssertion>
<ClassAssertion>
<Class IRI="#Person"/>
<NamedIndividual IRI="#C"/>
</ClassAssertion>
<ObjectPropertyAssertion>
<ObjectProperty IRI="#delegates"/>
<NamedIndividual IRI="#A"/>
<NamedIndividual IRI="#B"/>
</ObjectPropertyAssertion>
<ObjectPropertyAssertion>
<ObjectProperty IRI="#delegates"/>
<NamedIndividual IRI="#B"/>
<NamedIndividual IRI="#C"/>
</ObjectPropertyAssertion>
<ObjectPropertyAssertion>
<ObjectProperty IRI="#delegates"/>
<NamedIndividual IRI="#C"/>
<NamedIndividual IRI="#A"/>
</ObjectPropertyAssertion>
<TransitiveObjectProperty>
<ObjectProperty IRI="#delegates"/>
</TransitiveObjectProperty>
<ObjectPropertyDomain>
<ObjectProperty IRI="#delegates"/>
<Class IRI="#Person"/>
</ObjectPropertyDomain>
<ObjectPropertyRange>
<ObjectProperty IRI="#delegates"/>
<Class IRI="#Person"/>
</ObjectPropertyRange>
<DLSafeRule>
<Body>
<ClassAtom>
<Class IRI="#Person"/>
<Variable IRI="urn:swrl:var#p"/>
</ClassAtom>
<ObjectPropertyAtom>
<ObjectProperty IRI="#delegates"/>
<Variable IRI="urn:swrl:var#p"/>
<Variable IRI="urn:swrl:var#p"/>
</ObjectPropertyAtom>
</Body>
<Head>
<ClassAtom>
<Class abbreviatedIRI="owl:Nothing"/>
<Variable IRI="urn:swrl:var#p"/>
</ClassAtom>
</Head>
</DLSafeRule>