「メタマス!」読んだ

チャイティン数Ωに関する本。
チャイティン数とかいわれても、たぶん馴染みのある人は少ないと思うのだけど、一言であらわすと、とてもランダムな数。
ランダムな数は、それより短いサイズのプログラムで記述できないということなので、どうやって導出するかを書くには余白がたりない。導出方法が書けるなら、その導出方法のサイズの範囲でのランダムでしかないということになる。
ところで、このΩは、この本の面白いところではない。というか、Ωを理解するには数学力が圧倒的に足りなかった。理解できる人には、面白いと思う。
それより、哲学とかソフトウェアの本として面白かった。

メタマス!―オメガをめぐる数学の冒険

メタマス!―オメガをめぐる数学の冒険


この本は、最後の章に

本書は単なる数学の本ではなく、哲学についての本でもある。

と書いてあるように、哲学の本でもある。数学としての部分は正直ぼくにはよくわからなかったけども、数学と哲学との関係がおもしろかった。


次のようなライプニッツの言葉が引用されているように、数学にとっての哲学の重要性が書かれている。

数学がなくては哲学を真に理解することはできず、哲学なしでは数学を真に理解することはできない。そして、数学と哲学とがなかったら、物事を真に理解することはできないのである。


特に、次のような

新しい数学を発見し作り上げるとき、数学者は、創造的な芸術家と同様に、直感と霊感、意識されない動機と衝動、そして自らの美意識を拠り所とする。

という言葉にみられるように、数学の理論を発見する作業が創造的なものであることを強調している。


また、この本は、

他人のソフトウェアを読んでもそう勉強にはならない

とか

型式手法を用いてソフトウェアの正しさを証明することにも望みがない

という言葉など、ソフトウェアに関する本だとして読むのもおもしろい。


補足しておくと、ソフトウェアのソースを読むという場合、そのソフトウェアのもっとも厳密な仕様書としてソースを読むことが多いと思う。その場合には勉強になる。ただ、この勉強というのは、その特定ソフトウェアに対する勉強ということになる。ここでチャイティンが言ってるのは、新しいアルゴリズムを実装する場合ということだと思う。その場合は、実際にコードを書くこと以上の勉強方法はない。
形式手法による証明に望みがないと言っている「ソフトウェアの正しさ」というのは、そこにその機能が必要かどうかという正しさで、たしかに形式手法では機能が正しく実装されているかどうかは検証できるけども、その機能が適切かどうかは検証できない。


「メタマス!」で書いてあるソフトウェアの話としては、「エレガントなプログラム」について

プログラムがエレガントである条件とは、それより小さいプログラムでは、そのプログラムと同じ出力を生成できないこと

と定義するのがおもしろかった。


ここで、プログラムはコンパイル後の実行ファイルのことをあらわすので、変数名などは長くてかまわない。
また、プログラム本体を圧縮しておいて自己解凍プログラムにするということも許されるわけで、単純に重複が少なければいいわけでもない。
本質的なアルゴリズムで計られるということになる。


このことで思い出すのが、ドコモiアプリの最初期に、まったく違う種類のアプリケーションでも、機能のサイズが同じようなものだったということだ。
最初のiアプリのサイズは、プログラムをjar圧縮した状態でのサイズが10KBまでというものだった。このサイズに収めようとすると、どのような種類のアプリケーションでも、「1機能」になっていた。そのあとのバージョンでは30KBまでに制限が緩和されたけど、それでもやはり数機能という感じになっていた。


プログラムのサイズについて、いろいろな指標はあるけれども、実行ファイルを圧縮したときのサイズというのはある程度の指標になるとそのとき思った。


あと、エレガントなプログラムの指標としては、識別子を最短化したりコメントを抜いたり、実行されない部分を抜いたあとでソースを圧縮したとき、圧縮率が低いほうが、よりエレガントなプログラムになってるんじゃないかなーと思ったりした。


補足
数学的な話としては、こちらがわかりやすそう。
【速報】ランダムネスが捕まった - とりマセ