bug in hyperellfrob ?

558 days ago by wstein

c = [-1,-1,-2,-2,-1,2,3,1] f = ZZ['x'](c) 
       
       
x^7 + 3*x^6 + 2*x^5 - x^4 - 2*x^3 - 2*x^2 - x - 1
x^7 + 3*x^6 + 2*x^5 - x^4 - 2*x^3 - 2*x^2 - x - 1
f.discriminant().factor() 
       
-1 * 71^3
-1 * 71^3
from sage.schemes.hyperelliptic_curves.hypellfrob import hypellfrob 
       
p = 11 M = hypellfrob(p, 1, f) M.charpoly().change_ring(GF(p)).factor() 
       
x^3 * (x^3 + 5*x^2 + 2)
x^3 * (x^3 + 5*x^2 + 2)

If F(X) is charpoly of T_p, then X^3 F(X + p/X) is the charpoly of Frob_p, since T_p = Frob_p + p/Frob_p

D = ModularSymbols(284,sign=1).cuspidal_subspace().new_subspace().decomposition() T = D[0].hecke_matrix(p) F = D[0].hecke_polynomial(p) x = F.parent().gen() G = (x^3 * F(x + p/x)).numerator() G.factor_mod(p) 
       
x^3 * (x^3 + 6*x^2 + 9)
x^3 * (x^3 + 6*x^2 + 9)

That the above doesn't match is a contradiction.  Bigger primes work...

p = 13 M = hypellfrob(p, 1, f) M.charpoly().change_ring(GF(p)).factor() 
       
x^3 * (x^3 + 6*x^2 + 2*x + 7)
x^3 * (x^3 + 6*x^2 + 2*x + 7)
D = ModularSymbols(284,sign=1).cuspidal_subspace().new_subspace().decomposition() T = D[0].hecke_matrix(p) F = D[0].hecke_polynomial(p) x = F.parent().gen() G = (x^3 * F(x + p/x)).numerator() G.factor_mod(p) 
       
x^3 * (x^3 + 6*x^2 + 2*x + 7)
x^3 * (x^3 + 6*x^2 + 2*x + 7)
p = 37 M = hypellfrob(p, 1, f) M.charpoly().change_ring(GF(p)).factor() 
       
(x + 1) * (x + 14) * (x + 25) * x^3
(x + 1) * (x + 14) * (x + 25) * x^3
D = ModularSymbols(284,sign=1).cuspidal_subspace().new_subspace().decomposition() T = D[0].hecke_matrix(p) F = D[0].hecke_polynomial(p) x = F.parent().gen() G = (x^3 * F(x + p/x)).numerator() G.factor_mod(p) 
       
(x + 1) * (x + 14) * (x + 25) * x^3
(x + 1) * (x + 14) * (x + 25) * x^3