Variables' values can't be calculated if they only exist in an edge's label.
rule r1
<int x>
[1, 2 | 1->2 (x), 2->1 (x)]
=> [];
If there are two edges from node A to node B with values 3 and 4, and one from node B to node A with value 4, then the edges with value 4 should be matched, right? But this currently isn't possible.
Also, there's a step where a possible matching is only kept if all the mappings it has have valid (read: equal) variable values. Edges can't be checked in the same way. Maybe check that the count of edges between two rule nodes with variable labels is equal to (or less than) the count of edges between two graph nodes with the same value of the right type. But this condition should be checked for all possible variable values, which may be more than one per matching (see above)
Variables' values can't be calculated if they only exist in an edge's label.
If there are two edges from node A to node B with values 3 and 4, and one from node B to node A with value 4, then the edges with value 4 should be matched, right? But this currently isn't possible.
Also, there's a step where a possible matching is only kept if all the mappings it has have valid (read: equal) variable values. Edges can't be checked in the same way. Maybe check that the count of edges between two rule nodes with variable labels is equal to (or less than) the count of edges between two graph nodes with the same value of the right type. But this condition should be checked for all possible variable values, which may be more than one per matching (see above)