ラベル シプサ の投稿を表示しています。 すべての投稿を表示
ラベル シプサ の投稿を表示しています。 すべての投稿を表示

2008年10月5日日曜日

【シプサ】7 時間の複雑さ (その4)

リハビリかねて、こつこつ、というより、ちょいちょい。

  • Φ=(¬x∧y)∨(x∧¬z)を0,1,0が充足するか?

    • (¬0∧1)∨(0∧¬0)
    • (1∧1)∨(0∧1)
    • 1∨0
    • 1
    • お、充足。


  • Cook-Levinの定理の紹介。
  • 多項式時間帰着可能性の導入。
  • conjunctive : 結合する; 合同の, 共同の;
  • 定理7.32 3SAT <=P CLIQUEの確認。

  • 「定理7.36 BがNP完全であり、かつNPに属するCに対してB <=P Cならば、CはNP完全である。」

    • 自分なりに考える。
    • BはNP完全だから、B∈NPであり、NPに属するすべてのAが、A <=P Bである。
    • B <=P Cだから、たぶん、上のAについて A <=P Cである。
    • 前項の後半は、NP完全の定義そのものなので、CはNP完全である。


  • SATのNP完全性を示すのはごつそうだ。
  • 今回は、玉砕覚悟で自分なりに考えてみる。

  • 「定理3.37 SATはNP完全である。」

    • SATはNPに属するか?

      • brute-forceで非決定でいけばいいのではないか。
      • 入力がn個のリテラルを含むとする。
      • すると入力の全体長はたかだかnの定数倍だ。なので、このnで考える。
      • n個のリテラルはそれぞれ0または1でありえる。
      • その割り当てを非決定的に実施する。
      • 矛盾した割当てとなったらその枝は拒否する。
      • すべてのリテラルに割当てが完了したところでその割当ての論理演算を実施する。
      • 前項が真になるならこのTMは受理する。
      • 受理の枝がひとつもなければこのTMは拒否する。
      • 各枝は、まあ、多項式時間のようだ。
      • というわけで、このTMは非決定性多項式時間機械である。
      • ゆえにSATはNPに属する。


    • 次に任意のA∈NPについて、A <=P SATが成り立つといえるかどうか。
    • A∈NPなので、Aを判定する非決定性多項式時間TM Nが存在する。その多項式時間をn^kとする。
    • 計算状況を並べた(n^k) * (n^k)の表をタブロー(tableau)と呼ぶ。各状況の頭とお尻は'#'とする。
    • tableau: (小説などの)絵画的な描写
    • 1つのタブローがひとつの計算の枝に対応する。

    • AからSATへの多項式帰着写像fを構成する。

      • 入力wから論理式Φを生成する。
      • wがNに受理されるなら、ΦはSATに属する。
      • wがNに受理されないなら、ΦはSATに属さない。
      • Nの仕様として、状態:Q、テープアルファベット:Γとする。
      • C=Q∪Γ∪{#}とする。

      • う、これ以降、しんどい。次回へ。



次回は、SATのNP完全確認の途中から。

2008年9月30日火曜日

【シプサ】7 時間の複雑さ (その3)

こつこつ。今回は7.3 クラスNPから。

  • clique:小集団,派閥,仲間
  • クラス NPの概念を理解した。
  • 7.4にはいり、NP完全性のイメージはわかった。

この節はお話的な雰囲気もあり、困難もそんなになかった。またおもしろかった。
「このことは、まだわかっていない」というフレーズが徐々に増えてきて、先端に近づいている感じがした。
7.4 NP完全性のさわりだけ入った。次回は、多項式帰着可能性、から。

2008年9月29日月曜日

【シプサ】7 時間の複雑さ (その2)

シプサは、ちょっと離れると再開する敷居が高い。されど、こつこつ。

  • まず、前回最後のあたりがぐだぐだになったので、そのあたりから。

  • 「定理7.8 t(n)をt(n)>=nであるような関数とする。このとき、すべてのt(n)時間複数テープTuring機械に対して、それと等価なO((t^2)(n))時間単一テープTuring機械が存在する。」

    • まず、この定理がいっていることの理解を深める。
    • t:n->R+な関数tについて、TIME(t(n))という言語の集合をつくれる。TIME(t(n))に含まれる言語は、O(t(n))時間Turing機械で判定されるものに限る。これが基本情報。
    • ということは、t(n)時間複数テープTuring機械が判定する言語は、TIME((t^2)(n))に属している言語である、という感じなんだな。
    • (t^2)(n)が何をあらわしているのかわからない。(t(n))(t(n))ということか? これは説明を読んで理解することにする。

    • さて、説明の理解。これは文章ではなくて、紙に絵を書いて理解をこころみる。
    • ... お絵描き中 ...
    • 雰囲気はわかった。。。(t^n)(n)は、(t(n))(t(n))のことのようだ。先へ進む。


  • 「定理7.11 t(n)をt(n)>=nであるような関数とする。このとき、すべてのt(n)時間非決定性Turing機械に対して、それと等価な2^(O(t(n)))時間決定性単一テープTuring機械が存在する。」

    • うーん。これもなんとなく雰囲気をつかんだ。
    • 先々、必要になったときに、理解を深めることにする。(今は興味がわかない)


  • ここから「7.2 クラスP」。

  • そうか、決定性単一テープTuring機械で多項式時間判定できる言語のクラスがクラスPなんだ。
  • そして、クラスPである、ということと、現実の電子計算機で計算を実行できるということは経験上等価であると。少くとも第一近似または突破口としてはよし。
  • クラスPという概念は、「妥当な」計算モデルの変更によって影響を受けない。さらばTuring機械、ということか!?
  • クラスPの概念を理解した。

  • 気になるところを確認。
  • 「与えられた数の素因数を求める一つの方法は、すてのの可能な序数を調べてみることである。この探索空間のサイズは指数的なので、」

    • 素因数って何だっけ?
    • 素因数:整数の因数である約数のうち、素数であるもの。
    • 因数って何だ?
    • 因数:一つの数や整式が、いくつかの数や整式の積の形で表されるときの、その個々の数や整式のこと。
    • 探索空間のサイズは?

      • 10進数で入力を表現する。
      • n=1;数=1 -> 1
      • n=2;数=10 -> 10
      • n=3;数=100 -> 100
      • n=4;数=1000 -> 1000
      • なるほど。入力のサイズnに対して調べるべき対象の数は、10^nになっている。



  • 「項目1は、Pが数学的に頑強なクラスであることを示している」

    • 頑強(robust)というのは、前にでてきたような、どこだっけ。
    • 索引を調べるが、なかった。先へ進む。。。


  • その計算が多項式時間でいけるかどうかを検討する際のポイント

    • 問題の符号化に関連すること(表現から内部表現の構成、他の表現も使うならばそれへの変換、またはこれらの逆変換など)が多項式時間でできるかどうか。
    • アルゴリズムのステージ数は多項式時間か。
    • アルゴリズムの各ステージの実行ステップは多項式時間か。


  • 気になること。数字の一進表現は指数的だが、二進表現は多項式的?

    • まず、一進表現。
    • n=1;16進数=1 -> 1
    • n=2;16進数=10 -> 16個
    • n=3;16進数=100 -> 256個
    • まあ、これは指数的。
    • 次に二進表現。
    • n=1;16進数=1 -> 1個
    • n=2;16進数=10 -> 5個 (1 0000)
    • n=3;16進数=100 -> 9個 (1 0000 0000)
    • おお、n^2程度だ。


  • う、これから、例としてグラフ理論が多くなるのか。。。

  • 「定理7.14 PATH∈P」

    • 気になるところを調べる。
    • 全数探索は本当に指数的か?
    • グラフ Gの節点数をmとする。
    • sからtへの経路が存在するならば、それは各節点をたかだか1回しかとおらない。なぜなら、2回とおるということはループ構造があるということであり、ループしなきゃいいんだから。
    • するとG内に存在する経路とは高々m個の節点の列である。
    • ではこのような節点の列が何個あるかというと、始点をsとしたものは、(m-1) + (m-1)(m-2) + (m-1)(m-2)(m-3) + ... + (m-1)(m-2)...(2)(1)かな?
    • これが指数的か多項式的か?
    • わからない。。。
    • いかん、グラフ理論または離散数学の勉強をせねば。
    • とりあえず今は先に進む。


  • 「定理7.15 RELPRIME∈P」

    • これはアルゴリズムとデータ構造のときに検討したので、まあわかる。


  • 「定理7.16 すべての文脈自由言語はPの要素である」

    • これ、ぼやぼやしている、日を置いて再度考える。


またまた最後ぐだぐだになったが、とりあえずクラスPがおわった。
次回はクラスNP。

2008年9月26日金曜日

【シプサ】7 時間の複雑さ

気分一新、第三巻。

  • asymptotic: asymptote 漸近線
  • 漸近線: ある曲線が、原点から無限に遠ざかるにつれて、限りなく近づいてはいくが、決して交わらないし、接しもしない直線。
  • おお。big-O記法というのは、大きい入力における近似の考え方だったんだ。
  • うーん。logがわからない。wikipedia。。。

    • 任意の正の実数x について、x=a^p (a != 1) をみたす実数pが唯一存在する。このpを p = log[a] x と書く。
    • ここで、aを底と呼ぶ。底は、2, e(ネイピア数), 10などをとることが多い。それぞれのとき底を省略するために、Log, ln, lgなどと書くこともある。
    • xy = a^pのときp=log[a](xy)。x=a^q, y=a^rのときq=log[a]x,r=log[a]y。xy=(a^q)(a^r)=a^(q+r)だから、log[a](xy) = log[a]x +log[a]y。
    • nが自然数のとき、前項をつかって、log[a](x^n) = nlog[a]x。これはたぶん実数でもなりたって、log[a](x^p) = plog[a]x。
    • (log[a]x)(log[b]a) = log[b](a^(log[a]x)) = log[b]xより、log[a]x = (log[b]x)/(log[b]a)。なるほど定数倍だ。

  • 5n^3+2n^2+22n+6 = O(n^3)。

    • nが十分大きければ、n^3 > 2n^2+22n+6。
    • よって、nが十分大きければ、6n^3 > 5n^3+2n^2+22n+6。

  • 3nlog[2]n+5nlog[2]log[2]n+2 = O(nlogn)

    • loglognはlognよりもはるかに発散が遅い。ゆえにnが十分に大きければ、4nlog[2]n>3nlog[2]n+5nlog[2]log[2]n+2。

  • O(n^2)+O(n) = O(n^2)。

    • nが十分に大きければ、定数倍の値に関わらず、O(n^2)+O(n^2) > O(n^2)+O(n)。

  • f(n)=2^(O(n))の意味は?

    • nが十分に大きいとき、2^(Cn)がf(n)の上界になっているということ。
    • なんで、O(2^n)ってかかないんだろう??

  • f(n)=2^(O(logn))の意味は?

    • nが十分に大きいとき、2^(Clogn)がf(n)の上界になっているということ。2^(Clogn) = 2^(log(n^C)) = Dn^Cだからn^Cが上界ということ。
    • なんで、O(n^C)と書かないんだろう?

  • n^O(1)とは?

    • O(1)は、定数より大きくならない。よって、n^C。なので2^(O(logn))と同じ。

  • n^5、n^3、nなどの上界を多項式境界という。
  • 2^(n^6)、2^(n^2)、2^(n)などの上界を指数境界という。

  • small-o 記法。
  • f(n)=o(g(n)) <=> lim f/g = 0 。 なるほど。これはbig-Oよりも「ずいぶん大きい」境界だな。

  • あ、big-Oとかsmall-OのOって、たぶんOrder(規模)のOなんだろうな。なっとく。

  • う、言語0^k1^kの修正アルゴリズムで、走査回数がたかだか1+log[2]nになるのがわからない。考える。

    • n=2、01とのき。q01#Xq1#Xxq_#Xqx_#qXx_#qXx_。これは5回?
    • 1 + log[2]2 = 1 + 1 = 2。あり?
    • n=4、0011のとき。q0011#Xq011#X0q11#X0xq1_#X0x1q_#X0xq1_#X0qx1_#Xq0x1_#qX0x1_#Xq0x1_#Xxqx1_#Xxxq1_#Xxxxq_#Xxxxq_。これは13回?
    • 1 + log[2]4 = 1 + 2 = 3。あり?

    • なんかおかしい。1+lognになるのはここではないのかな?
    • まず、はしからはしまでの一回の動作のステップは、常にn。
    • じゃあ、何回、はしからはしまでをやりますか、というと、
    • n=2のとき、1回。log[2]2 = 1
    • n=4のとき、2回。log[2]4 = 2
    • n=6のとき、2回。log[2]6 = 2.58
    • n=8のとき、3回。log[2]8 = 3
    • n=10のとき、3回。log[2]10 = 3.32
    • n=16のとき。log[2]16 = 4
    • 1を足しているのがよくわからないが、対数的にはなっている。
    • なぜ、底を2とした対数的になっているのか?
    • 底を2とする対数ってなんだ?
    • a = log[2]b のとき、2^b = a。
    • そうか、今あるNがあるとき、「2の何乗がNですか」ということは、「Nに1/2を何回掛けると1になりますか」ということであり、これは「N個の作業対象があり、毎回作業対象が前回の半分になるときに、何回作業すると作業対象が0になりますか」ということと同義なんだ。
    • やっと、毎回半分になる作業が、log[2]n回の繰返しになるということが理解できた。


最後ぐだぐだになったが、とりあえず7.1がおわった。
次回は、7.2 クラスP。こつこつ。

2008年9月24日水曜日

【シプサ】6 計算可能性の理論における先進的な話題 (その7)

こつこつ。今日は演習。

  • 6.1 再帰定理の考え方を利用して、自己複製プログラムをつくれということ。

    • 問題の解釈はいろいろあるが、とりあえず、CLということで、REPLにて評価の前後で形がかわらないS式をつくる、というお題とした。
    • また、TMへの入力を関数の引数とした。よってTMが各部にわかれている場合、各部の間の入力出力の組み合わせは、関数の連続適用によってなされているとした。

    • 一番簡単なのは、NILなんだが、それはおいといて。
    • こんな感じ。

      ((lambda (B)
      `(,B ((lambda () ',B))))
      ((lambda () '(lambda (B)
      `(,B ((lambda () ',B)))))))

    • quoteをちゃんと書くと、こんな感じ。

      ((lambda (B)
      (list B (list (list (quote lambda) nil (list (quote quote) B)))))
      ((lambda () (quote (lambda (B)
      (list B (list (list (quote lambda) nil (list (quote quote) B)))))))))

    • 後々、C言語でもやってみたい。今はやらない。


  • 6.2 「MIN[TM]の任意の無限部分集合がTuring認識可能でないことを示せ」

    • えっとMIN[TM]って何だっけ。

      • TMの表現を集めた言語。
      • ただし、それはそれぞれのTMにおいて文字列長において最小のもののみ有資格。

    • で、これは認識不可能だったはずだがなぜか。

      • 再帰定理がきいてくる。
      • えっと、まずMIN[TM]を認識するTM Mが存在するとする。
      • するとMを変形してMIN[TM]の列挙装置もつくれる。これをM'とする。
      • 次のようなTM Sを構成する。

        • 入力をwとする。
        • まず、再帰定理で自分自身の表現<S>を得る。
        • 列挙装置M'を動かして、<S>より長いTM表現を得る。これを<T>と呼ぶ。
          ※証明はしていないが、TMの定義からいって、Tが常に存在することは問題なさそうだ。
        • <%>を入力wについてシミュレートする。

      • すると、TM SはTM Tと同じ動作をするTMである。
      • ここで、TM Sの中では、<S> < <T>が長いということになっている。
      • これは、列挙装置M'が出力するTMの表現が「同種のもので最小である」といことに反している。ゆえに仮定がおかしい。■


    • えっと、この証明をそのまま「MIN[TM]の任意の無限部分集合」に適用すればよいかと。■


  • 6.3 「A <=T B かつ B <=T C のとき、A <=T C であることを示せ」

    • A <=T B の定義はなんだっけ?

      • たしか、Aのoracleが存在した場合に、Bが判定可能となるようなAのoracleをつかった手順が存在すること、だった。

    • えっと、記法をさだめる。

      • AのoracleをOR[A]とかく。
      • oracle OR[X]を使った判定手順をT[OR[X]]とかく。

    • すると、T[OR[A]]はBを判定し、T[OR[B]]はCを判定する、ということ。
    • このとき、T[OR[A]はBを判定するのだから、Bのoracleでもある。Cについてもしかり。
    • Cのoracle = T[OR[B]] = T[OR[T[OR[A]]]]]。
    • これはAのoracleが存在すれば、それを使った手順にてCのoracleが作れる、すなわちCを判定できることを示している。
    • この言明は、A <=T Cの定義そのもの。■


  • 6.4

    • A[TM]ってなんだっけ?
    • A[TM] = {<M,w> | TM Mは入力wを受理する。}
    • では、A[TM]'って何だろう? 問題文からすると
    • A[TM]' = {<N,x> | Nはoracle TMである。A[TM]に対するoracleを内蔵したoracle TM M^(A[TM])はxを受理する}
    • ということ? ちょっとよくわからない。
    • しょうがないので、A[TM]'を自分なりに組み立てて探る。

    • まず、MというTMがある。これはTMの定義にしたがって仕様がきまる。
    • TM Mはいろいろな入力にたいして、受理したり拒否したりループしたりする。
    • 言語A[TM]というのは、そんなTMと入力の組み<M,w>について、受理するものだけの表現を集めたものということだった。

    • さて、言語A[TM]に対するoracleというのは、任意の文字列について、それがA[TM]の要素かどうかを判定してくれる超機械であった。
    • その超機械への問い合わせ機構をもった特殊なTMをoracle TMと呼び、oracleというのは言語に紐づいて設定される概念であるから、その名前をM^(A[TM])などと、言語とともに書くことにした。
    • M^(A[TM])は、A[TM]を判定するoracle TMである。よってその入力は、A[TM]の要素<M,w>である。

    • さて、A[TM]は、TMと入力の組だった。この考えをoracle TMに拡張できるか。
    • A[TM]'はoracle TMと入力の組。ただし、入力はまったく任意ではなくて、M^(A[TM])が受理するものに限るとする。
    • この組の数は膨大になるかもしれない。なぜなら、oracle TM が入力を受理する、などの制限をかけていないので、すべてのoracle TMの表現がこの言語に含まれるからだ。

    • さて、これがA[TM]'の理解として正しいのかどうか微妙だが、正しいとして解答をこころみる。
    • まず、A[TM]'がA[TM]に対して相対的に判定可能だと仮定する。
    • ということは、M^(A[TM])を使ってA[TM]'を判定する手順が存在する、ということ。
    • 。。。いきづまった?

    • 問題の解釈に間違いがあるか?
    • 「さて、A[TM]は、TMと入力の組だった。この考えをoracle TMに拡張できるか。」というところを、oracle TM M^(A[TM])としてみる。
    • するとA[TM]'はあくまで受理される組についての言語になり、すこしまっとうになった気がする。

    • さて、これがA[TM]'の理解として正しいのかどうかひきつづき微妙だが、正しいとして解答をこころみる。
    • まず、A[TM]'がA[TM]に対して相対的に判定可能だと仮定する。
    • ということは、M^(A[TM])を使ってA[TM]'を判定する手順が存在する、ということ。
    • あ、これは簡単に判定できる。wをM^(A[TM])にくわせるだけじゃん。

    • うむー。問題文を理解できないとつらい。これは未来の自分への課題として、先へ進む。



  • 6.5

    • ∃x∀y [ x+y=y ]はTh(N,+)の要素である。
    • なぜかというと、x=0∈Nとするとき、関係0+y=yはyの値に関わらずtrueとなる。よって、この言明はtrueであり、Th(N,+)の要素となる。

    • ∃x∀y [ x+y=x ]はTh(N,+)の要素ではない。
    • なぜなら、例えば、y=1∈Nにたいしてxは存在しない。よってこの言明はfalseである。falseな言明は、Th(N,+)の要素ではない。


  • 6.3と6.5の解答を確認。芯は外していないな。

6.4の問題文を理解できなかったのがくやしいが、一応シプサの第二巻を読了した!!

次回から第三巻 複雑さの理論。

まずは第7章 時間の複雑さ。ここはbig-Oだとかsmall-oだとか、NP完全だとか、これまたいろんなところでよくみるけれど、全然知らなくて、いつも理解を妨げていた概念たちだ。楽しみ。

2008年9月23日火曜日

【シプサ】6 計算可能性の理論における先進的な話題 (その6)

こつこつ。「6.4 情報の定義」
今日は邦書メイン。

  • informationの定義はいくつかある。ここではcomputability theoryを使った定義を確認する。

  • 言葉の定義

    • x: 二進文字列
    • d(x): xの最小記述
    • <M,w>:テープ上にxを設定して停止するTM Mとその入力wの記述。二進文字列。
    • K(x): <M,w>のうち最も長さが短いもの。(同じ長さの場合は辞書式で若い方)記述の複雑さ、またはKolmogorov複雑さと呼ぶ。K(x)=d(x)である。


  • 定理を丁寧に理解する。

  • 定理6.24
    ∃c∀x[K(x) <= |x| + c]

    • この定理は、アルゴリズムによる情報の記述を採用すると、場合によって、表現したい情報そのものよりも長くなってしまうのであるが、それは入力の文字列のあり様にかかわらず、せいぜい定数であるということ。
    • これは起動したら何もせず定義するTMをNとすると、
      d(x)の候補: <M,w> = <N,x> = <N>x
      K(x) = |d(x)| <= |<N>x| = |x| + |<N>|
      最後の項はxによらず定数。定理を確認できた。


  • 定理6.25
    ∃c∀x [K(xx) <= K(x) + c]

    • この定理が意味するところは、入力文字列を二度繰り返すことによってどれくらい情報量が増えるかというとたいして増えなくて、単一の入力だったときとくらべると、入力文字列のあり様に関わらず、せいぜい定数だということ。
    • TM Dは、<N, w>を入力として受け取り、Nを入力wでシミュレートした後で、その出力文字列を二回出力するとする。
    • これのwをxに変えたものとしてd(x)を選ぶ。
    • d(x)を入力とするDはxxを出力するので、K(xx)候補ではある。
      d(xx) の候補: <:D,w> = <D>d(x)
      K(xx) <= |<D>d(x)| = |<D>| + |K(x)|
    • これで定理を確認できた。


  • 定理6.26
    ∃c∀x,y [K(xy) <= 2K(x) + K(y) + c]

    • この定理が意味するところ。K(xy) <= K(x) + K(y) + c と予測されるが、そうではなくて連結はもう少し情報を含んでいる、またはコストがかかる、ということ。
    • 入力は0or1から成る。
    • xyを出力するTMを考えるときに情報として、xとyの区切りを認識する必要がある。
    • この2つのことを鑑みて、xの文字を全て2個ずつにして(010なら001100)、yとの区切りを01とする手法をとるとする。x,yからこの手法で構成した文字列をwと呼ぶ。xを2倍にしたものをx'と呼ぶ。
    • 今作成中のTMをMと呼ぼう。
    • Mは3つの部分からなるとする。

      • M1. 全体を統合管理するとともに、x'とyに分離して他の部分に渡す処理。
      • M2. x'を受け取りxを出力する部分
      • M3. yを受け取りyを出力する部分

    • 。。。いきづまった。
    • あれ、この定理、シプサ先生が書いているほど、自明じゃないんじゃないか???
    • 深掘りはやめて、先に進むことにする。

  • xyのencodingとして、xの長さ(整数)を冒頭につけて、それを00,11方式で書くとすると、
    2log(K(x)) + K(x) + K(y) + c
    までは追い込める、とな。


  • 定義の最適性

  • 言葉の定義。
  • 計算可能な関数 p: Σ* -> Σ* を、一般的な記述言語と呼ぶ。
  • 情報化対象となる二進文字列をxと呼ぶ。
  • p(y) = xとなるyのうち、最短かつ辞書式最若のものをsと呼ぶ。
  • pに関するxの最小記述をdp(x)と呼び、それはsであるとする。
  • Kp(x) = |dp(x)|と定義する。

  • LISPだとしたときの例。
  • dlisp(x)は、xを出力する最小のLISPプログラム。
  • Klisp(x)は、そのプログラムの長さ。

  • 定理6.27
    「任意の記述言語pに対して、pだけに依存する定数cが存在して、次が成り立つ。
     ∀x [K(x) <= Kp(x) + c]」

    • ある記述言語pについて、次のようなTM Mを考える。

      • 入力wに対して、p(w)を出力する。

    • xのpによる記述がwであるとする。
    • Mは言語Pのインタープリタといえる。
    • すると、情報としてのxの記述は、<M,w> となる。
    • 定義より、|<M,w>| = |<M>dp(x)| = |<M>| + |dp(x)| = |<M>| + Kp(x)。
    • これは、xのアルゴリズムによる最小記述候補だから、
      K(x) <= Kp(x) + |<M>|
      が確認できた。


  • 圧縮不可能な文字列とランダム性

  • 言葉の定義。
  • c圧縮可能: K(x) <= |x| - c なるcが存在すること。
  • xが1圧縮不可能なとき、xは圧縮不可能である、と言う。

  • 定理6.29
    「あらゆる長さに対して、その長さの圧縮不可能な文字列が存在する」

    • おお! この定理の証明、簡単かつ強力。すごい。


  • 系6.30
    「長さnの文字列全体で少なくとも2^n-2^(n-c+1)+1個の文字列は、Cで圧縮不可能である。

  • 定理6.31と定理6.32は感じだけ掴んでおく。

おお、第二巻の本文を読了した!!
長かった。。。
次回は章末演習。章末演習を越えれば、ついに最終巻だ!

2008年9月22日月曜日

【シプサ】6 計算可能性の理論における先進的な話題 (その5)

もう一歩、進めるだろうか。

  • 6.3 TURING REDUCIBILITY

  • connote: ...を暗示する。...を伴う。...を内包する。
  • この、oracleの超越機械的な考え方、めちゃくちゃおもしろい。

  • EXAMPLE 6.19を丁寧に理解する。

    • A[TM]のoracleがあるとする。
    • それを内包したoracle Turing machineをM^(A[TM])と呼ぶ。
    • このM^(A[TM])は通常のTMとくらべると、はるかに強力な判定能力をもっている。
    • 例として、E[TM]を判定できることを示す。
    • M^(A[TM])を使って、E[TM]を判定する手順を構成する。
    • その手順。

      • 入力はTMの表現<M>とする。
      • 1. 次のようなTM Nを構築する。

        • 入力は無視する。
        • 1. TM M を 全てのw∈Σ* について並列動作させる。(いいのか、こんな設計???)
        • 2. 1がいずれかについて受理になるならば、受理する。

      • 2. M^(A[TM])に<N,0>を入力する。すなわち、<N,0>∈A[TM]かどうかを調べる。
      • 3. 2の結果が拒否なら、受理する。受理なら、拒否する。

    • さて、この手順にでてくるTM Mが認識する言語が空集合でないならば、Nは<M>を受理する。ゆえに、Nはどんな入力でも受理となるのでもちろん0も受理する。ゆえに、<N,0>∈A[TM]であるから、この手順自体の結果は拒否となる。空集合であるケースも同様の分析で受理となることがわかる。
    • よって、この手順は、E[TM]を判定する手順である。


  • THEOREM 6.21
    A <=T B かつ Bが判定可能ならば、Aも判定可能である。

    • A <=T B ということは、「Aは、Bに相対的には判定可能」ということである。
    • すなわち、Bのoracleを用いてAのoracle TMが作れるということだ。
    • Bが判定可能ということは、BのoracleはたかだかTMで実現できるものであるということ。
    • Aのoracle TMが内包するoracleもたかだかTMであり、すなわちAを判定する通常のTMが存在することになる。■


  • Turing帰着性は写像帰着性を一般化したものである。

    • 写像帰着性では、計算可能な関数によって、言語間の要素を写像した。
    • A <=m B のとき、写像帰着関数は、Aの要素をBの要素に写像し、Aの要素でないものをBの要素でないものに写像した。
    • これによって、Aの要素を判定するということが、Bの要素を判定するということの部分問題になるというのが本質であった。
    • これはBが判定可能であるならば、Turing帰着性におけるoracleをBが担っているということである。
    • 写像帰着関数は、Aからそのoracleを利用するための手順を示していることになる。


進めた。よかった。

2008年9月21日日曜日

【シプサ】6 計算可能性の理論における先進的な話題 (その4)

休日にもう少しすすめたらうれしい。

  • "AN UNDECIDABLE THEORY"

  • この節は、詳細な証明(確認)をするのでなく、考え方をざくっとしめすもののようだ。それにそって進みたい。

  • THEOREM 6.13
    Th(N,+,x) is undecidable.
  • これがこの節のひとつめのお題。
  • 確認の方針は、A[TM]をTh(N,+,x)に帰着させる、ということ。手法には計算履歴を使う。

    • LEMMA 6.14
      TM Mと入力wがあるとする。これらから、とある論理式をつくることができる。それをΦ[M,w]と呼ぶ。どんな論理式かというと、Mがwを受理するときに限り∃xΦ[M,w]がモデル(N,+,x)にてtrueとなる、すなわちthe language of Th(N,+,x)となるような論理式である。
    • これの証明というか、このような機構を構築することはかなり面倒。
    • ここでは、これが構築できる、ということにしておく。

  • LENNMA 6.14は写像帰着であるから、A[TM] <=m Th(N,+,x) である。よって、A[TM]は判定不可能性により、Th(N,+,x)は判定不可能であるといえる。■

  • 次のお題は、ゲーデルの不完全性定理。
  • 完全な証明ではなく、そのスケッチをみてみる。
  • ゲーデルの不完全性定理を簡単に言うと
    「数論において、証明形式や方式についていかなるものを採用したとしても、それをつかって証明不能な数学的言明が存在する」
    ということ。
  • 証明(proof)の正確な定義を構成する余裕はこの本ではない。
  • そこで簡単に言うと、

    • 言明Φに対する形式的証明πとは、言明の列である。
    • その列をS1, S2, ..., Slと表すとする。
    • SlはΦである。
    • Siは、Siより前の言明と数に関する基本的な公理とをもとにして、形式化された含意ルール(implication)によって導かれる。

  • さて、話しを進めるために次の2つが成り立つと仮定しちゃおう。

    • 1. {<Φ,π> | π is a proof of Φ } は 判定可能。
    • 2. ここで採用する証明システムは健全である。すなわち、ある言明の証明が存在するならば、その言明はtrueである。


  • THEOREM 6.15
    Th(N,+,x)をもとにして証明可能な言明を集めた部分集合をつくると、それはTuring認識可能である。
  • これの証明は簡単。上記1を使えばよい。

  • THEOREM 6.16 (不完全性定理 Th(N,+,x)版)
    Th(N,+,x)の一部の言明は、証明不可能である。

    • 背理法で確認していく。
    • 「Th(N,+,x)の全ての言明(すなわちtrueとなる言明)は証明可能である」とする。
    • この仮定を利用してアルゴリズムDを構成する。
    • さて、THEOREM6.15の認識可能ということを実現するアルゴリズムをPとする。
    • 言明入力Φから、Φと¬Φをつくり、双方についてアルゴリズムPを適用させる。
    • Φと¬Φのどちらかはtrueだから、仮定によると、そのtrueな方は証明可能である。
    • これはまさにTHEOREM6.15によって認識可能ということだから、先のアルゴリズムPの適用はどちらかが受理し停止する。
    • さて、どちらで受理したとしても、受理した方がtrueである。これは上の2によって保証されている。すなわち、Φで受理すれば、Φはtrue。¬Φで受理すれば、Φはfalse。
    • このアルゴリズムDは、Th(N,+,x)を判定している。これはTHEOREM6.13に反している。よって仮定は間違いである。■


  • うわ、次、再帰定理を使うのか。。。

  • 再帰定理を使って、(N,+,x)に関する言明で証明不可能なものを作ってみる、ということ。

  • 次のようにTM Sを構成する。

    • あらゆる入力に対して次のように動作する。
    • 1. 再帰定理を使って、自分自身の記述<S>を得る。
    • 2. LEMMA 6.14をつかって、言明ψ = ¬∃c [Φ[S,0]] を構成する。
    • 3. THEOREM6.15のアルゴリズムPを、入力ψにて動作させる。
    • 4. 3で受理すれば受理、拒否すれば拒否。

  • 実はこのψが、trueだがunprovableな言明である。それを確かめる。

  • 入力を(どうせ無視するが)0としておこう。
  • TM Sは受理するか拒否するか、である。

  • TM Sが受理するのは、3.でPが受理したとき。
  • Pが受理するということは、言明ψが証明可能ということ。
  • 一方、TM Sは受理するんだから、∃c [Φ[S,0]] はtrue。
  • ということは、¬∃c [Φ[S,0]] = ψ がfalse。
  • あり、このケースは、falseなものが証明可能となっている、というケースであることがわかった。
  • これは証明システムの事実2.に反している。
  • よってこのケースは発生しえない。

  • というわけで、次のケースが発生することがわかった。

  • TM Sが拒否するのは、3.でPが拒否したとき。
  • Pが受理するということは、言明ψが証明不可能ということ。
  • 一方、TM Sは拒否するんだから、∃c [Φ[S,0]] はfalse。
  • ということは、¬∃c [Φ[S,0]] = ψ がtrue。

  • ψは、証明不可能かつtrueである。■

こつこつ。次回は「Turing帰着性」。

【シプサ】6 計算可能性の理論における先進的な話題 (その3)

休日なので、シプサができる!

  • 前回のTh(M)の定義の訳が誤訳な予感。"the" collection of true sentences なので、trueとなるsentenceを全て集めたものがTh(M)。
  • 脚注によると、modelは、interpretationとかstructureとかとも言うそうな。

  • さて、"A DECIDABLE THEORY"。

  • Theorem 6.12 Th(N, +) is decidable.

  • これをやるまえに、問題1.31と1.32をやっておいた方がよさそうだ。第一章正規言語の問題だが。

  • 問題1.31

    • A^R = {w^R | w ∈ A}について、AがregularならA^Rもreguralを確認せよ、ということ。
    • これは正規表現の帰納的な定義において、各ルールについてA^R版を考えられるので、まあ当然。


  • 問題1.32

    • Σ3 = {000, 001, 010, 011, 100, 101, 110, 111}
    • B = {w ∈ Σ3* | 3n+1番目の文字をならべて数値と解釈した数と、3n+2番目を並べて数値と解釈した数との和が、3n+3番目を並べて数値と解釈した数に等しい。n={0,1,2,3,...}}
    • 例:
      001100110 ∈ B
      001101 !∈ B
    • このBがregularであることを示せ。
    • B^Rがregularであることを示す。そのregular expressionを具体的に構成する。

      • まず、しらべてみる。
      • 単一で要素たりえるもの。
        000, 011, 101
      • 二つで要素たりえるもの。(単二)
        単一○単一
        110001
      • 三つで要素たりえるもの。(単三)
        単二○単一
        単一○単二
        110 111 001
        110 010 001
        110 100 001
      • 四つで要素たりえるもの。(単四)
        単三○単一
        単一○単三
        単二○単二
        110 111 111 001
        110 010 111 001
        110 100 111 001

        110 111 010 001
        110 010 010 001
        110 100 010 001

        110 111 100 001
        110 010 100 001
        110 100 100 001
      • 規則性が見えてきた。
        (000∪011∪101∪(110○hoge○001))*
        で、hogeが、
        (010∪100∪111)*
        である。まとめると
        (000∪011∪101∪(110○((010∪100∪111)*)○001))*
        となる。(εをみとめないなら末尾を+に)

    • しかし、足し算というのが正規言語に過ぎない、というのは結構すごいことだな。。。


  • さて、本題。Theorem 6.12。

  • 頭の中で考えてみたが、どうも集中できない、というかわからない。そこでメモをやる。

  • 証明の方針検討。

    • まず、言明Φを判定するアルゴリズムを考える、という目標設定。
    • Φの表現を次のものにする。
      Φ=Q1x1Q2x2...Qlxl[ψ]
      ここでQ1...Qlはコンティフィア。ψはコンティフィアを含まず、変数x1...xlをもつ。
    • さて、for (i = 0; i <= l; i++)的に、
      Φ[i]=Q[i+1]x[i+1]Q[i+2]x[i+2]...Q[l]x[l] [ψ]
      をつくる。するとi=0のとき、上のΦに等しいことがわかる。
      Φ[0] = Φ
      続けると、
      Φ[1] = ΦからQ[1]x[1]をとったもの、
      ...
      Φ[l-1] = Q[l]x[l] [ψ]
      Φ[l] = ψ
      となる。
    • するとΦ[i]はi個の自由変数をもつ。
    • で、a1,...,ai∈N、として、その自由変数に当てはめたものを、Φ[i](a1,...,ai)と表記する。
    • で、for (i = 0; i <= l; i++)のそれぞれのiにおいて、

      • このΦ[i](a1,...,ai)があるわけだが、
      • これをtrueとする、a1,...,aiを認識するFA A[i]を構築する。
      • 構築のプランは、

        • まずA[l]を構築する。
        • A[i]からA[i-1]が構築できることを示す。

      • というもの。
      • 構築の結果、A[0]が得られれば、それはΦをtrueにする自由変数の入力を判定するものである。
      • ところで、Φに自由変数はない。
      • よって、Φが真ならば、A[0]はεを受理するはずである。偽ならば、拒否するはずである。



  • 方針決定。
  • ミソはAの構築であろう。そこを重点的に読む。

  • Aの構築。

    • A[i]のアルファベットは、問題1.32の拡張で、
      Σ[i] = {[0...00], [0...01], [0...010], ... , [1...11]}.
      で、それぞれの要素はi個の0or1を含むものとする。
      また、
      Σ[0] = {[]}.
      とする。

    • まず、A[l]を構成できるかどうか。
    • さて、モデル(N,+)の話をしているのだから、ψというのは{∧, ∨, ¬, (,), R, x}からなり、RはPLUSであるものにすぎない。
    • 一方で、問題1.32でみたように、PLUS(a,b,c)の入力たるa,b,cを認識するFAは構築可能である。
    • ψを構成するには、PLUSをもとにして、前掲の論理演算で帰納的に組み立てていくしかない。
    • ここで、PLUS(a,b,c)をみたすabcの組はtuple alphabetにおいて正規言語をなし、正規言語は、前掲の論理演算に関して閉じているので、結果得られる言語(ψに関する言語)も正規言語である。
    • というわけでA[l]は構成できる。

    • 次にA[i+1]からA[i]を構成できるかどうか。
    • A[i+1]が存在すると仮定する。

      • ところで、A[i+1]とは何か?
      • Φ[i+1](a1,...,a[i+1])をtrueとする、a1,...,a[i+1]の表現たる言語を認識するFA。ここで、a1,...,a[i+1]の表現は、Σ[i+1] = {[0...0],[0...1],...,[1...1]}としたときのΣ[i+1]*をなし、Σ[i+1]*の要素の解釈はi+1-tupleのk番目の0or1を集めて連結したものがakであるというもの。
      • 違う言葉でいうと、Φ[i+1]は自由変数をi+1個もつが、それぞれにa1,...,a[i+1]をいろいろあてはめていき、Φ[i+1]がtrueになるものだけを集めた言語。
      • A[i+1]は、Σ[i+1]*を入力として、前項をみたすものだけ受理する。

    • A[i]を構成する。
    • まず、Φ[i]とΦ[i+1]の関係は、これらの定義から、Φ[i] = ∃x[i+1]Φ[i+1]であるか、Φ[i] = ∀x[i+1]Φ[i+1]であるかのいずれかである。
    • ∀xP(x) <=> ¬∃x¬P(x)だから、後者は、前者に帰着できる。よって、前者さえ構成できればよい。そこで前者の構成。

      • まず、A[i]は状態として、A[i+1]のものと、新しい開始状態をもつ。
      • そして、A[i]に入力[b1 ... b[i-1] b[i]]が与えられるたびに、A[i+1]の入力足りえる[b1 ... b[i-1] b[i] z]を想定する。
      • ここで「想定する」とは、zが0or1であるとして非決定的に状態遷移する、ということ。
      • で、すべての入力を処理し、非決定的な状態遷移を終えたときに、A[i+1]の受理状態にいるならば、それはその受理状態に辿りつくためのzの部分を連結して作ったa[i+1]にて、Φ[i]がtrueである、ということなので、そのときのa1,...,aiをA[i]は受理する。それ以外は拒否する。
      • これでA[i]を構成できた。



たかが、こつこつ。されど、こつこつ。

2008年9月17日水曜日

【シプサ】6 計算可能性の理論における先進的な話題 (その2)

上半期末に向けて、業務が膨大に、、、
されど、こつこつ。
「6.2 Decidability of logical theories」から。

  • ある数学的言明(statement)が真かどうかを判定するアルゴリズムがあるかどうか、ということは、もちろんその言明が属している数学のドメインによる。判定するアルゴリズムがあるドメインもあるし、それが存在しないドメインもある。
  • このことをTMで扱うために、言語をつくる。
  • その言語に含まれる要素は、真である(ある特定された対象ドメインに属する)数学的言明の表現である。
  • 数学的言明というオブジェクトの表現方法を決める。文字列で表現するルールをきっちり定める、ということ。
  • ここで定めているのは、一階述語論理っぽい。

  • R(x1, ..., xj)のかたちのもの = atomic formula
  • 構成ルールにしたがって、atomic formulaからつくったもの = well-formed formula (単にformulaと言うときはこれ)
  • formulaで、コンティフィアが冒頭にしかないもの = prenex normal form
  • formulaで、no free variableなもの = sentence or statement

  • さて、これでformulaを整備できた。違う言葉でいうと、数学的言明を表現する方式を確立した。

  • あと、やらねばならぬことが2つ。

  • ひとつは、variableってなんじゃないな、ということ。
  • それはvariableの値になりうるのはこれこれですよということを明確にする集合があるとする。
  • その集合をUniverseと呼ぶ。
  • これを具体的に割当てる必要がある。(これが意味論?)
  • つぎに、Relationsというのは第一章で確認済みな真偽値を値とする写像なんだが、
  • この言語におけるRelationsシンボルが、どういう具体的Relationを表現しているのよということの特定。(これが意味論?)

  • で、この具体的に特定された(universe, relation assignments)の組のことを、modelと呼ぶ。
  • 逆に、あるmodelに対応したstatementの集りのことを、language of a modelと呼ぶ。
  • ここで「対応した」とは、そのmodelに適合した形(relationシンボルとrelationのarityがポイント)であるということ。
  • で、ここ、ややこしいというか用語が混乱しているように思うのだが、

    • model Mがあるとする。
    • statement Φ が 、Mに対するlanguage of a modelに属しているとする。
    • すると、Φは、Mによって、trueとなったりfalseとなったりするでしょう。(ここまではよい。)
    • あるMでΦがtrueになったとする。
    • そのとき、MはΦの a modelであるという。(ここ、ちょっと混乱している)

  • まあ、これが定義なのだからしかたなし。

  • EXAMPLE 6.10 そうか、「∀x∀y(R1(x,y)∨R1(y,x)をモデル(N,<=)で考える」というのが言語とモデルの正式な関係で、これを「∀x∀y(x<=y)∨(y<=x)を考える」といってしまうのはこのモデルを念頭においた略記にすぎないのだな。

  • で、Th(M): theory of M の定義

    • a model たる Mがあるとする。
    • すると、Mに対する複数のlanguage of a modelがあるだろう。
    • そのなかで、すべてのsentenceがtrueとなるものがあったとする。
    • それをtheory of Mと呼ぶ。


TMもずいぶん長くやっているし、「論理学をつくる」で一階述語論理まではかじっているので、すんなり。
とりあえず、ここまで。
次回は、これらについて判定可能性を調べていく。

2008年9月16日火曜日

【シプサ】6 計算可能性の理論における先進的な話題

まずは 6.1 再帰定理。このあたり、λ算法との関連性が高いような感じがする。関数という単語がたくさんでてくるし。シプサが終わったらλ算法も少し勉強したい。CLを勉強していて、lambdaとか出てくるんだけど、λ算法をさっぱり知らない、というのはどうもいけない気がする。

将来λ算法をやるときの接続ポイントになるかも、と意識しつつも、あくまでTuring機械の観点で理解すればよしとする。深掘りすると抜けられなくなりそうで。

※予告:この回、文章がかなりぐだぐだです。


  • 「自分自身を再生産する機械を作ることは可能である。」

    • これ、大事なので、原著もあたっておく。
    • 「Making machines that reproduce themselves is possible.」

  • まず、入力には関知しないで、とにかく自分自身の記述(のコピー)を出力するTMを作ることを目標にする。それをSELFと呼ぶ。
  • その準備として次の補題を確認する。
  • 「補題6.1
    wを任意の文字列とすると、q(w)がwを出力して停止するTuring機械Pwの記述であるような計算可能な関数q:Σ*->Σ*が存在する。」

    • この章に入ってから、ほにゃららなTMが存在する、ということを、ほにゃららな計算可能な関数が存在する、とかの言い回しをすることが多い。
    • さて、まず計算可能な関数qがある、という。
    • ということは、その計算を実行できるTM Qがある、ということ。
    • qはΣ* -> Σ*。
    • 入力文字列は任意。wとする。
    • 出力文字列はとあるTMの表現。どんなTMかというと、入力文字列に関わらず、とにかくwをテープに書いちゃうようなTM。これをPwと呼ぶ。
    • そうするとQは2つの部分にわけるとよさそうだ。

      • Pwを構成する。
      • 前項で構成したPwから表現をつくる。その表現を<Pw>と表記する。

    • これは、できるのか??

      • 考える便宜のためにマルチテープTMとする。
      • まず、TM Qが動き出したとき、テープにはwが書かれている。それを読んでTM Qはwを知ることができる。
      • 一般にTMの仕様は{Q,Σ,Γ,δ,q0,qaccept,qreject}で特定できる。これを文字列で表現するのは決めの問題だけ。TMはとにかく表現可能。
      • Pwの仕様概要は、「入力文字列を消去して、wをテープに書いて受理」というだけ。
      • 入力文字列の消去は、TMでできる。
      • wを書くのはどうか?
      • wが"01"だとして、計算状態でいうと、q__ -> 0r_ -> 01s というように状態と遷移関数を組めばいいだろう。
      • よって、PwなるTMは存在する。
      • なので、できる。


    • 関数qってどんなものだろ、とイメージする。wが"01"だとしたとき、上のようにwを出力するTMの表現(<Pw>)がでてくるから、かなりけったいな文字列に写像する関数なのだろう。
    • TM Qってどんなものだろ、とイメージする。これはテープに例えば"01"と書かれて動作開始すると、それを消去して前項のかなりけったいな文字列をテープに書き出して受理状態として終了するようなものだろう。


  • さて、TM SELFを構成する。

    • SELFは二つの部分から成るとする。それぞれをA,Bと呼ぶ。
    • 最初にAが動作して、終了すると制御をBにうつし、Bが動作することにする。
    • Aの仕事は、Bの記述を出力することとする。出力される表現を<B>と書く。
    • Bの仕事は、Aの記述を出力することとする。出力される表現を<A>と書く。
    • すると<A><B>と結合した文字列は、SELFを記述しきっているから、<SELF>と認定できる。
    • なので、こういうAとBを構成できれば、SELFは構成できたことになる。

    • AはPwをベースにする。
    • Aは<B>という文字列をとにかく出力するものなのだから、AはPwのwを<B>にしたP<B>であるとしてしまう。(それなら間違いなく<B>を出力する)
    • さて、上の関数qのイメージのところで"01"としたところを、<B>に読み替えてみる。
    • qによって、入力<B>に対して、<B>を出力するTMの表現がでてくる。
    • いいかえると、<A> = q(<B>) ということ。
    • ただし、P<B>を構成するには、上でみたように、<B>を(Aを構築する際にすでに)知らなければいけない。

    • では、Bはどうする。Bは具体的にTM的に構成して明示してあげなければいけない。
    • まず具体的に構成できたとして、その構成の表現を<B>とする。
    • そうするとそれはAの構成にビルドインされており、Aが動作すると<B>を出力する。
    • ところでq(<B>) = <A>なのだから、BはAのこの出力を受け取って、Q的に動けばよいことがわかる。
    • TM Bは次のとおり。
      B = 「入力<M>に対して、(MはTMの一部の表現)
      1. q(<M>)を計算する。
      2. その結果を<M>と結合してTMの完全な記述をつくる。
      3. その記述を印刷して停止する。」

  • ミソは、やはりAとBの関係q(<B>) = <A>。

  • さて、SELFが構成できた、ということはどういうことか。
  • あるTM Mを表現するTM Sがあったとすると、TM SはTM Mのことをあらかじめしっていて、かつその構成の一部にTM Mを含んでいるので、TM SのほうがTM Mよりも複雑にならざるをえない、と思われる。
  • たいていの場合はそうなのだが、SELFのように、「自分自身の構成のあり様」と「自分自身を表現する動作」ということが単体で充足している不思議な構造をもったTMも存在する、ということが言えたのだ。

  • さて、ちょっと違う観点でみると、<SELF>をTMをシミュレートする万能TMのようなものに入力すると、<SELF>を出力する。
  • これは、ここまで見てきたとおり、アプリオリではない。(print "I'm SELF")とかを考えてみれば、実感できる。
  • では、万能TMにではなくて、人間に、同じような機能をもったプログラムというか指示というかその表現を与えるとしたらどんなものがあるだろう。
  • それが、

    この文を書き写せ。

    であると。
  • 「この」という自己参照を排除したバージョンは、

    次の文を二つ書き写して、二つめの文を鉤括弧で囲め。
    「次の文を二つ書き写して、二つめの文を鉤括弧で囲め。」

    ということ。
  • SELFがわかったところで、再帰定理。
  • 「再帰定理(Recursion Theorem)
    Tを、関数t:Σ*xΣ*->Σ*を計算するTMとする。このとき、すべてのwに対して、
    r(w) = t(<R>, w)
    となる関数r:Σ*->Σ*を計算するTM R が存在する。」

  • 再帰定理の説明がわからない。ちょっとわからなさすぎる。日本語としてもわかりにくい。
  • 原著を読む。
  • う、この部分は翻訳より原著の方がはるかにわかりやすい。
  • 自分なりにわかりやすく訳す。(再帰定理の説明のところ。P262)
  • 「この定理は多少ややこしくみえるかもしれないが、実はとても簡単なことを言っているにすぎない。どういうことかというと、自分自身の表現をテープに書き出せたりそれを計算に利用できたりするようなTuring機械を構成するには、この定理にあるようなTuring機械 T を構成すればよい、ということだ。T は 入力文字列wに加えて、Turing機械の表現も入力として受け取るようにしておく。そんなTに対応して、入力文字列wに対する動作がTと同じであるTuring機械 R が存在しますよ、そしてそのときR自身の表現が(Tへの入力の一方として)内包されていますよ、というのが再帰定理が述べるところである。」
  • このまま訳書で進めていくべきかどうか迷った。ここの説明、誤訳ではないが、私には理解できない日本語だ。。。
  • せっかくここまで来たから訳書を完全にすてるのではなく、原書と両用していくことで対処することにする。
  • 再帰定理の証明は簡単。
  • 気になるのは、再帰定理が、T -> R という流れということ。一般的に利用したいのは、R -> T という事実なような気がする。
  • t:Σ*xΣ* -> Σ*、 r:Σ* -> Σ*なので、再帰定理がなりたつなら、Rに対して、Tも存在しそう(構成できそう)なので、ここはスルーする。

  • 再帰定理を認めてしまえば、残りの話は簡単だった。

    • 再帰定理を用いた、A[TM]の判定不可能性の証明。
    • 再帰定理を用いた、MIN[TM]の認識不可能性の証明。
    • 再帰定理を用いた、TMを変換するような計算可能な関数に対する不動点TMの存在証明

  • こうしてみると、TMというのは、その仕様によって、

    • TMの表現を受け取ってそれをシミュレートできること。
    • 自身の表現を得ることができること。

    の2つが成立していて、これらがTMの特質として支配的であり、他の定理を導きやすいような気がする。

ああ、こつこつじゃなくて、ぐだぐだ。
次回は、「6.2 数理論理における判定可能性」。ここは「論理学をつくる」との接続ポイントになるかも、なので楽しみ。

2008年9月15日月曜日

【シプサ】5 帰着可能性 (その12)

こつこつ。演習5.8。

  • ちょっと手を動かして考えたら、なんもかんもわかった。
  • そもそもPCPのお題を理解していなかったのだ。
  • PCPのお題は、ドミノのある意味クラスがあたえられて、それから任意個のオブジェクトとしてのドミノを使ってマッチがつくれますか、ということだったのだ。クラスは全部使わなくてもよいし、ひとつのクラスからたくさんオブジェクトを作ってもよい。どう誤解していたかというと、与えらているのがクラスではなく複製不能なオブジェクトであると思っていたのだ。

  • まず、これでPCPの判定不可能性を理解しようとしたときにもやもやしてたことが解消した。
  • 次に、演習5.3 のマッチを探す問題の意図がわかった。私のような阿呆がこのように誤解することに対するセーフティネットだったのだ。見事に突き破ってしまったが。。。

  • で、演習5.8。PCPがわかってしまえば造作もない。
  • Part 2.で追加するドミノに、それが左端だった場合のものを足せばいいのだ。
  • すなわち、Part 2.の条件化において、ドミノ[qa/rb]を足せばよい。もしそれが本当に左端だった場合は、マッチにこのドミノを使えばよい。

  • 演習5.6〜5.8の解答を見てみる。証明の記述において違いはあるが、まあ正解だった。
  • ただ、5.8の解答に「右」という単語があるが、どう考えてもこれは全部「左」の誤植/誤訳だろう。
  • 念のため原著を確認した。"leftmost"、"move left"だった。

  • 演習5.3 再度
  • マッチあり。{[aa/a], [aa/a], [b/a],[ab/abab]}でいける。

おお、これにて帰着可能性が終わった。
えらい時間がかかった。次の6章は、

  • 先進的な話題への入口
  • 第三巻を読むのに必須ではない。

とのことなので、内容次第で、楽しめるところは深掘りして、現在興味がないところは軽く流そうと思う。
ああ、シプサが進むと嬉しい。

2008年9月14日日曜日

【シプサ】5 帰着可能性 (その11)

昨日は漢字変換がおかしくなって難儀した。例えば、「癒着」とかも変換してくれなくて、だけど全部が全部変換してくれないわけではなくて、おかしな状態だった。AquaSKKが原因なのかなと、OSXを再起動したら、ましになった。でも、なんだかまだ変な感じ。辞書が壊れているのかな?
さて、こつこつ。

  • 「5.6 <=m がすいい関係をみたすことを示せ」

    • ああ、すいいが変換できなくなっている。。。とりあえず、しゅうりは後まわしにして進む。ああ、しゅうり、が変換できない。なんだかアルジャーノンのように、使える漢字がじょじょに動的にげんしょうしているような気がする。

      • だめだ。SKKがまともにうごかないと、書きながら思考、というのができない。。。
      • 調べる。。。。
      • 判った。なんと主辞書ファイルが途中でぶったぎれてた。こんなこともあるんだな。
      • SKK-JISYO.Lをダウンロードしなおして、skkを再起動。直った。
      • これでキリアン先生に愛してもらえる。



    • 推移関係とは、「あらゆるx,y,zについて、xRyかつyRzならばxRz」ということであった。
    • 写像帰着の正式な定義は、
      「計算可能な関数f:Σ*->Σ*が、任意のwに対して、
      w∈A <=> f(w)∈B
      をみたす」
      であった。
    • いま、言語A,B,Cがあり、A <=m BかつB <= Cであるとする。
    • ここで計算可能な関数f,gがあり、任意のwに対して、
      w∈A <=> f(w)∈B かつ w∈B <=> g(w)∈C
      である。
    • すると
      w∈A <=> g(f(w))∈C
      である。
    • ここでg・fは計算可能である。なぜならgのTMとfのTMを連結すれば構成できるから。■


  • 「5.7 AがTuring認識可能であり A <=m 「Aの補集合」ならば、Aが判定可能であることを示せ」

    • ある言語が、自分の補集合に写像帰着可能ってどういう感じなんだろ?
    • 写像帰着関係(の定義)は補集合演算に関して透過的だから、これは同時に、「Aの補集合」 <=m A でもある。
    • そうか、その写像によって、Aのものは必ずAの補集合に写されるし、逆もなりたつのだ。総入れ替え、みたいな状況なんだな。

    • さて、証明自体は簡単で、「Aの補集合」 <=m A から「Aの補集合」もTuring認識可能ということがわかる。自身と補集合が認識可能だから、Aは判定可能である。■


  • 「5.8 定理 5.15の証明で、Turing機械を変形してヘッドが左端からはみ出さないようにした。この変形をMに対して行わなかったとする。このケースを扱うために、PCPの構成を変更せよ」

    • う、PCPのところ、ぐだぐだになっていたので、問題文が何を言っているのかすらわからない。
    • 気分転換に例解UNIXをやってからにしよう。

【シプサ】5 帰着可能性 (その10)

そのn、のnが二桁になったのはこれがはじめてかも。
体調が再度悪化しているけど、なんとか、こつこつ。

  • 「5.5 A[TM]はE[TM]に写像帰着可能でないことを示せ。すなわち、A[TM]をE[TM]に帰着する計算可能な関数が存在しないことを示せ。」


    • まずA[TM]とE[TM]について、わかっていることを整理。


      • A[TM]は、判定不可能、認識可能。
      • E[TM]は、判定不可能。認識可能性は不明。
      • E[TM]が判定不可能であることは、帰着を用いて、A[TM]の判定不可能性から導いた。


    • とりあえず、この3つめが関係ありそう。これを考えてみる。


      • 導くにあたって、E[TM]が判定可能であるとすると、A[TM]が判定可能であるTMを構成できてしまうということで、背理法を使った。
      • ということは、帰着としては、A[TM]をE[TM]に帰着させている、ということ。
      • するとこの演習がフォーカスしているのは、やはり「写像」帰着が不可能ということ。帰着はできる、と。
      • その帰着の様を確認してみる。


        • A[TM]を判定するTM Sを構成する。
        • E[TM]を判定するTM Rが存在すると仮定する。
        • TM Sの入力は、<M,w>である。
        • まず、TM M1を、TM Mとwをつかって構成する。
        • M1 = 「入力xに対して、x != wなら拒否。x = wならば、wに対してMを動作させ、Mが受理するなら、受理する。」
        • つぎに、TM Sを、RとM1を使って構成する。
        • S = 「入力<M,w>に対して、1. TM M1を構成して、2. Rを入力<M1>にて動作させ、3. Rが受理するなら拒否し、拒否するなら受理する」


      • これは確かに、A[TM]という問題をE[TM]という問題に帰着させている。
      • さて、まず、この帰着をA[TM]からE[TM]への写像帰着にできるかどうか。
      • ああ、それが、違いますよ、っていうのがP.248の説明だ。
      • A[TM]からE[TM]への写像帰着ではなく、A[TM]から「E[TM]への補集合」への写像帰着になっている、と。
      • なんで、補集合への写像帰着でいいんだっけ?
      • ああ、そうか、集合と補集合の境界を判定できるか、というのが言語の判定可能性であり、それは境界に関することだからだ。それを集合と補集合のどちらの観点から言及しているか、というだけだから。

      • ああ、だいぶ彼らのことがわかってきた。

      • すると、A[TM]から「E[TM]の補集合」へは写像帰着可能ということが事実としてわかった。
      • とすると、「E[TM]の補集合」が認識不可能だとすると、A[TM]も認識不可能となってしまう。
      • A[TM]は認識可能なので、これは矛盾。よって、「E[TM]の補集合」は認識可能である。
      • すると、E[TM]は判定不可能だから、E[TM]は認識不可能であることがわかる。

      • A[TM]からE[TM]への帰着写像が存在するとする。
      • すると、E[TM]が認識不可能であるから、A[TM]も認識不可能ということになる。
      • これはA[TM]が認識可能という事実に反する。ゆえに仮定が間違っている。■

      • 正解かな? と答を見てみる。
      • 解答は、はるかに簡単かつスマートに証明しているが、捉えているポイントは同じだ。よかった。





早く体調を戻さねば。

2008年9月12日金曜日

【シプサ】5 帰着可能性 (その9)

うむ。吐き気がするがちょっとだけ考えてみる。正規言語と写像帰着の関係について。

  • この関係を考えるときに、「正規言語の任意の部分集合は正規言語といえるのだろうか」ということが気になっている。
  • これがいえるからといって、演習問題が解けるとは限らないのだが、なんだか気になる。
  • で、ちょっと考えてみる。
  • まず、有限集合である言語は、全て正規言語ではないか、ということ。
  • これはその有限の文字列を全て分岐して試すようなNFAを構成できるので真。
  • そうすると、部分集合が無限集合のときだけ考えればよいことになる。
  • 無限集合である正規言語を考えるとき、その無限を生み出しているのは正規表現でいうとスター演算のみであることに気付く。
  • Σ={0}, L = Σ* = {ε, 0, 00, 000, ...}として、0の個数が2^n個のものだけを取り出して言語をなしたとすると、それはどうも正規表現で書けそうにないので偽なのだろう。

  • ちょっと演習問題まで考えてみる。
  • たしか、「A <=m BでBが正規言語のときに、Aが正規言語といえるかどうか」ということだったはず。(問題を見返す元気もない。。。)
  • ここで、w∈A <=> f(w)∈B だったはず。
  • 上で見た例を適用するとどうなるか。
  • L(B) = Σ*とする。
  • L(A) = {w | wは0以外の文字を含まない文字列。ただし0の個数が2^nである。ここでnは自然数}とする。
  • fは、「文字列に0以外を含むなら、入力文字に写像。文字列が0以外を含まず長さが2^nならBの該当要素に写像。これら以外なら、1に写像」とするとする。
  • そうするとfは帰着写像になっている。
  • これはBが正規言語だが、それへの帰着写像が存在するAは正規言語ではない。
  • これで反例をしめせた。

  • 本当か?
  • 精査する余力がない。。。
  • 次回、精査することにする。

こつこつ。

2008年9月7日日曜日

【シプサ】5 帰着可能性 (その8)

こつこつ。

  • 「5.2 EQ[CFG]が補Turing認識可能であることを示せ。」

    • いろいろ考えてみた。こういう風にいろいろ考えてみるのはとても訓練になると思う。
    • で、EQ[CFG]の補集合が認識可能であることは、認識可能なTMを構成することによってできると思えてきた。
    • 大筋を書く。

      • 入力は、<G,H>。
      • 入力が不適切なら受理。
      • 入力が適切ならば、それらと等価なPDAを構成。両PDAのアルファベットの和集合をΣとする。
      • Σ*を生成する装置を構成。
      • それをGとHで動作させる。文脈自由文法は判定可能だから、かならずそれぞれ受理か拒否になる。
      • GとHとで、受理or拒否が食い違ったなら、受理とする。
      • 同じなら、次の文字を試す。

    • これによって、EQ[CFG]の補集合について、判定は不可能だが、認識は可能である。■


  • 5.3 Post対応問題の具体的な例

    • 上段と下段の文字列長の和が違うのでマッチは存在しない。
    • これ、何を意図した問題なのかな???


  • 「5.4 A <=m BかつBが正規言語ならば、Aは正規言語となるか? その理由を述べよ。」

    • これ、結構考えたが、地味に難しい。。。


次回は、5.4の続きから。

2008年9月6日土曜日

【シプサ】5 帰着可能性 (その7)

今日から演習開始。

  • 「5.1 EQ[CFG]が判定不可能であることを示せ」

    • 調査:A[CFG]とE[CFG]は判定可能。ALL[CFG]は判定不可能。計算履歴を用いた帰着で確認している。
    • 方針:EQ[CFG]とALL[CFG]との帰着にて示す。EQ[CFG]を判定可能であると仮定して、ALL[CFG]が判定可能になってしまうことを示す。
    • 証明:

      • ALL[CFG] = {<G> | GはCFGであり、L(G)=Σ*}
      • EQ[CFG] = {<G1,G2> | G1とC2はCFGであり、L(G1) = L(G2)}
      • そっか、Gを与えられたときそのPDAのΣに対して、Σ*を受理するCFG(or PDA)を構成できればいいんだ。
      • Σ自体は有限集合であり、正規言語。正規言語のクラスはスター演算に関して閉じているからΣ*も正規言語。
      • Σを生成するCFGは、一定の手順で構成できる。そのCFGからΣ*を認識するCFGも一定の手順で構成できる(演習2.16)。

      • さて、TMを記述してみる。

        • EQ[CFG]を判定するTM Mがあると仮定する。
        • TM Sを構成する。
        • Sの入力は<G>とする。
        • 動作を構成する。

          • <G>から等価なPDAを計算してΣを明確にする。(終端記号のピックアップで事足りるかも?)
          • Σを生成するCFGを構成し、それをもとにΣ*を構成するCFG G'を構成する。
          • Mに<G', G>を入力する。
          • Mが受理すれば受理し、拒否すれば拒否する。


      • これはALL[CFG]を判定するTMである。
      • ALL[CFG]は判定不可能だから矛盾が生じている。ゆえに仮定が間違っており、EQ[CFG]は判定不可能である。■



  • 「5.2 EQ[CFG]が補Turing認識可能であることを示せ」

    • 調査:

      • 補Turing認識可能って何だっけ? 調べる。「Turing認識可能な言語の補集合」だ。
      • うお。そうすると、EQ[CFG]の補集合はTuring認識可能、ということか。ちなみにそうすると、EQ[CFG]はTuring認識可能ですらないんだ。。。
      • 系5.29によると「A <=m Bのとき、AがTuring認識不可能ならBもTuring認識不可能」である。写像帰着の定義によると「A <=m B ならば、Aの補集合 <=m Bの補集合」なので、「Aの補集合 <=m Bの補集合のとき、Aの補集合がTuring認識不可能ならBの補集合もTuring認識不可能」となる。ここで、AをA[TM]、BをEQ[CFG]とすると、「A[TM]の補集合 <=m EQ[CFG]の補集合のとき、A[TM]の補集合がTuring認識不可能ならEQ[CFG]の補集合もTuring認識不可能」となる。あれ? これじゃだめじゃん。
      • 単純に、 EQ[CFG]の補集合 <=m A[TM] を示せばいいんだ。EQ[CFG] <=m A[TM]の補集合 という手もある。どちらにするか。 前者の方が簡単そうだ。

    • 方針:EQ[CFG]の補集合 <=m A[TM] を示す。
    • 証明:

      • EQ[CFG]の補集合の受理入力:<G1,G2> G1とG2は受理する言語が違う。
      • A[TM]の受理入力:<M,w>で、TM M は 入力wを受理する。
      • む、wの扱いが難しい。
      • あと、CFGとTM、というように言語クラスが違うところをどうするか。。。

      • EQ[CFG]が認識不可能であることは示せそうなんだけど。これだと逆にできる。やってみる。
      • すなわち、A[TM]の補集合 <=m EQ[CFG] を示せばよい。

      • A[TM]の補集合の受理入力:<M,w&tで、TM M は 入力wを受理しない。
      • EQ[CFG]の受理入力:<G1,G2> G1とG2は受理する言語が同じ。
      • M,wからG1,G2を構成できるか?
      • 二つのPDA D1とD2を構成する。
      • D1は全ての入力を拒否する。
      • D2は全ての入力に対して、wでMを動作させる。拒否したら拒否、受理したら受理する。
      • <D1,D2>を出力。
      • 帰着関数ができた。

      • よって、EQ[CFG]は認識不可能。帰着関係は、A[TM]の補集合 <=m EQ[CFG]。
      • あ、この帰着関係は使える? 補集合は、A[TM] <=m EQ[CFG]の補集合。だめだやはり使えない。
      • 。。。



ダメダメ。一旦頭を冷やす。

2008年9月5日金曜日

【シプサ】5 帰着可能性 (その6)

こつこつ。今回は写像帰着可能性。

  • 帰着させるという概念の細かな定義は、いくつかの流儀がある。
  • ここでは写像帰着可能性というのをやる。
  • おおざっぱにいうと、
    「写像帰着可能性を用いて問題Aを問題Bに帰着できるとは、問題Aへの入力例を問題Bへの入力例に変換する計算可能な関数が存在するということである」

    • なんとなく、わかるけど、ちょっと考えてみる。
    • 計算可能な関数が存在する、というのはTMで実施可能、ということ。
    • なので、問題Aへの入力例を問題Bへの入力例に変換できるTM hogeを構成できる、ということ。
    • 問題Aというのは、言語Aを判定できるかどうかということだとする。Bもしかり。
    • それは言語Aを判定するTM piyoを構成できるか、ということ。Bについては、そんなTM poyoを構成できるか、ということ。
    • TM hogeとTM poyoが存在するなら、この言明が成立するときは、TM piyoをTM hogeとTM poyoで構成できる。
    • よって、問題Bが解けるなら、問題Aも解けることになる。逆に問題Aが解けたって、問題Bが解けるとはいえない。
    • すなわち、問題Aより問題Bの方が難しいといえる。
    • 理解した。


  • ついに「計算可能な関数」が出てきた。
  • ここらへんがラムダ算法との接点なのかな?? ラムダ算法も学習したいなぁ。
  • 余談だが、この章、ちょこちょこ誤植(誤訳?)があるな。

  • こっから、結構タフな作業。この章のここまでの帰着に関する具体的な議論を、写像帰着性を用いて捉えなおす。こういう作業はタフ。だからこそ力になると考えて、進む。
  • 定理5.1 HALT[TM]が判定不可能であること。

    • もともとの証明は?

      • TM R がHALT[TM]を判定すると仮定する。そして、A[TM]を判定する TM S を構成してみせた。ところで、A[TM]が判定不可能なのは直接確認済みなので、矛盾が生じている。ゆえにTM Rに関する仮定が間違っている。
      • さて、ここで「構成する」ところの詳細は?
      • TM Rの入力は、<M,w>であり、wに対してMが停止するなら受理し、しないなら拒否する。
      • TM Sの入力は、<M',w'>であり、wに対してM'が受理するなら樹脂し、しないなら拒否する。
      • Sの動作:Sは、<M', w'> を受け取る。それをRに入力する(SはRをシミュレートできる)。Rが拒否するなら拒否する。受理するなら、w'をM'に入力する(SはM'をシミュレートできる)。これは必ず停止するので、結果は受理または拒否である。それぞれ受理または拒否する。

    • これはわかる。これのどこが写像帰着なのか?
    • もしかしてこれは写像帰着ではないのか?
    • ああ、単純には写像帰着ではないようだ。入力の変換について明示していないから。

    • A[TM]からHALT[TM]への写像帰着を与える帰着(関数)f

      • 入力:<M,w>。
      • 出力:<M',w>。ただし「<M',w>∈HALT[TM]のとき、かつそのときに限り、<M,w>属するA[TM]」である。

    • fによって、A[TM] <=m HALT[TM]となる。
    • 判定可能な文字列を判定可能な文字列に変換する作業なことを、あらためて認識。
    • その変換する作業というか、そのための機構のなかに2つの言語の関係性が表われている。


  • 定理 5.15 Postの対応問題

    • これはまさに写像帰着にて解いている


  • 定理 5.4 E[TM]からEQ[TM]への帰着

    • う、この証明がどんなんだったかおもいだせない。
    • 見直してみる。

      • TM R はEQ[TM]を判定すると仮定する。E[TM]を判定するTM S を構成する。
      • TM S の構成。

        • TM S の入力を<M>とする。
        • M1をすべての入力を拒否するTMとする。
        • Rに、<M, M1>を入力する。
        • ああ、簡単じゃないか。

      • 私は、「E[TM]からEQ[TM]への帰着」が何をいっているかの方がわかっていないのだ。それがわかった上で、それの解法がわからないのではなくて。
      • 考える。

        • E[TM]からEQ[TM]への帰着。

        • まず問題の帰着として考える。
        • 問題E[TM]から問題EQ[TM]への帰着。
        • これは、ざっくり言って、問題E[TM]を解くことを、問題EQ[TM]を解くことにすりかえられるということ。
        • ということは、E[TM]はEQ[TM]より(ざっくりいうと)簡単である。
        • よって、EQ[TM]が判定可能なら、E[TM]も判定可能。
        • よって、E[TM]が判定不可能なら、EQ[TM]も判定不可能。
        • とするとE[TM]が判定不可能なことはここではアプリオリなので、EQ[TM]に帰着できれば、EQ[TM]も判定不可能である。
        • E[TM]を解くことを、EQ[TM]を解くことにすりかえられるか?
        • ああ、カリー化みたいな感じだ。E[TM](M) = EQ[TM](M1,M) (ただしM1はE[TM]なTM)

        • 次に言語の帰着として考える。
        • 言語E[TM]から言語EQ[TM]への帰着。
        • f : <M> -> <M1, M>

        • 多少、わかった気になれた。



  • 定理 5.2 E[TM]は判定不可能である。
  • これの証明もぼやっとしか覚えてない。
  • 考える。

    • 判定不可能をしめしたいのだから、判定不可能だとわかっているものからE[TM]に帰着させる。
    • そこで、問題A[TM]から問題E[TM]に帰着させる。
    • これは、問題A[TM]を解くことを問題E[TM]を解くことにすりかえるということ。
    • そのためには、A[TM]を解くTM S を E[TM]を使って構成できればよい。
    • A[TM]への入力を<M,w>とする。
    • A[TM]の受理or拒否が、E[TM]の受理or拒否と一対一対応されていればよい。
    • で、E[TM]は空性検査、であると。
    • <M,w>にしたがって、<M'>をつくってそれを空性検査にかけるんだろうな。
    • で、M'が認識可能な言語は空か非空なのだが、それがA[TM]の受理or拒否に対応している、と。
    • なんとなく、受理->非空 (L(M') = {w})、 拒否->空、と算段する。
    • M'をつくる。材料は、とあるTM Mと、とある入力 w。そしてE[TM]なTM Rをどうつかうか。

      • M'の入力をw'とする。
      • w' != w なら拒否する。
      • w' = wならMをwで動作させる。Mが受理するなら、受理する。(ループと拒否は考えない)

    • <M'>でRを動作させればOK。
    • 少し、わかった気になった。

  • えっとこの証明では、<M,w>から<M'>に写像した。
  • ここで、
    (Rが<M'>を拒否 = M'の認識する言語が非空) -> (<M,w>を受理)
    (Rが<M'>を受理 = M'の認識する言語が空) -> (<M,w>を拒否)
    である。
  • なので先の写像は、E[TM]への写像ではなく、E[TM]の補集合への写像である。

最後はぐだぐだになったが、帰着可能性をなんとか読んだ。次は演習。
今日はシプサでいっぱいいっぱい。
こつこつ。

2008年9月4日木曜日

【シプサ】5 帰着可能性 (その5)

こつこつ。今日はPCP Post corespondence problem。これも字面をおっているだけではさっぱりわからない。メモをとりながら。

  • PCPを定義する。
  • PCP = {<P> | PはマッチをもつPost対応問題の入力例}

  • 証明したいこと。
  • PCPは判定不可能である。

  • 証明の方針。
  • 受理計算履歴を介したA[TM]からの帰着。
  • 任意のTM Mと入力 w を用いて、マッチがMのwに対する受理計算履歴となるように、入力例Pを構成する。
  • マッチがMとwに対する受理計算履歴となるようなP、というのが何を言っているのかわからないが、先に進む。

  • 技術的な事前手当を3つ。これは今は理解できなくてもよいとのこと。

    • Mの変更。Mにはヘッドをテープの左端からはみ出させる動作はないようにする。
    • w = ε の場合、wの場所を空白文字にする。
    • マッチが最初のドミノ[t1/b1]から開始するように、PCPの定義を変更する。これをMPCPと呼ぶ。
      MPCP = {<P> | P は最初のドミノから始まる PCP ドミノの集り }


  • 証明。

    • TM R がPCPを判定するとして、A[TM]を判定するSを、Rを使って構成する。構成できてしまったら、帰着により、Rは判定不可能と言える。
    • Sが入力対象とするMを定義する。
      M = (Q,Σ,Γ,δ,q[0],q[accept], q[reject])
    • Mがwを受理するとき、かつそのときに限り、SはマッチをもつようなPCPのドミノの集合Pを構成する。
    • 集合 Pの構成。
    • まず、MPCPの入力例 P' を構成する。


      • Part 1. 構成の開始方法。
        [#/#q0w1w2...wn#]
        を最初のドミノ[t1/b1]としてP'に加える。
      • ここで、q0w1w2...wnは受理計算状態履歴の開始状態C1である。
      • これはマッチしていない。上段をなんとかしないといけない。
      • そのために、ドミノを追加する。

      • Part 2.
      • 任意のa,b∈Γと任意のq,r∈Q、ただしq != qrejectにたいして、
        δ(q, a) = (r, b, R) ならば、[qa/br]をP'に加える。

      • Part 3.
      • 任意のa,b,c∈Γと任意のq,r∈Q、ただしq != qrejectにたいして、
        δ(q, a) = (r, b, L) ならば、[cqa/rbr]をP'に加える。

      • Part 4.
      • 任意のa∈Γに対して、
        [a/a] をP'に加える。

      • Part 5.
        [#/#]と[#/_#]をP'に追加する。( _ は空白文字)


      • Part 6.
        [a qaccept/qaccept] と [qaccept a/qaccept]をP'に追加する。

      • Part 7.
        [qaccept##/#]を追加して、マッチを完成させる。


    • ちょっとやってみる。

      step 1: part 1
      [ # / # q0 0 1 0 0 # ]

      step 2: part 2
      δ(q0, 0) = (q7, 2, R)とする。
      [ # / # q0 0 1 0 0 # ]
      [ q0 0 / 2 q7]

      結合して上下比較
      # q0 0
      # q0 0 1 0 0 # 2 q7

      step 3: part 4
      [ # / # q0 0 1 0 0 # ]
      [ q0 0 / 2 q7]
      [ 1 / 1 ], [ 0 / 0 ], [ 0 / 0 ]

      結合して上下比較
      # q0 0 1 0 0
      # q0 0 1 0 0 # 2 q7 1 0 0

      step 4: part 5
      [ # / # q0 0 1 0 0 # ]
      [ q0 0 / 2 q7]
      [ 1 / 1 ], [ 0 / 0 ], [ 0 / 0 ]
      [ # / # ], [ # / _ # ]

      結合して上下比較
      # q0 0 1 0 0 # #
      # q0 0 1 0 0 # 2 q7 1 0 0 # _ #

      step 5: part 2
      δ(q7, 1) = (q5, 0, R)とする。
      [ # / # q0 0 1 0 0 # ]
      [ q0 0 / 2 q7]
      [ 1 / 1 ], [ 0 / 0 ], [ 0 / 0 ]
      [ # / # ], [ # / _ # ]
      [ q7 1 / 0 q5]

      結合して上下比較
      # q0 0 1 0 0 # q7 1 #
      # q0 0 1 0 0 # 2 q7 1 0 0 # 0 q5 _ #

      step 6: part 4
      [ # / # q0 0 1 0 0 # ]
      [ q0 0 / 2 q7]
      [ 1 / 1 ], [ 0 / 0 ], [ 0 / 0 ]
      [ # / # ], [ # / _ # ]
      [ q7 1 / 0 q5]
      [ 2 / 2 ], [ 0 / 0 ], [ 0 / 0]

      結合して上下比較
      # q0 0 1 0 0 # 2 q7 1 0 0 #
      # q0 0 1 0 0 # 2 q7 1 0 0 # 2 0 q5 0 0 _ #

      step 7: part 5
      [ # / # q0 0 1 0 0 # ]
      [ q0 0 / 2 q7]
      [ 1 / 1 ], [ 0 / 0 ], [ 0 / 0 ]
      [ # / # ], [ # / _ # ]
      [ q7 1 / 0 q5]
      [ 2 / 2 ], [ 0 / 0 ], [ 0 / 0]
      [ # / # ], [ # / _ # ]

      結合して上下比較
      # q0 0 1 0 0 # 2 q7 1 0 0 # # #
      # q0 0 1 0 0 # 2 q7 1 0 0 # 2 0 q5 0 0 _ # # _ #


      step 8: part 3
      δ(q5, 0) = (q9, 2, L)とする。
      [ # / # q0 0 1 0 0 # ]
      [ q0 0 / 2 q7]
      [ 1 / 1 ], [ 0 / 0 ], [ 0 / 0 ]
      [ # / # ], [ # / _ # ]
      [ q7 1 / 0 q5]
      [ 2 / 2 ], [ 0 / 0 ], [ 0 / 0]
      [ # / # ], [ # / _ # ]
      [ 0 q5 0 / q9 0 2 ], [ 1 q5 0 / q9 1 2 ], [ 2 q5 0 / q9 2 2 ], [ _ q5 0 / q9 _ 2 ]


      結合して上下比較
      # q0 0 1 0 0 # 2 q7 1 0 0 # 0 q5 0# #
      # q0 0 1 0 0 # 2 q7 1 0 0 # 2 0 q5 0 0 # q9 0 2 _ # _ #

      保留:[ 1 q5 0 / q9 1 2 ], [ 2 q5 0 / q9 2 2 ], [ _ q5 0 / q9 _ 2 ]

      感じはつかめた。


こちらも最後ぐだぐだになったが、なんとなくわかった。
後日振りかえるとして先に進もう。次回は写像帰着性。

【例解UNIX】Cの復習(2):ポインタ、バイトオーダ、複雑な型 (その3)

こつこつ。可変長引数

  • tiny_printfが自分でさくさく書けたのが嬉しい。

さあ、次回は二章の章末問題。