vermaseren / form

The FORM project for symbolic manipulation of very big expressions
GNU General Public License v3.0
1.13k stars 135 forks source link

Implicitly declared set inside symmetric function #227

Open crmafra opened 7 years ago

crmafra commented 7 years ago

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).
jodavies commented 7 years ago

The pattern should be

id g1(j?,i?!{k?})*g2(j?,k?!{i?}) = 0;