use of com.vaticle.typedb.core.pattern.Conjunction in project grakn by graknlabs.
the class UnifyRelationConcludableTest method unify_relation_many_to_many.
// [many2many]
@Test
public void unify_relation_many_to_many() {
String conjunction = "{ (employee: $p, employee: $q) isa employment; }";
Set<Concludable> concludables = Concludable.create(resolvedConjunction(conjunction, logicMgr));
Concludable.Relation queryConcludable = concludables.iterator().next().asRelation();
Rule rule = createRule("three-people-are-employed", "{ $x isa person; $y isa person; $z isa person; }", "(employee: $x, employee: $y, employee: $z) isa employment", logicMgr);
FunctionalIterator<Unifier> unifier = queryConcludable.unify(rule.conclusion(), conceptMgr);
Set<Map<String, Set<String>>> result = unifier.map(u -> getStringMapping(u.mapping())).toSet();
Set<Map<String, Set<String>>> expected = set(new HashMap<String, Set<String>>() {
{
put("$p", set("$x"));
put("$q", set("$y"));
put("$_0", set("$_0"));
}
}, new HashMap<String, Set<String>>() {
{
put("$p", set("$x"));
put("$q", set("$z"));
put("$_0", set("$_0"));
}
}, new HashMap<String, Set<String>>() {
{
put("$p", set("$y"));
put("$q", set("$x"));
put("$_0", set("$_0"));
}
}, new HashMap<String, Set<String>>() {
{
put("$p", set("$y"));
put("$q", set("$z"));
put("$_0", set("$_0"));
}
}, new HashMap<String, Set<String>>() {
{
put("$p", set("$z"));
put("$q", set("$x"));
put("$_0", set("$_0"));
}
}, new HashMap<String, Set<String>>() {
{
put("$p", set("$z"));
put("$q", set("$y"));
put("$_0", set("$_0"));
}
});
assertEquals(expected, result);
}
use of com.vaticle.typedb.core.pattern.Conjunction in project grakn by graknlabs.
the class ResolutionTest method test_chained_rules.
@Test
public void test_chained_rules() throws InterruptedException {
try (CoreSession session = schemaSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().define(TypeQL.parseQuery("define person sub entity, owns name, owns age, plays employment:employee;" + "age sub attribute, value long;" + "name sub attribute, value string;" + "employment sub relation, relates employee;" + "rule bobs-are-42: when { $p1 isa person, has name \"Bob\"; } then { $p1 has age 42; };" + "rule those-aged-42-are-employed: when { $x has age 42; } then { (employee: $x) isa employment; };"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().insert(TypeQL.parseQuery("insert $p isa person, has name \"Bob\";"));
transaction.query().insert(TypeQL.parseQuery("insert $p isa person, has name \"Bob\";"));
transaction.query().insert(TypeQL.parseQuery("insert $p isa person, has name \"Bob\";"));
transaction.query().insert(TypeQL.parseQuery("insert $p isa person, has age 42;"));
transaction.query().insert(TypeQL.parseQuery("insert $p isa person, has age 42;"));
transaction.query().insert(TypeQL.parseQuery("insert $p isa person, has age 42;"));
transaction.query().insert(TypeQL.parseQuery("insert $p isa person; $e(employee: $p) isa employment;"));
transaction.query().insert(TypeQL.parseQuery("insert $p isa person; $e(employee: $p) isa employment;"));
transaction.query().insert(TypeQL.parseQuery("insert $p isa person; $e(employee: $p) isa employment;"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
String rootConjunction = "{ $e(employee: $x) isa employment; }";
Conjunction conjunctionPattern = resolvedConjunction(rootConjunction, transaction.logic());
createRootAndAssertResponses(transaction, conjunctionPattern, 9L, 6L);
}
}
}
use of com.vaticle.typedb.core.pattern.Conjunction in project grakn by graknlabs.
the class ResolutionTest method test_deep_rerequest_chain.
@Test
public void test_deep_rerequest_chain() throws InterruptedException {
try (CoreSession session = schemaSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().define(TypeQL.parseQuery("define woman sub entity, plays marriage:wife, plays friendship:friend, plays employment:employee, plays association:associated;" + "man sub entity, plays marriage:husband, plays friendship:friend;" + "friendship sub relation, relates friend;" + "company sub entity, plays employment:employer, plays association:associated;" + "marriage sub relation, relates husband, relates wife;" + "employment sub relation, relates employee, relates employer;" + "association sub relation, relates associated;" + "rule marriage-is-friendship: when {$x isa man; $y isa woman; " + "(husband: $x, wife: $y) isa marriage; } then { (friend: $x, friend: $y) isa friendship; }; " + "rule employment-is-association: when {$x isa woman; $y isa company; " + "(employee: $x, employer: $y) isa employment; } then { (associated: $x, associated: $y) isa association; }; "));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
Stream.of("insert $y isa woman; $x isa man; (husband: $x, wife: $y) isa marriage; (employee: $y, employer: $z) isa employment; $z isa company;", "insert $y isa woman; $x isa man; (husband: $x, wife: $y) isa marriage;", "insert $y isa woman; $x isa woman; (wife: $x, wife: $y) isa marriage;", "insert $y isa man;", "insert $y isa woman;", "insert $y isa woman; (employee: $y, employer: $z) isa employment; $z isa company;", "insert $z isa company;").forEach(q -> transaction.query().insert(TypeQL.parseQuery(q)));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
Conjunction conjunctionPattern = resolvedConjunction("{ $x isa man; " + "(friend: $x, friend: $y) isa friendship; $y isa woman; (associated: $y, associated: $z) isa association; $z isa company; }", transaction.logic());
createRootAndAssertResponses(transaction, conjunctionPattern, 1L, 1L);
}
}
}
use of com.vaticle.typedb.core.pattern.Conjunction in project grakn by graknlabs.
the class ResolutionTest method test_conjunction_no_rules.
@Test
public void test_conjunction_no_rules() throws InterruptedException {
try (CoreSession session = schemaSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().define(TypeQL.parseQuery("define person sub entity, owns age, plays twins:twin1, plays twins:twin2;" + "age sub attribute, value long;" + "twins sub relation, relates twin1, relates twin2;"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 24; $t(twin1: $p1, twin2: $p2) isa twins; $p2 isa person;"));
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 24; $t(twin1: $p1, twin2: $p2) isa twins; $p2 isa person;"));
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 24; $t(twin1: $p1, twin2: $p2) isa twins; $p2 isa person;"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
Conjunction conjunctionPattern = resolvedConjunction("{ $t(twin1: $p1, twin2: $p2) isa twins; $p1 has age $a; }", transaction.logic());
createRootAndAssertResponses(transaction, conjunctionPattern, 3L, 0L);
}
}
}
use of com.vaticle.typedb.core.pattern.Conjunction in project grakn by graknlabs.
the class ResolutionTest method test_no_rules_with_no_answers.
@Test
public void test_no_rules_with_no_answers() throws InterruptedException {
try (CoreSession session = schemaSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().define(TypeQL.parseQuery("define person sub entity, owns age, plays twins:twin1, plays twins:twin2;" + "age sub attribute, value long;" + "twins sub relation, relates twin1, relates twin2;"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 24;"));
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 24;"));
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 24;"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
Conjunction conjunctionPattern = resolvedConjunction("{ $t(twin1: $p1, twin2: $p2) isa twins; " + "$p1 has age $a; }", transaction.logic());
createRootAndAssertResponses(transaction, conjunctionPattern, 0L, 0L);
}
}
}
Aggregations