diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2026-06-14 09:58:21 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2026-06-14 09:58:21 +0200 |
| commit | 5ea79c7ae0d44686f1df05c4a016652afbe58968 (patch) | |
| tree | 05f6a052373f5fe0942777a48303b2f8b884cbe1 /necessity_52b | |
| download | kummer-notes-code-5ea79c7ae0d44686f1df05c4a016652afbe58968.tar.gz kummer-notes-code-5ea79c7ae0d44686f1df05c4a016652afbe58968.zip | |
Initial commit
Diffstat (limited to '')
| -rwxr-xr-x | necessity_52b/2_division.sage | 126 | ||||
| -rwxr-xr-x | necessity_52b/2_division_counterex.sage | 59 | ||||
| -rwxr-xr-x | necessity_52b/necessity_52b.pdf | bin | 0 -> 118096 bytes | |||
| -rwxr-xr-x | necessity_52b/necessity_52b.tex | 96 |
4 files changed, 281 insertions, 0 deletions
diff --git a/necessity_52b/2_division.sage b/necessity_52b/2_division.sage new file mode 100755 index 0000000..68cea80 --- /dev/null +++ b/necessity_52b/2_division.sage | |||
| @@ -0,0 +1,126 @@ | |||
| 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 | #K.<b> = f.splitting_field() | ||
| 28 | #print aux | ||
| 29 | print "+++ Computing splitting field of the following: +++" | ||
| 30 | |||
| 31 | pol = R1(res*f) | ||
| 32 | print pol | ||
| 33 | |||
| 34 | K.<b> = NumberField( R( pari(pol).nfsplitting(deg_mult) ) ) | ||
| 35 | |||
| 36 | return K | ||
| 37 | |||
| 38 | L = [] | ||
| 39 | |||
| 40 | for A in range(1,9): | ||
| 41 | for B in range(1,9): | ||
| 42 | |||
| 43 | print "Current list of examples:", len(L), "elements. List:" | ||
| 44 | print L | ||
| 45 | |||
| 46 | E = EllipticCurve([0,0,0,A,B]) | ||
| 47 | print "*************************" | ||
| 48 | print E | ||
| 49 | print "of rank ", E.rank(), "with (some) points of infinite order:", E.gens() | ||
| 50 | print "CM:", E.has_cm() | ||
| 51 | |||
| 52 | rep = E.galois_representation() | ||
| 53 | print "mod 2 rep is surjective:", rep.is_surjective(2) | ||
| 54 | |||
| 55 | if E.rank() == 0: | ||
| 56 | print "Stopping because rank 0" | ||
| 57 | print "" | ||
| 58 | continue | ||
| 59 | if len(E.gens()) == 0: | ||
| 60 | print "Stopping because no points of infinite order found" | ||
| 61 | print "" | ||
| 62 | continue | ||
| 63 | if E.has_cm(): | ||
| 64 | print "Stopping because CM" | ||
| 65 | print "" | ||
| 66 | print "" | ||
| 67 | continue | ||
| 68 | if not rep.is_surjective(2): | ||
| 69 | print "Stopping because mod 2 rep is not surjective" | ||
| 70 | print "" | ||
| 71 | continue | ||
| 72 | |||
| 73 | K_2.<a> = E.division_field(2) | ||
| 74 | print "2-division field:", K_2 | ||
| 75 | P = E(0) | ||
| 76 | flag = False | ||
| 77 | for P in E.gens(): | ||
| 78 | if len(P.division_points(2)) == 0: | ||
| 79 | flag = True | ||
| 80 | break | ||
| 81 | if not flag: | ||
| 82 | print "Stopping because the points found are 2-divisible" | ||
| 83 | print "" | ||
| 84 | continue | ||
| 85 | print "Taking the 2-division of P =", P | ||
| 86 | |||
| 87 | # The following polynomial is derived from the duplication formula | ||
| 88 | # (Silverman, p.54) using the x-coordinate of the 2-division point as | ||
| 89 | # an indeterminate.x | ||
| 90 | 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]) | ||
| 91 | #print f_P.roots() | ||
| 92 | |||
| 93 | M = extended_field( f_P, A, B, 24 ) # The 2-division field of P | ||
| 94 | print "2-division field of P:", M | ||
| 95 | |||
| 96 | if M.degree() != 24: | ||
| 97 | print "Stopping because 2-division of P is too small" | ||
| 98 | print "" | ||
| 99 | continue | ||
| 100 | |||
| 101 | div_pol_4 = E.division_polynomial(4) | ||
| 102 | |||
| 103 | #if div_pol_4.splitting_field('zz').degree() < 48: | ||
| 104 | # print "Stopping because splitting field of div_pol_4 < 48" | ||
| 105 | # exit() | ||
| 106 | |||
| 107 | K_4 = extended_field( div_pol_4, A, B, 96 ) | ||
| 108 | print "4-division field:", K_4 | ||
| 109 | |||
| 110 | if K_4.degree() != 96: | ||
| 111 | print "Stopping because mod 4 representation not surjective" | ||
| 112 | print "" | ||
| 113 | continue | ||
| 114 | |||
| 115 | if len(f_P.roots(ring=K_4)) == 0: | ||
| 116 | print "Stopping because M is not contained in K_4" | ||
| 117 | print "" | ||
| 118 | continue | ||
| 119 | |||
| 120 | print "----------------" | ||
| 121 | print "|Example Found!|" | ||
| 122 | print "----------------" | ||
| 123 | L.append((A,B)) | ||
| 124 | |||
| 125 | print "*************************" | ||
| 126 | print "" | ||
diff --git a/necessity_52b/2_division_counterex.sage b/necessity_52b/2_division_counterex.sage new file mode 100755 index 0000000..f1193fb --- /dev/null +++ b/necessity_52b/2_division_counterex.sage | |||
| @@ -0,0 +1,59 @@ | |||
| 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() | ||
diff --git a/necessity_52b/necessity_52b.pdf b/necessity_52b/necessity_52b.pdf new file mode 100755 index 0000000..1e2d18e --- /dev/null +++ b/necessity_52b/necessity_52b.pdf | |||
| Binary files differ | |||
diff --git a/necessity_52b/necessity_52b.tex b/necessity_52b/necessity_52b.tex new file mode 100755 index 0000000..8de27b3 --- /dev/null +++ b/necessity_52b/necessity_52b.tex | |||
| @@ -0,0 +1,96 @@ | |||
| 1 | \documentclass[10pt,a4paper]{article} | ||
| 2 | \usepackage[utf8]{inputenc} | ||
| 3 | \usepackage{amsmath} | ||
| 4 | \usepackage{amsthm} | ||
| 5 | \usepackage{amsfonts} | ||
| 6 | \usepackage{amssymb} | ||
| 7 | \usepackage[a4paper, top=3cm, bottom=3cm, left=2.5cm, right=2.5cm]{geometry} | ||
| 8 | |||
| 9 | \DeclareMathOperator{\alg}{alg} | ||
| 10 | \DeclareMathOperator{\obj}{Obj} | ||
| 11 | \DeclareMathOperator{\Hom}{Hom} | ||
| 12 | \DeclareMathOperator{\End}{End} | ||
| 13 | \DeclareMathOperator{\hol}{Hol} | ||
| 14 | \DeclareMathOperator{\aut}{Aut} | ||
| 15 | \DeclareMathOperator{\gal}{Gal} | ||
| 16 | \DeclareMathOperator{\id}{id} | ||
| 17 | \DeclareMathOperator{\res}{res} | ||
| 18 | \DeclareMathOperator{\im}{Im} | ||
| 19 | \DeclareMathOperator{\Id}{Id} | ||
| 20 | \DeclareMathOperator{\fib}{Fib} | ||
| 21 | \DeclareMathOperator{\spec}{Spec} | ||
| 22 | \DeclareMathOperator{\proj}{Proj} | ||
| 23 | \DeclareMathOperator{\trdeg}{trdeg} | ||
| 24 | \DeclareMathOperator{\car}{char} | ||
| 25 | \DeclareMathOperator{\Frac}{Frac} | ||
| 26 | \DeclareMathOperator{\reduced}{red} | ||
| 27 | \DeclareMathOperator{\real}{Re} | ||
| 28 | \DeclareMathOperator{\imag}{Im} | ||
| 29 | \DeclareMathOperator{\vol}{vol} | ||
| 30 | \DeclareMathOperator{\den}{den} | ||
| 31 | \DeclareMathOperator{\rank}{rank} | ||
| 32 | \DeclareMathOperator{\lcm}{lcm} | ||
| 33 | \DeclareMathOperator{\rad}{rad} | ||
| 34 | \DeclareMathOperator{\ord}{ord} | ||
| 35 | \DeclareMathOperator{\Br}{Br} | ||
| 36 | \DeclareMathOperator{\inv}{inv} | ||
| 37 | \DeclareMathOperator{\Nm}{Nm} | ||
| 38 | \DeclareMathOperator{\Tr}{Tr} | ||
| 39 | \DeclareMathOperator{\an}{an} | ||
| 40 | \DeclareMathOperator{\op}{op} | ||
| 41 | \DeclareMathOperator{\sep}{sep} | ||
| 42 | \DeclareMathOperator{\unr}{unr} | ||
| 43 | \DeclareMathOperator{\et}{\acute et} | ||
| 44 | \DeclareMathOperator{\ev}{ev} | ||
| 45 | \DeclareMathOperator{\gl}{GL} | ||
| 46 | \DeclareMathOperator{\SL}{SL} | ||
| 47 | |||
| 48 | \newcommand{\grp}{\textsc{Grp}} | ||
| 49 | \newcommand{\set}{\textsc{Set}} | ||
| 50 | \newcommand{\x}{\mathbf{x}} | ||
| 51 | \newcommand{\naturalto}{\overset{.}{\to}} | ||
| 52 | \newcommand{\qbar}{\overline{\mathbb{Q}}} | ||
| 53 | \newcommand{\zbar}{\overline{\mathbb{Z}}} | ||
| 54 | |||
| 55 | \newcommand{\pro}{\mathbb{P}} | ||
| 56 | \newcommand{\aff}{\mathbb{A}} | ||
| 57 | \newcommand{\quat}{\mathbb{H}} | ||
| 58 | \newcommand{\rea}{\mathbb{R}} | ||
| 59 | \newcommand{\kiu}{\mathbb{Q}} | ||
| 60 | \newcommand{\F}{\mathbb{F}} | ||
| 61 | \newcommand{\zee}{\mathbb{Z}} | ||
| 62 | \newcommand{\ow}{\mathcal{O}} | ||
| 63 | \newcommand{\mcx}{\mathcal{X}} | ||
| 64 | \newcommand{\mcy}{\mathcal{Y}} | ||
| 65 | \newcommand{\mcs}{\mathcal{S}} | ||
| 66 | \newcommand{\mca}{\mathcal{A}} | ||
| 67 | \newcommand{\mcb}{\mathcal{B}} | ||
| 68 | \newcommand{\mcf}{\mathcal{F}} | ||
| 69 | \newcommand{\mcg}{\mathcal{G}} | ||
| 70 | \newcommand{\mct}{\mathcal{T}} | ||
| 71 | \newcommand{\mcq}{\mathcal{Q}} | ||
| 72 | \newcommand{\mcr}{\mathcal{R}} | ||
| 73 | \newcommand{\adl}{\mathbf{A}} | ||
| 74 | \newcommand{\mbk}{\mathbf{k}} | ||
| 75 | \newcommand{\m}{\mathfrak{m}} | ||
| 76 | \newcommand{\p}{\mathfrak{p}} | ||
| 77 | |||
| 78 | \newcommand{\kbar}{\overline{K}} | ||
| 79 | \newtheorem{lemma}{Lemma} | ||
| 80 | |||
| 81 | \author{Sebastiano Tronto} | ||
| 82 | \title{On the Second Condition of Theorem 5.2 ($\ell=2$)} | ||
| 83 | |||
| 84 | \begin{document} | ||
| 85 | |||
| 86 | \maketitle | ||
| 87 | |||
| 88 | \textbf{Question:} is Lemma 1 of Lang's \emph{Elliptic Curves Diophantine Analysis}, Chapter 5 Section 5, page 117 (References/Kummer theory/LANG-book-EC.pdf) consistent with Jones-Rouse's Theorem 5.2, i.e. can we deduce that $F(\beta_1)$ is partially contained in $F(A[2])$ already? | ||
| 89 | |||
| 90 | I believe the answer is no. Lang is working over a base field that contains all the $\ell^\infty$ torsion of $A$, so it doesn't apply in our case (J\&R assume surjectivity of the torsion part). | ||
| 91 | |||
| 92 | A counterexample is actually given by J\&R right after the proof of the theorem (``Remark''). They don't say explicitly that $\kiu(\beta_1)\cap \kiu(A[2])=\kiu$ in this case, but I have tested this with sage (see the file \texttt{2-division-counterex.sage}): $\kiu(\beta_1)$ has degree $24$ over $\kiu$ and $\kiu(A[2])$ has degree $2$, which together imply that $[\kiu(A[2],\beta_1):\kiu(A[2])]\geq 4$, so it is maximal. | ||
| 93 | |||
| 94 | The file \texttt{2-division.sage} contains some code that looks for other counterexamples (varying the parameters of a short Weierstrass equation), but it is quite slow (about 3 minutes on my pc for each elliptic curve of which it computes the 4-torsion field). | ||
| 95 | |||
| 96 | \end{document} \ No newline at end of file | ||
