{{{id=1| N=19 J1(N) /// Abelian variety J1(19) of dimension 7 }}} {{{id=2| G = DirichletGroup(N) /// }}} {{{id=3| G.0.order() /// 18 }}} {{{id=4| eps = G.0^2; eps.order() /// 9 }}} {{{id=5| S = CuspForms(eps, 2); S /// Cuspidal subspace of dimension 1 of Modular Forms space of dimension 3, character [zeta18^2] and weight 2 over Cyclotomic Field of order 18 and degree 6 }}} {{{id=11| len(S.newforms())show(A) /// 1 }}} {{{id=9| f = S.newforms()[0].qexp(5); f /// q + (-zeta18^2 + zeta18 - 1)*q^2 + (-zeta18^4 + zeta18^3 + zeta18^2 - 1)*q^3 + (zeta18^4 - 2*zeta18^3 + zeta18^2 - 2*zeta18 + 1)*q^4 + O(q^5) }}} {{{id=7| f.base_ring().degree() /// 6 }}} {{{id=6| d = primitive_root(N); d /// 2 }}} {{{id=12| eps(d) /// zeta18^2 }}} {{{id=13| K = f.base_ring() print K zeta = K.gen() /// Cyclotomic Field of order 18 and degree 6 }}}
A generator of the Galois group:
{{{id=16| phi = K.automorphisms()[-1]; phi /// Ring endomorphism of Cyclotomic Field of order 18 and degree 6 Defn: zeta18 |--> zeta18^5 }}} {{{id=14| z = zeta for i in range(6): print z z = phi(z) /// zeta18 zeta18^5 zeta18^4 - zeta18 -zeta18^5 + zeta18^2 -zeta18^4 -zeta18^2 }}} {{{id=21| def apply(f, phi): R = f.parent() return R([phi(f[i]) for i in range(5)],prec=5) /// }}} {{{id=19| fv = [f] for i in range(3): fv.append(apply(fv[-1],phi)) /// }}} {{{id=18| for g in fv: print g /// q + (-zeta18^2 + zeta18 - 1)*q^2 + (-zeta18^4 + zeta18^3 + zeta18^2 - 1)*q^3 + (zeta18^4 - 2*zeta18^3 + zeta18^2 - 2*zeta18 + 1)*q^4 + O(q^5) q + (zeta18^5 + zeta18 - 1)*q^2 + (-zeta18^3 - zeta18^2 - zeta18)*q^3 + (-2*zeta18^5 + 2*zeta18^3 + zeta18^2 - zeta18 - 1)*q^4 + O(q^5) q + (zeta18^5 + zeta18^4 - zeta18 - 1)*q^2 + (-zeta18^5 + zeta18^3 + zeta18 - 1)*q^3 + (-zeta18^5 - 2*zeta18^4 - 2*zeta18^3 + zeta18 + 1)*q^4 + O(q^5) q + (-zeta18^5 + zeta18^4 + zeta18^2 - zeta18 - 1)*q^2 + (zeta18^5 - zeta18^4 - zeta18^3 + zeta18)*q^3 + (zeta18^5 - zeta18^4 + 2*zeta18^3 - 2*zeta18^2 + zeta18 - 1)*q^4 + O(q^5) }}} {{{id=26| f[1].list() /// [1, 0, 0, 0, 0, 0] }}} {{{id=25| def qexp_to_integral_vector(g): return vector(ZZ,sum([g[i].list() for i in [1..4]], [])) /// }}} {{{id=24| for g in fv: print qexp_to_integral_vector(g) /// [1, 0, 0, 0, 0, 0, -1, 1, -1, 0, 0, 0, -1, 0, 1, 1, -1, 0, 1, -2, 1, -2, 1, 0] [1, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 1, 0, -1, -1, -1, 0, 0, -1, -1, 1, 2, 0, -2] [1, 0, 0, 0, 0, 0, -1, -1, 0, 0, 1, 1, -1, 1, 0, 1, 0, -1, 1, 1, 0, -2, -2, -1] [1, 0, 0, 0, 0, 0, -1, -1, 1, 0, 1, -1, 0, 1, 0, -1, -1, 1, -1, 1, -2, 2, -1, 1] }}}Compute the integer vectors corresponding to the 24 modular forms $\varphi^i(\zeta^j \cdot f)$ for $i=0,1,2,3$ and $j=0,1,2,3,4,5$.
{{{id=23| # first compute zeta^j*f for j =0,1,..,5. w = [zeta^j*f for j in [0..5]] # next compute images under powers of phi z = [w] # copy of w for i in [0..5]: z.append([apply(z[-1][j], phi) for j in [0..5]]) z = sum(z, []) /// }}} {{{id=28| def qexp_to_vector(g, ell): return vector(GF(ell), sum([g[i].list() for i in [1..4]], [])) /// }}} {{{id=17| zmod = [qexp_to_vector(g,37) for g in z] span(zmod).dimension() /// 24 }}} {{{id=27| def qexps_to_matrix(z, ell): k = GF(ell) if ell else ZZ return matrix(k, [sum([g[i].list() for i in [1..4]],[]) for g in z]) /// }}} {{{id=31| len(z) /// 42 }}} {{{id=29| A = qexps_to_matrix(z,0); A /// 42 x 24 dense matrix over Integer Ring (type 'print A.str()' to see all of the entries) }}} {{{id=30| factor(A.hermite_form(include_zero_rows=False).determinant()) /// 3^10 }}} {{{id=32| /// }}}