Opened 5 years ago
Last modified 3 months ago
#19865 new enhancement
Added functionality to compute zeta functions of nondegenerate hypersurfaces over finite fields
Reported by:  malcolmkotok  Owned by:  

Priority:  major  Milestone:  sage9.4 
Component:  number theory  Keywords:  zeta, padic, Lfunction, sd87, sd91 
Cc:  malcolmkotok, ursula, kedlaya  Merged in:  
Authors:  Heidi Goodson, Malcolm Kotok, Renate Scheidler, Mckenzie West, Ursula Whitcher  Reviewers:  
Report Upstream:  N/A  Work issues:  
Branch:  public/ticket/19865 (Commits, GitHub, GitLab)  Commit:  f6f615f4677ff62a429369e743f229f2b5d65d7d 
Dependencies:  Stopgaps: 
Description (last modified by )
As part of his Ph.D. thesis, Malcolm Kotok implemented a function to compute zeta functions of nondegenerate hypersurfaces over finite fields, based on a paper of Sperber and Voight. We wish to incorporate this into Sage. For more information see: http://arxiv.org/abs/1112.4881
Change History (23)
comment:1 Changed 5 years ago by
 Cc malcolmkotok added
comment:2 Changed 5 years ago by
comment:3 Changed 5 years ago by
Note also ticket #15239 regarding testing for nondegeneracy, which might be worth dealing with first.
comment:4 Changed 4 years ago by
 Keywords sd87 added
comment:5 Changed 4 years ago by
For (my own) convenience, the link to the code is http://hdl.handle.net/1802/30832.
comment:6 Changed 4 years ago by
 Keywords sd91 added
comment:7 Changed 4 years ago by
 Cc ursula added
 Description modified (diff)
comment:8 Changed 4 years ago by
I tried this code about a year ago and it seemed to have some serious problems like it not finishing for a plane quartic curve over F_p (for any p). I wrote to Kotok about this, but never heard back from him. It could be some trivial issue, but it is hard to say.
comment:9 Changed 4 years ago by
My understanding is that some successful experiments with the code were made at SD91. Maybe someone can push the result to trac so that the rest of us can help with stresstesting?
comment:10 Changed 4 years ago by
Ok, here is what I'm talking about:
load("ffzeta.sage"); R.<x,y>=PolynomialRing(ZZ,2); # does work: Q=y^2(x^3+x+1); p=13; ffzeta(Q,p,verbose=True); # does not work: Q=y^4+(5*x4)*y^3+(3*x^2+2*x3)*y^2+(x^3+4*x^22*x+3)*y+(3*x^42*x^34*x^2+2*x+2); p=11; ffzeta(Q,p,verbose=True);
comment:11 Changed 4 years ago by
The SperberVoight algorithm being implemented here has as a complexity parameter the number of interior monomials, so it probably doesn't stand much of a chance for dense equations (although descending it from Sage to Cython might help near the borderline).
For smooth projective hypersurfaces, we also have tickets #20265 (deformation) and #23863 (controlled reduction). For nondegenerate toric hypersurfaces, Edgar Costa has functioning C code doing controlled reduction, but I believe it is not yet available for public consumption.
comment:12 Changed 4 years ago by
 Branch set to u/mwest/ticket_19865
comment:13 Changed 4 years ago by
 Commit set to c6c8c8ec15cb66e6dd7833e4366450cc7777bb88
We have some debugging to make this a method for polynomials. There are definitely errors in the computation in the multivariate example at the beginning of the function.
New commits:
30f7aef  New function zeta_function has been added to multi_polynomial

c6c8c8e  Kotok code added, zeta_function is a method of polynomials

comment:14 Changed 19 months ago by
 Branch changed from u/mwest/ticket_19865 to public/ticket/19865
 Commit changed from c6c8c8ec15cb66e6dd7833e4366450cc7777bb88 to 250c90003667a48409fb377bc6f1fafe09fa715c
 Milestone changed from sage7.0 to sage9.0
comment:15 Changed 19 months ago by
 Commit changed from 250c90003667a48409fb377bc6f1fafe09fa715c to 85b7c2720d3617273e4abe94453988296e5e266e
comment:16 Changed 19 months ago by
 Commit changed from 85b7c2720d3617273e4abe94453988296e5e266e to f6f615f4677ff62a429369e743f229f2b5d65d7d
Branch pushed to git repo; I updated commit sha1. New commits:
f6f615f  details

comment:18 Changed 17 months ago by
Just tried this and there is still something wrong:
File "src/sage/rings/polynomial/multi_polynomial.pyx", line 2494, in sage.rings.polynomial.multi_polynomial.MPolynomial.zeta_function Failed example: (x^3+x+1y^2).zeta_function(7) Expected: (7*T^7  17*T^6 + 14*T^5  12*T^4 + 18*T^3  14*T^2 + 5*T  1)/(7*T  1) Got: (3*T^4 + 2*T^3 + 4*T^2  2*T  1)/(7*T  1)
I was not one of the people working on this at sd91, so I wouldn't know what the issue is.
comment:19 Changed 16 months ago by
 Milestone changed from sage9.0 to sage9.1
Ticket retargeted after milestone closed
comment:20 Changed 13 months ago by
 Milestone changed from sage9.1 to sage9.2
Batch modifying tickets that will likely not be ready for 9.1, based on a review of the ticket title, branch/review status, and last modification date.
comment:21 Changed 9 months ago by
Still not sure what is going on here. This passage in zeta_function.py
is nonsensical:
# Reduce remaining part meta = Gm.parent()(m * eta[i]) x_i = Gm.parent()(x[i]) Gmbar = sum([x_i * meta.derivative(x_i) for i in range(n + 1)])
but fixing it doesn't have any effect on the doctests (the terms in the sum are all zero anyway).
Another data point: the ratio of the answers with affine=True
and affine=False
is not correct either.
comment:22 Changed 8 months ago by
 Milestone changed from sage9.2 to sage9.3
comment:23 Changed 3 months ago by
 Milestone changed from sage9.3 to sage9.4
Setting new milestone based on a cursory review of ticket status, priority, and last modification date.
There is also a project by Costa, Harvey, and myself to do a different computation of zeta functions of nondegenerate toric hypersurfaces, using MonskyWashnitzer cohomology in place of Dwork's series method. It's not yet clear how these two methods will compare (the SperberVoight method is optimized towards sparse hypersurfaces somewhat more than our approach), so it would be valuable to have both!