cayleygraph/cayley

ForAll / Universal Quantifiers

Open

#209 aberto em 9 de fev. de 2015

Ver no GitHub
 (4 comments) (1 reaction) (0 assignees)Go (1.277 forks)batch import
good first issuequery languages

Métricas do repositório

Stars
 (14.291 stars)
Métricas de merge de PR
 (Nenhuma PRs mesclada em 30d)

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)

Guia do colaborador