There seems to be an issue with the pattern matching involving symmetric functions
and implicitly declared sets.
The following program illustrates it:
```
CFunction g1(a),g2(s);
Indices i,j,k;
L tmp = g1(1,2)*g2(1,2);
id g1(j?,i?)*g2(j?,k?!{i?}) = 0; * the id is applied, but it shouldn't
id g1(j?,i?!{k?})*g2(j?,k?) = 0; * the id is not applied, this is correct
print +s -f;
.end
I want to forbid the matching if there is a closed loop of indices by specifying
a restriction with an implicitly declared set.
However, the restriction k?!{i?} is ignored when it is inside the symmetric
function g2() (in the first id above) whereas its equivalent i?!{k?} written in
the antisymmetric function g1() is correctly enforced (by commenting out
the first id).
There seems to be an issue with the pattern matching involving symmetric functions and implicitly declared sets.
The following program illustrates it: