sagemath / sage

Main repository of SageMath. Now open for Issues and Pull Requests.
https://www.sagemath.org
Other
1.2k stars 413 forks source link

Galois action on newforms #26157

Open alexjbest opened 5 years ago

alexjbest commented 5 years ago

Would be nice if something like this could be made to work out of the box, unsure as to difficulty

sage: D = DirichletGroup(13)
....: c = D.Element(D,vector([2]))
....: N = Newforms(c,2,names="a")
....: f = N[0]
sage: f.hecke_eigenvalue_field().galois_group().gen()
(1,2)
sage: sigma = f.hecke_eigenvalue_field().galois_group().gen()
sage: sigma(f)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-b9094491914d> in <module>()
----> 1 sigma(f)

/Users/alex/sage/local/lib/python2.7/site-packages/sage/rings/number_field/galois_group.pyc in __call__(self, x)
    757             return self.as_hom()(x)
    758         else:
--> 759             return self.as_hom()(self.parent()._gc_map(x))
    760
    761     def ramification_degree(self, P):

/Users/alex/sage/local/lib/python2.7/site-packages/sage/categories/map.pyx in sage.categories.map.Map.__call__ (build/cythonized/sage/categories/map.c:7038)()
    781                 x = D(x)
    782             except (TypeError, NotImplementedError):
--> 783                 raise TypeError("%s fails to convert into the map's domain %s, but a `pushforward` method is not properly implemented" % (x, D))
    784         else:
    785             x = converter(x)

TypeError: q + (-zeta6 - 1)*q^2 + (2*zeta6 - 2)*q^3 + zeta6*q^4 + (-2*zeta6 + 1)*q^5 + O(q^6) fails to convert into the map's domain Cyclotomic Field of order 6 and degree 2, but a `pushforward` method is not properly implemented

Component: modular forms

Keywords: galois

Issue created by migration from https://trac.sagemath.org/ticket/26157

11d1fc49-71a1-44e1-869f-76be013245a0 commented 5 years ago
comment:1

The mathematical difficulty is virtually nil; the problem is one of designing a consistent interface.

The problem is that Sage's "newforms" were originally intended to represent simple (not absolutely simple!) factors of the new part of the Hecke algebra over Q, or Q(chi) where chi is the character. So the Galois action is by definition trivial, at least if chi is Q-valued.

Some of the more recent functionality, e.g. L-functions and Atkin--Lehner eigenvalues, blurs these distinctions by choosing -- or allowing the user to choose -- embeddings into C and then computing things that really depend on that embedding; but this is done in a rather inconsistent ad-hoc way, and this has led to some genuine bugs e.g. #18672.

If we were re-designing Sage from scratch, I'd be in favour of changing the Newform class, and the Newforms(N, k, chi) constructor function, so a Newform always comes with a specified embedding into C, and Newforms returns all newforms, not just one from every Galois orbit. This is how Magma behaves. However, making Sage do this would be a huge backward-incompatible change, breaking virtually every piece of code that uses Sage modular forms, so I don't know if it'd be a good idea to make the change now.

(Your example is actually a bit misleading because the coefficient field of your form is the same as the coefficient field of its character, which does come with a specified embedding into C, so the Sage object "f" represents a uniquely determined element of C[[q]] and sigma(f) is well-defined. But this is a pretty unusual case.)