cayleygraph/cayley

ForAll / Universal Quantifiers

Open

#209 opened on Feb 9, 2015

View on GitHub
 (4 comments) (1 reaction) (0 assignees)Go (14,291 stars) (1,277 forks)batch import
good first issuequery languages

Description

We have a Not iterator now. It'd be possible to add a shorthand macro in Gremlin to emulate the Universal Quantifier, ForAll.

All queries currently work on existence. That is, each stage depends on "there exists some path X to node Y". Using negation you can achieve "for all paths from X, (rest of query holds)".

The key insight being that (X holds for (ForAll A)) == (X holds for A) AND (X holds for (Not (Not A))) == (X holds for (A AND (Not (Not A))))

In today's parlance, this is: var a = g.M().... g.V().And(a).And(g.V().Except(g.V().Except(a)))...

It's a hack, but one that holds mathematically. Currently can be implemented as a macro on the query level, and is actually really hard to optimize further. (Suggestions, of course, are welcome)

Contributor guide