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)