kummer-notes-code

Notes and code from my early research in Kummer Theory for Elliptic Curves.
git clone https://git.tronto.net/kummer-notes-code
Download | Log | Files | Refs | README

2_division_counterex.sage (1837B)


      1 
      2 R1.<x> = PolynomialRing(QQ)
      3 R2.<x,y> = PolynomialRing(QQ)
      4 
      5 def extended_field( f, A, B, deg_mult ):
      6     # f: a polynomial whose roots are the x-coordinates of some points of an
      7     #    elliptic curve E: y^2 = x^3 + Ax + B.
      8     # return value: a field containing the x and y coordinates of those points
      9     # deg_mult: a positive integer known to be a multiple of the degree of the
     10     #    extended field.
     11     #
     12     # This function uses the properties of resultants (I can provide a pdf
     13     # explaining how it works).
     14     # 
     15     # It is useful to compute, e.g., the fields obtained by adjoining the
     16     # coordinates of the n-division points of a point (using the n-uplication
     17     # formulas to get the required polynomials).
     18     #
     19     # When used to compute the 2-division fields, it gives the same output as
     20     # E.division_field(2).
     21 
     22     
     23     g = y^2 - x^3 - A*x - B
     24     res = f.resultant(g,x)
     25     res = res.subs(y=x)
     26 
     27     #print "Splitting field of division pol:"
     28     #print R1(f).splitting_field('r')
     29     K.<b> = (R1(res*f)).splitting_field(degree_multiple=deg_mult)
     30 
     31     return K
     32 
     33 
     34 A = -3
     35 B = 17/4
     36 
     37 E = EllipticCurve([0,0,0,A,B])
     38 print E
     39 print "of rank ", E.rank(), "with (some) points of infinite order:", E.gens()
     40 print "CM:", E.has_cm()
     41 
     42 rep = E.galois_representation()
     43 print "mod 2 rep is surjective:", rep.is_surjective(2)
     44 
     45 K_2.<a> = E.division_field(2)
     46 print "2-division field:", K_2
     47 P = [4,15/2]
     48 
     49 # The following polynomial is derived from the duplication formula
     50 # (Silverman, p.54) using the x-coordinate of the 2-division point as
     51 # an indeterminate.x
     52 f_P = R1(x^4 - 4*P[0]*x^3 - 2*A*x^2 - 4*(2*B + A*P[0])*x + A^2 - 4*B*P[0])
     53 
     54 M = extended_field( f_P, A, B, 24 ) # The 2-division field of P
     55 print "2-division field of P:", M
     56 
     57 if M.degree() != 24:
     58     print "Stopping because 2-division of P is too small"
     59     exit()