Changes between Initial Version and Version 2 of Ticket #28275


Ignore:
Timestamp:
07/28/19 20:31:27 (13 months ago)
Author:
klui
Comment:

Last 10 new commits:

9bdbb74Add doctest showing ValueError
7150526Explain why we assume GRH
299406fFix bug in in_Hf
78bed9bAdd a nonisomorphic example
2dc0f79Add doctest showing non-maximal order
f36566bAdd a return_false function
ed1dfdcChange a comment to better explain __contains__
11589bfRemove isogeny option
4dbeb30Explain why we assume GRH better
00d4814Add doctest to _im_gens

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #28275

    • Property Status changed from new to needs_review
    • Property Authors changed from to Kevin Lui
    • Property Cc was added
    • Property Branch changed from to u/klui/better_is_isomorphism
    • Property Commit changed from to 00d4814530222a39adca218247c22070601b650c
  • Ticket #28275 – Description

    initial v2  
    1 This ticket implements isomorphism testing for modular abelian varieties.
     1This ticket implements isomorphism testing for modular abelian varieties. This code was used for parts of my thesis.
     2
     3= Algorithm =
     4
     5The 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.
     6
     7= Bonus Tests =
     8
     9== Isomorphic to Dual? ==
     10
     11This code determines which simple subvarieties of the new subvariety of `J0(N)` is isomorphic to its dual.
     12{{{
     13# about 2 minutes on i5-8350U
     14from sage.all import J0
     15
     16not_isomorphic_to_dual = []
     17for N in range(1, 100):
     18    Jnew = J0(N).new_subvariety()
     19    for A in Jnew:
     20        Ad = A.dual()[0]
     21        buul, f, _ = A.is_isomorphic(Ad, both_maps=True)
     22        if not buul:
     23            not_isomorphic_to_dual.append((A.label(), A.dimension(),
     24                                          A.hecke_operator(2).matrix().minpoly()))
     25        else:
     26            assert(f.matrix().determinant().abs() == 1)
     27print(not_isomorphic_to_dual)
     28}}}
     29which yields these 4 abelian varieties:
     30{{{
     31[('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)]
     32}}}
     33
     34The corresponding Magma should be:
     35{{{
     36for N in [1..99] do
     37    D := Decomposition(NewSubvariety(JZero(N)));
     38    for A in D do
     39        Ad := Dual(A);
     40        try
     41            buul := IsIsomorphic(A, Ad);
     42            if not buul then
     43                A, Dimension(A), MinimalPolynomial(HeckeOperator(A, 2));
     44            end if;
     45        catch e
     46            print "The following yields an error!!!";
     47            A, Dimension(A), MinimalPolynomial(HeckeOperator(A, 2));
     48        end try;
     49    end for;
     50end for;
     51}}}
     52which yields the same 4 abelian varieties:
     53{{{
     54Modular abelian variety image(69B) of dimension 2, level 3*23 and conductor 3^2*23^2 over Q
     552 x^2 - 5
     56Modular abelian variety image(77D) of dimension 2, level 7*11 and conductor 7^2*11^2 over Q
     572 x^2 - 5
     58The following yields an error!!!
     59Modular abelian variety image(81A) of dimension 2, level 3^4 and conductor 3^8 over Q
     602 x^2 - 3
     61The following yields an error!!!
     62Modular abelian variety image(85C) of dimension 2, level 5*17 and conductor 5^2*17^2 over Q
     632 x^2 - 3
     64}}}
     65
     66When this code claims `A` is not isomorphic to `A.dual()[0]`, Magma either agrees or gives a error with a traceback that looks like
     67{{{
     68IsIsomorphic(
     69A: Modular abelian variety image(81A) of dimension 2, level 3^4...,
     70B: Modular abelian variety of dimension 2 and level 3^4 over Q
     71)
     72CanDetermineIsomorphism(
     73A: Modular abelian variety image(81A) of dimension 2, level 3^4...,
     74B: Modular abelian variety of dimension 2 and level 3^4 over Q
     75)
     76In file "/home/user/magma-2.18/package/Geometry/ModAbVar/modabvar.m", line 1072, column 23:
     77>>                 Append(~X, K!y);
     78                         ^
     79Runtime error in 'Append': Bad argument types
     80Argument types given: *nothing ~, FldNumElt[FldRat]
     81}}}
     82
     83== `A` is isomorphic to `(A/A.torsion_subgroup(3))[0]`
     84
     85Here we check that `A` is isomorphic to `(A/A.torsion_subgroup(3))[0]`.
     86{{{
     87# about 18 seconds on i5-8350U
     88from sage.all import J0
     89
     90for N in range(1, 50):
     91    Jnew = J0(N).new_subvariety()
     92    for A in Jnew:
     93        B = (A / A.torsion_subgroup(3))[0]
     94        buul, f, _ = A.is_isomorphic(B, both_maps=True)
     95        assert(f.matrix().determinant().abs() == 1)
     96}}}