kamienny_computation_-_2010-02-10
system:sage


{{{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
}}}

<p>A generator of the Galois group:</p>

{{{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]
}}}

<p>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$.</p>

{{{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|

///
}}}