2011年3月18日金曜日

Cookの定理 その6


布団が吹っ飛んだってね、へぇ

それでは、Cookの定理、手続き2の5回目です。

今回はちょっとクイック攻撃で攻めてみました。どんどんバレーボールのようになってきてますね。でも、つまんない?そうですか、もしかしたらもしかすると、そうかもしれません、へぇ。

さて、前回は、「こんな具合にして、NTMをSATに変換していくわけです。それには、つぎのG1~G6の様に書けます。ちなみにG1はここまで説明した段階iでマシンMの状態です。竹内外史先生の「PNP」p.13から引用しましょう。」と終わりました。コピペって楽ですね、へぇ。

では、G1~G6です。G1~G5には、下に対応するSAT形式での表現も書いておきます。G6に関しては、ちょっと説明が長くなるので、これについては、次の回にします。Q[i,k],H[i,j],S[i,j,k]に関しては、Cookの定理 その4を参考にして下さい。ちなみに、そこから引用しておくと、次のようになります。

  Q[i,k] (0ip(n), 0kr)
   i番目の処理の段階でプログラムML(=現在の処理中のNTMの
   マシンML)は、状態qkとなるブール変数
    (注:プログラムM即ちマシンMというと言うことは、
      チューリングマシンの数理モデルの回の終わりの方で
      軽く触れました)

  H[i,j] (0ip(n), -p(n)jp(n)+1
   i番目の処理の段階でヘッドはテープのj番地の場所を見ている
  S[i,j,k] (0ip(n), -p(n)jp(n)+1, 0kν
   i番目の処理の段階でテープのj番地のデータはskである


では、NTMからSATへ変換、G1~G6です。

  G1 :i番目の段階において、Mの状態qはただ一通りに定まる

      {Q[i,0],Q[i,1],……,Q[i,r]} ,0ip(n)
      {¬Q[i,j],Q[i,j’]} ,0ip(n), 0j<j’≦r


  G2 :i番目の段階において、ヘッドは、
     テープ上のただ一つだけのデータを見ている

     {H[i,-p(n)],H[i,-p(n)+1],……,H[i,p(n)+1]} ,0ip(n)
     {¬H[i,j],H[i,j’]} ,0ip(n), -p(n)j<j’p(n)+1


  G3 :i番目の段階において、テープ上の各データは、
     ただ一つだけに定まっている

     {S[i,j,0],S[i,j,1],……,S[i,j,ν]} ,0ip(n), -p(n)jp(n)+1
     {¬S[i,j,k],S[i,j,k’]} ,0ip(n), -p(n)j<p(n)+1, 0k<k’ν


  G4 :0番目の段階すなわち初めには、テープには、
     試行ヘッドによるインプットxが入っており、
     実行を始めるときである。
     (ただし、ここでは、x=sk1sk2sknとする場合)

     {Q[0,0]},{H[0,1]},{S[0,0,0]},
     {S[0,1,k1]},{S[0,2,k2]},…,{S[0,n,kn]}
     {S[0,n+1,0]},{S[0,n+2,0]},…,{S[0,p(n)+1,0]},
     {S[0,-1,0]},{S[0,-2,0]},…,{S[0,-p(n),0]}
     {S[0,j,k]}の部分を説明しておくと、
      0jnでは、xが入っており
      その他の部分は空白が入っている、
     という意味です。
      (s0=bということをCookの定理 その3の終わりの方で
       説明しています。参考にしてみて下さい)
     H[0,1]となっているのは、入力xが、
     テープの1番目から始まるためです


  G5 :p(n)番目の段階にではMqyの状態でxが受容されている

     {Q[P(n),1]}


  G6 :i番目の段階(ただし、0i<p(n))において、
     マシンMLi+1番目の状態は、
     i番目の状態からチューリングマシンの状態遷移関数δ
     によって決定される   


ということになります。

今回は以上です。次回はG6をSAT形式で表現するにはどうするかについて説明します。

それでは。

隣の客は良く柿食う客なんだってねぇ、へぇ。

Cookの定理 その5


それでは、Cookの定理、手順2の4回目です。

NTMの状態を表わすブール変数Q[i,k],H[i,j],S[i,j,k]を定義して、次のような事を書いて前回は終わったのでした。

ある段階iでマシンMの状態が決まってるとしたときつまり、i番目の処理の時、マシンMの状態がquとなるuが存在して、それは以下のような集合のSATとして表わされると言うことになります。

  {Q[i,0],Q[i,1],……,Q[i,r]} ,0ip(n)
  {¬Q[i,j],Q[i,j’]} ,0ip(n), 0j<j’≦r

それでは、まず、あたらしい朝が来た♪ええ、前回のネタ引っ張りすぎですね、はい。自分でも面白くないの分かってますから突っ込まないように。

さて、ちょっとフェイントをかけてリラックスしてもらったところで説明しましょう。上記の記述で、

  {Q[i,0],Q[i,1],……,Q[i,r]} ,0ip(n)
の部分はi番目の状態で、マシンMの状態はこのどれかである、という意味ですね。次が少し難しいかも知れません。

  {¬Q[i,j],Q[i,j’]} ,0ip(n), 0j<j’≦r

ですが、これは、意味的に同じ論理式に形を変えると次のように変形できます。

Q[i,j]∨¬Q[i,j’]=¬(Q[i,j]Q[i,j’]

上記、論理式の左側はたんにSATの形式をそのまま論理式に置き換えただけです。右側は、ド・モルガンの法則(Wikipedia:http://ja.wikipedia.org/wiki/ド・モルガンの法則)を用いた変形です。ちょっと不思議に思う人は、真理値表を自分で書いてみれば同じになることが確認できます。要するにド・モルガンの法則というのは、ごく分かりやすくいうと、「論理式の2項演算子において、ばらばらだった否定をまとめるとANDORORANDになって否定が括弧の外に出ます。また、逆もそうなります。」という法則です。すなわち、この論理式の意味は、Q[i,j]Q[i,j’]が同時にTになることはないと言うことを表わしてる、ということですね。また、ド・モルガンさんみたいに法則に自分の姓がつけられるぐらい偉くなりましょうという教訓を表わしてもいます(嘘だけどちょっとだけ本当)。

つまりは、あのi番目の処理の時、マシンMの状態はQ[i,0],Q[i,1],……,Q[i,r]のどれかで表わされて、なおかつ、その中の一つだけである、という意味ですね。

さて、こんな具合にして、NTMをSATに変換していくわけです。それには、つぎのG1~G6の様に書けます。ちなみにG1はここまで説明した段階iでマシンMの状態です。竹内外史先生の「PNP」p.13から引用しましょう。

という予定だったんですが、ここまでが思ったより長くなったのでそれは次の回で。ちょっと、切りが悪いですしね。

2011年3月17日木曜日

Cookの定理 その4



それでは、Cookの定理、手順2の続きです。

その前に、鈴木先生、根岸先生 ノーベル賞受賞おめでとうございます。先生方に力を頂いてこのブログも復活です。

さて、とぼけた持ち味でおそらくノーベル賞受賞の先生方もしかしたら読んでおられて、なおかつ、もしかしてもしかするとご好評頂いているかも知れないこのブログですが、まず、リラックスしましょう。ラジオ体操第二ぃよぉぃ。えぇ、はしゃぎすぎですね、はい。すいません。だって根岸先生、朝のTV番組で、化学は陽子と電子と中性子の組み合わせでものを考えるんだなどと仰ってたから、つい(笑い)

さて、前回、状態遷移の記述をするための準備として、SATの節がいろいろな状態やデータに1対1で対応している(節の中の各元のブール変数は原則そのうちの一つしかTの値を取らないので)ということを説明しました。今回は、NTMのいろいろな状態を表わすブール変数について説明します。

NTMの状態を表わすブール変数を以下のように定義します。


 Q[i,k] (0ip(n), 0kr)
  i番目の処理の段階でプログラムML(=現在の処理中のNTMの
  マシンMLは、状態qkとなるブール変数
   (注:プログラムM即ちマシンMというと言うことは、
     チューリングマシンの数理モデルの回の終わりの方で
     軽く触れました)

 H[i,j] (0ip(n), -p(n)jp(n)+1
  i番目の処理の段階でヘッドはテープのj番地の場所を見ている
 S[i,j,k] (0ip(n), -p(n)jp(n)+1, 0kν
  i番目の処理の段階でテープのj番地のデータはskである


こうやって状態遷移に関するブール変数をようやく導入できました。プログラムMLはこのブール変数の真理値を満たします。当たり前ですが。何が言いたいかというと、プログラムMLyesnoを出すというのは、言語Lに対する真理関数(クラスPの問題とチューリングマシン その1の決定問題の部分を参照して下さい)があるとして、その真理関数は、計算の途中で、 Q[i,k],H[i,j],S[i,j,k]に対して真理値を与えますよね、ということです。適正な真理関数はプログラムMLでの計算を満たす、すなわち、計算の途中ですべての Q[i,k],H[i,j],S[i,j,k]に対して真理値を与えるはずだよね、ということです。(この辺の話は、竹内外史先生のPNPのp.12に書かれています。というよりこの記事自体そこを参照しています)

もう一つ言っておくとプログラムMLの計算は最高でp(n)回行われます。それ以前に終わることも当然ある訳なので、その場合は、 Q[i,k],H[i,j],S[i,j,k]は答えが出たと同じ状態とします。SATに変換するための便宜上です。

では、どうやってSATにしていくのか。それは次回で。

でも、ちょっとだけ書いておくと、ある段階iでマシンMの状態が決まってるとしたときつまり、i番目の処理の時、マシンMの状態がquとなるuが存在して、それは以下のような集合のSATとして表わされると言うことになります。詳細は次回で説明しますが、とりあえず見といてね。

  {Q[i,0],Q[i,1],……,Q[i,r]} ,0ip(n)
  {¬Q[i,j],Q[i,j’]} ,0ip(n), 0j<j’≦r

これはある状態iの時に成り立つ、って事ですからね、念のため。

Cookの定理 その3

Cookの定理の手順2の続きです。あといくつ、「Cookの定理の手順2の続きです。」と書けば終わるかちょっと分からないぐらい続きそうですが。いけない、いけない。こんなこと書いちゃ読者が逃げちゃう。

さて、今度はテープの長さを考えます。いま考えているNTMのプログラムMLの入力xΣ*は、長さ|x|=nとなるとき処理回数をnの多項式で表せる、ということを前回述べました。今回、その処理回数をp(n)とすると、従ってテープの長さも+側にp(n)、-側にも同じくp(n)あれば、どちらに行っても大丈夫な気がします。あとは、初めにヘッドがある部分を確保します。これも+側に入れれば、最終的にはテープの長さは+側にp(n)+1、-側にも同じくp(n)あると考えます。図に書くとこんな感じ。



え?前回の記事ではp(n)は処理時間じゃなかったの?どうでも良いんです、そんな細かいことは。どっちみちnの多項式って意味だし。(笑い)というか、本当にそうなんですよ。比例の関係なので、O(p(n))と考えても良いですが、多項式時間という考え方は言外にその意味を含んでいるって事なんです。この分野は数学の割にはこういうところはおおらかです。元々が、多項式時間という考え方自体がおおざっぱと言えばおおざっぱですからね。

さて、こういう準備をしておいて、状態遷移を考えるための準備をします。

まず、状態Qについてのブール変数を定義しておきましょう。

 Q:チューリングマシンの状態。有限集合。 
   状態q0を特に初期状態という。 
   数学的な書き方をすれば、 
      q0Q(元q0は集合Qに属すると読む) 
と、以前数理モデル(NTMの数理モデルとクラスPNPの違い)のところで定義しました。

状態Qの元のブール変数を改めて次のように定義します。

   q0,q1=qy,q2=qn,q3,…,qr
    r=|Q|-1

つまり状態Qは次のようなブール変数で状態を定義されているということですね。

   Q={q0,q1,,…,qr}
qy,qnはそれぞれ、NTMがyesnoを返したときの状態Qの値で定数です。SATがベースですからここがq1=qy,となっていれば、状態Qyesの状態、q2=qnとなっていれば状態Qnoの状態です。同時には満たされないのは、暗黙の約束です。当たり前ですが。

ついでに、データΓについても同様に定義しておきましょう。

  Γ:テープにあるデータ。Σに空白記号を加えたもの。有限 
というのが定義でしたね。

同じようにデータΓの元をブール変数で以下のように定義します。

   s0=b,s1,…,sν
    ν=|Γ|-1
s0=bbは空白(blank)を表わしています。

状態Qと同様にデータΓも以下のような集合で表わされる、ということになります。
   Γ={s0,s1,…,sν}
つまり、すべてのデータに対して1対1で対応するブール変数があり、添え字がそのデータを示すという意味になります。0は特別に空白というわけです。

なかなか、見慣れない考え方ですけど、とにかくこうやるったらこうやるんです(>_<)。なれて下さいね。

2011年3月16日水曜日

Cookの定理 その2


Cookの定理の証明の手順2.の説明をここからは行います。今日は本当にまじめに話します。私だっていっぱいいっぱいなんです><

手順2. NTM完全にランダムな入力をTMで処理するという部分が
     多項式時間内でSATに変換できる

でした。


そういうわけで、まず、クラスNPの言語Lとそれを処理するプログラムMLがあったとして、これに用いられる記号は、いつぞやのNTMの数理モデルの回(NTMの数理モデルとクラスPとNPの違い)で説明したモデルがあるとします。MLは当然、定義からして多項式時間で処理されます。(多項式時間以内でyesという答えを出すというのが定義でしたよね。)

NP完全とその数学的定義 その1の回でこういうのを書いたの覚えてますか?


「ここからは、竹内外史先生の「PNPp.8−9を引用します。そちらの方が読者も安心でしょうからね(笑い)
さて、まずL1からL2への変換する関数fの数学的表現としては、
 f 1*Σ2*
で表わします。そして、これが成立する条件として、次のように定めます。
 1. f を計算する多項式時間のTMのプログラムがあるとする
 2. すべてのxΣ1*について、
     xL1  iff  f(x)L2
   ここでA iff B ‘ABとが同等であると言うことを表わす
   iff if and only if の略である
とあります。」


この考え方を用いると、NTMをSATへというこの証明の部分は、このNTMで処理される入力文字列の集合をΣ*としたとき、多項式変換関数fLは入力xΣ*のすべてのxについて、

    xL iff fL(x)SAT
という関数があるかどうかだと考えられます。

かなり内容が難しくなってきましたね。そういうわけで、今回は、あと一つだけ、処理回数の定義をして終わりたいと思います。

いま考えているNTMの入力xΣ*を処理する回数は、入力xの長さをn(これを絶対値の記号を使い|x|=nと書いたりもします)としたときに、上記のように多項式時間で処理されると言うことが前提ですから、処理時間と処理回数は元々TMの定義から比例の関係にあるので、つまりは処理回数も処理時間もnの多項式となります。

そこで、一般的に入力xの長さをnとしたときのNTMがyesという答えを出すときの処理時間の多項式をp(n)という具合に表現します。定義からしてTMがyesというときの答えを出す時間も同等ですよね。

そうすると、プログラムMLを処理する時間Tはこれもnの関数になり、表現はTML(n)と表せます。

つまりは、TML(n)は、適当なnの多項式p(n)に対して

   TML(n)p(n)
が成立するということになりますよね。

Cookの定理 その1


では、Cookの定理を説明しましょう。 

ピタゴラスの定理は知ってますか?

Cookの定理じゃなかったの?と思いになったあなたは正解です。しかし、まず、定理に名前がつくということを説明したいのです。

ピタゴラスの定理は、別名三平方の定理とも言って、直角三角形においては、

(長辺の長さの二乗)=(短辺の長さの二乗)+(もう一つの短辺の長さの二乗)

ということでした。

ピタゴラスはWikipedia(http://ja.wikipedia.org/wiki/ピタゴラス)によると、生没年は、紀元前582年 - 紀元前496年ですから、約2500年ぐらい前にこの定理を発見したわけですね。それが現代にまで受け継がれ、これからずっとおそらく人類の文明が続く限りピタゴラスの名前は定理として残るわけです。

つまり、それくらい定理に名前がつくというのはすごいことなんですね。

Cookの定理も、Cook先生(Wikipedia:http://ja.wikipedia.org/wiki/スティーブン・クック)が発見した定理で、これも人類が続く限り永遠に受け継がれていくことでしょう。

では、Cookの定理です

【Cookの定理】

  SAT(充足問題)はNP完全である。


[証明のあらすじ]

まず、証明のあらすじを述べます。


NP完全であるという定義は、 

  1.LNP (言語LがクラスNPに属する)
  2.すべてのクラスNPに属する言語L’について
     L’


そこでまず、

手順1. SATがクラスNPである

と言うことを証明します。つぎに、


手順2. NTM完全にランダムな入力をTMで処理するという部分が
     多項式時間内でSATに変換できる

ということを証明します。


おっほん。 

では証明に入りますが、その前に、簡単に手順を説明します。証明は数回に分けて説明しますが、今回は、手順1 を説明します。後の、手順2 は、ほぼ機械的な作業です。例によって例のごとく数学ですから厳密にきちんと説明します。やれやれですね(笑い)


手順1SATがクラスNPであることは、意外と簡単ですので、自分で考えてみようという方は、今回の証明の部分を見ないようにして下さいね。




[証明]

手順1.SATがクラスNPである


SATがクラスNPであることは以下のように考えるとわかります。 

まず、m個のブール変数集合U上の節集合CがありCr個の節を持っているとします。 

節集合Cを充足する、という問題をここではSATとしましょう。 

ところで、節集合Cを充足するためのリテラルの組を探すためのプログラムMTM上の計算時間はどれくらいでしょう。 

ブール変数の取りうる値はT,F2値。これがm個あるので2m個掛け合わせた数、つまり、O2m)の時間が最大で時間がかかります。解がない、つまりSATnoの場合もあるから、最悪の場合、総当たりの必要があるのです。 

しかし、このSATyesとするリテラルの組がたまたま入力されていたとすると、TMで節集合Cを充足することがわかるためにかかる時間は最大でリテラルの数すなわち集合Uのブール変数の数m2倍に、節集合Cの節の数rをかけた数、オーダーで言えばOmr)ですから多項式時間で解けることがわかります。 

したがって、SATはクラスNPであるということが示されました。

(手順1終わり)



次回は、いよいよ本格的にCookの定理を説明し、そのことで、SATNP完全であるということ示します。敢然に完全に(となればいいなぁ。とほほ )!

2011年3月15日火曜日

充足問題 その3



さて、ようやくSATを説明する準備ができました。SATだけにさっと説明しましょう。

【充足問題(SAT)
   いま、Uをブール変数の集合とします。
   かつ、集合CU上の節の有限集合。
   このとき、Cを充足する真理関数が
   存在するかどうかを決定する問題を
   充足問題(SATと言います。
   SATの結果はyesnoで表わされます。


例を竹内外史先生の同じく「PNPp.11から挙げましょう。竹内先生の例は難しいですが解くと大変役に立ちます。解説はその下に書きますので、自分で解こうと思う方は読まないようにして下さい。


 例
  ブール変数の集合Uがいま、U={u1,u2}で表せるとき
  C={{u1,¬u2}{¬u1,u2}}とすればCの充足問題はyesである。
  すなわちt(u1)=t(u2)=Tまたはt(¬u1)=t(¬u2)=Tのとき。
  しかし、C={{u1,u2}{¬u1},{¬u2}}ならばCの充足問題は
   noである




 解説
  真理関数は、すべての節のどれかの元を満たす
  必要があります。
  
  節を、論理記号に展開して真理値表というもの
  を書いてみると分かりやすいと思います。

  真理値表というのは、例を挙げれば簡単で
  論理和の真理値表は、論理和が項を2つ持つ
  演算であるからその項のすべての値の
  組み合わせと、結果を表にしたものです。

     



  これだとABの値がFになるのはA=B=Fの時のみ
  というのが一目で分かりますね

  言い方を変えれば節の集合{{A,B}}を
  充足するような真理関数tは、
  
   t(A)=T,t(B)=T

  の2つがありますね。

  真理関数は節の中のいずれかの元でTになれば
  いいのでした。そして、いま節集合の元は1つ
  ですから、これで十分です。

  では、上記の例について考えてみましょう

a) C={{u1u2}{¬u1,u2}}の場合
 (u1¬u2)(¬u1u2)と同じ意味ですから、
   この論理式の真理値表を書いてみると、

     
  

   従って、節集合C={{u1,¬u2}{¬u1,u2}}
   充足する真理関数は、
   
         t(u1)=t(u2)=T, t(¬u1)=t(¬u2)=T

   の二つがあります。なんか、変な感じですが、
   真理関数は、節の元のうち一つのリテラルしか
   対応しないのでこうなると思って下さい。
  
  従って、SATとしては、yesが結果となります。 


b) C={{u1,u2}{¬u1},{¬u2}}の場合
 (u1u2)¬u1¬u2と同じ意味ですから、
   この論理式の真理値表を書いてみると、
          というか、見るまでもなくなのですが、
   一応書いてみると、

      
   

   となります
 
   したがって、節集合C={{u1,u2}{¬u1},{¬u2}}
   充足する真理関数はなく、SATの答えはno
   となります。

結局、SATは、節集合を論理式として表わしたときにTとなるようなリテラルの組があるかどうか、という問題に表せるようですね。それならそうと言えば、それこそさっと済むものなのに(笑い)