[Next][Prev] [Right] [Left] [Up] [Index] [Root]

Functionality

Subsections

Creation Functions

HypergeometricData(A, B) : SeqEnum, SeqEnum -> HypGeomData
HypergeometricData(F, G) : RngUPolElt, RngUPolElt -> HypGeomData
These are two of the principal ways of specifying hypergeometric data. The first takes two sequences A and B (of the same length) of rationals, which must be disjoint upon reduction modulo 1, and each of which must be Galois-invariant when taking the corresponding roots of unity (for instance, if (1/6) is specified, (5/6) is also given). The second takes two products F and G of cyclotomic polynomials, these products being coprime and of the same degree. NOTE: the routine will always switch A and B (or f and g) so that the latter has the smallest rational in [0, 1) in it.
HypergeometricData(G) : SeqEnum[RngIntElt] -> HypGeomData
This is a third way to specify hypergeometric data, by giving a sequence of integers G such that ∑v vG[v]=0. Here we have Pα(T)/Pβ(T)=∏v (Tv - 1)G[v], and the polynomials can be determined via Möbius inversion. Again αand βwill be reversed if necessary (which corresponds to negating all the entries of G).
HypergeometricData(G) : List -> HypGeomData
This is a fourth way to specify hypergeometric data, by giving a list G of nonzero integers (with repetition possible) corresponding to the sequence G of the previous intrinsic, with negative integers for those where G[v] is negative. The sum of the members of the list must be 0.
HypergeometricData(F, G) : SeqEnum[RngIntElt], SeqEnum[RngIntElt] -> HypGeomData
This is a fifth way to specify hypergeometric data, by giving two arrays F and G of integers, corresponding to the cyclotomic polynomials to be used.
HypergeometricData(E) : SeqEnum[SeqEnum] -> HypGeomData
This is a utility intrinsic that take a sequence E of two sequences and then passes these two sequences to the intrinsics above.
Twist(H) : HypGeomData -> HypGeomData
This intrinsic takes hypergeometric data H, and adds 1/2 to every element in αand β, returning new hypergeometric data. Note that the new αand βmay be switched due to this twisting.
PrimitiveData(H) : HypGeomData -> HypGeomData
Given hypergeometric data H, return its primitive associated data. This is most easily described in terms of GammaList, where one divides all the elements by the gcd.
PossibleHypergeometricData(d) : RngIntElt -> SeqEnum
    Weight: RngIntElt                   Default: false
    TwistMinimal: BoolElt               Default: false
    CyclotomicData: BoolElt             Default: false
    Primitive: RngIntElt                Default: 0
Given a degree d, generate all possible examples of hypergeometric data of that degree, returned as a sequence of pairs of sequences, each sequence therein having d rationals. If Weight is specified, restrict to data of this weight. If TwistMinimal is specified, only give twist-minimal data. If CyclotomicData is specified, return the sequences of cyclotomic data rather than rationals. If Primitive is {true}, only return data that are primitive; if Primitive is a positive integer, return the data that have this imprimitivity.

Access Functions

Weight(H) : HypGeomData -> RngIntElt
The weight of the given hypergeometric data H.
Degree(H) : HypGeomData -> RngIntElt
The degree of the given hypergeometric data H.
DefiningPolynomials(H) : HypGeomData -> RngUPolElt, RngUPolElt
The (products of cyclotomic) polynomials corresponding to αand βcorresponding to hypergeometric data H.
CyclotomicData(H) : HypGeomData -> SeqEnum, SeqEnum
This returns two arrays of integers, specifying which cyclotomic polynomials occur for αand βcorresponding to hypergeometric data H. Thus, for example, Φ3Φ42Φ6 would be represented by [3,4,4,6]).
AlphaBetaData(H) : HypGeomData -> SeqEnum, SeqEnum
This returns two arrays of rationals, giving the αand βof the hypergeometric data H.
MValue(H) : HypGeomData -> FldRatElt
This returns the scaling parameter M of the given hypergeometric data H. This is defined by taking Mn=∏d|n ddμ(n/d) for the nth cyclotomic polynomial, and combining these into the products for αand β, and then dividing these. Another definition is M=∏v vv.
GammaArray(H) : HypGeomData -> SeqEnum
This returns an array of integers corresponding to γv, where these are defined by Pα(T)/Pβ(T)=∏v (Tv - 1)γv. We also have ∑vv=0.
GammaList(H) : HypGeomData -> List
This returns a list of integers corresponding to γv, where ( sign)(γv).v appears in the list |γv| times.
H1 eq H2 : HypGeomData, HypGeomDat -> BoolElt
H1 ne H2 : HypGeomData, HypGeomDat -> BoolElt
Two instances of hypergeometric data H1 and H2 are equal if they have the same αand β.
IsPrimitive(H) : HypGeomData -> BoolElt, RngIntElt
Returns true if the given hypergeometric data H is primitive, and the index of imprimitivity. The latter is the gcd of the elements in the GammaList.

Functionality with L-series and Euler Factors

EulerFactor(H, t, p) : HypGeomData, FldRatElt, RngIntElt -> RngUPolElt
    Precision: RngIntElt                Default: 0
    Check: BoolElt                      Default: false
    Fake: BoolElt                       Default: false
This intrinsic is the heart of the hypergeometric motive package. It takes hypergeometric data H, a rational t != 0, 1, and a prime p, and computes the pth Euler factor of the hypergeometric motive at t. This uses p-adic Γ-functions, as indicated by Cohen. The Precision vararg specifies how many terms in the Euler factor should be computed -- if this is 0, then the whole polynomial is computed. The Check vararg allows one to turn off the use of the (local) functional equation that is used to expedite the computation process.

The Fake vararg allows one to compute the hypergeometric trace(s) for t with vp(Mt)=0 (including wild primes). Whether or not this is the actual Euler factor depends on how inertia acts. The use of this vararg inhibits the use of the local functional equation, but one can curtail via Precision, and apply it manually (if known).

In general, the given prime must not be wild, that is, it must not divide the denominator of any of the αor β.

At other bad primes, the Euler factor will depend upon the relevant monodromy. The primes for which vp(t - 1)>0 can perhaps be called multiplicative, in that p should divide the conductor only once (this is related to the pseudoreflection). Since vp(Mt)=0 here, the Euler factor (of degree d - 1) can be recovered by the p-adic Γ-function methods (even when p=2). Also it is often possible to relate the (presumed) hypergeometric motive to objects from a deformation. When vp(t - 1) is even and the weight is also even, the prime p is actually good and has a degree d Euler factor, even though the hypergeometric trace only gives one of degree (d - 1). In such a case, the EulerFactor intrinsic with the Fake vararg will return the part from the hypergeometric trace.

The p with vp(1/t)>0 correspond to monodromy at ∞. The associated inertia is given by the roots of unity with the β, with maximal Jordan blocks when eigenvalues are repeated. The same is true for p with vp(t)>0, where the monodromy is around 0 (so that the αare used). In Example H126E7), an instance is given where the inertia is trivialised due to having ζvp(t)=1.

We can compute the Euler factors at such tame primes as follows. Suppose that t=t0pvm with v>0, where m occurs as a denominator of the α(similarly with v<0 and β). Then one takes the smallest q=pf that is 1 mod m, and from the hypergeometric trace formula extracts the terms ωp(Mt0)j(q - 1)/mQqbiggl((j(q - 1)/m)biggr) for 0≤j<m with gcd(j, m)=1. Denoting these by η, we then have that ∏η (1 - ηTf) is an fth power (due to repetitions in the above extraction), and the fth root of this is the desired Euler factor of degree φ(m).

When m does not divide vp(t), the Euler factor from it is trivial. One then multiplies together all such Euler factors corresponding to the m from the αand β. Each m is only considered once, even if it appears multiple times in the CyclotomicData, as the Jordan blocks of the eigenvalues are maximal. Note that the local functional equation is not used for tame primes, though the computation should not be too onerous unless q=pf is large.

LSeries(H, t) : HypGeomData, FldRatElt -> LSer
    BadPrimes: SeqEnum                  Default: []
    GAMMA: SeqEnum                      Default: []
    Identify: BoolElt                   Default: true
Given hypergeometric data H and a rational t != 0, 1, try to construct the L-series of the associated motive. This will usually need the Euler factors at wild primes to be specified. Everything else, including tame/multiplicative Euler factors and γ-factors, can be computed automatically by Magma (these can also be given via BadPrimes and GAMMA). The Identify vararg indicates whether an attempt should be made to identify motives of weight 0 as Artin representations, and similarly with (hyper)elliptic curves for weight 1.
Identification of Hypergeometric Data as Other Objects
ArtinRepresentation(H, t) : HypGeomData, FldRatElt -> ArtRep
    Check: BoolElt                      Default: true
Given hypergeometric data H of weight 0 and a rational t != 0, 1, try to determine the associated Artin representation. This is implemented for all such H of degree 3 or less, and for some of degree 4 and higher. The condition needed is that GammaList(H) have cardinality 3. When Check is true, good primes up to 100 have their Euler factors checked for correctness.
EllipticCurve(H) : HypGeomData -> CrvEll
EllipticCurve(H, t) : HypGeomData, FldRatElt -> CrvEll
Given hypergeometric data H of degree 2 and weight 1 (there are 10 such families) and a rational t != 0, 1, return the associated elliptic curve, as catalogued by Cohen. When t is not given, return the result over a function field.

For each of the 10 families, the same function can be called for the corresponding imprimitive data of index r, and the result will generically be an elliptic curve over an extension of degree r. However, when the xr - 1/Mt splits, the intrinsic will return an array of elliptic curves corresponding to this splitting.

HyperellipticCurve(H) : HypGeomData -> CrvHyp
HyperellipticCurve(H, t) : HypGeomData, FldRatElt -> CrvHyp
Given hypergeometric data H of degree 4 and weight 1 and a rational t != 0, 1, return the associated hyperelliptic curve, if this data is known to correspond to such. When t is not given, return the result over a function field. There are 18 cases where one gets a genus 2 curve from the CanonicalCurve (making 36 cases when twisting is considered), and a few others where CanonicalCurve gives a higher genus curve and there is a genus 2 quotient. In general, one can try to call IsHyperelliptic on the CanonicalCurve.
Identify(H, t) : HypGeomData, FldRatElt -> Any
Given hypergeometric data H and a rational t != 0, 1, return any known associated object (else returns false). The return value can (currently) be: an Artin representation (weight 0); an elliptic curve over Q (weight 1 in degree 2); an elliptic curve over a number field (weight 1 in degree 2r with imprimitivity r), or possibly multiple such curves; or a hyperelliptic curve over Q (weight 1 in degree 4).

Associated Schemes and Curves

CanonicalScheme(H) : HypGeomData -> Sch
CanonicalScheme(H, t) : HypGeomData, FldRatElt -> Sch
Given hypergeometric data H, this constructs a canonical associated scheme. When the parameter t is given, the specialization is returned, otherwise the result returned will be a scheme over a function field.

The scheme is determined from the GammaList, with a variable (Xi or Yj) for every element in the list. The scheme is the intersection of ∑i Xi=∑j Yj=1 with ∏i Xigi^ + j Yjgj^ - =(1/Mt), where the gi^ + are the positive elements in the GammaList and the gj^ - are the negative ones (one usually moves the latter to the other side of the equation, to make the exponents positive).

CanonicalCurve(H) : HypGeomData -> Crv
CanonicalCurve(H, t) : HypGeomData, FldRatElt -> Crv
Given suitable hypergeometric data H, this tries to construct an associated plane curve. When the parameter t is given, the specialization at t is returned, otherwise the return value will be a plane curve over a function field. The curve is constructed using the GammaList (which indicates the Jacobi sums that need to be taken). When this list has four elements, it is always possible to get a curve. When the list has six elements, it is sometimes possible, depending on whether the largest element (in absolute value) is the negation of the sum of two of the other elements. If it is not possible to construct such a curve, the intrinsic returns false.

Utility Functions

HypergeometricMotiveSaveLimit(n) : RngIntElt -> Void
HypergeometricMotiveClearTable() : Void -> Void
These are utility intrinsics that will cache the pre-computation of p-adic Γ-functions. The first indicates to save all computed values when the prime power is less than n, and the second clears the table. The qth table entry will have (q - 1) elements in it.looseness=-1
 [Next][Prev] [Right] [Left] [Up] [Index] [Root]

Version: V2.19 of Mon Dec 17 14:40:36 EST 2012