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分に満たない) 見付かるのはすごいです。

    注. 任意の楕円曲線に対して、 上の手続きで必ず有理点が見付かる訳ではありません (もしそうだったら大変なことです)。 また、一本道でもなく、いろいろと試行錯誤が行われています。


    [戻る]