final ATermAppl dnf = DNF.dnf(expander.expand(and, namedDataRanges)); if (ATermUtils.isOr(dnf))
/** * 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)); }
else final ATermAppl dnfA = dnfFromNnf(a); conjuncts.add(dnfA); for (final ATermAppl a : conjuncts) if (disjuncts.isEmpty()) addToList(a, isOr(a), disjuncts); else addToList(a, isOr(a), thisArgs); addToList(a1, isAnd(a1), list); addToList(b, isAnd(b), list); newDisjuncts.add(makeAnd(toSet(list))); i.append((ATermList) a.getArgument(0)); else args.add(dnfFromNnf(a));
else final ATermAppl dnfA = dnfFromNnf(a); conjuncts.add(dnfA); for (final ATermAppl a : conjuncts) if (disjuncts.isEmpty()) addToList(a, isOr(a), disjuncts); else addToList(a, isOr(a), thisArgs); addToList(a1, isAnd(a1), list); addToList(b, isAnd(b), list); newDisjuncts.add(makeAnd(toSet(list))); i.append((ATermList) a.getArgument(0)); else args.add(dnfFromNnf(a));
final ATermAppl dnf = DNF.dnf(expander.expand(and, namedDataRanges)); if (ATermUtils.isOr(dnf))
/** * 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)); }
final ATermAppl dnf = DNF.dnf(expander.expand(and, namedDataRanges)); Collection<ATermAppl> dnfDisjuncts; if (ATermUtils.isOr(dnf))
final ATermAppl dnf = DNF.dnf(expander.expand(and, namedDataRanges)); Collection<ATermAppl> dnfDisjuncts; if (ATermUtils.isOr(dnf))
private void testDNF(final ATermAppl c, final ATermAppl expected) { assertEquals(canonicalize(expected), DNF.dnf(c)); }
private void testDNF(final ATermAppl c, final ATermAppl expected) { assertEquals(canonicalize(expected), DNF.dnf(c)); }
@Override public Iterator<?> valueIterator(final Collection<ATermAppl> dataranges) throws InvalidConstrainingFacetException, InvalidLiteralException, UnrecognizedDatatypeException { final ATermAppl and = ATermUtils.makeAnd(ATermUtils.makeList(dataranges)); final ATermAppl dnf = DNF.dnf(expander.expand(and, namedDataRanges)); if (ATermUtils.isOr(dnf)) { final List<DataRange<?>> disjuncts = new ArrayList<>(); for (ATermList l = (ATermList) dnf.getArgument(0); !l.isEmpty(); l = l.getNext()) disjuncts.add(normalizeVarRanges((ATermAppl) l.getFirst())); return getDisjunction(disjuncts).valueIterator(); } else return normalizeVarRanges(dnf).valueIterator(); }
@Override public Iterator<?> valueIterator(final Collection<ATermAppl> dataranges) throws InvalidConstrainingFacetException, InvalidLiteralException, UnrecognizedDatatypeException { final ATermAppl and = ATermUtils.makeAnd(ATermUtils.makeList(dataranges)); final ATermAppl dnf = DNF.dnf(expander.expand(and, namedDataRanges)); if (ATermUtils.isOr(dnf)) { final List<DataRange<?>> disjuncts = new ArrayList<>(); for (ATermList l = (ATermList) dnf.getArgument(0); !l.isEmpty(); l = l.getNext()) disjuncts.add(normalizeVarRanges((ATermAppl) l.getFirst())); return getDisjunction(disjuncts).valueIterator(); } else return normalizeVarRanges(dnf).valueIterator(); }
@Override public boolean containsAtLeast(final int n, final Collection<ATermAppl> ranges) throws UnrecognizedDatatypeException, InvalidConstrainingFacetException, InvalidLiteralException { final ATermAppl and = ATermUtils.makeAnd(ATermUtils.makeList(ranges)); final ATermAppl dnf = DNF.dnf(expander.expand(and, namedDataRanges)); if (ATermUtils.isOr(dnf)) { final List<DataRange<?>> disjuncts = new ArrayList<>(); for (ATermList l = (ATermList) dnf.getArgument(0); !l.isEmpty(); l = l.getNext()) { final DataRange<?> dr = normalizeVarRanges((ATermAppl) l.getFirst()); if (!dr.isEmpty()) disjuncts.add(dr); } return getDisjunction(disjuncts).containsAtLeast(n); } else return normalizeVarRanges(dnf).containsAtLeast(n); }
@Override public boolean containsAtLeast(final int n, final Collection<ATermAppl> ranges) throws UnrecognizedDatatypeException, InvalidConstrainingFacetException, InvalidLiteralException { final ATermAppl and = ATermUtils.makeAnd(ATermUtils.makeList(ranges)); final ATermAppl dnf = DNF.dnf(expander.expand(and, namedDataRanges)); if (ATermUtils.isOr(dnf)) { final List<DataRange<?>> disjuncts = new ArrayList<>(); for (ATermList l = (ATermList) dnf.getArgument(0); !l.isEmpty(); l = l.getNext()) { final DataRange<?> dr = normalizeVarRanges((ATermAppl) l.getFirst()); if (!dr.isEmpty()) disjuncts.add(dr); } return getDisjunction(disjuncts).containsAtLeast(n); } else return normalizeVarRanges(dnf).containsAtLeast(n); }