Opened 3 years ago
Last modified 4 months ago
#20264 needs_work enhancement
HasseWeil Zeta function of a cyclic cover of P1 over finite fields.
Reported by:  edgarcosta  Owned by:  

Priority:  major  Milestone:  sage8.5 
Component:  padics  Keywords:  days71, sd87, days88 
Cc:  alexjbest  Merged in:  
Authors:  Vishal Arul, Edgar Costa, Richard Magner, and Nicholas Triantafillou  Reviewers:  
Report Upstream:  N/A  Work issues:  
Branch:  public/zetanowrap (Commits)  Commit:  d7a885cb085673a6f7531a765bd0e7405d81b1f4 
Dependencies:  #25366  Stopgaps: 
Description (last modified by )
We add a new method to compute the zeta function of a cyclic cover of P^1
, this is the result of a forthcoming paper generalizing the work of Kedlaya, Harvey, Minzlaff and Gonçalves.
In particular, we add two classes for cyclic covers, one over a generic ring and a specialized one over finite fields.
This requires wrapping David Harvey's code for computing products of matrices already in Sage but not accessible to Sage, see #25366
Here is a quick example:
sage: p = 4999; sage: x = PolynomialRing(GF(p),"x").gen(); sage: C = CyclicCover(5, x^5 + 1) sage: C Cyclic Cover of P^1 over Finite Field of size 4999 defined by y^5 = x^5 + 1 sage: C.frobenius_polynomial() x^12 + 29994*x^10 + 374850015*x^8 + 2498500299980*x^6 + 9367502249700015*x^4 + 18731257498500149994*x^2 + 15606259372500374970001 sage: C.genus() 6
Change History (15)
comment:1 Changed 2 years ago by
 Keywords sd87 added
comment:2 Changed 2 years ago by
 Keywords days88 added
comment:3 Changed 16 months ago by
 Cc alexjbest added
 Dependencies set to #25366
 Description modified (diff)
 Milestone changed from sage7.2 to sage8.3
 Summary changed from HasseWeil Zeta function of a superelliptic curve over finite fields. to HasseWeil Zeta function of a cyclic cover of P1 over finite fields.
comment:4 Changed 16 months ago by
 Branch set to u/edgarcosta/cycliccovers
 Commit set to 5706cca0599155736f262d6d8d31ee44f31514b0
 Status changed from new to needs_info
comment:5 Changed 16 months ago by
 Commit changed from 5706cca0599155736f262d6d8d31ee44f31514b0 to 7b51922af08c4002fc36f565025fcad8955cfe12
Branch pushed to git repo; I updated commit sha1. New commits:
7b51922  more examples at the top

comment:6 Changed 16 months ago by
comment:7 Changed 16 months ago by
 Status changed from needs_info to needs_review
comment:8 Changed 16 months ago by
 Description modified (diff)
comment:9 Changed 14 months ago by
 Milestone changed from sage8.3 to sage8.4
update milestone 8.3 > 8.4
comment:10 Changed 10 months ago by
 Branch changed from u/edgarcosta/cycliccovers to public/zetacyclic
 Commit changed from 7b51922af08c4002fc36f565025fcad8955cfe12 to 30d61b5987424de767facbcd6abd9ed82a5562ef
Last 10 new commits:
7c86227  began reviewing zeta functions of cyclic covers

05199c0  removed many semicolons

91ddb8e  small fix

e91fb3c  rename folder

ed9eca9  finish move

cdca59d  delete unused function

df1216f  more style fixes last bit of move

c4e7788  move check squarefree

c0df121  add to main reference

30d61b5  more cleanup

comment:11 Changed 10 months ago by
 Milestone changed from sage8.4 to sage8.5
comment:12 Changed 9 months ago by
 Branch changed from public/zetacyclic to public/zetanowrap
 Commit changed from 30d61b5987424de767facbcd6abd9ed82a5562ef to d7a885cb085673a6f7531a765bd0e7405d81b1f4
Last 10 new commits:
9b89e3a  removed many semicolons

2493a73  small fix

5a8afa8  rename folder

3fb8aa1  finish move

e5fe996  delete unused function

198943f  more style fixes last bit of move

cd05163  move check squarefree

b78a04d  add to main reference

3883347  more cleanup

d7a885c  fixed lots of docs with edgar

comment:13 Changed 9 months ago by
This is looking pretty good now to me, so I intend to mark this as positive review once #25366 is reviewed.
comment:14 Changed 4 months ago by
Vishal Arul spotted some bugs.
sage: %time CyclicCover(11, PolynomialRing(GF(1129), 'x')([1] + [0]*(51) + [1])).frobenius_polynomial() CPU times: user 16.1 s, sys: 124 ms, total: 16.3 s Wall time: 16.5 s x^40 + 7337188909826596*x^30 + 3818873571673594702967652840943135*x^20 + 24687045654725446027864774006541463602997309796*x^10 + 11320844849639649951608809973589776933203136765026963553258401
So the discrepancy is in the t^20
coefficient  Minzlaff's code says it is
20187877911930897108199045855206 = 6 * 1129^10
while the current code says it is
3818873571673594702967652840943135 = 6 * 1129^10 + 1129^11.
the difference is exactly 1129^{11. So it does look like some kind of precision error... }
My bet is that error is either in working precision or the code to lift characteristic polynomial to ZZ
Another bug, that seems to be related with precision when using the slow method
sage: CyclicCover(3, PolynomialRing(GF(1009), 'x')([1] + [0]*(51) + [1])).frobenius_polynomial() x^8 + 266*x^6  1474149*x^4 + 270809546*x^2 + 1036488922561 sage: CyclicCover(3, PolynomialRing(GF(1009**2), 'x')([1] + [0]*(51) + [1])).frobenius_polynomial() x^8 + 1045817316825941*x^7 + 546866930086505850133464526551*x^6 + 190640968494636702312197540239024924597536618*x^5 + 49843906537040069873392691186784704861320520036908736885312*x^4 + 194087947845988228526704383964086734259184677590058*x^3 + 566821515149604163130057985174959967417111*x^2 + 1103577471286158480607964750564981*x + 1074309286591662654798721
It looks like the frobenius polynomial for GF(1009) is correct, but it is not correct for GF(1009**2)
. Comparing with Minzlaff's code, the right frobenius polynomial for GF(1009**2)
should be
x^8 + 532*x^7  2877542*x^6  242628176*x^5 + 4390163797795*x^4  247015136050256*x^3  2982540407204025062*x^2 + 561382189105547134612*x + 1074309286591662654798721
comment:15 Changed 4 months ago by
 Status changed from needs_review to needs_work
New commits:
wrap ntl_mat_ZZ_p functionality
wrap harvey's intervalproducts
merge w/develop
initial commit for cyclic covers