Galigator / openllet

Openllet is an OWL 2 reasoner in Java, build on top of Pellet.
https://www.w3.org/TR/owl2-primer/
Other
99 stars 26 forks source link

InternalReasonerException: Nominal FunValue(..) is not found in the KB #37

Open Locke opened 6 years ago

Locke commented 6 years ago

While debugging an inconsistency I stumbled upon an unrelated InternalReasonerException in an ontology which was generated by SearchMinimalBug.

Although that Exception doesn't occur in my real application / ontology I thought it might be worth sharing with you, as it looks like an internal bug that you might want to take a look at. Feel free to just ignore / close this issue report, as it is an arbitrary ontology. I'm using version 2.6.5-SNAPSHOT / 9c5928a4b49c83e69889ab2894036494e5c95a0d.

You can find the ontology here (I flavored the original minimal ontology a bit with a random example so that it is easier to understand): https://gist.github.com/Locke/3b6e316a9efb963fb8d1da82cf539757#file-singleredcarownerinternalreasonerexception-owl

In the ontology is a class Owner. Its subclass SingleRedCarOwner should be someone who has one car, and the color of the car must be red: hasCar exactly 1 (Car and (hasColour value Red)).

When I call kb.realize(); on that ontology an InternalReasonerException is thrown:

openllet.core.exceptions.InternalReasonerException: Nominal FunValue(http://de.athalis.owl.App.main()#Red) is not found in the KB!
        at openllet.core.tableau.completion.rule.SomeValuesRule.applySomeValuesRule(SomeValuesRule.java:210)
        at openllet.core.tableau.completion.rule.SomeValuesRule.apply(SomeValuesRule.java:60)
        at openllet.core.tableau.completion.EmptySRIQStrategy.expand(EmptySRIQStrategy.java:300)
        at openllet.core.tableau.completion.EmptySRIQStrategy.complete(EmptySRIQStrategy.java:156)
        at openllet.core.boxes.abox.ABoxImpl.lambda$isConsistent$12(ABoxImpl.java:1417)
        at openllet.core.utils.Timers.execute(Timers.java:118)
        at openllet.core.boxes.abox.ABoxImpl.isConsistent(ABoxImpl.java:1417)
        at openllet.core.boxes.abox.ABoxImpl.isSatisfiable(ABoxImpl.java:621)
        at openllet.core.taxonomy.CDOptimizedTaxonomyBuilder.checkSatisfiability(CDOptimizedTaxonomyBuilder.java:757)
        at openllet.core.taxonomy.CDOptimizedTaxonomyBuilder.classify(CDOptimizedTaxonomyBuilder.java:804)
        at openllet.core.taxonomy.CDOptimizedTaxonomyBuilder.classify(CDOptimizedTaxonomyBuilder.java:266)
        at openllet.core.taxonomy.CDOptimizedTaxonomyBuilder.classify(CDOptimizedTaxonomyBuilder.java:211)
        at openllet.core.KnowledgeBaseImpl.classify(KnowledgeBaseImpl.java:1919)
        at openllet.core.KnowledgeBaseImplFullSync.classify(KnowledgeBaseImplFullSync.java:385)
        at openllet.core.KnowledgeBaseImpl.realize(KnowledgeBaseImpl.java:1938)
        at openllet.core.KnowledgeBaseImplFullSync.realize(KnowledgeBaseImplFullSync.java:391)

As a workaround I added another definition: hasCar only (Car and (hasColour value Red)), see https://gist.github.com/Locke/3b6e316a9efb963fb8d1da82cf539757#file-singleredcarowner-owl

With this additional definition present the InternalReasonerException isn't thrown. That seems to support my theory of an internal bug.