For modular curves X0(N), there is a finite group of automorphisms B0(N) which come from matrices acting on the complex upper half-plane. This group is isomorphic to (Nm)_((SL)2((R)))(Γ0(N))/Γ0(N) where (Nm)_((SL)2((R)))(Γ0(N)) is the normaliser of Γ0(N) in (SL)2((R)). It is generated by Atkin-Lehner involutions and, if 4 or 9 divides N, a transformation of the form z |-> z + (1/r) for some 1 < r | 24 (see [AL70] and also [Bar08] for the correct structure in all cases). We denote the latter transformations by Sr and write wd for the d-th Atkin-Lehner involution (d|N, (d, N/d)=1). These transformations have a natural modular interpretation.
A famous result of Kenku and Momose [KM88], completed by Elkies for N=63 [Elk90], says that B0(N) gives the full group of algebraic automorphisms of X0(N) (in characteristic zero) when the genus of X0(N) is at least 2, except for N=37 and 63. In fact, there is a slight error in their analysis, and N=108 is also an exception [Har]. In these three cases B0(N) is of index two in the full automorphism group A0(N) of X0(N).
We have precomputed and stored the wd and Sr curve isomorphisms in the database. Let g(N) denote the genus of X0(N). There are intrinsics to return these individual isomorphisms and a special intrinsic to compute and return the automorphism group B0(N), when g ≤1, or A0(N), when g ≥2, over various fields as a GrpAutCrv. We sometimes refer to the elements of these groups as modular automorphisms to emphasise that they are not all of the curve automorphisms in the g(N) = 0 or 1 cases (when the automorphism group is infinite).
Except in the N=108 case, all automorphisms are defined over the cyclotomic field (Q)(μr) where r is the largest divisor of 24 such that r2|N (for this field of definition, r can be replaced by r/2 if r is twice an odd number). Specifically, the wd are all defined over (Q) and Sr has (Q)(μr) as its field of definition.
The automorphism group intrinsics include in various ways an integer n that specifies a cyclotomic level and they return the subgroup of A0(N), or B0(N) for g ≤1, containing all elements defined over (Q)(μn). In all cases, the group of automorphism returned is a semi-direct product of groups, one for each prime p dividing N. For p > 3 this group is just C2, generated by an Atkin-Lehner involution. For p=2 or 3, if p2|N and n is appropriately divisible, the p-component is more complex. We build up the automorphism group in the various cases from the known structure. This is much faster than using the generic algorithm to compute it. The only real time goes into building up the total set of function field automorphisms (starting from the stored data for the generators) that is cached in the GrpAutCrv object.
The curve CN should be a base change of the small modular database curve of level N to a field of characteristic 0. d is a divisor of N with (d, N/d)=1. Returns the Atkin-Lehner involution wd as a scheme automorphism of CN. If the full automorphism group G of CN has already been computed and cached with CN (see the intrinsics below and the section in the Algebraic Curves chapter on automorphism groups) then the intrinsic will return wd as a GrpAutCrvElt in G. Note that the intrinsic should terminate immediately in the first case, when it is just retrieving the equations from the database file, but has to do a little bit of work in the second case.
The curve CN should be a base change of the small modular database curve of level N to a field K of characteristic 0. r is a divisor of 24 such that r2|N. u is a primitive r-th root-of-unity in K. Returns Sr as a scheme automorphism of CN that corresponds to z |-> z + (1/r) if K is embedded into (C) so that u maps to e2π i/r. If the full automorphism group G of CN has already been computed and cached with CN (see the intrinsics below and the section in the Algebraic Curves chapter on automorphism groups) then the intrinsic will return Sr as a GrpAutCrvElt in G. Note that the intrinsic will usually terminate more quickly in the first case, when it is just retrieving equations from the database file and maybe performing a composition, whereas in the second case it is doing an extra little bit of work.
The curve CN should be a base change of the small modular database curve of level N to a field K of characteristic 0. N is 37, 63 or 108. u is a primitive r-th root-of-unity in K where r=1 (so u=1) when N=37 and r=3 in the other cases. Returns an automorphism of CN in A0(N) that is not in B0(N) (i.e. not given by the action of a matrix on the complex upper half-plane: see the introduction). This "extra" automorphism generates A0(N) over B0(N) and is an involution when N=37 (the hyperelliptic involution) or N=108 and is of order 4 when N=63 with square equal to the Atkin-Lehner involution w9. If the full automorphism group G of CN has already been computed and cached with CN (see the intrinsics below and the section in the Algebraic Curves chapter on automorphism groups) then the intrinsic will return the extra automorphism as a GrpAutCrvElt in G. Note that the intrinsic should terminate immediately in the first case, when it is just retrieving the equations from the database file, but has to do a little bit of work in the second case.
Install: BoolElt Default: true
The curve CN should be a base change of the small modular database curve of level N to a field K of characteristic 0. Computes and returns the full group of automorphisms of CN (automorphisms in B0(N) if the genus of X0(N) is ≤1: see the introduction) defined over (Q). If the parameter Install has the value true, which is the default, the return value is internally installed and cached as the (full) automorphism group of CN, so the user should be careful that K doesn't contains roots of unity which generate a field over which some extra modular automorphisms are defined (viz. roots of unity of exact order r where 2 < r|24 and r2|N).
Install: BoolElt Default: true
The curve CN should be a base change of the small modular database curve of level N to a field K which is the cyclotomic extension of (Q) obtained by adjoining the n-th roots of unity (the precise condition is that K.1 should be a primitive n-th root of unity). Computes and returns the full group of automorphisms of CN (automorphisms in B0(N) if the genus of X0(N) is ≤1: see the introduction) defined over K. If the parameter Install has the value true, which is the default, the return value is internally installed and cached as the (full) automorphism group of CN.
Install: BoolElt Default: true
The curve CN should be a base change of the small modular database curve of level N to a field K which is an extension of (Q) containing the n-th roots of unity. u should be a primitive n-th root of unity in K. Computes and returns the full group of automorphisms of CN (automorphisms in B0(N) if the genus of X0(N) is ≤1: see the introduction) defined over the cyclotomic field (Q)(μn). If the parameter Install has the value true, which is the default, the return value is internally installed and cached as the (full) automorphism group of CN. In that case, the user should be careful that n is well-chosen so that K doesn't contain higher order roots of unity which generate a subfield over which some modular automorphisms are defined that are not defined over (Q)(μn).
> C := SmallModularCurve(37); > C; Hyperelliptic Curve defined by y^2 + (-x^3)*y = 2*x^5 - 5*x^4 + 7*x^3 - 6*x^2 + 3*x - 1 over Rational Field > AtkinLehnerInvolution(C,37,37); Mapping from: CrvHyp: C to CrvHyp: C with equations : $.1 $.2 $.1 - $.3 and inverse $.1 $.2 $.1 - $.3 > ExtraAutomorphism(C,37,1); //the hyperelliptic involution Mapping from: CrvHyp: C to CrvHyp: C with equations : $.1 $.1^3 - $.2 $.3 and inverse $.1 $.1^3 - $.2 $.3 > C<x,y,z> := SmallModularCurve(48); > C; Hyperelliptic Curve defined by y^2 + (-x^4 - 1)*y = 3*x^4 over Rational Field > AtkinLehnerInvolution(C,48,3); Mapping from: CrvHyp: C to CrvHyp: C with equations : -z x^4 - y + z^4 x and inverse -z x^4 - y + z^4 x > Type($1); MapAutSch > G := AutomorphismGroupOverQ(C,48); > #G; 16 > AtkinLehnerInvolution(C,48,3); Mapping from: CrvHyp: C to CrvHyp: C with equations : -z x^4 - y + z^4 x and inverse -z x^4 - y + z^4 x > Type($1); GrpAutCrvElt > PermutationRepresentation(G); Permutation group acting on a set of cardinality 6 Order = 16 = 2^4 (2, 3) (1, 2)(3, 4) (5, 6) Mapping from: GrpAutCrv: G to GrpPerm: $, Degree 6, Order 2^4 given by a rule > // D8 X C2 > K<i> := QuadraticField(-1); > CK<x,y,z> := SmallModularCurve(48,K); > G := AutomorphismGroupOverCyclotomicExtension(CK,48,4); > #G; 48 > SrAutomorphism(CK,48,4,i); // z -> z+(1/4) Mapping from: CrvHyp: CK to CrvHyp: CK with equations : -i*x y z and inverse i*x y z