\\********************************************************************** \\ 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,trac,\ 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;\ if(trac,print([a,b,c,d]),);\ epsilon = (trc+sqrt(trc^2-4))/2;\ if(trac,print("unit = ", epsilon),);\ xpsi = (epsilon-d)/c;\ ypsi = (1/epsilon -d)/c;\ M = floor(digits*abs(c)*log(10)/(2*Pi)) + 1;\ if(trac,print("M = ", M),);\ fc = ellan(E,M);\ res=0;\ q=exp(-2*Pi/abs(c));\ print( "Computing derived period by summing ", M, " integrals");\ 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;\ z = ellpointtoz(E,P)/w1;\ q = exp(2*Pi*I*tau);\ u = exp(2*Pi*I*z);\ uu = 1/u;\ t = imag(z)/imag(tau);\ res = -1/2*(t^2-t+1/6)*log(abs(q))-log(abs(1-u));\ qn=1;\ for(n=1,M,\ qn=qn*q;\ 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 the field Q(sqrt(5)) allocatemem(); allocatemem(); D=5; w=quadgen(D); s = 2*w-1; \\ Sample computation with 61A over Q(sqrt(5)) \\ This series of commands computes the right hand side \\ in our BSD conjecture. E = ellinit([1,0,0,-2,1]); print("-------------------------------------------------------------"); print("Testing the circle pairing conjecture for the curve "); print(" E: y^2 + ",E.a1,"xy + ",E.a3,"y = x^3 + ",E.a2,"x^2 + ",E.a4,"x + ",E.a6); print(" of conductor ", ellglobalred(E)[1]); print(" over the field K = Q(sqrt(",D,"))"); print(); print("Arithmetic quantities (the right-hand side) "); print("------------------------------------------- "); P = [1,0]; print(" Generator for E(Q) = ", P); if(ellisoncurve(E,P), ,print(" *** ERROR: P is not on E ****")); w=quadgen(D); s = 2*w-1; Q = [4/5 , (-2+3/s)/5 ]; print(" Generator for E(K)- = ", Q); if(elladd(E,Q,conj(Q))==[0], ,print(" *** ERROR: Q is not on E(K)- ****")); print(); half = ellpow(E,[-1+w,0],-1); t = 2 ; print(" (P+Q)/2 = ", half, " hence t = ", t); \\ Assume that Sha(E/K)=1 sha=1; print(" Square root of #Sha(E/K) = ",sha); tamagawa = ellglobalred(E)[3]; print(" Product of the c_p's = ",tamagawa); R1 = elladd(E,P,Q); R2 = ellsub(E,P,Q); x1 = R1[1]; x2 = R2[1]; d1 = denominatr(5,x1); d2 = denominatr(5,x2); ht = lambda(E,R1) - lambda(E,R2) + 1/2*log(abs(d1/d2)) ; lg = log( (3 + sqrt(5))/2 ); print(); print(" Circle pairing: "); print(" = ", ht, " mod(",lg,")"); print(); print(); \\ Compute the period integral (left hand side) print("Analytic quantities (left-hand side) "); print("------------------------------------ "); digits =10 ; print( " Precision requested = ",digits, " digits."); \p 17 ; gammapsi = [19, -5; 61, -16]; printp(" Gamma_Psi = ", gammapsi); print(); IfK = period(E,gammapsi); print();print(); print("Derived period = ", real(IfK)," mod(",lg*E[15],")"); lhs = t* real(IfK); rhs = ht*E[15]*sha*tamagawa; print("Left hand side = ", lhs," mod(",lg*E[15],")"); print("Right hand side = ", rhs," mod(",lg*E[15],")"); difference=rhs - lhs; print(" LHS - RHS = ",difference); print(); print("(LHS-RHS)/ ( log(epsilon) Omega+ ) = ",difference/(E[15]*lg) ); print();print(); \\ Sample computation with 79A over Q(sqrt(5)) \\ This series of commands computes the right hand side \\ in our BSD conjecture. E = ellinit([1,1,1,-2,0]) ; print("-------------------------------------------------------------"); print("Testing the circle pairing conjecture for the curve "); print(" E: y^2 + ",E.a1,"xy + ",E.a3,"y = x^3 + ",E.a2,"x^2 + ",E.a4,"x + ",E.a6); print(" of conductor ", ellglobalred(E)[1]); print(" over the field K = Q(sqrt(",D,"))"); print(); print("Arithmetic quantities (the right-hand side) "); print("------------------------------------------- "); P = [0,0]; print(" Generator for E(Q) = ", P); if(ellisoncurve(E,P), ,print(" *** ERROR: P is not on E ****")); w=quadgen(D); s = 2*w-1; Q = [1/5 , (-15+s)/25 ]; print(" Generator for E(K)- = ", Q); if(elladd(E,Q,conj(Q))==[0], ,print(" *** ERROR: Q is not on E(K)- ****")); print(); t = 1 ; print(" P and Q generate E(K), hence t = ", t); \\ Assume that Sha(E/K)=1 sha=1; print(" Square root of #Sha(E/K) = ",sha); tamagawa = ellglobalred(E)[3]; print(" Product of the c_p's = ",tamagawa); R1 = elladd(E,P,Q); R2 = ellsub(E,P,Q); x1 = R1[1]; x2 = R2[1]; d1 = denominatr(5,x1); d2 = denominatr(5,x2); ht = lambda(E,R1) - lambda(E,R2) + 1/2*log(abs(d1/d2)) ; lg = log( (3 + sqrt(5))/2 ); print(); print(" Circle pairing: "); print(" = ", ht, " mod(",lg,")"); print(); print(); \\ Compute the period integral (left hand side) print("Analytic quantities (left-hand side) "); print("------------------------------------ "); digits =10 ; print( " Precision requested = ",digits, " digits."); \p 17 ; gammapsi = [ -28, -11; 79, 31]; printp(" Gamma_Psi = ", gammapsi); print(); IfK = period(E,gammapsi); print();print(); print("Derived period = ", real(IfK)," mod(",lg*E[15],")"); lhs = t* real(IfK); rhs = ht*E[15]*sha*tamagawa; print("Left hand side = ", lhs," mod(",lg*E[15],")"); print("Right hand side = ", rhs," mod(",lg*E[15],")"); difference=rhs - lhs; print(" LHS - RHS = ",difference); print(); print("(LHS-RHS)/ ( log(epsilon) Omega+ ) = ",difference/(E[15]*lg) ); print();print(); \\ Sample computation with 89A over Q(sqrt(5)) \\ This series of commands computes the right hand side \\ in our BSD conjecture. E = ellinit([1,1,1,-1,0]); print("-------------------------------------------------------------"); print("Testing the circle pairing conjecture for the curve "); print(" E: y^2 + ",E.a1,"xy + ",E.a3,"y = x^3 + ",E.a2,"x^2 + ",E.a4,"x + ",E.a6); print(" of conductor ", ellglobalred(E)[1]); print(" over the field K = Q(sqrt(",D,"))"); print(); print("Arithmetic quantities (the right-hand side) "); print("------------------------------------------- "); P = [0,0]; print(" Generator for E(Q) = ", P); if(ellisoncurve(E,P), ,print(" *** ERROR: P is not on E ****")); w=quadgen(D); s = 2*w-1; Q = [-1/5 , (-10+7*s)/25 ]; print(" Generator for E(K)- = ", Q); if(elladd(E,Q,conj(Q))==[0], ,print(" *** ERROR: Q is not on E(K)- ****")); print(); half = [-1+w,w] t = 2 ; print(" (P+Q)/2 = ", half, " hence t = ", t); \\ Assume that Sha(E/K)=1 sha=1; print(" Square root of #Sha(E/K) = ",sha); tamagawa = ellglobalred(E)[3]; print(" Product of the c_p's = ",tamagawa); R1 = elladd(E,P,Q); R2 = ellsub(E,P,Q); x1 = R1[1]; x2 = R2[1]; d1 = denominatr(5,x1); d2 = denominatr(5,x2); ht = lambda(E,R1) - lambda(E,R2) + 1/2*log(abs(d1/d2)) ; lg = log( (3 + sqrt(5))/2 ); print(); print(" Circle pairing: "); print(" = ", ht, " mod(",lg,")"); print(); print(); \\ Compute the period integral (left hand side) print("Analytic quantities (left-hand side) "); print("------------------------------------ "); digits =10 ; print( " Precision requested = ",digits, " digits."); \p 17 ; gammapsi = [ -8, -1; 89, 11]; printp(" Gamma_Psi = ", gammapsi); print(); IfK = period(E,gammapsi); print();print(); print("Derived period = ", real(IfK)," mod(",lg*E[15],")"); lhs = t* real(IfK); rhs = -ht*E[15]*sha*tamagawa; print("Left hand side = ", lhs," mod(",lg*E[15],")"); print("Right hand side = ", rhs," mod(",lg*E[15],")"); difference=rhs - lhs; print(" RHS - LHS = ",difference); print(); print("(RHS-LHS)/ ( log(epsilon) Omega+ ) = ",difference/(E[15]*lg) );