Opened 14 months ago

# Implement isomorphism testing for modular abelian varieties — at Version 2

Reported by: Owned by: klui major sage-9.3 modular forms modular abelian variety isomorphism testing was Kevin Lui N/A u/klui/better_is_isomorphism (Commits) 00d4814530222a39adca218247c22070601b650c

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:
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
try
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()`, 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))`

Here we check that `A` is isomorphic to `(A/A.torsion_subgroup(3))`.

```# 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))
buul, f, _ = A.is_isomorphic(B, both_maps=True)
assert(f.matrix().determinant().abs() == 1)
```

### comment:1 Changed 14 months ago by klui

• Branch set to u/klui/better_is_isomorphism

### comment:2 Changed 14 months ago by klui

• Authors set to Kevin Lui
 ​9bdbb74 `Add doctest showing ValueError` ​7150526 `Explain why we assume GRH` ​299406f `Fix bug in in_Hf` ​78bed9b `Add a nonisomorphic example` ​2dc0f79 `Add doctest showing non-maximal order` ​f36566b `Add a return_false function` ​ed1dfdc `Change a comment to better explain __contains__` ​11589bf `Remove isogeny option` ​4dbeb30 `Explain why we assume GRH better` ​00d4814 `Add doctest to _im_gens`