@Override public boolean isConsistent() { flushChangesIfRequired(); if (m_isConsistent==null) m_isConsistent=Boolean.valueOf(getTableau().isSatisfiable(true,true,null,null,null,null,null,ReasoningTaskDescription.isABoxSatisfiable())); return m_isConsistent.booleanValue(); } @Override
/** * @param individual1 individual1 * @param individual2 individual2 * @return true if same */ public boolean isSameIndividual(Individual individual1, Individual individual2) { return (!m_reasoner.getTableau().isSatisfiable(true,false,Collections.singleton(Atom.create(Inequality.INSTANCE,individual1,individual2)),null,null,null,null,new ReasoningTaskDescription(true,"is {0} same as {1}",individual1,individual2))); } /**
public boolean isSameIndividual(Individual individual1, Individual individual2) { return (!m_reasoner.getTableau().isSatisfiable(true,false,Collections.singleton(Atom.create(Inequality.INSTANCE,individual1,individual2)),null,null,null,null,new ReasoningTaskDescription(true,"is {0} same as {1}",individual1,individual2))); } public void computeSameAsEquivalenceClasses(ReasonerProgressMonitor progressMonitor) {
public boolean isConsistent() { flushChangesIfRequired(); if (m_isConsistent==null) m_isConsistent=getTableau().isSatisfiable(true,true,null,null,null,null,null,ReasoningTaskDescription.isABoxSatisfiable()); return m_isConsistent; } public boolean isEntailmentCheckingSupported(AxiomType<?> axiomType) {
protected boolean isIrreflexive(OWLObjectPropertyExpression propertyExpression) { checkPreConditions(propertyExpression); if (!m_isConsistent.booleanValue()) return true; Role role=H(propertyExpression); Individual freshIndividual=Individual.createAnonymous("fresh-individual"); return !getTableau().isSatisfiable(false,Collections.singleton(role.getRoleAssertion(freshIndividual,freshIndividual)),null,null,null,null,new ReasoningTaskDescription(true,"irreflexivity of {0}",role)); } protected boolean isReflexive(OWLObjectPropertyExpression propertyExpression) {
protected boolean isInstance(Individual individual,AtomicConcept atomicConcept) { boolean result = !m_reasoner.getTableau().isSatisfiable(true,false,null,Collections.singleton(Atom.create(atomicConcept,individual)),null,null,null,ReasoningTaskDescription.isInstanceOf(atomicConcept,individual)); if (m_tableauMonitor!=null) { if (result) m_tableauMonitor.possibleInstanceIsInstance(); else m_tableauMonitor.possibleInstanceIsNotInstance(); } return result; } protected boolean isRoleInstance(Role role, Individual _individual1, Individual _individual2) {
protected boolean isInstance(Individual individual,AtomicConcept atomicConcept) { boolean result = !m_reasoner.getTableau().isSatisfiable(true,false,null,Collections.singleton(Atom.create(atomicConcept,individual)),null,null,null,ReasoningTaskDescription.isInstanceOf(atomicConcept,individual)); if (m_tableauMonitor!=null) { if (result) m_tableauMonitor.possibleInstanceIsInstance(); else m_tableauMonitor.possibleInstanceIsNotInstance(); } return result; } protected boolean isRoleInstance(Role role, Individual individual1, Individual individual2) {
protected boolean isFunctional(OWLObjectPropertyExpression propertyExpression) { checkPreConditions(propertyExpression); if (!m_isConsistent.booleanValue()) return true; Role role=H(propertyExpression); Individual freshIndividual=Individual.createAnonymous("fresh-individual"); Individual freshIndividualA=Individual.createAnonymous("fresh-individual-A"); Individual freshIndividualB=Individual.createAnonymous("fresh-individual-B"); Set<Atom> assertions=new HashSet<>(); assertions.add(role.getRoleAssertion(freshIndividual,freshIndividualA)); assertions.add(role.getRoleAssertion(freshIndividual,freshIndividualB)); assertions.add(Atom.create(Inequality.INSTANCE,freshIndividualA,freshIndividualB)); return !getTableau().isSatisfiable(false,assertions,null,null,null,null,new ReasoningTaskDescription(true,"functionality of {0}",role)); } protected boolean isInverseFunctional(OWLObjectPropertyExpression propertyExpression) {
protected boolean isInverseFunctional(OWLObjectPropertyExpression propertyExpression) { checkPreConditions(propertyExpression); if (!m_isConsistent.booleanValue()) return true; Role role=H(propertyExpression); Individual freshIndividual=Individual.createAnonymous("fresh-individual"); Individual freshIndividualA=Individual.createAnonymous("fresh-individual-A"); Individual freshIndividualB=Individual.createAnonymous("fresh-individual-B"); Set<Atom> assertions=new HashSet<>(); assertions.add(role.getRoleAssertion(freshIndividualA,freshIndividual)); assertions.add(role.getRoleAssertion(freshIndividualB,freshIndividual)); assertions.add(Atom.create(Inequality.INSTANCE,freshIndividualA,freshIndividualB)); return !getTableau().isSatisfiable(false,assertions,null,null,null,null,new ReasoningTaskDescription(true,"inverse-functionality of {0}",role)); } protected boolean isIrreflexive(OWLObjectPropertyExpression propertyExpression) {
protected boolean isFunctional(OWLDataProperty property) { checkPreConditions(property); if (!m_isConsistent.booleanValue()) return true; AtomicRole atomicRole=H(property); Individual freshIndividual=Individual.createAnonymous("fresh-individual"); Constant freshConstantA=Constant.createAnonymous("fresh-constant-A"); Constant freshConstantB=Constant.createAnonymous("fresh-constant-B"); Set<Atom> assertions=new HashSet<>(); assertions.add(atomicRole.getRoleAssertion(freshIndividual,freshConstantA)); assertions.add(atomicRole.getRoleAssertion(freshIndividual,freshConstantB)); assertions.add(Atom.create(Inequality.INSTANCE,freshConstantA,freshConstantB)); return !getTableau().isSatisfiable(false,assertions,null,null,null,null,new ReasoningTaskDescription(true,"functionality of {0}",atomicRole)); } protected HierarchyNode<AtomicRole> getHierarchyNode(OWLDataProperty property) {
protected boolean isIrreflexive(OWLObjectPropertyExpression propertyExpression) { checkPreConditions(propertyExpression); if (!m_isConsistent) return true; Role role=H(propertyExpression); Individual freshIndividual=Individual.createAnonymous("fresh-individual"); return !getTableau().isSatisfiable(false,Collections.singleton(role.getRoleAssertion(freshIndividual,freshIndividual)),null,null,null,null,new ReasoningTaskDescription(true,"irreflexivity of {0}",role)); } protected boolean isReflexive(OWLObjectPropertyExpression propertyExpression) {
protected boolean isDisjointObjectProperty(OWLObjectPropertyExpression propertyExpression1,OWLObjectPropertyExpression propertyExpression2) { checkPreConditions(propertyExpression1,propertyExpression2); if (!m_isConsistent.booleanValue()) return true; Role role1=H(propertyExpression1); Role role2=H(propertyExpression2); Individual freshIndividualA=Individual.createAnonymous("fresh-individual-A"); Individual freshIndividualB=Individual.createAnonymous("fresh-individual-B"); Atom roleAssertion1=role1.getRoleAssertion(freshIndividualA,freshIndividualB); Atom roleAssertion2=role2.getRoleAssertion(freshIndividualA,freshIndividualB); Set<Atom> perTestAtoms=new HashSet<>(2); perTestAtoms.add(roleAssertion1); perTestAtoms.add(roleAssertion2); return !getTableau().isSatisfiable(false,perTestAtoms,null,null,null,null,new ReasoningTaskDescription(true,"disjointness of {0} and {1}",role1,role2)); } protected boolean isFunctional(OWLObjectPropertyExpression propertyExpression) {
protected boolean isFunctional(OWLDataProperty property) { checkPreConditions(property); if (!m_isConsistent) return true; AtomicRole atomicRole=H(property); Individual freshIndividual=Individual.createAnonymous("fresh-individual"); Constant freshConstantA=Constant.createAnonymous("fresh-constant-A"); Constant freshConstantB=Constant.createAnonymous("fresh-constant-B"); Set<Atom> assertions=new HashSet<Atom>(); assertions.add(atomicRole.getRoleAssertion(freshIndividual,freshConstantA)); assertions.add(atomicRole.getRoleAssertion(freshIndividual,freshConstantB)); assertions.add(Atom.create(Inequality.INSTANCE,freshConstantA,freshConstantB)); return !getTableau().isSatisfiable(false,assertions,null,null,null,null,new ReasoningTaskDescription(true,"functionality of {0}",atomicRole)); } protected HierarchyNode<AtomicRole> getHierarchyNode(OWLDataProperty property) {
protected boolean isInverseFunctional(OWLObjectPropertyExpression propertyExpression) { checkPreConditions(propertyExpression); if (!m_isConsistent) return true; Role role=H(propertyExpression); Individual freshIndividual=Individual.createAnonymous("fresh-individual"); Individual freshIndividualA=Individual.createAnonymous("fresh-individual-A"); Individual freshIndividualB=Individual.createAnonymous("fresh-individual-B"); Set<Atom> assertions=new HashSet<Atom>(); assertions.add(role.getRoleAssertion(freshIndividualA,freshIndividual)); assertions.add(role.getRoleAssertion(freshIndividualB,freshIndividual)); assertions.add(Atom.create(Inequality.INSTANCE,freshIndividualA,freshIndividualB)); return !getTableau().isSatisfiable(false,assertions,null,null,null,null,new ReasoningTaskDescription(true,"inverse-functionality of {0}",role)); } protected boolean isIrreflexive(OWLObjectPropertyExpression propertyExpression) {
protected boolean isFunctional(OWLObjectPropertyExpression propertyExpression) { checkPreConditions(propertyExpression); if (!m_isConsistent) return true; Role role=H(propertyExpression); Individual freshIndividual=Individual.createAnonymous("fresh-individual"); Individual freshIndividualA=Individual.createAnonymous("fresh-individual-A"); Individual freshIndividualB=Individual.createAnonymous("fresh-individual-B"); Set<Atom> assertions=new HashSet<Atom>(); assertions.add(role.getRoleAssertion(freshIndividual,freshIndividualA)); assertions.add(role.getRoleAssertion(freshIndividual,freshIndividualB)); assertions.add(Atom.create(Inequality.INSTANCE,freshIndividualA,freshIndividualB)); return !getTableau().isSatisfiable(false,assertions,null,null,null,null,new ReasoningTaskDescription(true,"functionality of {0}",role)); } protected boolean isInverseFunctional(OWLObjectPropertyExpression propertyExpression) {
public boolean hasDataPropertyRelationship(OWLNamedIndividual subject,OWLDataProperty property,OWLLiteral object) { checkPreConditions(subject,property); if (!m_isConsistent) return true; OWLDataFactory factory=getDataFactory(); OWLAxiom notAssertion=factory.getOWLNegativeDataPropertyAssertionAxiom(property,subject,object); Tableau tableau=getTableau(notAssertion); boolean result=tableau.isSatisfiable(true,true,null,null,null,null,null,new ReasoningTaskDescription(true,"is {0} connected to {1} via {2}",H(subject),object,H(property))); tableau.clearAdditionalDLOntology(); return !result; } protected Set<HierarchyNode<AtomicConcept>> getDirectSuperConceptNodes(final Individual individual) {
protected boolean isAsymmetric(OWLObjectPropertyExpression propertyExpression) { checkPreConditions(propertyExpression); if (!m_isConsistent.booleanValue()) return true; OWLDataFactory factory=getDataFactory(); OWLIndividual freshIndividualA=factory.getOWLAnonymousIndividual("fresh-individual-A"); OWLIndividual freshIndividualB=factory.getOWLAnonymousIndividual("fresh-individual-B"); OWLAxiom assertion1=factory.getOWLObjectPropertyAssertionAxiom(propertyExpression,freshIndividualA,freshIndividualB); OWLAxiom assertion2=factory.getOWLObjectPropertyAssertionAxiom(propertyExpression.getInverseProperty(),freshIndividualA,freshIndividualB); Tableau tableau=getTableau(assertion1,assertion2); boolean result=tableau.isSatisfiable(true,null,null,null,null,null,new ReasoningTaskDescription(true,"asymmetry of {0}",H(propertyExpression))); tableau.clearAdditionalDLOntology(); return !result; } protected boolean isSymmetric(OWLObjectPropertyExpression propertyExpression) {
protected boolean isReflexive(OWLObjectPropertyExpression propertyExpression) { checkPreConditions(propertyExpression); if (!m_isConsistent.booleanValue()) return true; OWLDataFactory factory=getDataFactory(); OWLClass pseudoNominal=factory.getOWLClass(PSEUDO_NOMINAL); OWLClassExpression allNotPseudoNominal=factory.getOWLObjectAllValuesFrom(propertyExpression,pseudoNominal.getObjectComplementOf()); OWLIndividual freshIndividual=factory.getOWLAnonymousIndividual("fresh-individual"); OWLAxiom pseudoNominalAssertion=factory.getOWLClassAssertionAxiom(pseudoNominal,freshIndividual); OWLAxiom allNotPseudoNominalAssertion=factory.getOWLClassAssertionAxiom(allNotPseudoNominal,freshIndividual); Tableau tableau=getTableau(pseudoNominalAssertion,allNotPseudoNominalAssertion); boolean result=tableau.isSatisfiable(true,null,null,null,null,null,new ReasoningTaskDescription(true,"symmetry of {0}",H(propertyExpression))); tableau.clearAdditionalDLOntology(); return !result; } protected boolean isAsymmetric(OWLObjectPropertyExpression propertyExpression) {
protected boolean isAsymmetric(OWLObjectPropertyExpression propertyExpression) { checkPreConditions(propertyExpression); if (!m_isConsistent) return true; OWLDataFactory factory=getDataFactory(); OWLIndividual freshIndividualA=factory.getOWLAnonymousIndividual("fresh-individual-A"); OWLIndividual freshIndividualB=factory.getOWLAnonymousIndividual("fresh-individual-B"); OWLAxiom assertion1=factory.getOWLObjectPropertyAssertionAxiom(propertyExpression,freshIndividualA,freshIndividualB); OWLAxiom assertion2=factory.getOWLObjectPropertyAssertionAxiom(propertyExpression.getInverseProperty(),freshIndividualA,freshIndividualB); Tableau tableau=getTableau(assertion1,assertion2); boolean result=tableau.isSatisfiable(true,null,null,null,null,null,new ReasoningTaskDescription(true,"asymmetry of {0}",H(propertyExpression))); tableau.clearAdditionalDLOntology(); return !result; } protected boolean isSymmetric(OWLObjectPropertyExpression propertyExpression) {
protected boolean isReflexive(OWLObjectPropertyExpression propertyExpression) { checkPreConditions(propertyExpression); if (!m_isConsistent) return true; OWLDataFactory factory=getDataFactory(); OWLClass pseudoNominal=factory.getOWLClass(IRI.create("internal:pseudo-nominal")); OWLClassExpression allNotPseudoNominal=factory.getOWLObjectAllValuesFrom(propertyExpression,pseudoNominal.getObjectComplementOf()); OWLIndividual freshIndividual=factory.getOWLAnonymousIndividual("fresh-individual"); OWLAxiom pseudoNominalAssertion=factory.getOWLClassAssertionAxiom(pseudoNominal,freshIndividual); OWLAxiom allNotPseudoNominalAssertion=factory.getOWLClassAssertionAxiom(allNotPseudoNominal,freshIndividual); Tableau tableau=getTableau(pseudoNominalAssertion,allNotPseudoNominalAssertion); boolean result=tableau.isSatisfiable(true,null,null,null,null,null,new ReasoningTaskDescription(true,"symmetry of {0}",H(propertyExpression))); tableau.clearAdditionalDLOntology(); return !result; } protected boolean isAsymmetric(OWLObjectPropertyExpression propertyExpression) {