@Override public String toString() { return isTrue() ? "true" : isFalse() ? "false" : "unknown"; } }
@Override public String toString() { return isTrue() ? "true" : isFalse() ? "false" : "unknown"; } }
public void add(final T obj, final Bool isKnown) { if (isKnown.isTrue()) _knowns.add(obj); else if (isKnown.isUnknown()) _unknowns.add(obj); }
public void add(final T obj, final Bool isKnown) { if (isKnown.isTrue()) _knowns.add(obj); else if (isKnown.isUnknown()) _unknowns.add(obj); }
public void update(final T obj, final Bool isCandidate) { if (isCandidate.isTrue()) { // do nothing } else if (isCandidate.isFalse()) remove(obj); else if (_knowns.contains(obj)) { _knowns.remove(obj); _unknowns.add(obj); } }
public void update(final T obj, final Bool isCandidate) { if (isCandidate.isTrue()) { // do nothing } else if (isCandidate.isFalse()) remove(obj); else if (_knowns.contains(obj)) { _knowns.remove(obj); _unknowns.add(obj); } }
@Override public boolean contains(final KnowledgeBase kb, final GraphLoader loader, final Node s, final Node p, final Node o) { final ATermAppl prop = loader.node2term(p); if (!kb.isProperty(prop)) return false; for (final ATermAppl ind : kb.getIndividuals()) if (kb.hasKnownPropertyValue(ind, prop, null).isTrue()) return true; return false; }
@Override public void visit(final OWLEquivalentClassesAxiom axiom) { _isEntailed = true; final Iterator<OWLClassExpression> i = axiom.classExpressions().iterator(); if (i.hasNext()) { final OWLClassExpression first = i.next(); while (i.hasNext() && _isEntailed) { final OWLClassExpression next = i.next(); if (!_reasoner.isClassified() || first.isAnonymous() || next.isAnonymous()) _isEntailed = _reasoner.getReasoner().isEntailed(OWL.equivalentClasses(first, next)); else _isEntailed = _reasoner.getTaxonomy().isEquivalent((OWLClass) first, (OWLClass) next).isTrue(); } } }
@Override public boolean contains(final KnowledgeBase kb, final GraphLoader loader, final Node s, final Node p, final Node o) { final ATermAppl prop = loader.node2term(p); if (!kb.isProperty(prop)) return false; for (final ATermAppl ind : kb.getIndividuals()) if (kb.hasKnownPropertyValue(ind, prop, null).isTrue()) return true; return false; }
@Override public boolean contains(final KnowledgeBase kb, final GraphLoader loader, final Node s, final Node p, final Node o) { final ATermAppl prop = loader.node2term(p); if (!kb.isProperty(prop)) return false; for (final ATermAppl ind : kb.getIndividuals()) if (kb.hasKnownPropertyValue(ind, prop, null).isTrue()) return true; return false; }
@Override public void visit(final OWLEquivalentClassesAxiom axiom) { _isEntailed = true; final Iterator<OWLClassExpression> i = axiom.classExpressions().iterator(); if (i.hasNext()) { final OWLClassExpression first = i.next(); while (i.hasNext() && _isEntailed) { final OWLClassExpression next = i.next(); if (!_reasoner.isClassified() || first.isAnonymous() || next.isAnonymous()) _isEntailed = _reasoner.getReasoner().isEntailed(OWL.equivalentClasses(first, next)); else _isEntailed = _reasoner.getTaxonomy().isEquivalent((OWLClass) first, (OWLClass) next).isTrue(); } } }
@Override public boolean isSubClassOf(final ATermAppl c1, final ATermAppl c2) { if (!_doExplanation) { final Bool isKnownSubClass = isKnownSubClassOf(c1, c2); if (isKnownSubClass.isKnown()) return isKnownSubClass.isTrue(); } if (_logger.isLoggable(Level.FINE)) { final long count = _kb.getTimers().getTimer("subClassSat").map(t -> t.getCount()).orElse(0L); _logger.fine(count + ") Checking subclass [" + ATermUtils.toString(c1) + " " + ATermUtils.toString(c2) + "]"); } final ATermAppl notC2 = ATermUtils.negate(c2); final ATermAppl c = ATermUtils.makeAnd(c1, notC2); final Optional<Timer> timer = _kb.getTimers().startTimer("subClassSat"); final boolean sub = !isSatisfiable(c, false); timer.ifPresent(t -> t.stop()); _logger.fine(() -> " Result: " + sub + timer.map(t -> " (" + t.getLast() + "ms)").orElse("")); return sub; }
@Override public boolean isSubClassOf(final ATermAppl c1, final ATermAppl c2) { if (!_doExplanation) { final Bool isKnownSubClass = isKnownSubClassOf(c1, c2); if (isKnownSubClass.isKnown()) return isKnownSubClass.isTrue(); } if (_logger.isLoggable(Level.FINE)) { final long count = _kb.getTimers().getTimer("subClassSat").map(t -> t.getCount()).orElse(0L); _logger.fine(count + ") Checking subclass [" + ATermUtils.toString(c1) + " " + ATermUtils.toString(c2) + "]"); } final ATermAppl notC2 = ATermUtils.negate(c2); final ATermAppl c = ATermUtils.makeAnd(c1, notC2); final Optional<Timer> timer = _kb.getTimers().startTimer("subClassSat"); final boolean sub = !isSatisfiable(c, false); timer.ifPresent(t -> t.stop()); _logger.fine(() -> " Result: " + sub + timer.map(t -> " (" + t.getLast() + "ms)").orElse("")); return sub; }
@Override protected void addUses(final ATermAppl c, final ATermAppl d) { if (_definitionOrderTaxonomy.isEquivalent(c, d).isTrue()) return; final TaxonomyNode<ATermAppl> cNode = _definitionOrderTaxonomy.getNode(c); final TaxonomyNode<ATermAppl> dNode = _definitionOrderTaxonomy.getNode(d); if (cNode == null) throw new InternalReasonerException(c + " is not in the definition _order"); else if (cNode.equals(_definitionOrderTaxonomy.getTop())) _definitionOrderTaxonomy.merge(cNode, dNode); else { _definitionOrderTaxonomy.addSuper(c, d); _definitionOrderTaxonomy.removeCycles(cNode); } }
@Override protected void addUses(final ATermAppl c, final ATermAppl d) { if (_definitionOrderTaxonomy.isEquivalent(c, d).isTrue()) return; final TaxonomyNode<ATermAppl> cNode = _definitionOrderTaxonomy.getNode(c); final TaxonomyNode<ATermAppl> dNode = _definitionOrderTaxonomy.getNode(d); if (cNode == null) throw new InternalReasonerException(c + " is not in the definition _order"); else if (cNode.equals(_definitionOrderTaxonomy.getTop())) _definitionOrderTaxonomy.merge(cNode, dNode); else { _definitionOrderTaxonomy.addSuper(c, d); _definitionOrderTaxonomy.removeCycles(cNode); } }
@Override public Bool isKnownType(final ATermAppl x, final ATermAppl c, final Collection<ATermAppl> subs) { assert isComplete() : "Initial consistency check has not been performed!"; Individual pNode = getIndividual(x); boolean isIndependent = true; if (pNode.isMerged()) { isIndependent = pNode.getMergeDependency(true).isIndependent(); pNode = pNode.getSame(); } final Bool isType = isKnownType(pNode, c, subs); if (isIndependent) return isType; else if (isType.isTrue()) return Bool.UNKNOWN; else return isType; }
@Override public void visit(final OWLSubClassOfAxiom axiom) { final OWLClassExpression subClass = axiom.getSubClass(); final OWLClassExpression superClass = axiom.getSuperClass(); if (!_reasoner.isClassified() || subClass.isAnonymous() || superClass.isAnonymous()) _isEntailed = _reasoner.getReasoner().isEntailed(axiom); else _isEntailed = _reasoner.getTaxonomy().isSubNodeOf((OWLClass) subClass, (OWLClass) superClass).isTrue(); }
@Override public void visit(final OWLSubClassOfAxiom axiom) { final OWLClassExpression subClass = axiom.getSubClass(); final OWLClassExpression superClass = axiom.getSuperClass(); if (!_reasoner.isClassified() || subClass.isAnonymous() || superClass.isAnonymous()) _isEntailed = _reasoner.getReasoner().isEntailed(axiom); else _isEntailed = _reasoner.getTaxonomy().isSubNodeOf((OWLClass) subClass, (OWLClass) superClass).isTrue(); }
@Override public boolean hasPropertyValue(final ATermAppl s, final ATermAppl p, final ATermAppl o) { final Bool hasObviousValue = hasObviousPropertyValue(s, p, o); if (hasObviousValue.isKnown()) if (hasObviousValue.isFalse() || !doExplanation()) return hasObviousValue.isTrue(); ATermAppl c = null; if (o == null) { if (_kb.isDatatypeProperty(p)) c = ATermUtils.makeMin(p, 1, ATermUtils.TOP_LIT); else c = ATermUtils.makeMin(p, 1, ATermUtils.TOP); } else c = ATermUtils.makeHasValue(p, o); final boolean isType = isType(s, c); return isType; }
@Override public boolean hasPropertyValue(final ATermAppl s, final ATermAppl p, final ATermAppl o) { final Bool hasObviousValue = hasObviousPropertyValue(s, p, o); if (hasObviousValue.isKnown()) if (hasObviousValue.isFalse() || !doExplanation()) return hasObviousValue.isTrue(); ATermAppl c = null; if (o == null) { if (_kb.isDatatypeProperty(p)) c = ATermUtils.makeMin(p, 1, ATermUtils.TOP_LIT); else c = ATermUtils.makeMin(p, 1, ATermUtils.TOP); } else c = ATermUtils.makeHasValue(p, o); final boolean isType = isType(s, c); return isType; }