Sagemathで数学
この記事は
この記事はアドベントカレンダー「数学とコンピュータ」の12月13日の記事です. 前の記事は @n_kats_ さん https://qiita.com/n_kats_/items/99eb63e2ede23e05e059 ,次の記事は @mod_poppo さんhttps://qiita.com/mod_poppo です.
フリーの総合数学ソフトSagemathの紹介と,ちょっとしたデモをご覧いただきます.
Sagemathとは
Sagemath http://www.sagemath.org/ は,「Mathematica, Maple, Magma, Matlabなどを置き換えうるフリー の総合数学ソフトウェア」を目指して開発が進められているフリーソフトです.
このSagemath開発プロジェクトはW. Steinさんによってはじめられ,現在も活発な開発が続いています.
Sagemathの実態は,Python2に様々な既存の数学ソフトウェア・もしくはSagemathのために新規に開発された数学ソフトウェアを統合したものです.C/Fortranのライブラリとして取り込まれたもの(例えばLapack/linalg/pari...)が多いですが,例えばpexpectを使って,仮想端末越しに操作している例もあります.
Sagemathを使ってみたい
Sagemathのバイナリは,各種Linuxディストリビューション,Macのほか,Windows版も提供されています.かなり巨大なのでダウンロードには少し待ち時間がかかるでしょう.(ダウンロードサイト:http://www.sagemath.org/download.html )
自分のパソコンにインストールしなくても,Cocalcというサービス http://cocal.com を無料で使い始めることができます.このサービスを運営している sagemath.inc の代表は,Sagemathの開発者 W. Stein さんその人です.
Sagemathでなにができる?
Sagemathは,上述のように,著名な数学ソフトウェアを置き換えることを目標 に開発されています.ですから,そういったソフトウェアでできることはたい ていできます.
数値計算
数式処理(多項式や特殊関数の演算,式変形)
グラフィックス(グラフ,3d表示,レイトレーシング)
それだけではなく,Sagemathの開発者は数学,特に数論や組み合わせ論,幾何 学の研究者が多数参画しています.W. Steinさんが,モジュラー形式やアーベ ル多様体と呼ばれる対象の,特に数論的な性質を調べる分野(いわゆる数論幾 何)の専門家であることから,そういった方面に特化した計算が得意です. 例えば,
の計算が,「コマンド一発」で実行できます.
少し試してみましょう.
有限体
有限体の計算を,ElGamal暗号の素朴な実装をしながら見てみましょう.まず,を, も素数,の形に取りたいので,探してみます.
すると,が公開鍵,が秘密鍵.
暗号化:平文 に対して をランダムに取って, で定まる が暗号文.
復号化:暗号文 に対して,.
無事平文が得られていることがわかります.秘密鍵 が離散対数の計算で分かってしまうと台無しですが,このくらいの大きさでは簡単に計算できてしまいます:
代数体
虚2次体の類数
虚2次体の類数の計算からはじめます.類数が9で割り切れるものを列挙してみましょう.そして,類数が9で割り切れるということは,イデアル類群が位数9の巡回群もしくは(3,3)型の有限アーベル群を部分群として含むと言うことですが,どちらなのかを見てみましょう.
実は,虚2次体のイデアル類群の Sylow群は,同じ位数なら巡回群の方がより頻繁に起きるという経験則がしられています.これを定式化したものがCohen-Lenstra予想で,現在でも未解決です.
判別式の絶対値が500以下の虚2次体で,類数が9で割り切れるものを列挙.
上で計算した類数が9で割り切れる虚2次体のイデアル類群を列挙すると,どれも位数9の巡回群.
さて,ちょっと目先を変えて,虚2次体の類数をグラフに描くと,何が見えてくるでしょうか?.
円分体の類数の計算.
小さい素数分体で試すと問題ない:
少し が大きくなると,てきめんに結果が返ってこない.特に工夫せずに類数やイデアル類群が計算できるのは,有理数体上十数次の拡大体までです(経験的に):
円分体(いま考えるのは素数 に対する素数分体)の類数 は, のように正整数の積であらわされることが知られています. は 分体の最大実部分体 の類数. は上の式で定義され,分体の相対類数とも呼ばれます. 実は,円分体の相対類数には,次のような解析的な表示式が知られています: は単数指数(unit index)と呼ばれる量で,今の場合, は1の冪根の個数で,いまの場合は です. 積は法の奇なDirichlet指標に渡り, は に関する1番目の一般化Bernoulli数.(この表式については,例えばL. C. Washigton, Introduction to Cyclotomic Fields, SpringerのTheorem 4.17をご覧下さい).
一方,最大実部分体の類数は大変難しく,最近までの結果をまとめると,, のとき. GRHを仮定すると,, のとき, , , , が知られています(cf. J. C. Miller, RIMS Kokyuroku Bessatsu B64, 2017).
これらをまとめて,次のような素数分体の類数を計算する関数が書けるでしょう:
さきほど結果がかえってこないと言った類数の計算も,解析的類数公式を使えば可能です.相対類数は素早く増加することが見て取れます.
の表は,Washingtonの上掲書Tables §3にもあります.
有限体上の楕円曲線
有限体上の楕円曲線の有理点群が巡回群になるものを探し,有限体の乗法群とときと同じように,Elgamal暗号を構成してみましょう. 上の楕円曲線 の有理点群 は巡回群であるか,正整数で, となることが知られています(Cassels).したがって特に,位数が平方因子を含まなければ巡回群です.そのようなものを探索します.
あとは有限体のときと同様,システムのセットアップ,暗号化,復号化の手続きを定義します.
有理数体上の楕円曲線
1213にちなんだ合同数問題を考えてみましょう.1213は合同数でしょうか?(正整数が合同数であるとは,直角三角形で,3辺の長さが有理数かつ,面積がであるようなものが存在することを言います.例えばWikipedia https://en.wikipedia.org/wiki/Congruent_number 参照).簡単な考察から,楕円曲線 が である有理点を持てばよいと言うことが分かります.特に,の有理点群(Mordell-Weil群,これは有限生成アーベル群であることが知られている)が正のランクを持てば は合同数です.
の場合を考えます:
トーション点はすぐに求められましたが,有理点群(Mordell-Weil群)の生成元の計算には失敗してしまいます:
analytic rankは計算でき,1になる.BSDが正しければ,EのMordell-Weil群はランク1で,従って は合同数です.
Cremonaのmwrankを直接起動してみます.
実は,上のWikipediaの記事(に引用されている論文 https://eudml.org/doc/183796 )によれば,法8で5と合同な素数(1213はそうです)は合同数だそうです.
長くなったので,モジュラー形式については稿をあらためて書きたいと思います.(待ちきれない方は,thematic tutorialからどうぞ).
フリーソフトとしての数学ソフトウェア開発
フリーソフトウェアとしての数学ソフトウェアの開発にはいくつか困難があるように思います.
数学の非自明な計算をコンピュータに実装できる人材を安定して雇用するには,産学官の補助金などに頼るプロジェクトは脆弱すぎるのです.また,アマチュアが自分の興味に基づいて,断続的に貢献するというのでは,商用の数学ソフトウェアを置き換えるものには達しえないのではないか,という懸念がどうしてもおきるのです.そういった懸念を率直に語ったblog記事が W. Stein さんの http://sagemath.blogspot.jp/2014/08/you-dont-really-think-that-sage-has.html です.
Cocalcは,Sagemathを気軽に試せる環境を提供し,無料から使い始めて,必要に応じて少額のsubscription planを購入してもらい,利益を開発者の雇用に回す,という方針のようです. 個人的に応援しています.今回のadvent calendarの記事で,Sagemath, そしてCocalcに興味を持って頂けたら,ぜひ一度お試し下さい(もちろん私はなんの利害もありません).
文献など
必要に応じて引用しましたが,Sagemathについて日本語で読めるものとして
Sageチュートリアル https://doc.sagemath.org/html/ja/tutorial/
木村巌,数論研究者のためのSage, http://hdl.handle.net/10110/8946
その他気づいたものがあれば追記します.