Homeに戻る  一覧に戻る 

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


[2003.03.09]y^2=x^3-9x+9の有理点と整点


■楕円曲線
     E: Y2=X3-9X+9 ------ (1)
の有理点を求める。

■楕円曲線Eの判別式 Δ,j-不変量 j,conductor Nは、それぞれ、
     Δ = 11664
     j = 6912
     N = 324
である。
[pari/gpによる計算]
gp> read("c12.gp");
time = 3 ms.
gp> e=ellinit([0,0,0,-9,9])
%2 = [0, 0, 0, -9, 9, 0, -18, 36, -81, 432, -7776, 11664, 6912, Vecsmall([1]), [Vecsmall([128, 1])], [0, 0, 0, 0, 0, 0, 0, 0]]
gp> e.j
%3 = 6912
gp> e.disc
%4 = 11664
gp> ellglobalred(e)
time = 1 ms.
%5 = [324, [1, 0, 0, 0], 9, [2, 2; 3, 4], [[2, 4, 0, 3], [4, 4, 0, 3]]]

■楕円曲線Eのねじれ点群は、Z/3Zである。
Eのねじれ点群は、位数3の点T(3,3)で生成される。よって、
     E(Q)tors = {(3,3), (3,-3), O}
である。
[pari/gpによる計算]
gp> elltors(e)
time = 1 ms.
%6 = [3, [3], [[3, 3]]]
gp> for(i=1,3,print(ellpow(e,[3,3],i)))
[3, 3]
[3, -3]
[0]

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

■楕円曲線Eの全ての整点を、[4]の方法によって求める。
u=1,v=0とする。
以下の形式
     C: y2 = f(x) ----- (3)
     f(x) = x^3-9x+9 -------- (4)
を得る。
3次方程式 f(x) = 0の最大の実数根をγとする。 ------ (*)

任意のP ∈ E(Q)に対して、有理整数m1,m0(m0=0,1,2)が存在して、
     P = m1P1+m0T ------ (5)
となる。
f(x)=x3-9x+9=0の根は、3個の実数(いずれも無理数)であり、
     γ ≒ 2.2266815969056774658116518081880925319,
     γ' ≒ 1.1847925309040953727013520475722037559,
     γ''≒ -3.4114741278097728385130038557602962877
である。

(X,Y)がEの整点であるとする。
f(X) > 0 iff (X > γ または γ'' < X < γ')

γ'' < X < γ'なる整点(X,Y)は、以下の6個である。
     (-3,±3),(0,±3),(1,±1) ------ (**)

よって、X > γの範囲で、Eの整点(X,Y)を求める。
gp> f(x)=x^3-9*x+9
%8 = (x)->x^3-9*x+9
gp> poldisc(f(x))
%9 = 729
gp> rr=polroots(f(x))
time = 1 ms.
%10 = [-3.4114741278097728385130038557602962877 + 0.E-38*I, 1.1847925309040953727013520475722037559 + 0.E-38*I, 2.2266815969056774658116518081880925319 + 0.E-38*I]~
gp> factor(f(x))
%11 =
[x^3 - 9*x + 9 1]

gp> for(x=-3,1,y2=f(x);y=floor(sqrt(y2));if(y^2==y2,print([x,y])))
[-3, 3]
[0, 3]
[1, 1]

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

[pari/gpによる計算]
gp> p0=[0];p1=[1,1];
gp> H=[ellbil(e,p1,p1)/2]
time = 2 ms.
%14 = [0.19381229745213809525921982930882617954]
gp> dd=H[1]-x
%15 = -x + 0.19381229745213809525921982930882617954
gp> ww=polroots(dd)
%16 = [0.19381229745213809525921982930882617954 + 0.E-38*I]~
gp> c1=real(ww[1])
%17 = 0.19381229745213809525921982930882617954

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

[pari/gpによる計算]
gp> c2=2*max3(real(rr[1]),real(rr[2]),real(rr[3]))
%18 = 4.4533631938113549316233036163761850637

■不等式3
u=1,v=0とする。
X0を正の有理整数で、X0 > vとする。
このとき、任意のP ∈ E(Q), X(P) >= X0に対して、
     x(P) > 0,
     h^(P)-(1/2)*log x(P) <= c3 ------ (9)
となる。

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

■不等式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
とする。

     M2 < c3c1-1+c1-1log(4*sqrt(2))+c4c1-1(log M+c7)(log log M+c8)r+2 ------- (11)
となる。

[pai/gpによる計算]
gp> X0=floor(max(c2,real(rr[3])))+1
%21 = 5
gp> factor(e.j)
%22 =
[2 8]

[3 3]

gp> he=log(2^8*3^3)
%23 = 8.8410143104838915495235926824329896586
gp> om=omega_pe(-9,9)
time = 1 ms.
%24 = [3.8631214143557614516166940465125382404, 2.7829865545757840778236284423749492283*I]
gp> om1=om[1];om2=om[2];
gp> A0=AA(e,p0,he,om)
%26 = 8.8410143104838915495235926824329896586
gp> A1=AA(e,p1,he,om)
time = 1 ms.
%27 = 8.8410143104838915495235926824329896586
gp> eb=eeb1(e,p1,A0,A1,om)
%28 = 2.2345822263926554040345106999159255058
gp> c4=cc4(1,eb,A0*A1)
%29 = 7414567415.6747341251883459667324367321
gp> c5=cc5(eb)
%30 = 0.80405428727894394974711911635144018809
gp> c6=cc6(c5,he)
%31 = 9.6450685977628354992707117987844298466
gp> c7=cc7(c6,1,3)
%32 = 10.847847553097611857332623702373622218
gp> c8=cc8(c6,1,3)
%33 = 10.078879406299607966700811240005808248
gp> g(m)=m^2-(c3/c1+log(4*sqrt(2))/c1+(c4/c1)*(log(m)+c7)*(log(log(m))+c8)^3)
%34 = (m)->m^2-(c3/c1+log(4*sqrt(2))/c1+(c4/c1)*(log(m)+c7)*(log(log(m))+c8)^3)
gp> gdash(m)=2*m-(c4/c1)*((1/m)*(log(log(m))+c8)^3+(log(m)+c7)*3*(log(log(m))+c8)^2*(1/log(m))*(1/m))
%35 = (m)->2*m-(c4/c1)*((1/m)*(log(log(m))+c8)^3+(log(m)+c7)*3*(log(log(m))+c8)^2*(1/log(m))*(1/m))
gp> nn(x)=x-g(x)/gdash(x)
%36 = (x)->x-g(x)/gdash(x)
(19:03) 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
..........
9818290101.2922701458686412163712543148
4909294260.0730783523447903335625544275
2454937265.6511348949306547208375519631
1228032359.3047413405856672040422509626
615110348.48442458874805420395385108150
309674768.89031382200891571392551034769
158921553.56799479322865630946992866184
87190867.397174596625333538260227922642
57362639.317937801723366034689088853649
49392986.158446097924743885600058930694
48722080.504194625570174793151983014751
48717236.361919766609883749094223365166
48717236.109248101045416449069652394420
48717236.109248100357972660981783452464
48717236.109248100357972660981783447375
48717236.109248100357972660981783447375
48717236.109248100357972660981783447375
48717236.109248100357972660981783447375
48717236.109248100357972660981783447375
..........
48717236.109248100357972660981783447375
48717236.109248100357972660981783447375
48717236.109248100357972660981783447375
time = 37 ms.
主不等式(11)より、
     M < 48717236.109248100357972660981783447377
であることが分かる。
しかし、ここで求めたMの上限は大き過ぎるので、LLL-algorithmによって、上限を下げる。

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

[pari/gpによる計算]
gp> K3=48717236.109248100357972660981783447377
%48 = 48717236.109248100357972660981783447377
gp> K1=4*sqrt(2)/(2*real(om1))*exp(c3)
%49 = 102.69147357816399283223572978830179767
gp> K2=c1
%50 = 0.19381229745213809525921982930882617954
gp> K1=4*sqrt(2)/(2*real(om1))*exp(c3)
%51 = 13.762193689699751527898183529050791579
gp> KK0(1,3,K3)
%52 = 85441287388472171.543420087220746570522
K0=1030, A=[1,  0 ; [K0*φ(P1)]  K0] にLLL-algorithmを適用して、reduced basis {b1,b2}を求めると、
     b1 = [ -645251705169619, 128496873025805]t
となる。このとき、
     ||b1|| >= 2(1/2)*3*K3*sqrt(2) = 6*K3 ----- (16)
ならば、
     M2 <= K2-1(log(K0K1) - log(2-3*3^(-2)*||b1||2-3*K32)-3*K3) ------ (17)
が成立する。

[pari/gpによる計算]
gp> K0=10^30
%53 = 1000000000000000000000000000000
gp> a1=floor(K0*phi(e,p1,K0))
time = 3 ms.
%54 = 199142244795814513314581226974
gp> aaa=[1,0;a1,K0]
%55 =
[                             1                               0]

[199142244795814513314581226974 1000000000000000000000000000000]

gp> bbb=qflll(aaa,1)
%56 =
[-645251705169619 -209707090068208]

[ 128496873025805   41761540665781]

gp> b1n=nr(bbb)
%57 = 657921887006132.95187861632127709909773
gp> b1n-2^(1/2)*3*K3*sqrt(2)
%58 = 657921594702716.29639001417344113320703
gp> M2=(1/K2)*(log(K0*K1)-log(sqrt(3^(-2)*b1n^2/2-3*K3^2)-3*K3))
%59 = 201.35232924703860524249712384945440576
gp> sqrt(M2)
%60 = 14.189867132818355084011064960193301991

よって、
     M <= 14
が得られた。
次に、K3=14, K0=106, A=[1,  0 ; [K0*φ(P1)]  K0] として、再度、LLL-algorithmを適用する。
[pari/gpによる計算]
gp> K3=14
%61 = 14
gp> KK0(1,3,K3)
%62 = 7055.9999999999999999999999999999999999
gp> K0=10^6
%63 = 1000000
gp> a1=floor(K0*phi(e,p1,K0))
time = 1 ms.
%64 = 199142
gp> aaa=[1,0;a1,K0]
%65 =
[     1       0]

[199142 1000000]

gp> bbb=qflll(aaa,1)
time = -8 ms.
%66 =
[-467 1165]

[  93 -232]

gp> b1n=nr(bbb)
%67 = 476.17013766089952062996741816998833658
gp> b1n-2^(1/2)*3*K3*sqrt(2)
%68 = 392.17013766089952062996741816998833658
gp> M2=(1/K2)*(log(K0*K1)-log(sqrt(3^(-2)*b1n^2/2-3*K3^2)-3*K3))
%69 = 63.071700183089325003824489836818864193
gp> sqrt(M2)
%70 = 7.9417693358022760571766746587899932532

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

■最後に、|m1| <= 7, m0=0,1,2について、P=m1P1+m0Tが整点かどうかを確認する。

[pari/gpによる計算]
gp> check1(7,e,p1)
[7, -17]
[1, -1]
[1, 1]
[7, 17]
There are 4 integral points.
time = 2 ms.
gp> check1t(7,e,p1,[3,3])
[15, 57]
[0, 3]
[3, 3]
[-3, 3]
There are 4 integral points.
gp> check1t(7,e,p1,[3,-3])
[-3, -3]
[3, -3]
[0, -3]
[15, -57]
There are 4 integral points.

(**)で求めたEの6個の整点は、全て上記に含まれる。
よって、楕円曲線Eの整点は、(-3,±3),(0,±3),(1,±1),(3,±3),(7,±17),(15,±57)の12個に限る。

[2004.08.22追記]
■SIMATH-4.6(simcalc)によって、楕円曲線Eの整点を求める。
simcalcによると、楕円曲線EのMordell-Weil群E(Q)のrankは1であり、その生成元は(-3,3)である。
また、楕円曲線Eの整点を(Pと-Pを同一視して)求めると、
     (-3,3), (3,3), (0,3), (1,1), (7,17), (15,57)
の6個となる。これらの点のそれぞれを(-1)倍した点も整点であるので、楕円曲線Eは合計6*2=12個の整点を持つ。

[simcalcによる計算]
> E=EC(0,0,0,-9,9)
                  simcalc in free(): warning: junk pointer, too high to make sense.
         E = EC(-9, 9)
> basismwg(E)
  basis :  PT(-3, 3, 1)
simcalc in free(): warning: junk pointer, too high to make sense.
         @ = 1
> faintp(E)
  all nontrivial integral points modulo negation :
  PT(3, 3, 1) = PT(3, 3, 1) + 0*PT(-3, 3, 1)
  PT(-3, 3, 1) = PT(0, 1, 0) + PT(-3, 3, 1)
  PT(0, 3, 1) = PT(3, -3, 1) - PT(-3, 3, 1)
  PT(1, 1, 1) = PT(3, -3, 1) + PT(-3, 3, 1)
  PT(15, 57, 1) = PT(0, 1, 0) - 2*PT(-3, 3, 1)
  PT(7, 17, 1) = PT(3, 3, 1) + 2*PT(-3, 3, 1)
 
simcalc in free(): warning: junk pointer, too high to make sense.
         @ = PT(3, 3, 1)

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


[参考文献]


Last Update: 2021.03.18
H.Nakao

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