fibrationBasis(..., []) doesn't always recognize zeros
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)
-
repo owner -
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 medelta[x]
pieces, which I'd rather not have to deal with, but it seems that no better way is available. -
reporter - changed status to closed
-
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.
-
repo owner I added the warning in commit 7ef3b7257684b1d70914d5eaa87cfdd15daf5f6e
- Log in to comment
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