Opened 7 years ago

Last modified 3 months ago

#19865 new enhancement

Added functionality to compute zeta functions of nondegenerate hypersurfaces over finite fields

Reported by: Malcolm Kotok Owned by:
Priority: major Milestone: sage-9.8
Component: number theory Keywords: zeta, p-adic, L-function, sd87, sd91
Cc: Malcolm Kotok, Ursula Whitcher, Kiran 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:

Status badges

Description (last modified by Ursula Whitcher)

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 (27)

comment:1 Changed 7 years ago by Malcolm Kotok

Authors: Malcolm Kotok
Cc: Malcolm Kotok added

comment:2 Changed 7 years ago by Kiran Kedlaya

There is also a project by Costa, Harvey, and myself to do a different computation of zeta functions of nondegenerate toric hypersurfaces, using Monsky-Washnitzer cohomology in place of Dwork's series method. It's not yet clear how these two methods will compare (the Sperber-Voight method is optimized towards sparse hypersurfaces somewhat more than our approach), so it would be valuable to have both!

comment:3 Changed 7 years ago by Kiran Kedlaya

Note also ticket #15239 regarding testing for nondegeneracy, which might be worth dealing with first.

comment:4 Changed 5 years ago by David Roe

Keywords: sd87 added

comment:5 Changed 5 years ago by Kiran Kedlaya

For (my own) convenience, the link to the code is http://hdl.handle.net/1802/30832.

Related projects: #20265, #23863.

comment:6 Changed 5 years ago by Kiran Kedlaya

Keywords: sd91 added

comment:7 Changed 5 years ago by Ursula Whitcher

Authors: Malcolm KotokHeidi Goodson, Malcolm Kotok, Renate Scheidler, Mckenzie West, Ursula Whitcher
Cc: Ursula Whitcher added
Description: modified (diff)

comment:8 Changed 5 years ago by Jan Tuitman

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 5 years ago by Kiran Kedlaya

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 stress-testing?

comment:10 Changed 5 years ago by Jan Tuitman

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*x-4)*y^3+(3*x^2+2*x-3)*y^2+(x^3+4*x^2-2*x+3)*y+(3*x^4-2*x^3-4*x^2+2*x+2); p=11;
ffzeta(Q,p,verbose=True);

Last edited 5 years ago by Jan Tuitman (previous) (diff)

comment:11 Changed 5 years ago by Kiran Kedlaya

The Sperber-Voight 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 5 years ago by Mckenzie West

Branch: u/mwest/ticket_19865

comment:13 Changed 5 years ago by Mckenzie West

Commit: 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:

30f7aefNew function zeta_function has been added to multi_polynomial
c6c8c8eKotok code added, zeta_function is a method of polynomials

comment:14 Changed 3 years ago by Frédéric Chapoton

Branch: u/mwest/ticket_19865public/ticket/19865
Commit: c6c8c8ec15cb66e6dd7833e4366450cc7777bb88250c90003667a48409fb377bc6f1fafe09fa715c
Milestone: sage-7.0sage-9.0

New commits:

2422fb1New function zeta_function has been added to multi_polynomial
250c900Kotok code added, zeta_function is a method of polynomials

comment:15 Changed 3 years ago by git

Commit: 250c90003667a48409fb377bc6f1fafe09fa715c85b7c2720d3617273e4abe94453988296e5e266e

Branch pushed to git repo; I updated commit sha1. This was a forced push. New commits:

365349cKotok code added, zeta_function is a method of polynomials
015104fdetails
85b7c27moving to another file

comment:16 Changed 3 years ago by git

Commit: 85b7c2720d3617273e4abe94453988296e5e266ef6f615f4677ff62a429369e743f229f2b5d65d7d

Branch pushed to git repo; I updated commit sha1. New commits:

f6f615fdetails

comment:17 Changed 3 years ago by Frédéric Chapoton

Cc: Kiran Kedlaya added

Maybe this could be saved ?

comment:18 Changed 3 years ago by Kiran Kedlaya

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+1-y^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 3 years ago by Erik Bray

Milestone: sage-9.0sage-9.1

Ticket retargeted after milestone closed

comment:20 Changed 3 years ago by Matthias Köppe

Milestone: sage-9.1sage-9.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 2 years ago by Kiran Kedlaya

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 2 years ago by Matthias Köppe

Milestone: sage-9.2sage-9.3

comment:23 Changed 22 months ago by Matthias Köppe

Milestone: sage-9.3sage-9.4

Setting new milestone based on a cursory review of ticket status, priority, and last modification date.

comment:24 Changed 17 months ago by Matthias Köppe

Milestone: sage-9.4sage-9.5

comment:25 Changed 12 months ago by Matthias Köppe

Milestone: sage-9.5sage-9.6

comment:26 Changed 8 months ago by Matthias Köppe

Milestone: sage-9.6sage-9.7

comment:27 Changed 3 months ago by Matthias Köppe

Milestone: sage-9.7sage-9.8
Note: See TracTickets for help on using tickets.