Opened 14 months ago
Last modified 3 weeks ago
#28275 needs_review enhancement
Implement isomorphism testing for modular abelian varieties — at Version 2
Reported by: | klui | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | sage-9.3 |
Component: | modular forms | Keywords: | modular abelian variety isomorphism testing |
Cc: | was | Merged in: | |
Authors: | Kevin Lui | Reviewers: | |
Report Upstream: | N/A | Work issues: | |
Branch: | u/klui/better_is_isomorphism (Commits) | Commit: | 00d4814530222a39adca218247c22070601b650c |
Dependencies: | Stopgaps: |
Description (last modified by )
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)
Change History (2)
comment:1 Changed 14 months ago by
- Branch set to u/klui/better_is_isomorphism
comment:2 Changed 14 months ago by
- Cc was added
- Commit set to 00d4814530222a39adca218247c22070601b650c
- Description modified (diff)
- Status changed from new to needs_review
Last 10 new commits:
Add doctest showing ValueError
Explain why we assume GRH
Fix bug in in_Hf
Add a nonisomorphic example
Add doctest showing non-maximal order
Add a return_false function
Change a comment to better explain __contains__
Remove isogeny option
Explain why we assume GRH better
Add doctest to _im_gens