// Using L-functions in Magma (Mostly related to Artin representations) // // Every example can be copy-pasted into the Magma calculator // http://magma.maths.usyd.edu.au/calc/ // // Questions/comments to Tim Dokchitser (timdok@gmail.com) //////////////////////////////////////////////////////////////////////// // Artin representations of Q(i)/Q //////////////////////////////////////////////////////////////////////// K:=QuadraticField(-1); // Let K=Q(i) A:=ArtinRepresentations(K); #A; // 2 = number of irr reprs of Gal(K/Q): A[1]; // trivial character and A[2]; // the sign character //////////////////////////////////////////////////////////////////////// // Conductors, character, basic properties of Artin representations //////////////////////////////////////////////////////////////////////// K:=QuadraticField(-1); A:=ArtinRepresentations(K); // chi = non-trivial character of chi:=A[2]; // Gal(Q(i)/Q) Conductor(chi); // chi has conductor 4 Character(chi); // character (1,-1) IsIrreducible(chi); // and is an irreducible representation //////////////////////////////////////////////////////////////////////// // L-series of an Artin representation at s=1 //////////////////////////////////////////////////////////////////////// K:=QuadraticField(-1); A:=ArtinRepresentations(K); // chi = non-trivial character of chi:=A[2]; // Gal(Q(i)/Q) L:=LSeries(chi); Evaluate(L,1); // L(chi,1) Evaluate(L,2); // L(chi,2) //////////////////////////////////////////////////////////////////////// // L-series of an elliptic curve E twisted by a primitive character chi // of Q(\zeta_5)/Q. Compute L(E,chi,s) at s=1, and also print the sign // in the functional equation of L. //////////////////////////////////////////////////////////////////////// E:=EllipticCurve("11a1"); K:=CyclotomicField(5); A:=ArtinRepresentations(K); L:=LSeries(E,A[2]); Evaluate(L,1); // L(1) = 0.6859-1.1099*i Sign(L); // sign in the functional equation //////////////////////////////////////////////////////////////////////// // Another example with basic Artin representation data //////////////////////////////////////////////////////////////////////// R:=PolynomialRing(Rationals()); K:=NumberField(x^4-3); // Extension of Q with Galois group D8 A:=ArtinRepresentations(K); [Dimension(a): a in A]; // [1,1,1,1,2] [Conductor(a): a in A]; // [1,3,4,12,576] [IsRamified(a,3): a in A]; // [false,true,false,true,true] [IsWildlyRamified(a,3): a in A]; // [false,false,false,false,false] Group(A[1]); // Galois group //////////////////////////////////////////////////////////////////////// // An Artin representation defined as a difference of two zeta functions //////////////////////////////////////////////////////////////////////// R:=PolynomialRing(Rationals()); F:=NumberField(x^4-2); // F=Q(4th root of 2) K:=NumberField(x^2-2); // K=Q(sqrt 2) rho:=PermutationCharacter(F)-PermutationCharacter(K); Dimension(rho); // 2 Character(rho); // (2,-2,0,0,0) Conductor(rho); // 256 IsFaithful(Character(rho)); // yes IsIrreducible(rho); // yes Group(rho); // D8 given by generators (12)(34) and (14) in S4 //////////////////////////////////////////////////////////////////////// // Sign in the functional equation recognized as an algebraic number //////////////////////////////////////////////////////////////////////// K:=CyclotomicField(5); A:=ArtinRepresentations(K); L:=LSeries(A[2]); lval:=Evaluate(L,1); // Compute L(1), and initialize the sign sign:=Sign(L); sign; // sign is a complex number f:=PowerRelation(sign,8); f; // which satisfies this degree 8 polynomial //////////////////////////////////////////////////////////////////////// // Finding a polynomial of a specific form with a specific Galois group //////////////////////////////////////////////////////////////////////// R:=PolynomialRing(Rationals()); ok:=exists(c0){c: c in [1..50] | // Is there a polynomial IsIrreducible(x^4-2*x^3+x^2+c) and // x^4-2*x^3+x^2+c, 1<=c<=50 #GaloisGroup(x^4-2*x^3+x^2+c) ne 24}; // with Galois group yes, it exists K:=NumberField(x^4-2*x^3+x^2+c0); // and c0 is assigned to a value G:=GaloisGroup(K); // of c that gives such an f #G; // Galois group has size 8 IsIsomorphic(G,DihedralGroup(4)); // an is, in fact, D_8 //////////////////////////////////////////////////////////////////////// // Number fields whose Galois group is a given small transitive group, // and their Artin representations; ramification and Euler factors //////////////////////////////////////////////////////////////////////// load galpols; // Take a polynomial with Galois group f:=PolynomialWithGaloisGroup(7,5); // G = 5th transitive group acting on 7 pts G:=GaloisGroup(f); G; // G=PSL(2,7) given by generators #G; // order of G is 168 IsSimple(G); // yes, G is simple K:=NumberField(f); A:=ArtinRepresentations(K); // Irreducible representations of G have [Degree(a): a in A]; // degrees [1,3,3,6,7,8] a:=A[2]; // Take a = the 4th one (6-dimensional) Factorisation(Conductor(a)); // 2^10*809^2 IsRamified(a,2); // yes, a is ramified at 2 IsWildlyRamified(a,2); // yes, wildly ramified EulerFactor(a,2); EulerFactor(a,3); // first few Euler factors EulerFactor(a,5); //////////////////////////////////////////////////////////////////////// // Tensoring two 1-dimensional characters //////////////////////////////////////////////////////////////////////// R:=PolynomialRing(Rationals()); K1:=QuadraticField(2); // sign1 = non-trivial character triv1,sign1:=Explode(ArtinRepresentations(K1)); // of Gal(Q(sqrt 2)/Q) K2:=QuadraticField(3); // sign2 = non-trivial character triv2,sign2:=Explode(ArtinRepresentations(K2)); // of Gal(Q(sqrt 3)/Q) twist:=sign1*sign2; twist; // their tensor product is an unfaithful IsFaithful(Character(twist)); // character of Gal(Q(sqrt 2,sqrt 3)/Q) Group(twist); // which is C2*C2 min:=Minimize(twist); // Minimize it. Now it is a faithful min; // char of Gal(Q(sqrt 6)/Q) Group(min); // which is C2 //////////////////////////////////////////////////////////////////////// // Two number fields with the same zeta function // (Trinks polynomial from the Jones-Roberts database) //////////////////////////////////////////////////////////////////////// R:=PolynomialRing(Rationals()); K1:=NumberField(x^7-7*x-3); K2:=NumberField(x^7-7*x^4-21*x^3+21*x^2+42*x-9); IsIsomorphic(K1,K2); // no LSeries(K1) eq LSeries(K2); // yes //////////////////////////////////////////////////////////////////////// // L-series of an elliptic curve E/Q evaluated at s=2 //////////////////////////////////////////////////////////////////////// E:=EllipticCurve([0,-1,1,0,0]); L:=LSeries(E); Evaluate(L,2); //////////////////////////////////////////////////////////////////////// // L-series of an elliptic curve E/Q and its derivatives at s=1 //////////////////////////////////////////////////////////////////////// E:=EllipticCurve("389a1"); L:=LSeries(E); Evaluate(L,1); // L(1) = 0 Evaluate(L,1: Derivative:=1); // L'(1) = 0 Evaluate(L,1: Derivative:=2); // L''(1) <> 0 Rank(E); // Mordell-Weil rank is 2, as expected //////////////////////////////////////////////////////////////////////// // Other built-in L-functions: Riemann zeta, Dedekind zeta, // L-functions of elliptic curves over Q and over number fields, // L-functions of hyperelliptic curves. (Modular forms, // Hilbert modular forms, and Hecke characters are also in there) //////////////////////////////////////////////////////////////////////// L:=RiemannZeta(); // Riemann zeta function Conductor(L),Sign(L),GammaFactors(L); // and its basic invariants E:=EllipticCurve("37a1"); // L-function of an elliptic curve L:=LSeries(E); Conductor(L),Sign(L),GammaFactors(L); K:=QuadraticField(-1); E:=EllipticCurve([i,0,-1,0,i+1]); // L-function of E/Q(i) L:=LSeries(E); Conductor(L),Sign(L),GammaFactors(L); K:=CyclotomicField(7); // Dedekind zeta function L:=LSeries(K); Conductor(L),Sign(L),GammaFactors(L); R:=PolynomialRing(Rationals()); // L-function of y^2=x^5+1 C:=HyperellipticCurve(x^5+1); L:=LSeries(C: Precision:=18); Conductor(L),Sign(L),GammaFactors(L); //////////////////////////////////////////////////////////////////////// // Constructing your own L-functions I: Riemann zeta //////////////////////////////////////////////////////////////////////// Z:=LSeries(1, // weight = 1 (fun eq s<->1-s) [0], // Gamma factors = [0] (Gamma(s/2)) 1, // Conductor = 1 func // all Dirichlet coefficients are 1 : Sign:=1, // Sign = 1 in fun.eq. Poles:=[1], // Pole at s=1, residue=-1 Residues:=[-1]); CheckFunctionalEquation(Z); // Gives 0, meaning fun.eq. works Evaluate(Z,2); // pi^2/6 //////////////////////////////////////////////////////////////////////// // Constructing your own L-functions II: Character of Q(zeta_3)/Q //////////////////////////////////////////////////////////////////////// cfs:=[1,-1,0]; // Start with an L-series with only 3 // coefficients 1,-1,0 L:=LSeries(1,[1],3,cfs: Sign:=1); // weight = 1 (fun eq s<->1-s) // Hodge numbers [1], conductor 3 CheckFunctionalEquation(L); // 10^(-5) - close but not quite // satisfied cfs:=[1,-1,0,1,-1,0]; // give a few more coefficients L:=LSeries(1,[1],3,cfs: Sign:=1); CheckFunctionalEquation(L); // 10^(-15) - works better cfs:=[1,-1,0,1,-1,0,1,-1,0,1]; // and a few more L:=LSeries(1,[1],3,cfs: Sign:=1); // 10^(-31) - works completely CheckFunctionalEquation(L); // to default precision cfs:=func; // better way: give a function of n L:=LSeries(1,[1],3,cfs: Sign:=1); // that generates nth coefficient //////////////////////////////////////////////////////////////////////// // Constructing your own L-functions III: Specify L-series by local factors // L-series L(chi,s), for chi a quadratic character of conductor 3 //////////////////////////////////////////////////////////////////////// R:=PolynomialRing(Integers()); function localfactor(p,d) // Make a function that computes if p mod 3 eq 0 then return 1; // the local polynomial in p elif p mod 3 eq 1 then return 1-x; else return 1+x; end if; end function; L:=LSeries(1,[1],3,localfactor: Sign:=1); // Construct the L-function // (wt 1, gamma [1], conductor 3) CheckFunctionalEquation(L); // Close to 0 -> everything is fine //////////////////////////////////////////////////////////////////////// // Trinks polynomial //////////////////////////////////////////////////////////////////////// // Trinks polynomial f:=x^7-7*x-3; K:=NumberField(f); G:=GaloisGroup(K); IsSimple(G); A:=ArtinRepresentations(K); PermutationCharacter(K); chi:=$1;chi; Conductor(chi); Discriminant(IntegerRing(K)); f; reg:=K!![168,0,0,0,0,0]; reg; Factorisation(Conductor(reg)); [Degree(a): a in A]; LSeries(A[1]); LSeries(A[4]); LSeries(A[4])*LSeries(A[1]); LSeries(A[4])*LSeries(A[1]) eq LSeries(K); L:=LSeries(CyclotomicField(32)); Evaluate(L,2); /////////////////////////////////////////////////////////////////////////// // See also // // http://magma.maths.usyd.edu.au/magma/handbook/text/1405 // // for documentation on L-series, and in particular the // // "Advanced examples" section in there for more examples // ///////////////////////////////////////////////////////////////////////////