> H := HypergeometricData([1/2],[0]); // weight 0 > t := 3/5; > A := ArtinRepresentation(H,t); > D := Discriminant(Integers(Field(A))); // -24 > assert IsSquare(D/(t*(t-1))); // Q(sqrt(t(t-1))) > R := ArtinRepresentationQuadratic(-24); > assert A eq R; > // > H := HypergeometricData([1/4,3/4],[0,0]); > Weight(H); 1 > DefiningPolynomials(H); y^2 + 1, y^2 - 2*y + 1 > t := 3/2; > E := EllipticCurve(H,t); E; Elliptic Curve defined by y^2 + x*y = x^3 + 1/96*x over Q > P := PrimesInInterval(5,100); > &and[EulerFactor(E,p) eq EulerFactor(H,t,p) : p in P]; true > // > f := CyclotomicPolynomial(6)*CyclotomicPolynomial(2); > g := CyclotomicPolynomial(1)^3; > H := HypergeometricData(f,g); H; Hypergeometric data given by [ 1/6, 1/2, 5/6 ] and [ 0, 0, 0 ] > Weight(H); 2 > GammaList(H); [* -1, -1, -1, -3, 6 *] > GammaArray(H); [ -3, 0, -1, 0, 0, 1 ] > [EulerFactor(H,4,p) : p in [5,7,11,13,17,19]]; [ 125*y^3 + 20*y^2 + 4*y + 1, 343*y^3 - 42*y^2 - 6*y + 1, -1331*y^3 - 22*y^2 + 2*y + 1, -2197*y^3 - 156*y^2 + 12*y + 1, 4913*y^3 + 323*y^2 + 19*y + 1, 6859*y^3 - 57*y^2 - 3*y + 1 ] > // > _<u> := FunctionField(Rationals()); > H := HypergeometricData([-2,0,0,-1,0,1]); H; // weight 1 Hypergeometric data given by [1/6,1/3,2/3,5/6] and [0,0,1/4,3/4] > HyperellipticCurve(H); // defined over Q(u) Hyperelliptic Curve defined by y^2 = 4*x^6 - 8*x^5 + 4*x^4 - 64/729/u > t := 4; > C := Specialization($1,t); // only works over Q(u) > &and[EulerFactor(C,p) eq EulerFactor(H,t,p) : p in P]; true > // > H := HypergeometricData([0,-1,0,1,0,1,0,-1]); H; // weight 1 Hypergeometric data given by [1/6,1/3,2/3,5/6] and [1/8,3/8,5/8,7/8] > MValue(H); 729/4096 > t := 3; // could alternatively specialize later > E := EllipticCurve(H,t); aInvariants(E); [ 0, 0, -s, -s, 0] where s^2 is 4096/2187 > &and[EulerFactor(E,p) eq EulerFactor(H,t,p) : p in P]; true
> f := CyclotomicPolynomial(6); > g := CyclotomicPolynomial(1)*CyclotomicPolynomial(2); > H := HypergeometricData(f,g); H; assert(Weight(H)) eq 0; Hypergeometric data given by [ 1/6, 5/6 ] and [ 0, 1/2 ] > A := ArtinRepresentation(H,-4/5); > K := OptimisedRepresentation(Field(A)); > DefiningPolynomial(K); y^6 - 3*y^5 + 3*y^4 - y^3 + 3*y^2 - 3*y + 1 > T := Twist(H); T; Hypergeometric data given by [ 1/3, 2/3 ] and [ 0, 1/2 ] > A := ArtinRepresentation(T,-4/5); // can be 1/t sometimes > L := OptimisedRepresentation(Field(A)); > IsSubfield(L,K), DefiningPolynomial(L); true Mapping from: L to K, y^3 + 3*y - 1
The same can be said for twisting for (hyper)elliptic curves.
> H := HypergeometricData([2,2],[3]); // Phi_2^2 and Phi_3 > E := EllipticCurve(H,3); > T := EllipticCurve(Twist(H),1/3); // 1/t here > IsQuadraticTwist(E,T); true -4/9 > // > H := HypergeometricData([5],[8]); // Phi_5 and Phi_8 > C := HyperellipticCurve(H); > t := 7; > S := Specialization(C,t); > T := HyperellipticCurve(Twist(H),1/t); > Q := QuadraticTwist(T,5*t); // get right parameter > assert IsIsomorphic(Q,S);
> H := HypergeometricData([3],[4]); // Phi_3 and Phi_4 > GammaList(H); [* -1, 2, 3, -4 *] > H2 := HypergeometricData([* -2, 4, 6, -8 *]); > IsPrimitive(H2); false 2 > PrimitiveData(H2) eq H; true > H3 := HypergeometricData([* -3, 6, 9, -12 *]); > IsPrimitive(H3); false 3 > PrimitiveData(H3) eq H; true > aInvariants(EllipticCurve(H)); [ 0, 0, -64/27/u, -64/27/u, 0 ] where u is FunctionField(Q).1 > aInvariants(EllipticCurve(H2)); [ 0, 0, -s, -s, 0 ] where s^2=(-64/27)^2/u > aInvariants(EllipticCurve(H3)); [ 0, 0, -s, -s, 0 ] where s^3=(-64/27)^3/u
> _<u> := FunctionField(Rationals()); > H := HypergeometricData([* -2, 3, 4, -5 *]); // degree 4 > C := CanonicalScheme(H); > _<[X]> := Ambient(C); C; Scheme over Univariate rational function field over Q defined by X[1] + X[2] - 1, X[3] + X[4] - 1, X[1]^2*X[2]^5 - 3125/1728/u*X[3]^3*X[4]^4 > Dimension(C), Genus(Curve(C)); // genus 2 curve 1 2 > assert IsHyperelliptic(Curve(C)); > CC := CanonicalCurve(H); > _<x,y> := Ambient(CC); CC; Curve over Univariate rational function field over Q defined by x^7 - 2*x^6 + x^5 + 3125/1728/u*y^7 - 3125/576/u*y^6 + 3125/576/u*y^5 - 3125/1728/u*y^4 > b, C2 := IsHyperelliptic(CC); assert b; > HyperellipticCurve(H); // in the degree 4 catalogue Hyperelliptic Curve defined over Univariate function field over Q by y^2 = 4*x^5 - 3125/432/u*x^3 + 9765625/2985984/u^2 > assert IsIsomorphic(HyperellipticCurve(H),C2); > // and an example where the curve is reducible > H := HypergeometricData([* 6,6,-8,-4 *]); // weight 1 > C := CanonicalCurve(H); > A := AlgorithmicFunctionField(FunctionField(C)); > E<s> := ExactConstantField(A); > CE := BaseChange(C,E); > I := IrreducibleComponents(CE); assert #I eq 2; > _<x,y> := Ambient(I[1]); I[1]; Scheme over E defined by [ where s^2 = 1048576/531441/u ] x^6 - 2*x^5 + x^4 - s*y^6 + 3*s*y^5 - 3*s*y^4 + s*y^3 > b, C2 := IsHyperelliptic(Curve(I[1])); assert b;
> H := HypergeometricData([1/2,1/2,1/2,1/2],[0,0,0,0]); > L := LSeries(H,-1 : BadPrimes:=[<2,9,1>]); // guessed > CheckFunctionalEquation(L); -5.91645678915758854058796423962E-31 > LGetCoefficients(L,100); [* 1, 0, 0, 0, -4, 0, 0, 0, -6, 0, 0, 0, -84, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, -140, 0, 0, 0, 24, 0, 0, 0, -238, 0, 0, 0, 924, 0, 0, 0, 0, 0, 0, 0, -820, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, -396, 0, 0, 0, 0, 0, 0, 0, -693, 0, 0, 0, -144, 0, 0, 0, -300, 0, 0, 0, 0, 0, 0, 0, -252, 0, 0, 0 *] > // compare to the Tensor product way of getting this example > E := EllipticCurve("32a"); > NF := Newforms(ModularForms(DirichletGroup(32).1,3)); // wt 3 w/char > L1 := LSeries(E); L2 := LSeries(ComplexEmbeddings(NF[1][1])[1][1]); > TP := TensorProduct(L1, L2, [ <2, 9> ]); // conductor 2^9 (guessed) > [Round(Real(x)) : x in LGetCoefficients(TP,100)]; [ 1, 0, 0, 0, -4, 0, 0, 0, -6, 0, 0, 0, -84, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, -140, 0, 0, 0, 24, 0, 0, 0, -238, 0, 0, 0, 924, 0, 0, 0, 0, 0, 0, 0, -820, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, -396, 0, 0, 0, 0, 0, 0, 0, -693, 0, 0, 0, -144, 0, 0, 0, -300, 0, 0, 0, 0, 0, 0, 0, -252, 0, 0, 0 ]
> H := HypergeometricData([1/2,1/2,1/2,1/2],[0,0,0,0]); > Lf := LSeries(Newforms(ModularForms(8,4))[1][1]); > T := PolynomialRing(Integers()).1; // dummy variable > f3 := EulerFactor(Lf,3 : Integral)*(1-3*T); // make it a poly > f5 := EulerFactor(Lf,5 : Integral)*(1-5*T); // via Integral > f17 := EulerFactor(Lf,17 : Integral)*(1-17*T); > f2 := 1+T+6*T^2+8*T^3+64*T^4; // determined by Tornaria > BP := [<2,0,f2>,<3,1,f3>,<5,1,f5>,<17,1,f17>]; > L := LSeries(H,256 : BadPrimes:=BP); > Conductor(L); 255 > assert Abs(CheckFunctionalEquation(L)) lt 10^(-28);
One need not specify all the bad prime information as in the above example. Here is a variation on it, with t=1/28 (note that this actually gives the same L-series, as the data is a self-twist, with the character induced by twisting being trivial for this choice of t). Note that only the information at 2 is given to LSeries.
> H := HypergeometricData([1/2,1/2,1/2,1/2],[0,0,0,0]); > MValue(H); 256 > t := 1/2^8; // makes v_2(Mt)=0 > f2 := EulerFactor(H,t,2 : Fake); > f2; 64*T^4 + 8*T^3 + 6*T^2 + T + 1 > L := LSeries(H,t : BadPrimes:=[<2,0,f2>]); > Conductor(L); 255 > assert Abs(CheckFunctionalEquation(L)) lt 10^(-28);
Grössencharacter example over ( Q)(ζ5) given in Example H34E24. The action on inertia at p=11 involves ζ5 when 11|t, and here it is raised to the 5th power, thus trivialising it. As with previous example, the deformation theory also involves a weight 4 modular form, here of level 25.
> f := CyclotomicPolynomial(5); g := CyclotomicPolynomial(1)^4; > H := HypergeometricData(f,g); H, Weight(H); // weight 3 Hypergeometric data given by [1/5,2/5,3/5,4/5] and [0,0,0,0] 3 > t := 11^5; // 11 is now good, as is raised to 5th power > T := PolynomialRing(Rationals()).1; > f2 := (1-T+8*T^2)*(1+2*T); // could have Magma compute these > f3221 := (1-76362*T+3221^3*T^2)*(1-3221*T); // wt 4 lev 25 > // degree 4 factor at 11 comes from Grossencharacter > // in fact, this is the t=0 deformation: sum_i x_i^5 = 0 > K<z5> := CyclotomicField(5); > p5 := Factorization(5*Integers(K))[1][1]; // ramified > G := HeckeCharacterGroup(p5^2); > psi := Grossencharacter(G.0,[[3,0],[1,2]]); > f11 := EulerFactor(LSeries(psi),11 : Integral); f11; 1771561*x^4 - 118459*x^3 + 3861*x^2 - 89*x + 1 > BP := [<2,1,f2>,<5,4,1>,<11,0,f11>,<3221,1,f3221>]; > L := LSeries(H,t : BadPrimes:=BP); > Conductor(L); // 2*5^4*3221, 5^4 is somewhat guessed 4026250 > LSetPrecision(L,5); LCfRequired(L); 12775 > CheckFunctionalEquation(L); // takes about 40s -3.8147E-6
Again one need not specify all the bad prime information, as Magma can automatically compute it at multiplicative and tame primes (however, the local conductor at 5 must be specified).
> EulerFactor(H,t,11); // tame 1771561*T^4 - 118459*T^3 + 3861*T^2 - 89*T + 1 > EulerFactor(H,t,2); // multiplicative 16*T^3 + 6*T^2 + T + 1 > EulerFactor(H,t,3221); // multiplicative -107637325775281*T^3 + 33663324863*T^2 - 79583*T + 1
One can also choose t so as to trivialise the wild prime 5.
> MValue(H); // 5^5; 3125 > t := 11^5/5^5; > f5 := EulerFactor(H,t,5 : Fake); // v_5(Mt)=0 > f5; 15625*T^4 - 125*T^3 - 45*T^2 - T + 1 > L := LSeries(H,t : BadPrimes:=[<5,0,f5>]); > Conductor(L); // 2*3*26321, Magma computes Euler factors 157926 > LSetPrecision(L,9); // about 4000 terms > CheckFunctionalEquation(L); -2.32830644E-10 > t := -11^5/5^5; // another choice with v_5(Mt)=0 > f5 := EulerFactor(H,t,5 : Fake); // v_5(Mt)=0 > f5; // four possible Euler factors, one for each Mt mod 5 15625*T^4 + 1750*T^3 + 230*T^2 + 14*T + 1 > L := LSeries(H,t : BadPrimes:=[<5,0,f5>]); > Conductor(L); // 2*31*331, Magma computes Euler factors 20552 > LSetPrecision(L,9); // about 1300 terms > CheckFunctionalEquation(L); 4.65661287E-10
> T := PolynomialRing(Rationals()).1; // dummy variable > H := HypergeometricData([3,4,6,12],[1,1,5,5]); // degree 10 > b, HC := IsHyperelliptic(CanonicalCurve(H)); // genus 5 > assert b; Genus(HC); 5 > EulerFactor(Specialization(HC,13^12),13); // 13 becomes good 371293*T^10 - 285610*T^9 + 125229*T^8 - 31096*T^7 + 4810*T^6 - 540*T^5 + 370*T^4 - 184*T^3 + 57*T^2 - 10*T + 1 > EulerFactor(H,13^12,13); // use hypergeometric methods 371293*T^10 - 285610*T^9 + 125229*T^8 - 31096*T^7 + 4810*T^6 - 540*T^5 + 370*T^4 - 184*T^3 + 57*T^2 - 10*T + 1 > assert &and[EulerFactor(Specialization(HC,p^12),p) > eq EulerFactor(H,p^12,p) : p in [11,13,17,19]]; > assert &and[EulerFactor(Specialization(HC,t0*13^12),13) > eq EulerFactor(H,t0*13^12,13) : t0 in [1..12]];
One can take a smaller power than the 12th, but then the curve will not become completely good at the prime. However, the hypergeometric calculations will still be possible.
> EulerFactor(H,17^4,17); 17*T^2 + 2*T + 1 > EulerFactor(H,19^9,19); // takes the Phi_3 term 19*T^2 + 7*T + 1 > EulerFactor(H,19^6,19); 361*T^4 + 114*T^3 + 31*T^2 + 6*T + 1 > EulerFactor(H,1/11^5,11); // degree is phi(1)+phi(5) -T^5 + 1 > EulerFactor(H,4/11^5,11); // degree is phi(1)+phi(5) -T^5 + 5*T^4 - 10*T^3 + 10*T^2 - 5*T + 1
A similar exploration is possible with a weight 0 example. Here the Artin representation machinery is better able to cope with partially good primes.
> H := HypergeometricData([2,3,6],[1,5]); // degree 5 > Q := Rationals(); > EulerFactor(ArtinRepresentation(H,7^6),7 : R:=Q); -T^5 - T^4 - T^3 + T^2 + T + 1 > EulerFactor(ArtinRepresentation(H,7^3),7 : R:=Q); T^2 + T + 1 > EulerFactor(ArtinRepresentation(H,7^2),7 : R:=Q); -T + 1 > EulerFactor(ArtinRepresentation(H,2/11^5),11 : R:=Q); -T^5 + 5*T^4 - 10*T^3 + 10*T^2 - 5*T + 1 > EulerFactor(H,7^6,7); // compute it directly from H -T^5 - T^4 - T^3 + T^2 + T + 1 > EulerFactor(H,7^3,7); T^2 + T + 1 > EulerFactor(H,7^2,7); -T + 1 > EulerFactor(H,2/11^5,11); -T^5 + 5*T^4 - 10*T^3 + 10*T^2 - 5*T + 1
> for d in [1..8] do > [#PossibleHypergeometricData(d : Weight:=w) : w in [0..d-1]]; > end for; [ 1 ] [ 3, 10 ] [ 3, 0, 10 ] [ 11, 74, 30, 47 ] [ 7, 0, 93, 0, 47 ] [ 23, 287, 234, 487, 84, 142 ] [ 21, 0, 426, 0, 414, 0, 142 ] [ 51, 1001, 1234, 3247, 894, 1450, 204, 363 ] > D4w1 := PossibleHypergeometricData(4 : Weight:=1); > D := [HypergeometricData(x) : x in D4w1]; > #[x : x in D | Twist(x) eq x]; // 12 are self-twists 12 > #PossibleHypergeometricData(4 : Weight:=1,TwistMinimal); 43 > #PossibleHypergeometricData(4 : Weight:=1,Primitive); 64 > // speed test for SaveLimit > H := HypergeometricData([1/2,1/2,1/2,1/2],[0,0,0,0]); > HypergeometricMotiveSaveLimit(2000); > time _:=LGetCoefficients(LSeries(H,-1),2000); Time: 1.040 > time _:=LGetCoefficients(LSeries(H,-1),2000); Time: 0.540 > HypergeometricMotiveClearTable(); > time _:=LGetCoefficients(LSeries(H,-1),2000); Time: 1.030[Next][Prev] [Right] [Left] [Up] [Index] [Root]