/** * Get disjunctive normal form for an expression * * @param term The expression * @return <code>term</code> in DNF */ public static ATermAppl dnf(final ATermAppl term) { return dnfFromNnf(nnf(term)); }
/** * Get disjunctive normal form for an expression * * @param term The expression * @return <code>term</code> in DNF */ public static ATermAppl dnf(final ATermAppl term) { return dnfFromNnf(nnf(term)); }
private static void addTo(final Map<ATermAppl, ATermAppl> map, final ATermAppl roleName, final Set<ATermAppl> asserted) { if (asserted.isEmpty()) return; ATermAppl range = null; if (asserted.size() == 1) range = asserted.iterator().next(); else range = ATermUtils.makeAnd(ATermUtils.toSet(asserted)); range = ELSyntaxUtils.simplify(ATermUtils.nnf(range)); map.put(roleName, range); }
private static void addTo(final Map<ATermAppl, ATermAppl> map, final ATermAppl roleName, final Set<ATermAppl> asserted) { if (asserted.isEmpty()) return; ATermAppl range = null; if (asserted.size() == 1) range = asserted.iterator().next(); else range = ATermUtils.makeAnd(ATermUtils.toSet(asserted)); range = ELSyntaxUtils.simplify(ATermUtils.nnf(range)); map.put(roleName, range); }
private void absorbSubClass(final ATermAppl sub, final ATermAppl sup, final Set<ATermAppl> axiomExplanation) { _subLogger.fine(() -> "Absorb: subClassOf(" + ATermUtils.toString(sub) + ", " + ATermUtils.toString(sup) + ")"); final HashSet<ATermAppl> set = new HashSet<>(); set.add(ATermUtils.nnf(sub)); set.add(ATermUtils.nnf(ATermUtils.makeNot(sup))); // *********************************** // Explanation-related axiom tracking: // This is used in absorbII() where actual absorption takes place // with primitive definition _explanation = new HashSet<>(); _explanation.addAll(axiomExplanation); // *********************************** absorbTerm(set); }
private void absorbSubClass(final ATermAppl sub, final ATermAppl sup, final Set<ATermAppl> axiomExplanation) { _subLogger.fine(() -> "Absorb: subClassOf(" + ATermUtils.toString(sub) + ", " + ATermUtils.toString(sup) + ")"); final HashSet<ATermAppl> set = new HashSet<>(); set.add(ATermUtils.nnf(sub)); set.add(ATermUtils.nnf(ATermUtils.makeNot(sup))); // *********************************** // Explanation-related axiom tracking: // This is used in absorbII() where actual absorption takes place // with primitive definition _explanation = new HashSet<>(); _explanation.addAll(axiomExplanation); // *********************************** absorbTerm(set); }
public static ATermList nnf(final ATermList list) { ATermList newList = factory.makeList(); for (final ATerm term : list) newList = newList.append(nnf((ATermAppl) term)); return newList; }
@Override public boolean absorb(final Set<ATermAppl> terms, final Set<ATermAppl> explanation) { for (final ATermAppl c : terms) { final Unfolding unf = _primitiveTbox.getDefinition(c); if (unf != null) { final ATermAppl def = unf.getResult(); terms.remove(c); terms.add(nnf(def)); absorbAxiom(terms, explanation); return true; } } return false; } }
public static ATermList nnf(final ATermList list) { ATermList newList = factory.makeList(); for (final ATerm term : list) newList = newList.append(nnf((ATermAppl) term)); return newList; }
private void absorbSubClass(final ATermAppl sub, final ATermAppl sup, final Set<ATermAppl> explanation) { _logger.fine(() -> "Absorb: subClassOf(" + ATermUtils.toString(sub) + ", " + ATermUtils.toString(sup) + ")"); final Set<ATermAppl> terms = SetUtils.create(); terms.add(nnf(sub)); terms.add(nnf(negate(sup))); absorbAxiom(terms, SetUtils.create(explanation)); }
private void absorbSubClass(final ATermAppl sub, final ATermAppl sup, final Set<ATermAppl> explanation) { _logger.fine(() -> "Absorb: subClassOf(" + ATermUtils.toString(sub) + ", " + ATermUtils.toString(sup) + ")"); final Set<ATermAppl> terms = SetUtils.create(); terms.add(nnf(sub)); terms.add(nnf(negate(sup))); absorbAxiom(terms, SetUtils.create(explanation)); }
private static void testNNF(final ATermAppl c, final ATermAppl expected) { assertEquals(expected, ATermUtils.nnf(c)); }
private static void testNNF(final ATermAppl c, final ATermAppl expected) { assertEquals(expected, ATermUtils.nnf(c)); }
private static boolean absorbV(final Set<ATermAppl> set) { for (final ATermAppl term : set) { final ATermAppl nnfterm = ATermUtils.nnf(term); if (nnfterm.getAFun().equals(ATermUtils.ANDFUN)) { set.remove(term); ATermList andlist = (ATermList) nnfterm.getArgument(0); while (!andlist.isEmpty()) { set.add((ATermAppl) andlist.getFirst()); andlist = andlist.getNext(); } return true; } } return false; }
private boolean absorbVI(final Set<ATermAppl> set) { for (final ATermAppl term : set) { final ATermAppl nnfterm = ATermUtils.nnf(term); if (nnfterm.getAFun().equals(ATermUtils.ORFUN)) { set.remove(term); for (ATermList orlist = (ATermList) nnfterm.getArgument(0); !orlist.isEmpty(); orlist = orlist.getNext()) { final Set<ATermAppl> cloned = new HashSet<>(set); cloned.add((ATermAppl) orlist.getFirst()); absorbTerm(cloned); } return true; } } return false; }
private boolean absorbVI(final Set<ATermAppl> set) { for (final ATermAppl term : set) { final ATermAppl nnfterm = ATermUtils.nnf(term); if (nnfterm.getAFun().equals(ATermUtils.ORFUN)) { set.remove(term); for (ATermList orlist = (ATermList) nnfterm.getArgument(0); !orlist.isEmpty(); orlist = orlist.getNext()) { final Set<ATermAppl> cloned = new HashSet<>(set); cloned.add((ATermAppl) orlist.getFirst()); absorbTerm(cloned); } return true; } } return false; }
private boolean absorbVII(final Set<ATermAppl> set) { ATermList list = ATermUtils.makeList(set); final ATermAppl sub = ATermUtils.nnf((ATermAppl) list.getFirst()); list = list.getNext(); ATermAppl sup = list.isEmpty() ? ATermUtils.makeNot(sub) : ATermUtils.makeNot(ATermUtils.makeAnd(list)); sup = ATermUtils.nnf(sup); final ATermAppl subClassAxiom = ATermUtils.makeSub(sub, sup); _subLogger.fine(() -> "GCI: " + subClassAxiom + "\nexplanation: " + _explanation); addDef(subClassAxiom); _tbox.addAxiomExplanation(subClassAxiom, _explanation); return true; }
private boolean absorbVII(final Set<ATermAppl> set) { ATermList list = ATermUtils.makeList(set); final ATermAppl sub = ATermUtils.nnf((ATermAppl) list.getFirst()); list = list.getNext(); ATermAppl sup = list.isEmpty() ? ATermUtils.makeNot(sub) : ATermUtils.makeNot(ATermUtils.makeAnd(list)); sup = ATermUtils.nnf(sup); final ATermAppl subClassAxiom = ATermUtils.makeSub(sub, sup); _subLogger.fine(() -> "GCI: " + subClassAxiom + "\nexplanation: " + _explanation); addDef(subClassAxiom); _tbox.addAxiomExplanation(subClassAxiom, _explanation); return true; }