Suppose we mark no_deps in the j loop inside another i loop, like
for i in range(m):
#! no_deps: a
for j in range(n):
a[f(i, j)]
Does it mean for all $\forall i, j_1, j_2, f(i, j_1) \ne f(i, j_2)$, or $\forall i_1, i_2, j_1, j_2, f(i_1, j_1) \ne f(i_2, j_2)$? The current code implements the latter, but I think users may want the former in most of the cases. We need to make it clear.