Function: lfuncreate Section: l_functions C-Name: lfuncreate Prototype: G Help: lfuncreate(obj): given either an object such as a polynomial, elliptic curve, Dirichlet or Hecke character, eta quotient, etc., or an explicit 6 or 7 component vector [dir,real,Vga,k,N,eps,r], create the Ldata structure necessary for lfun computation. Doc: This low-level routine creates \tet{Ldata} structures, needed by \var{lfun} functions, describing an $L$-function and its functional equation. You are urged to use a high-level constructor when one is available, and this function accepts them, see \kbd{??lfun}: \bprog ? L = lfuncreate(1); \\ Riemann zeta ? L = lfuncreate(5); \\ Dirichlet L-function for quadratic character (5/.) ? L = lfuncreate(x^2+1); \\ Dedekind zeta for Q(i) ? L = lfuncreate(ellinit([0,1])); \\ L-function of E/Q: y^2=x^3+1 @eprog\noindent One can then use, e.g., \kbd{Lfun(L,s)} to directly evaluate the respective $L$-functions at $s$, or \kbd{lfuninit(L, [c,w,h]} to initialize computations in the rectangular box $\Re(s-c) \leq w$, $\Im(s) \leq h$. We now describe the low-level interface, used to input non-builtin $L$-functions. The input is now a $6$ or $7$ component vector $V=[a, astar, Vga, k, N, eps, poles]$, whose components are as follows: \item \kbd{V[1]=a} encodes the Dirichlet series coefficients $(a_n)$. The preferred format is a closure of arity 1: \kbd{n->vector(n,i,a(i))} giving the vector of the first $n$ coefficients. The closure is allowed to return a vector of more than $n$ coefficients (only the first $n$ will be considered) or even less than $n$, in which case loss of accuracy will occur and a warning that \kbd{\#an} is less than expected is issued. This allows to precompute and store a fixed large number of Dirichlet coefficients in a vector $v$ and use the closure \kbd{n->v}, which does not depend on $n$. As a shorthand for this latter case, you can input the vector $v$ itself instead of the closure. \bprog ? z = lfuncreate([n->vector(n,i,1), 1, [0], 1, 1, 1, 1]); \\ Riemann zeta ? lfun(z,2) - Pi^2/6 %2 = -5.877471754111437540 E-39 @eprog A second format is limited to $L$-functions affording an Euler product. It is a closure of arity 2 \kbd{(p,d)->F(p)} giving the local factor $L_p(X)$ at $p$ as a rational function, to be evaluated at $p^{-s}$ as in \kbd{direuler}; $d$ is set to \kbd{logint}$(n,p)$ + 1, where $n$ is the total number of Dirichlet coefficients $(a_1,\dots,a_n)$ that will be computed. In other words, the smallest integer $d$ such that $p^d > n$. This parameter $d$ allows to compute only part of $L_p$ when $p$ is large and $L_p$ expensive to compute: any polynomial (or \typ{SER}) congruent to $L_p$ modulo $X^d$ is acceptable since only the coefficients of $X^0, \dots, X^{d-1}$ are needed to expand the Dirichlet series. The closure can of course ignore this parameter: \bprog ? z = lfuncreate([(p,d)->1/(1-x), 1, [0], 1, 1, 1, 1]); \\ Riemann zeta ? lfun(z,2) - Pi^2/6 %4 = -5.877471754111437540 E-39 @eprog\noindent One can describe separately the generic local factors coefficients and the bad local factors by setting $\kbd{dir} = [F, L_{bad}]$, were $L_{bad} = [[p_1,L_{p_1}], \dots,[p_k,L_{p_k}]]$, where $F$ describes the generic local factors as above, except that when $p = p_i$ for some $i \leq k$, the coefficient $a_p$ is directly set to $L_{p_i}$ instead of calling $F$. \bprog N = 15; E = ellinit([1, 1, 1, -10, -10]); \\ = "15a1" F(p,d) = 1 / (1 - ellap(E,p)*'x + p*'x^2); Lbad = [[3, 1/(1+'x)], [5, 1/(1-'x)]]; L = lfuncreate([[F,Lbad], 0, [0,1], 2, N, ellrootno(E)]); @eprog\noindent Of course, in this case, \kbd{lfuncreate(E)} is preferable! \item \kbd{V[2]=astar} is the Dirichlet series coefficients of the dual function, encoded as \kbd{a} above. The sentinel values $0$ and $1$ may be used for the special cases where $a = a^*$ and $a = \overline{a^*}$, respectively. \item \kbd{V[3]=Vga} is the vector of $\alpha_j$ such that the gamma factor of the $L$-function is equal to $$\gamma_A(s)=\prod_{1\le j\le d}\Gamma_{\R}(s+\alpha_j),$$ where $\Gamma_{\R}(s)=\pi^{-s/2}\Gamma(s/2)$. This same syntax is used in the \kbd{gammamellininv} functions. In particular the length $d$ of \kbd{Vga} is the degree of the $L$-function. In the present implementation, the $\alpha_j$ are assumed to be exact rational numbers. However when calling theta functions with \emph{complex} (as opposed to real) arguments, determination problems occur which may give wrong results when the $\alpha_j$ are not integral. \item \kbd{V[4]=k} is a positive integer $k$. The functional equation relates values at $s$ and $k-s$. For instance, for an Artin $L$-series such as a Dedekind zeta function we have $k = 1$, for an elliptic curve $k = 2$, and for a modular form, $k$ is its weight. For motivic $L$-functions, the \emph{motivic} weight $w$ is $w = k-1$. By default we assume that $a_n = O_\epsilon(n^{k_1+\epsilon})$, where $k_1 = w$ and even $k_1 = w/2$ when the $L$ function has no pole (Ramanujan-Petersson). If this is not the case, you can replace the $k$ argument by a vector $[k,k_1]$, where $k_1$ is the upper bound you can assume. \item \kbd{V[5]=N} is the conductor, an integer $N\ge1$, such that $\Lambda(s)=N^{s/2}\gamma_A(s)L(s)$ with $\gamma_A(s)$ as above. \item \kbd{V[6]=eps} is the root number $\varepsilon$, i.e., the complex number (usually of modulus $1$) such that $\Lambda(a, k-s) = \varepsilon \Lambda(a^*, s)$. \item The last optional component \kbd{V[7]=poles} encodes the poles of the $L$ or $\Lambda$-functions, and is omitted if they have no poles. A polar part is given by a list of $2$-component vectors $[\beta,P_{\beta}(x)]$, where $\beta$ is a pole and the power series $P_{\beta}(x)$ describes the attached polar part, such that $L(s) - P_\beta(s-\beta)$ is holomorphic in a neighbourhood of $\beta$. For instance $P_\beta = r/x+O(1)$ for a simple pole at $\beta$ or $r_1/x^2+r_2/x+O(1)$ for a double pole. The type of the list describing the polar part allows to distinguish between $L$ and $\Lambda$: a \typ{VEC} is attached to $L$, and a \typ{COL} is attached to $\Lambda$. Unless $a = \overline{a^*}$ (coded by \kbd{astar} equal to $0$ or $1$), it is mandatory to specify the polar part of $\Lambda$ rather than those of $L$ since the poles of $L^*$ cannot be infered from the latter ! Whereas the functional equation allows to deduce the polar part of $\Lambda^*$ from the polar part of $\Lambda$. Finally, if $a = \overline{a^*}$, we allow a shortcut to describe the frequent situation where $L$ has at most simple pole, at $s = k$, with residue $r$ a complex scalar: you may then input $\kbd{poles} = r$. This value $r$ can be set to $0$ if unknown and it will be computed.