Opened 19 months ago
Last modified 12 days ago
#28275 needs_work enhancement
Implement isomorphism testing for modular abelian varieties
Reported by:  klui  Owned by:  

Priority:  major  Milestone:  sage9.4 
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:  be26efc2b894db924917423e9fab96df437adaef 
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 i58350U 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/magma2.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 i58350U 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 (14)
comment:1 Changed 19 months ago by
 Branch set to u/klui/better_is_isomorphism
comment:2 Changed 19 months ago by
 Cc was added
 Commit set to 00d4814530222a39adca218247c22070601b650c
 Description modified (diff)
 Status changed from new to needs_review
comment:3 followup: ↓ 5 Changed 19 months ago by
doc does not build, because hecke_eigenvalue_field
is not formatted properly.
EDIT: same problem in random_element
comment:4 Changed 19 months ago by
 Commit changed from 00d4814530222a39adca218247c22070601b650c to 6195fc4c12dc002e8c7d3e0528b544355757dbd8
Branch pushed to git repo; I updated commit sha1. New commits:
6195fc4  Fix doc formatting

comment:5 in reply to: ↑ 3 Changed 19 months ago by
Replying to chapoton:
doc does not build, because
hecke_eigenvalue_field
is not formatted properly.EDIT: same problem in random_element
Thanks! Hopefully this fixes it.
comment:6 Changed 19 months ago by
 Commit changed from 6195fc4c12dc002e8c7d3e0528b544355757dbd8 to 19bad569deb3a406b1f16d971d9690aa133acf15
Branch pushed to git repo; I updated commit sha1. New commits:
19bad56  Remove unused matrix import

comment:7 followup: ↓ 9 Changed 19 months ago by
 please avoid using $ signs, use backticks
`
instead
 missing
::
in the doc ofisomorphic_order
 in
random_element
doc, wrong position and formatting forOUTPUT:
, that should be before the examples.
comment:8 Changed 19 months ago by
 Commit changed from 19bad569deb3a406b1f16d971d9690aa133acf15 to be26efc2b894db924917423e9fab96df437adaef
comment:9 in reply to: ↑ 7 Changed 19 months ago by
Replying to chapoton:
 please avoid using $ signs, use backticks
`
instead
 missing
::
in the doc ofisomorphic_order
 in
random_element
doc, wrong position and formatting forOUTPUT:
, that should be before the examples.
Opps. Thanks!
comment:10 Changed 14 months ago by
 Milestone changed from sage8.9 to sage9.1
Ticket retargeted after milestone closed
comment:11 Changed 11 months ago by
 Milestone changed from sage9.1 to sage9.2
Batch modifying tickets that will likely not be ready for 9.1, based on a review of the ticket title, branch/review status, and last modification date.
comment:12 Changed 6 months ago by
 Milestone changed from sage9.2 to sage9.3
comment:13 Changed 2 months ago by
 Status changed from needs_review to needs_work
red branch => needs work
comment:14 Changed 12 days ago by
 Milestone changed from sage9.3 to sage9.4
Setting new milestone based on a cursory review of ticket status, priority, and last modification date.
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 nonmaximal 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