\\ Package to compute the "derived period integrals" attached to a \\ (modular) elliptic curve E/Q and a real quadratic field K of narrow \\ class number one for which E has sign (-1,-1). \\ \\ The function period(gammapsi) returns the derived BD period \\ attached to gammapsi, correspoding to a fundamental unit of \\ the corresponding real quadratic field. \\ period(E,gammapsi,\ a,b,c,d, xpsi,ypsi, res, \ M, \ k, fc, trc) =\ a = gammapsi[1,1]; b = gammapsi[1,2];\ c = gammapsi[2,1]; d=gammapsi[2,2];\ trc = a+d;\ print([a,b,c,d]);\ epsilon = (trc+sqrt(trc^2-4))/2;\ print("unit = ", epsilon);\ xpsi = (epsilon-d)/c;\ ypsi = (1/epsilon -d)/c;\ M = floor(digits*abs(c)*log(10)/(2*Pi)) + 1;\ print("M = ", M);\ fc = ellan(E,M);\ res=0;\ q=exp(-2*Pi/abs(c));\ print( "Computing sum with ", M, " terms");\ for(n=1,M, \ res = res - fc[n]/n*q^n*intnum(x=-d/c,a/c, exp(2*Pi*I*n*x)*\ ( 1/(x-xpsi+I/abs(c)) - 1/(x-ypsi+I/abs(c)) ));\ print1([n]); );\ return(res); \\ ************************************************************************* \\ Package of PARI Routines to compute the Mazur Tate circle pairing \\ Attached to \\ - An elliptic curve E over Q \\ - A real quadratic field K/Q \\ \\ ************************************************************************* \\ lambda(E,P): Given as input the elliptic curve E over R, and a point P \\ on E(R), returns the local contribution at infinity to the height of \\ P. \\ \\ lambda(E,P,M,\ w1,w2,tau, z,q,u,uu,t,qn,res)=\ M=1000;\ w1=E[15]; w2=E[16];\ tau = w2/w1;\ print("tau = ", tau);\ z = ellpointtoz(E,P)/w1;\ print("z = ", z);\ q = exp(2*Pi*I*tau);\ print(" q = ",q);\ u = exp(2*Pi*I*z);\ uu = 1/u;\ print(" u,uu, = ",u," ",uu);\ t = imag(z)/imag(tau);\ print("t = ",t);\ res = -1/2*(t^2-t+1/6)*log(abs(q))-log(abs(1-u));\ qn=1;\ for(n=1,M,\ qn=qn*q;\ if(n%100==0,print1([n,qn]),);\ res = res - log(abs((1-qn*u)*(1-qn*uu))) );\ return(res+log(abs(E[12]))/12 ) ; \\ fancyred(F): Takes as input an integral binary quadratic form F, and \\ returns a vector [F', m] where \\ F' is an equivalent quadratic form, with leading coefficient 1. \\ m is the matrix transforming F into F' fancyred(F,\ F1,tmat, F2, C, B1,B2, t) =\ F1 = F;\ tmat=[1,0; 0,1];\ until( abs(component(F1,1))==1,\ F2 = qfbred(F1,1);\ C = component(F1,3);\ if(C<> component(F2,1),print("ERROR"),);\ B1 = component(F1,2);\ B2 = component(F2,2);\ t = (B1+B2)/(2*C);\ tmat = tmat* [0,1;-1,0]* [1,t;0,1];\ F1=F2; );\ return([F1,tmat]); \\ Function primegen(D,p): returns a generator of a prime ideal above p \\ in the real quadratic field attached to the fundamental discriminant D. primegen(D,p,\ w, sD, F, fred, F2, mred, uv, A,B,C, alpha) =\ w = quadgen(D);\ if(D%4==0, sD=2*w, sD=2*w-1);\ F = qfbprimeform(D,p);\ fred = fancyred(F);\ F2 = fred[1]; mred= fred[2];\ uv = mred^(-1) * [1;0];\ A = component(F2,1); B= component(F2,2); C = component(F2,3);\ alpha = (-B+sD)/(2*A);\ return(uv[1,1]-uv[2,1]*alpha) ; \\ Function denominatr(D,x): Given a fundamental discriminant D, \\ and an x in K*, where K is a real quadratic field Q(sqrt(D)) \\ of class number one, returns the "denominator" of x. \\ This denominator is an element of O_K, which is well-defined \\ up to multiplication by the fundamental units of K. denominatr(D,x,\ den, numb, u,v, res, f, j, p, mult, g) =\ den = denominator(norm(x));\ num = x * den;\ u = real(num); v=imag(num);\ res=1;\ f = factor(den)~;\ for(j=1,length(f),\ p=f[1,j]; mult = f[2,j];\ g = primegen(D,p);\ if( (real(g)*v-imag(g)*u)% p ==0,\ res=res*conj(g)^mult,\ res=res*g^mult ); );\ return(res); /* Computation with 53A over Q(sqrt(13)) */ allocatemem(); allocatemem(); \p 12 w=quadgen(13) s = 2*w-1 s^2 E = ellinit([1,-1,1,0,0]) ellglobalred(E) P = [0,0] Q = [1/13 , (-91+25*s)/13^2 ] ellisoncurve(E,Q) R1 = elladd(E,P,Q) R2 = ellsub(E,P,Q) x1 = R1[1] x2 = R2[1] d1 = denominatr(13,x1) d2 = denominatr(13,x2) ht = lambda(E,R1) - lambda(E,R2) + 1/2*log(abs(d1/d2)) t = 2 /* Compute the period integral (left hand side) for 43A over Q(sqrt(13)) */ digits = 11 lg = log( 4+ 3*(1+sqrt(13))/2); gammapsi = [-17, -3; 159, 28] per= period(E,gammapsi) lhs = t*real(per) rhs = ht*E[15] print("Left hand side = ", lhs); print("Right hand side = ", rhs) print("delta1 = ", (lhs-rhs)/E[15]/lg); print("delta2 = ", (lhs+rhs)/E[15]/lg);