// Example code from paper 4: // _Studying the Birch and Swinnerton-Dyer conjecture for modular abelian // varieties using Magma_ by William Stein // print "Examples from: Studying the Birch and Swinnerton-Dyer conjecture for modular abelian varieties using Magma"; ei := GetEchoInput(); SetEchoInput(true); // Section 5: Modular symbols M := ModularSymbols(389); Basis(M); M ! < 1, [ Cusps() | -1/337, Infinity() ] > ; S := CuspForms(389); SetPrecision(S, 40); Basis(S); M := ModularSymbols(389); N := NewSubspace(CuspidalSubspace(M)); NewformDecomposition(N); M := ModularSymbols(389, 2, +1); // the plus one quotient // Section 6: Visibility theory M := ModularSymbols(389); N := NewSubspace(CuspidalSubspace(M)); D := SortDecomposition(NewformDecomposition(N)); A := D[5]; B := D[1]; IntersectionGroup(A, B); TorsionBound(A, 7); TorsionBound(B, 7); TamagawaNumber(A, 389); TamagawaNumber(B, 389); E := EllipticCurve(B); Rank(E); G := ModularKernel(A); Factorization(#G); // Section 7: Computing special values of modular L-function LRatio(A, 1); // Section 9: Computing the torsion subgroup RationalCuspidalSubgroup(A); // subgroup of $A(\Q)$ // Section 11: An element of the Shafarevich-Tate group that becomes // visible at a higher level M := ModularSymbols(551); N := NewSubspace(CuspidalSubspace(M)); D := SortDecomposition(NewformDecomposition(N)); A := D[8]; TorsionBound(A, 7); RationalCuspidalSubgroup(A); TorsionBound(A, 31); Factorization(#ModularKernel(A)); // This next call intentionally raises an error TamagawaNumber(A, 19); // takes over a minute; gives an error TamagawaNumber(A, 29); ComponentGroupOrder(A, 19); AtkinLehnerOperator(A, 19)[1,1]; LRatio(A, 1); M := ModularSymbols(2*551, 2); N := NewSubspace(CuspidalSubspace(M)); D := SortDecomposition(NewformDecomposition(N)); M551 := ModularSymbols(M, 551); N551 := NewSubspace(CuspidalSubspace(M551)); D551 := SortDecomposition(NewformDecomposition(N551)); A551 := D551[#D551]; C := M !! A551; // sum of images under degeneracy maps IntersectionGroup(C, D[1]); B := EllipticCurve(D[1]); B; TamagawaNumber(B, 2); TamagawaNumber(B, 19); TamagawaNumber(B, 29); MordellWeilGroup(B); T3 := HeckeOperator(A, 3); d := Determinant(T3 - 4); Valuation(d, 3); SetEchoInput(ei);