跳慮跋考

興味も思考も行先不明

Reading "Topographic Independent Component Analysis"

感覚信号の効率的な(即ちスパースな)符号化に関して「視覚野・聴覚野地図の同一適応アルゴリズムによる解釈」に興味を持ったので、論文で使用されているトポグラフィック独立成分分析(TICA)の論文「Topographic Independent Component Analysis」を読もうとしたものの正直よく解らなかった為、Hyvarinen 先生の著「詳解 独立成分分析―信号解析の新しい世界」で勉強してからリベンジした次第。以下に論文の要諦を纏めてみる。

いい加減 blog というメディアに適合していない気がするが……。

モデル

共通の分散

通常の ICA では信号源たる確率変数 si が互いに独立であることを仮定するが、現実には全く独立である場合と言うのは少なくて ICA を行っても幾許かの従属性が「残存」してしまうので、それを使って独立成分の二次元構造を決定しようというのが TICA の趣旨である。
特にこの論文ではエネルギー、即ち si2 の相関に着目し、その相関が強いほど近い位置にあるとする。これは近い位置の成分ほどより共起しやすい(が値自体一方から一方を予測しがたい)と考えている事となる。
例えば変数 σ により成分 si, sj (i ≠ j) に共通な分散が与えられるとし、zi, zj を白色*1な確率変数として
 \begin{cases} s_i = z_i \sigma \\ s_j = z_j \sigma \end{cases}
とおく。ここで σ や zi, zj は平均 0 で互いに独立とする。
この時、si と sj の値は互いに無相関だがエネルギーはそうではない。実際、独立性と白色性の仮定から
 E\{s_is_j\} = E\{ z_i \sigma \cdot z_j \sigma \} = E\{ z_i z_j \} E\{ \sigma^2 \} = 0
 E\{ s_i^2 s_j^2 \} - E\{ s_i^2 \} E\{ s_j^2 \} = E\{ z_i^2 z_j^2 \} E\{ \sigma^4 \} - E\{z_i^2\} E\{z_j^2\} E\{ \sigma^2 \}^2
  = E\{ \sigma^4 \} - E\{ \sigma^2 \}^2
となり、最後の式は σ2 の分散なので非負である。

成分の空間構造

si の分散 σi2 を確率変数とし、各 si はその分散が与えられた下で互いに独立とする。
σi2 の従属性は近傍函数 h(i,j) により記述する。通常近傍函数はある種の距離について単調減少する函数と定義され、対称性 h(i,j) = h(j,i) や、任意の i について h(i,i) = const. が要求される。
例えば、i 番目の成分の座標が (xi, xj) であるとすると
 h(i,j) = \begin{cases} 1 & (|x_i - x_j| \le 1\ \textrm{or}\ |y_i - y_j| \le 1) \\ 0 & (\textrm{otherwise}) \end{cases}
とすれば自身と上下左右及び斜めの9近傍が取れる。
これにより、非線形函数 φ を*2用いて
 \sigma_i = \phi\left( \sum_{k=1}^{n} h(i,k) u_k \right)
で分散を定義する。(正直この φ が何を表すのかよく分からないのだが……)
以上の結果として TICA のモデルは、
 s_i = \phi\left( \sum_{k=1}^{n} h(i,k) u_k \right) z_i
と書くことができる。

尤度函数

導出

まずトポグラフィックな成分 s と「高次」の独立成分 u の結合密度分布
 p(\textbf{s}, \textbf{u}) = \prod_i p(s_i | u_i) p(u_i)
  = \prod_i \frac{1}{ \phi\left( \sum_{k=1}^{n} h(i,k) u_k \right) } p^{s|u}_i \left( \frac{s_i}{ \phi\left( \sum_{k=1}^{n} h(i,k) u_k \right) } \right) \cdot p^u_i(u_i)
から(ps|ui は pzi なので確率密度の変換をしている)、s の周辺密度分布が
 p_s(\textbf{s}) = \int \prod_i p^{s|u}_i\left( \frac{s_i}{ \phi\left( \sum_{k=1}^{n} h(i,k) u_k \right) } \right) \frac{ p^u_i(u_i) }{ \phi\left( \sum_{k=1}^{n} h(i,k) u_k \right) } d\textbf{u}
で得られる。W = (w1, ..., wn)T として、 ICA の基本モデル s = Wx より
 p_x\left( \textbf{x}(t) \right) = p_s\left( W \textbf{x}(t) \right) |\det W|
となるから、尤度函数
 L(W) = \prod_{t=1}^{T} p_x\left( \textbf{x}(t) \right)
  = \prod_{t=1}^{T} \int \prod_i p^{s|u}_i\left( \frac{ \textbf{w}_i^T \textbf{x}(t) }{ \phi\left( \sum_{k=1}^{n} h(i,k) u_k \right) } \right) \frac{ p^u_i(u_i) }{ \phi\left( \sum_{k=1}^{n} h(i,k) u_k \right)} |\det W| d\textbf{u}
となる。

近似

上の尤度函数をそのまま用いるのは計算量が多く賢明でないので、扱い易い近似を求める。
まず ps|ui や pui は全ての i について等しいとし、ps|u = ps|uiガウス分布とする。これは条件付きでない s の分布が優ガウス*3である事を意味する。また非線形函数 φ を
 \phi\left( \sum_{k=1}^{n} h(i,k) u_k \right) = \left( \sum_{k=1}^{n} h(i,k) u_k \right)^{-1/2}
で定める。*4
これらの近似より s の周辺密度分布は
 p_s(\textbf{s}) = \int \frac{1}{(2\pi)^{n/2}} \exp\left[ -\frac{1}{2} \sum_i s_i^2 \left( \sum_k h(i,k) u_k \right) \right] \prod_i p_u(u_i) \sqrt{ \sum_k h(i,k) u_k } d\textbf{u}
となり、和の順序を交換すると
 p_s(\textbf{s}) = \int \frac{1}{(2\pi)^{n/2}} \exp\left[ -\frac{1}{2} \sum_k u_k \left( \sum_i h(i,k) s_i^2 \right) \right] \prod_i p_u(u_i) \sqrt{ \sum_k h(i,k) u_k } d\textbf{u}
と書ける。
ここで更に
 \sqrt{ \sum_k h(i,k) u_k } \approx \sqrt{ h(i,i) u_i }
なる近似によって(実際にはこれは下界になっている)
 \widetilde{p}_s(\textbf{s}) = \int \frac{1}{(2\pi)^{n/2}} \exp\left[ -\frac{1}{2} \sum_k u_k \left( \sum_i h(i,k) s_i^2 \right) \right] \prod_i p_u(u_i) \sqrt{ h(i,i) u_i } d\textbf{u}
となる。h(i,i) は定数であったので h0 とおき、この積分を各 uk について分解すると
 \widetilde{p}_s(\textbf{s}) = \prod_{k=1}^{n} \int \frac{1}{\sqrt{2\pi}} \exp\left[ -\frac{1}{2} u_k \left( \sum_i h(i,k) s_i^2 \right) \right] p_u(u_k) \sqrt{ h_0 u_k } du_k
だが、uk についての対称性から
 G(y) = \log \int \frac{1}{\sqrt{2\pi}} \exp\left( -\frac{1}{2} uy \right) p_u(u) \sqrt{ h_0 u } \,du
という函数を定義すれば
 \widetilde{p}_s(\textbf{s}) = \prod_{k=1}^{n} \exp\left[ G\left( \sum_i h(i, k) s_i^2 \right) \right]
と簡潔な形になる。

すると、対数尤度函数
 \log \widetilde{L}(W) = \sum_{t=1}^{T} \sum_{j=1}^{n} G\left( \sum_{i=1}^{n} h(i, j) (\textbf{w}_i^T \textbf{x}(t))^2 \right) + T \log|\det W|
により近似できる。*5
ICA に於いて独立成分の確率分布(の対数)にあたる函数 G は、概形さえ合っていれば正しく収束する事が知られており、著者は指数分布に関連した函数として
 G_1(y) = -\alpha_1 \sqrt{y + \epsilon} + \beta_1
を挙げている。ε は数値的な安定性の為に加えられる定数である。係数は si の分散が 1 であるという条件を満たす様に決められる定数だが、以下で W を直交行列とする制約を課す為にこれらは対数尤度を線形変換するだけなので、α1=1, β1=0 などと適当に決めても尤度の最大点には影響しない。

学習則

さて尤度が得られたので、勾配法によりこれを最大化しよう。まず両辺を T で割り
 \frac{1}{T} \log \widetilde{L}(W) = E\left\{ \sum_{j=1}^{n} G\left( \sum_{i=1}^{n} h(i, j) (\textbf{w}_i^T \textbf{x})^2 \right) \right\} + \log|\det W|
と書き直す。(右辺第1項は標本平均なので、厳密にはこう書くべきでない。)すると wk に関する勾配は
 \frac{\partial}{\partial w_{kl}} G\left( \sum_{i=1}^{n} h(i, j) (\textbf{w}_i^T \textbf{x})^2 \right) = G'\left( \sum_{i=1}^{n} h(i, j) (\textbf{w}_i^T \textbf{x})^2 \right) \cdot 2 h(k, j) (\textbf{w}_k^T \textbf{x}) x_l
となるから、ベクトル勾配に直すと
 \frac{\partial}{\partial \textbf{w}_k} G\left( \sum_{i=1}^{n} h(i, j) (\textbf{w}_i^T \textbf{x})^2 \right) = 2 G'\left( \sum_{i=1}^{n} h(i, j) (\textbf{w}_i^T \textbf{x})^2 \right) h(k, j) \left( \textbf{w}_k^T \textbf{x}(t) \right) \textbf{x}
となる。
観測値は z = Vx により白色化されているとし、W は直交行列とする。この時 det W は定数なので、結局
 \frac{\partial}{\partial \textbf{w}_k} \frac{1}{T} \log \widetilde{L}(W) = 2 E\left\{ r_k \left( \textbf{w}_k^T \textbf{z} \right) \textbf{z} \right\}
となる。ここで
 r_k = \sum_{j=1}^{n} h(k, j) g\left( \sum_{i=1}^{n} h(i, j) (\textbf{w}_i^T \textbf{z})^2 \right)
であり、g は G の導関数である。また W は仮定を満たす為に
 W \leftarrow (WW^T)^{-1/2} W
で毎回正規直交化されなければならない。

毎回標本平均を取るのは実用的でない場面が多いので、確率的勾配降下法に基づくオンライン学習則として
 \Delta \textbf{w}_k \propto r_k \left( \textbf{w}_k^T \textbf{z} \right) \textbf{z}
を用いる。これは単に期待値計算を外しただけだが、学習率などに適当な条件を課せばちゃんと収束する事が証明されている。

以上により取り敢えず学習則が導出できたので、一旦筆を擱くとする。やっと原理が解ってきたので愈々実装と行きたいところ。
ただ φ はどうも納得がいかない……。

*1:共分散行列が単位行列に等しい。

*2:不幸にも環境によっては \phi ではなく \varphi が表示されているかもしれないが大目に見て欲しい。

*3:正の尖度を持つ。ガウス分布(正規分布)よりも平均近くの密度が高い。

*4:この函数が単調「減少」である事はどうにも不思議なのだが、私の「u_i が大きいほど活性が大きい」という認識が間違っているのだろうか?

*5:尤度が近傍のエネルギーの和のみの函数でよいというのは Kohonen の不変特徴部分空間の「部分空間の射影のノルムが不変特徴を定める」という話と関連があるらしい。

『ソ・ラ・ノ・ヲ・ト』第四話より、人は微妙に組成が違うレンズの音を聴き分けられるか

レンズの固有振動数ってどんなもんかな? ってお話。
データも根拠も怪しいものですが、参考程度に。

基本振動だけ分かればいいので、レンズは円筒が連なって円柱を成しているものと看做します。
すると円筒のずれに対する復元力を求めるには、ガラスの剛性率(横弾性率、剪断弾性率とも)が必要。
山善特殊硝子製作所にデータがあるけど所々抜けているので、ガラスが等方的と仮定してヤング率とポアソン比から剛性率を求める*1
 G = \frac{ E }{ 2 (1 + \gamma) }
G:剛性率、E:ヤング率、γ:ポアソン比。

すると、長さ l で断面積 A の物体が ⊿x だけずれた時の剪断力 F は
 F = \frac{ GA \, \mathit{\Delta} x }{ l }
となり、円盤の変形 x を半径 r の関数とし、l = ⊿r として円筒に適応すると
 \rho A \mathit{\Delta}r \frac{d^2x}{dt^2} = \frac{ GA }{ \mathit{\Delta}r } \{ x(r + \mathit{\Delta}r) - x(r) \} - \frac{ GA }{ l } \{ x(r) - x(r - \mathit{\Delta}r) \}
 \rho \frac{d^2x}{dt^2} = G \frac{ x(r + \mathit{\Delta}r) + x(r - \mathit{\Delta}r) - 2 x(r) }{ \mathit{\Delta}r^2 }
ここで右辺は二階差分であり、⊿r→0 の極限において二回微分と一致する。
 \frac{ \rho }{G} \, \frac{d^2x}{dt^2} = \frac{d^2x}{dr^2}
即ち一次元の波動方程式と同等であるから、波の速さが v = √(G/ρ) と求まり、固定端条件での基本振動を考えるとその波長は 4R なので、v/(4R) で固有振動数が求まる。筈。

で、最後にレンズの半径が問題となる。劇中の描画からは直接は推定し難そうなので、統計値に頼る。
平成24年度の学校保健統計調査によると 15 歳の女の子の平均身長は 157.2 cm*2身長別ボディサイズ平均なるサイトのデータから線形内挿すると手長は 17.56 cmとなる。大体その半分がレンズの直径と考えると、半径は 4.4 cmと推定される。
まぁ周波数比を考えるんなら半径は打ち消されちゃうけど。

ネットで組成比が分かったガラスについてデータを示す*3

名称 パイレックス7740 テンパックス パイコール7913 石英ガラス
密度 (g/cm3) 2.23 2.20 2.18 2.20
ヤング率 (106 kg/cm2) 0.61 0.63 0.68 0.74
ポアソン 0.20 0.22 0.19 0.16
屈折率 (589.3nm) 1.474 1.472 1.458 1.459
剛性率 (106 kg/cm2) 0.254 0.258 0.286 0.319
波速 (m/s) 3342 3391 3584 3769
レンズの固有振動数 (Hz) 760 771 815 857
SiO2 81.2 81 96.4 100
B2O3 11.8 13 3.0 0
Al2O3 2.4 2 0.5 0
Na2O/K2O 4.5 4 - 0

さて、ここで成分の左の2つに注目すると、これらは成分が似通っており屈折率も近い一方で固有振動数には 11 Hz、比にして 25 セントだから半音の 1/4 もの差があることが分かる。
音の環境心理学の図 2.6 を見ると、この音域での弁別閾は 1~2 Hzであるから、これは十分に聴き分けることができると考えられる。

*1:実はパイレックスとかこの計算値と表の値が結構喰い違ったりするんだけど……。データの斉一性を重視して全部計算値を採用しておきます。

*2:日本人のデータだが

*3:それぞれの組成比は平岡特殊硝子製作株式會社Corning(pdf)より。石英ガラスは純度99.99%以上を言うんだとか。

声帯の数値シミュレーションによる音声生成

初音ミク嬢を筆頭として音声サンプルの編集による音声合成は随分栄華を誇っていますが、力学モデルのシミュレーションによる音声合成はどうも人気が無い様ですね。私が世情に疎いだけかも知れませんけれど。
実用程度*1ならそうした経験的帰納的な手法も使えるでしょうが、完璧を求めるならば、整然とした理論モデルによる演繹的アプローチが必要不可欠だと私は思っています。そしてそれは声以外でも。

モデル

で、何をしたかというと、石坂とFlanaganによる声帯の二質量モデル*2を実装してみました。簡単に言うと、声帯を発条で振動する二つの壁の組み合わせとしてモデル化したものです。
もっと発展した研究の論文*3を参考にしたので、元の論文よりはLsを無視してたり声道をもっと細かくしたりしています。それと声道のパラメタの式が納得いかなかったので修正したところも。
あと電気的等価回路については、これ(pdf)を見るとちょっと分かるかもですね。
声道断面積関数については色々ネットでデータを探して、MRIによる計測データ*4があったのでこれを使いました。

実装

んで微分方程式をプログラムに解かせる訳です。最初は連立一階常微分方程式を表すラムダ式とパラメタによって解を求めていくクラスを作ったんですが、声道の各要素に対応するラムダ式を簡単に書けず、Boost.Preprocessor などという黒魔法にも手を出してみましたがどうもきもちよくないので結局 GSL のを使いました。そしたら全ての変数を纏めて扱う ℝⁿ→ℝⁿ 函数みたいな設計になってて、なんかもうあっはいって感じですね。

兎に角そうして実装したのがこのコード(Gist)です。パラメタまで色々ハードコードしてるのは気にしないで下さい。C++ よく分かんないので適当に const つけまくったりしてますが意味あるんでしょうかね。なんか速くなったりしませんか?
論文に"The time derivative of the mouth volume velocity (i.e., through the radiation load) is good approximation to the radiated sound pressure."(p.1248)とあるので、dydt の最後の要素の値である dUO/dt が最終的な音声波形出力(放射音圧)と看做せます。
途中に書いてありますが、y の中身は { H1: 質量1の変位, V1: 質量1の速度, H2: 質量2の変位, V2: 質量2の変位, Ug: 声門内で平均した体積速度, U1, ..., Un: 声道の各要素での体積速度, P1, ..., Pn: 声道の各要素での圧力, Uo: 口での体積速度 } となっています。U1,V1,U2,V2,...にした方がいい気もしますが面倒な割に御利益が無い気もしますね。
本当はパラメタとか最初に全部出力してますが省略。

さて実装で何が困ったって、普通に計算させると発散するんですよね。変位が小さくなると体積速度が上がる、体積速度が上がると変位速度が上がる、という感じの循環が起きてるってことだと思うんですが。
でどうしたかって、まぁ現実に照らし合わせれば数μmの隙間を物凄い勢いで風が通る訳がないので、変位に下限値(コード中の Hmin)を設定してやりました。何ともびみょーですがまず動かなくては仕様がありません。
論文に全然書いてないからもしかしたら私の実装した式が間違ってるかも知れないんですが……。

出力

g++ ならば最低限 -std=gnu++0x -lgsl -lgslcblas -lm あたりのコンパイラオプションつければ大丈夫だと思います。あとは最適化とか。
声道に/a/を選んで(上のコードは/o/ですが)、引数(初期値)を 0.018 0 0.018 0 0 にして実行すると以下の波形を得ます。上から二つの声門面積、声門内の平均体積速度、放射音圧です。
面積が負の方に行き過ぎだったり(質量が剛体として"衝突"するモデルではないので負になるの自体はいいのですが)体積速度がギザギザし過ぎだったりする気もしますが大体は再現できていますね。
f:id:quinoh:20130707011626p:plain

それで波形が出来たのはいいのですが、テキストファイルだから .wav か何かにしないと聴けませんので、適当な変換プログラム(Gist)を書きました。本当に適当なので多少サンプリングレートが狂いますがまぁ聴いても分からないでしょう。最大値くらいは自動で計算すべきかも。
斯くして漸く出来たのがこれ(TwitSound)。結構「あ」っぽいと思いますがどうでしょう? 「あいうえお」全部繋げてみるとこんな感じ(TwitSound)になって「い」「え」とかはもっと不自然だったりするので、この辺りは声道面積の値次第なのかどうなのかという感じですね。スペクトルとかを観察すると「不自然さ」が定量できるのでしょうか。

取り敢えずこれで音声を生成する為のフレームワーク的なものは出来た訳ですので、これをどう自然な声に近づけるかというところが次の問題になります。
筋肉の緊張度を入力パラメータとして声道断面積を制御する事で波形を自然な声に制限したり発声を学習したり逆に音声認識の為の符号化で使えないか……など色々あるのですが、なかなかどれも大変そう。まぁまず声がどんなものかを知らねばなりませんかね。
それから計算速度が遅いのも困りものです。どうにか1秒を1秒以下で計算して欲しいところですが、これより時間刻みを大きくしても発散したりしてどうしたものか。
それとここまで頑張ったところでアレですが、「本質を簡潔に」モデル化するという観点からすると声道をバラバラにしてシミュレートしているのはちょっと泥臭過ぎる嫌いもあります。そうした考えを貫くならば、声道を音響フィルタと看做す「音響フィルタ理論」などを使った方が良いのかも知れません。複雑なモデルほど実装も操作も難しいので。

*1:「程度」なんて言うと色々な人に殺されそうですね

*2:Ishizaka, K.; Flanagan, J. L. "Synthesis of Voiced Sounds From a Two-Mass Model of the Vocal Cords". Bell System Tech. J. 1972, Vol. 51, No. 6, p. 1233-1268. [pdf]

*3:古賀博之; 中川匡弘. "カオス音声生成モデル". 電子情報通信学会技術研究報告. NLP, 非線形問題. 1998, Vol. 98, No. 343, p. 25-32. [CiNii]

*4:Story, Brad H.; Titze, Ingo R. "Vocal tract area functions from magnetic resonance imaging". J. Acoust. Soc. Am. 1996, Vol. 100, No. 1, p. 537-554. [ResearchGate]

Cross compiling a program with PortAudio for Windows by MinGW on Linux

最近は VirtualBox 上の ubuntu で開発することで Windows の呪縛から解き放たれていたんですが(まあ Windows がホストOSではありますけど)、どうもマイク入力が VirtualBox ではサポートされていない様子。USB マイクなら大丈夫とか聞くんですが。
開発環境は他のプログラムとも合わせて Linux にしておきたいので、プログラムを Windows 向けにクロスコンパイルしようと思い立ちました。
環境や使用した(された)バージョンは以下です:

  • Microsoft Windows 8 [Version 6.2.9200]
  • VirtualBox 4.2.12
  • ubuntu 12.04 LTS
  • Microsoft Visual Studio Professional 2012 [Version 11.0.50727.1]
  • PortAudio V19 (2011-11-21)
  • MingGW 4.2.1

PortAudio のコンパイル

公式のチュートリアル(http://portaudio.com/docs/v19-doxydocs/compile_windows.html)に従えば大体大丈夫でしょう。
preprocessor definitions の設定は以下のようにしました:

PA_USE_ASIO=1
PA_USE_DS=1
PA_USE_WMME=1
PA_USE_WASAP=1
PA_USE_WDMKS=1
PA_USE_SKELETON=1
PA_WDMKS_NO_KSGUID_LIB

最後のは「エラー 38 error LNK1104: ファイル 'ksguid.lib' を開くことができません。」なるエラーを回避する為です(http://music.columbia.edu/pipermail/portaudio/2011-August/012848.html)。
これで運が良ければ Win32/Release や、構成マネージャを弄れば x64/Release にライブラリファイルが生成されているでしょう。

テストコードのコンパイル

まず MinGW を入れます。

$ sudo apt-get install mingw32

そして上で生成された portaudio_x86.lib とかを portaudio/test なり何なりに持ってきて

$ i586-mingw32msvc-gcc patest_read_record.c -I../include portaudio_x86.lib

生成されたプログラムを Windows 上で実行すれば、ちゃんと録音したりしてくれる筈です。

共感能力に欠く人間の弁明

〈この物語は事実を基にしたフィクションです。〉
的な注意書きを見かける事がある。『月光の夏』だとか『電車男』だとか。
というのは恐らく、ノンフィクションと銘打ちながら脚色があったりすると「騙された!」だのと騒ぐ人が居るからなのだろうけれど、では「フィクションに対する感動」と「ノンフィクションに対する感動」は果たして別物なのだろうか、と私は思う。

「物語に於ける死」とは「現実に於ける死」よりも軽いのだろうか? 両者は異質でありその境は侵されざるべきものなのであろうか? 私にとってその答は全き否である。
仮令物語の中であろうと人が傷付き悲しめばその分心は暗く沈む。時には本を読んで一週間くらい鬱々としたり。
寧ろ逆に、「現実」の情報の方こそ無感動に受け取ってしまう。地球の裏側での大災害。へぇそうか。知らない土地の知らない人々が苦しむ姿、それにどれ程の実感がある? 国内だろうと変わりはしない。報道の映像はまるで映画の一場面の様だ。それは「本当にあった事」なのか?
私にとって「知らない土地」なんていうのは物語の舞台と何ら変わりはない。この目で見、この手で触れる事だけが存在証明となる。だがそれは、作家の精神活動と何ら違わないのではないだろうか。彼等は彼等の中の世界を見、触れて物語と成すのだ。決して創造主としてではなく、一人の語り部として。そして物語が共有された時、その世界は「実在」せずして何だと謂うのか。
私にとっての「現実」とは、つまりその程度のものなのだ。この手が届く小さな世界。あなたはそこにいますか?

杞人多重世界を憂うや否や

偶には自分の妄言でも話しましょう。

極微の世界を扱う物理学として今日量子力学が確立されている訳ですが、量子力学ではその根幹に於いて当代あらゆる物理学者を悩ませる不可思議な言明を含んでいるのであります。
即ち、電子等々の粒子が微小世界で織り成す非古典的な振る舞いを波として見事に記述したのが先駆者シュレーディンガーの功績だったのですが、実験によれはこの「波動」というのは人間が観測したその瞬間まるで粒子に転じたかの様に「収束」してしまう挙動を示すのです。
古の人間原理を掘り起こしてしまったかと思わんばかりの奇妙な話ですが、これ以上の巧い理論も出てこないので仕方ありません……と思いきやエヴェレットにより「多世界解釈」と呼ばれる考え方が提出されます。
これは詰まるところ「世界は全事象の確率1を分け合っている」という様な話で、例えばある粒子が半分ずつの確率で崩壊した状態と崩壊していない状態の重ね合わせとなっていれば、それを観測した人も半分ずつに分かれて「崩壊したのを観測した人」と「崩壊していないのを観測した人」に分かれると謂います。何だか重ね合わせ状態が「伝染」する様にも思われます。
何れが真やら知れぬ話ですが、兎角この解釈に従えば天地開闢の初め以来今いる世界というのは途方もない数分岐した末だという事になります。否この私は、というべきなのでしょうか。まあどちらであれ現在進行形で単調減少中の低確率人生を送っていると言えましょうが、であればしてこの確率というのがその内0になってしまわないかという事を考えたりするのです。
妙な事をと思われるかもしれませんが、それほど無根拠という訳でもありません。
例えば、ゼノンの逆理という有名な話の現代物理学的な教訓は「時空は無限に分割し得ない」という事ですが、ならば時間にも長さにも最小単位がある訳でプランク時間プランク長さというのが正しくそれです。別にこれらは時空自体が離散的と主張するのではありませんが、しかし物理学からしてもよく分からなくなる閾値が存在するという事です。
人間はやはり恒久不滅の世界を願うものでありましょう。物理学の歴史を数十年縮めたと謳われる彼のアインシュタインですら膨張し収縮する、始まり終わる宇宙を忌避し、後に自ら「人生最大の過ち」と語るところの宇宙項を己が名を冠する方程式へ書き込んでしまうのであります。
そう、長々と書いたのではありますがこんなよく分からない話をせずとも我々の愛し憎むべき宇宙は「熱的死」やら「ビッグリップ」やらに脅かされている訳で、先行き不透明な科学世紀は未だ未だ続く趨勢と見えます。想うは易く得るは難き永遠。
嗚呼、知恵の実が生命の樹を生む日はいつならん!

様相論理の可能世界意味論のイメージ

調べた内容の私的な解釈を書いた感じなので用心されたい。

命題について、述語論理が「どんな対象について成り立つか」を扱う様に、様相論理は「どの程度成り立つか」を扱う。様相論理は世界(解釈とその上で成り立つ論理式の集まり)自体を記述し、命題に対する評価を考える。

論理式αに対して

  • □α ≡ ¬◇¬α
  • ◇α ≡ ¬□¬α

を定義し、□(box)と◇(diamond)を様相演算子と呼ぶ。
□αは「αは必然的である」、◇αは「αは可能である」という概念を形式化したものと捉えられる。実際 ¬□¬α ⇔ ◇α は「αでない事は必然ではない」=「必ずαでない訳ではない」=「αは可能である」と考える事ができる。
必然的を「全ての世界で成り立つ」、可能を「成り立つ世界がある」と捉えれば世界に対する量化とも言える。しかし、□α や ◇α という論理式自体も一つの世界に立つ存在なので、「全ての世界で成り立つ」という様に俯瞰的に世界達へ言及する事はできないのである。
そこで、「全ての世界」を「自分の世界から見える(到達可能な)世界全て」と修正する。到達可能性の範囲によって色々な公理系が考えられる。
(飽く迄公理系というのは意味論とは独立に、構文論上で定義できるが、概念を把握するには「到達可能な世界がどう規定されるか」という意味論的なところを同時に考えた方が分かり易いと思い以下の様に構成した。こうした(到達)可能世界意味論は様相論理の意味論の一つでしかないという事は十分に強調されなくてはならない。)

K (Kripkeによる体系)

命題論理に

  • 必然化規則「αが定理である時、□αも定理である」
  • 分配公理 □(φ→ψ)→(□φ→□ψ)

という規則・公理を加えた体系。
定理とは「妥当な論理式」=「全ての解釈で真な論理式」であり、αが定理かどうかは論理体系にのみ依存するので、必然化規則は「全ての世界」で論理体系は同一である事の帰結である。
到達可能世界は全ての世界の部分集合であるから、到達可能性が以下の公理でどう拡張されようともこれは成り立つだろう。
必然化規則は決して α→□α ではない。この論理式が表すのは「この世界でαが真ならば全到達可能世界でも真」という乱暴な一般化である。
分配公理は「□(φ→ψ)∧□φ ならば □ψ」という世界全体についての modus ponens と考えられ、到達可能世界の範囲がそれぞれの論理式で同一である事を表す。

T (Gödelによる)

Kに次の公理を加える。

  • □α→α

これは到達可能な世界に自分自身を含める。
到達可能の関係を⇝で表せば、これは W⇝W (反射律)が常に成り立つ事を言う。
{ W₁, W₂, W₃ }という3つの世界があるとすれば、
f:id:quinoh:20130428134744p:plain
という到達可能性が最低限存在するという事である。
この様な世界の集合、その間の到達可能性、そして各世界で成り立つ命題を合わせたものをKripke構造と呼ぶ。

B (Brouwerによる)

Tに次の公理を加える。

  • α→□◇α

これは全到達可能世界から自分が到達可能である事を表す。
W₁⇝W₂ ならば W₂⇝W₁ (対称律)を言う。
f:id:quinoh:20130428134758p:plain(*)
という到達可能性があれば、実は
f:id:quinoh:20130428135131p:plain
となっているという事である。

S4 (Lewisによる)

Tに次の公理を加える。

  • □α→□□α

これは「到達可能な世界から到達可能な世界」が到達可能である事を示す。
W₁⇝W₂ かつ W₂⇝W₃ ならば W₁⇝W₃ (推移律)を言う。
(*)の図の場合に
f:id:quinoh:20130428135453p:plain
となっているという事である。

S5 (Lewisによる)

S4に次の公理を加える。

  • ◇α→□◇α

これは「自分の到達可能な世界」が「自分の到達可能世界からの到達可能な世界」と同じである事を示す。
W₁⇝W₂ かつ W₁⇝W₃ ならば W₂⇝W₃ を言う。
S4の図について実際は
f:id:quinoh:20130428140542p:plain
となっているという事である。

平尾始氏及び上村芳郎氏の頁を参考にした。
また図はCarl Burch氏のAutomaton Simulatorによる出力を加工し用いた。