cayleygraph/cayley

ForAll / Universal Quantifiers

Open

#209 geöffnet am 9. Feb. 2015

Auf GitHub ansehen
 (4 Kommentare) (1 Reaktion) (0 zugewiesene Personen)Go (1.277 Forks)batch import
good first issuequery languages

Repository-Metriken

Stars
 (14.291 Stars)
PR-Merge-Metriken
 (Keine gemergten PRs in 30 T)

Beschreibung

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