て日々

2011年3月


2011年3月31日(木)はれ

昨晩に引き続き、青木峰郎『普通のコンパイラを作ろう』(ソフトバンククリエイティブ, 2009年) を読む。本を読み始めると最初の一割くらいが記述のスタイルに慣れなくて特につらい。600ページを超えるこの本の場合、100ページくらいまで来てようやく面白くなりだした。しかしこれを読み終えたとして、本当にコンパイラが作れるようになるんだろうか。その肝心なところが、ちと疑問。

翌日追記: この本ではC言語の言語仕様の大部分を引き継ぎすこし整理したC♭という言語のコンパイラを題材にプログラム実行環境の実際を語る。書籍サポートサイトで著者が提供するC♭コンパイラはJavaで記述されていて、吐き出すバイナリはi386版 GNU/Linux環境の実行可能形式となる。 (このLinuxとJavaという組合せは、俺にはちょっと奇妙に思われる。) コンパイラ自体はJavaアプリケーションだからDarwin環境でも同じように動くが、Mac OS X10.6で試してみたところ、どうもコンパイラの出力するアセンブリ言語のコードが Mac OS X のアセンブラを通らないようだ。 (Hello Worldのアセンブリコードを見るかぎり、実行コードというよりはアセンブリ言語の書式の問題と思われる。) まあそれはさすがに無理な注文というものだろう。いま現在稼動しているLinuxマシンは手近にないから、C♭プログラムを実際にコンパイルして出力されたバイナリを吟味することはできないのだけど、サンプル目的のコンパイラらしく、字句解析の結果のトークン列の出力、構文木の出力、アセンブリコードの出力などの機能が盛り込まれているから、いろいろ勉強になる。いずれにせよ乗りかかった船だから、本はしまいまで読むことにする。

今日帰るつもりだったが、もたもたしているうちに夕方になり、短気な俺はつい「もういいや」という気分になってしまった。で、妻の実家にもう一泊。


2011年3月29日(水)はれ

午後、瀬戸内海を渡り妻の実家に来た。とはいえ来ても特にすることがあるでもなく、思い立って持って行った積ん読本、青木峰郎『普通のコンパイラを作ろう』(ソフトバンククリエイティブ, 2009年) を読む。夕食時には27日に卯之町で買った地酒「玉川」を酌み交わす。


2011年3月29日(火)はれ

みなさん先刻ご承知、Twitterでゼルプスト殿下が使っている「湯呑みアイコン」は、デスクに白い紙を敷いてスタンドで照らして、携帯電話で撮影したものを、GIMPで編集している。昼休みに、これを久しぶりにちょっと新しく撮り直したが、Twitterのアイコンを置き換たくなるような仕上がりのものはできなかった。

撮影現場

夜、妻の実家に差し入れするしめじの佃煮ときんぴらレンコンを作る。義父は来月上旬下旬に大きな仕事を抱えているのだ。妻は明日から一週間ばかり手伝いに入るが、俺は自分の仕事があるので明日行って挨拶だけして酒飲んで一泊して帰ってくる。


2011年3月28日(月)はれ

iPad上のBASICインタプリタ2種類。Ronald NicholsonHotPaw BasicはMacOSで68kMacの頃から使われているChipmunk Basicの移植版といえる。俺は長いことChipmunk Basicを使ってきたので、HotPaw Basicには親しみを感じる。一方、miSoftBasic!は古い「マイコン」のコンソールを真似たインターフェイスをもつ独自のBASICインタプリタだ。コンソールのルック&フィールは好ましいしグラフィックスも使いよいが、いかんせん、プログラムの入力が面倒で、さらに致命的なことに実行速度がやたら遅い。たぶん、この遅さは意図的で、あくまでも古いマイコンの動作を真似ているということなのだ。しかし加速度センサやタッチパネルの状態を読み出す関数を用意しているところなどは新しいテクノロジーを取り込む姿勢を見せてもいる。実用にはならんが可愛げのある、なんとも微妙な処理系である。プログラムの編集がしにくいという意味では、HotPaw Basicも、その元になったChipmunk Basicも同じ。だがこちらのほうが言語仕様がはるかに強力だし、実行速度もBasic!のように遅くはない。というわけで、総合的にはHotPaw Basicに俺は軍配を上げる。しかしまあ、これはあくまで俺の好み。幸い両者ともかなり安価なので、読者は両方を自分で試して自分の結論を出してほしい。どちらもiPhoneやiPod Touchで使えるようだ。

そんなことより、俺はもっと真面目にプログラミングの勉強をせにゃならんと思う。


2011年3月27日(日)はれ

未明に目が覚めた。雨が降っているでもないし、ネズミもいないだろうに、天井のほうからポツリポツリと家鳴りがする。不思議なものだと思って、またウトウトし始めたころに地震が来た。あとで聞いたところ、地震発生は3時38分。マグニチュード3.6。松山は震度1。静かな夜中でなかったら気付かなかったくらいの小さな揺れだったが、その後では、さっきまでの家鳴りがピタリと止んでいる。これはさて、家鳴りが地震の前兆だったのか、それとも家鳴りの原因のちょっとした建材の歪みのようなものが地震のせいで直ったのか、よくわからないが、面白いこともあるものだ。

こんなところでランチを食いました

朝、教会学校のあとは妻の思いつきで卯之町へドライブ。古い造り酒屋の建物を活かした素敵な店 (ミーさまハーさまの集まる人気スポットなんかにしたくないから詳しくは教えない) で昼食をとり、歴史文化博物館で【娘】におひなさまの衣裳を着させてもらって写真をとり、古い雛人形の展示を観た。


2011年3月26日(土)くもり

昼食にパパラーメン。その後、かなり久しぶりにコミセンの図書館に行った。【息子】がなぜか「おすし」の本ばかり借りた。まあ、俺もなぜかJavaScriptの本ばかり借りたのだから、人のことは言えない。その後天山のジャスコ改めイオンに行って、【息子】のランドセルを購入。


2011年3月25日(金)くもり

ピアノのレッスン。予想以上の進捗があったと言ってもらえた。

HTML5のcanvas要素にJavaScriptでマンデルブロ集合を描画するページを作ってみた。(js-mandelbrot.html) MacOS X と Windows の Firefox 3, Firefox 4, Safari 5, Opera 10, それから Windows の Internet Explorer 9 Release Candidate で動作を確認した。IE8以前はcanvasに対応していない。iPad(iOS 4.3)のSafariでは、JavaScriptの実行タイムアウトエラーが出る。

2011年4月8日追記: 一般的にWebブラウザには JavaScriptの無限ループでブラウザのコントロールが奪われないためのチェック機構が実装されているらしい。今回のプログラムは決して無限ループではないのだが、iPadではこのチェック機構のタイムリミットが近い(というよりJavaScriptが遅い)ため、実行タイムアウトエラーが発生したというわけだ。こまめにブラウザに制御を戻せば、この事態は避けられる。そのためにはインターバルタイマーを使って一定間隔で描画ルーチンが呼ばれるようにして、描画をコマギレに続ければよい。それにはすぐに気がついたのだけど、そのときにはタイマーの使い方がわからなかった。ところが、4月4日の夜に、職場の書棚の普段開かない扉の奥からShelley Powers「初めてのJavaScript」(オライリー・ジャパン, 2007年)が出てきた。積ん読どころか「仕舞っ読、忘れ読」だったのだ。この本でタイマーの使いかたを知って、4月5日の朝に改良版を公開した。


2011年3月24日(木)くもり

大学の卒業式。学生たちは卒業していく頃にはみなそれなりに大人になっていくから不思議だ。大学を去らない俺のような者だけが、いつまで経っても成長しないまま、卒業生を送り出すのは今年で20回目である。


2011年3月23日(水)くもり

夜、市民コンサートの機関誌作業。いろいろの騒ぎで浮き足立っていたのは俺だけではないらしく、準備がどうにも不十分だったうえ、メンバーの集まるのが遅く、おまけに、妙に手際が悪かった。それで、いつもなら9時の電車で帰るところなのに、終わったら10時半。歩いて帰るしかないかと思ったが、ダメモトで駅に行ってみたら、最終電車は10時40分。いい具合に間にあったうえ、駅でイデウエお姫さまに遭遇。大阪へ就活に行った帰りだそうだ。大学入りたての頃からのけっこう古い知り合いであるお姫さまも、もう博士課程2年生で、あと1年以内に進路を決めないといけない。アカデミアに残るのではなく一般企業を目指すらしい。まあ、彼女ならどこへ行ってもうまくやっていくとは思う。そういう話を少しして、あと、18日の日記に書いた 『「余剰次元」と逆二乗則の破れ』 をお薦めした。


2011年3月22日(火)くもり

さて、過去1年以上にわたって、ほうれん草を毎日200グラムづつ食べ続けている人はいるだろうか。それはちょっと並大抵のことではない。それでもその結果として受ける放射線量がCTスキャン1回分に満たないというのは、ひょっとしたらあんまり危険じゃないのではないだろうか。俺はそう思うのだが、そういう理性的なコメントは人の耳に届かない。いま東京では福島県出身者がしばしば奇異の目で見られていると聞く。AIDSのときもBSEのときも鶏インフルエンザのときもそうだった。酷い目に遭っている当事者が差別されるのだ。

理由は、世人が恐れているのがHIVでも異常プリオンでもインフルエンザウイルスでもなく「ケガレ」だからだ。言ってみれば、われわれの生活感情の基層はまだ平安時代のままなのだ。やみくもにケガレを恐れ、死のイメージを忌避しているかぎり、生活を脅かす現実の危険を正しく見積もることなどできるはずはない。その代わりに人は自分の身のまわりに小さな結界を組んで、ケガレを刻印された人を排除しようとするのだ。世人は何かことが起こるとすぐに「きれいなもの」と「けがれたもの」の間に線を引いて、そして必ず自分を「きれいなもの」の方に入れる。小さくはトイレの洗剤の問題から、大きくは原発の問題にまで、なにかというとこの発想がつきまとって、話をややこしくしている。

こうしたことは、古く1980年代から山口昌男の著書でつとに指摘されていた。いまでも山口昌男の主な著書は岩波現代文庫に収録されていて安価で手に入る。「ケガレ」の問題は民俗学では常識の範疇であり、たとえば宮田登の『神の民俗学』(岩波新書)にも言及されていたはずだ。文系の勉強だって、じゅうぶんに広く深くしていれば、こういうときに醜態をさらさなくて済む程度の見識は持てるはずなのだ。

わかるだろうか。原子力の安全をめぐる技術的な問題とともに、民俗学的・人類学的な問題が焦眉の急となっているのだ。しかも、これは福島の原発の事故のせいで今月になって急に降って湧いた問題ではなく、平安時代からの宿題である。

ところで、「ケガレ」を恐れないで済む方法を俺は一つだけ知っている。それはもちろん「えんがちょ」をすることだ。あわててイソジンを飲んで胃を悪くするよりは、おまじないのほうがよっぽどマシ。


2011年3月21日(月) 春分の日くもり

結局のところ古いパソコンは廃棄するしかないだろう。授産施設のトレーニング用に供出するとか妻が言っている。そういう役に立つなら寄贈してもよいが、市民コンサート事務所から譲り受けてきたVAIO以外は、教育用途としても使いものになるまい。

夕食にポークジンジャーを作った。それと菜の花のおひたし。昼食の中華つけ麺のつゆが残っていたので、とき玉子を入れてスープに流用。

さてさて、Mac OS X上で動作する Free Pascal は i386-darwin版 だけど、必要な unit をWindows版からコピーしてくれば i386-win32版のバイナリを出力することもできる。

やり方: Windows版の C:\FPC\<version>\units\i386-win32 をフォルダごと Mac OS X の /usr/local/lib/fpc/<version>/units 内にコピーする。コンパイル時に -Twin32 オプションを付加し、出力ファイルの拡張子を .exe に変更する。もちろん Mac OS X では動かないので Windows PCで実行する。

逆にWindows版でDarwinのバイナリをコンパイルするというのも、きっとできるだろう。試してないけど。また fpc の代わりに ppcppc コマンドを使えば PowerPC-darwin版、 ppcx64 コマンドを使えば x86_64-darwin版のコンパイラが起動する。だけど、先日の数字の出現回数を数えるプログラムを ppcx64 コマンドでコンパイルした 64bit版実行ファイルは、走らせてみると、同じソースから ppc386 コマンドでコンパイルした 32bit版とくらべて三倍くらい遅かった。コードの最適化というのは、いろいろの条件が絡みあって一筋縄ではいかないのだろうなあ。

ええっと、こういう話題に限らず、この「て日々」の内容はいつもそうだけど (☞ index.html)、試すときは自己責任でやってくださいよ。


2011年3月20日(日)あめ

古いパソコンを処分せにゃならん。もうすぐ小学生になる【息子】のために現在物置部屋になっている二階の一室を明け渡さなければならんのだ。だが、これは必然的に家全体の模様替えを伴う大開脚、じゃなくて、大改革になりそうだ。なにせ所帯をもって12年、引越の時を別にすれば家をまともに片付けたことがないのだ。ひどい話だが。今だって、パソコンを処分せにゃならんといいながら、古いパソコンに新しい Debian 6.0 をインストールしているテイタラクで、ものを整理するとか処分するとかいうことが全然身についていない。Debian 6.0 はもう機能やGUIの完成度では Windows に負けていないが、さすがに Celeron 700MHz/RAM512MBの10年前仕様のパソコンには荷が重いぞ、とかなんとか、こらこらお片づけはどうしたんだ。【息子】の入学式まであと半月しかないんだぞ。(以下、キリがないので省略)

昼食は久々のパパラーメン。


2011年3月19日(土)くもり

このところの心身の不調のため【息子】の卒園式に行けなかった。息子よすまぬ。

今日も午後から休日出勤で、7時すぎまで会議3連発。


2011年3月18日(金)くもり

講談社ブルーバックス村田次郎『「余剰次元」と逆二乗則の破れ』 を読んだ。大変面白かった。

余剰次元とは何かというと、素粒子の物理法則を微小な弦の振動のモードとして説明する「超弦理論」によれば、現実の空間の次元が本当は3次元ではなくて11次元とか26次元でなくてはならないという、その余分な次元のこと。超弦理論で余剰次元が必要とされるのは、弦の振動する空間がそれだけの次元を持っていないといけないからという、いわば純粋に理論的な要請だ。もちろん、経験の教えるところでは空間は確かに3次元であるとしか思えないし、重力に関するニュートンの法則や静電気力のクーロンの法則などは、わたくしたちが住む空間が3次元である何よりの証拠であるはずなのだが、3次元より高い余剰次元の方向への空間の広がりがとても小さく丸められている(コンパクト化されている)せいでそのように見えているだけだというのが、超弦理論での説明だ。その場合、余剰次元の広がりはプランク長程度、すなわち、10-33メートル程度だろうというのが、これまでの常識的な判断だったそうだ。ところがそれがひっくり返るかもしれない。つまり、余剰次元の広がりがひょっとして、0.1ミリメートルくらいあるかもしれないという可能性が浮上してきた。

物理現象を支配する4つの基本的な力(というか相互作用)のうち、重力だけが何故か桁違いに(他の3つの相互作用と比較して30ケタくらい)弱いことが、全ての相互作用を一元的に説明する究極理論の構築にとって大きな障壁になっている。しかし、超弦理論において重力だけが余剰次元方向にも広がって行く性質があることから、余剰次元の広がりがある一定程度の大きさであれば、重力の桁違いの弱さを説明し、他の相互作用と統一した理論に近づく可能性が出てくるそうだ。ただし、その場合、ニュートン以来の常識であった重力の逆二乗則が、実は近距離では破れていることが理論的に予言される。ということは、ミリメートル以下の近距離でも本当にニュートンの法則が成立しているかどうかを検証することで、余剰次元の存在が確証できるかもしれないという話になる。

この頃の物理学の最前線といえば、初期宇宙の高温状態を再現するかのような高エネルギーの実験が主流だが、巨大な加速器なんかなくても、精密な測定技術で物理学の根幹をゆるがす発見ができるかもしれないというのは、とても意外なことだ。

お彼岸なので(?)ピアノのレッスンはお休み。


2011年3月17日(木)はれ

代休三日目。家でひたすらボケッとしてすごす。夕方からいつもの医者に行き、いつもの馬鹿につける薬と、いまさらながら花粉アレルギーの薬と気管支の薬を出してもらう。その後、うちの家族に親戚の美男美女ことケンちゃんカナちゃんを交えて いよてつ会館の中華料理店で会食。ケンちゃんは会計事務所、カナちゃんは不動産仲介業者に就職が決まり、これからも松山で暮らすことになったのだ。それで卒業&就職のお祝いをした。普段はもうちょっと混んでいるこの店だが、どういうわけかお客は俺たちだけだった。まさかみんな自粛しているのだろうか。それとも原発のことが心配で外出を控えているのだろうか。そりゃあ被災地の人たちの安否も福島第一原発の状態も心配だが、消費が冷え込んで経済が低迷するのも心配だ。西日本の俺たちはできるかぎり普段どおりに過ごそう。普段どおりに仕事や学業を頑張って経済を回し、お金を稼ごう。いまできることはそれだけだと思う。もしもそれで余力があれば、寄付とか献血とか、できる範囲で人助けをしよう。


2011年3月16日(水)はれ

代休二日目。家でひたすらボケッとしてすごす。タマちゃん(ラトガースのハンガリー人数学者Tamás Mátrai)から10月に京都で開くカンファレンスに参加できる旨の連絡があった。


2011年3月15日(火)くもり

昨日の日記に「日常に復帰するぞ」と書いたが、よく考えたらきょうから三日間は先月の休日出勤の代休なのだった。しかしひどく咳が出る。郵便局へ寄付(些少のものを中央共同募金会へ振り込み)に行き、ジュンク堂書店にちょっと立ち寄ったほかは、家でひたすらボケッとしてすごす。夜も咳が止まらんので、市民コンサート機関誌の作業も休ませてもらった。


2011年3月14日(月)くもり

俺が仕事に出かけてからのことだけど、【息子】(6歳)が母親に「幼稚園でロケットつくる。日本の遠くの地震のところをたすけにいくロケット。だってテレビでみた。」「日本のとおくの地震がたいへんなとこをたすけるの。ご飯とお水と、あとはお茶碗とおわん?」と発言したという。マイペースで自分中心で幼稚なお子様だとばかり思っていた息子がそんな心のやさしい殊勝なことを言うとは。妻から連絡を受けて俺は泣いてしまったよ。

俺はこのところ花粉症と風邪のせいで鼻と目をやられていて、そうなると耳にも悪影響が出る。リアリティを支える感覚器官がダメージを受けているところへ、先週金曜日からの大騒ぎだ。それでなんとなく、すべてが夢うつつのような気持になっていた。だが、いつまでも浮き足立っているわけにはいかない。冷静になろう。

きょう16時39分発のNHKのニュースを(無断)引用する。

【NHKなど 義援金を受け付け】東北関東大震災で被災した人たちを支援するため、NHKと中央共同募金会、日本赤十字社、NHK厚生文化事業団は、義援金を受け付けています。期間は14日からことし9月30日までで、▽全国のNHKの放送局と▽各都道府県の共同募金会、それに▽日本赤十字社の本社と各支部で受け付けています。被災した東北地方の各県では受付体制が整いしだい、窓口を開設します。義援金は各窓口のほか、郵便振替でも受け付けます。口座番号は、▽「中央共同募金会東北関東大震災義援金」が00170-6-518、▽「日本赤十字社東北関東大震災義援金」が00140-8-507です。振替手数料は無料です。

くり返し言うが、西日本に住む我々は勢いだけで無謀なボランティア活動(という名の足手まとい)に走ったり過剰な自粛ムードに流されたりせずに、頭を冷やし日常の活動を誠実にこなして経済を支えるべきだ。そして、稼いだお金を少しでも寄付して復興に役立ててもらおう。

というわけで、きょうから日頃の業務に戻る。このたび静岡へ転出することになった赤堀さんに研究発表をしていただいた。テーマは、ある種の非線形シュレーディンガー方程式に爆発解や散乱解があらわれる条件。俺は微分方程式については素人なのだが、素人目にも綺麗な結果で、話は面白かった。その後、夜には赤堀さんと、もう一人、今年度で定年退官する森本先生を囲む送別会を開いた。

やる気のないあひる

先日からの数値実験のつづき。\(2^N\)の10進展開の数字の分布にたいして、一様分布との比較においてカイ二乗値 \(\chi^2\) を計算した。\(0\leq N\leq 1000000\) の範囲で \(\chi^2\geq 16.909\) となるケースは50180件あった。通常の検定ではそのような \(N\) については \(2^N\) の数字の分布が均等であるとの仮説が棄却されることになる。

いっぽう、この数値実験に先立ってコンピュータの疑似乱数について同様の数値実験を行なったところ、10000件のうち500件程度が \(\chi^2\geq 16.909\) に該当した。ということは、事実として一様乱数と認められるべき数字列について、数字の分布が均等であるという仮説が誤って棄却される可能性も5パーセント程度あるということを意味する。もちろん、16.909という数値が自由度9のカイ二乗分布の上位5パーセント点なのだから、これはまったく自然なことだ。

まとめると、\(0\leq N\leq 1000000\) の範囲のすべての \(N\) について、《10進数 \(2^N\) の数字の分布が均等である》という仮説をカイ二乗検定にかけたところ、全体の5パーセントにあたる五万個の \(N\) について、仮説が有意水準5パーセントで棄却された。ところが、このことは、\(2^N\) の数字の分布が一様でないという結論を導くエビデンスにはなりえない。なぜなら、一様乱数でも、分布が均等であるとの仮説が誤って棄却されることが同程度の頻度で起こるからだ。

次は範囲内のすべての \(N\) にわたるカイ二乗値の分布を調べてみよう。期待度数が一様分布の場合には、カイ二乗値は分散に比例する。したがって、カイ二乗値の分布曲線と分散の分布曲線は相似形になる。先日掲載した標準偏差の分布図が釣鐘形をなしていたことからも予想されることだが、結果は次のとおり、カイ二乗分布の密度関数のグラフによく一致する形をなしている。ただ、むしろ理論値より小さいほうにわずかに偏っているようにも見える。

カイ二乗分布
緑色の線が自由度9のカイ二乗分布の理論値
赤い縦線は実際の数字の分布における \(\chi^2\) 値を
整数値に丸めた値の出現回数


2011年3月13日(日)はれ

なによりカニより、落ち着いて、デマや曖昧な情報に惑わされないようにしよう。手に入れた情報は必ず確認しよう。

子供らが、二階の【娘】の部屋で自分たちだけで寝ると言い出した。遊びの延長で言っているのではあるが、子供たちなりに何かを感じ取ったのかもしれない。とにかく、子供たちが無邪気に遊んでいるのは大人たちにとっては救いである。

いますぐ何ができるでもない俺たちは明日から日常の業務に復帰するしかないが、せめて、これまでよりも丁寧に仕事をしよう。これまでよりもマメに体を動かそう。これまでよりも広く関心をもとう。


2011年3月12日(土)くもり

俺たちのできる後方支援としては、まず献血と献金が考えられる。

まずは献血について。まず言っておかねばならないならないことは、俺は輸血経験者で献血はできない。1995年に大怪我をしたとき輸血を受けて命を助けられたのだ。借りた命を返せるものなら返したいのだが、薬害による肝炎などの感染を防ぐための決まりだそうだから仕方がない。妻は小さな体で何度も血漿の成分献血をしているので、今回も、献血センターに問い合わせたところ、血小板の成分献血が現在いちばん必要とされているらしい。これには妻も既定の体重に8キロほど足りない。きょう、松山の献血センターは午前中の時点で待合室1時間待ちだったらしい。血液製剤は使用期限が早いうえ、一度献血すると、次に献血するまで1ヶ月程度はあけなければならないそうだので、いますぐに献血センターに人が殺到するのは必ずしも得策ではないようにも思うが、このあたりは俺のような素人が判断すべきことでもあるまいから、献血の意思のあるひとは、地元の献血センターに相談して、いつごろどのように献血すればいいかを判断してほしい。

つぎに献金について。お金はいかなる物資にでも化けるがその逆はない。素人の判断で救援物資を送ろうとするより、確かな機関を通じて献金をするのがいちばんいい。いいかげんな団体や詐欺まがいの組織もあると聞く。俺たちは、赤十字やNHKなどが募金窓口を開設するのを待つことにする。あくまで噂であるけれども、献金額の目安としては、「ほぼ日」の糸井重里さんの発案で、年収の1パーセントの献金、自分自身を3日雇える程度の金額の献金をするように呼びかけられているようだ。俺の家は【息子】の小学校入学を控えて物入りではあるが、自分の3日分の賃金より少しだけ多い金額を、ただし何回かに分けて献金しようと思っている。

このレンタルサーバを運営するGMOは早くも1000万円の献金を決めたらしい。立派である。それと、東北地方で評判の悪いサントリーさん、いまこそ汚名を雪ぐチャンスですよ、飲み水を被災地に送ってあげなさい。(3月18日追記:ほどなくサントリーはミネラルウォーター500mlボトル100万本の提供と3億円の寄付を決めた。さすがだ。)


2011年3月11日(金)くもり

このたびの地震と津波の被害に遭われたみなさんに心よりお見舞い申し上げます。

さいわいにして無事であった西日本の我々が被災地のために何ができるか、現時点ではわからない。だからといって「何もできない」と簡単にあきらめてはいけない。また、浮き足立って現場の足手まといになるのはもっといけない。落ち着いて長期的に関心をもち続けることが大切だと思う。いまは余計なことは言うまい。


2011年3月10日(木)くもり

iPadのOSがiOS4.3になった。WiFiオンリーの初代iPadではあまり大きな違いは感じないけどね。

昼間、仕事部屋の室内LANのルータと無線LANアクセスポイントを新しいのに交換した。久しぶりなので設定で少しまごついてしまったぞ。しかしこれで私物の旧Mac miniがお役御免になって家に持って帰れる。

夕方、散髪に行った。前回と同じお姉さんが担当してくれて「髪多いですねえ」というから「中身空っぽなんですけどねえ…って、前もそんな話しませんでした?」などとカマシてきた。いや実際、前回も髪が多いと言われた気がするし、そういうときのリアクションはほとんど自動的だから、同じ会話になった可能性は高い。まあそんなことはともかく、ようやく髪を切ってさっぱりした。しかも、ポイントカードのスタンプが20個たまったから半額になった。

夜、三日間禁酒したからもういいかと思ってビールを飲んだが、案の定ちっとも美味しくなかった。体調の思わしくないときにビールなんぞ飲むもんではない。

さてさて、きょうは \(2^N\) の10進展開と比較するために、各正整数 \(N\) ごとに長さ \([N\log_{10}2]+1\) の10進数字列を無作為に作ってその数字の出現率を調べるという、意味があるのかないのかよくわからないことをしたのだが、コンピュータの疑似乱数を使った限りでは、 \(2^N\) の10進展開とランダムな数字列とを区別する統計的特徴がこれといって見あたらないように思われる。

10進数の各桁を、入力と出力を1系統ずつもち10個の状態をとりうる有限オートマトンと考えたらどうだろうか。二倍する操作は下の桁からの繰り上がり \(c_{i-1}\) を入力として受けとって自分の状態 \(s_i\) を \( s_i \leftarrow (s_i*2+c_{i-1})\;\mathrm{mod}\;10 \) と変化させ上の桁への繰り上がり \(c_i\) を出力する動作ということになる。そういうセルオートマトンの力学系とみてこの系が ergodic とか mixing とかの性質をもつ (というのをどう定式化すればいいのかすら現時点ではわからないけど) としたら、ランダムな数字列と \(2^N\) の数字列が統計的に区別しがたいことにも、それなりに説明がつくことになる。


2011年3月9日(水)くもり

いつもと同じように洗髪していつもと同じように寝たつもりが、朝起きてみると髪がボサボサだった。伸び過ぎた髪と花粉症の目のかゆみがあいまって、集中力が著しくそがれる。なにをやってももうひとつ調子が出なかった。夕方になると、目の疲れというよりもうなんか顔面全体の表情筋がくたびれたような感じになっている。風呂につかって目を閉じ、ゆっくりと数をかぞえてリラックスする。

休肝日も三日目になったが、これは健康のことを考えて自制しているというより、こう体調が悪いと酒を飲んでも美味くないだろうという判断なのだ。しかしそのおかげで一昨日と比べると気力だけは戻ってきている。明日こそは、もう誰がなんといっても散髪にいくぞ。

話はころっと変わって、愛媛のご当地アイドルグループ ひめキュンフルーツ缶 のこと。デビューシングルが本日リリースで、それがまたこともあろうに「恋愛エネルギー保存の法則」なんていうタイトルなもので、とりあえず御祝儀として、カップリングの「ひめキュン参上」ともども iTunes Store で購入。こちとら根が偏屈なうえにもうすっかりオトーサンだから、こういう人たちにさほど熱を上げたりはしないのだけど、地元の面白い試みとしてわりと好意的に見てはいるのだ。きょうび地域の活性化を図るっていうならこれくらい突き抜けてくれないと。で、そのデビューシングル「恋愛エネルギー保存の法則」だけど、(まあ、歌唱についてはコメントすまい。) 聴いてみると、特にサビのところなんか、サウンドといい歌詞といい、けっこう懐しいめの作りで、四半世紀の過去にそういう世界の思い出を全部きれいさっぱり落してきてしまったオトーサンにも伝わってくるものがあって、なかなかよかった。 iTunes Store のほか Amazonでダウンロード購入もできるので、愛媛の活性化を支援するという意味で、みなさんもぜひ。あ、ディスクにはプレミアDVDもついてるそうなので、ビデオクリップも欲しいって人は大街道のDUKEレコードへどうぞ。


2011年3月8日(火)はれ

帰りがけ、ふと見上げた西の空に、三日月、金星、トワイライト、とてもきれいだった。


2011年3月7日(月)くもり

花粉症のうえに風邪まで併発したみたいだ。鼻炎の薬のせいで喉が乾く。鏡を見ても確かにひどい顔をしている。どうにも調子が出ない。たまには休肝日にしよう。

やる気のないあひる

オフィスにあったメモ書き。レポート用紙の裏に走り書きしてあるのだが、そのまま放っておけばゴミと区別できなくなるし、ノートに書き写しても死蔵しているだけでは発展性がないので、ここへ書いてしまおう。そうすれば、誰かの目にとまって、考えるヒントになってくれるかもしれない。難波完爾先生の『集合論』の冒頭のLKの解説と本論の集合論の展開とをどう結びつけるべきかというテーマをめぐって考えたことのようだ。

ひとたび集合論の本論に入れば、公理からの推論は「自然な論理」「ネイティブな論理」でなされる。そのとき形式化された論理体系は背景に退いていて(形式的展開の可能性は暗黙の前提に戻っていて)推論が正当であるかどうかの検証が必要になるときまで問題とされない。こうした場合に実際に行なわれていることは何か、という問には二通りの答えかたがあるだろう。
(1) 我々は形式的体系の展開を圧縮して進めているだけだという「形式的体系がホンモノ」説
(2) 我々のやりたいことは集合論の直接的な展開のほうなのだから、形式的体系はあくまで正当性を担保する手段であるという「形式的体系は方便」説

もちろん、本当に興味深いのは、どちらの説をとろうと結局数学者がやることは同じだという点である。


2011年3月6日(日)くもり

久々に家族4人が揃う休日だからどこかへおでかけしようかなんて朝のうちは言っていたのだが、なんだかんだんで結局一日中ダラダラしていた。ハウスドルフ (Felix Hausdorff, 1868--1942) の古い本 «Grundzüge der Mengenlehre» (「集合論の要諦」 とでも訳すか. 1914年) のリプリントが届いた。とうとうドイツ語である。だが集合論の歴史を遡るなんてことをやりだせば当然そういうことになる。勉強せにゃならん。同じくハウスドルフの1937年の «Mengenlehre» の英訳も入手した。後者ではススリン集合の理論もとりあげられているが、まだススリン集合の理論そのものがなかった1914年の本は、ボレル集合やルベーグ測度の理論でしめくくられているようだ。


2011年3月5日(土)はれ

夕方までは妻子もいない休日。午前のうちに近所の温泉へ行き、そのあとはコーヒーショップで本 (ルドルフ・タシュナー『数の魔力 -- 数秘術から量子論まで』(岩波書店)) を読んだ。天気がよいから、散歩はいい気分だ。

先日からやっている \(2^N\) の10進数展開の数字の分布を調べる実験。Ruby の多倍長整数は \(2^{10^{6}}\) くらいまでは計算してくれるのだけど、指数 \(N\geq 100000\) くらいになると、Rubyで書いた安直なプログラムではさすがに時間がかかるようになった。けさ、温泉に出かける前に、ゼロ以上百万以下の \(N\) を無作為に1000個選んで数字をカウントするRubyプログラムを書いて走らせた

LOG2 = Math.log10(2) EXPERIMENTS_COUNT = 1000 UP_LIMIT = 1000000 c = [] 10.times { c.push(0) } EXPERIMENTS_COUNT.times do n = rand(UP_LIMIT) l = (n*LOG2).floor + 1 a = 2**n (0..9).each { |i| c[i] = 0 } while ( a > 0 ) c[a%10] += 1 a /= 10 end s = 0.0 c.each do |x| y = x.to_f/l - 0.1 s += y*y/10 end printf "%5d, ", n print c.join(", ") printf ", %8.6f\n", Math.sqrt(s) end

ところが、3時間以上たって、温泉から帰宅して昼食のうどんを食いおわった自分になっても、処理が半分も済まなかった。これは決してRubyだから遅いという意味ではない。割り算の繰り返しで \(2^{100000}\) の場合の処理を済ませた後、あらためてまた \(2^{100001}\) を計算するところからやりなおしたりして、俺が書いたプログラムがあまりに安直で無駄が多いのだ。欲しい桁数だけの整数の配列を用意して、収められている数字の個数を数えてから10進数として2倍することをくり返すことで割り算を避け、また累乗の手間を省くように手順を改めよう。そのために、次のようなプログラムを、こんどは FreePascal で書いた。

program CountDigits; uses Math; const LOG2 = ln(2)/ln(10); MAXIDX = 150515; var counter : array[0..9] of LongInt; digit : array[0..MAXIDX] of byte; lastIdx : LongInt; pwr : LongInt; procedure doCount; var k : integer; idx : LongInt; x : LongInt; begin for k := 0 to 9 do counter[k] := 0; for idx := 0 to lastIdx-1 do begin x := digit[idx]; counter[x mod 10] := counter[x mod 10] + 1; counter[x div 10] := counter[x div 10] + 1 end; if (digit[lastIdx-1] < 10) then counter[0] := counter[0] - 1 end; procedure makeDouble; var idx : LongInt; carry : integer; x : LongInt; begin carry := 0; for idx := 0 to lastIdx-1 do begin x := digit[idx]*2; digit[idx] := x + carry; carry := digit[idx] div 100; digit[idx] := digit[idx] mod 100; end; if ( lastIdx <= MAXIDX) and ( carry > 0 ) then begin digit[lastIdx] := 1; lastIdx := lastIdx + 1 end; pwr := pwr + 1 end; procedure initArray; var idx : LongInt; begin pwr := 0; lastIdx := 1; digit[0] := 1; for idx := 1 to MAXIDX do digit[idx] := 0; end; procedure printDigits; var idx : LongInt; begin write(digit[lastIdx-1]); for idx := lastIdx-2 downto 0 do if ( digit[idx] < 10 ) then write('0',digit[idx]:1) else write(digit[idx]:2); writeln; end; var k : integer; places : LongInt; x,s : real; begin initArray; while (lastIdx <= MAXIDX) do begin doCount; write(pwr, ', '); s := 0.0; places := trunc(pwr*LOG2)+1; for k := 0 to 9 do begin write(counter[k], ', '); x := counter[k]/places - 0.1; s := s + x*x/10 end; writeln(sqrt(s):8:6); makeDouble; end; end.

RubyでなくPascalで書いた理由は、最適化されたネイティブコードをコンパイラが出力してくれるということもあるけど、なにしろこちとらまだRubyは覚えたてで、まだ難しいことが書けないからでもある。ともあれ、このプログラムを走らせると、乱数で選択するまでもなく、ゼロから百万までの すべての \(N\) について \(2^N\) の数字をカウントして出力する処理が30分足らずで済んでしまった。吐き出されたデータは1,000,001行にわたるCSV形式のテキストで、Bzip2圧縮しても16メガバイト以上ある。だが、そいつを一行づつ読み込んでは集計して結果を出力するプログラムなら、Rubyで書いてもそれほど重くはならない。

この計算結果をもとに、\(2^N\) の十進展開における数字の分布の標準偏差 \(\sigma_N\) と \(\sqrt{N}\) との積がどのような値になるかを図示すると、次のようにきれいな釣り鐘形になった。

\sigma_{N}\sqrt{N}が示す釣り鐘形の分布
\(\sigma_N\sqrt{N}\) \((N=0, 1, \ldots, 10^{6})\) の分布

また、0から9までのそれぞれの数字の分布は、\(1/10\)の近傍に鋭いピークをもつ釣り鐘形をなす。たとえば、\(N\) を 0 から 1000000 まで動かしたとき、 \(2^N\) における数字ゼロの出現頻度が 0.09 から 0.11 の間にあるケースは 996961個ある。

このように、統計的には \(N\) を大きくすればするほど \(2^N\) の十進展開における数字の分布は均等になる傾向にあるといえるが、一昨日の日記に書いたように、俺が欲しいのはすべての \(N\) にわたって例外なく成立する規則で、とくに \(\sigma_N\sqrt{N}\) が有界にとどまるということの確証と、上限の評価が欲しいわけだ。これはもちろん、コンピュータの数値計算だけで決着をつけられる問題ではない。


2011年3月4日(金)くもり

午後の会議で配布された資料は部外秘が多かった。部外秘の資料には「乞返却」の文字が印字されているのが常だ。だが、きょうに限ってひとつだけ「迄返却」と印刷された資料があった(笑)

新年度のゼミ生は2人。一人は発表会を聴いて不完全性定理に興味をもったといい、もう一人は2年生のときの『集合と位相』が面白かったので集合論をやりたいという。それで、一人には今年度と同じ前原昭二『数学基礎論入門』(朝倉書店)を読ませ、もう一人には田中一之編『ゲーデルと20世紀のロジック』(東京大学出版会)の第4巻「集合論とプラトニズム」から、渕野さんの「構成的集合と公理的集合論入門」を読ませる。これなら進度調整に気を使わずにすむ。

今夜は妻が関与しているNPO法人の合宿というのがあり、妻子は愛南町へ行っている。


2011年3月3日(木)くもり

自分を含むコース全員の修士論文が合格したという知らせに妻は感涙フロオケ一杯だったとか。この2年間ほど、いろいろ愚痴も聞いてきて、昨日とうとう我慢しきれずちょっとだけ書いてしまったが、主査の先生も最後に差しかえた論文はずいぶんよくなったと認めてくれたという。それなら、外野席の俺はもう何も言うまい。妻も苦労の甲斐あって晴れて修士さまだ。よかったよかった。

〜 * 〜 * 〜

一昨日と同様のグラフを今度は \(1000\leq N < 40000\) の範囲で計算し GNUPLOT で作画した。サンプルを \(N=40000\) まで延長しても、予想どおり標準偏差は \(0.5N^{-1/2}\) を中心とする範囲にある。

GNUPLOTで作画した標準偏差のプロット

上からの評価として \(1.111N^{-1/2}\) のグラフ(紫色のカーブ)を書きこんである。図では見えにくいが、 \(N=22000\) の付近にこの曲線より上に飛び出た値があるようだ(翌日追記: \(N=21945\) のとき \(\sigma\sqrt{N}\) がおよそ\(1.113853\) になる)。そこで少し係数を大きくとって \[ \sigma_N\leq 1.2\frac{1}{\sqrt{N}} \] という予想を立てる。もしもすべての \(N\) でこの不等式が成立するなら、\(N\geq1440\)のとき \(2^N\) の10進展開には \(0\) から \(9\) までの数字がすべて現われると結論づけられることになる。というのも、もしも10個の数字のうちひとつが一度も出現しないとしたら、数字の分布の標準偏差は \(1/\sqrt{1000}\) より大きくなるはずだからである。

後日追記: 上記の予想に対する反例が \(N=286234\) のところにある. そこでは係数は およそ \(1.236939\) になっている. 百万以下の \(N\) で \(\sigma_N\) が \(1/\sqrt{N}\) の1.2倍を越える例はここにしかない. (3月5日)

実はこの問題の発端は20年ほど前、名古屋の大学院生だったころに遡る。俺はたまたまその場にいなかったのだけど、あるときいつものように計算機の部屋に集ってゲームの話などしていた学生と若い教官たちが、何かのきっかけで2の冪を

1
2
4
8
16
32
64
128
256
512
1024
……

とホワイトボードに書き始めた。\(2^{17}=131072\) に至ったときに、誰かが急に「惜しいなあ、3桁めの0がなければ奇数ばっかりなのに」と言いだし、それから「2の冪乗で、10進展開したとき最下位を除く桁がすべて奇数となるのは \(2^4=16\) と \(2^5=32\) と \(2^9=512\) だけか」という問を発して議論を始めたという。しょせん夕食後の茶飲み話であるから、議論はそのまま立ち消えとなったようだ。翌日ホワイトボードに2の冪乗が書いてあるのを見た俺は同期の青木邦匡からこの事情を伝え聞いた。それで、その後20年以上、折にふれて思いだしては考えているというわけ。これは数論的な問題というよりは、ある種のセルオートマトンに関する力学系の問題のように思われたので、もとの問題をそのまま究明しようとするより、数字の出現頻度についての言明に置き替えたほうがいいと考えた。さいわい Ruby の処理系が多倍長整数計算をサポートしているおかげで数値実験ができて、標準偏差の推移についての予想が立てられたが、さて、どう証明したものか。あるいは無理数 \(\log_{10}2\) の分数近似が鍵になるような気もするが。


2011年3月2日(水)くもり

急いで大学に行って修士論文の手直しをしないといけないと妻が言い出した。副査の先生にいろいろと意見されているというのだが、提出の公式の締切が過ぎ公開審査も終わってから妻の様子が急に慌ただしくなりだしたのを見ていると、妻の未熟さもさることながら、ひょっとして大学院の指導体制のほうにも問題があるんじゃないのかと言いたくなる。

先日の数学専攻の修士論文審査会でも、指導教員以外の先生がいろいろ質問して学生が答えられないという場面が繰り返されて、そんなのはセミナーでやっとけよと思ったばかりだから、なにも妻の通っているコースだけが指導体制に問題を抱えているわけではない。どの分野を専攻するにせよ、研究内容を散々叩きまくって問題点を洗い出すなんてことは、本来ならば論文提出に至るまでの過程で徹底的にやっておくべきことなのだ。

しかし、話を聴いてみるに、先生の意見とは、詮ずるところ妻の研究に向かう姿勢に疑いがある (つまり日頃の態度が悪い) という苦情だったようだ。こちらにもそれについては言い分があるとはいえ、指導教員に対して妻が従順でなかったことは確かだから、それはそれでもっともな指摘ではあるだろう。それでも、修士論文の審査を通す通さないのご沙汰は、それとは自ずから別問題じゃないだろうか。俺は子供の頃から非社会的な性分で、しかも基本的に人間相手でない数学が専門だったりするものだから、先生に呼び出されたら子供が泣いていようが家事の途中であろうが飛んでこなきゃならんとか、そういう態度とか心がけの問題が、論文審査に影響するなんて事情は、全く理解できない。

だがまあ、ところ変わればなんとやらだから、代わりに子供の面倒を見るために早退してやった。これには、たまたま仕事が比較的ゆるい日であったということの他にも理由がある。妻が呼び出しを食らったというその連絡を受けた直後にほとんど雹みたいな大粒の霰が降りだして、遠足に行っている娘のことが心配になったのだ。実際には、天気はさいわいしばらくして回復したが、娘は公園の遊具で頭を強打したとかで、額に大きなたんこぶを作って帰ってきて、いつになくしょんぼりしている。妻が急用だからといって、そんな時に子供らを託児所に預けるには偲びないじゃないか。まあ、妻の研究生活をめぐる已むを得ぬ憤りに加えて花粉症と家の散らかり具合のせいでイライラカリカリしている父親と顔を合わせているくらいなら託児所のほうが楽しいと子供らは言うかもしれないけどな。

やる気のないあひるやる気のないあひる

気を取り直して数学の話をする。整数 \(2^N\) の10進展開の桁数は \([ N \log_{10}2 ] + 1\) である。この桁数を \(L\) と表記することにしよう。いま仮に、同じ長さ \(L\) の数字列をまったく無作為に選んだとすると、(たとえば 0 なり 4 なりの) 各々の数字の出現数は二項分布に従うことになり、ある数字がこの列に \(r\) 回現れる確率は \[ \begin{pmatrix} L\\ r \end{pmatrix} \left(\frac{1}{10}\right)^r \left(\frac{9}{10}\right)^{L-r} \] となるだろう。このことから、一つの数字の出現頻度の平均は \(1/10\), 標準偏差は \(0.3 L^{-1/2}\) となることがわかるが、\(L\) が \(N\) のほぼ \(\log_{10}2\) 倍であることを考慮すると、標準偏差はおおよそ \(0.5468 N^{-1/2}\) ということになり、昨日の数値実験で得られた \(2^N\) の10進展開における数字の出現頻度のバラツキをプロットした図における赤い曲線に近い値になっている。もちろん、\(2^N\) の10進展開の各桁の数字は無作為抽出とは対極にある完全に決定論的 (deterministic) なプロセスで計算されたものだが、それにしてもこの一致は興味深い。なにか理由がありそうだ。

なお、二項分布の平均と分散は、二項係数についての公式 \[ r\begin{pmatrix} n\\ r\end{pmatrix} = n\begin{pmatrix} n-1\\ r-1\end{pmatrix},\qquad r^2 \begin{pmatrix} n\\ r\end{pmatrix} = n(n-1)\begin{pmatrix} n-2\\ r-2\end{pmatrix} + n\begin{pmatrix} n-1\\ r-1\end{pmatrix} \] を用いて求めることができる。この公式自体ちょっと意外で興味深い。


2011年3月1日(火)あめ

細かい雨がしとしとと降り、すこし寒い。先週末から休日返上でとりくんだ仕事も昨日で一段落して、キャンパスはとても静かだ。

さて、きょうはRubyの多倍長整数演算を使った数値実験の話。下の図を見てほしい。これは \(2^N\) を10進数展開したときの \(0\) から \(9\) まで数字の出現頻度のバラツキ (標準偏差) を \(N=1\) から \(19,999\) までプロットしたもので、横軸が \(N\) で縦軸が標準偏差 \(\sigma\) をあらわしている。赤い曲線は \(\sigma = 0.5N^{-1/2}\) だが、これが実にいい具合に青い点の集まりの中央付近を通っているのがわかる。

2^Nにおける数字の偏りの推移
(フルサイズの画像にリンクしています)

そこで、整数 \(2^N\) を10進数展開したときの数字の出現頻度の偏り具合は、局所的に見れば乱高下しているものの、大域的にみると \(N\) の平方根の逆数のオーダーで緩やかに減少しており、とくに \(1/\sqrt{N}\) のある定数倍を決して越えないと予想される。しかもその定数は \(1\) に等しいかそれより少しだけ大きい程度だと、図から予想される。このことをきちんと定式化して証明できないだろうか。

ところで、上の画像ファイルは Ruby プログラムを走らせて(半日がかりで)出力したデータをもとに Chipmunk Basic でテキトウに作ったものだ。もうひとつ、Ruby で \(N=4096\) まで計算させたデータを用いて Excel で描いたグラフも載せとこう。

エクセルで描いたもの
(フルサイズの画像にリンクしています)

しかしどちらの図も少々オソマツだな。ここはやはり Gnuplot とか R とかの使い方を覚えなくては。