// Make newform 1440.4.a.n in Magma, downloaded from the LMFDB on 28 March 2024. // To make the character of type GrpDrchElt, type "MakeCharacter_1440_a();" // To make the coeffs of the qexp of the newform in the Hecke field type "qexpCoeffs();" // To make the newform (type ModFrm), type "MakeNewformModFrm_1440_4_a_n();". // This may take a long time! To see verbose output, uncomment the SetVerbose lines below. // The precision argument determines an initial guess on how many Fourier coefficients to use. // This guess is increased enough to uniquely determine the newform. // To make the Hecke irreducible modular symbols subspace (type ModSym) // containing the newform, type "MakeNewformModSym_1440_4_a_n();". // This may take a long time! To see verbose output, uncomment the SetVerbose line below. // The default sign is -1. You can change this with the optional parameter "sign". function ConvertToHeckeField(input: pass_field := false, Kf := []) if not pass_field then Kf := Rationals(); end if; return [Kf!elt[1] : elt in input]; end function; // To make the character of type GrpDrchElt, type "MakeCharacter_1440_a();" function MakeCharacter_1440_a() N := 1440; order := 1; char_gens := [991, 901, 641, 577]; v := [1, 1, 1, 1]; // chi(gens[i]) = zeta^v[i] assert UnitGenerators(DirichletGroup(N)) eq char_gens; F := CyclotomicField(order); chi := DirichletCharacterFromValuesOnUnitGenerators(DirichletGroup(N,F),[F|F.1^e:e in v]); return MinimalBaseRingCharacter(chi); end function; function MakeCharacter_1440_a_Hecke(Kf) return MakeCharacter_1440_a(); end function; function ExtendMultiplicatively(weight, aps, character) prec := NextPrime(NthPrime(#aps)) - 1; // we will able to figure out a_0 ... a_prec primes := PrimesUpTo(prec); prime_powers := primes; assert #primes eq #aps; log_prec := Floor(Log(prec)/Log(2)); // prec < 2^(log_prec+1) F := Universe(aps); FXY := PolynomialRing(F, 2); // 1/(1 - a_p T + p^(weight - 1) * char(p) T^2) = 1 + a_p T + a_{p^2} T^2 + ... R := PowerSeriesRing(FXY : Precision := log_prec + 1); recursion := Coefficients(1/(1 - X*T + Y*T^2)); coeffs := [F!0: i in [1..(prec+1)]]; coeffs[1] := 1; //a_1 for i := 1 to #primes do p := primes[i]; coeffs[p] := aps[i]; b := p^(weight - 1) * F!character(p); r := 2; p_power := p * p; //deals with powers of p while p_power le prec do Append(~prime_powers, p_power); coeffs[p_power] := Evaluate(recursion[r + 1], [aps[i], b]); p_power *:= p; r +:= 1; end while; end for; Sort(~prime_powers); for pp in prime_powers do for k := 1 to Floor(prec/pp) do if GCD(k, pp) eq 1 then coeffs[pp*k] := coeffs[pp]*coeffs[k]; end if; end for; end for; return coeffs; end function; function qexpCoeffs() // To make the coeffs of the qexp of the newform in the Hecke field type "qexpCoeffs();" weight := 4; raw_aps := [[0], [0], [5], [-6], [60], [50], [30], [-40], [178], [-166], [-20], [10], [250], [-142], [214], [-490], [-800], [250], [774], [100], [-230], [1320], [982], [-874], [-310], [1498], [-1402], [1194], [650], [1510], [-1246], [2660], [-2770], [560], [2350], [-580], [-1310], [-1862], [726], [-3250], [-1120], [-2842], [3180], [-4670], [2990], [4240], [4060], [5622], [1554], [1134], [1710], [4440], [-850], [-660], [7590], [762], [150], [6580], [4530], [-6950], [3882], [-1370], [-4106], [2220], [-9430], [6470], [-900], [530], [-414], [8614], [2270], [8080], [-2374], [1810], [-8120], [-11782], [4350], [-7470], [-11698], [-3650], [-1120], [4850], [-12580], [13130], [-8560], [-4258], [-2550], [-6710], [14482], [-162], [-15974], [-10760], [9266], [2860], [-7160], [-1398], [-7446], [16438], [7322], [10878], [-16114], [-3690], [-2562], [6050], [-8260], [-16870], [-966], [-26290], [-11640], [-25450], [-16694], [15890], [1230], [10840], [14060], [17650], [-27358], [-6786], [9030], [-15600], [16850], [-7990], [-18690], [19182], [23380], [-11850], [25646], [-30280], [-17446], [-16750], [36560], [-30142], [-11860], [37010], [11718], [4706], [28670], [-20434], [-3930], [4854], [13140], [-22050], [-14578], [-37054], [-6150], [-8200], [-42990], [-32130], [-15440], [46938], [-31230], [-25550], [-4318], [1766], [-41906], [25140], [-32920], [-10150], [28530], [-9678], [36986], [3350], [-43774], [8740], [48310], [2282], [31580], [-2790], [23954], [20830], [1720], [-24338], [58140], [-37590], [-33280], [-9786], [21980], [21018], [30862], [32650], [-27734], [14580], [24010], [8390], [-50502], [49746], [-9830], [29122], [-42050], [-31180], [-5990], [-39138], [58980], [-22650], [16034], [32190], [22350], [-7590], [67230], [-35478], [-44134], [27540], [-4790], [32914], [34560], [-64290], [44720], [49518], [-36874], [18700], [6130], [33950], [-49002], [50794], [34280], [-7850], [-20446], [-1218], [24326], [-27730], [-62750], [-9880], [-32946], [11278], [-33246], [-16750], [-14890], [-19760], [-76414], [63780], [71250], [47480], [-70300], [-26550], [-87718], [-46834], [52950], [32790], [-16760], [58380], [-6778], [107700], [49742], [-8314], [-33170], [-106080], [45874], [-82020], [71520], [71682], [-64350], [-402], [11694], [18750], [87710], [-67560], [34438], [2254], [24030], [-46550], [-23738], [-58526], [12494], [-75990], [20190], [126920], [38346], [-93962], [8578], [-85530], [-93378], [-68986], [22130], [-78720], [17850], [-56018], [-63134], [-29226], [-106650], [74100], [-104822], [-114460], [135214], [104118], [-56874], [42580], [-46270], [-99890], [-118840], [-92950], [-42650], [68994], [87270], [-107140], [-84830], [14950], [-49300], [156470], [13320], [44934], [-72110], [-34530], [-58280], [126798], [4660], [134650], [-149854], [74966], [0], [92010], [-18662], [-894], [48142], [-52718], [-143034], [-17926], [-13880], [40740], [174330], [116650], [11060], [-69470], [-40250], [191358], [-89170], [-141250], [-143480], [54898], [95094], [-4490], [125850], [-66450], [44440], [-148458], [13700], [72474], [45050], [-56650], [-27050], [146034], [-28390], [-29690], [59550], [-105780], [93830], [9560], [-194750], [-7586], [-96780], [-200690], [-47460], [-200310], [153750], [-153682], [78174], [-179850], [198120], [-125100], [79350], [26178], [-123350], [-142122], [106214], [70080], [9726], [94290], [-241410], [128598], [-82250], [77220], [29880], [-239358], [47150], [-212420], [122050], [197560], [155860], [-11150], [209450], [48850], [-14862], [-176610], [-14], [-105810], [135480], [91138], [-146380], [-86470], [-154782], [-217866], [-189450], [-192610], [114960], [-156106], [-41820], [-86990], [233320], [-225866], [-128060], [-128050], [203450], [226350], [141626], [118350], [11550], [110620], [235690], [-101602], [-47702], [-142000], [-189470], [177350], [-114442], [61020], [-67350], [-116718], [-225520], [-260966], [4950], [204498], [13350], [-186350], [-94346], [-129520], [-32230], [-88690], [-12562], [-29550], [-101380], [-125920]]; aps := ConvertToHeckeField(raw_aps); chi := MakeCharacter_1440_a_Hecke(Universe(aps)); return ExtendMultiplicatively(weight, aps, chi); end function; // To make the newform (type ModFrm), type "MakeNewformModFrm_1440_4_a_n();". // This may take a long time! To see verbose output, uncomment the SetVerbose lines below. // The precision argument determines an initial guess on how many Fourier coefficients to use. // This guess is increased enough to uniquely determine the newform. function MakeNewformModFrm_1440_4_a_n(:prec:=1) chi := MakeCharacter_1440_a(); f_vec := qexpCoeffs(); Kf := Universe(f_vec); // SetVerbose("ModularForms", true); // SetVerbose("ModularSymbols", true); S := CuspidalSubspace(ModularForms(chi, 4)); S := BaseChange(S, Kf); maxprec := NextPrime(2999) - 1; while true do trunc_vec := Vector(Kf, [0] cat [f_vec[i]: i in [1..prec]]); B := Basis(S, prec + 1); S_basismat := Matrix([AbsEltseq(g): g in B]); if Rank(S_basismat) eq Min(NumberOfRows(S_basismat), NumberOfColumns(S_basismat)) then S_basismat := ChangeRing(S_basismat,Kf); f_lincom := Solution(S_basismat,trunc_vec); f := &+[f_lincom[i]*Basis(S)[i] : i in [1..#Basis(S)]]; return f; end if; error if prec eq maxprec, "Unable to distinguish newform within newspace"; prec := Min(Ceiling(1.25 * prec), maxprec); end while; end function; // To make the Hecke irreducible modular symbols subspace (type ModSym) // containing the newform, type "MakeNewformModSym_1440_4_a_n();". // This may take a long time! To see verbose output, uncomment the SetVerbose line below. // The default sign is -1. You can change this with the optional parameter "sign". function MakeNewformModSym_1440_4_a_n( : sign := -1) R := PolynomialRing(Rationals()); chi := MakeCharacter_1440_a(); // SetVerbose("ModularSymbols", true); Snew := NewSubspace(CuspidalSubspace(ModularSymbols(chi,4,sign))); Vf := Kernel([<7,R![6, 1]>,<11,R![-60, 1]>,<17,R![-30, 1]>],Snew); return Vf; end function;