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);
}
});
}
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;
}
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);
}
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());
}
Aggregations