Frobenius on Monsky-Washnitzer cohomology of a hyperelliptic curve over a¶
largish prime finite field
This is a wrapper for the matrix() function in hypellfrob.cpp.
AUTHOR:
- David Harvey (2007-05)
- David Harvey (2007-12): rewrote for
hypellfrob
version 2.0
-
sage.schemes.hyperelliptic_curves.hypellfrob.
hypellfrob
(p, N, Q)¶ Compute the matrix of Frobenius acting on the Monsky-Washnitzer cohomology of a hyperelliptic curve y2=Q(x), with respect to the basis xidx/y, 0≤i<2g.
INPUT:
- p – a prime
- Q – a monic polynomial in Z[x] of odd degree. Must have no multiple roots mod p.
- N – precision parameter; the output matrix will be correct modulo pN.
PRECONDITIONS:
Must have p>(2g+1)(2N−1), where g=(deg(Q)−1)/2 is the genus of the curve.
ALGORITHM:
Described in “Kedlaya’s algorithm in larger characteristic” by David Harvey. Running time is theoretically soft-O(p1/2N5/2g3).
Todo
Remove the restriction on p. Probably by merging in Robert’s code, which eventually needs a fast C++/NTL implementation.
EXAMPLES:
sage: from sage.schemes.hyperelliptic_curves.hypellfrob import hypellfrob sage: R.<x> = PolynomialRing(ZZ) sage: f = x^5 + 2*x^2 + x + 1; p = 101 sage: M = hypellfrob(p, 4, f); M [ 91844754 + O(101^4) 38295665 + O(101^4) 44498269 + O(101^4) 11854028 + O(101^4)] [ 93514789 + O(101^4) 48987424 + O(101^4) 53287857 + O(101^4) 61431148 + O(101^4)] [ 77916046 + O(101^4) 60656459 + O(101^4) 101244586 + O(101^4) 56237448 + O(101^4)] [ 58643832 + O(101^4) 81727988 + O(101^4) 85294589 + O(101^4) 70104432 + O(101^4)] sage: -M.trace() 7 + O(101^4) sage: sum(legendre_symbol(f(i), p) for i in range(p)) 7 sage: ZZ(M.det()) 10201 sage: M = hypellfrob(p, 1, f); M [ O(101) O(101) 93 + O(101) 62 + O(101)] [ O(101) O(101) 55 + O(101) 19 + O(101)] [ O(101) O(101) 65 + O(101) 42 + O(101)] [ O(101) O(101) 89 + O(101) 29 + O(101)]
AUTHORS:
- David Harvey (2007-05)
- David Harvey (2007-12): updated for hypellfrob version 2.0
-
sage.schemes.hyperelliptic_curves.hypellfrob.
interval_products
(M0, M1, target)¶ Given a matrix M with coefficients linear polynomials over Z/NZ and a list of integers a0<b0≤a1<b1≤⋯≤an<bn compute the matrices
\prod_{t = a_i + 1}^{b_i} M(t)
for i=0 to n.This is a wrapper for code in the
hypellfrob
package.INPUT:
- M0, M1 – matrices over Z/NZ, so that M=M0+M1∗x
- target – a list of integers
ALGORITHM:
Described in [Harv2007]. Based on the work of Bostan-Gaudry-Schost [BGS2007].
EXAMPLES:
sage: from sage.schemes.hyperelliptic_curves.hypellfrob import interval_products sage: interval_products(Matrix(Integers(9), 2,2, [1,0,1,0]), ....: Matrix(Integers(9), 2, 2, [1, 1, 0, 2]),[0,2,2,4]) [ [7 8] [5 4] [5 1], [2 7] ] sage: [prod(Matrix(Integers(9), 2, 2, [t + 1, t, 1, 2*t]) ....: for t in range(2*i + 1, 2*i + 1 + 2)) for i in range(2)] [ [7 8] [5 4] [5 1], [2 7] ]
An example with larger modulus:
sage: interval_products(Matrix(Integers(3^8), 1, 1, [1]), ....: Matrix(Integers(3^8), 1, 1, [1]), [2,4]) [[20]] sage: [prod(Matrix(Integers(3^8), 1, 1, [t + 1]) for t in range(3,5))] [[20]]
An even larger modulus:
sage: interval_products(Matrix(Integers(3^18), 1, 1, [1]), ....: Matrix(Integers(3^18), 1, 1, [1]), [2,4]) [[20]] sage: [prod(Matrix(Integers(3^18), 1, 1, [t + 1]) for t in range(3,5))] [[20]]
AUTHORS:
- David Harvey (2007-12): Original code
- Alex J. Best (2018-02): Wrapper
REFERENCES:
[Harv2007] David Harvey. Kedlaya’s algorithm in larger characteristic, arXiv math/0610973. [BGS2007] Alin Bostan, Pierrick Gaudry, and Eric Schost, Linear recurrences with polynomial coefficients and application to integer factorization and Cartier-Manin operator, SIAM Journal on Computing 36 (2007), no. 6, 1777-1806