計算論 講義ノート 夜久竹夫 原    筆 : 大塚秋枝       ワープロ入力 : 今井一昭                      大久保雅司         大ミ寛子                     奥山敏昭                     野口竜一                     南 和子                     ニ田賢一     ワープロ編集 : 倉谷遣一 1986.9.24 【目次】 《前期》 0.計算論‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ ( 1) 1.準備と用語‥‥‥‥‥‥‥‥‥‥‥‥‥ ( 4) 2.計算可能性序論‥‥‥‥‥‥‥‥‥‥‥ ( 5) 3.計算可能関数‥‥‥‥‥‥‥‥‥‥‥‥ (11) 4.手続きのコード化と万能手続き‥‥‥‥ (17) 5.関数の分類と"停止問題"‥‥‥‥‥‥‥ (23)   《後期》  6.帰納的関数族‥‥‥‥‥‥‥‥‥‥‥‥ (29) 7.Turing automaton‥‥ (41) 8.帰納的集合族‥‥‥‥‥‥‥‥‥‥‥‥ (48) 練習問題‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ (52) 0.計算論  −広い意味−     オートマトン理論     言語理論    ★計算可能性の理論    ★計算量の理論    ★計算モデルの理論     プログラムの理論      アルゴリズム ← 計算機数学と同じ意味  ョ「「イョ「「「「「「「「「「「「「「イ  、目的、、計算機とプログラムの基礎理論、 カ「「コカ「「「「「「「「「「「「「「コ ョ「「「「「「「「「「「「「「「「「「「「イ   、        計算機数学     、   、                    、   、              、   ョ「「゙「「「イ ョ「「「「「「「「「イョ「「「゙「「イ   、 、  、 、 、、 、  、   、 、 計 、 、  プログラムの 、、 オ 、  、   、 、 算 、 、     理論 、、 | 、  、   、 、 可 、 、    計算量 、、 ト 、 代 、     、 基 、 能 、 、  アルゴリズム 、、 マ 、 数 、   、 礎 、 性 、 、     、、 ト 、 学 、   、 論 、  、 、    、、 ン 、 群 、   、 、   、 、         、、 、  、   、 カ「「「゙「゙「「「「「「「「「゙゙「「「コ  、   、  、 、    、、 、 カ「「「「「「コ 、 プログラム技術 、カ「「「「「「コ    、       、 カ「「「「「「「「「コ −狭い意味−     上の★印 【注】  ョ「「「「「「「「「「「「「「「「「「「「イ   、 、 (関数)  、  計算不可能 、 問題の全体  、 ョ「「「「「「「「「「イ    、   、  、 、 、   、←「「コ   、 、 計算可能 、   、      、 、 、 計算量∞ 、      、 、 、←「「「「→ 、      、 、  計算量理論 、   、      、 、 ×←「「「「「→、   、      、 、 、 、   、      、 、 カ「「「「「「←、→「「「「「「ニ      、 、 計算量ゼロ 、 計算可能理論 、      、 カ「「「「「「「「「「コ    、      カ「「「「「「「「「「「「「「「「「「「「コ       ”計算量”は距離に当たる 測り方を決めたり比較するのが ョ「「「「「「イ 、計算モデル論、 カ「「「「「「コ ☆ 2つのプログラムpとqが等しいか / 0 (p=q) f(p、q)=、  \1 (p≠q) 前期 計算可能性 @ ☆の計算不可能性の証明 [計算論の基本定理] (計算機数学) A 帰納関数 後期 プログラムの理論 計算量 計算モデル 参考書 細井 勉   計算の基礎理論    エンゲラ−  計算の理論入門、日本コンピュ−タ協会 §1.準備と用語 自然数 :0、1、2、‥‥‥    直積集合: 2つの集合A,Bがあるとき、A,Bから、それぞれ任意の         要素a,bをとって作った順序対(a,b)のすべてを要素とす         る集合、即ち、(a1b1),(a1b2)……(a2b1)……(anbn) のすべてを要素とする集合をA,Bの直積といい A×Bで表す つまり、A×B={(a,b)|a「A,b「B} 不確定写像:多価関数→値を2つ以上持っている    アルファベット:記号の有限集合、例えば {a1,a2,a3,…,an}=Σ {A,B,…,Z,a,…} word:Σの元の有限列 w=b1b2…bi    wの長さ:|w|=i(上)   wがnull string (empty word) def εと書く ←−→|w|=0 ョ「「「イ 、 記法 、 カ「「「コ def Σ0==={ε}  長さをもっていない集合 def Σi==={b1,b2,…,bi;bk「Σ,1≦k≦i}(i≧1) def Σ*=== U Σi        i=0 Σ*の部分集合を language という。 【例】Σ={0,1}とする Σ0={ε} Σ1={0,1}       Σ2={00,01,10,11} Σ*={ε,0,1,00,01,10,11,000,……} 【例】Σ={0,1,…,9,A,…,Z,+,−,…}としたとき FORTRAN語は、Σ*の部分集合 §2.計算可能性序論  はじめに   数論的関数    f:Nk→N   の計算可能性   ョ「「「「「「「イ  、数論的関数全体、   、 、  、ョ「「「「イ 、  、、計算可能、 、  、カ「「「「コ 、  カ「「「「「「「コ   ここでは操作列型プログラミング言語(アセンブラ語,FORTRANに  即した仮想プログラミングシステムを考え、その上で、計算可能性を定める。   操作列型プログラミング言語は、    ・ 関数型プログラミング言語(LISP)    ・ 述語論理型プログラミング言語(Prorog)    ・ オートマトン    ・ 帰納関数   と一致する。 ョ「「「「「「「「「「「「イ 、手続きProcedure、   カ「「「「「「「「「「「「コ   概要  つぎの様なシステムを考える。  ョ「「「「イプログラム 、手続き 、   、ファイル、  カ「「「「コ  ョ「「「「イメモリー 、 データ 、 データファイルは分割されていて各場所0、1、2……にはN 、ファイル、の元が入る。 カ「「「「コ データファイルの”様相”はC:N→N ”手続き”  ”様相の変化”  これらを手がかりとして計算可能性をもとめる。  つぎに手続きを定める。帰納的に以下で   i「N ({0、1、2、3、4、5、6、7、8、9}*) ョ「「「「「イ 、定義2.1、 (手続きの形式) カ「「「「「コ (T)base 次の基本操作(代入文)は手続き     a. ゼロクリアー        形式  Si:=0;        意味  Siの値を0            i番地の内容を0          ョ「「「イ ョ「「「「イ セ「「「ニ    セ「「「「ニ S5 、10 、  →  、 0 、 S5:=0; セ「「「ニ セ「「「「ニ 、 、 、 、 、   、 、    、     b. 代入     形式  Si:=Sj;        意味  Siの内容をSjの内容 ョ「「「「イ ョ「「「「イ S0、 100 、 、 、 セ「「「「ニS5:=S0;、 、 、 、   、 、 、 、 → 、 、 セ「「「「ニ  セ「「「「ニ S5、 0 、 、 100、 セ「「「「ニ  セ「「「「ニ 、    、 、    、 c. 後者関数  Successor   形式  Si:=suc(sj);        意味  Si:=Sj+1;          ョ「「「「イ ョ「「「「イ 、 100 、      、 、 セ「「「「ニ        セ「「「「ニ 、 、   、 、 、 、 → 、 、 、 、 、 、 セ「「「「ニ セ「「「「ニ 、 0 、 、 101、 セ「「「「ニ セ「「「「ニ 、 、 、 、 S5:=suc(S0);     d. 前者関数  Predcesser 形式  Si:=pred(Sj);        意味  Si:=Sj−1;        ただし pred(0)=0             つまり 0−1=0   (U) induction         p,qが手続き→以下の形の文は手続き    e 分岐文 if si=0 then p else q endif; f 変数回繰り返し文        for i in 1..pred k(Si)         loop p end loop; g 有界でない繰り返し文 while Si≠0 loop p end loop;     h 連接 pq また、k個のpの連接をpkまたは      for i in 1 ..k loop p end loop;   と略記することもある。     手続き全体をPと書く。 例2.1 手続きの例 P2.1     S1:=pred(S1);\h     S1:=pred(S1);/  \h    S0:=S1; /   (注)S0←S1−2 informal 例2.2    P2.2     S0:=S2; \h     for i in 1 .. pred0(S1)\  /       loop   、f         S0:=suc(S0);    、    end loop;   / (注)S0←S1+S2 informal ョ「「「「「「「「イ  、手続きによる計算、  カ「「「「「「「「コ  Procedure Semanticsの定義   計算演算子 apply:c×p→cを導入         apply(c,p)をc・p         (c・p)・qをc・p・qとかく。   (定義2.2)      以下で定められる演算子applyを計算演算子という。   1. 基本演算子の適用 c「C  i,j「N     a c・(Si:=0;)(S)       /0    (S=Si) =、   \c(S) (S≠Si) b c・(Si:=Sj;)(S)       /c(Sj) (S=Si)  =、          \c(S)  (S≠Si)     c c・(Si:=suc(Sj)     /c(Sj)+1 (S=Si) =、           \c(S)    (S≠Si) d c・(Si:=pred(Sj)           /c(Sj)−1 (S=Si) =、     \c(S)   (S≠Si) また、c・ε=cとさだめる。    2. 制御文の適用     e 分岐文 def /c・p (c(Si)=0)       c・(Si=0)(p怩早j==、                       \c・q (c(Si)≠0)    f 整数回繰り返し文 def /(c・p)・pSi-k-1 (c(Si)−k≧1)       c・pSiーk ==、    \ c・ε; (c(Si)−k=0)     g 有回でないくり返し文 def /c・p・p*(Si≠0) (c(Si)≠0)       c・p*(Si≠0)==、                 \c・ε; (c(Si)=0)     h 連接 def        c・pq=(c・p)・q ↑     ↑ 連接   連接の消去 §3.計算可能関数       計算可能性を定義する。 ョ「「「「「イ  、定義3.1 、 カ「「「「「コ        関数f(x1,x2,………,xn)=yが手続きPにより計算される。 ↑ |def     ↓ 様相C=     、      「「「「゙「「「「 S0 、 0            S1 、 x1            :  、 :            Sn 、 xn           Sn+1、 0            :  、 :               、         に対して   C o P=    、      「「「「゙「「「「「 S0 、 y    S1 、何でもよい :  、       、        (準備)  @ P(x1,……,xn)=y ↑        | 記法     ↓        C o P(S0)=y ただし 、 C o P 、 C= 「「「「゙「「「「  「「「「゙「「「「  S0 、 0 S0 、 y S1 、 x1 −→……−→ : 、 : S2 、 x2 P 、 : 、 : 、 Sn 、 xn : 、 : 、 def  A P(c)=== C o P ョ「「「「「イ  、定義3.2 、 カ「「「「「コ    関数fが全域計算可能  totally computable def ←−→  1. fが全域的 2. fを計算する手続きPが存在 ョ「「「「「イ  、定義3.3 、 カ「「「「「コ    関数fが部分計算可能  (準計算可能)     def    ←−→ 次のような手続きPが存在        f(x1,……,xn)=y ←→P(x1,……,xn)=y f(x1,……,xn)が定義されない               ←→ P(x1,……,xn)が定義されない (停止しない)  【例3.1】   問 C=    、     「「「「゙「「「「 S0 、 0          S1 、 5          S2 、 0          :  、 :             、    とする。 このとき  C o P2.1を求めよ。     ただし、P2.1は、例2.1の手続き。     解 T.制御文(連接)を消去 〔・連接〕     <注> co(S1:=pred(S1);・S1:=pred(S1);・S0:=S1;)        =(co S1:=pred(S1))o(S1:=pred(S1);・S0:=S1;) Def2.2h          カ「「「「「「「コ        C1        =((co S1:=pred(S1))o(S1:=pred(S1))o S0:=S1; …(2)           カ「「「「「「「「「「「「「コ 、 Def2.2h     C2           、         カ「「「「「「「「「「「コ      C3                 (3行目は連接になっていない)    U.計算       C  、             C1  、     「「「「゙「「「「 S1:=pred(S1) 「「「「゙「「「「       S0 、 0 「「「「「→ S0 、 0   S1 、 5   Def2.2d     S1 、 4   、 、                            C2  、     S1:=pred(S1) 「「「「゙「「「「 「「「「「→ S0 、 0   Def2.2d S1 、 3      、     、                 S0:=S1    「「「「゙「「「「   「「「「「→ S0 、 3                  Def2.2b    S1 、 3      V (2)=c2 o S0:=S1; C3=      、      Def2.2b    「「「「゙「「「「     (=C3とおく) S0 、 3   S1 、 3               S2 、 0     :  、 :    、     ∴ 上のC3が解。  例3.2   問 C=    、     「「「「゙「「「「        S0 、 0          S1 、 5          S2 、 3             、 とする。このとき C o P2.2を求めよ。     ただし、P2.2は、例2.2の手続き  解 T.        co(S0:=S2;・for i in 1..pred0(S1) loop S0 := suc(S0) end loop;)  =(co S0:=S2;)o for i in 1..pred0(S1) loop S0 := suc(S0) end loop; …(1) ここで  、     co S0:=S2; =  「「「「゙「「「「  = C1とおく   S0 、 3        S1 、 5   S2 、 3    、        U (1)=c1o for i in 1..pred0(S1)      loop S0:=suc(S0) end loop; =(c1o S0:=suc(S0);)o for i in 1..pred1(S1)        loop S0:=suc(S0) end loop; …(2) Def2.2fより         ここで 、            c1o S0:=suc(S0); = 「「「「゙「「「「 = C2                 S0 、 4                       S1 、 5                       S2 、 3                          、        V (2)=c2o for i in 1..pred1(S1)      loop S0:=suc(S0) end loop;   =(c2o S0:=suc(S0);)o for i in 1..pred2(S1)    loop S0:=suc(S0) end loop; …(3)        Def2.2fより    ここで 、        c2o S0:=suc(S0); = 「「「「゙「「「「 = C3 S0 、 5 S1 、 5 S2 、 3 、    W (3)=c3o for i in 1..pred2(S1)      loop S0:=suc(S0) end loop;        =(c3o S0:=suc(S0);)o for i in 1..pred3(S1)     loop S0:=suc(S0) end loop; …(4)       Def2.2fより         ここで  、        c3o S0:=suc(S0); = 「「「「゙「「「「 = C4 S0 、 6 S1 、 5 S2 、 3 、   X (4)=c4o for i in 1..pred3(S1)     loop S0:=suc(S0) end loop; =(c4o S0:=suc(S0);)o for i in 1..pred4(S1) loop S0:=suc(S0) end loop; …(5) Def2.2fより    ここで 、        c4o S0:=suc(S0); = 「「「「゙「「「「 = C5 S0 、 7 S1 、 5 S2 、 3 、    Y (5)=c5o for i in 1..pred4(S1)     loop S0:=suc(S0) end loop; =(c5o S0:=suc(S0);)o for i in 1..pred5(S1) loop S0:=suc(S0) end loop; …(6) Def2.2fより    ここで 、        c5o S0:=suc(S0); 「「「「゙「「「「 = C6 S0 、 8 S1 、 5 S2 、 3 、   Z (6)=c6o for i in 1..pred5(S1)      loop S0:=suc(S0) end loop;       =c6o ε =c6   ョ「定理3.1 「「「「「「「「「「「「「「「「「「「「「「「イ     、 、  、 関数f:N → N と g:N → N が計算可能 、  、 、  、    −→ h=f o g は計算可能 、  カ「「「「「「「「「「「「「「「「「「「「「「「「「「「「「コ   【証明】    f,gを計算する手続きを、p,qとする。    rとして、pのあとで、S0の値を″入力″してqを行う手続きを考える。   このとき、rはhを計算する。 §4.手続きのコード化と万能手続き    コード化: {手続き}←→ N  (1対1の対応がある。)    万能手続き: コンパイラ   汎用コンピュータ ョ「「「「「「「「イ  、手続きのコード化、 カ「「「「「「「「コ  ″Godel numbering ″ N ←「「「「「「「「「「「 手続き      写像 prime : N「→N を次のように定める。 def         prime(n)= m ←「→ m は n 番目の素数                    ただし、prime(0)=1 prime(1)=2  ョ「「イ  、定義、  カ「「コ      ゲーデル数 Godel number は、以下で定められる写像       gn : 手続き全体 −→ N      である。gn(p)=n のとき、nはpのゲーデル数であるという。    T.pが基本手続きの場合      a. p= "Si := 0 ;"→ gn(p)= 2prime(i)      b. p= "Si := Sj ;"→ gn(p)= 32^prime(i)*3^prime(j)     c. p= "Si := Suc(Sj);"             →gn(p)= 52^prime(i)*3^prime(j)      d. p= "Si := pred(Sj);"             →gn(p)= 72^prime(i)*3^prime(j)    U.pが制御文の場合      e. p= "if Si=0 then r else s end if ;"             →gn(p)= 112^prime(i)*3^gn(r)*5^gn(s)      f. p= "for i in 1..pred k (Si)loop q end loop ;"             →gn(p)= 132^prime(i)*3^prime(k)*5^gn(q)      g. p= "while Si≠0 loop q end loop ;"             →gn(p)=172^prime(i)*3^gn(q)      h. p=P1 P2 ォ Pn  (n≧2)         →gn(p)=2gn(p1)×3gn(p2)×ォ×prime(n)gn(pn)      ここで、各piは基本手続き、分岐、変数回繰り返し、有界でない     繰り返しのいずれかとする。 ョ「「「「「「「イ 、 gn の求め方 、 カ「「「「「「「コ      (例) p= S0 :=0;    for i in 1..S1 loop    S0 := Suc(So) end loop ;        とする。このとき、gn(p)を求めよ。    (解)gn(p)=2gn(S0:=0 ;)    ×3gn(for i in 1..pred 0 (S1) loop S0:=Suc(S0)        end loop ;) =22^1×313^(2^2・3^1・5^(5^(2^1・3^1)))        注 for i in 1..S1 は、for i in 1..pred0(S1) を表す。    (T)p2.1のゲーデル数は?      gn(p)=2gn(S1:=pred(S1);)×3gn(S1:=pred(S1);)                            ×5gn(S0:=S1;)   =27^(2^2*3^2)×37^(2^2*3^2)×53^(2^1*3^2) (U)p2.2のゲーデル数は?       gn(p)=2gn(S0:=S2;)×3gn(for i in 1..pred 0 (S1)    loop S0:=Suc(S0) end loop ;)            =23^(2^1*3^3)×313^(2^2*3^2*5^gn(S0:=suc(S0);))   =23^(2^1*3^3)×313^(2^2*3^1*5^(2^1*3^1)  ョ「定理4.1 「「「「「「「「「「「「「「「「「「「「「「「イ     、 、    、 手続きの全体PからNの中への1対1写像が存在する。 、    カ「「「「「「「「「「「「「「「「「「「「「「「「「「「「「コ    【証明】      上のgnを考えればよい。  ョ「定理4.2 「「「「「「「「「「「「「「「「「「「「「「「イ      、                   、      、  次の手続きPが存在する。 、     、  n「Nに対して、 、     、      0(nをゲーデル数として持つ手続きが存在しな、     、   P(n)=   い)、     、 1(その他) 、     カ「「「「「「「「「「「「「「「「「「「「「「「「「「「「「コ     ョ「「イ  、定義、 カ「「コ    様相のゲーデル数      様相C: 、 「「「「「「゙「「「「「「 S0 、 Y0 S1 、 Y1 . 、 . . 、 . 、 Sn 、 Yn Sn+1 、 0 . 、 . . 、 . 、 を考える。このとき      gn(C)= 2prime(y0)×3prime(y1)×                   ォ×prime(n+1)prime(yn)       ただし C(Sx)=0 ( x>n)とする。   ョ「定理4.3「「「「「「「「「「「「「「「「「「「「「「「イ      、 、    、 様相の全体CからNの中への1対1対応が存在する。 、    カ「「「「「「「「「「「「「「「「「「「「「「「「「「「「「コ     ョ「「「「「「「「「「「「イ  、手続きの枚挙と万能手続き、 カ「「「「「「「「「「「「コ 次の写像を考える     gninv:N−−→手続きの全体     ただし /P (gn(p)=nのとき)     gninv(n)=| \ε (gn(p)=nとなるpが存在しない。)    gninv を逆ゲーデルコードという。    ゲーデル数の小さい順に手続きを並べたものを        (P1,P2,P3,‥‥)     とすると、     {P1,P2,‥‥‥‥}=手続き全体    である。    P1,P2,‥‥を手続きの枚挙という。(enumration 数え上げ) ョ「「イ 、定義、 カ「「コ    次の手続きUを "1変数の万能手続き(universal procedure)" という: def       U(n,x)=Y ←「→ Pn(x)=Y   ョ「定理4.4 「「「「「「「「「「「「「「「「「「「「「「「イ     、 、    、  1変数の万能手続きは存在する。 、    、 m変数万能手続きについても同様。 、    カ「「「「「「「「「「「「「「「「「「「「「「「「「「「「「コ    【証明】     U(n,x)はつぎの形       Pn(x)をシミュレートすればよい。即ち、        C0    、        C    、          「「「「゙「「「「  「「「「゙「「「「「「  S0 、 S0 、 Pn(x) S1 、 x −−→ S1 、  . 、 . 、  . 、 . 、  . 、 、  をシミュレートする。     Uは全体として以下のように動けば良い。 、 、        「「「「゙「「「「 「「「「゙「「「「「「 S0 、 S0 、 S1 、 n S1 、 n S2 、 x  −−→ S2 、 、 S3 、 gn(pn) 、  S4 、 gn(C0) 、 、 、 「「「「゙「「「「「「 S0 、 S1 、 n −−→ S2 、 S3 、 gn(pn) S4 、 gn(C) 、 、 、 、 「「「「゙「「「「「「 S0 、 pn(x) −−→ 、 、 、 、 §6.関数の分類と“停止問題” ョ「「「「「「「イ    停止問題:、計算可能でない、関数の例 カ「「「「「「「コ  【準備】 ョ「「「「「「「イ 、停止性識別写像、h:{手続きコード}×{データ}→{0,1} カ「「「「「「「コ ↑ ↑ ゲーデル数 N(数値)                    /0(gn(p)=nがdの上で      defined by h(n,d)=|    停止しない)                    \1(その他) ョ「イ 、p、 カ「コ→ョ「イ 、h、→0,1 n →カ「コ  ョ「定理6.1 「「「「「「「「「「「「「「「「「「「「「「「イ 、 、 、                、  、  上のhは計算可能でない。hは部分計算可能である。 、 カ「「「「「「「「「「「「「「「「「「「「「「「「「「「「「コ ↑ ョ「「「「「「「「「「「「「「「イ    、手続きの停止問題の非可解性定理、  カ「「「「「「「「「「「「「「「コ ‖ 同値 ョ「「「「「「「「「「「「「「「「「「「「「「「「「「イ    、Turing Machineの停止問題の非可解性定理、 カ「「「「「「「「「「「「「「「「「「「「「「「「「「コ ‖ 同値 ョ「「「「「「「「「「「「イ    、ゲーデルの不完全性定理 、 カ「「「「「「「「「「「「コ   ョ「「「「「「「「「「「「「「「「「「「「イ ※ 、計算機数学と(理論)計算機数学の基本定理、 カ「「「「「「「「「「「「「「「「「「「「コ   【証明】     (対角線論法による)     hを計算する手続きHが存在すると仮定、pを任意の手続きとする。     仮定より、      H*:N→{0,1}が存在:               H*(gn(p))=H(gn(p),gn(p))     即ち、                  /0:p(gn(p))が停止しない。        H*(gn(p))=|                  \1:p(gn(p))が停止する。     更に、次の       H**:N→{0}がH*から構成できる:                 /02':p(gn(p))が停止しない1'        H**(gn(p))=|        \undefined(停止しない)2:                    p(gn(p))が停止する1       H**: H*を1行づつ真似しながら、但し、H*が1を出力して          停止するところではH**は止まらない。→∞ループ     pとしてH**を考えると:      H**(gn(H**))が停止1←→H**(gnH**)が停止しない2      H**(gn(H**))が停止しない1'←→H**(gnH**)が停止1'     ∴矛盾   補足)       n,d     n       n        | | |        | | |    h――→|H――――→|H*――――→ |H**        | | |        ↓ ↓ ↓      H(n,d) H(n,n)  /0:p(gn(p))が                     |      haltしない                     \undefined:その他  【系】     pを任意の手続きとする。このとき、次の計算可能な手続きEは存在    しない。             /pのゲーデル数          /入力、         、 \x        E、         、   /0:(p(x)≠x+1)          \出力、             \1:(p(x)=x+1)     ※手続きpが関数fを計算するか。     ※プログラムの正当性判定、検証、verification 〔証明〕     pとして次の手続きを考える。       /Q              Q:任意の手続き      、 x0←0          x1,…,xn:Qにあらわ      、 x1←0                  れる全ての      、   :                   変数     、 xn←0      、      、 x1←x       \ x2←suc(x1)    このとき、次が成り立つ。 x1+1=x+1     pが停止 ←→ p(x)=x+1       ↑       ↓     Q(x)が停止    Qは任意なので、停止問題の非可解性よりEは存在しない。  【問】fを計算可能な関数とし、pを任意の手続きとする。     次の計算可能な手続きE1は存在するか。               /pのゲーデル数           /入力 、           、    \x E1、           、    /0:p(x)≠f(x)           \出力 、               \1:p(x)=f(x)    解)f(x)=x+1を考えれば良い。      “系”よりE1は存在しない。  ョ「定理6.2 「「「「「「「「「「「「「「「「「「「「「「「イ 、 、  、  PとQを任意の手続きとする。次の、E2は存在しない。 、 、 、  、           /P,Qのゲーデル数 、  、       /入力 、 、  、       、     \x 、 、 E2 、 、  、       、    /0:P(x)≠Q(x) 、  、       \出力 、 、  、           \1:P(x)=Q(x) 、 カ「「「「「「「「「「「「「「「「「「「「「「「「「「「「「コ  【証明】    P(x)=x+1となる手続きPを考える。      E2:存在 → E:存在    ∴矛盾 ョ「定理6.3 「「「「「「「「「「「「「「「「「「「「「「「イ 、 、  、  f:計算可能 p:任意の手続き 、  、  次のE3は存在しない。 、 、 、  、      /入力 pのゲーデル数 、  、      、 、 、 E3 、   /0(p≠f): x;p(x)≠f(x)、  、      \出力、 、  、          \1(p=f): x;p(x)=f(x)、 カ「「「「「「「「「「「「「「「「「「「「「「「「「「「「「コ  【証明】    E3:存在 → E1:存在   ∴矛盾 ョ「「「「「「「「「「「「「「「「「「「「「「「「イ    、関数f、手続きp  p=fかどうかは“決定不能”、         カ「「「「「「「「「「「「「「「「「「「「「「「「コ ョ「定理6.4 「「「「「「「「「「「「「「「「「「「「「「「イ 、 、  、  P,Q:任意の手続き 、  、  次のE4は存在しない。 、 、 、  、      /入力 P,Qのゲーデル数 、  、      、 、 、 E4 、 /0(P≠Q): x;P(x)≠Q(x)、  、      \出力、 、  、          \1(P=Q): x;P(x)=Q(x)、 カ「「「「「「「「「「「「「「「「「「「「「「「「「「「「「コ  【証明】    E4:存在 → E2:存在   ∴矛盾 ョ「「「「「「「「「「「「「「「「「「「「「「「イ    、P,Q:手続き  P=Qかどうかは“決定不能”、  カ「「「「「「「「「「「「「「「「「「「「「「「コ 【前期】 《数値関数全体》 ョ「「「「「「「「「「「「イ                 、ョ「「「「「「「「「「イ、  ョ「「「「「「「「「「「「「「「イ 、、 (プログラムで) 、、ョ「゙ホ「nR〜SORTING D時間、 、、 計算可能関数全体 、、、 、カ「2n〜ハミルト=アンパス 、 計、、 、、、 、 、 算、、ョ「「「「「「「「イ、、、ョ゙「22・・・2n ,22・・・2 }n 、 可、、、"実際に"計算可能、、、、、、 、  、  n:データ数、 能、、、 ×「゙゙゙コ、カ「゙「「゙「「「「「「「「「「コ 性、、カ「「「「「「「「コ、、 、  カ「「ヨ「「二人ゲーム     、、       ×「「゙゙「コョ「「プログラムの停止問題 、セ「「「「「「「「「「ニ、  、   、、          、、 、ョ「プログラムの等価性判定問題 ョ「゙ニ ×「「゙゙「「コ、 その他 "多数" ↓ 、、 ×「「゙゙「「「コ 一致ガ「「「「「「「「「「゙コ        、プログラムによる定義、 ョ「自然数の上の四則演算を基礎とする 、 、 、   ョ゙「「「「「「「「「「゙イ@、 、セ「「「「「「「「「「ニ、 、 ョ「一筆書き可能なグラフ全体 、、  帰納関数全体  ゼ「コ* 、 、セ「「「「「「「「「「ニ、 、ョ「「゙「「「「「「「「「イB  ガ「「「「「「「「「「゙コ 、、ョ「゙「「「「「「「「イ、 、 算術演算による定義 、 、、、 、    /時間 、、 、 、 、、、 、 ョ、 、、 、 、 、、、 、 、 \メモリ 、、 、 、 、、、 × 、  (空間)、、  ョ゙「「「「「「「「「「゙イA、、、 、    、、 、、 、、 、、、 C計算量理論、、  、セ「「「「「「「「「「ニ、 、、、 ×←「「「→、、 、、 、、 、、 、、  、、 Turing 、、 →、、      、、  、、 オートマトンによる、、 、、、 識別可能(計算可能)、、  、、 計算可能関数全体 、、 、、、な集合全体      、、 、、 ×←「「「→、、 、、カ「「「「「「「「「「コ、 、、 C計算量理論、、 、、 、 、、 、、 、カ「「「「「「「「「「「「コ 、、 、、 、   、、          、、 、            、カ「「「「「「「「「「コ、 、        /プログラム  カ「「「「「「「「「「「「コ 、     、    オートマトンによる定義  、     、 帰納関数   、 、      、 \オートマトン 7.帰納的関数族  7.1 原始帰納的関数 (primitive vecursive functions) ョ「「イ  、定義、 カ「「コ    次の形の関数を基本関数(basic functions)という     (1)suc(x)=x+1     (2)nil(x)=0     (3)從i(x1,x2,・・・,xn)=xi x,n,i,x1,・・・,xn 「Ν    以下の演算子COMPを合成演算子という       /h1,・・・,hr :n変数関数    、      〉原始帰納的関数       \g     :r変数関数     COMP(g,h1,・・・,hr)=f        def     <==>f(x1,・・・,xn)                    r変数         ョ「「「「「「「「「ヨ「「「「「「「「「「「「イ          =g(h1(x1,・・・,xn),・・・,hr(x1,・・・,xn))      カ「ホ「コ   カ「ホ「コ      n変数 n変数   [例]COMP(g,h)=g o h f ョ「「「「「「「「「「「「イ 、 ョ「「イ  、 、 、h1 、  、 、 ョ「イ ← カ「「コ←「゙「ョ「「「「「「イ   ←「゙「、g、 : 、 、x1,…,xn、   、 カ「コ ← ョ「「イ←「゙「カ「「「「「「コ   、 、hr 、  、 、      カ「「コ  、 カ「「「「「「「「「「「「コ   原始帰納法演算子     PREC(g,h)→f       /g:n  変数関数       、 h:n+2 〃      基底(basis induction)       \f:n+1 〃             PREC(g,h)=f    def       <==> f(0,x1,・・・,xn)=g(x1,・・・,xn)            f(n+1,x1,・・・,xn)    ↑  =h(x,f(x,x1,・・・,xn),x1,・・・,xn)         suc(x)「「コ  7.2 帰納的関数族(recursive function) ョ「「イ  、定義、 カ「「コ    h:Nn+1→Nに対して、     次の関数      f:N →N     を対応させる演算子 (MINSと書く)を      最小解 又は最小解演算子、μ作用素 という。    ここで      f(x1,x2,・・・,xn)=z              (h(x1,x2,・・・,xn,x)=0 となるような               xが存在するとき、zはそのようなxの最小値) ↑                             自然数    なお、      ョ「「「「「「「「「イ      、MINS: h→f、      カ「「「「「「「「「コ  【例】 def     h(a,b,c,x)=ax^2+bx+cのとき、       MINS(h)=f       f(a,b,c)=−b±普ib^2+4ac)/2a     のうち、自然数で小さい方の値  ョ「「イ  、定義、 カ「「コ   def   f:帰納的(部分)関数 <==> fが基本関数に合成、原始帰納法、                   最小解演算子を有限解適用して得られる。      帰納的関数は全て 帰納的部分関数である ョ「「「「「「「「「「「「イ 、 ョ「「「「゙「帰納的部分関数 、ョ「「「「「「ヨ「イ 、     、、ョ「「「「イ  、  セ「原始帰納的部分関数     、、、    、  、  、      、、カ「「「「コ×「゙「「゙「→上の例 、カ「「「「「「「「コ 、  カ「「「「「「「「「「「「コ ョ「「「「「「「イ   、帰納的全域関数、 ★帰納的関数は全て全域関数 カ「「「「「「「コ     h(x1,x2,・・・,xn,x)は正則       def        <==> x1,x2,・・・,xn「N,・x「N             h(x1,・・・,xn,x)=0     注)正則関数hの最小化         MINS(h)=f ↑              正則  ョ「定理7.2 「「「「「「「「「「「「「「「「「「「「「「「イ 、 、  、  fが帰納的全域関数  、  、    <=> fは基本関数に合成、原始帰納法、正則関数の、  、       最小化を有限回適用して得られる。 、 カ「「「「「「「「「「「「「「「「「「「「「「「「「「「「「コ  ョ「定理7.3 「「「「「「「「「「「「「「「「「「「「「「「イ 、 、  、  帰納的全域関数族  原始帰納的関数族 、  、    TREC       ↑ PREC 、  、            原始帰納的関数は帰納的関数である 、  、                      ‖ 、  、                    全域関数 、 カ「「「「「「「「「「「「「「「「「「「「「「「「「「「「「コ  【証明】    次の関数 ack:       ack TREC−PREC     ここで       /ack(0,y)=y+1       、 ack(x+1,0)=f(x,1)       \ack(x+1,y+1)=ack(x,ack(x+1,y))  注) ackを Ackerman関数 という   ↑             原始帰納的関数でない        /MINS ←→ WHILE DO ・・・        、 PREC ←→ DO I=1 TO N ・・・  \COMP ←→ P1,P2     ここで0変数関数は定数関数とする     即ち、n=0のとき        /f(0)=g()=k 、        \f(suc(x))=h(x,f(x))  《例》     g()=1,h(x,f(x))=(x+1)*f(x)    とすると、     [h(x,y)=(x+1)y]     PREC(g,h)=x! ョ「「イ  、定義、 カ「「コ    fが原始帰納的(primitie recursie)        def       <==> fは基本関数から合成演算子と原始帰納法演算子を           用いて“構成できる“。  原始帰納的関数の例   【例3.1】 (加算)     次の関数addは原始帰納的。     ここで       /add(0,y)=y 、       \add(x+1,y)=add(x,y)+1‥‥‥‥(1)     即ち、       add(x,y)=x+y   〔解〕      nil,suc,(ui)↑n,COMP,PRECを適当に組み合わせ     て、(1)が記述出来ればよい      add=PREC(ui,COMP(suc,(u23))‥‥(2)   ↑ ↑ ↑ 即ちaddはf g h ui /        ←PREC  suc(x,y)              \     / COMP \ u23     (噤jPRECの定義より、   /add(0,y)=ui(y)=y       (2)<=> 、 ↑ \add(suc(x),y)    PRECの定義  =COMP(suc,u23)                         (x,add(x,y),y)      COMPの定義 → =suc(u23(x,add(x,y),y)  ョ「「「「「「「「「イ                 = 、add(x,y)+1、    カ「「「「「「「「「コ ↑                   sucとu23の定義   【例3.2】     次の関数 mult は原始帰納的      ここで        /mult(0,y)=0   、        \mult(x+1,y)=mult(x,y)+y   即ち、       mult(x,y)=x・y   〔解〕     mult(x,y)        =PREC(mil,COMP(add,u23,u23))(x,y)     ただし、addは、例3.1(2)  【問】    (1)x!         /fact(0)=1   、         \fact(x+1)=fact(x)*(x+1)    (2)x↑2   /exp(0,x)=1   、         \exp(n+1,x)=exp(n,x)*x    (3)div(x,y) (=x/y 切り捨て)   以上の関数が原始帰納的であることを示せ。        / 細井 勉        \ 広瀬  、帰納法、サイエンス社      注) ack(0,y)=y+1      ack(1,y)=y+2      ack(2,y)=2y+3 ↑      ack(3,y)=2↑(y+3)−3 (?)      ack(4,y)=2↑2↑・・・↑2−3 ↓ カ「「ホ「「「「コ   y+3      ack(5,y)=2↑2↑・・・↑2−3              カ「「ホ「「「「コ   / 2↑2↑・・・↑2 \            〔 カ「「ホ「「「「コ 〕 \ y+3 /    (例) ack(5,1)       =2↑2↑・・・↑2−3=2↑2↑・・・↑2−3        カ「「ホ「「「コ カ「「ホ「「「コ         2↑2↑2↑2 65536 ”基礎論的数”  《問の解答》     (1)PRECのとき、0変数関数は定数関数であるので          fact(0)=1        とする。        fact(suc(x))=COMP(mult,COMP(suc,U12),U22)(x,fact(x)) =mult(COMP(suc,U12)(x,fact(x)),U22(x,fact(x)) =mult(suc(U12 (x,fact(x))),fact(x)) =mult(suc(x),fact(x)) =mult(x+1,fact(x)) =(x+1)*fact(x) よって        fact=PREC(COMP(suc,nil)COMP(mult,COMP(suc,U12),U22)) ただし、          /mult=PREC(nil,COMP(add,U12,U22)) 、 \add=PREC(U11,COMP(suc,U23))         fact(0)=1      def    補注) nil( ) = 0 (2) exp(0,x)=COMP(suc,nil)(x) =suc(nil(x)) =suc(0) =0+1 =1 exp(n+1,x)=COMP(mult,U23,U33)(n,exp(n,x),x) =mult(U23(n,exp(n,x),x),U33(n,exp(n,x),x)) =mult(exp(n,x),x) =exp(n,x)*x ∴ exp=PREC(COMP(suc,nil),COMP(mult,U23,U33)) ただし         /mult=PREC(nil,COMP(add,U23,U33))   、    \add=PREC(U11,COMP(suc,U23)) (3) 関数div(x,y)が原始帰納的であることを示す前に、いくつかの        他の関数が原始帰納的であることを導入する。       @前者関数pred(x)は原始帰納的である。 /x-1 (x>0)           pred(x)=、 \ 0 (x=0) /pred(0)=0 、          \pred(suc(x))=x と定義すると、   pred=PREC(U12) (pred(0)=0) 噤jpred(0)=0 とする           pred(suc(x))=U12(x,pred(x)) =x A 差関数   /x-y (x>y)       sub(x,y)、            \ 0 (x<=y) は原始帰納的である。          /sub(x,0)= x 、   \sub(x,y+1)=pred(sub(x,y)) と定義すると、           sub=COMP(PREC(U11,COMP(pred,U23)),U22,U12) 噤j subi(y,x)=sub(x,y) と定義する。                           /subi(0,x)= x= (x) 、 \subi(y+1,x)=PRED(subi(y,x)) =(PRED,U23(y,subi(y,x),x)) =COMP(PRED,U23) sub(x,y)=(subi,U22,U12)(x,y) =COMP(subi,U22,U12)(x,y) =COMP(PREC(U11,COMP(PRED,U23)),U22,U12)     B関数|x-y|= (|sub|(x,y)) は原始帰納的である。        |x-y|= (x-y)+(y-x)と定義すると、        |sub|= COMP(add,sub,COMP(sub,U22,U12))     ) |sub|(x,y)=COMP(add,sub,COMP(sub,U22,U12))(x,y)     =add(sub(x,y),COMP(sub,U22,U12)(x,y))     =add(sub(x,y),sub(U22(x,y),U12(x,y)))     =add(sub(x,y),sub(y,x)) (add = PREC(U11,COMP(suc,U23))) C T)関数     /0 (x=0)            sq =、 \1 (x≠0) は原始帰納的である。             /sq(0)=0  、 \sq(suc(x))=1 と定義すると、                    sq = PREC(nil,(sq(0)=0) 噤jSq(0)=0 とする             Sq(suc(x))=COMP(suc,COMP(nil,U12))(x,Sq(x))       =suc(COMP(nil,U12)(x,Sq(x)))      =suc(nil(x))     =suc(0)     =1 U)関数 _ /1 (x=0) Sq(x) =、 \0 (x≠0) は原始帰納的である。 _ /Sq(0)=1 、 _ \Sq(suc(x))=0 と定義すると、 _ _            Sq = PREC(COMP(suc,nil),COMP(nil,U12)) (Sq(0)=1) _ 噤jSq(0)=1 とする _ _ Sq(suc(x)) = COMP(nil,U12)(x,Sq(x)) _ = nil(U12(x,Sq(x))) = nil(x) = 0 Dxをyで割ったときの余りを rm(x,y) で表す。          このとき rm(x,y) は原始帰納的である。           /rm(0,y)=0 、 \rm(suc(x),y)=suc(rm(x,y)) Sq(|y -suc(rm(x,y))|) と定義できる。             rm = PREC(nil,COMP(mult,COMP(suc,U23),                COMP(Sq,COMP(|sub|,U33,COMP(suc,U23)))      ) rm(0,y)=nil(y)=0      rm(suc(x),y)=COMP(mult,COMP(suc,U23),COMP(Sq,           COMP(|sub|,U33,COMP(suc,U23))))   (x,rm(x,y))     =mult(COMP(suc,U23)(x,rm(x,y),y),COMP(Sq,    COMP(|sub|,U33,COMP(suc,U23)))   (x,rm(x,y)) =mult(suc(U23(x,rm(x,y),y)), Sq(COMP(|sub|,U33,COMP(suc,U23)) (x,rm(x,y),y) =mult(suc(rm(x,y)),Sq(|sub| (U33(x,rm(x,y),y),COMP(suc,U23) (x,rm(x,y))     =mult(suc(rm(x,y)),                   Sq(|sub|(y,suc(U23(x,rm(x,y),y))))    =mult(suc(rm(x,y)),                   Sq(|sub|(y,suc(rm(x,y)))))  [mult = PREC(nil,COMP(add,U23,U33))]         abs :   /abs(0,y) = (y)   、   \abs(x+1,y) = ((x+1)-y)+(y-(x+1))   abs = PREC(U11,COMP(sub,COMP(add,U23,COMP(Sq,COMP(sub,      COMP(sub,U33,U23),COMP(suc,nil)))))     以上の事より div(x,y) が原始帰納的であることを示す。         /div(0,y)=0 、             _ \div(suc(x),y)=div(x,y)+Sq(|y-suc(rm(x,y))|)   と定義できる。        div = PREC(nil,COMP(add,U23,COMP(Sq,COMP(|sub|,U33,                COMP(rm,U13,U33))))    ) div(0,y) = nil(y) = 0     div(suc(x),y)              =COMP(add,U23,(x,div((x,y),y) _ COMP(Sq,COMP(|sub|,U33,COMP(suc,   COMP(rm,U13,U33)  ̄  =add(U23(x,div(x,y),y),Sq(COMP(|sub|,U33,  COMP(suc,COMP(rm,U13,U33)))(c,div(x,y),y) _ =add(div(x,y),Sq(|sub|(U33(x,div(x,y),y),  COMP(suc,COMP(rm,U13,U33))(x,div(x,y),y)) _ =add(div(x,y),Sq(|sub|(y,suc(  COMP(rm,U13,U33)(x,div(x,y),y))))) _ =add(div(x,y),Sq(|sub|(y,suc( rm(U13(x,div(x,y),y),U33(x,div(x,y),y))) _ =add(div(x,y),Sq(|sub|(y,suc(rm(x,y)))))  ョ「定理7.4 「「「「「「「「「「「「「「「「「「「「「「「イ  、 、  、  f:関数 、  、 (1)fが帰納的 <=> fは手続きで全域計算可能 、  、 (2)fが部分帰納的 <=> fは手続きで部分計算可能、  カ「「「「「「「「「「「「「「「「「「「「「「「「「「「「「コ 【証明】    (1)(→) @基本関数は手続き計算可能           A /f,g1,・・・,gn,g が手続き計算可能          、   /COMP(f,g1,・・・,gn) 、   =、 PREC(f,g) 、 \MINS(f) 、  は手続きで計算可能           \   (計算する手続きを構成する)  (←) Godel numbering による f:A→B において /全域関数: Aの全ての要素に対してBのある要素を対応させる 、 \部分関数: 必ずしもAの全ての要素にBの要素を対応させない §8.Turing automaton    (Turing, 1935頃) 現在の computer に影響を 与えた "らしい" 手続きで計算可能         帰納関数族     ョ「「「イ ョ「「「イ 、 、  = 、 、 、 、 、 、 カ「「「コ カ「「「コ プログラム           関数 ‖ Taで計算可能   ョ「「「「「「「「「「「イ ョ「「「イ   、計算量(time,space)は、 、 、   、Taの上で定義される。 、 、 、 カ「「「「「「「「「「「コ カ「「「コ  計算機     文献    細井 勉    計算の基礎理論    ホプクロフト/ウルマン  言語理論とオートマトン       ・計算可能性の定義を考える。        計算のモデル       ・計算機数学の中の計算理論の一分野 ョ「「イ  、概略、 カ「「コ    Turing automaton (machine) (pl.automata)は、次のような     データ処理系(→代数学)(データ構造)     ({データ},{操作})である。   i.〔データ〕     データ(様相という)は次の形: c(tape(c(location)))    head location tape           ↑ ョ「「ホ「「イ ョ「「ホ「「ホ「「「「「ホ「「ホ「「「 C:、文字、、 、 、文字、文字、  ・・・ 、文字、 カ「「ヨ゙「コ カ「「ヨ「「ヨ「「「「「ヨ「「ヨ「「「 、 (1) (2)   ↑ カ「「「「「「「「「「「「「「「「「「。    ii.〔操作〕     Taの操作は上のような様相の内容を書きかえるもの        操作:C→C’ (C,C’は様相) で以下の3種:       a. c(head)上の文字の書きかえ       b. c(tape)上の文字の書きかえ           但し、1回に書きかえる文字は、c(location)のさしている          tape上の位置 c(tape(c(location)))のみ。      c. c(location)の書きかえ            但し、c'(location) = c(location)+1   〃 +0   〃 -1 のいずれか。 ョ「「「「イ     以上の操作は、”状態”、c(head) 、と locationのさしている文字 ョ「「「「「「「「「「イカ「「「「コ ョ「「イ    、c(tape(c(location)))、 に対してあらかじめ定められた、規則、 カ「「「「「「「「「「コ カ「「コ     (”プログラム”という)に従ってえらばれる。        Cョ「ホ「イ ョ「ホ「ホ「ホ「「   C'ョ「ホ「イ ョ「ホ「ホ「ホ「 、□、、、 、 、 、回、… 「→ 、 、 、 、 、 、 、… カ「ヨ゙コ カ「ヨ「ヨ「ヨ「「 操作 カ「ヨ「コ カ「ヨ「ヨ「ヨ「 、 ↑ ↑     カ「「「「「「「。    | ョ「「「「「「「「「「「イ 、書き換え規則プログラム、 カ「「「「「「「「「「「コ ョ「「「「「「「「「「「「「イ 、Turing オートマトンの例: 、 、     関数を実現する例 、 カ「「「「「「「「「「「「「コ Turing オートマトンは次の機能をもつ。    (1) f:Nk → N (k変数関数)                いわゆる"計算" (2) f:N → {0,1} Nョ「「「「「「「「イ 、 「「「「゙「「→0 、 ョ「「「イ 、 、 、 「゙「「゙「「→1 、 カ「「「コ 、 、 、 いわゆる"識別" カ「「「「「「「「コ 以下で計算(1)の例をあげる。 【例】   y=2x を計算するTa A=(k,Σ,R,q0,F) ここで k={A,B,C,D,E,F,G,H}…head上の文字      Σ={b,1,1’} …tape上の文字      q0=A …最初のhead上の文字      F={H} …最終のhead上の文字      R …書きかえrule ョ「「「「「「「「「「「「「イ 、C0セCC1セC・・・・セ Cn 、 、xセ「「「「「「「「→2x、 カ「「「「「「「「「「「「「コ R:K×Σ → K×Σ×{−1,0,1}          R:(q,S) → (q’,S’,move) q         S      q’        S’  ョ「ホ「イ ョ「「ホ「ホ「「 ョ「ホ「イ ョ「「ホ「ホ「「 、 、、、 、……、 、… セ「「、 、、、 、……、 、… カ「ヨ゙コ カ「「ヨ「ヨ「「 カ「ヨ゙コ カ「「ヨ「ヨ「「 、 ↑ 、 ↑ カ「「「「「「。 カ「「「「「「。 ←→move     RョK×Σ×K×Σ×{−1,0,1}   q  S   Q’ S’ move 「「「「「「「「「「「「「「「「「「「「「「   A  b   H  b    0          A  1   B  b    1        A  1’  H  1’  0  下の表で書く ョ「「「ホ「「「「「「「「ホ「「「「「「「「「ホ「「「「「「「「イ   、q\S、   b    、    1    、   1’ 、   セ「「「゙「「「「「「「「゙「「「「「「「「「゙「「「「「「「「ニ   、  A 、(H,b, 0)、(B,b , 1)、(H,1’,0)、   、  B 、(F,1,−1)、(C,1’, 1)、(H,1’,0)、   、  C 、(D,b, 1)、(C,1 , 1)、(H,1’,0)、   、  D 、(E,1,−1)、(D,1 , 1)、(H,1’,0)、   、  E 、(E,b,−1)、(E,1 ,−1)、(B,1 ,1)、   、  F 、(G,b, 1)、(F,1 ,−1)、(H,1’,0)、   、  G 、(H,b, 0)、(H,1 , 0)、(H,1’,0)、   、  H 、(H,b, 0)、(H,1 , 0)、(H,1’,0)、   カ「「「ヨ「「「「「「「「ヨ「「「「「「「「「ヨ「「「「「「「「コ   上のAは、1x+1 を"入力"して 12X+1 を"出力"することを確かめよ。 (→Xの1進表示)   x=2として考える。 12+1=111=(2)1 ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「「 、A、、、 、1、1、1、b、… カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、B、、、 、b、1、1、b、… (A,1,B,b,R) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「。 ↓計算機の   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「「 1単位時間 セ「「「「「「「 、C、、、 、b、1'、1、b、… (B,1,C,1',R) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、C、、、 、b、1'、1、b、… (C,1,C,1,R) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、D、、、 、b、1'、1、b、b、 (C,b,D,b,R) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「「「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、E、、、 、b、1'、1、b、1、b、 (D,b,E,1,L) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、E、、、 、b、1'、1、b、1、b、 (E,b,E,b,L) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、E、、、 、b、1'、1、b、1、b、 (E,1,E,1,L) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、B、、、 、b、1、1、b、1、b、 (E,1',B,1,R) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、C、、、 、b、1、1'、b、1、b、 (B,1,C,1',R) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、D、、、 、b、1、1'、b、1、b、 (C,b,D,b,R) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「「「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、D、、、 、b、1、1'、b、1、b、 (D,1,D,1,R) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「「「「「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、E、、、 、b、1、1'、b、1、1、b、 (D,b,E,1,L) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「「「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、E、、、 、b、1、1'、b、1、1、b、 (E,1,E,1,L) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、E、、、 、b、1、1'、b、1、1、b、 (E,b,E,b,L) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、B、、、 、b、1、1、b、1、1、b、 (E,1',B,1,R) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、F、、、 、b、1、1、1、1、1、b、 (B,b,F,1,L) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、F、、、 、b、1、1、1、1、1、b、 (F,1,F,1,L) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、F、、、 、b、1、1、1、1、1、b、 (F,1,F,1,L) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、G、、、 、b、1、1、1、1、1、b、 (F,b,G,b,R) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「。   ョ「ホ「イ ョ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「「 セ「「「「「「「 、H、、、 、b、1、1、1、1、1、b、 (G,1,H,1,0) カ「ヨ゙コ カ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「「「「。 15=(4)1 ョ「「イ 、定義、 カ「「コ 部分関数 f:Nk→NがTa部分計算可能。 (fはk変数) def <==>次のようなTa A(k,,R,q0,F)が存在する。 即ち、(x1,…,xk)「Dom fに対して、 f(x1,…,xr)=y ↑ ※ Dom f:fの定義域。 ↓ 次の計算列がAに存在。 x1+1個 x2+1個 xn+1個      ョ「「「「「「「イ ョ「「「「「イ     ョ「「「「「イ ョ「ホ「イョ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「ホ「「 、q0、、、、1、1、…、1、b、1、…、1、b、…、b、1、…、1、b… カ「ヨ゙コカ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「ヨ「「 、 ↑ カ「「。 y+1個 ョ「「「「「「「「「イ R R ョ「ホ「イ ョ「ホ「「「「「ホ「ホ「ホ「「「「「「「「 ナ」…ナ」 、q、、、 、1、‥‥‥‥‥、1、b、‥‥‥‥‥‥‥ カ「ヨ゙コ カ「ヨ「「「「「ヨ「ヨ「ヨ「「「「「「「「 、 ↑ ョ「「「「イ 但し、q「F カ「「「「「「「。 、答え y、 カ「「「「コ §9.帰納的集合族  識別可能関数族       (この章)           (前章まで) ョ「「「「「「イ ョ「「「「「「「「イ     、      、  特長化 、 、 、 ョ「「ホ「゙「「「←「「「「゙「ホ「「「「イ 、     、 、  、 、        、 、帰納的 、 、     、 、  、 、        、 、関数族 、 、 、 カ「「ヨ「゙「「「←「「「「゙「ヨ「「「「コ 、 、 、 、 、 カ「「「「「「コ カ「「「「「「「「コ 2N f:Nk→Nの全体  この章:2Nの分類       帰納的関数         計算可能関数          に対応するものを明らかにする。     1対1     (注){f:N→N}――→ 2N N ←→ R                   ↑       ↓                   2N  9.1 帰納的集合族   /f:N→{1}がSョN\ def  /     /1(x「S)   、            、←―→、f(x)=、   \の特長部分関数    /     \      \undefined(xテS) ョ「「「「「「イ  、定義9.1.1、 カ「「「「「「コ    SョNが部分帰納的    \ def  /帰納的な特長部分関数が   (帰納可算的recursively)/ ←―→ \Sに存在。    enumerable semirecursive(RE)   /f:N→{0,1}がSョN\ def /      / 1(x「S)    、            、←―→、f(x)= 、    \の特長(全域)関数    /     \      \ 0(xテS) ョ「「「「「「イ  、定義9.1.2、 カ「「「「「「コ    SョNが帰納的 ←―→ 帰納的な特長全域関数がSに存在       (REC)           球団全体 ョ「「「「「「「「「「「「「イ 、 ョ「「「「「「「「「イ 、      、 、いつか優勝する球団セ「゙「「RE 、 カ「「「「「「「「「コ 、 カ「「「「「「「「「「「「「コ ョ「「「「「「「「「「「「「イ 、 ョ「「「「「「「「イ 、      、 、来年優勝する球団セ「「゙「「REC 、 カ「「「「「「「「コ 、 カ「「「「「「「「「「「「「コ ョ「「「「「「「「「「「「「イ   、 ョ「「「「「「「「イ  、      、 、いつまでたってもセ「「゙「「REでない   、 、 優勝しない球団 、  、 、 カ「「「「「「「「コ 、 カ「「「「「「「「「「「「「コ  ョ「定理8.1.1「「「「「「「「「「「「「「「「「「「「「「イ 、 、  、  SョNが帰納的 ←→ SとN―Sが部分帰納的 、 カ「「「「「「「「「「「「「「「「「「「「「「「「「「「「「コ  【証明】    下の図を参照 ョ「「「「「イ ョ「「「「「「「「「「「「「イ     、S:帰納的、→、f s.t. 、 カ「「「「「コ右、       /1(x「S) 、「「「イ ョ「「「「「「「「イ 、 f(x)=、 、 、 、fはSの特長関数、←、   \0(xテS) 、 、 カ「「「「「「「「コ左カ「「「「「「「「「「「「「コ 、      右↓ 、 ョ「「「「「「「「「「「「「「「「「イ 、    、  _ 、 、 、g,g 、 、    、       /1(x「S) 、 左 、    、  g(x)=、 、 、    、       \undefined (xテS)、 、    、         、 、    、  _  /1 (x「S)、 、    、  g(x)=、 、 、    、       \undefined (xテS)、 、 カ「「「「「「「「「「「「「「「「「コ 、   右↓  左↑      左↓ 、 ョ「「「「「「「「「「イ ョ「「「「「「「「「「「「「「「「「「イ  、g:Sの特長部分関数、 、  _ 、  、 ̄  ̄ 、 、 g’s.t. 、  、g:S(=N−S) 、 、          _ 、 カ「「「「「「「「「「コ 、 _  /0(g(x)=1) 、 右↓ 左↑        、   g'(x)=、 、 ョ「「「「「イ 、       \undefined (その他)、  、S:r.e.、 カ「「「「「「「「「「「「「「「「「「コ  、 ̄ 、                       、S:r.e.、  _ カ「「「「「コ (gの1を0にする) ョ「定理9.1.2「「「「「「「「「「「「「「「「「「「「「「イ 、 、  、  帰納的集合族ハ部分帰納的集合族 (RECハRE) 、 カ「「「「「「「「「「「「「「「「「「「「「「「「「「「「「コ  【証明】    @ ョは明らか    A ョ「「「「「「「「「「「「「「「「「「「「「「「「「イ      、S={入力0で停止する手続きのゲーデルコード全体}、 、 を考えると S「RE−REC 、 カ「「「「「「「「「「「「「「「「「「「「「「「「「コ     ↓    ョ「「「「「「「「「「「「「イ ョ「「「「「「「「イ      、この手続きは計算可能でない、 、 S「RE 、    、(1で止まる、0で無限) 、 、 SテREC 、    カ「「「「「「「「「「「「「コ 、 、 、 、      /1 、          、           、f(x)=、 、          、           、      \0 、 、 カ「「「「「「「「コ 、 ↓   ョ「「イ ョ「「「「イ        、矛盾、「「「「「「「「「「「「、計算可能、 カ「「コ カ「「「「コ  9.2 識別可能集合族 ョ「「「「「「イ  、定義8.1.2、 カ「「「「「「コ     SョNとする   def     Sが部分識別可能←―→Sに計算可能な特長部分関数が存在               def     Sが(全域)識別可能←―→Sに計算可能な特長全域関数が存在           ョ「定理8.2.1「「「「「「「「「「「「「「「「「「「「「「イ 、        、  、  SョNとする 、  、   1) Sが部分識別可能←→Sは部分帰納的 、  、   2) Sが全域識別可能←→Sは帰納的 、 カ「「「「「「「「「「「「「「「「「「「「「「「「「「「「「コ  例)1.偶数全体    2.素数全体  【問】     f(x,y,z)=xy+z     f(x,y)=2x+y 【練習問題】 次のオートマトン、言語理論における unsolvableな問題を説明せよ。   1.  アルファベット{0,1,B}を持つTMが、テープ上に3つ並んだ    1を書くことがあるか否かという問題は決定不能である。   2.  帰納的可算集合が空であるのは決定不能である。   3. 帰納的可算集合が有限であるのは決定不能である。   4. 帰納的可算集合が正規であるのは決定不能である。   5. 帰納的可算集合が文脈自由であるのは決定不能である。   6.  帰納的可算集合のL=¢という性質は帰納的可算でない。   7.  帰納的可算集合のL=*という性質は帰納的可算でない。   8.  帰納的可算集合のLは単元集合(ちょうど一つの元を持つ)という性    質は帰納的可算でない。   9.  帰納的可算集合のLは正則集合という性質は帰納的可算でない。 10.  任意の文脈自由文法G1とG2について、L(G1)とL(G2)の共通集合    が空集合であるか否かという決定問題は非可解である。  11.  二つの任意の文脈自由文法G1とG2について、L(G1)=L(G2)であ    るか否かという決定問題は非可解である。 12.  任意の文脈自由文法Gと任意の正規集合Rについて、L(G)=Rであ    るか否かという決定問題は非可解である。 (注) 6.〜9.のLは無限集合を意味する。 【練習問題の解答】 1. 「「ホ「ホ「ホ「ホ「「 T ( …、1、1、1、… ) ョ「イ→ 「「ヨ「ヨ「ヨ「ヨ「「 A(TM)「→、P、 カ「コ→ F (その他) 2. T (S=¢) ョ「イ→               S  「→、P、 (r,e) カ「コ→ F (S≠¢) 3. T (Sが有限) ョ「イ→               S  「→、P、 (r,e) カ「コ→ F (その他) 4. T (Sが正規) ョ「イ→               S  「→、P、 (r,e) カ「コ→ F (その他) 5. T (Sが文脈自由) ョ「イ→               S  「→、P、 (r,e) カ「コ→ F (その他) 6. T (S=。) ョ「イ→               S  「→、P、 (r,e) カ「コ→ undefined (その他) 7.             T (S=*) ョ「イ→               S  「→、P、 (r,e) カ「コ→ undefined (その他)             8. T (Sが単元集合 ) ョ「イ→               S  「→、P、 (r,e) カ「コ→ undefined (その他)             9. T (Sが正則集合) ョ「イ→               S  「→、P、 (r,e) カ「コ→ undefined (その他)             10. T ((L(G1)宸k(G2))=¢) ョ「イ→             G1,G2 「→、P、 (cfg) カ「コ→ F (その他)             11. T ((L(G1)=L(G2)) ョ「イ→             G1,G2 「→、P、 (cfg) カ「コ→ F (その他)             12.   T (L(G)=R)  ョ「イ→             G, R 「→、P、 (cfg) (r,s) カ「コ→  F (その他)