// Make newform 1800.4.a.j in Magma, downloaded from the LMFDB on 28 March 2024. // To make the character of type GrpDrchElt, type "MakeCharacter_1800_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_1800_4_a_j();". // 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_1800_4_a_j();". // 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_1800_a();" function MakeCharacter_1800_a() N := 1800; order := 1; char_gens := [1351, 901, 1001, 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_1800_a_Hecke(Kf) return MakeCharacter_1800_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], [0], [-10], [46], [34], [66], [104], [164], [-224], [-72], [22], [-194], [-108], [-480], [286], [-426], [698], [-328], [-188], [740], [1168], [412], [-1206], [1384], [1128], [758], [1324], [1602], [-2074], [534], [-1806], [1822], [532], [1284], [184], [3746], [-1504], [3012], [-438], [1462], [586], [-60], [4676], [2286], [-3536], [-3500], [-5874], [-124], [-1362], [-3870], [-6116], [-5962], [1490], [-5394], [-636], [3360], [5768], [1398], [4194], [8256], [5534], [484], [2724], [-5308], [4218], [-4640], [8156], [4124], [3650], [6834], [-3904], [13174], [1090], [-9220], [-3960], [1788], [-9642], [410], [13766], [-16998], [-2450], [9248], [5028], [3120], [-8220], [5826], [16896], [996], [-10046], [-8388], [-11396], [-6454], [-18638], [17768], [-7952], [12896], [2714], [13792], [6802], [18188], [21462], [-17244], [-8790], [-5984], [9344], [-6932], [9382], [-4096], [22962], [3490], [-6386], [-19534], [8764], [7856], [22974], [6216], [13384], [12882], [2082], [-9430], [-3268], [-15606], [428], [-6384], [12224], [19510], [3368], [-22134], [-32298], [25104], [-27696], [-2176], [-25514], [-18238], [-14462], [34034], [-22064], [-23334], [7566], [5964], [11880], [1762], [-14124], [-21350], [26136], [7030], [-9574], [-43748], [41436], [-4606], [4610], [-23512], [-30396], [-3452], [-14256], [8064], [40930], [-9016], [10444], [21516], [-28098], [14558], [-24846], [-12950], [-26728], [3880], [-18582], [50486], [-13710], [-25634], [-27690], [55680], [26380], [35960], [9026], [-4068], [-37340], [-32182], [-14274], [-59174], [42], [21942], [-10242], [-17784], [-66868], [17810], [27712], [-12830], [-44580], [9884], [156], [68380], [37188], [-16548], [2326], [10126], [-5342], [-16274], [49688], [33588], [7888], [-5494], [-8114], [-21490], [14518], [40624], [-24596], [-89102], [6784], [46156], [-73212], [25654], [-39844], [15268], [70918], [8030], [24442], [848], [-89402], [-35290], [47320], [-82962], [63354], [43100], [-32650], [69198], [-61832], [-574], [-25362], [68602], [-34428], [-63600], [-48350], [34520], [18348], [51710], [49350], [72190], [71460], [-115052], [-103768], [28682], [-50206], [-29574], [86900], [101038], [25350], [-35952], [4148], [105966], [-39810], [-45036], [-66890], [35798], [115122], [-78142], [-44872], [35054], [46596], [-1154], [41380], [-22082], [-104458], [-32562], [-94176], [36268], [40894], [-125808], [26634], [-16250], [-101644], [-32204], [-21320], [-94788], [133078], [-115676], [-28302], [96630], [-89486], [-118340], [20896], [-46384], [-146738], [57244], [144204], [-77320], [18426], [-46904], [24062], [-107764], [114716], [-48806], [48102], [70446], [19956], [107600], [23058], [-1682], [110308], [23732], [-116894], [62840], [-140220], [97544], [-148896], [83868], [-80546], [-122844], [71266], [95676], [-142080], [-18334], [-121780], [-59464], [-22458], [-81354], [-102188], [148356], [71662], [-171200], [-182876], [-69512], [-170958], [-140134], [92198], [-15212], [6252], [-62296], [-61790], [58078], [-65146], [-16184], [-38092], [151428], [-49588], [73942], [-43838], [-67542], [-142986], [-97534], [-28982], [-50872], [-139808], [115878], [-96450], [-137882], [-99396], [183540], [-114862], [-145364], [5936], [155088], [-152322], [152570], [151322], [-31936], [-175514], [62662], [-157148], [-90374], [99918], [27064], [-224370], [-20536], [-227744], [-84426], [35174], [-228358], [-47298], [128764], [-41160], [193888], [111496], [-131354], [190030], [231816], [-146888], [-38014], [127912], [62532], [-163610], [-48994], [-24110], [60860], [-188532], [12744], [195134], [-60988], [-108924], [226962], [-229026], [264638], [-98440], [-109592], [20864], [5176], [71334], [-191568], [121124], [-57642], [131326], [160350], [-147586], [221856], [8624], [73486], [-97046], [136000], [-219478], [-134008], [-11322], [202068], [-211024], [-71356], [-36832], [-161880], [125414], [94150], [27340], [99700], [-215966], [25872], [20274], [200460], [30870], [-291604], [-8666], [-116872], [38728]]; aps := ConvertToHeckeField(raw_aps); chi := MakeCharacter_1800_a_Hecke(Universe(aps)); return ExtendMultiplicatively(weight, aps, chi); end function; // To make the newform (type ModFrm), type "MakeNewformModFrm_1800_4_a_j();". // 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_1800_4_a_j(:prec:=1) chi := MakeCharacter_1800_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_1800_4_a_j();". // 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_1800_4_a_j( : sign := -1) R := PolynomialRing(Rationals()); chi := MakeCharacter_1800_a(); // SetVerbose("ModularSymbols", true); Snew := NewSubspace(CuspidalSubspace(ModularSymbols(chi,4,sign))); Vf := Kernel([<7,R![10, 1]>,<11,R![-46, 1]>,<17,R![-66, 1]>],Snew); return Vf; end function;