Search in sources :

Example 1 with Negation

use of com.vaticle.typedb.core.pattern.Negation in project grakn by graknlabs.

the class Reasoner method mayReason.

private boolean mayReason(Disjunction disjunction) {
    for (Conjunction conj : disjunction.conjunctions()) {
        Set<Variable> vars = conj.variables();
        List<Negation> negs = conj.negations();
        if (iterate(vars).flatMap(v -> iterate(v.inferredTypes())).distinct().anyMatch(this::hasRule))
            return true;
        if (!negs.isEmpty() && iterate(negs).anyMatch(n -> mayReason(n.disjunction())))
            return true;
    }
    return false;
}
Also used : ConceptManager(com.vaticle.typedb.core.concept.ConceptManager) Context(com.vaticle.typedb.core.common.parameters.Context) TraversalEngine(com.vaticle.typedb.core.traversal.TraversalEngine) Collections.set(com.vaticle.typedb.common.collection.Collections.set) Variable(com.vaticle.typedb.core.pattern.variable.Variable) Identifier(com.vaticle.typedb.core.traversal.common.Identifier) UnboundVariable(com.vaticle.typeql.lang.pattern.variable.UnboundVariable) UNSATISFIABLE_SUB_PATTERN(com.vaticle.typedb.core.common.exception.ErrorMessage.Pattern.UNSATISFIABLE_SUB_PATTERN) LoggerFactory(org.slf4j.LoggerFactory) PARALLELISATION_FACTOR(com.vaticle.typedb.core.concurrent.executor.Executors.PARALLELISATION_FACTOR) ResolverRegistry(com.vaticle.typedb.core.reasoner.resolution.ResolverRegistry) Arguments(com.vaticle.typedb.core.common.parameters.Arguments) Producers.produce(com.vaticle.typedb.core.concurrent.producer.Producers.produce) LogicManager(com.vaticle.typedb.core.logic.LogicManager) HashSet(java.util.HashSet) Executors.async1(com.vaticle.typedb.core.concurrent.executor.Executors.async1) Either(com.vaticle.typedb.common.collection.Either) Collections.list(com.vaticle.typedb.common.collection.Collections.list) Thing(com.vaticle.typedb.core.concept.thing.Thing) Label(com.vaticle.typedb.core.common.parameters.Label) Conjunction(com.vaticle.typedb.core.pattern.Conjunction) Logger(org.slf4j.Logger) FunctionalIterator(com.vaticle.typedb.core.common.iterator.FunctionalIterator) Negation(com.vaticle.typedb.core.pattern.Negation) Options(com.vaticle.typedb.core.common.parameters.Options) Producer(com.vaticle.typedb.core.concurrent.producer.Producer) Set(java.util.Set) Iterators(com.vaticle.typedb.core.common.iterator.Iterators) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap) Disjunction(com.vaticle.typedb.core.pattern.Disjunction) UNSATISFIABLE_PATTERN(com.vaticle.typedb.core.common.exception.ErrorMessage.Pattern.UNSATISFIABLE_PATTERN) List(java.util.List) Executors.actor(com.vaticle.typedb.core.concurrent.executor.Executors.actor) Iterators.iterate(com.vaticle.typedb.core.common.iterator.Iterators.iterate) Explanation(com.vaticle.typedb.core.reasoner.resolution.answer.Explanation) TypeDBException(com.vaticle.typedb.core.common.exception.TypeDBException) EXHAUSTIVE(com.vaticle.typedb.core.common.parameters.Arguments.Query.Producer.EXHAUSTIVE) TypeQLMatch(com.vaticle.typeql.lang.query.TypeQLMatch) Type(com.vaticle.typedb.core.concept.type.Type) Producers(com.vaticle.typedb.core.concurrent.producer.Producers) Variable(com.vaticle.typedb.core.pattern.variable.Variable) UnboundVariable(com.vaticle.typeql.lang.pattern.variable.UnboundVariable) Negation(com.vaticle.typedb.core.pattern.Negation) Conjunction(com.vaticle.typedb.core.pattern.Conjunction)

Example 2 with Negation

use of com.vaticle.typedb.core.pattern.Negation in project grakn by graknlabs.

the class ConjunctionResolver method initialiseDownstreamResolvers.

@Override
protected void initialiseDownstreamResolvers() {
    LOG.debug("{}: initialising downstream resolvers", name());
    Set<Concludable> concludables = concludablesTriggeringRules();
    Set<Retrievable> retrievables = Retrievable.extractFrom(conjunction(), concludables);
    resolvables.addAll(concludables);
    resolvables.addAll(retrievables);
    iterate(resolvables).forEachRemaining(resolvable -> {
        try {
            downstreamResolvers.put(resolvable, registry.registerResolvable(resolvable));
        } catch (TypeDBException e) {
            terminate(e);
        }
    });
    for (Negation negation : conjunction().negations()) {
        Negated negated = new Negated(negation);
        try {
            downstreamResolvers.put(negated, registry.negated(negated, conjunction()));
            negateds.add(negated);
        } catch (TypeDBException e) {
            terminate(e);
        }
    }
    if (!isTerminated())
        isInitialised = true;
}
Also used : Concludable(com.vaticle.typedb.core.logic.resolvable.Concludable) Retrievable(com.vaticle.typedb.core.logic.resolvable.Retrievable) Negation(com.vaticle.typedb.core.pattern.Negation) Negated(com.vaticle.typedb.core.logic.resolvable.Negated) TypeDBException(com.vaticle.typedb.core.common.exception.TypeDBException)

Aggregations

TypeDBException (com.vaticle.typedb.core.common.exception.TypeDBException)2 Negation (com.vaticle.typedb.core.pattern.Negation)2 Collections.list (com.vaticle.typedb.common.collection.Collections.list)1 Collections.set (com.vaticle.typedb.common.collection.Collections.set)1 Either (com.vaticle.typedb.common.collection.Either)1 UNSATISFIABLE_PATTERN (com.vaticle.typedb.core.common.exception.ErrorMessage.Pattern.UNSATISFIABLE_PATTERN)1 UNSATISFIABLE_SUB_PATTERN (com.vaticle.typedb.core.common.exception.ErrorMessage.Pattern.UNSATISFIABLE_SUB_PATTERN)1 FunctionalIterator (com.vaticle.typedb.core.common.iterator.FunctionalIterator)1 Iterators (com.vaticle.typedb.core.common.iterator.Iterators)1 Iterators.iterate (com.vaticle.typedb.core.common.iterator.Iterators.iterate)1 Arguments (com.vaticle.typedb.core.common.parameters.Arguments)1 EXHAUSTIVE (com.vaticle.typedb.core.common.parameters.Arguments.Query.Producer.EXHAUSTIVE)1 Context (com.vaticle.typedb.core.common.parameters.Context)1 Label (com.vaticle.typedb.core.common.parameters.Label)1 Options (com.vaticle.typedb.core.common.parameters.Options)1 ConceptManager (com.vaticle.typedb.core.concept.ConceptManager)1 ConceptMap (com.vaticle.typedb.core.concept.answer.ConceptMap)1 Thing (com.vaticle.typedb.core.concept.thing.Thing)1 Type (com.vaticle.typedb.core.concept.type.Type)1 PARALLELISATION_FACTOR (com.vaticle.typedb.core.concurrent.executor.Executors.PARALLELISATION_FACTOR)1