public static TBox createTBox(final KnowledgeBase kb) { return OpenlletOptions.USE_LEGACY_TBOX ? new TBoxExpImpl(kb) : new TBoxImpl(kb); } }
final boolean removed = removeExplanation(dependantAxiom, explanationAxiom, sideEffects); addAxiom(readdAxiom, i.next(), true); while (i.hasNext()) addAxiomExplanation(readdAxiom, i.next());
public TBoxBase(final TBoxExpImpl tbox) { _tbox = tbox; _kb = tbox.getKB(); }
addDisjointAxiom(c1, c2, axioms); addDisjointAxiom(c1, c2, axioms); if (absorbNominals(a, explain)) added = true; else added |= addAxiom(a, explain, false);
private void absorbOneOf(final ATermList list, final ATermAppl c, final Set<ATermAppl> explain) { if (OpenlletOptions.USE_PSEUDO_NOMINALS) { _subLogger.warning(() -> "Ignoring axiom involving nominals: " + explain); return; } _subLogger.fine(() -> "Absorb nominals: " + ATermUtils.toString(c) + " " + list); _tbox.getAbsorbedAxioms().addAll(explain); final DependencySet ds = new DependencySet(explain); for (final ATerm term : list) { final ATermAppl nominal = (ATermAppl) term; final ATermAppl ind = (ATermAppl) nominal.getArgument(0); _kb.addIndividual(ind); _kb.addType(ind, c, ds); } }
public void absorb() { _subLogger.fine("Absorption started"); _subLogger.fine(() -> "Tg.size was " + _termhash.size() + " _Tu.size was " + _tbox._Tu.size()); final Collection<TermDefinition> terms = _termhash.values(); // _termhash.clear(); FIXME : why is this doesn't work ? // _termhash = new HashMap<>(); _termhash = CollectionUtils.makeIdentityMap(); for (final TermDefinition def : terms) { _kb.getTimers().checkTimer("preprocessing"); for (final ATermAppl subClassAxiom : def.getSubClassAxioms()) { final ATermAppl c1 = (ATermAppl) subClassAxiom.getArgument(0); final ATermAppl c2 = (ATermAppl) subClassAxiom.getArgument(1); absorbSubClass(c1, c2, _tbox.getAxiomExplanation(subClassAxiom)); } for (final ATermAppl eqClassAxiom : def.getEqClassAxioms()) { final ATermAppl c1 = (ATermAppl) eqClassAxiom.getArgument(0); final ATermAppl c2 = (ATermAppl) eqClassAxiom.getArgument(1); absorbSubClass(c1, c2, _tbox.getAxiomExplanation(eqClassAxiom)); absorbSubClass(c2, c1, _tbox.getAxiomExplanation(eqClassAxiom)); } } _subLogger.fine(() -> "Tg.size is " + _termhash.size() + " _Tu.size is " + _tbox._Tu.size()); _subLogger.fine("Absorption finished"); }
protected boolean addAxiom(final ATermAppl axiom, final Set<ATermAppl> explain, final boolean forceAddition) { final boolean added = addAxiomExplanation(axiom, explain); if (added || forceAddition) if (!_Tu.addIfUnfoldable(axiom)) if (axiom.getAFun().equals(ATermUtils.EQCLASSFUN)) { // Try reversing the term if it is a 'same' construct final ATermAppl name = (ATermAppl) axiom.getArgument(0); final ATermAppl desc = (ATermAppl) axiom.getArgument(1); final ATermAppl reversedAxiom = ATermUtils.makeEqClasses(desc, name); if (!_Tu.addIfUnfoldable(reversedAxiom)) _Tg.addDef(axiom); else addAxiomExplanation(reversedAxiom, explain); } else _Tg.addDef(axiom); return added; }
@Override public String toString() { final StringBuilder sb = new StringBuilder(); print(sb); return sb.toString(); }
@Override public boolean removeAxiom(final ATermAppl axiom) { return removeAxiom(axiom, axiom); }
addDisjointAxiom(c1, c2, axioms); addDisjointAxiom(c1, c2, axioms); if (absorbNominals(a, explain)) added = true; else added |= addAxiom(a, explain, false);
private void absorbOneOf(final ATermList list, final ATermAppl c, final Set<ATermAppl> explain) { if (OpenlletOptions.USE_PSEUDO_NOMINALS) { _subLogger.warning(() -> "Ignoring axiom involving nominals: " + explain); return; } _subLogger.fine(() -> "Absorb nominals: " + ATermUtils.toString(c) + " " + list); _tbox.getAbsorbedAxioms().addAll(explain); final DependencySet ds = new DependencySet(explain); for (final ATerm term : list) { final ATermAppl nominal = (ATermAppl) term; final ATermAppl ind = (ATermAppl) nominal.getArgument(0); _kb.addIndividual(ind); _kb.addType(ind, c, ds); } }
public void absorb() { _subLogger.fine("Absorption started"); _subLogger.fine(() -> "Tg.size was " + _termhash.size() + " _Tu.size was " + _tbox._Tu.size()); final Collection<TermDefinition> terms = _termhash.values(); // _termhash.clear(); FIXME : why is this doesn't work ? // _termhash = new HashMap<>(); _termhash = CollectionUtils.makeIdentityMap(); for (final TermDefinition def : terms) { _kb.getTimers().checkTimer("preprocessing"); for (final ATermAppl subClassAxiom : def.getSubClassAxioms()) { final ATermAppl c1 = (ATermAppl) subClassAxiom.getArgument(0); final ATermAppl c2 = (ATermAppl) subClassAxiom.getArgument(1); absorbSubClass(c1, c2, _tbox.getAxiomExplanation(subClassAxiom)); } for (final ATermAppl eqClassAxiom : def.getEqClassAxioms()) { final ATermAppl c1 = (ATermAppl) eqClassAxiom.getArgument(0); final ATermAppl c2 = (ATermAppl) eqClassAxiom.getArgument(1); absorbSubClass(c1, c2, _tbox.getAxiomExplanation(eqClassAxiom)); absorbSubClass(c2, c1, _tbox.getAxiomExplanation(eqClassAxiom)); } } _subLogger.fine(() -> "Tg.size is " + _termhash.size() + " _Tu.size is " + _tbox._Tu.size()); _subLogger.fine("Absorption finished"); }
protected boolean addAxiom(final ATermAppl axiom, final Set<ATermAppl> explain, final boolean forceAddition) { final boolean added = addAxiomExplanation(axiom, explain); if (added || forceAddition) if (!_Tu.addIfUnfoldable(axiom)) if (axiom.getAFun().equals(ATermUtils.EQCLASSFUN)) { // Try reversing the term if it is a 'same' construct final ATermAppl name = (ATermAppl) axiom.getArgument(0); final ATermAppl desc = (ATermAppl) axiom.getArgument(1); final ATermAppl reversedAxiom = ATermUtils.makeEqClasses(desc, name); if (!_Tu.addIfUnfoldable(reversedAxiom)) _Tg.addDef(axiom); else addAxiomExplanation(reversedAxiom, explain); } else _Tg.addDef(axiom); return added; }
@Override public String toString() { final StringBuilder sb = new StringBuilder(); print(sb); return sb.toString(); }
@Override public boolean removeAxiom(final ATermAppl axiom) { return removeAxiom(axiom, axiom); }
final boolean removed = removeExplanation(dependantAxiom, explanationAxiom, sideEffects); addAxiom(readdAxiom, i.next(), true); while (i.hasNext()) addAxiomExplanation(readdAxiom, i.next());
tbox.getAbsorbedAxioms().addAll(explain); tbox.getAbsorbedAxioms().addAll(explain);
final Set<ATermAppl> ds = _tbox.getAxiomExplanation(eqClassAxiom); final Set<ATermAppl> ds = _tbox.getAxiomExplanation(subClassAxiom);
private boolean absorbII(final Set<ATermAppl> set) { for (final ATermAppl term : set) { final TermDefinition td = _tbox._Tu.getTD(term); boolean canAbsorb; if (td != null) canAbsorb = td.getEqClassAxioms().isEmpty(); else canAbsorb = term.getArity() == 0 && set.size() > 1; if (canAbsorb) { set.remove(term); final ATermList setlist = ATermUtils.makeList(set); ATermAppl conjunct = ATermUtils.makeAnd(setlist); conjunct = ATermUtils.makeNot(conjunct); final ATermAppl sub = ATermUtils.makeSub(term, ATermUtils.nnf(conjunct)); _tbox._Tu.addDef(sub); _subLogger.fine(() -> "Absorb named: " + ATermUtils.toString(sub)); _tbox.addAxiomExplanation(sub, _explanation); return true; } } return false; }
public TBoxBase(final TBoxExpImpl tbox) { _tbox = tbox; _kb = tbox.getKB(); }