Search in sources :

Example 1 with CONTRADICTORY_RULE_CYCLE

use of com.vaticle.typedb.core.common.exception.ErrorMessage.RuleWrite.CONTRADICTORY_RULE_CYCLE in project grakn by graknlabs.

the class LogicManager method validateCyclesThroughNegations.

private void validateCyclesThroughNegations(ConceptManager conceptMgr, LogicManager logicMgr) {
    Set<Rule> negationRulesTriggeringRules = logicMgr.rulesWithNegations().filter(rule -> !rule.condition().negatedConcludablesTriggeringRules(conceptMgr, logicMgr).isEmpty()).toSet();
    for (Rule negationRule : negationRulesTriggeringRules) {
        Map<Rule, RuleDependency> visitedDependentRules = new HashMap<>();
        visitedDependentRules.put(negationRule, RuleDependency.of(negationRule, null));
        List<RuleDependency> frontier = new LinkedList<>(ruleDependencies(negationRule, conceptMgr, logicMgr));
        RuleDependency dependency;
        while (!frontier.isEmpty()) {
            dependency = frontier.remove(0);
            if (negationRule.equals(dependency.recursiveRule)) {
                List<Rule> cycle = findCycle(dependency, visitedDependentRules);
                String readableCycle = cycle.stream().map(Rule::getLabel).collect(Collectors.joining(" -> \n", "\n", "\n"));
                throw TypeDBException.of(CONTRADICTORY_RULE_CYCLE, readableCycle);
            } else {
                visitedDependentRules.put(dependency.recursiveRule, dependency);
                Set<RuleDependency> recursive = ruleDependencies(dependency.recursiveRule, conceptMgr, logicMgr);
                recursive.removeAll(visitedDependentRules.values());
                frontier.addAll(recursive);
            }
        }
    }
}
Also used : ConceptManager(com.vaticle.typedb.core.concept.ConceptManager) Iterators.link(com.vaticle.typedb.core.common.iterator.Iterators.link) ILLEGAL_STATE(com.vaticle.typedb.core.common.exception.ErrorMessage.Internal.ILLEGAL_STATE) TraversalEngine(com.vaticle.typedb.core.traversal.TraversalEngine) HashMap(java.util.HashMap) Map(java.util.Map) Collections.list(com.vaticle.typedb.common.collection.Collections.list) Comparator.comparing(java.util.Comparator.comparing) LinkedList(java.util.LinkedList) Label(com.vaticle.typedb.core.common.parameters.Label) Nullable(javax.annotation.Nullable) GraphManager(com.vaticle.typedb.core.graph.GraphManager) StringBuilders(com.vaticle.typedb.core.common.util.StringBuilders) TypeInference(com.vaticle.typedb.core.logic.tool.TypeInference) FunctionalIterator(com.vaticle.typedb.core.common.iterator.FunctionalIterator) RuleStructure(com.vaticle.typedb.core.graph.structure.RuleStructure) Set(java.util.Set) Pattern(com.vaticle.typeql.lang.pattern.Pattern) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) List(java.util.List) ThingVariable(com.vaticle.typeql.lang.pattern.variable.ThingVariable) RuleExporter.writeRule(com.vaticle.typedb.core.logic.LogicManager.RuleExporter.writeRule) Iterators.iterate(com.vaticle.typedb.core.common.iterator.Iterators.iterate) CONTRADICTORY_RULE_CYCLE(com.vaticle.typedb.core.common.exception.ErrorMessage.RuleWrite.CONTRADICTORY_RULE_CYCLE) TypeDBException(com.vaticle.typedb.core.common.exception.TypeDBException) Conjunction(com.vaticle.typeql.lang.pattern.Conjunction) HashMap(java.util.HashMap) RuleExporter.writeRule(com.vaticle.typedb.core.logic.LogicManager.RuleExporter.writeRule) LinkedList(java.util.LinkedList)

Aggregations

Collections.list (com.vaticle.typedb.common.collection.Collections.list)1 ILLEGAL_STATE (com.vaticle.typedb.core.common.exception.ErrorMessage.Internal.ILLEGAL_STATE)1 CONTRADICTORY_RULE_CYCLE (com.vaticle.typedb.core.common.exception.ErrorMessage.RuleWrite.CONTRADICTORY_RULE_CYCLE)1 TypeDBException (com.vaticle.typedb.core.common.exception.TypeDBException)1 FunctionalIterator (com.vaticle.typedb.core.common.iterator.FunctionalIterator)1 Iterators.iterate (com.vaticle.typedb.core.common.iterator.Iterators.iterate)1 Iterators.link (com.vaticle.typedb.core.common.iterator.Iterators.link)1 Label (com.vaticle.typedb.core.common.parameters.Label)1 StringBuilders (com.vaticle.typedb.core.common.util.StringBuilders)1 ConceptManager (com.vaticle.typedb.core.concept.ConceptManager)1 GraphManager (com.vaticle.typedb.core.graph.GraphManager)1 RuleStructure (com.vaticle.typedb.core.graph.structure.RuleStructure)1 RuleExporter.writeRule (com.vaticle.typedb.core.logic.LogicManager.RuleExporter.writeRule)1 TypeInference (com.vaticle.typedb.core.logic.tool.TypeInference)1 TraversalEngine (com.vaticle.typedb.core.traversal.TraversalEngine)1 Conjunction (com.vaticle.typeql.lang.pattern.Conjunction)1 Pattern (com.vaticle.typeql.lang.pattern.Pattern)1 ThingVariable (com.vaticle.typeql.lang.pattern.variable.ThingVariable)1 Comparator.comparing (java.util.Comparator.comparing)1 HashMap (java.util.HashMap)1