// Make newform 1800.4.a.k 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_k();". // 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_k();". // 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], [-8], [-20], [-22], [-14], [76], [56], [154], [160], [162], [390], [-388], [-544], [-210], [380], [-794], [148], [840], [-858], [144], [316], [-1098], [-994], [834], [-1672], [-732], [-970], [1938], [528], [-636], [1754], [-2508], [-1486], [2120], [1850], [1172], [-1656], [-2666], [-1132], [-2866], [-1888], [-1282], [350], [-3400], [4652], [-4016], [2316], [94], [-4230], [-2064], [4562], [-2532], [3522], [-2232], [-2806], [4848], [-7790], [118], [6508], [-8770], [4292], [9464], [-9578], [-186], [-492], [-2290], [-6092], [5766], [-9374], [3528], [-7616], [-3406], [-12284], [5424], [-3486], [3626], [-5874], [-12662], [-6396], [8286], [4112], [-5330], [11272], [14196], [5886], [7526], [-8502], [-12672], [16540], [-8864], [-3688], [16140], [1580], [15000], [-20486], [-7706], [3932], [-23930], [-11468], [-11498], [16988], [17366], [-24860], [26302], [7812], [7986], [21048], [1738], [-18576], [13602], [19578], [12308], [-8600], [-6978], [7668], [-15384], [-2186], [1524], [-4242], [-24354], [-322], [-7932], [20684], [-25222], [23678], [-8432], [-8312], [26298], [16956], [-17880], [22032], [-11534], [-38250], [19330], [-40674], [-7004], [12198], [25734], [15668], [34450], [38792], [-20460], [5542], [-25240], [37330], [-3894], [20324], [6288], [24650], [-9426], [9316], [6968], [35964], [-47888], [-12760], [25054], [-28282], [30634], [48572], [12906], [5880], [-55444], [32050], [29880], [5216], [-6750], [52178], [37678], [15356], [-11546], [9224], [9958], [-5872], [-39690], [13828], [7874], [13688], [17206], [39376], [-12924], [-48446], [4250], [-7712], [-13774], [-5702], [532], [-61702], [-55136], [-62594], [-7260], [428], [38810], [-47668], [-3782], [31506], [13530], [-50174], [41032], [-22710], [-80336], [-32366], [-45150], [44844], [-61754], [-65504], [-83188], [8358], [76820], [19598], [10802], [-45656], [59892], [-54968], [-58182], [9920], [78158], [-18024], [67430], [12062], [7816], [-27842], [-80640], [91356], [-83474], [36490], [-66592], [-52904], [-61300], [13322], [82092], [-1792], [85606], [-54564], [-48960], [13554], [-1074], [72988], [-103896], [-93796], [29668], [-55336], [-93290], [-19982], [-89800], [28784], [119396], [-5612], [-85952], [41178], [-95810], [63144], [-37606], [-39242], [-11532], [90158], [61836], [-29442], [80982], [47792], [29356], [-32322], [-13382], [-2270], [-134084], [8362], [-3690], [14988], [42590], [28502], [-117340], [141558], [-105088], [-7634], [45256], [85844], [-78874], [136922], [-85548], [7824], [-106632], [25912], [57022], [51260], [-127184], [-64946], [-106674], [71400], [-156834], [-129494], [77628], [15018], [17580], [-39958], [89754], [96224], [61422], [137212], [171924], [-15642], [-94602], [-158320], [59452], [72132], [8222], [140580], [-120074], [-157032], [82690], [-108832], [155826], [123102], [53204], [-135416], [161722], [9940], [40608], [-74818], [144526], [-121876], [59446], [22938], [4496], [-42502], [-61614], [-40676], [46828], [-189968], [-1602], [-94090], [145094], [149152], [86732], [-3884], [-201036], [25670], [-80670], [-133766], [24192], [-89678], [1962], [-54494], [60632], [209702], [155332], [103390], [80156], [-66480], [-10962], [-209348], [14694], [214474], [-68288], [123374], [104522], [-57312], [-213812], [189458], [-188456], [-213182], [35878], [-155264], [45084], [227124], [14726], [213654], [20824], [-180790], [166692], [-123820], [142336], [36306], [52584], [89626], [-13452], [-120256], [133534], [37422], [93718], [-67462], [58778], [-122232], [190818], [66108], [38120], [152656], [177906], [263052], [-208048], [2434], [-11874], [252300], [-153436], [186392], [247414], [130496], [-91770], [64052], [86610], [-145050], [-174462], [-63904], [-81846], [-84990], [-185928], [-281782], [-66834], [-66076], [72420], [61262], [243534], [-259244], [173788], [41990], [-229782], [-53696], [-104584], [-213582], [159672], [28890], [213794], [-223648], [-136580], [169254], [47862], [205500], [-30090], [33092], [148952]]; 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_k();". // 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_k(: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_k();". // 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_k( : sign := -1) R := PolynomialRing(Rationals()); chi := MakeCharacter_1800_a(); // SetVerbose("ModularSymbols", true); Snew := NewSubspace(CuspidalSubspace(ModularSymbols(chi,4,sign))); Vf := Kernel([<7,R![8, 1]>,<11,R![20, 1]>,<17,R![14, 1]>],Snew); return Vf; end function;