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()