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

Reply via email to