13.1 記述の長さと万能機械
第2章から第12章まで,系列がどれだけ縮むかはつねに分布を通して測ってきた.第2章の漸近等分配性は情報源の分布からエントロピーを取り出し,第4章の符号長の下界も,第12章の冗長度も,分布があってはじめて書ける量である.ところが実際に手元にあるのは,分布ではなく一本の系列である.0を1000個並べた系列と,コインを1000回投げて得た系列を並べれば,前者のほうが単純だと言いたくなる.どちらも同じ一様分布から同じ確率で出うるのだから,この単純さは分布では説明できない.
本章は,一つの対象そのものに複雑性の尺度を与える.考え方は素朴で,その対象を書き出す手続きのうち,いちばん短いものの長さを複雑性とする.0を1000個並べた系列は「0を1000回書け」という短い手続きで書き出せる.コイン投げの結果にそのような手続きがあるとは限らず,短い手続きを持つ対象がどれだけあるかは 13.2 節で数える.手続きを長さで測るには,手続きを読んで実行する側の規約を一つ決めなければならない.規約を取り替えれば長さも変わるので,このままでは対象だけで決まる量にならない.本節は規約を一つ固定する作り方を与え,そう固定して測ると,どの規約で測るより定数のぶんしか損をしないこと(定理 13.1.7 と 系 13.1.8)までを示す.
本章では対数の底を2にとる.測るのはビット列の長さであり,2𝑘の形の量を数えるので,指数と対数の底をそろえておくと式が読みやすい.底を明示するため,以下ではlog2と書く.エントロピー𝐻(定義 1.1.1)と二値エントロピー𝐻𝑏(例 1.1.2)もこの底で測り,単位はビットである.対数が狭義単調増加であること(補題 8.2.5)も本章を通して使う.
計算の手続き
本章が組み立てるものは,どれも計算の手続きで書ける対応である.その言葉を,本書は定義しない.定義するには計算モデル(Turing 機械や部分再帰関数)を一つ選んで書き下す必要があり,それは本書の主題ではないからである.そのかわり,以下で手続きと呼ぶものの姿を先に述べておく.有限個の場合分けと,有限回の繰り返しと,止まるとは限らない探索とを組み合わせて書き下せるもの,というのがそれである.最後の一つがあるために,手続きは引数によっては答えを返さないことがある.たとえば,自然数𝑧を受け取って𝑧,𝑧 +1,𝑧 +2,…の順に調べ,𝑧より小さい数が見つかったところで止めてその数を返す,という手続きは,どの𝑧についても止まらないので,どの引数でも答えを返さない.答えが返らない理由はつねに,手続きが止まらないことにある.
定義 13.1.1(部分計算可能な部分関数と計算可能な関数). 自然数をいくつか受け取って自然数を返す部分関数のうち,計算の手続きで定まるものを 部分計算可能 と呼ぶ.部分計算可能な部分関数のうち,すべての引数で値を持つものを 計算可能 と呼ぶ.
部分関数と書いたのは,いま見たとおり手続きが引数によっては答えを返さないからである.値を持たない引数があってよい,という一点だけが,関数との違いである.
そのうえで,計算可能性の理論から二つ借りる.一つめを 部分計算可能関数の番号づけと万能定理 と呼ぶ(Kleene).自然数の対から自然数への部分関数の全体は非可算だが,手続きは有限個の文字を並べて書き下せるものなので,手続きで定まる部分関数は,書き下し方の全体と同じく高々可算個しかない.番号を与えられる余地があるのはそのためで,借りるのは次の主張である.自然数の対から自然数への部分計算可能な部分関数の全体に番号0,1,2,…を与える対応𝑖 ↦M𝑖があり,しかも三つ組(𝑖,𝑧,𝑦)にM𝑖(𝑧,𝑦)を対応させる部分関数もまた部分計算可能である.
依存範囲は本章の全節である.本章が固定する二つの機械の定め方がこの枠組みの上にあるから,本章のどの主張もこれを認めたうえでの主張である.ただし直に当てるのは 定義 13.1.4 の万能機械Uと 定理 13.1.7 の二つで,13.4 節以降はそれらを経由してのみ依存する.後半の,三つ組を受け取る部分関数もまた部分計算可能だという主張を借りるのは,U自身が計算の手続きで定まることを言うためで,当てるのは 定義 13.1.4 の直後である.Uを実際に走らせる手続きを組み立てる 13.4 節から 13.6 節までは,その一事に乗っている.
二つめを Church–Turing のテーゼ と呼ぶ.いま述べた姿で書き下せる対応,すなわち有限個の場合分けと有限回の繰り返しと止まるとは限らない探索とで書ける対応は 定義 13.1.1 の意味で部分計算可能であり,そのうち必ず停止して答えを返すものは計算可能である,という主張である.当てるのは本章が書き下す手続きで,本章のどの節にも一つ以上ある.ほかの主張はそれらを経由してのみこれに依存する.これは定理ではない.「計算の手続き」という言葉を 定義 13.1.1 のクラスで代表させるという約束であり,その言葉を定義しないと決めた以上,証明できる種類の主張ではない.
自然数とビット列
記述はビット列で書き,その長さを測る.いっぽう 定義 13.1.1 が相手にしているのは自然数を受け取る部分関数だから,二つを行き来する対応を決めておかなければならない.
定義 13.1.2(自然数とビット列の対応). 自然数𝑥には二進表示のビット列を対応させ,そのビット数を|𝑥|と書く(0には空列を対応させるので|0| =0である).逆に,自然数を引数にとる関数にビット列𝑠を渡すときは,𝑠を二進表示として読んだ値を渡し,これを𝑠が 表す自然数 と呼ぶ(空列が表す自然数は0とする).どの自然数についても,その二進表示が表す自然数はもとの自然数に等しい.ビット列𝑠については,𝑠が空列であるか𝑠の先頭のビットが1であるとき,𝑠が表す自然数の二進表示は𝑠に等しい.
たとえば|1| =1であり,𝑛 ≥1について|2𝑛| =𝑛 +1である.二つの向きは対称ではない.戻らないのは先頭に0の並ぶビット列で,たとえば01が表す自然数は1,その二進表示は1であって01には戻らない.先頭の0が消えるというこの非対称は,13.4 節で機械を取り替える理由になる.二進表示として読ませる列の先頭に0を足しても表す自然数は変わらないので,同じ値を出す指示がいくらでも長く作れてしまい,そこで邪魔になるからである.集合Xの要素数を書く|X|と字面が重なるが,そちらは引数が集合である.
機械と記述長
定義 13.1.3(機械と記述長). 自然数の対から自然数への部分計算可能な部分関数を 機械 と呼ぶ.機械Mにビット列𝑠を渡すとは,𝑠が表す自然数を第1引数に与えることをいい,その値をM(𝑠,𝑦)と書く.M(𝑠,𝑦) =𝑥とは,Mがその引数で値を持ち,その値が𝑥であることをいう.機械Mと𝑥,𝑦 ∈ℕに対し
𝐾M(𝑥∣𝑦):=min{|𝑠|:M(𝑠,𝑦)=𝑥}と定め(𝑠はビット列の全体をわたる),Mについての 記述長 と呼ぶ.そのようなビット列が一つも無いときは𝐾M(𝑥 ∣𝑦) := +∞と定める.
𝐾には,つねに機械を添字として書く.既刊の章は裸の𝐾を,第4章 4.3 節と 4.5 節,第12章 12.3 節では Kraft の不等式の左辺として,第5章 5.3 節ではオッズの逆数の総和として,第6章 6.6 節では証明の中の定数として使っている.本章の𝐾はつねに機械を添字にとり,引数もとるので,裸の𝐾は本章に現れない.
読み下しておく.𝑠はMに渡す指示で,𝑦は最初から手元にある知識である.𝐾M(𝑥 ∣𝑦)は,𝑦を知ったうえで𝑥をMに書き出させる指示のうち,いちばん短いもののビット数にほかならない.機械は 定義 13.1.3 のとおり,ビット列を 定義 13.1.2 の表す自然数を通してしか見ない.先頭に0を並べても値は変わらず長さだけが増えるから,この最小は,M(𝑧,𝑦) =𝑥を満たす自然数𝑧の二進表示の長さの最小に等しい.それでも指示をビット列で書いて測るのは,このあとのUがビット列そのものを読むからで,同じ形の式で二つを比べられるようにするためである.この量はMを取り替えれば大きくも小さくもなる.極端な場合を見ておくと,引数によらず𝑥0を返す機械をとれば,空列を渡すだけで𝑥0が出るので𝐾M(𝑥0 ∣𝑦) =0である.だから記述長そのものは対象だけで決まる量ではなく,機械と対象の組についての量である.本節の残りは,機械を一つ固定する作り方を与え,その機械で測ると,どの機械で測るより定数のぶんしか損をしないことを示す.
万能機械
指示の出し方を二つ用意し,先頭のビットで見分けることにする.一つめは「これから書くとおりに書け」で,先頭に0を置き,その後ろに𝑥の二進表示をそのまま並べる.二つめは「番号𝑖の機械を,これから書く指示で走らせろ」で,先頭の1に続けて番号𝑖を1の個数で書き,区切りの0を置いてから指示を並べる.一つめは誰にでも使えるかわりに𝑥の長さだけ払う.二つめは,𝑥に見合った機械があれば短く済むかわりに,その機械の番号を書く分だけ余計に払う.この見分け方で,次の機械を定める.
定義 13.1.4(万能機械とコルモゴロフ複雑性). ビット列𝑠と𝑦 ∈ℕの対に自然数を対応させる部分関数Uを,𝑠の先頭のビットで場合を分けて次のように定める(𝑠が空列のとき,U(𝑠,𝑦)は値を持たない).
𝑠の先頭のビットが0のとき,その後ろのビット列を𝑑として,U(𝑠,𝑦)を𝑑が表す自然数とする.
𝑠の先頭のビットが1のとき,2番目のビットから最初の0が現れるまでの1の個数を𝑖,その0より後ろのビット列を𝑑とし(2番目以降に0が現れないときは2番目以降のビットの個数を𝑖,𝑑を空列とする),U(𝑠,𝑦) :=M𝑖(𝑑,𝑦)とする.ここでM𝑖は,部分計算可能関数の番号づけと万能定理が与える番号𝑖の部分関数である.
このUを 万能機械 と呼ぶ.𝑥,𝑦 ∈ℕに対し
𝐾U(𝑥∣𝑦):=min{|𝑠|:U(𝑠,𝑦)=𝑥}と定め(𝑠はビット列の全体をわたる),𝑦を知ったうえでの𝑥の コルモゴロフ複雑性 と呼ぶ.また,第2引数に何も渡さないことの代用として0を置き,𝐾U(𝑥) :=𝐾U(𝑥 ∣0)と書く.
Uは 定義 13.1.3 の意味の機械ではない.機械はビット列を,それが表す自然数を通してしか見ないのに対し,Uはビット列そのものを読み,先頭のビットで場合を分けるからである.では,なぜ機械のほうをはじめからビット列の上で定めなかったのか.借りた番号づけが自然数の部分関数に番号を与えるものだからである.番号𝑖の相手M𝑖が自然数を読む以上,定義 13.1.3 の機械もそれに合わせるほかない.Uが機械でないことで困ることは無い.以下でUについて使うのは記述長の式と,Uが計算の手続きで定まるという一事だけで,どちらも 定義 13.1.3 の枠に入っていることを要求しないからである.
記述長は 定義 13.1.3 と同じ形の式で定まるので,𝐾の添字が機械の名前かUかで読み分ければよい.Uを万能と呼ぶのは,どの機械の記述も定数の払いで真似できるからであって(定理 13.1.7),Uが機械の一つだからではない.そのU自身も計算の手続きで定まる.先頭のビットを読んで場合を分け,1の並びを数えるところは Church–Turing のテーゼが与え,番号𝑖の部分関数を走らせるところは部分計算可能関数の番号づけと万能定理の後半が与える.
二つの出し方を式にするのは 命題 13.1.6 と 定理 13.1.7 で,その前に,𝐾Uを定める最小が実際に達成されることを見ておく.
命題 13.1.5. 𝑥,𝑦 ∈ℕとすると,|𝑠| =𝐾U(𝑥 ∣𝑦)かつU(𝑠,𝑦) =𝑥を満たすビット列𝑠が存在する.
証明. 𝑡を,0の後ろに𝑥の二進表示をつないだビット列とする.𝑡の先頭のビットは0で,その後ろは𝑥の二進表示だから,定義 13.1.4 よりU(𝑡,𝑦)は𝑥の二進表示が表す自然数,すなわち𝑥である.よって集合{|𝑠| :U(𝑠,𝑦) =𝑥}は空でない自然数の集合であり,最小元をもつ.その最小元は𝐾U(𝑥 ∣𝑦)にほかならず,しかもU(𝑠,𝑦) =𝑥を満たすあるビット列𝑠の長さだから,その𝑠が求めるものである.◼
命題 13.1.6. 𝑥,𝑦 ∈ℕとすると𝐾U(𝑥 ∣𝑦) ≤|𝑥| +1である.
証明. 𝑡を,0の後ろに𝑥の二進表示をつないだビット列とすると,定義 13.1.4 よりU(𝑡,𝑦) =𝑥である.𝑡の長さは𝑥の二進表示のビット数より1大きいから|𝑡| =|𝑥| +1であり,定義 13.1.4 の最小はこの値以下である.◼
命題 13.1.6 は,どの自然数も,その二進表示の前に1ビットを添えるだけで書き出せることを言っているにすぎない.どんなに複雑な対象でも,複雑性はそれを書き下す長さに1を足した値を超えない,という当たり前の上界である.おもしろいのはここから先で,機械を工夫すればこの上界をどれだけ下回れるか,そして工夫の余地がどこで尽きるかである.
不変性定理
定理 13.1.7(不変性定理). Mを機械とすると,定数𝑏 ∈ℕがあって,すべての𝑥,𝑦 ∈ℕとすべてのビット列𝑠について,M(𝑠,𝑦) =𝑥ならば𝐾U(𝑥 ∣𝑦) ≤|𝑠| +𝑏が成り立つ.
証明. 部分計算可能関数の番号づけと万能定理より,M =M𝑖となる番号𝑖がある.𝑏 :=𝑖 +2とおく.
𝑥,𝑦 ∈ℕとビット列𝑠がM(𝑠,𝑦) =𝑥を満たすとする.𝑡を,1を𝑖 +1個並べ,次に0を置き,最後に𝑠をつないだビット列とする.𝑡の先頭のビットは1で,2番目のビットから最初の0が現れるまでの1の個数は𝑖,その0より後ろは𝑠だから,定義 13.1.4 の先頭が1の場合に当たってU(𝑡,𝑦) =M𝑖(𝑠,𝑦) =𝑥である.𝑡の長さは(𝑖 +1) +1 +|𝑠| =|𝑠| +𝑏だから,定義 13.1.4 の最小はこの値以下である.◼
系 13.1.8. Mを機械とすると,定数𝑏 ∈ℕがあって,すべての𝑥,𝑦 ∈ℕについて𝐾U(𝑥 ∣𝑦) ≤𝐾M(𝑥 ∣𝑦) +𝑏である.
証明. 定理 13.1.7 の定数𝑏をとり,𝑥,𝑦 ∈ℕとする.𝐾M(𝑥 ∣𝑦) = +∞のときは不等式が成り立つ.そうでないときは,定義 13.1.3 の最小をとる集合が空でないので,M(𝑠,𝑦) =𝑥かつ|𝑠| =𝐾M(𝑥 ∣𝑦)を満たすビット列𝑠がある(自然数の空でない部分集合は最小元をもつ).定理 13.1.7 をこの𝑠に当てると𝐾U(𝑥 ∣𝑦) ≤|𝑠| +𝑏 =𝐾M(𝑥 ∣𝑦) +𝑏である.◼
系 13.1.8 が,本節のはじめに述べた問いへの答えである.機械をどう選び直しても,𝐾Uが𝐾Mより本質的に大きくなることはない.ずれは𝑏という定数までで,𝑏は𝑥にも𝑦にも依らず,Mの番号だけで決まる.したがって,Uを固定して測ることは,どの機械で測るより定数のぶんしか損をしない.コルモゴロフ複雑性が対象の量として意味を持つのは,この一点による.
抑えているのは片側だけであることに注意したい.逆に𝐾Mを𝐾Uで抑えることは,機械によってはできない(𝑥をけっして出力しない機械では 定義 13.1.3 より𝐾M(𝑥 ∣𝑦) = +∞である).機械の選び方に左右されないと言えるのはこの片側までで,別の番号づけから同じ作り方で組み立てた機械とのあいだで𝐾Uの値がどれだけ違いうるかについて,本書は何も述べない.一つの𝑥についての𝐾U(𝑥)の値そのものも,定義 13.1.4 が固定した番号づけに依って決まる.本章が𝐾につねに機械を添字として書くのは,このためである.
例 13.1.9(2の冪). 定数𝑏 ∈ℕがあって,すべての𝑛 ≥1について次の二つが成り立つ.第1に|2𝑛| =𝑛 +1であり𝐾U(2𝑛) ≤𝑛 +2である.第2に𝐾U(2𝑛) ≤|𝑛| +𝑏である.
証明. 2𝑛の二進表示は1の後ろに0を𝑛個並べたものだから|2𝑛| =𝑛 +1であり,命題 13.1.6 を𝑥 :=2𝑛,𝑦 :=0に当てて第1の主張を得る.
第2の主張に移る.M(𝑧,𝑦′) :=2𝑧(第2引数は使わない)と定めると,𝑧から2𝑧を求める手続きは有限回の繰り返しで書けて必ず停止するから,Church–Turing のテーゼよりMは計算可能であり,とくに 定義 13.1.3 の意味で機械である.定理 13.1.7 をこのMに当てて定数𝑏をとる.𝑛 ≥1とし,𝑠を𝑛の二進表示のビット列とすると,𝑠が表す自然数は𝑛だからM(𝑠,0) =2𝑛であり,𝐾U(2𝑛) =𝐾U(2𝑛 ∣0) ≤|𝑠| +𝑏 =|𝑛| +𝑏である.◼
二つの上界の違いは,何を書き下しているかの違いである.第1の上界𝑛 +2は2𝑛という数そのものを書き写す長さで,第2の上界|𝑛| +𝑏は𝑛を書いて「2の冪をとれ」と言う長さである.|𝑛|は𝑛の二進表示の桁数だから,𝑛が倍になるたびに1しか増えない.したがって𝑛を大きくすれば,どこかで第2の上界のほうが小さくなる.どこで小さくなるかは𝑏で決まり,𝑏は 定理 13.1.7 の証明のとおりMに与えられた番号で決まるから,番号づけの取り方に依る.定理 13.1.7 が言っているのは,このように機械の側へ寄せた指示を,Uが定数の払いで真似できるということである.
本節は,記述を測る規約をU一つに固定した.次節はその規約のもとで,短く書ける対象がどれだけあるかを数える.数えられるのは,指示のほうがビット列で,長さで区切れば本数が決まるからである.
InformationTheory — 形式化検証つき情報理論教科書(レビュー版).数式は MathJax + AMS Euler で事前レンダリング.