fibrationBasis(..., []) doesn't always recognize zeros

Issue #6 closed
Vitaly Magerya created an issue

Hi Erik. I was trying to use fibrationBasis with the empty list of variables to convert a set of hyperlogarithms into a basis, but run into two issues.

The first issue is this: I know that Hlog(y,[-z,1-z]) is invariant under z <-> 1-y-z. This is easy to check with HyperInt:

> fibrationBasis(Hlog(y,[-z,1-z])-Hlog(y,[y+z-1,y+z]),[y]);
0

However, if I use fibrationBasis without specifying the variables, I get:

> fibrationBasis(Hlog(y,[-z,1-z])-Hlog(y,[y+z-1,y+z]),[]);
                  z - 1              -1 + y + z  y + z
Hlog(1, [- z/y, - -----]) - Hlog(1, [----------, -----])
                    y                    y         y

... so why isn't this a zero?

The second issue is much more trivial, but also annoying: the same symmetry holds for Hlog(y,[1-z])Hlog(z,[0]) - Hlog(y,[-z]) Hlog(z,[1]), but again only if y is explicitly given to fibrationBasis:

> ex:=-(Hlog(y,[y+z])*Hlog(1-y-z,[0]))+Hlog(y,[-1+y+z])*Hlog(1-y-z,[1])+Hlog(y,[1-z])*Hlog(z,[0])-Hlog(y,[-z])*Hlog(z,[1]):
> fibrationBasis(ex,[y]);
0
> fibrationBasis(ex,[]); 
      z                                   z - 1                    y + z             -1 + y + z
-ln(-----) ln(1 - y - z) + ln(y + z) ln(----------) - ln(1 - z) ln(-----) + ln(z) ln(----------) 
    y + z                               -1 + y + z                   z                 z - 1

This is a zero, but only if you invert some of the ln arguments. I'd prefer fibrationBasis to return zero here explicitly though. Is this possible?

(I see this behavior both in the master and in the dev branches).

Comments (5)

  1. Erik Panzer repo owner

    Dear Vitaly,

    this is the expected behaviour. The fibrationBasis command brings the expression into a basis with respect to the variables listed in the last parameter. If none are specified, fibrationBasis does not do anything except for a trivial rewriting in terms of Hlog's. Note in particular that the output of fibrationBasis is not uniquely determined by its specification unless all variables that appear in hyperlogarithms are also appearing in the 2nd parameter of fibrationBasis.

    To write expressions into a basis or to detect zeros, you must include all variables appearing in the arguments of the polylogs in the 2nd argument of fibrationBasis.

    If there are left-over variables (i.e. variables that are not listed in the 2nd argument of fibrationBasis, but that do appear in arguments of polylogs in the 1st argument of fibrationBasis), the current code only outputs some representation of the function.

    Does this answer your question?

    Would it help if fibrationBasis() would issue a warning message if it finds leftover variables?

    Thank you very much for your very clear problem description, Erik

  2. Vitaly Magerya reporter

    Oh, I see. This does answer my question, thanks.

    Yeah, a warning would probably be helpful (for future users).

    The reason I tried to do it without the list of variables is because with it fibrationBasis keeps giving me delta[x] pieces, which I'd rather not have to deal with, but it seems that no better way is available.

  3. Erik Panzer repo owner

    The delta's come in when there is a branch cut on the positive real axis, to specify which signs have to be used for which branch (delta is the sign of the imaginary part). There are some examples of this in the paper and manual worksheet.

    I took a note to add a warning for leftover variables to fibrationBasis() soon.

  4. Log in to comment