非専門的シンギュラリティー研究所

無限に動き続けるシステムを表す方法を AI なども使って考えていきます。

BSD予想(3)

SageMath で数値実験をやる方法を説明してください

と ChatGPT で入力すると以下のような結果が返されました。

SageMathでバーチ・スウィンナートン=ダイアー予想(BSD予想)の数値実験を行う方法について、初心者にもわかる形で段階的に説明します。SageMathは楕円曲線、L関数、ランク、トーション群、Selmer群などを高レベルで扱えるので、数値実験には非常に適しています。

✅ 前提:SageMath を使える環境

以下のいずれかの方法で使えます:

🧪 数値実験の基本ステップ

楕円曲線を定義する

E = EllipticCurve([a, b])

例:曲線 $y^2 = x^3 - x$

E = EllipticCurve([0, -1])

② 曲線の基本情報を確認する

E.rank()                  # 有理点群のランク
E.torsion_order()         # トーション部分の位数
E.gens()                  # 有理点の生成元
E.discriminant()          # 判別式

③ L関数の評価と s=1 付近の挙動

L = E.lseries()           # L関数オブジェクトを取得
L(1)                      # L(E, 1) の値(数値近似)
L.derivative(1)           # L(E, s) の s=1 における導関数
L.analytic_rank()         # L関数の零点の階数(解析的ランク)

BSD予想に出てくる他の量も計算可能

E.regulator()             # レギュレーター(ランク > 0 の場合)
E.sha().order()           # シャファレヴィッチ=テイト群(予想値)
E.conductor()             # モジュラー性に関係する conductor

※ `E.sha()` を使うには `mwrank` がインストールされている必要がある場合があります。

🔁 まとめて一つのスクリプト

以下のコードは、BSD予想の数値的確認をする基本的な例です:

# 楕円曲線の定義(例: y^2 = x^3 - x)
E = EllipticCurve([0, -1])

# 基本情報
print("Discriminant:", E.discriminant())
print("Conductor:", E.conductor())
print("Torsion order:", E.torsion_order())
print("Rank:", E.rank())
print("Generators:", E.gens())

# L関数に関する情報
L = E.lseries()
print("L(E, 1):", L(1))
print("L'(E, 1):", L.derivative(1))
print("Analytic rank:", L.analytic_rank())

# BSD予想関連の値
print("Regulator:", E.regulator())
print("Sha (predicted order):", E.sha().order())

📌 BSD予想の数値的確認の意味

SageMath上で次のような一致が観察されれば、BSD予想が数値的に成り立っていると判断します:

項目 意味
`E.rank()` 有理点群のランク(代数的)
`L.analytic_rank()` L関数の零点の次数(解析的)
一致していれば BSD予想の主張の一部が確認できる

🧠 補足:実験対象の選び方

簡単な例(ランク0や1)から始めるのが良いです:

E0 = EllipticCurve([0, -1])     # ランク1
E1 = EllipticCurve([1, 1])      # ランク0(L(E, 1) ≠ 0)
E2 = EllipticCurve([2, 3])      # 高ランクの候補

🚀 興味があればさらに進められること

  • Selmer群の計算(`E.selmer_rank()`)
  • 点の高さ行列(`E.height_matrix()`)
  • Mod p 上での点の数(`E.cardinality(FiniteField(p))`)

SageMathで実際に数値実験を行ってみたい曲線があれば、それを指定してくだされば一緒にコードを書くこともできます。どの曲線でやってみたいですか?