Egison 作者のブログ

Egisonでリーマン幾何学

2016年12月24日

これは,言語実装 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言語とEgisonによる記述の間の本質的な差異は,上記の式を計算する際に,Wolfram言語はTable式を用いるのに対し,Egisonは添字記法を用いることにより,数式を直接記述できているところにあります.

特に,上記のようなテンソル同士の掛け算を含む計算について,Wolfram言語による記述では,Table式とSum式による二重ループがプログラム中に現れてしまいます. しかし,アインシュタインの縮約記法もサポートするEgisonによる記述では,数式と同様にフラットにこの式を記述できます.

以上のように,プログラムの行数については大きな違いはないですが,数式をより直接的に表現している点においては,Wolfram言語よりもEgisonによる記述のほうに分があります.

上記の記法をプログラミングに導入するための機構については,現在論文を執筆中です. 1月初旬には,書き上がる予定です. もし興味を持ってくださった場合,私宛にコンタクト取って頂けましたら,論文のコピーをお送りしますので,メール頂けましたらありがたいです.

簡単に説明しますと,スカラー仮引数,テンソル仮引数という2種類の仮引数の概念をプログラミング言語に導入することによりこれを行いました.

テンソル仮引数は,引数として与えられたテンソルを,テンソルとしてそのまま扱います. 関数の仮引数がテンソル仮引数の場合,仮引数の先頭には,%が付加されます.

スカラー仮引数は,引数として与えられたテンソルが与えられた場合,テンソルのそれぞれの要素に関数の作用を自動でマップします. 関数の仮引数がテンソル仮引数の場合,仮引数の先頭には,$が付加されます.

スカラー仮引数・テンソル仮引数という2種類の仮引数を導入すると,テンソルの添字記法を自然にプログラミングに導入することができます.

テンソル仮引数が使われるのは,テンソルに関係する関数だけです. しかし,この2種類の仮引数を持たない言語では,全ての引数がテンソル仮引数であることが多いです. スカラー仮引数の概念を持たない言語で,テンソルにも対応したプログラムを書く場合,テンソルと関係ない関数を記述する際にも,テンソルのことを常に意識したプログラミングをする必要が生じます.

Egisonでは,∇は以下のように定義できます.(∂/∂の定義はここを参照してください.)

リーマン曲率テンソル

2016年4月からEgison数学ノートというサイトを立ち上げました.

このサイトでは,Egisonでプログラムを書いて検証した数学の計算を記事にしてまとめていっています. 幾何学以外の分野でも,プログラムを書いているのでぜひ覗いてみてください.

リーマン幾何学では,リーマン曲率テンソルという重要な概念が登場するのですが,これの値を色々な図形について求めるプログラムを書いています.

上記のシュワルツシルト計量のページでは,宇宙の中心に一つだけ星があり,他の場所は全て真空であるような宇宙の形について計算するためのプログラムを掲載しています. このページのプログラムとその計算結果を見ながら,相対性理論の教科書を読むと,教科書を理解するのが非常に簡単になります. 例えば,地球上のものが下に落ちようとする理由が,場所によって時間が流れる速さに違うことから説明できることが幾何学的に理解できるようになります.

その一つ下のフリードマン・ルメートル・ロバートソン・ウォーカー計量のページでは,宇宙の至る場所で一様に質量が存在するような宇宙の形について計算するためのプログラムを掲載しています. このプログラムで計算されている内容を初めて計算する人が人手で行うと半日以上はかかると思われるのですが,プログラムで計算すると1,2分で計算することができます. この計算結果を分析すると,膨張する宇宙のモデルを得ることができるようです.

また,以下のリポジトリでは,Wolfram言語とEgisonとの両方でトーラス`T^2`のリーマン曲率テンソルを計算したプログラムを置いています. ぜひこちらでも,Wolfram言語によるプログラムとEgisonによるプログラムを比べてみてください.

最後に

私が所属している楽天技術研究所では,Egison開発や,Haskellでのソフトウェア開発に興味ある方も募集しています. もし興味ある方がいらっしゃいましたら,私宛にコンタクト取って頂けますと幸いです.


プログラミング言語研究の動機

2016年11月7日

「あらゆる対象に対する頭の中のイメージをそのまま記述できるような言語が作りたい。」というのがプログラミング言語を研究する僕の目標です。

既存の言語では、我々の頭の中のイメージをそのまま表現できないことがあります。 少し言い換えると、言語で表現するために、我々の頭の中のイメージを一度紐解いてやらなければならないことがあります。 このような不都合は、我々が頭の中で行っている抽象化を、言語による表現では抽象化できないときに生じます。 このような抽象化を可能にする新しい構文を発明して、言語に組み込むことにより、この問題は解決されることがあります。

このような抽象化を全て列挙して完璧な言語を作ることが、最初に述べた僕がプログラミング言語を研究する目標です。 実際、このような抽象化を1つ見つけて、作ったのがプログラミング言語Egisonです。

ただ、上で述べたような完璧な言語は、本当に作ることができるのだろうかと最近考えるようになりました。 というのは、我々の頭の中のイメージは、我々の対象に対する理解が深まると同時に変化するものであるからです。 そしてその変化と同時に、我々にとって便利な表現も自然と変わっていくからです。

このことを実感するために、ある極端な例を考えてみます。

数の概念は既に知っているけれども、足し算や掛け算の概念は知らないひとがいるとしましょう。 そのひとにとっては、10進法は理解不能な概念であり、10進表記も全く理解不能な表記です。 しかし、足し算や掛け算の概念とその性質をある程度知っているひとにとっては、10進表記は非常に便利で、直感的な数の表現です。

足し算・掛け算を知らないというのは極端な例に思うかもしれませんが、我々がまだ知らない重要な概念は科学史を鑑みるにまだまだありそうです。 このような概念が発見され、我々の認識を深める新しい抽象化が現れれば、それを表現するために新しい抽象化が言語の方でも必要になる可能性が高そうです。 もちろん、この予想が正しくなくて、今後どのような新しい抽象化が現れていても、それを表現できる完璧な言語のほうが先にできる可能性もあります。

完璧な言語が先にできるのか、それとも世界の全てを我々が理解するのが先になるか、これは非常に難しそうな問題です。

この問題について考える前の段階の準備として、既存の数学の概念全てを直接的に表現できる言語を目指して、Egisonの開発を現在は進めています。 (実は、少し数学や物理の教科書を紐解くだけで、既存の言語では、頭の中のイメージそのままに表現できない計算の具体例は簡単に手に入るように思います。) 最初は、代数方程式の計算と、相対性理論やゲージ理論の基盤となっている微分幾何学の計算を、直接的に記述できるようにEgisonを拡張する研究をしています。 この研究を進めるうちに、完璧な言語とは何か、もっと具体的なイメージが掴めるかもしれないと信じて研究しています。

このようなことについて長く考えているうちに、言語について考えるということは、我々が世界を理解するために、根本的なことの1つであり、実際に言語を研究して作っていくうちに今までになかった新しい世界の見方を発見する機会がありそうだと信じられるようになってきました。 これが僕の研究の動機になっています。


第10回日本OSS奨励賞受賞LT

2015年10月23日

この度、Egisonについて日本OSS奨励賞という国内で有名な賞を頂けることになりました。 その受賞LTのために作成したプレゼンテーションを公開します。

#1

こんばんは。ご紹介に与りました江木です。 本日は「プログラミング言語Egisonと表記法の進化について」というタイトルでお話します。

Read this article...


ソフトウエアジャパンアワード授賞式

2015年2月12日

先週、ソフトウエアジャパンアワード授賞式に出席しスピーチしました。 楽天技術研究所の同僚と情報処理学会の方に撮っていただいた写真を公開します。

受賞スピーチについては前の記事にスクリプトを含めて公開しております。 ぜひ読んでみてください。

今後について

今後は、プログラミングの研究者の間でEgisonの価値が広く認められていくことが重要だと考えています。 論文執筆や、学会での発表に今後は特に力を入れていくつもりです。

直近では、3月4-6日に開かれるPPL2015という国内のプログラミングの学会で「パターンマッチ指向プログラミング言語Egisonチュートリアル」というタイトルで発表する予定です。

Egisonの今後にご期待頂けますと幸いです。

受賞スピーチについてはこちらを御覧ください。


ソフトウエアジャパンアワード受賞スピーチ

2015年2月3日

この度、Egisonについてソフトウエアジャパンアワードという大きな賞を頂けることになりました。 その受賞スピーチのために作成した15分のプレゼンテーションを公開します。 スピーチはソフトウエアジャパンにて2月3日の18:20-18:35に行われます。

#1

こんばんは。ご紹介に与りました江木です。 本日は「プログラミング言語Egison-表現の新たな抽象化の発見」というタイトルでスピーチさせて頂きます。

Read this article...


Egisonによる関数型プログラミング入門

2014年1月5日

「Egisonによる関数型プログラミング入門──パターンマッチ指向プログラミング言語Egison紹介(第2回)」 というタイトルでCodeIQ MAGAZINEに寄稿させていただきました。

是非読んでみてください!


新しいプログラミング言語を作る理由

2014年10月14日

「新しいプログラミング言語を作る理由──パターンマッチ指向プログラミング言語Egison紹介(第1回)」 というタイトルでCodeIQ MAGAZINEに寄稿させていただきました。

是非読んでみてください!


人工知能

2010年10月14日

人間と機械のもっと本質的な違いは,人間にとっては思考自体も観察の対象であるというところである.

思考は人間にとって気付いたときには既に組み込まれているものであり,ひとは皆,思考とは何か具体的にはわからないまま手探りで思考を行っている. 思考のルールを完全に把握して思考している人間は今のところいない. もしそのような人間がいたとすると,そのひとにとっては全ての問題が計算問題になる. 人間は特定の対象について考えるとき,その思考自体についても知見を得る. それにより,当初考えもしなかった考えを思い付くことができる.

この思考の「イデア」のようなものを,機械に組み込むことをしなければ,人工知能は実現できない. これを行うことは非常に難しい. これを行うプログラマは思考のルールを全て把握して記述する必要がある. ニューロン単位によるシミュレーションなどでも,人工知能が実現可能かもしれない. しかし,もしそのようなシミュレーションができたとすると,そのシミュレーションプログラムを読めば,どのようにしてそのプログラムが人工知能を生み出したのか 全て把握できるはずである.(人間の思考とは違い,プログラムの全ての動作は定式的に理解可能なため.) プログラムを書いた人は当然そのコードを読んでいるので,思考のルールを全て把握するのと同じことをしているはずである.

結局何がいいたいのかというと,思考のルールを把握していく以外に,人工知能は実現するいい方法はないということであり,それはつまり逆に考えると,人工知能を実現する研究は,それを読んだ人間に思考をどのように行えばいいのか,目からウロコが落ちるような示唆を必ず与えてくれるようなものであるはずであるということである. という考えで,日々最強を目指して思考のルールを把握しようと研究している.


comments powered by Disqus
This website in other langauge: English, 日本語