#6836: The Sturm bound for modular forms gives the wrong result sometimes
---------------------------+------------------------------------------------
Reporter: ljpk | Owner: craigcitro
Type: defect | Status: new
Priority: minor | Milestone: sage-4.1.2
Component: modular forms | Keywords:
Reviewer: | Author:
Merged: |
---------------------------+------------------------------------------------
In the documentation for the Sturm bound, the following appears:
"Kevin Buzzard pointed out to me (William Stein) in Fall 2002 that the
above bound is fine for Gamma1 with character, as one sees by taking a
power of `f`. More precisely, if `fcong 0pmod{p}` for first `s`
coefficients, then `f^r = 0 pmod{p}` for first `s r` coefficients. Since
the weight of `f^r` is `r weight(f)`, it follows that if `s >=` the sturm
bound for `Gamma_0` at weight(f), then `f^r` has valuation large enough to
be forced to be `0` at `r *` weight(f) by Sturm bound (which is valid if
we choose `r` right). Thus `f cong 0 pmod{p}`. Conclusion: For `Gamma_1`
with fixed character, the Sturm bound is *exactly* the same as for
`Gamma_0`. "
However, this does not seem to be the case:
{{{
sage: CuspForms(DG144.1^2,3).sturm_bound()
3457
sage: CuspForms(Gamma0(144),3).sturm_bound()
73
}}}
I believe that this is due to the following code in the `sturm_bound`
method for modular forms:
{{{
if M is not None:
raise NotImplementedError
if self.__sturm_bound is None:
# the +1 below is because O(q^prec) has precision prec.
self.__sturm_bound =
self.group().sturm_bound(self.weight())+1
return self.__sturm_bound
}}}
where `self.group()' gives the wrong answer in the case of `Gamma_1` with
fixed character, because it returns `Gamma_1` rather than `Gamma_0`.
I propose that the code above should be of the form
{{{
if M is not None:
raise NotImplementedError
if self.__sturm_bound is None:
# the +1 below is because O(q^prec) has precision prec.
G=self.group()
if G=Gamma1(G.level()) and self.character() in
DirichletGroup(self.level()):
G=Gamma0(G.level())
self.__sturm_bound = G.sturm_bound(self.weight())+1
return self.__sturm_bound
}}}
before the sturm_bound variable is set, which would implement the remark
of Buzzard given above.
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/6836>
Sage <http://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
-~----------~----~----~----~------~----~------~--~---