Search in sources :

Example 31 with Conjunction

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

the class TypeInference method propagateLabels.

private void propagateLabels(Conjunction conj) {
    iterate(conj.variables()).filter(v -> v.isType() && v.asType().label().isPresent()).forEachRemaining(typeVar -> {
        Label label = typeVar.asType().label().get().properLabel();
        if (label.scope().isPresent()) {
            Set<Label> labels = graphMgr.schema().resolveRoleTypeLabels(label);
            if (labels.isEmpty())
                throw TypeDBException.of(ROLE_TYPE_NOT_FOUND, label.name(), label.scope().get());
            typeVar.addInferredTypes(labels);
        } else {
            if (graphMgr.schema().getType(label) == null)
                throw TypeDBException.of(TYPE_NOT_FOUND, label);
            typeVar.addInferredTypes(label);
        }
    });
}
Also used : Pair(com.vaticle.typedb.common.collection.Pair) ILLEGAL_STATE(com.vaticle.typedb.core.common.exception.ErrorMessage.Internal.ILLEGAL_STATE) TraversalEngine(com.vaticle.typedb.core.traversal.TraversalEngine) TypeConstraint(com.vaticle.typedb.core.pattern.constraint.type.TypeConstraint) 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) UNSATISFIABLE_SUB_PATTERN(com.vaticle.typedb.core.common.exception.ErrorMessage.Pattern.UNSATISFIABLE_SUB_PATTERN) HashMap(java.util.HashMap) UNSATISFIABLE_PATTERN_VARIABLE_VALUE(com.vaticle.typedb.core.common.exception.ErrorMessage.Pattern.UNSATISFIABLE_PATTERN_VARIABLE_VALUE) LogicCache(com.vaticle.typedb.core.logic.LogicCache) PlaysConstraint(com.vaticle.typedb.core.pattern.constraint.type.PlaysConstraint) UNSATISFIABLE_PATTERN_VARIABLE(com.vaticle.typedb.core.common.exception.ErrorMessage.Pattern.UNSATISFIABLE_PATTERN_VARIABLE) IIDConstraint(com.vaticle.typedb.core.pattern.constraint.thing.IIDConstraint) IsConstraint(com.vaticle.typedb.core.pattern.constraint.thing.IsConstraint) ATTRIBUTE(com.vaticle.typeql.lang.common.TypeQLToken.Type.ATTRIBUTE) VertexIID(com.vaticle.typedb.core.graph.iid.VertexIID) Map(java.util.Map) ValueConstraint(com.vaticle.typedb.core.pattern.constraint.thing.ValueConstraint) RelatesConstraint(com.vaticle.typedb.core.pattern.constraint.type.RelatesConstraint) TYPE_NOT_FOUND(com.vaticle.typedb.core.common.exception.ErrorMessage.TypeRead.TYPE_NOT_FOUND) OwnsConstraint(com.vaticle.typedb.core.pattern.constraint.type.OwnsConstraint) ValueTypeConstraint(com.vaticle.typedb.core.pattern.constraint.type.ValueTypeConstraint) GraphTraversal(com.vaticle.typedb.core.traversal.GraphTraversal) Iterators.empty(com.vaticle.typedb.core.common.iterator.Iterators.empty) Label(com.vaticle.typedb.core.common.parameters.Label) Encoding(com.vaticle.typedb.core.graph.common.Encoding) GraphManager(com.vaticle.typedb.core.graph.GraphManager) Conjunction(com.vaticle.typedb.core.pattern.Conjunction) FunctionalIterator(com.vaticle.typedb.core.common.iterator.FunctionalIterator) ThingVariable(com.vaticle.typedb.core.pattern.variable.ThingVariable) IsaConstraint(com.vaticle.typedb.core.pattern.constraint.thing.IsaConstraint) SubConstraint(com.vaticle.typedb.core.pattern.constraint.type.SubConstraint) Set(java.util.Set) RegexConstraint(com.vaticle.typedb.core.pattern.constraint.type.RegexConstraint) Disjunction(com.vaticle.typedb.core.pattern.Disjunction) HasConstraint(com.vaticle.typedb.core.pattern.constraint.thing.HasConstraint) Retrievable(com.vaticle.typedb.core.traversal.common.Identifier.Variable.Retrievable) TraversalVertex(com.vaticle.typedb.core.traversal.graph.TraversalVertex) TypeVariable(com.vaticle.typedb.core.pattern.variable.TypeVariable) RelationConstraint(com.vaticle.typedb.core.pattern.constraint.thing.RelationConstraint) Optional(java.util.Optional) Iterators.iterate(com.vaticle.typedb.core.common.iterator.Iterators.iterate) TypeDBException(com.vaticle.typedb.core.common.exception.TypeDBException) ROLE_TYPE_NOT_FOUND(com.vaticle.typedb.core.common.exception.ErrorMessage.TypeRead.ROLE_TYPE_NOT_FOUND) TypeVertex(com.vaticle.typedb.core.graph.vertex.TypeVertex) Comparator(java.util.Comparator) Label(com.vaticle.typedb.core.common.parameters.Label)

Example 32 with Conjunction

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

the class Rule method thenPattern.

private Conjunction thenPattern(com.vaticle.typeql.lang.pattern.variable.ThingVariable<?> thenVariable, LogicManager logicMgr) {
    Conjunction conj = new Conjunction(VariableRegistry.createFromThings(list(thenVariable)).variables(), list());
    logicMgr.typeInference().applyCombination(conj, true);
    return conj;
}
Also used : Conjunction(com.vaticle.typedb.core.pattern.Conjunction)

Example 33 with Conjunction

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

the class Rule method whenPattern.

private Conjunction whenPattern(com.vaticle.typeql.lang.pattern.Conjunction<? extends Pattern> conjunction, com.vaticle.typeql.lang.pattern.variable.ThingVariable<?> then, LogicManager logicMgr) {
    Disjunction when = Disjunction.create(conjunction.normalise(), VariableRegistry.createFromThings(list(then)));
    assert when.conjunctions().size() == 1;
    if (iterate(when.conjunctions().get(0).negations()).filter(neg -> neg.disjunction().conjunctions().size() != 1).hasNext()) {
        throw TypeDBException.of(INVALID_NEGATION_CONTAINS_DISJUNCTION, getLabel());
    }
    logicMgr.typeInference().applyCombination(when);
    return when.conjunctions().get(0);
}
Also used : RULE_THEN_INVALID_VALUE_ASSIGNMENT(com.vaticle.typedb.core.common.exception.ErrorMessage.RuleWrite.RULE_THEN_INVALID_VALUE_ASSIGNMENT) Identifier(com.vaticle.typedb.core.traversal.common.Identifier) LoggerFactory(org.slf4j.LoggerFactory) RelationType(com.vaticle.typedb.core.concept.type.RelationType) RULE_CONCLUSION_AMBIGUOUS_LABELLED_TYPE(com.vaticle.typedb.core.common.exception.ErrorMessage.RuleWrite.RULE_CONCLUSION_AMBIGUOUS_LABELLED_TYPE) COLON(com.vaticle.typeql.lang.common.TypeQLToken.Char.COLON) Map(java.util.Map) ValueConstraint(com.vaticle.typedb.core.pattern.constraint.thing.ValueConstraint) ThingConstraint(com.vaticle.typedb.core.pattern.constraint.thing.ThingConstraint) Collections.list(com.vaticle.typedb.common.collection.Collections.list) Thing(com.vaticle.typedb.core.concept.thing.Thing) THEN(com.vaticle.typeql.lang.common.TypeQLToken.Schema.THEN) NEW_LINE(com.vaticle.typeql.lang.common.TypeQLToken.Char.NEW_LINE) FunctionalIterator(com.vaticle.typedb.core.common.iterator.FunctionalIterator) Negation(com.vaticle.typedb.core.pattern.Negation) IsaConstraint(com.vaticle.typedb.core.pattern.constraint.thing.IsaConstraint) Set(java.util.Set) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap) Pattern(com.vaticle.typeql.lang.pattern.Pattern) HasConstraint(com.vaticle.typedb.core.pattern.constraint.thing.HasConstraint) CURLY_OPEN(com.vaticle.typeql.lang.common.TypeQLToken.Char.CURLY_OPEN) List(java.util.List) RelationConstraint(com.vaticle.typedb.core.pattern.constraint.thing.RelationConstraint) Optional(java.util.Optional) VariableRegistry(com.vaticle.typedb.core.pattern.variable.VariableRegistry) TypeDBException(com.vaticle.typedb.core.common.exception.TypeDBException) RULE(com.vaticle.typeql.lang.common.TypeQLToken.Schema.RULE) ConceptManager(com.vaticle.typedb.core.concept.ConceptManager) ILLEGAL_STATE(com.vaticle.typedb.core.common.exception.ErrorMessage.Internal.ILLEGAL_STATE) TraversalEngine(com.vaticle.typedb.core.traversal.TraversalEngine) Collections.set(com.vaticle.typedb.common.collection.Collections.set) Variable(com.vaticle.typedb.core.pattern.variable.Variable) SEMICOLON(com.vaticle.typeql.lang.common.TypeQLToken.Char.SEMICOLON) HashMap(java.util.HashMap) Objects.className(com.vaticle.typedb.common.util.Objects.className) RULE_THEN_CANNOT_BE_SATISFIED(com.vaticle.typedb.core.common.exception.ErrorMessage.RuleWrite.RULE_THEN_CANNOT_BE_SATISFIED) SPACE(com.vaticle.typeql.lang.common.TypeQLToken.Char.SPACE) RULE_CONCLUSION_ILLEGAL_INSERT(com.vaticle.typedb.core.common.exception.ErrorMessage.RuleWrite.RULE_CONCLUSION_ILLEGAL_INSERT) Reference(com.vaticle.typeql.lang.pattern.variable.Reference) Concept(com.vaticle.typedb.core.concept.Concept) HashSet(java.util.HashSet) Concludable(com.vaticle.typedb.core.logic.resolvable.Concludable) Label(com.vaticle.typedb.core.common.parameters.Label) GraphManager(com.vaticle.typedb.core.graph.GraphManager) Conjunction(com.vaticle.typedb.core.pattern.Conjunction) RelationTraversal(com.vaticle.typedb.core.traversal.RelationTraversal) Logger(org.slf4j.Logger) ThingVariable(com.vaticle.typedb.core.pattern.variable.ThingVariable) RuleStructure(com.vaticle.typedb.core.graph.structure.RuleStructure) Iterators(com.vaticle.typedb.core.common.iterator.Iterators) RULE_WHEN_CANNOT_BE_SATISFIED(com.vaticle.typedb.core.common.exception.ErrorMessage.RuleWrite.RULE_WHEN_CANNOT_BE_SATISFIED) RoleType(com.vaticle.typedb.core.concept.type.RoleType) Disjunction(com.vaticle.typedb.core.pattern.Disjunction) CURLY_CLOSE(com.vaticle.typeql.lang.common.TypeQLToken.Char.CURLY_CLOSE) Attribute(com.vaticle.typedb.core.concept.thing.Attribute) TypeVariable(com.vaticle.typedb.core.pattern.variable.TypeVariable) INVALID_CASTING(com.vaticle.typedb.core.common.exception.ErrorMessage.Pattern.INVALID_CASTING) Iterators.iterate(com.vaticle.typedb.core.common.iterator.Iterators.iterate) INVALID_NEGATION_CONTAINS_DISJUNCTION(com.vaticle.typedb.core.common.exception.ErrorMessage.RuleWrite.INVALID_NEGATION_CONTAINS_DISJUNCTION) AttributeType(com.vaticle.typedb.core.concept.type.AttributeType) WHEN(com.vaticle.typeql.lang.common.TypeQLToken.Schema.WHEN) Disjunction(com.vaticle.typedb.core.pattern.Disjunction)

Example 34 with Conjunction

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

the class Reasoner method explain.

public FunctionalIterator<Explanation> explain(long explainableId, Context.Query defaultContext) {
    Conjunction explainableConjunction = explainablesManager.getConjunction(explainableId);
    ConceptMap explainableBounds = explainablesManager.getBounds(explainableId);
    return Producers.produce(list(new ExplanationProducer(explainableConjunction, explainableBounds, defaultContext.options(), resolverRegistry, explainablesManager)), Either.first(Arguments.Query.Producer.INCREMENTAL), async1());
}
Also used : Conjunction(com.vaticle.typedb.core.pattern.Conjunction) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap)

Aggregations

Conjunction (com.vaticle.typedb.core.pattern.Conjunction)34 Test (org.junit.Test)26 CoreSession (com.vaticle.typedb.core.database.CoreSession)25 CoreTransaction (com.vaticle.typedb.core.database.CoreTransaction)25 TypeDBException (com.vaticle.typedb.core.common.exception.TypeDBException)16 ConceptManager (com.vaticle.typedb.core.concept.ConceptManager)16 CoreDatabaseManager (com.vaticle.typedb.core.database.CoreDatabaseManager)16 Collections.set (com.vaticle.typedb.common.collection.Collections.set)15 Iterators.iterate (com.vaticle.typedb.core.common.iterator.Iterators.iterate)15 ConceptMap (com.vaticle.typedb.core.concept.answer.ConceptMap)15 AttributeType (com.vaticle.typedb.core.concept.type.AttributeType)15 RelationType (com.vaticle.typedb.core.concept.type.RelationType)15 HashSet (java.util.HashSet)15 Set (java.util.Set)15 FunctionalIterator (com.vaticle.typedb.core.common.iterator.FunctionalIterator)14 Arguments (com.vaticle.typedb.core.common.parameters.Arguments)13 Label (com.vaticle.typedb.core.common.parameters.Label)13 HashMap (java.util.HashMap)13 Collections.list (com.vaticle.typedb.common.collection.Collections.list)12 MB (com.vaticle.typedb.core.common.collection.Bytes.MB)12