Testing latest pari + WASM + node.js... and it works?! Wow.
License: GPL3
ubuntu2004
Function: ellap Section: elliptic_curves C-Name: ellap Prototype: GDG Help: ellap(E,{p}): given an elliptic curve E defined over a finite field Fq, return the trace of Frobenius a_p = q+1-#E(Fq); for other fields of definition K, p must define a finite residue field, (p prime for K = Qp or Q; p a maximal ideal for K a number field), return the order of the (nonsingular) reduction of E. Doc: Let \kbd{E} be an \kbd{ell} structure as output by \kbd{ellinit}, attached to an elliptic curve $E/K$. If the field $K = \F_q$ is finite, return the trace of Frobenius $t$, defined by the equation $\#E(\F_q) = q+1 - t$. For other fields of definition and $p$ defining a finite residue field $\F_q$, return the trace of Frobenius for the reduction of $E$: the argument $p$ is best left omitted if $K = \Q_\ell$ (else we must have $p = \ell$) and must be a prime number ($K = \Q$) or prime ideal ($K$ a general number field) with residue field $\F_q$ otherwise. The equation need not be minimal or even integral at $p$; of course, a minimal model will be more efficient. For a number field $K$, the trace of Frobenius is the $a_p$ coefficient in the Euler product defining the curve $L$-series, whence the function name: $$L(E/K,s) = \prod_{\text{bad}\ p} (1-a_p (Np)^{-s})^{-1} \prod_{\text{good}\ p} (1-a_p (Np)^{-s} + (Np)^{1-2s})^{-1}. $$ When the characteristic of the finite field is large, the availability of the \kbd{seadata} package will speed up the computation. \bprog ? E = ellinit([0,1]); \\ y^2 = x^3 + 0.x + 1, defined over Q ? ellap(E, 7) \\ 7 necessary here %2 = -4 \\ #E(F_7) = 7+1-(-4) = 12 ? ellcard(E, 7) %3 = 12 \\ OK ? E = ellinit([0,1], 11); \\ defined over F_11 ? ellap(E) \\ no need to repeat 11 %4 = 0 ? ellap(E, 11) \\ ... but it also works %5 = 0 ? ellgroup(E, 13) \\ ouch, inconsistent input! *** at top-level: ellap(E,13) *** ^----------- *** ellap: inconsistent moduli in Rg_to_Fp: 11 13 ? a = ffgen(ffinit(11,3), 'a); \\ defines F_q := F_{11^3} ? E = ellinit([a+1,a]); \\ y^2 = x^3 + (a+1)x + a, defined over F_q ? ellap(E) %8 = -3 @eprog If the curve is defined over a more general number field than $\Q$, the maximal ideal $p$ must be explicitly given in \kbd{idealprimedec} format. There is no assumption of local minimality at $p$. \bprog ? K = nfinit(a^2+1); E = ellinit([1+a,0,1,0,0], K); ? fa = idealfactor(K, E.disc) %2 = [ [5, [-2, 1]~, 1, 1, [2, -1; 1, 2]] 1] [[13, [5, 1]~, 1, 1, [-5, -1; 1, -5]] 2] ? ellap(E, fa[1,1]) %3 = -1 \\ nonsplit multiplicative reduction ? ellap(E, fa[2,1]) %4 = 1 \\ split multiplicative reduction ? P17 = idealprimedec(K,17)[1]; ? ellap(E, P17) %6 = 6 \\ good reduction ? E2 = ellchangecurve(E, [17,0,0,0]); ? ellap(E2, P17) %8 = 6 \\ same, starting from a nonmiminal model ? P3 = idealprimedec(K,3)[1]; ? ellap(E, P3) \\ OK: E is minimal at P3 %10 = -2 ? E3 = ellchangecurve(E, [3,0,0,0]); ? ellap(E3, P3) \\ not integral at P3 *** at top-level: ellap(E3,P3) *** ^------------ *** ellap: impossible inverse in Rg_to_ff: Mod(0, 3). @eprog \misctitle{Algorithms used} If $E/\F_q$ has CM by a principal imaginary quadratic order we use a fast explicit formula (involving essentially Kronecker symbols and Cornacchia's algorithm), in $O(\log q)^2$ bit operations. Otherwise, we use Shanks-Mestre's baby-step/giant-step method, which runs in time $\tilde{O}(q^{1/4})$ using $\tilde{O}(q^{1/4})$ storage, hence becomes unreasonable when $q$ has about 30~digits. Above this range, the \tet{SEA} algorithm becomes available, heuristically in $\tilde{O}(\log q)^4$, and primes of the order of 200~digits become feasible. In small characteristic we use Mestre's (p=2), Kohel's (p=3,5,7,13), Satoh-Harley (all in $\tilde{O}(p^{2}\*n^2)$) or Kedlaya's (in $\tilde{O}(p\*n^3)$) algorithms.