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: |

### 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

### comment:2 Changed 5 weeks ago by

Milestone: | sage-8.4 |
---|

**Note:**See TracTickets for help on using tickets.

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 (

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