private void runRecursively(final Taxonomy<ATermAppl> t, final ATermAppl downMonotonic, final ATermAppl rootCandidate, final ResultBinding binding, final Set<ATermAppl> toDo, final boolean direct, final boolean strict) { final int size = _result.size(); _logger.fine(() -> "Trying : " + rootCandidate + ", done=" + toDo); if (!strict) { toDo.remove(rootCandidate); runNext(binding, Collections.singletonList(downMonotonic), rootCandidate); } if (strict || _result.size() > size) { // final Set<ATermAppl> subs = t.getSFlattenedSubs(rootCandidate, // direct); final Set<ATermAppl> subs = flatten(t.getSubs(rootCandidate, direct)); for (final ATermAppl subject : subs) { if (!toDo.contains(subject)) continue; runRecursively(t, downMonotonic, subject, binding, toDo, false, false); } } else { _logger.fine(() -> "Skipping subs of " + rootCandidate); // toDo.removeAll(t.getFlattenedSubs(rootCandidate, false)); toDo.removeAll(flatten(t.getSubs(rootCandidate, false))); } }
private void runRecursively(final Taxonomy<ATermAppl> t, final ATermAppl downMonotonic, final ATermAppl rootCandidate, final ResultBinding binding, final Set<ATermAppl> toDo, final boolean direct, final boolean strict) { final int size = _result.size(); _logger.fine(() -> "Trying : " + rootCandidate + ", done=" + toDo); if (!strict) { toDo.remove(rootCandidate); runNext(binding, Collections.singletonList(downMonotonic), rootCandidate); } if (strict || _result.size() > size) { // final Set<ATermAppl> subs = t.getSFlattenedSubs(rootCandidate, // direct); final Set<ATermAppl> subs = flatten(t.getSubs(rootCandidate, direct)); for (final ATermAppl subject : subs) { if (!toDo.contains(subject)) continue; runRecursively(t, downMonotonic, subject, binding, toDo, false, false); } } else { _logger.fine(() -> "Skipping subs of " + rootCandidate); // toDo.removeAll(t.getFlattenedSubs(rootCandidate, false)); toDo.removeAll(flatten(t.getSubs(rootCandidate, false))); } }
private void runRecursively(final Taxonomy<ATermAppl> t, final ATermAppl downMonotonic, final ATermAppl rootCandidate, final ResultBinding binding, final Set<ATermAppl> toDo, final boolean direct, final boolean strict) { final int size = _result.size(); _logger.fine(() -> "Trying : " + rootCandidate + ", done=" + toDo); if (!strict) { toDo.remove(rootCandidate); runNext(binding, Collections.singletonList(downMonotonic), rootCandidate); } if (strict || _result.size() > size) { // final Set<ATermAppl> subs = t.getSFlattenedSubs(rootCandidate, // direct); final Set<ATermAppl> subs = flatten(t.getSubs(rootCandidate, direct)); for (final ATermAppl subject : subs) { if (!toDo.contains(subject)) continue; runRecursively(t, downMonotonic, subject, binding, toDo, false, false); } } else { _logger.fine(() -> "Skipping subs of " + rootCandidate); // toDo.removeAll(t.getFlattenedSubs(rootCandidate, false)); toDo.removeAll(flatten(t.getSubs(rootCandidate, false))); } }
private void runAllPropertyChecks(@SuppressWarnings("unused") final QueryAtom current, final ATermAppl var, final Set<ATermAppl> candidates, final ResultBinding binding) { if (isDownMonotonic(var)) for (final TaxonomyNode<ATermAppl> topNode : _kb.getRoleTaxonomy(true).getTop().getSubs()) { final ATermAppl top = topNode.getName(); if (candidates.contains(top)) runRecursively(_kb.getRoleTaxonomy(true), var, topNode.getName(), binding, new HashSet<>(candidates), false, false); } else for (final ATermAppl candidate : candidates) { final ResultBinding candidateBinding = binding.duplicate(); candidateBinding.setValue(var, candidate); exec(candidateBinding); } }
private void runAllPropertyChecks(@SuppressWarnings("unused") final QueryAtom current, final ATermAppl var, final Set<ATermAppl> candidates, final ResultBinding binding) { if (isDownMonotonic(var)) for (final TaxonomyNode<ATermAppl> topNode : _kb.getRoleTaxonomy(true).getTop().getSubs()) { final ATermAppl top = topNode.getName(); if (candidates.contains(top)) runRecursively(_kb.getRoleTaxonomy(true), var, topNode.getName(), binding, new HashSet<>(candidates), false, false); } else for (final ATermAppl candidate : candidates) { final ResultBinding candidateBinding = binding.duplicate(); candidateBinding.setValue(var, candidate); exec(candidateBinding); } }
private void runAllPropertyChecks(@SuppressWarnings("unused") final QueryAtom current, final ATermAppl var, final Set<ATermAppl> candidates, final ResultBinding binding) { if (isDownMonotonic(var)) for (final TaxonomyNode<ATermAppl> topNode : _kb.getRoleTaxonomy(true).getTop().getSubs()) { final ATermAppl top = topNode.getName(); if (candidates.contains(top)) runRecursively(_kb.getRoleTaxonomy(true), var, topNode.getName(), binding, new HashSet<>(candidates), false, false); } else for (final ATermAppl candidate : candidates) { final ResultBinding candidateBinding = binding.duplicate(); candidateBinding.setValue(var, candidate); exec(candidateBinding); } }
toDo.add(candidate); runRecursively(taxonomy, downMonotonic, candidate, newBinding, new HashSet<>(toDo), direct, strict);
toDo.add(candidate); runRecursively(taxonomy, downMonotonic, candidate, newBinding, new HashSet<>(toDo), direct, strict);
toDo.add(candidate); runRecursively(taxonomy, downMonotonic, candidate, newBinding, new HashSet<>(toDo), direct, strict);