Homeに戻る  一覧に戻る 

Rational Points and Integral Points on Elliptic Curve: y^2=x^3+17


[2003.02.16]y^2=x^3+17の有理点と整点


■楕円曲線
     E: y2=x3+17
の有理点を求める。
ここで、17は素数である。

■楕円曲線Eの判別式 Δ,j-不変量 j,conductor Nは、それぞれ、
     Δ = -124848 = -24・33・172
     j = 0
     N = 10404
である。

■楕円曲線Eは、自明なねじれ点群を持つ。
つまり、Eのねじれ点群は、
     E(Q)tors = {O}
である。

■楕円曲線Eの有理点群のrankは、2であることが分かる。
Cremonaのmwrank3によって、このように有理点群の生成元P1(-2,3), P2(4,9)が見つかる。よって、
     E(Q) = Z2
である。

■他の有理点を計算してみる。
有理整数 i,j ∈ {0,±1,±2,±3}に対して、iP1+jP2を求めると、このようになる。

これらの有理点の中で、Eの整点(P(x,y) ∈ Eで, x,y ∈ Zとなるもの)は、以下の16個である。

     (-2,3) = P1,
     (-2,-3) = -P1,
     (4,9) = P2,
     (4,-9) = -P2,
     (2,5) = P1-P2,
     (2,-5) = -P1+P2,
     (-1,4) = -P1-P2,
     (-1,-4) = P1+P2,
     (8,23) = -2P1,
     (8,-23) = 2P1,
     (43,282) = P1-2P2,
     (43,-282) = -P1+2P2,
     (52,375) = 2P1+P2,
     (52,-375) = -2P1-P2,
     (5234,378661) = P1+3P2,
     (5234,-378661) = -P1-3P2

■楕円曲線Eは、上記の16点以外に整点を持たないことを、[4]の方法によって証明する。
一般に、楕円曲線
     C: Y2+a1XY+a3Y = X3+a2X2+a4X+a6 ----- (1)
の全ての整点(X,Y) ∈ Z2を計算する。
ここで、a1,a2,a3,a4,a6は、有理整数とする。
適当な線形変換
     X = u2x+v, Y = u3y+wu2x+z ----- (2)
(u,v,w,z ∈Q, u!=0)により、以下の形式
     C': y2 = f(x) ----- (3)
     f(x) = x^3+ax+b -------- (4)
になるとする。
3次方程式 f(x) = 0の最大の実数根をγとする。 ------ (*)

ここで、楕円曲線Eについて適用するには、a1=a2=a3=a4=0,a6=17; a=0, b=17; u=1, v=0, w=0, z=0とすれば良い。

任意のP ∈ E(Q)に対して、有理整数m1,m2が存在して、
     P = m1P1+m2P2 ------ (5)
となる。
f(x)=x3+17=0の根は、実数根γ=-17(1/3)の1個と、虚数根γ'=γ*(-1+sqrt(-3))/2, γ''=γ*(-1-sqrt(-3))/2の2個である。
x < γの範囲では、f(x) < 0となるので、(X,Y)がEの整点ならば、X >= γとして良い。
     E0(R)={ P ∈ E∩R2 | X(P) >= γ}∪{O},
     ω = 2∫γ(dt/sqrt{f(t)}),
     τ = ω21, Imag(τ) > 0
として、isomorphism φ:E0(R)→R/Zを以下のように定義する。
     φ(P) = 0 (mod 1)          if P=O
             = (1/ω)∫x(P)(dt/sqrt{f(t)}) (mod 1)          if y(P) >= 0
             = -φ(-P) (mod 1)          if y(P)<0

ここで一般性を失わず、φ(P) ∈ [0,1)として良い。
|φ(P)|の上限をm1,m2のみに依存する形で計算する。 この結果より、φ(P1),φ(P2)の線形形式の上限を与えることができる。
また、楕円logarithmsの線形形式に対するDavidの下限を合わせることにより、max{|m1|,|m2|}の上限を計算することができる。

h^をcanonical(N\'eron-Tate) height、<P,Q>をN\'eron-Tate(Weil) pairing、つまり、
     <P,Q> = h^(P+Q) - h^(P)-h^(Q)
とする。(5)より、
     h^(P) = (1/2)Σ1<=i,j<=2<Pi,Pj>mimj --------- (6)
となる。また、2x2行列 H=((1/2)<Pi,Pj>)は正定値(positive definite)である。

■不等式1
P ∈ E(Q)が(5)で表現されるとすると、
     h^(P) >= c1 max{|m1|2,|m2|2} ------- (7)
である。

ここで、対称行列Hの固有値をλ12とすると、c1=min{λ12}とすれば良い。
[pari/gpによる計算]
gp> read("c12.gp");
time = -7 ms.
gp> e=ellinit([0,0,0,0,17])
%2 = [0, 0, 0, 0, 17, 0, 0, 68, 0, 0, -14688, -124848, 0, Vecsmall([1]), [Vecsmall([128, -1])], [0, 0, 0, 0, 0, 0, 0, 0]]
gp> p1=[-2,3];p2=[4,9];
gp> H=HH2(e,p1,p2)
time = 1 ms.
%4 =
[0.22730843259210531342789892272928340860 0.045327867360049331407608408905870356973]

[0.045327867360049331407608408905870356973 0.39458799039063275184565267442716094609]

gp> dd=matdet(H-x*matid(2))
%5 = x^2 - 0.62189642298273806527355159715644435468*x + 0.087638562055953218490409274709330900224
gp> rr=polroots(dd)
%6 = [0.21581552429223675652544992544388258970 + 0.E-38*I, 0.40608089869050130874810167171256176498 + 0.E-38*I]~
gp> c1=min(real(rr[1]),real(rr[2]))
%7 = 0.21581552429223675652544992544388258970

■不等式2
3次方程式 f(x) = 0の3根をγ,γ',γ''とし、
     c2 = 2*max{|γ|,|γ'|,|γ''|}
とする。任意のx >= c2に対して、
     |∫x(dt/sqrt{f(t)})| <= 4*sqrt(2)|x|-1/2 --------- (8)
となる。

[pari/gpによる計算]
gp> c2=2*17^(1/3)
%8 = 5.1425631813164707109063744174794522329

■不等式3
u,v,γを(1),(2),(3),(4),(*)で定義されたものとする。
X0を正の有理整数で、X0 > vとする。
     c0 = log|u|          if v <= 0,
         = log|u|+(1/2)*v/(X0-v)      if v > 0,
     c3 = c0+(1/12)*log|Δ|+(1/12)*log+|j|+(1/2)*log+|b2/12|+(1/2)*log 2*+1.07,
とする。
ここで、Δは(1)でQ上定義された楕円曲線Cの判別式、jはCのj-不変量、
     log+|α|=log max{1,|α|}, (α ∈ R)
     b2=a12+4a2
     2* = 1 if b2=0
         = 2 if b2!=0
である。
このとき、任意のP ∈ E(Q), X(P) >= X0に対して、
     x(P) > 0,
     h^(P)-(1/2)*log x(P) <= c3 ------ (9)
となる。

[pari/gpによる計算]
gp> c0=log(1)
%9 = 0.E-38
gp> c3=cc3(c0,e)
%10 = 2.3944779466430178607380938467579663222

■不等式1,2,3より、
     |φ(P)|=|(1/ω)∫x(P)(dt/sqrt{f(t)})| <= (4*sqrt(2)/ω)|x(P)|-1 <= (4*sqrt(2)/ω)exp(c3-c1M2) ----------- (10)
を得る。

■主不等式
P ∈ E0(R) iff x(P) >= γ iff X(P) >= u2γ+v なので、不等式2,3を満たすために、
     X0 = floor(max{c2,u2γ+v,v})+1
とする。

     r = rank(E) = 2,
     M = max1<=i<=r|mi|,
     t0 = max{ order(T) | T ∈ E(Q)tors} = order(O) = 1
     hE = max{1,h(a/4,b/16),h(jE)} = max{1,h(0,17/16), h(0)} = log(17)
     Ai >= max{h^(Ri),hE,(3πui2)/(|ω1|2Imag(τ)) ,(i=0,1,...,r)
     ui = ωφ(Pi), (i=1,...,r)
     e <= ε <= mini=0,...,r{(e|ω1|sqrt(AiImag(τ)))/(|ui|sqrt(3π))}
とする。
     M2 < c3c1-1+c1-1log(4*sqrt(2))+c4c1-1(log M+c7)(log log M+c8)r+2 ------- (11)
となる。ここで、
     c4 = 2*107r+15*(2/e)2(r+1)2*(r+2)4r2+18r+14*(log ε)-2r-3i=0rAi,
     c5 = logε,
     c6 = logε+hE,
     c7 = c0+log(t0r)+(2t0-1)/(16t0r),
     c8 = c6+(log(t0r)+(2t0-1)/(16t0r))/ log 16
である。

[pai/gpによる計算]
gp> X0=floor(c2)+1
%11 = 6
gp> c0=cc0(X0,1,0)
%12 = 0.E-38
gp> c3=cc3(c0,e)
%13 = 2.3944779466430178607380938467579663222
gp> he=log(17)
%14 = 2.8332133440562160802495346178731265356
gp> om=omega_pe(0,17)
%15 = [2.6233174904174137635580923113118028556 + 1.5145730592623473433451906579970014158*I, 2.6233174904174137635580923113118028556 - 1.5145730592623473433451906579970014158*I]
gp> om1=om[1]
%16 = 2.6233174904174137635580923113118028556 + 1.5145730592623473433451906579970014158*I
gp> om2=om[2]
%17 = 2.6233174904174137635580923113118028556 - 1.5145730592623473433451906579970014158*I
gp> tau=om2/om1
%18 = 0.50000000000000000000000000000000000000 - 0.86602540378443864676372317075293618348*I
gp> tau=conj(tau)
%19 = 0.50000000000000000000000000000000000000 + 0.86602540378443864676372317075293618348*I
gp> u0=2*real(om1)
%20 = 5.2466349808348275271161846226236057113
gp> u1=phi(e,p1,10^30)
%21 = 0.86554203920561993191186561636905961678
gp> u2=phi(e,p2,10^30)
time = 7 ms.
%22 = 0.37463995387117652876138454906604372753
gp> imtau=imag(tau)
%23 = 0.86602540378443864676372317075293618348
gp> A0=AA(e,[0],he,om)
%24 = 7.2551974569368714023763130305686229291
gp> A1=AA(e,p1,he,om)
%25 = 5.4353256493772460443233030673891354694
gp> A2=AA(e,p2,he,om)
%26 = 2.8332133440562160802495346178731265356
gp> eb=eeb2(e,p1,p2,A0,A1,A2,om)
time = 1 ms.
%27 = 2.2194678189347779213019302896307597563
gp> c4=cc4(2,eb,A0*A1*A2)
%28 = 17478323333544.008007830247757802753741
gp> c5=log(eb)
%29 = 0.79726744594591780901099344226782543171
gp> c6=log(eb)+he
%30 = 3.6304807900021338892605280601409519673
gp> c7=c5+log(2)+1/32
%31 = 1.5216646265058631184282255637260019998
gp> c8=c6+(log(2)+1/32)/log(16)
%32 = 3.8917518450090789158805274717112792496
gp> g(m)=m^2-(c3/c1+log(4*sqrt(2))/c1+(c4/c1)*(log(m)+c7)*(log(log(m))+c8)^4)
%33 = (m)->m^2-(c3/c1+log(4*sqrt(2))/c1+(c4/c1)*(log(m)+c7)*(log(log(m))+c8)^4)
gp> gdash(m)=2*m-(c4/c1)*((1/m)*(log(log(m))+c8)^4+(log(m)+c7)*3*(log(log(m))+c8)^2*(1/log(m))*(1/m))
%34 = (m)->2*m-(c4/c1)*((1/m)*(log(log(m))+c8)^4+(log(m)+c7)*3*(log(log(m))+c8)^2*(1/log(m))*(1/m))
gp> nn(x)=x-g(x)/gdash(x)
%35 = (x)->x-g(x)/gdash(x)
gp> x=10^100;for(i=1,350,x=nn(x);print(x))
5.0000000000000000000000000000000000000 E99
2.5000000000000000000000000000000000000 E99
1.2500000000000000000000000000000000000 E99
6.2500000000000000000000000000000000000 E98
3.1250000000000000000000000000000000000 E98
.........
19725572808.280512589745934595213155738
9988584015.8827657243634860147800907520
5232092045.5853021854607952534836123629
3051871569.2656958607284847654153602537
2250978339.4595775957702035119300771148
2096478516.4068152107287186085146488684
2088721263.3378026485652324886650380177
2088611461.6261156720128960217546045517
2088610115.2719844971075987006679036025
2088610098.7995662146192648757302153215
2088610098.5980343477165340581015686536
2088610098.5955687061023524410670008996
2088610098.5955385402102852229872486124
2088610098.5955381711456819439596695366
2088610098.5955381666303610945078223303
2088610098.5955381665751184020568202875
2088610098.5955381665744425353419208411
2088610098.5955381665744342664506694937
2088610098.5955381665744341652849203610
2088610098.5955381665744341640472080141
2088610098.5955381665744341640320652225
2088610098.5955381665744341640318799580
2088610098.5955381665744341640318776914
2088610098.5955381665744341640318776636
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
2088610098.5955381665744341640318776633
time = 41 ms.
主不等式(11)より、
     M < 2088610098.5955381665744341640318776633
であることが分かる。
しかし、ここで求めたMの上限は大き過ぎるので、LLL-algorithmによって、上限を下げる。

■不等式(10),(11)を単純に、
     |φ(P)| < K1exp(-K2M2), M < K3 ------- (12)
と書くことができる。
ここで、
     K1 = (4*sqrt(2)/ω)*exp(c3),
     K2 = c1,
     K3 = 2088610098.5955381665744341640318776633
である。

[pari/gpによる計算]
gp> K1=(4*sqrt(2)/(2*real(om1)))*exp(c3)
%39 = 11.819597783980697106662816009654784145
gp> K2=c1
%40 = 0.21581552429223675652544992544388258970
gp> K3=2088610098.5955381665744341640318776633
%41 = 2088610098.5955381665744341640318776633
gp> KK0(2,1,K3)
%42 = 1071245432277887099855989678277.1971978
K0 > (4*sqrt(6)*K3)3 ≒ 1071245432277887099855989678277.1971978より、K0=1060とする。

3x3行列Aを
     A=(1   0   0; 0   1   0; [K0φ(P1)]  [K0φ(P2)]  K0)
とする。


AにLLL-algorithmを適用して、reduced basis {b1,b2,b3}を求めると、
     b1 = [ -70475746623708196631, 7701214635141795726, 58114538751561424543]t
となる。
(m1,m2,m0) ∈ Z3, |mi| < K3 (i=0,1,2)とする。
l=A([m1,m2,m0]t)に対して、
     ||l||2 <= 22K32+(K0|φ(P)|+2K3)2 ------ (13)
である。他方、LLLより、
     ||b1||2 <= 22||l||2
K32+(K0|φ(P)|+2K3)2 ----- (14)
(13),(14)より、
     K0|φ(P)| >= sqrt(2-2*||b1||2-2K32)-2K3 ------ (15)
(12),(15)より、
     ||b1|| >= 2K3sqrt(6) ----- (16)
ならば、
     M2 <= K2-1(log(K0K1) - log(2-2*||b1||2-2K32)-2K3) ------ (17)
が成立する。

[pari/gpによる計算]
gp> K0=10^60
%44 = 1000000000000000000000000000000000000000000000000000000000000
gp> default(realprecision,200)
gp> a1=floor(K0*phi(e,p1,K0))
time = 1 ms.
%46 = 865542039205619931911865616369086856962425596287300768113755
gp> a2=floor(K0*phi(e,p2,K0))
time = 1 ms.
%47 = 374639953871176528761384549066010909420742028345692613161291
gp> aaa=[1,0,0;0,1,0;a1,a2,K0]
%48 =
[1 0 0]

[0 1 0]

[865542039205619931911865616369086856962425596287300768113755 374639953871176528761384549066010909420742028345692613161291 1000000000000000000000000000000000000000000000000000000000000]

gp> bbb=qflll(aaa,1)
%49 =
[-70475746623708196631  25543021354698846409  2379011618456324075]

[  7701214635141795726  76551398571894473881 -2781935340870325397]

[ 58114538751561424543 -50787771220567330559 -1016910439756294520]

gp> b1n=nr(bbb)
%50 = 91670274262338573824.628915233226416135878418838866157263262261818476392563177918522353096171085428100364428931638434788334635347740168734282060540923111586959196323181917506291285638997662712679068140
gp> b1n-2*K3*sqrt(6)
%51 = 91670274252106515798.2626491714518974807636117213465706021
gp> M2=(1/K2)*(log(K0*K1)-log(sqrt(b1n^2/4-2*K3^2)-2*K3))
%52 = 441.827724016926803793296981425911888591
gp> sqrt(M2)
%53 = 21.0196984758803522612738611447180116583

よって、
     M <= 21
が得られた。
次に、K3=21, K0=1010, A=[1,  0,  0;  ; 0,  1,  0   ; [K0*φ(P1)]  [K0*φ(P2)]  K0]として、再度、LLL-algorithmを適用する。
[pari/gpによる計算]
gp> default(realprecision,35)
gp> K3=21
%57 = 21
gp> KK0(2,1,K3)
%58 = 1088866.7763799205936354422951608605
gp> K0=10^10;
gp> a1=floor(K0*phi(e,p1,K0))
%60 = 8655420392
gp> a2=floor(K0*phi(e,p2,K0))
%61 = 3746399538
gp> aaa=[1,0,0;0,1,0;a1,a2,K0]
%62 =
[         1          0           0]

[         0          1           0]

[8655420392 3746399538 10000000000]

gp> bbb=qflll(aaa,1)
%63 =
[-1781   501 -746]

[  610  1768 -887]

[ 1313 -1096  978]

gp> b1n=nr(bbb)
%64 = 2295.2189438047081437738998312510800
gp> b1n-2*K3*sqrt(6)
%65 = 2192.3403746078146636496139001134326
gp> M2=(1/K2)*(log(K0*K1)-log(sqrt(b1n^2/4-2*K3^2)-2*K3))
%66 = 85.664854937348514177354049118657563
gp> sqrt(M2)
%67 = 9.2555310456693144937696045093373409

よって、
     M <= 9
が得られた。

■最後に、|m1|,|m2| <= 9について、P=m1P1+m2P2が整点かどうかを確認する。

[pari/gpによる計算]
gp> for(i=-9,9,for(j=-9,9,p=elladd(e,ellpow(e,p1,i),ellpow(e,p2,j));if((i!=0||j!=0)&&denominator(p[1])==1&&denominator(p[2])==1,print(p))))
[52, -375]
[8, 23]
[5234, 378661]
[-1, 4]
[-2, -3]
[2, -5]
[43, -282]
[4, -9]
[4, 9]
[43, 282]
[2, 5]
[-2, 3]
[-1, -4]
[5234, -378661]
[8, -23]
[52, 375]
time = 7 ms.

よって、楕円曲線Eの整点は、
     (-2,±3), (-1,±4), (2,±5), (4,±9), (8,±23), (43,±282), (52,±375), (5234,±378661)
の16個に限る。

[2004.08.22追記]
■SIMATH-4.7(simcalc)を使って、楕円曲線Eの整点を求める。
simcalcによると、楕円曲線EのMordell-Weil群E(Q)のrankは2であり、その生成元は、(-2,3),(4,9)である。
また、楕円曲線Eの整点(x,y)を(Pと-Pを同一視して)求めると、
     (-2,3), (-1,4), (2,5), (4,9), (8,23), (43,282), (52,375), (5234,378661)
の8個となる。それぞれを(-1)倍した点も整点なので、楕円曲線Eは全部で2*8=16個の整点を持つ。

[simcalcによる計算]
bash-2.03$ simcalc

            *****                                            ****
            *****                                            ****
                                                             ****
*********** ***** ***************** *********** ***********  ****  ***********
*********** ***** ***************** *********** ***********  ****  ***********
***          ****  ****  ****  **** ****   ****         ***  ****  ****   ****
***********  ****  ****  ****  **** ****        ***********  ****  ****
***********  ****  ****  ****  **** ****        ***********  ****  ****
        ***  ****  ****  ****  **** ****   **** ***     ***  ****  ****   ****
*********** ***** ***** ***** ***** *********** ************ ***** ***********
*********** ***** ***** ***** ***** *********** ************ ***** ***********

                                                      version 4.5, 15 Mar 2000

Type "?help" for more information.

Type "?helpfunc" for more information about functions in simcalc.

Type "?NEW" for information about new functions in simcalc.

> E=EC(0,17)
            simcalc in free(): warning: junk pointer, too high to make sense.
         E = EC(0, 17)
> faintp(E)
  all nontrivial integral points modulo negation :
  PT(-2, 3, 1) = PT(0, 1, 0) + PT(-2, 3, 1) + 0*PT(4, 9, 1)
  PT(8, 23, 1) = PT(0, 1, 0) - 2*PT(-2, 3, 1) + 0*PT(4, 9, 1)
  PT(2, 5, 1) = PT(0, 1, 0) + PT(-2, 3, 1) - PT(4, 9, 1)
  PT(4, 9, 1) = PT(0, 1, 0) + 0*PT(-2, 3, 1) + PT(4, 9, 1)
  PT(-1, 4, 1) = PT(0, 1, 0) - PT(-2, 3, 1) - PT(4, 9, 1)
  PT(52, 375, 1) = PT(0, 1, 0) + 2*PT(-2, 3, 1) + PT(4, 9, 1)
  PT(43, 282, 1) = PT(0, 1, 0) + PT(-2, 3, 1) - 2*PT(4, 9, 1)
  PT(5234, 378661, 1) = PT(0, 1, 0) - PT(-2, 3, 1) - 3*PT(4, 9, 1)
 
simcalc in free(): warning: junk pointer, too high to make sense.
         @ = PT(-2, 3, 1)
> basismwg(E)
               basis :  PT(-2, 3, 1)
           PT(4, 9, 1)
simcalc in free(): warning: junk pointer, too high to make sense.
         @ = 2
> quit
 
 
                                    B Y E
 
 


***   # GCs: 141      GC time: 0.02 s   # collected cells: 2158340      ***
***   # blocks: 1     block size: 16383 # free cells:      2385         ***
***   total CPU time: 1.95 s                                            ***

[2021.03.13追記]
"c1-c8,楕円対数の計算プログラム(pari/gp)"の関数eeb1(),eeb2(),eeb3()の誤りを修正し、計算結果を見直し、訂正した。


[参考文献]


Last Update: 2021.03.18
H.Nakao

Homeに戻る[Homeに戻る]  一覧に戻る[一覧に戻る]