Egisonでリーマン幾何学
これは,言語実装 Advent Calendar 2016の24日目の記事です.
この記事では,リーマン幾何学の簡単な説明と,リーマン幾何学の計算を簡潔に記述するための,Egisonで新しくプログラミングに導入された記法について簡単に説明します.
リーマン幾何学とは
非ユークリッド幾何学という言葉を聞いたことはあるでしょうか? 曲面の幾何学と呼ばれていて,例えば,球面上で三角形の内角の和は180度以上になったり,平行線の公理が成り立たなくなるという話があります.
球面などの2次元の曲面が曲がっていることは,3次元の空間を認識している我々からしたら当たり前のように思えます. しかしここで過去の数学者達は,より高次元の空間を認識できる存在から見ると,今我々が認識している3次元空間も,実は曲がっているのではないかという発想しました. その発想を推し進めて発展したのがリーマン幾何学です.
リーマン幾何学が発展する過程で,実際に我々の住む宇宙が曲がっているのかどうか検証しようとする試みがあったようです. 例えば,我々が住むこの空間で巨大な三角形を書いたときの内角の和を計測してみて,180度より大きいのか小さいのかを確かめることにより,我々が住むこの空間が曲がっているのかどうか確かめようする試みが,ガウスによりなされたようです.
結論としては,時間軸までを含めた4次元時空が,ある規則に則って曲がっていることと仮定すると,天体の動きや見え方が合理的に説明できることが発見されました. それを説明する理論が有名な相対性理論です. 相対性理論によると,星の重力の原因は,星の持つエネルギーによる時空の歪みとして説明されます.
リーマン幾何学に現れる計算は,ベクトル・行列の上位概念であるテンソルについての計算と偏微分を組み合わせると記述できます.
2016年,Egisonでこれらの計算を簡潔に記述できるようにすることを一つの目標として,Egisonにシンボリックな数式を扱うことができる数式処理機能を実装しました.
特にテンソル解析については,既存の数式処理システムでは扱えていなかった記法までより上手に表現できるようになりました. それにより相対性理論の計算も,既存のシステムに較べてEgisonでは簡単に記述できるようになっています. 本記事では,この記法について簡単に解説できたらと考えています.
Egisonでプログラミングに導入されたテンソル解析の記法
以下の数式は,リーマン曲率テンソルという空間の曲がり具合を表すテンソルについての公式です. 例えば,これを表現するのに,Egisonでは既存の数式処理システムよりも簡潔に記述できます.
`R_(j k l)^i = (del Gamma_(j k)^i)/(del x^l) - (del Gamma_(j l)^i)/(del x^k) + Gamma_(j_k)^m Gamma_(m_l)^i - Gamma_(j_l)^m Gamma_(m_k)^i`以下では,最も広く使われている数式処理システムであるWolfram言語(Mathematica)と比較しています.
Wolfram言語とEgisonによる記述の間の本質的な差異は,上記の式を計算する際に,Wolfram言語はTable
式を用いるのに対し,Egisonは添字記法を用いることにより,数式を直接記述できているところにあります.
特に,上記のようなテンソル同士の掛け算を含む計算について,Wolfram言語による記述では,Table
式とSum
式による二重ループがプログラム中に現れてしまいます.
しかし,アインシュタインの縮約記法もサポートするEgisonによる記述では,数式と同様にフラットにこの式を記述できます.
以上のように,プログラムの行数については大きな違いはないですが,数式をより直接的に表現している点においては,Wolfram言語よりもEgisonによる記述のほうに分があります.
上記の記法をプログラミングに導入するための機構については,現在論文を執筆中です. 1月初旬には,書き上がる予定です. もし興味を持ってくださった場合,私宛にコンタクト取って頂けましたら,論文のコピーをお送りしますので,メール頂けましたらありがたいです.
簡単に説明しますと,スカラー仮引数,テンソル仮引数という2種類の仮引数の概念をプログラミング言語に導入することによりこれを行いました.
テンソル仮引数は,引数として与えられたテンソルを,テンソルとしてそのまま扱います.
関数の仮引数がテンソル仮引数の場合,仮引数の先頭には,%
が付加されます.
スカラー仮引数は,引数として与えられたテンソルが与えられた場合,テンソルのそれぞれの要素に関数の作用を自動でマップします.
関数の仮引数がテンソル仮引数の場合,仮引数の先頭には,$
が付加されます.
スカラー仮引数・テンソル仮引数という2種類の仮引数を導入すると,テンソルの添字記法を自然にプログラミングに導入することができます.
テンソル仮引数が使われるのは,テンソルに関係する関数だけです. しかし,この2種類の仮引数を持たない言語では,全ての引数がテンソル仮引数であることが多いです. スカラー仮引数の概念を持たない言語で,テンソルにも対応したプログラムを書く場合,テンソルと関係ない関数を記述する際にも,テンソルのことを常に意識したプログラミングをする必要が生じます.
Egisonでは,∇は以下のように定義できます.(∂/∂
の定義はここを参照してください.)
リーマン曲率テンソル
2016年4月からEgison数学ノートというサイトを立ち上げました.
このサイトでは,Egisonでプログラムを書いて検証した数学の計算を記事にしてまとめていっています. 幾何学以外の分野でも,プログラムを書いているのでぜひ覗いてみてください.
リーマン幾何学では,リーマン曲率テンソルという重要な概念が登場するのですが,これの値を色々な図形について求めるプログラムを書いています.
- `S^2`のリーマン曲率テンソル
- `S^3`のリーマン曲率テンソル
- `S^4`のリーマン曲率テンソル
- `S^5`のリーマン曲率テンソル
- `T^2`のリーマン曲率テンソル
- `S^2 xx S^3`のリーマン曲率テンソル
- シュワルツシルト計量
- フリードマン・ルメートル・ロバートソン・ウォーカー計量
上記のシュワルツシルト計量のページでは,宇宙の中心に一つだけ星があり,他の場所は全て真空であるような宇宙の形について計算するためのプログラムを掲載しています. このページのプログラムとその計算結果を見ながら,相対性理論の教科書を読むと,教科書を理解するのが非常に簡単になります. 例えば,地球上のものが下に落ちようとする理由が,場所によって時間が流れる速さに違うことから説明できることが幾何学的に理解できるようになります.
その一つ下のフリードマン・ルメートル・ロバートソン・ウォーカー計量のページでは,宇宙の至る場所で一様に質量が存在するような宇宙の形について計算するためのプログラムを掲載しています. このプログラムで計算されている内容を初めて計算する人が人手で行うと半日以上はかかると思われるのですが,プログラムで計算すると1,2分で計算することができます. この計算結果を分析すると,膨張する宇宙のモデルを得ることができるようです.
また,以下のリポジトリでは,Wolfram言語とEgisonとの両方でトーラス`T^2`のリーマン曲率テンソルを計算したプログラムを置いています. ぜひこちらでも,Wolfram言語によるプログラムとEgisonによるプログラムを比べてみてください.
最後に
私が所属している楽天技術研究所では,Egison開発や,Haskellでのソフトウェア開発に興味ある方も募集しています. もし興味ある方がいらっしゃいましたら,私宛にコンタクト取って頂けますと幸いです.