#8622: Atkin-Lehner operators don't work for odd weight modular forms
---------------------------------+------------------------------------------
Reporter: davidloeffler | Owner: craigcitro
Type: defect | Status: new
Priority: major | Milestone:
Component: modular forms | Resolution:
Keywords: atkin-lehner | Work issues:
Report Upstream: N/A | Reviewers:
Authors: | Merged in:
Dependencies: | Stopgaps:
---------------------------------+------------------------------------------
Comment (by robharron):
Well, you do only get a numerical approximation to the eigenvalue, but in
the odd weight case, you know the eigenvalue is i or -i, since the square
of Atkin-Lehner acts by (-1)^k^ (where k is the weight).
As for embeddings, I think I'd have to consider it more carefully to be
sure, but my feeling is that this shouldn't matter. The functional
equation relates the L-function of f at s to the L-function of W(f) at k-s
and W(f) = w*f', where f' is the newform whose coefficients are the
complex conjugates of those of f. The newforms we are discussing have
totally real coefficients, so f'=f and L(s,f) is related to L(k-s,f) by a
functional equation, and w, the Atkin-Lehner eigenvalue, appears in that
functional equation (and w^2^ = -1). Now, L(s,f) really depends on a
complex embedding of the Hecke eigenvalue field of f into C, but such a
dependancy shouldn't change the sign of the functional equation (right?).
Now, I found a newform with CM by its own Nebentypus and Hecke eigenvalue
field a totally real cubic extension and tried this out and the answer I
got was independent of the complex embedding:
{{{
sage: def lseries(selfe, prec = 100, max_imaginary_part=0,
max_asymp_coeffs=40, threshold = 1e-10):
K = selfe.hecke_eigenvalue_field()
iotas = K.complex_embeddings()
Ls = []
i = 0
for iota in iotas:
Ls.append(Dokchitser(conductor = selfe.level(), gammaV = [0, 1],
weight = selfe.weight(), eps = 1, prec = prec))
coeffs = 'coeff = %s;'%[iota(a_n) for a_n in
selfe.q_expansion(prec).list()]
#print coeffs
Ls[-1].init_coeffs('coeff[k+1]', pari_precode = coeffs,
max_imaginary_part = max_imaginary_part, max_asymp_coeffs =
max_asymp_coeffs)
if Ls[-1].check_functional_equation().abs() > threshold:
Ls[-1] = Dokchitser(conductor = selfe.level(), gammaV = [0,
1], weight = selfe.weight(), eps = -1, prec = prec)
Ls[-1].init_coeffs('coeff[k+1]', pari_precode = coeffs,
max_imaginary_part = max_imaginary_part, max_asymp_coeffs =
max_asymp_coeffs)
if Ls[-1].check_functional_equation().abs() > threshold:
print "Sign not found!"
return Ls
....:
sage: f = Newforms(Gamma1(23),3,names='a')[0]sage:
f.hecke_eigenvalue_field()
Number Field in a0 with defining polynomial x^3 - 12*x + 7
sage: f.q_expansion(10)
q + a0*q^2 + (-1/3*a0^2 - 5/3*a0 + 8/3)*q^3 + (a0^2 - 4)*q^4 + (-5/3*a0^2
- 4/3*a0 + 7/3)*q^6 + (4*a0 - 7)*q^8 + (7/3*a0^2 + 11/3*a0 - 29/3)*q^9 +
O(q^10)
sage: Ls = lseries(f)
sage: for L in Ls:
print L(1) * 2 * pi.N() * I/(sqrt(f.level()).N() * L(2))
....:
1.00000000000000*I
1.00000000000000*I
1.00000000000000*I
}}}
Obviously, it would be nice to be able to deal with the pseudo-eigenvalues
in the general case, but in the meantime, if this makes sense, it would be
nice. Also, note that I had to write my own function for getting the
L-function of f since the current implementation only deals with Γ,,0,,.
(Is there a reason the latter hasn't been implemented?)
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/8622#comment:5>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en.