Modifying the L-function

There is some capability to modify an L-function, for instance if one were trying to experimentally determine bad Euler factors, you might not want to recompute the known (good) Euler factors repeatedly with a new L-function.

ChangeEulerFactor(L,p,f) : LSer, RngIntElt, RngUPolElt -> LSer
Given an L-series that computes its coefficients as Euler factors, a prime, and a suitable polynomial, create an L-function with the given Euler factor at said prime. This copies over the known coefficients.

Be warned that the new L-series has a function to compute Euler Factors which consists of one line to check if the prime is the special one, and then calls the old function. So recursively calling this function is not wise. It is (much) superior to create a new L-series with this intrinsic, compute with the new L-series, and then use CopyCoefficients to copy back to the first L-series, then creating more new L-series from it (and not from the second one).

ChangeLocalInformation(L,p,d,f) : LSer, RngIntElt, RngIntElt, RngUPolElt -> LSer
Similar to ChangeEulerFactor, but include the new local conductor as the third argument.
ChangeLocalInformation(L,bp) : LSer, List -> LSer
Similar to ChangeEulerFactor, but now the third argument is a list containing bad prime information, each entry being a tuple consisting of the prime, the local conductor, and the Euler factor (as a polynomial).
CopyCoefficients(L,M) : LSer, LSer ->
Copy the known coefficients array of the first L-series to the second. If the latter has more known coefficients, then those are retained at the end.

Example Lseries_change-local-info (H136E23)

We give a short example of how changing local information can be done. We create the L-series hypergeometric motive at the inverse value of the M-parameter, where the wild primes can often become good.

> H := HypergeometricData([2,3],[1,6]);
> MValue(H);
1/4
> L := LSeries(H,4);
WARNING: Guessing wild prime information
> BadPrimeData(L);
[ <2, 2, 4*x^2 + 2*x + 1>,  <3, 3, -3*x + 1> ]
> LCfRequired(L); // approx for old CheckFunctionalEquation
287
> CFENew(L);
0.0993765484143679709634086969555

At this point Magma really has no knowledge of the bad prime information at 3. Its guess of (1 - 3x) turns out to be incorrect, as is the conductor exponent at 3. By trial and error, we find that the Euler factor at 3 is trivial, and the local conductor is 4. We can change the old L-series to a new one with ChangeLocalInformation, and then check the functional equation. Finally (and importantly when one works via trial-and-error), we copy any extra coefficients computed with the second L-series back to the first.

> M := ChangeLocalInformation(L,[* <3,4,1> *]);
> LCfRequired(M);
503
> CFENew(M);
0.000000000000000000000000000000
> #L`cfvec; // length 260
260
> CopyCoefficients(M,L); // M back to L
> #L`cfvec; // now length 450
450
V2.28, 13 July 2023