id summary reporter owner description type status priority milestone component resolution keywords cc merged author reviewer upstream work_issues branch commit dependencies stopgaps
28275 Implement isomorphism testing for modular abelian varieties klui "This ticket implements isomorphism testing for modular abelian varieties. This code was used for parts of my thesis.
= Algorithm =
The algorithm used here is described in Algorithm 2.11 here: https://wstein.org/papers/current/modabvar/modabvar.pdf . This is the same algorithm that William Stein implemented in Magma.
= Bonus Tests =
== Isomorphic to Dual? ==
This code determines which simple subvarieties of the new subvariety of `J0(N)` is isomorphic to its dual.
{{{
# about 2 minutes on i5-8350U
from sage.all import J0
not_isomorphic_to_dual = []
for N in range(1, 100):
Jnew = J0(N).new_subvariety()
for A in Jnew:
Ad = A.dual()[0]
buul, f, _ = A.is_isomorphic(Ad, both_maps=True)
if not buul:
not_isomorphic_to_dual.append((A.label(), A.dimension(),
A.hecke_operator(2).matrix().minpoly()))
else:
assert(f.matrix().determinant().abs() == 1)
print(not_isomorphic_to_dual)
}}}
which yields these 4 abelian varieties:
{{{
[('69b(1,69)', 2, x^2 - 5), ('77d(1,77)', 2, x^2 - 5), ('81a(1,81)', 2, x^2 - 3), ('85c(1,85)', 2, x^2 - 3)]
}}}
The corresponding Magma should be:
{{{
for N in [1..99] do
D := Decomposition(NewSubvariety(JZero(N)));
for A in D do
Ad := Dual(A);
try
buul := IsIsomorphic(A, Ad);
if not buul then
A, Dimension(A), MinimalPolynomial(HeckeOperator(A, 2));
end if;
catch e
print ""The following yields an error!!!"";
A, Dimension(A), MinimalPolynomial(HeckeOperator(A, 2));
end try;
end for;
end for;
}}}
which yields the same 4 abelian varieties:
{{{
Modular abelian variety image(69B) of dimension 2, level 3*23 and conductor 3^2*23^2 over Q
2 x^2 - 5
Modular abelian variety image(77D) of dimension 2, level 7*11 and conductor 7^2*11^2 over Q
2 x^2 - 5
The following yields an error!!!
Modular abelian variety image(81A) of dimension 2, level 3^4 and conductor 3^8 over Q
2 x^2 - 3
The following yields an error!!!
Modular abelian variety image(85C) of dimension 2, level 5*17 and conductor 5^2*17^2 over Q
2 x^2 - 3
}}}
When this code claims `A` is not isomorphic to `A.dual()[0]`, Magma either agrees or gives a error with a traceback that looks like
{{{
IsIsomorphic(
A: Modular abelian variety image(81A) of dimension 2, level 3^4...,
B: Modular abelian variety of dimension 2 and level 3^4 over Q
)
CanDetermineIsomorphism(
A: Modular abelian variety image(81A) of dimension 2, level 3^4...,
B: Modular abelian variety of dimension 2 and level 3^4 over Q
)
In file ""/home/user/magma-2.18/package/Geometry/ModAbVar/modabvar.m"", line 1072, column 23:
>> Append(~X, K!y);
^
Runtime error in 'Append': Bad argument types
Argument types given: *nothing ~, FldNumElt[FldRat]
}}}
== `A` is isomorphic to `(A/A.torsion_subgroup(3))[0]`
Here we check that `A` is isomorphic to `(A/A.torsion_subgroup(3))[0]`.
{{{
# about 18 seconds on i5-8350U
from sage.all import J0
for N in range(1, 50):
Jnew = J0(N).new_subvariety()
for A in Jnew:
B = (A / A.torsion_subgroup(3))[0]
buul, f, _ = A.is_isomorphic(B, both_maps=True)
assert(f.matrix().determinant().abs() == 1)
}}}" enhancement needs_review major sage-9.1 modular forms modular abelian variety isomorphism testing was Kevin Lui N/A u/klui/better_is_isomorphism be26efc2b894db924917423e9fab96df437adaef