Examples

Contents

Example HypGeomMot_hypergeom-mot-first-example (H135E1)

Our first example constructs some hypergeometric motives, and recognises them as being related to elliptic curves or Artin representations.
> 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 [ 2, 6 ] and [ 1, 1, 1 ]
> 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] : Print:="alpha_beta");
> 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] : Print:="alpha_beta");
> 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

Example HypGeomMot_hg-twist-example (H135E2)

This is a simple example of twisting hypergeometric data, showing that a related Artin motive is obtained for the given weight 0 data.
> f := CyclotomicPolynomial(6);
> g := CyclotomicPolynomial(1)*CyclotomicPolynomial(2);
> H := HypergeometricData(f,g); H; assert(Weight(H)) eq 0;
Hypergeometric data given by [ 6 ] and [ 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 [ 3 ] and [ 1, 2 ]
> A := ArtinRepresentation(T,-4/5);
> 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),3);
> 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),t);
> Q := QuadraticTwist(T,5*t); // get right parameter
> assert IsIsomorphic(Q,S);

Example HypGeomMot_imprimitivity (H135E3)

This example exercises the primitivity functionality.
> 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

Example HypGeomMot_canonical-schemes-and-curves (H135E4)

Here is an example with the canonical schemes and curves associated to various hypergeometric data.
> _<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;

Example HypGeomMot_associated-schemes (H135E5)

While canonical schemes are defined (in Magma) over affine spaces, they also have a natural placement in a product (weighted) projective space. Moreover, this can typically reduce the resulting dimension, by noting various subsets of the GammaList that sum to zero. This was first implemented in Magma by Nasrecki.
> G := [* -1,-1,-1,-1,-1, 2,2,2,2, 3,3,3, -6,-6 *]; // size 14
> H := HypergeometricData(G); // [2,2,3] [6,6], degree 4
> AssociatedSchemes(H); // two schemes in this case
[* Scheme over Univariate rational function field over Q by
     y1+y6+y7+y11+y13, y10+y12+y14, y2+y3+y8, y4+y5+y9,
     -y1*y13^6*y14^6*y2*y3*y4*y5
        - $.1*y6^2*y7^2*y11^3*y10^3*y12^3*y8^2*y9^2,
   Scheme over Univariate rational function field over Q by
     y6+y7+y8+y13, y11+y12+y14, y1+y2+y3+y10, y4+y5+y9,
     -y13^6*y14^6*y1*y2*y3*y4*y5
        - $.1*y6^2*y7^2*y8^2*y11^3*y12^3*y10^3*y9^2  *]
[ [ [ -6,-1,2,2,3 ],[ -6,3,3 ],[ -1,-1,2 ],[ -1,-1,2 ] ],
  [ [ -6,2,2,2 ],[ -6,3,3 ],[ -1,-1,-1,3 ],[ -1,-1,2 ] ] ]
5 // the dimension

The number of AssociatedSchemes is typically not too large, and the partition into zerosum-subsets typically is somewhat nontrivial.

> PHD := [HypergeometricData(h) : h in PossibleHypergeometricData(6)];
> SCH := [<a,b,c> where a,b,c:=AssociatedSchemes(h) : h in PHD];
> Multiset([#s[1] : s in SCH]); // number of schemes
{* 1^^661, 2^^279, 3^^159, 4^^75, 5^^32, 6^^25,
   7^^8, 8^^7, 9^^6, 10, 11, 13^^2, 15 *}
> Multiset([#s[2][1] : s in SCH]); // size of splitting
{* 1^^204, 2^^487, 3^^320, 4^^155, 5^^60, 6^^27, 7^^4 *}
> Multiset([s[3] : s in SCH]); // resulting dimension
{* 0^^6, 1^^112, 2^^161, 3^^507, 4^^154, 5^^271, 6^^19, 7^^25, 8, 9 *}

Example HypGeomMot_hg-siegel-modular-form (H135E6)

Here is an example in degree 4 and weight 3. It turns out that the motive from t= - 1 has complex multiplication, and the L-series appears to be the same as that of a Siegel modular form given by [vGvS93, S8.7]. (This was found by Cohen and Rodriguez-Villegas). This L-series also appears in Example H136E27.
> H := HypergeometricData([1/2,1/2,1/2,1/2],[0,0,0,0]);
> L := LSeries(H,-1 : BadPrimes:=[<2,9,1>]); // guessed
> CFENew(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 ]

Example HypGeomMot_hypergeometric-tracek (H135E7)

We go through an example working with hypergeometric traces when the underlying datum is not Galois. First we check that the relevant intrinsic HypergeometricTraceK gives the same answers as HypergeometricTrace.
> PHD := PossibleHypergeometricData(4);
> t := 2; p := 13;
> Z := Integers();
> for h in PHD do H:=HypergeometricData(h); A:=H`alpha; B:=H`beta;
>    assert HypergeometricTrace(H,t,p) eq Z!HypergeometricTraceK(A,B,t,p);
>    end for;

Next we consider the "Klein quartic" datum defined over (Q)(Sqrt( - 7)). For split primes, its trace will be a quadratic surd.

> A := [1/14,9/14,11/14];
> B := [1/4,3/4,1];
> p := 29; // a split prime in Q(sqrt(-7))
> e := HypergeometricTraceK(A,B,2,p : Precision:=10);
> PowerRelation(e,4);
x^2 - x + 2

In more generality, one can expect elements in cyclotomic fields.

> e := HypergeometricTraceK([1/8,7/8],[0,1/4],2,17 : Precision:=10);
> PowerRelation(e,4);
17*x^4 + 8*x^3 + 24*x^2 + 32*x + 16
> assert IsIsomorphic(NumberField($1),CyclotomicField(8));
> //
> e := HypergeometricTraceK([1/8,7/8],[0,1/4],2,97 : Precision:=10);
> PowerRelation(e,4);
97*x^4 + 56*x^3 - 232*x^2 + 224*x + 784
> assert IsIsomorphic(NumberField($1),CyclotomicField(8));
> // and a non-split prime, with q = 1 mod 8
> e := HypergeometricTraceK([1/8,7/8],[0,1/4],2,7^2 : Precision:=20);
> PowerRelation(e,2); // generates Q(sqrt(2))
7*x^2 - 4*x - 4

The K-trace property can also be used to compute at t-values which are not rational. For instance, work of Guillera [Gui12], [AG12] implies that t=8/(15√5 - 33)3 should give a pole for (Φ23Φ3, Φ15), and we can verify numerically that the (normalized) traces have average 1 for small primes (and also that the second moment is approximately 2, indicating a splitting).

> H := HypergeometricData([2,2,2,3],[1,1,1,1,1]); // weight 4
> A := H`alpha; B := H`beta;
> Z := Integers();
> f := func<p|(1/((15*Sqrt(pAdicField(p,20)!5)-33)/2)^3)>;
> P := [p : p in PrimesUpTo(200) | p^2 mod 5 eq 1];
> R := [<p,Z!HypergeometricTraceK(A,B,Z!f(p),p)> : p in P];
> &+[r[2]/r[1]^2*1.0 : r in R]/#P;
1.13162808398732021466387060353
> &+[r[2]^2/r[1]^4*1.0 : r in R]/#P; // second moment
2.32631764414942310383344594579

Comparatively, most t-values have mean zero and second moment of 1, though again by [Gui12] we expect that t=(4/3)3 is exceptional.

> MomentData(LSeries(H,5),P,2); // t = 5
0.14376 [ 0.84480 ]
> MomentData(LSeries(H,11),P,2); // t = 11
0.17961 [ 0.68179 ]
> MomentData(LSeries(H,(4/3)^3),P,2); // t = (4/3)^3
0.81211 [ 1.2554 ] // P is not that robust
> MomentData(LSeries(H,(4/3)^3),PrimesUpTo(1000),2);
0.98494 [ 1.9196 ]

Finally, we demonstrate how to work with p-adic inputs for the t-parameter.

> A := [1/4]; B := [1/3];
> Qp := pAdicField(5,20);
> E := ext<Qp|Polynomial([-2,0,1])>; // x^2-2, unramified
> HypergeometricTraceK(A,B,4+E.1,5);
1190*E.1 + 1258 + O(5^5)
> HypergeometricTraceK(A,B,4-E.1,5);
-1190*E.1 + 1258 + O(5^5)

Example HypGeomMot_hg-bad-reduction (H135E8)

Here is an example showing how to handle bad primes in some cases. The Euler factors at {3, 5, 17} [where p|(t - 1)] were determined via a recipe from deformation theory by Rodriguez-Villegas, while at p=2, Roberts suggested a t-value that would trivialise the conductor (from a number field analogy), and Tornaría then computed the full degree 4 factor (at p=2) for t=28.
> 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(CFENew(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(CFENew(L)) lt 10^(-28);

Example HypGeomMot_hg-quintic-3fold (H135E9)

Here is an example with the quintic 3-fold. The deformation theory at p=11 here is related to the

Grössencharacter example over (Q)(ζ5) given in Example H42E10. 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 : Print:="alpha_beta");
> 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); // approx with old CheckFunctionalEquation
12775             //
> time CFENew(L); // actually needs much fewer now
1.5259E-5
Time: 4.290

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
> CFENew(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
20522
> LSetPrecision(L,9); // about 1300 terms
> CFENew(L);
4.65661287E-10

Example HypGeomMot_tame-primes (H135E10)

Here is an example with tame primes. This derives from comments of Rodriguez-Villegas. The idea is to take hypergeometric data that has weight 0 or 1, and compare it to Artin representations or hyperelliptic curves.
> 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

Example HypGeomMot_more-tame-primes (H135E11)

In general one should be able to relate the tame Euler factors to Grössencharacters. This is partially considered (in a different guise) in [Wei74] and [Wei76]. In particular, for primes p that are 3 mod 4, we can take the hypergeometric data given by the squares modulo p, and find that at a prime l that is 1 mod p with a suitably normalised t-value whose valuation vl(t) at l is p, the Euler factor is a power (and Tate twist) of that for the canonical Grössencharacter of (Q)(Sqrt( - p)).
> p := 11; assert p mod 4 eq 3 and p ne 3 and IsPrime(p);
> SQ := [-Integers()!x : x in GF(p) | IsSquare(x) and x ne 0];
> H := HypergeometricData([* x : x in [-&+SQ] cat SQ *]);
> GammaList(H);
[* -1, -3, -4, -5, -9, 22 *]
> Weight(H); assert Weight(H) eq (p-5)/2;
3
> K := QuadraticField(-p);
> I := Factorization(p*Integers(K))[1][1];
> G := HeckeCharacterGroup(I); // get Tate twist of canonical GR
> u := (Weight(H)+ClassNumber(K)) div 2;
> v := (Weight(H)-ClassNumber(K)) div 2; //u+v=wt, u-v=classno
> u,v;
2 1
> GR := Grossencharacter(G.0,[[u,v]]); // [6,3] for sqrt(-23)
> for l in [l : l in PrimesUpTo(1000) | l mod p eq 1] do
>   ef := EulerFactor(H,l^p/MValue(H),l);
>   F := Factorization(ef);
>   assert #F eq 1 and F[1][2] eq (p-1)/2;
>   assert F[1][1] eq EulerFactor(GR,l : Integral);
>   printf "%o %o n",l,F[1][1];
>   end for;
23 12167*x^2 + 207*x + 1
67 300763*x^2 - 871*x + 1
89 704969*x^2 + 801*x + 1
199 7880599*x^2 + 3980*x + 1

Example HypGeomMot_hgm-speed-test (H135E12)

Here is an example of the use of PossibleHypergeometricData, enumerating the number of possibilities in small degree. A speed test is also done for the save-limit code.
> 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]; // 12 are self-twists
> #[x : x in D | Twist(x) eq x or Twist(x) eq SwapAlphaBeta(x)];
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

Special Hypergeometric Motives

As indicated partially in the previous description, one can specialize the (singular) parameter t=1 in a family of a hypergeometric motives, and still get a arithmetic object. In doing this, the degree drops by 1, or 2 if the original datum has even degree and odd weight. However, the weight stays the same. All primes that are not involved with the cyclotomic data can be considered "multiplicative" in that p|(t - 1). Magma contains a "database" of bad Euler information for all HGMs up through degree 6. Some examples are given below.

Example HypGeomMot_first-special-HGM-example (H135E13)

Note that any degree 2 weight 1 hypergeometric datum will have a t=1 specialization with a degree 0 L-function, that is, the trivial L-function that is identically 1. One of the degree 2 weight 0 data gives the Riemann ζ-function, and the other two give Artin representations (which could be written as Dirichlet characters).

> H := HypergeometricData([6],[1,2]);
> L := LSeries(H,1); L;
L-series of Artin rep C2: (1,-1) of ext<Q|x^2-3>, conductor 12
> H := HypergeometricData([3],[1,2]); // twist of above
> L := LSeries(H,1); L;
L-series of Riemann zeta function
> H := HypergeometricData([4],[1,2]);
> L := LSeries(H,1); L;
L-series of Artin rep C2: (1,-1) of ext<Q|x^2-2>, conductor 8

Magma automatically identifies the examples where the resulting degree is 2 or less, and also some additional Artin representations. However, for (Φ5, Φ62) and its twist, the resulting newform has level 5400, and as the identification in this space might be expensive, it is not made.

> H := HypergeometricData([12],[1,2,3]); // degree 4
> L := LSeries(H,1); L; // drops to degree 3
L-series of Artin rep S4: (3,-1,1,0,-1) of ext<Q|x^4-4*x-6>, cond 6912
> // both the next two drop to degree 2 (odd wt)
> H := HypergeometricData([2,2,6],[10]);
> L := LSeries(H,1); L; CremonaReference(L`parent);
L-series of Elliptic Curve y^2 + y = x^3 - 75*x + 256 over Q
225e1
> H := HypergeometricData([2,2,3],[4,4]);
> L := LSeries(H,1); L; Conductor(L);
L-series of q - 2*q^5 + 12*q^7 - 60*q^11 + O(q^12)
288

In general, the returned object is just an L-series label, with the correct bad Euler data attached. There are also various examples (necessarily in even weight) where a translate of the Riemann ζ-function is a factor of L-series.

> H := HypergeometricData([3,8],[1,2,2,2,6]);
> Degree(H), Weight(H);
6 2
> L:=LSeries(H,1);
> Degree(L); // drops by 1
5
> L;
(L-function for param t=1 of HG data given by [3,8] and [1,2,2,2,6] /
 Translation by 1 of L-series of Riemann zeta function) *
(Translation by 1 of L-series of Riemann zeta function)
> BadPrimeData(L); // conductor 2^7 * 3^2
[
    <2, 7, 8*x^3 - 4*x^2 - 2*x + 1>,
    <3, 2, -27*x^3 - 3*x^2 + x + 1>
]
> CFENew(L); // check the bad Euler info
0.000000000000000000000000000000

In general, the local conductors bad Euler factors (possibly trivial) were found by a process of trial and error, aided by ideas from David Roberts and Fernando Rodriguez-Villegas.

> H := HypergeometricData([5,6],[1,1,2,2,3]); // deg 6 wt 1
> L := LSeries(H,1); // degree 4
> BadPrimeData(L);
[
    <2, 1, -2*x^3 + x + 1>, // (1-x)*(1+2x+2x^2)
    <3, 1, -3*x^3 + 2*x^2 + 1>, // (1-x)*(1+x+3x^2)
    <5, 4, 1>
]
> LSetPrecision(L,15);
> CFENew(L);
0.000000000000000
> //
> H := HypergeometricData([14],[1,1,1,2,3]); // deg 6 wt 2
> L := LSeries(H,1); // degree 5
> BadPrimeData(L); // cond too large to check here
[
    <2, 10, 1>,
    <3, 3, 3*x^2 - 4*x + 1>, // (1-x)(1-3x), mixed weight
    <7, 5, 1>
]

There are some exotic examples where the specialized L-function factors into degree 2 L-functions of modular forms (or elliptic curves), or at least has an identifiable factor of smaller degree.

> H := HypergeometricData([2,2,4,6],[3,10]);
> L := LSeries(H,1); // reduce to deg 4 and wt 1
> E1 := EllipticCurve("400c");
> E2 := EllipticCurve("1200l");
> X := LSeries(E1)*LSeries(E2);
> &and[EulerFactor(L,p) eq EulerFactor(X,p) : p in PrimesUpTo(100)];
true
> //
> H := HypergeometricData([2,2,2,2,2,2],[1,1,1,1,1,1]);
> L := LSeries(H,1); // reduce to deg 4 and wt 5
> f4 := Newforms(CuspForms(8,4))[1][1]; // modular forms
> f6 := Newforms(CuspForms(8,6))[1][1]; // of level 8
> Y := Translate(LSeries(f4),1)*LSeries(f6);
> &and[EulerFactor(L,p) eq EulerFactor(Y,p) : p in PrimesUpTo(100)];
true
> //
> H := HypergeometricData([3,3,3,3],[6,6,6,6]);
> L := LSeries(H,1); // deg 6 weight 7
> P := PrimesInInterval(5,100);
> &+[1.0*Coefficient(EulerFactor(L,p : Degree:=1),1)^2/p^7 : p in P]/#P;
1.99744382297573720150050401754 // imprimitive, 2 factors
> f6 := Newforms(CuspForms(36,6))[2][1]; // level 36 modwt 6
> LQ := Translate(LSeries(f6),1); // make it weight 7
> P30 := PrimesInInterval(5,30);
> &and[IsDivisibleBy(EulerFactor(L,p),EulerFactor(LQ,p)) : p in P30];
true
V2.28, 13 July 2023