liveontologies / elk-reasoner

A Java-based OWL 2 EL reasoner
Apache License 2.0
94 stars 25 forks source link

NullPointer while classifying the EL fragment of galen #38

Open naditina opened 8 years ago

naditina commented 8 years ago

I am working with ELK (elk-distribution-0.4.3-owlapi-library) on the EL fragment of some version of galen. I added and subsequently removed several axioms that introduce fresh concept symbols as a shortcut for conjunctions built from subconcepts of that ontology. I get the following exception with the following stack trace:

Exception in thread "main" java.lang.NullPointerException at org.semanticweb.elk.util.collections.ArrayHashMap.get(ArrayHashMap.java:203) at org.semanticweb.elk.util.collections.chains.AbstractChain$1.next(AbstractChain.java:105) at org.semanticweb.elk.util.collections.chains.AbstractChain$1.next(AbstractChain.java:101) at org.semanticweb.elk.util.collections.chains.AbstractChain.find(AbstractChain.java:42) at org.semanticweb.elk.reasoner.indexing.hierarchy.IndexedSubClassOfAxiom$ThisCompositionRule.removeFrom(IndexedSubClassOfAxiom.java:162) at org.semanticweb.elk.reasoner.indexing.hierarchy.DifferentialIndex.add(DifferentialIndex.java:172) at org.semanticweb.elk.reasoner.indexing.hierarchy.IndexedSubClassOfAxiom.updateOccurrenceNumbers(IndexedSubClassOfAxiom.java:85) at org.semanticweb.elk.reasoner.indexing.hierarchy.MainAxiomIndexerVisitor$AxiomOccurrenceUpdateFilter.update(MainAxiomIndexerVisitor.java:384) at org.semanticweb.elk.reasoner.indexing.hierarchy.MainAxiomIndexerVisitor$AxiomOccurrenceUpdateFilter.visit(MainAxiomIndexerVisitor.java:394) at org.semanticweb.elk.reasoner.indexing.hierarchy.MainAxiomIndexerVisitor$AxiomOccurrenceUpdateFilter.visit(MainAxiomIndexerVisitor.java:373) at org.semanticweb.elk.reasoner.indexing.hierarchy.MainAxiomIndexerVisitor.indexSubClassOfAxiom(MainAxiomIndexerVisitor.java:148) at org.semanticweb.elk.reasoner.indexing.hierarchy.AbstractElkAxiomIndexerVisitor.visit(AbstractElkAxiomIndexerVisitor.java:166) at org.semanticweb.elk.reasoner.indexing.hierarchy.AbstractElkAxiomIndexerVisitor.visit(AbstractElkAxiomIndexerVisitor.java:63) at org.semanticweb.elk.owlapi.wrapper.ElkEquivalentClassesAxiomWrap.accept(ElkEquivalentClassesAxiomWrap.java:61) at org.semanticweb.elk.owlapi.wrapper.ElkClassAxiomWrap.accept(ElkClassAxiomWrap.java:51) at org.semanticweb.elk.reasoner.indexing.hierarchy.DelegatingElkAxiomVisitor.visit(DelegatingElkAxiomVisitor.java:103) at org.semanticweb.elk.reasoner.indexing.hierarchy.DelegatingElkAxiomVisitor.visit(DelegatingElkAxiomVisitor.java:74) at org.semanticweb.elk.owlapi.wrapper.ElkEquivalentClassesAxiomWrap.accept(ElkEquivalentClassesAxiomWrap.java:61) at org.semanticweb.elk.owlapi.wrapper.ElkClassAxiomWrap.accept(ElkClassAxiomWrap.java:51) at org.semanticweb.elk.reasoner.indexing.hierarchy.ChangeIndexingProcessor.visit(ChangeIndexingProcessor.java:57) at org.semanticweb.elk.owlapi.OwlOntologyChangeProcessorVisitor.visit(OwlOntologyChangeProcessorVisitor.java:78) at org.semanticweb.elk.owlapi.OwlOntologyChangeProcessorVisitor.visit(OwlOntologyChangeProcessorVisitor.java:39) at org.semanticweb.owlapi.model.AddAxiom.accept(AddAxiom.java:76) at org.semanticweb.elk.owlapi.OwlChangesLoader.load(OwlChangesLoader.java:90) at org.semanticweb.elk.reasoner.stages.AxiomLoadingStage.executeStage(AxiomLoadingStage.java:121) at org.semanticweb.elk.reasoner.stages.AbstractReasonerStage.execute(AbstractReasonerStage.java:165) at org.semanticweb.elk.reasoner.stages.AxiomLoadingStage.execute(AxiomLoadingStage.java:45) at org.semanticweb.elk.reasoner.stages.LoggingStageExecutor.execute(LoggingStageExecutor.java:53) at org.semanticweb.elk.reasoner.stages.AbstractStageExecutor.complete(AbstractStageExecutor.java:55) at org.semanticweb.elk.reasoner.stages.AbstractReasonerState.complete(AbstractReasonerState.java:145) at org.semanticweb.elk.reasoner.stages.AbstractReasonerState.loadAxioms(AbstractReasonerState.java:306) at org.semanticweb.elk.reasoner.stages.AbstractReasonerState.isInconsistent(AbstractReasonerState.java:284) at org.semanticweb.elk.reasoner.stages.AbstractReasonerState.getTaxonomy(AbstractReasonerState.java:324) at org.semanticweb.elk.owlapi.ElkReasoner.precomputeInferences(ElkReasoner.java:942) at simplification.ConceptMinimizer.computeConjunctions(ConceptMinimizer.java:254)

Nadeschda

ykazakov commented 8 years ago

Hi & thanks for reporting! Unfortunately I cannot reproduce this. I need more input.

Can you paste the log output of ELK? Are there any warning / error messages?

Also, can you try to pinpoint which exactly axiom addition triggers the error? As I can see from the stack trace, it is triggered when an equivalence axiom is being added. I need to know which one.

Ideally, could you provide a small example like the one here (with concrete ontology and class expressions) that triggers the problem in your case?

ykazakov commented 8 years ago

Hi Nadeschda, we were able to reproduce your error message if we query for the empty conjunctions, i.e., add axioms like:

EquivalentClasses(:tmp ObjectIntersectionOf())

Do you by chance create such expressions?

Although it is not a valid OWL 2 expression, OWL API allows to create expressions like this (probably to be backward compatible with the previous version of OWL). This should be related to issue #35

naditina commented 8 years ago

Hi Yevgeny,

indeed this was the cause. Thank you for looking into it.

Nadeschda

ykazakov commented 8 years ago

Reopening this to avoid similar problems in the future. Should treat empty conjunction as owl:Thing, empty disjunction as owl:Nothing, etc.