Opened 4 years ago

Last modified 5 weeks ago

#26157 new enhancement

Galois action on newforms

Reported by: alexjbest Owned by:
Priority: major Milestone:
Component: modular forms Keywords: galois
Cc: Merged in:
Authors: Reviewers:
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Status badges

Description

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

Change History (2)

comment:1 Changed 4 years ago by davidloeffler

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.)

comment:2 Changed 5 weeks ago by mkoeppe

Milestone: sage-8.4
Note: See TracTickets for help on using tickets.