2010-06-27

"ふつうのコンパイラをつくろう" 青木峰郎 著

本屋で立ち読みしていると、嵌ってしまった。こいつは、なんとなく凄い!なにしろ、ド素人の酔っ払いでさえも理解した気にさせてくれるのだから...ただし、これがふつうかどうかは知らん。
半分ほど読み終わったあたりであろうか、600ページ余りと重たいので腕が疲れてきた。ちょうどその時、カウンタから鋭い視線を感じる。お姉さんと目が合った。ドスの利いた声で「この本を頼む!」と声をかける。お姉さんは決まりきった営業台詞であっさりとかわす。どうやら照れ屋さんのようだ。

コンパイラの構造を眺めていると、昔のくだらない記憶が蘇る。実は、論文を書くのにドキュメントコンパイラなるものがあるといいなぁ、と思った時期がある。自分の文章を解析しながら、せめて誤字脱字チェッカだけでもできないものかと考えたりしたものだ。精神の泥酔者は嫌になるほどミスが多い。特許部から大量に添削された資料が戻ってくると、いつもうんざり!代理士と話をするのが憂鬱で仕方がなかった。周りには姑チェックの鬼が一人や二人はいるもので、いつも助けられる。
ところで、自分の書いた文章を解析するパーサを作るのは虚しいものがある。自己否定するような、自己嫌悪に陥っていまいそうな...自我の存在を少しでも認めたいがために、無暗に形容詞を混ぜたいという衝動は抑えられない。そして、自我は発散し、ついにはドキュメントコンパイラはcore(ゲロ)を吐くのであった。技術論文であれば、形容詞の扱いも制限できて、ある程度は形式化できそうな気がする。ボキャブラリが乏しいアル中ハイマーの文章ならば、効果的だろうと思った。しかし、形容詞には微妙なニュアンスの違いを吸収する緩衝材のような役割がある。いわば文章の華のような存在で、文章で癒されるのは形容詞の部分が大きい。
最近では、とても技術資料とは思えないような文章を書くようになった。それでも、ええんでないかい!精神の動きに身を委ねて!どうせ、まともな文章が書けるわけではない。元来、文章恐怖症な上に筆不精なところがあったが、精神の泥酔とともにそんな感覚も麻痺してしまった。脂ぎった欲望を捨て切った時、自然に精神が解放されるのだろうと信じて...

コンパイラは、ほとんど言語仕様で決まるようなものである。しかし、近年はダイナミックリンクも当り前となり、いまやOSを含めた実行環境に依存すると言ってもいいだろう。言語仕様にガベージコレクションのような強力な機能を搭載しているものや、実行環境に実行速度を上げるためのJIT(Just in time)のような機構を備えているものも珍しくない。スクリプト言語とはいえ、実行時に機械語に翻訳しながら動的にコンパイルするなどは普通に見られる。こうなると、従来のインタプリタの概念は、あまり意味がないのかもしれない。
言うまでもないが、コンパイラは作成者の意図を明確に指示しなければ正常に動作しない。まず、新たにプログラミング言語を使う時に注意することは、データ型の整合であろうか。個人的にはデータ型の定義が曖昧な言語はあまり好きになれない。いまだにbasicのイメージが残っているからであろうか?しかし、流行のスクリプト言語は、ほとんど曖昧な方向にあるようだ。確かに面倒な記述から解放されるのはありがたい。数年前から好んで使うRubyも全般的にデータ型の定義は緩やかである。だが、Rubyの場合は数値リテラルなど厳格に型チェックされる部分もあって、その按配が肌に合う。
曖昧さと言えば、構文解析で難しいイメージがあるのが、選択制御文である。C言語のif文の曖昧さは有名らしい。その感覚は酔っ払いだけではなかったか。elseがどのifにぶらさがっているのか、あるいは、ネストが深くなると選択肢の衝突が起こったりする。こうした問題は慣習的に回避しているところがある。ちなみに、回路設計ではハードウェア記述言語(HDL)を使うが、ここでも曖昧な記述はとんでもない回路を生成し、シミュレーションと実装がマッチしなかったりする。
こうした言語の曖昧さの按配というものは主観的な要素が大きい。どんな業界でも見られる暗黙というのが意外と紛らわしい。専門用語ですら、会社や組織によって微妙なニュアンスの違いを見せるのだから。したがって、言語の好みが分かれるのは自然であろう。そして、コンピュータ言語の多様化が進むのかもしれない。生産効率性という意味では矛盾するのかもしれないが、いや、人間社会の多様化には矛盾しないのか?いずれにせよ、製作者がユーザ意識とマッチするものを見出すことができれば、その業界で生きていく幸せが得られるのであろう。

本書は、一冊を通してC♭(シーフラット)という言語のコンパイラcbcを作成する。これは、ほぼC言語のサブセットで、ポインタ演算など主要部分を実装しているから、なんとなく凄そうなオモチャである。実行環境が、x86系で動作するLinuxをターゲットにしているのも手軽だ。ちなみに、C言語とJava言語を知っていることが前提だという。そういえば、むかーしJavaをちょろっとかじったことがあるが、その程度の知識でも十分についていける。そして、構文解析、抽象構文木、意味解析、中間表現から、アセンブラ、リンカ、ELFファイルの作成、更にx86アーキテクチャまで網羅され、プログラミングの実行環境を一冊で見通せる構成となっている。物理アドレスと仮想アドレスにおけるポインタイメージや、限られたレジスタでのスタック構造と関数呼び出しのイメージなどが少々くどく感じられるのは、初心者にも配慮しているからであろう。それにしても、これだけを一冊で網羅しようという試みには畏れ入る。
また、スキャナ(字句解析)やパーサ(構文解析)の実装にはJavaCCを利用し、アセンブラやリンカにはgnu環境を利用している。コンピュータの歴史で、字句解析や構文解析のノウハウが蓄積されているので、こうした定石を使うのが手っ取り早い。業界スタンダードから逸脱したツールは相手にされないということだろうか。考えてみれば、クロス環境がgnu環境で揃うのも凄い時代である。アル中ハイマー世代でお馴染みのアセンブラといえば、masmであろうか。なにしろ、組込み系では、C言語のような高級言語のコンパイラでは性能が出せないために、必然的にアセンブラで書いていた時代である。20年ぐらい前かぁ。
ところで、C言語って今でも高級言語なの???

1. cbcの実装イメージ
C♭には、プリプロセッサがない。したがって、#defineや#includeの代わりにJavaに似せてimport宣言を導入している。データ型には浮動小数点の機能がない。他にも構造体や共用体にも制限がある模様。インポートファイルの構文は、関数宣言、変数宣言、定数宣言、構造体や共用体の定義、typedefのみ。これだけあれば十分に実用レベルと言えよう。ちなみに、パッケージ構造はJavaの標準的なディレクトリ構造に従っているという。
mainメソッドの実装は、単純な構造をしている。コマンドライン引数をOptionクラスのparseメソッドで解析し、SourceFileオブジェクトのリストを得る。SorcsFileオブジェクトは、ソースコードを一つ指定して、buildメソッドに丸投げする。buildメソッドは、foreach文でSourceFileオブジェクトを一つずつ取り出し、Compileメソッドでコンパイルする。Compileメソッドは、ParseFileメソッドでソースコードをパースする。その結果、得られるASTオブジェクト(抽象構文木)に対して、semanticAnalyzeメソッドで意味解析を行う。更に、IRGeneratorクラスのgenerateメソッドでIRオブジェクト(中間表現)を生成する。
ここまでがフロントエンドのコード...
続いて、generateAssemblyメソッドでアセンブラコードを生成し、writeFileメソッドでファイルを書く。最後にlinkメソッドを呼び出して、オブジェクトとライブラリをリンクするといった感じ...

2. JavaCC
JavaCCは、スキャナとパーサを兼ねていて、両方を1つのファイルで同時に記述できるという。パーサジェネレータは、LLやらLALRやらLRといった扱える文法の広さによって区別されるようだ。ちなみに、LRが最も広い文法が扱える。どんなパーサも万能であるはずがない。処理速度など用途に合わせて使い分けるのであろう。
JavaCCは、LLパーサジェネレータで、専用ライブラリを必要としないという。人によっては、パーサジェネレータをコンパイラコンパイラと呼ぶらしい。つまり、コンパイラを生成するコンパイラという意味。JavaCCのCCもコンパイラコンパイラの略。ちなみに、JavaCC4.0では、エンコーディングを指定して日本語文字列のパーサ処理ができるという。このあたりにうまいこと規則を埋め込めば、ドキュメントコンパイラなるものも作成できるのかもしれない。
本書は、字句解析にJavaCCの持つ正規表現を利用している。JavaCCには、抽象構文木を作るための「アクション」という機能があるという。本書は、自力でアクションとノードクラスを書いて構文木を構築しているが、実は半自動生成できるツールにJJTreeというものがあるらしい。JJTreeは、ノードのメンバを配列で持つ設計になっているという。あまり配列に抵抗を感じないが、著者の好みには合わないらしい。

3. パーサの流れ
パーサと言えばyaccの時代が続いていた。yaccはLALRパーサジェネレータの代表格だそうな。
最近は、Packratパーサというものが登場したという。無限に先読みできて、スキャナとパーサを区別せずに書けて、メモリ消費量はソースコード長に比例するという特徴を持っているという。しかも、文法が曖昧にならず、ぶらさがりelseのような問題が発生しないのだそうな。
他にも、プログラミング言語をそのまま使って文法を記述する手法で、パーサコンビネータという技術があるという。JavaCCがJavaとは違った文法を記述するのに対して、そのままの言語でパーサが記述できるので、パーサジェネレータ自体がライブラリとなって、JavaCCのような別のツールを必要としないらしい。プログラミング言語を同じ言語で解析するとなると、自己矛盾に陥りそうな気もするが...

4. プログラムの実行イメージ
プロセスのメモリ展開には、mmapシステムコールを使う。そして、ELFセグメントとメモリ領域の対応や、スタックやヒープの関係など、プログラムの起動から終了までの過程が説明される。
また、GOT(Global Offset Table)とPLT(Procedure Linkage Table)のアドレス取得イメージから、実行可能ファイルであるPIE(Position Independent Executable)の生成といった実行イメージが解説される。ちなみに、GOTはプログラムを位置独立にする柔軟な仕掛けであるが、セキュリティ上は問題があるという。任意のアドレスへ飛ばすようなGOT上書き攻撃があるから。

2010-06-20

"研究室ですぐに役だつ電子回路" 阿部寛 著

「屁理屈はどうでもよいから、こんなことを実際に測定したいというときに、間違いなく測定できる手法を知りたい。」
これが、本書のコンセプトだそうな。とはいっても、基本的な理屈は知っておかなければなるまい。最小限の理論で役立つ実践的な方法といったところだろうか。そして、伝送系やマイクロ波における回路理論をコンパクトに綴ってくれる。ただ、トランジスタやオペアンプを使った、ちょっとした回路製作を期待していたが、この点ではいまいちか。それも、物性屋からの視点が色濃いからであろう。おいらには、ちょっと違った感覚を味あわせてくれておもしろい。
今宵はなんとなく新人時代を思い出す。最近、新人君と接する機会が多く、失敗談を曝け出すようにしている。ちなみに、新人君を勇気づけるための失敗ネタは、いくらでも提供できる。
主語に「友達の友達は」と付けながら...それって自分のことか?アル中ハイマー病患者に定かな記憶を期待するもんじゃない。武勇伝を重なることは、後に笑いネタにできるからいい。だから、いまだに失敗に快感を覚えるのか?

今では、ほとんどソフトウェア寄りの仕事ばかりで、すっかり回路製作に縁が無くなった。昔は、「回路治具」と呼んでいたが、今でも使われる言葉だろうか?方言かもしれないなぁ。要するに大人のおもちゃである。経験してきた電子回路の仕事といえば、主にデジタル回路に実装するためのアーキテクチャ設計といったところだろうか。おいらにとってアナログ回路は、デジタル回路の実験のための補助的な位置付けにしかない。アナログは物理数学の領域にあり、苦手な分野から逃げ回っていたという経緯がある。とはいっても、システムを安定に動作させるために、安定化電源や確実なリセット動作は必須である。三端子レギュレータを使って、安価な電源回路ぐらいは製作したものだ。システムが複雑化すれば、電源シーケンスを疎かにすると、ラッチアップや過電流の原因ともなる。ちなみに、素子を何度か燃やしたことがあり、先輩から呆れられたものだ。
電池駆動となると些細な工夫が必要になる。電源オフ時にマイコンを動作させて、EEPROMやフラッシュメモリにバックアップさせたい場合は、遮断回路にも気配りする。
デジタル回路はノイズ源でも悪名が高いので、システムの誤動作には肩身が狭い思いもした。
また、実験室では、テスト用の簡易的な周辺回路が重宝する。例えば、振幅や周波数やデューティ比を制御できる発振回路や、モノマルチを使った簡単な信号発生器や、ピーク検出器といったものである。デジタルシステムでは、ビット誤り率を計測するカウンタ回路も便利である。
主に使う知識といえば、差動回路や帰還回路といったところだろうか。ほとんど理論は無視してカットアンドトライで誤魔化していた。差動の対称性が、耐ノイズ性に優れているのはなんとなく感覚で分かる。微小信号でも、双方でスイングすれば伝送系で効果がありそうに感じる。その重要な特性は、外因に対する同相の除去効果である。帰還回路では、負帰還で高精度の信号処理をしたり、正帰還で発振器を作ることができる。
こうしたテスト用回路を、すべて高価な装置に頼ることは非現実的であろう。

パソコンと連携してデータ解析するのは便利である。当時、測定器のI/F仕様は、GPIBやHPIBといったものが主流だった。当時は、I/F仕様は自然に頭に入っていたような気がする。自作ボードとパソコンを接続する時に手軽なのがRS-232Cで、マイコン制御するのにアセンブラで記述しても大して手間がかからない。今では、USBを持った市販ボードや雑誌の付録ボードなどが登場して、随分と手軽になったようだ。しかも、大規模なFPGAが搭載されたボードも登場して、CPUやDSPのソフトウェアコアも体験できる。
おいらの新人時代に、ちょうどプログラマブルデバイスが登場した。ザイリンクスのLCAが登場したのが80年代。PALやGALが登場し、74シリーズで組み上げていた時代には画期的だった。まだ、FPGAなんて言葉すらなかった時代である。1000ゲート規模のLCAにランダムロジックを実装すると、動作周波数3MHzで動かすのも苦労する。しかも、使用効率30%ぐらいまで下げないと動作せず、手探りで分割しながら基板の修正にも追われるなど、メーカー公表値で全く動作しなかったのを覚えている。とても製品に搭載するなんて発想もなく、実験レベルのデバイスとして認識されていた。こうした記憶を掘り起こせば、現在のFPGAの性能の高さは驚異的である。なにしろ、アマチュアでも高機能の回路設計を楽しむことができるのだから。
ところで、どんな学問でも言えるのかもしれないが、プロとアマの境界線がだんだん曖昧になっていくような気がする。情報化が進み、知識を得るのが便利な世の中になればなるほど、アマチュアの中から優れた専門知識が誕生することも珍しくない。プロの能力として差別化するのも大変な時代とも言える。そして、プロ意識を持続することも難しくなろう。悲しいかな!興味のあることにしか反応できないアル中ハイマーは、プロ意識とは永遠に無縁である。

1. 実験環境と心構え
本書は、実験における心構えから語られる。そして、乱雑な環境には研究者の基本姿勢が現れるという。そういえば、新人時代、先輩から整理整頓の大切さを指摘された。ボードの製作では、ノイズを抑えるための配線の美しさというものがある。実際に、乱雑な設計やスパゲッティ配線は、怪しい動作をする。
また、抵抗やコンデサーといった部品素子の在庫をチェックして、不足分を予算化するのは新人社員の仕事である。逆に、便利な部品や、興味のあるICなどを、予算に組み込む特権がある。とはいっても、知識が乏しいので先輩の影響力を強めるのだが...そのうち要領を得て、試したい実験のための部品をこっそりと揃えることができるようになる。そして、ICや部品や測定器のカタログを眺めるだけで楽しくなったものだ。
本書は、予算が豊富にあると、必要以上に高価で高機能な測定器を買おうとする悪弊に陥ると指摘している。なるほど、バブル時代になると予算も通りやすく、下っ端のおいらでさえ、高価な計測器をほぼ占有できた。GHz帯の測定器など、何の研究に使うんだと皮肉られたものだ。当時のマイコンは、8bitが主流で動作周波数もせいぜい10MHzぐらいだから、オーバースペックであったのは間違いない。実験室では、古びた実験机が汚くて買い換えを提案したりもしたが、年季のはいった木製の机にもそれなりに意味があった。スチール製だと電磁波が反射するので、電気的に影響のない材質でなければならない。
また、測定器や装置などの配置も馬鹿にはできない。長時間の実験では、疲れない姿勢を保ちたい。効率的で無駄のない実験室というのが理想であろう。研究所ということもあって、実験環境は空間的にも恵まれていた。実験机も大きく、オシロスコープ、ロジアナ、スペアナ、コンピュータなどが自由に配置できた。しかし、環境が恵まれていると実感したのは転職してからである。人間は、自分が優遇されていることに、気づきにくいものであろう。

2. 材料のインピーダンス
「インピーダンスは、一般に電子回路、電子部品材料の交流の入力に対する応答から定義される量で、交流電圧に対する交流電流の流れにくさを表す量である。直流の電気抵抗は、周波数がゼロのインピーダンスということもできる。」
この言葉は、さりげないようで、インピーダンスの複素特性をうまいこと表現しているように思う。電圧や電流は、現実には実数の量であるが、電圧と電流が絡み合うと位相関係があって厄介となる。もし、回路が線形であれば、複素空間に持ち込んで最終的な量を実数部として扱えばいいだろう。本書は、物質の複素誘電率を求める例から、材料のインピーダンス測定が、物性物理学の理解につながることを匂わせてくれる。しかし、物質のインピーダンスを測定することは現実に難しい。例えば、コンデンサの電場分布では、エッジ効果も考慮しなければならない。インピーダンスの測定といえば、基本中の基本であるが、その奥深さを教えてくれる。位相があるということは、共振する場合もああれば、うまいこと打消し合うように構成することもできる。こうした特性を利用して、様々な回路アイデアが登場する。位相の測定だけでも一苦労と言えよう。そこで、位相測定では、二重平衡ミクサ、矩形波間の遅延時間を測定する方法、掛け算器による位相を検出する方法、サンプリングによる高周波の位相検出が紹介される。昔、位相検出回路を、入力信号のトリガに役立てたりしたものだ。

3. 四端子法
本書は、材料の電気抵抗を測定するのに、四端子法を紹介している。ただ、理論は単純でも、おいらにはあまりない発想なのでメモっておく。プリント基板や配線パターンの設計者は、こうした発想が大切なのだろう。
単純に考えれば、材料の両端に電極を付加して、その電極間を測定すればいいはず。しかし、単に金属を真空蒸着しただけでは、オーミックな電極はできない。ちなみに、オーミックな電極とは、電極にほとんど電圧が印加されず、単に電流の流し口になる電極のことである。電極と材料の間には、複雑なポテンシャル障壁が形成されるので、電圧が障壁近傍に集中し、材料に一様に印加された状態にはならない。半導体ともなれば、小数キャリアの注入が発生したりと厄介である。
そこで、四端子法が多用されるという。まず、電流用の電極を材料に付加し、電極から十分に離れたところに測定用電極を二つ付加する。これはオーミックである必要はないという。つまり、電流用電極から十分に離れているので、奇妙な障壁近辺の現象に影響されることが少ないというわけか。

4. PLL回路
PLL回路は、位相差検出と、電圧制御発信器と、分周器で構成される。これは、テスト入力用の信号発生器で、位相をロックさせたりするのに便利である。おいらのおもちゃにもエントリしていた。
本書は、PLL用ICを使った例を紹介している。そして、発振の振幅制御にはPINダイオードを減衰器として使っている。また、ダイレクトデジタルシンセサイザ(DDS)の選別をしながら、理解していったエピソードも紹介してくれる。矩形波、ノコギリ波などの信号発生器は、ちょっとしたテスト入力用に重宝する。こうした信号発生器とPLLを組み合わせると、簡易的な試験がやりやすくなる。

5. マイクロ波
マイクロ波の帯域では、電磁波にも配慮しなければならない。電磁波の伝播特性は、マクスウェルの方程式によって与えられる。伝送系では、電場と磁場の成分が発生する。電流が流れると、磁場が発生し磁気エネルギーが発生する。回路理論的には磁界というやつか。また、電位差があれば、電場が発生し静電エネルギーが蓄えられる。つまり、伝送線路は、直列インダクタンスと並列容量による梯子型の等価回路をモデルとして扱うことができるというわけだ。そして、いかに損失のない伝送路にするかが問題となる。平たく言えば、インピーダンスに対する反射の現象で、うまくマッチングさせればいい。
本書は、伝送路に定在波が形成されるケースで、負荷インピーダンスを決定する様子が簡単に説明される。また、マイクロ波を解析する時に有効なスミス図表のちょっとした使い方も紹介してくれる。

2010-06-13

"ある数学者の生涯と弁明" G.H.Hardy & C.P.Snow 著

ゴッドフレィ・ハロルド・ハーディを知ったのは、リーマン予想に関する文献を読んだ時で10年ぐらい前であろうか。この解析的整数論の巨匠は、リトルウッドとの共同研究やラマヌジャンを見出したことで有名であるが、ゼータ関数で近似関数等式を示し、自明でない零点の数が無限に存在することを証明したことでも知られる。
本書には、G.H.ハーディの著書「ある数学者の弁明」と、その友人C.P.スノーが綴った偉大な数学者の回想録「ハーディの思い出」の二篇が収録される。たった100ページほどの量だが、重量感は抜群!これは数学書というよりは哲学書である。まぁ、酔っ払いにとって数学は哲学であるので、まったく違和感はない。

「ある数学者の弁明」では、ハーディの晩年の苦悩と弁解が綴られ、数学は創造的な芸術であると誇り高く語りながら、数学の意義と正当性が語られる。ハーディは、純粋数学の偉大さは戦争に関与しないと自慢しているが、後に、相対性理論へ影響を与えて核兵器の応用になったり、数論が軍用の暗号システムで活躍したことは皮肉であろう。純粋な精神は、脂ぎった政治力によって悪用される宿命を背負う。
「専門の数学者にとって、数学について書くと言うのは憂鬱な経験である。数学者の役割とは、何かを為すこと、即ち新しい定理を証明し、数学に新たなものをつけ加えることであり、自分自身や他の数学者がしてきたことについて語ることではない。政治家は政治評論家を軽蔑し、画家は美術評論家を軽蔑し、生理学者、物理学者あるいは数学者も同様な感情を普通抱いている。つまり、創造する人々が、説明する人々に対して抱いている軽蔑ほど根が深く、また全体として正当なものではない。解説、批評、鑑賞などは二流の人の仕事である。」
ハーディは、評論家の立場で物事を語ることを蔑む。だが、創造的な情熱を失った晩年の姿には、もはや評論家の立場に置くしかない寂しい様子がある。そして、「反感を持ったり、嫌になったりしても、退屈するのだけは良くない」と最後の情熱を絞り出すかのように弁明する。純粋な精神が解放された作品には、芸術性を顕にする迫力がある。創造的な生き方ができなくなったと悟ったからこそ、哲学的名著が生み出せたのかもしれない。この偉大な数学者は、純粋数学を追い求めてきて、ついに純粋な精神に到達したのだろうか?芸術に到達した精神には何が見えるのだろうか?
「本当に一つのことをよくやれる人となると、一握りに過ぎない。まして、二つのことを本当によくやれる人の数は無視できるほどのものである。」
それゆえに、才能のある人はあらゆる犠牲を払ってでも、能力を高めなければならないという。知的分野であれ、スポーツであれ、あらゆる分野において達人の域に至った者でしか味わえない境地というものがあるのだろう。
「本当の腕利きを賞賛しない者は、(いやな意味での)知識人だけである。」
人生を一つのことに集中できるというのは、一部の天才たちにのみ与えられた幸せなのであろう。多くのものに手を出しても、どれも究めることなどできやしない。なんでもできるってのは、なんにもできないことを意味し、器用貧乏で終わる。
しかし、だ!凡庸にも満たない酔っ払いに、勝手な解釈で暴走する以外に何ができようか?創造する側に立つのは、はかない憧れでしかない。一つのことすら中途半端にしかできないのであれば、いろんなことに手を出すことに幸せを見出すのも悪くはない。それが酔っ払った凡庸未満の生き方というものである。そして、夜の社交場でいろいろと手を出して火傷ばかりするのであった。

「ハーディの思い出」では、説教されているような感覚に見舞われる。美しく率直な性格、繊細な精神、妬み心とは程遠い寛大さなどと、おいらの性格とはまるで反対の言葉が並べられるからであろう。スノーは、この天才の珍しい気質はアインシュタインやラザフォードなどの天才たちにも及ばないと評している。天才とは、明らかに異質な存在である。ただ、ハーディの場合は付き合いが長くなるほど親しみがわいて、それほど普通の人とは変わらないことが分かってくるという。数学者というのは、理屈っぽく論理的な会話を好む傾向があり、その点では誤解されることもあろう。純粋性を求めるがゆえに、頑固で個性的な面を見せ、皮肉屋なところもある。どんな優れた人間にも、人間関係で好き嫌いはあるはず。
スノーは、ハーディはけして自己陶酔するような人物ではなかったと評している。しかし、芸術的な作品を残すのに、自己陶酔して精神を開放することも必要であろう。ましてや、これだけの傑作なのだ。
ちなみに、アル中ハイマーにとって、文章を書くためのアルコールパワーは絶大な威力を発揮する。気持ち良く顔を赤らめなければ、自己陶酔に浸れるものではない。そして、酔いが覚めて自分の文章を読み返すと、小っ恥ずかしさのために更に赤面する。精神は異次元へ放たれるために、鏡の向こうの住民はいつも顔が赤い...
また、スノーは、ハーディの意外な面も紹介してくれる。それは、自殺に失敗した哀れな姿である。完璧に自殺しようとして睡眠薬の量が多すぎたんだそうな。ん?自殺のための睡眠薬の適量なんてものがあるのかな?健康を害してどっちにせよ長生きできない体になっているのだが、創造力と情熱を失った後ろめたさのような感傷に浸っている。完璧な数学を求めるあまりに、完璧でない精神に嫌気がさしたかのように。
天才たちが若くして死ぬ多くのケースがある。それが自殺であったり、病死であったりと。彼らは、あらゆる複雑系の単純化を探求した挙句に、人生を単純化するには死ぬのが一番とでも悟るのだろうか?

1. 自己弁護の正当性
「自分自身の存在とその仕事を正当化しようとする人は、二つの異なった問いを明確に分けなければならない。その第一は、彼のしている仕事はするに値するものなのか。第二は、その価値はどうであれ、なぜ彼はそれをするのか。という問いである。」
第一の問いは、難しくしばしばがっかりさせられるという。また、第二の問いは、第一の問いに対して、謙遜した言い方に過ぎないので、第一の問いだけ真剣に考えればいいという。
ハーディは、数学者が数学を弁護することは、ある程度利己的にならざるを得ないことも認めている。自らを無理に正当化する理由も見当たらないが、ある程度の自己弁護は自然の感情であろう。自己弁護は、何かを成し遂げようとする意志の源泉にもなる。ハーディは、自己弁護は才能のある人がやる分には理に適っていると弁明する。客観性のみで語っても、精神の深みを探求したことにはならないだろう。多少の誇張も思考を高めるためには仕方があるまい。そもそも、客観性で語ると言って、そうだった例しを知らない。主観性で語る!と堂々と宣言するあたりに、人間の主観性の強さを客観的に考察しているとも言えよう。

2. 数学の有益性
「数学者が作る様式は、ちょうど画家や詩人の様式と同様に美しくなければならない。様々な概念は、色や言葉と同様に、互いに調和しつつ全体を形作らなければならない。美が第一の条件である。この世には醜悪な数学に永住の地はない。」
ハーディの言葉の引用で、よく見かける部分である。彼は、有益で賞賛に値する学問は数学の他には少ないとし、数学より地位の高いものは天文学と原子物理学ぐらいなものだと語る。ここには、本来、人類が目指すべき学問とは何か?という問い掛けが込められている。それは、人間とは何か?真理とは何か?という精神や宇宙原理の探求であろう。歴史は、本質的な価値はどうであれ、真理こそ最も長生きすることを示してきた。これこそ数学の業績にほかならない。ハーディは、数学はもっとも精密な学問で、魅力的な技巧に満ちていると主張する。おいらは、あらゆる学問の源泉は哲学にあると思っている。だが、哲学は、随分と遠回りをしてきたように映る。その点、数学は、地道に定理と証明の積み重ねで発展してきた。いや、仮説に頼ってきた経緯も見逃せないかぁ。ニュートン曰く、「私は仮説を作らない」。ニュートンは、この言葉を残しただけでも偉大である。今日、人類は不確定性に見舞われる複雑系と、不完全性に見舞われる矛盾性と対峙する。こうした時代に、仮説や仮想に精神の安住を求めるのも仕方があるまい。もしかしたら、複雑系と矛盾性は、宇宙原理の本質なのかもしれない。

3. 年齢と戦う学問
「ガロアは21歳で、アーベルは27歳で、ラマヌジャンは33歳で、リーマンは40歳で...死んだ主要な数学上の功績で、50歳を過ぎた人によって為された例を私は知らない。」
数学者にとって年齢は重要な意味を持つ。そこには、創造的情熱を持ち続けることの難しさがある。偉大な数学者には、晩年を悲劇的に過ごした例も珍しくない。数学とは、一旦精力を失うと、精神を失う世界なのだろうか?数学の世界で老いるとは、創造的な思考を失い自らの存在感を失うことであろうか?生命体にとって、老いほどの恐怖はないのかもしれない。
何かに生涯を賭けて究めようとするのは勇気のいることだろう。良い意味での野心を持ち続けることは難しい。ハーディは、最も高貴な野心は後世に何か恒久的な価値を残そうとするものだと語る。野心が、あらゆることを成就させるための源泉であるのは間違いないだろう。好奇心を高めれば純粋な野心が生起する。しかし、野心が利己主義に陥ってしまえば、これほど有害な存在はない。ちなみに、脂ぎった野心が厄介なことは政治屋が教えてくれる。
ところで、フィールズ賞に年齢制限がつけられることは、時代錯誤に映る。かつて40歳を一つの目安にしたことに、それなりの合理性があったことは否定しない。だが、近年では健康寿命が延びているし、生物学的にも突然変異して老人パワーが発揮される時代が到来するかもしれないではないか?

4. 「定理の重さ」と「概念の意義」
ハーディは、「定理の重さ」や「概念の意義」という言葉と結びつけながら、数学の意義を論じる。重くない定理の例として、ラウズ・ボールの「数学の遊び」を紹介してくれる。

(a) 10,000未満で、8712と9801の二つだけが、4桁の数字で逆に並べた数の倍数になる。
8712 = 4 x 2178
9801 = 9 x 1089

(b) 1以外の数で、各桁の数の3乗の和になる数は4つしかない。
153 = 1^3 + 5^3 + 3^3
370 = 3^3 + 7^3 + 0^3
371 = 3^3 + 7^3 + 1^3
407 = 4^3 + 0^3 + 7^3

これらは、数学者に強く訴えるものがないという。証明が難しくても、興味を惹かないものは、定理は重くないというわけか。しかし、証明してみると、実は隠れた重い定理が潜んでいるかもしれないではないか。そこで、たとえ意義がなくても、おもしろいのでメモるのであった。酔っ払いの生きる意義とは、ただ愉快になることなのだから...
数学の歴史とは、抽象化と一般化の歴史と言えるだろう。無理数の概念は、整数を含んだ数字の抽象化であって、整数の概念よりも深いことになる。同様に、ハーディは、素数定理はユークリッドの定理やピュタゴラスの定理よりも深いという。
更に、数学の抽象化は、射影幾何学においておもしろい現象を見せる。非ユークリッド幾何学の登場により、写しを完全にするか、不完全にするかの違いで、実存の議論を抽象化する。物体の構造は、抽象化の進化とともに分解され、ますます実体から離れていくかのように。数学的実存は、形而上学の問題を多く解決してきた。だが、抽象化が進むと哲学的な実存問題をややこしくしやがる。数学の発展がコンピュータを進化させ、議論の対象を実空間から仮想空間へと移してきた。数学は実存の概念から遠ざけようとしているのか?いや!そもそも、実存や実体なんてものは幻想なのかもしれない。科学の進化は、天動説から地動説へ変化したように段々人間の地位を格下げしてきた。そして、人間の存在すら蔑むのか?

5. ハーディの人物像
「彼は優れた知性の持ち主で、しっかりと目を開き、多くの本を読み、人間性に対して極めて一般的な感覚を身に付けていた... 強靭で、物事に集中し、辛辣で、道徳的虚栄心とは縁のない人であった。... 彼が嫌ったのは、傲慢な態度、独善的な義憤、大家具陳列場のような偽善の集まりだった。」
スノーは、美しく率直な精神の持ち主であると評しているが、極限まで純粋さを求めれば偏った性格も見せるだろう。人物像を一方面からだけで評価することはできない。実際に「ある数学者の弁明」に現れるハーディの姿には、欠点的な面も曝け出す。それでも、スノーは、誇り高く謙虚な言葉の方を信じたいと語る。
ちなみに、小説家グレアム・グリーンは、「ある数学者の弁明」の書評で、ヘンリー・ジェームスと並ぶ創造的芸術家であると評したという。
ハーディには聖職者の友人がいたそうだが、彼にとって神は個人的な敵であったという。
「生涯で一番幸福な時間の中の幾らかを、ローマ・カトリック教会の鐘の音と過ごさなければならないとは、不幸なことです。」
偉大な科学者や数学者は、神を思いっきり嫌うと同時に、独自の神学を構築するところがある。強制される神の存在は邪魔だが、自由に想像できる神の存在は邪魔にはならないということであろうか。

6. ラマヌジャンを見出す
スノーは、インドの天才数学者ラマヌジャンを見出したエピソードを紹介してくれる。ラマヌジャンは、荒削りの定理を記した原稿を、二人の有名な数学者に送ったが、いずれも却下されたという。次にハーディへ送ると、見たことも想像したこともない定理があって感動したそうな。そして、インドからイギリスへ連れてこなければならないと決心する。当時では珍しい人種偏見のない様子がうかがえる。ラマヌジャンは、英語がよくできなかったのでマドラス大学に入学できす、独学で数学を勉強したという。ハーディは、ラマヌジャンの洞察力をガウスやオイラーに匹敵する天才と評したが、十分な教育を受けていないことを嘆いていたようだ。数学に貢献する年齢にしては遅すぎたと...

7. 友人のケインズ
経済学で有名なジョン・メイナード・ケインズは、数学者として出発していてハーディの友人でもあったというから驚きだ。これだけで、ケインズの本を読んでみたくなった。かつて、ケインズはこういう忠告をしたそうな。
「彼はクリケットの記録に対するのと同じ集中力をもって、毎日半時間でも株式相場を読んでいたら、間違いなく金持ちになれただろうに!」
ハーディのクリケットの腕前は凄腕だったそうな。

2010-06-06

"プリンキピアを読む" 和田純夫 著

プリンキピアは、全三編で構成される大作で、その正式名称を「自然哲学の数学的原理」という。学生時代、どこぞの図書館で見かけたことがあるが、その分厚さと風格から生涯で一度は読んでみたいと思ってきた。多くの科学書において、偉人の中でもニュートンは別格のように評され、それを実感してみたいから。しかし、この古典は絶版中であり、その入手は難しそうだ。中古でも凄い値がついていて貧乏人には辛い!いずれ図書館を利用したいところだが、とりあえず本書でお茶を濁すことにしよう。

ニュートンは、運動の3法則と万有引力によって、惑星の軌道が楕円であることを証明した。これは、コペルニクス仮説の数学的証明でもある。その証明にケプラーの法則が重要な役割を果たしたことは言うまでもない。天動説と地動説によって科学界が分裂していた時代、その混乱を収束させたのがこの書と言われる。
ニュートン曰く、「プラトンもアリストテレスもわが友なれど、真実こそ、より大いなる友なり」
この言葉は、アリストテレスの言葉「プラトンはわが友なれど、真実こそ、より大いなる友なり」をもじったもので、古代ギリシャ時代から受け継がれてきた体系からの脱却が込められている。
ニュートンが、ガリレオやデカルトに関心を持ったことは間違いないだろう。ちなみに、第2法則はニュートンの運動方程式と呼ばれるが、プリンキピアにはガリレオの発見と記されるそうな。ならば、ガリレオの運動方程式と呼んでもよさそうなものだが。アリストテレス的な思考では、物体の運動はやがて減衰するかのような感覚に見舞われる。つまり、天動説を裏付けるためには、地球の運動が静止しているという理論が必要である。対して、ガリレオは慣性の法則によって運動の永続性を示した。つまり、地動説はもちろん、すべての物体が運動を続けていても、相対的に説明ができれば宇宙は成り立つということである。物体の運動を説明するのに、どんな座標系を持ち込んで定義したところで相対的な観点でしかない。人類は、絶対的な運動も説明できなければ、絶対的な静止の存在すら知らない。そして、永久に絶対的な価値観に到達することはできないだろう。

本書は、「プリンキピア」の意外な面を見せてくれる。それは、デカルト学派をはじめとする渦動説の批判書になっているというのだ。新しい説を証明すれば必然的に古い説を否定することになるのだが、あからさまに批判しているらしい。
渦動説とは、物体の運動は互いに接触し合うことで生じることを前提として、宇宙空間に充満する物質の存在がなければ天体は動かないとする仮説である。これはアリストテレス思想を継承したもので、いずれエーテル仮説を登場させることになる。時代背景からしても、その攻撃対象が天動説と渦動説にあったことがうかがえるのだが、ニュートンの目的はもっと壮大なものと言わざるを得ない。地球は天体の一つに過ぎず、すべての天体運動は数学的に説明できることを示した。それは、人間の主観的直感の地位を引き下げ、数学的客観性の地位を押し上げたと言えるだろう。
この大作には、200もの命題が掲載されるという。それだけでも、堅苦しい難解な書であることが想像できる。本書は、ニュートンの天才振りを実感するためには第一編と第二編の命題を地道に読むのが真髄だという。ただ、ニュートンが主張したかったことは第三編に現れるそうな。多くの読者が、第三編に辿り着く前に数学の難しさで挫折するらしい。そこで、次のように励ましてくれる。
「現代人にとってプリンキアを難解な書物にしている。しかし明確な論理に基づく議論なのだから、一歩ずつ進んでいけばわからないはずはない。」

ここで最も注目したいのは、微積分の概念である。微積分学はライプニッツ以降で開花することになるが、そのアプローチではライプニッツと対立関係にある。ニュートンの特徴は、代数学的な方法ではなく、幾何学的な作図方法が用いられる。この視覚的方法は、数学の入門者にとってありがたい。現在では高校数学のレベルだが、当時、極限の視覚的証明は感動ものだったに違いない。ニュートンが第2法則で、力の定義を質量と加速度の積で示したのはお馴染みである。加速度は速度の変化率であり、つまりは微分である。速度は物体の位置座標の変化率であり、これまた微分である。ニュートンは運動法則に、微積分の概念を埋め込んでいる。考えてみれば、楕円の面積を考察する時に、極限的な求積法を用いるのは自然な発想のように思える。既に導関数を学んでいるから、そう思うのかもしれないが...
楕円方程式は、長半径a、短半径bとすると、次式で表わされる。
x^2 / a^2 + y^2 / b^2 = 1
更に、x方向に x = a sin ωt で運動し、y方向に y = b cos ωt で運動しているとすると、次式が導かれる。
(sin ωt)^2 + (cos ωt)^2 = 1
x = a cos(ωt + θ)としても、楕円であることに変わりはない。つまり、x方向とy方向で三角関数の直交性質を利用しているわけだ。ここには解析学の概念が内包されている。昔、「フーリエ解析」を「楕円解析」や「三角関数解析」と呼んでもいいじゃないかと思ったりもした。周期を持つという意味では、円運動も波動も同じである。そして、モジュロ計算という発想も成り立つ。したがって、酔っ払って目が回るのも、千鳥足でゆらぎながら歩くのも、空間運動としては同列に扱えるはずだ。故に、アル中ハイマーの年齢はモジュロ計算されるのであった。

1. ニュートンは仮説が大嫌い!
ニュートンは、万有引力を中心とした重力理論で物体の運動を示した。しかし、重力の正体については言及を避けている。
ニュートン曰く、「私は仮説を作らない」
この言葉には、エーテルを登場させるような仮説への批判が込められる。後に、重力の正体は、アインシュタインが時空の概念を持ち出して曲率で説明されることになる。
ニュートンは、太陽系の重心から太陽の位置がずれていることを意識したという。それでも、太陽系の中心が動くということは、宇宙の中心が動くことにはならないと考えたらしい。太陽系の重心こそが宇宙の不動の中心であり、太陽自体は太陽系の中で動いていると結論付けたという。彼ほどの偉人ならば、太陽系が宇宙の中心ではないと想像することも容易であっただろうに。ここには、宗教観から脱することができない何かがあったのだろうか?いや!観測できない仮説を排除しただけのことかもしれない。
太陽系の構造を眺めれば、神秘としか言いようがない。太陽を中心とする惑星は、同じ方向に運動していて、それぞれの円周は、ほぼ同一平面上にある。惑星の衛星も、ほぼ同じ平面上で、回転方向も同じ。しかも、それらが相互に衝突しないように絶妙に配置される。宇宙空間は立体的なのだから、わざわざ平面的に仲良く配列されなくてもよさそうなものだが。ニュートンは、他の恒星系も太陽系と同じような体系だとすれば、神の仕業でしか説明できないと語ったという。仮説を持ち出すぐらいなら、すべて神のせいにしちゃえ!ってなもんか。「プリンキピア」は、ニュートン独自の神学を見せてくれるのかもしれない。

2. ニュートンは定数を気にしない!
惑星軌道の近日点と遠日点の移動についても言及しているという。つまり、楕円運動の方向も回転しているということ。惑星は太陽方向からの力を受けており、その力は太陽からの距離の2乗に反比例する。軌道がほぼ楕円というだけでも逆ニ乗則は十分に説得力があるのだが、更にその誤差についても楕円運動の方向が移動することで正確に証明できるという。そして、天体間の向心力を「重力」と名付け、すべての物体がもつ普遍的な性質と見なした。また、重さと質量の違いを明確にしているという。物体の重さとは、地表上でその物体が受ける重力を意味する。質量は、物体の持つ慣性の大きさとなり、つまりは加速されにくさになる。つまり、慣性とは、物体が運動状態を保持しようとする一種の抵抗力である。重さと質量は別物と定義しながら、重さは質量に比例するという重力性質を述べている。そして、万有引力を二つの互いの物体の質量の積で表す。
F = G・m1・m2 / r^2
(F: 万有引力、G: 物体に依存しない定数、m1,m2: 二つの物体の質量、r: 互いの物体の距離)
ちなみに、ニュートンの時代、Gは解明されていなかったらしい。一般的に、ニュートンの定理の表現には、定数を気にしない風潮があるそうな。比例係数なんてどうでもよく、空間の違いによって決定すればいいだけのこと。なるほど、真理へ向かう抽象化のセンスは抜群である。比例係数を明確にしなければならないのは、物理学を実践する場合に限られるのであって、法則としてはあまり意味がないのかもしれない。少なくとも哲学的にはあまり意味がなさそうだ。

3. 天体の重力と形状
地球と月が完全に球対称であれば、地球と月の中心間の距離を考えればいいだろう。天体が完全な球対称ならば、天体のすべての構成要素がその中心に集中していると見なせるだろうし、重力に対して逆二乗則を適用すれば、天体の中心からの距離を考えればよいことになる。この性質は、天体の重力を受ける側にも適用される。
更に、球体が空洞ならば、物体の内部では重力が働かないという定理もある。球面の内部では、どの点においても、球面からの互いの重力が打ち消しあい、合力はゼロになるからである。
では、球面の外部ではどうなるのか?それは、球面の中心へ向かい、中心からの逆二乗則が成り立つという。これも同じように、球面から受ける重力の合力から求まるわけか。
また、電気力も、クーロンの法則により逆二乗則が成り立つ。電荷が一様に分布した球面の内部では、電気力が働かないという原理は、電磁気学でも同じである。
こうしたことを踏まえて、球状ではない天体の重力はどうなるのか?ここで用いられる積分の概念は目から鱗が落ちる。ニュートンが巧みな求積法の創始者であることが実感できるから。彼は地球の形状を解析し、惑星は自転軸方向にわずかに扁平した形になると主張したという。自転の遠心力により、地球は赤道方向に膨らむと考えられるが、当時はまだ解明されていなかった。そこで、自転軸の長さと、垂直方向の直径との比率を計算し、地球表面上の緯度の違いによって重力の変化を考察している。それほど難しい問題ではないのだが、力学の源泉を眺めているようで感動してしまう。
また、潮汐理論についても言及している。当時から、潮の満ち干が月や太陽の影響があることは、なんとなく分かっていたそうな。ニュートンは、万有引力の作用で潮汐現象を説明したが、海水自体にも重力の影響があることが見逃されていて、後に指摘されたという。この天才でもチョンボがあったらしい。