MAGMA
そのうち初心者向けの内容も書くつもりですが、
とりあえず最近行った計算を紹介します。
何を計算しているのか、少し前置きが必要です。
完全直方体に関連した問題として、
与えられた有理数 n>1 に対して、次のような2つの直角三角形を作れるのか、
という問題があります (提唱者:John Leech)。
6つの辺は全て有理数。
底辺は共有する (すなわち長さが等しい)。
高さの比は 1:n である。
詳しい対応は述べませんが、このような2つの直角三角形を求めることは、
次の楕円曲線の無限位数の有理点を見付けることに帰着されます。
y^2=x(x+1)(x+n^2)
2005 年に発表されたある論文では、
この方程式のパラメータ解をいくつか求めた他、
具体的な自然数 n で有理点を求めていますが、
n=502, 808, 863 では解が見付からなかったそうです。
一般に、楕円曲線の有理点は非常に複雑なことが多く、
それを見付けることは数論的に重要な問題です。
このページでは y^2=x(x+1)(x+502^2) の有理点を求めています。
この手の計算では John Cremona の MWRANK がフリーソフトで有名ですが、
確かに見付かりません。
MAGMA に MordellWeilRank とか Generators という関数がありますが、
生成点が複雑な場合は、単にこれらの関数を用いても見付かりません。
以下では、4-descent method を用いて計算しています。
首都大学の整数論セミナーで、この方法が有効であることを聞きました。
% magma
Magma V2.12-19 Sat Aug 12 2006 19:12:30 [Seed = 2233231424]
Type ? for help. Type -D to quit.
> E:=EllipticCurve([0,502^2+1,0,502^2,0]);
> E;
Elliptic Curve defined by y^2 = x^3 + 252005*x^2 + 252004*x over Rational Field
> time td:=TwoDescent(E);
Time: 1.870
> td;
[
Hyperelliptic Curve defined by y^2 = 7561*x^4 + 179772*x^3 + 1098752*x^2 + 359544*x + 30244 over
Rational Field,
Hyperelliptic Curve defined by y^2 = 27961*x^4 + 89202*x^3 - 19285*x^2 - 144246*x + 73116 over
Rational Field,
Hyperelliptic Curve defined by y^2 = x^4 - 2004*x^3 + 1005008*x^2 + 1006008*x + 252004 over
Rational Field,
Hyperelliptic Curve defined by y^2 = x^4 - 126001*x^2 + 3969126001 over Rational Field,
Hyperelliptic Curve defined by y^2 = 42001*x^4 - 336004*x^3 + 504008*x^2 + 672008*x + 168004
over Rational Field,
Hyperelliptic Curve defined by y^2 = 11905*x^4 - 116644*x^3 + 302567*x^2 - 82568*x + 5965 over
Rational Field,
Hyperelliptic Curve defined by y^2 = x^4 + 2008*x^3 + 1005002*x^2 - 1006008*x + 251001 over
Rational Field
]
> time fd:=FourDescent(td[1]);
Time: 2.720
> #fd;
4
> time pts:=PointsQI(fd[1],10^6);
Time: 3.240
> pts;
[ (82426/54729 : 419347/36486 : 90935/109458 : 1), (-410076/319141 : -237380/319141 : -137155/319141
: 1), (-59316/31619 : 117359/63238 : -729217/63238 : 1), (1003527/454907 : -146561/454907 :
55394/454907 : 1) ]
> F,m:=AssociatedEllipticCurve(fd[1]);
> P:=m(pts[1]);
> P;
(1838934445748187447059907856063149711220819721931670804/218096901515563697467491912315510961988150\
62089121 : 16157618865691892222282545851695371948971404746410816155947890643214591448310554/1018530\
98061786394062280841498522767977468975574775968172708750336421405169 : 1)
> IsPoint(F,P[1]);
true (1838934445748187447059907856063149711220819721931670804/2180969015155636974674919123155109619\
8815062089121 : 16157618865691892222282545851695371948971404746410816155947890643214591448310554/10\
1853098061786394062280841498522767977468975574775968172708750336421405169 : 1)
> F;
Elliptic Curve defined by y^2 = x^3 - x^2 - 21168588004*x + 1185464448840004 over Rational Field
> IsIsomorphic(F,E);
true
> Isomorphism(F,E);
Elliptic curve isomorphism from: CrvEll: F to CrvEll: E
Taking (x : y : 1) to (x - 84002 : y : 1)
> X:=P[1]-84002;
> IsPoint(E,X);
true (6876853637149275593482294230394528327956876321328562/2180969015155636974674919123155109619881\
5062089121 : 16157618865691892222282545851695371948971404746410816155947890643214591448310554/10185\
3098061786394062280841498522767977468975574775968172708750336421405169 : 1)
> Y:=P[2];
> A:=(X+Y+502^2)*(X-Y+502^2)/(2*Y*(X+502^2));
> A;
96000801573655343302439881463030589217629518555443279096671686887537059682548216178475674368949560/\
199619707103669362081347285064562142615493882489510161520604337109098147819904323143717000757972151
細かい説明はしませんので、分かる人にしか分からないでしょうが、要するに、
n=502 のときに、最初に述べたような2つの直角三角形の共有辺として
a=96000801573655343302439881463030589217629518555443279096671686887537059682548216178475674368949560/
199619707103669362081347285064562142615493882489510161520604337109098147819904323143717000757972151
が求まりました (98桁割る99桁の分数。解は無数に存在するが、これが最も簡単なもの)。
a^2+1 と a^2+502^2 が確かに平方数であることを確かめてみて下さい。
このような大きな解が、ほとんどストレスなく (全体でかかった CPU 時間は1分に満たない)
見付かるのはすごいです。
注. 任意の楕円曲線に対して、
上の手続きで必ず有理点が見付かる訳ではありません (もしそうだったら大変なことです)。
また、一本道でもなく、いろいろと試行錯誤が行われています。
[戻る]