Open a-kulkarn opened 2 years ago
I think this is already interesting for the case F equal to the rational numbers! We could practice with that simpler case, where DZB and I give (uniform, then more precise) bounds.
Here's an iconoclastic suggestion: How about we have a Ring Object and change things such that Parent(f)
returns this graded ring object, so all modular forms of the same level and number field (but different weights) have the same parent.
We could internally to the package replace Parent
calls with something else (for arguments sake, Nanny
) to access the HMF spaces. I wouldn't be surprised if this doesn't work for a lot of reasons, like if there are different ways to assemble HMFSpaces into graded rings, but I thought I'd throw the idea out there.
Here's what got me thinking along these lines: Today, I was trying to write an "Evaluate" function that takes a polynomial and a list of HMFs and returns an HMF. That's all well and good, except that this function has to have type signature
Evaluate(::RngMPol, ::List) -> ModFrmHilDElt
Except now, anytime someone else writes a function with the same signature, conflicts ensue. My version of the function is "duck typed", so we avoid most problems in this example, but in general it may let us replace List
types in the code with SeqEnum[ModFrmHilDElt]
's.
It also means that we no longer need the proxy polynomial ring object described above, and we can just have a "GradedRingOfHMFs" as intended.
This would take me a while to get used to. I think of a modular form as belong to its vector space of forms (with the same weight, level, and character), and I think of these spaces as the graded pieces of the graded ring of modular forms. I don't think I'm alone? I think this is a 'parent of a parent' issue.
I'm excited for our on graded rings, but I don't think we should tear up the carpet.
Won't there be other ways to solve a signature conflict like this? An easy solution here is just to have cases in the Evaluate function itself, depending on what the input is. (This isn't optimal, but it happens fairly frequently.) I'm not super worried about the overloading of this function: what is an example of a hypothetical future conflict that couldn't be resolved this way? I'm not bothered by using List
instead of SeqEnum[ModFrmHilDElt]
. Should I be?
At the moment, there is an implicit notion of a graded ring of Hilbert modular forms, in that if
f,g
are HMFs with the same level the productf*g
is interpretable by Magma. At present, there is no explicit encoding of a "GradedRing" of modular forms of levelN
.The proposal discussed today is to have some functionality like
with
R
a standardRngMPol
object (or quotient of this by an ideal) andmp
a function sending the degreek
part ofR
toHMFSpace(K, N, [k, k])
. This map will complain if it is given an inhomogeneous element, and should have an inverse.A non-lazy version could make use of
GeneratorsAndRelations
. A lazy version could be interesting to think about.