350 likes | 541 Views
計算の理論 II Turing 機械. 月曜4校時 大月美佳. 講義の前に. 補講について 今日と1/6は補講 レポートについて 今日帰りに大レポート(20点配点) 1/6に小レポート(10点配点) 試験 2/10に試験(40点配点). 今日の講義. 前回のおさらい Turing 機械の合成 小さなものを組み上げて複雑なものへ 残り: T, S, C, K n 帰納的関数を計算する Turing 機械の合成 合成の仕方と例 ミニテスト レポート. Turing 機械の作り方. Turing 機械を 合成 して作る 単純な Turing 機械
E N D
計算の理論 IITuring機械 月曜4校時 大月美佳
講義の前に • 補講について • 今日と1/6は補講 • レポートについて • 今日帰りに大レポート(20点配点) • 1/6に小レポート(10点配点) • 試験 • 2/10に試験(40点配点)
今日の講義 • 前回のおさらい • Turing機械の合成 • 小さなものを組み上げて複雑なものへ • 残り:T, S, C, Kn • 帰納的関数を計算するTuring機械の合成 • 合成の仕方と例 • ミニテスト • レポート
Turing機械の作り方 Turing機械を合成して作る • 単純なTuring機械 B, 1, r, l, <a> • 基本的なTuring機械を合成 R, L, R, T, S, C, Kn • 初期関数に対応するTuring機械を合成 Z(x), S(x), Uni(x1,…, xn) • 原始帰納的関数関数の操作I, II
B 1 B B B B 有限 制御部 有限 制御部 Turing機械 B ヘッドが置かれてい ます目に空白記号Bを 書き込む。 B=({q0,qh}, {B, 1}, K, q0,{qh}) K= { q01BNqh,q0BBNqh } B B q0→qh q0→qh
B 1 B B B B 有限 制御部 有限 制御部 Turing機械 1 ヘッドが置かれてい ます目に1を書き込む。 B=({q0,qh}, {B, 1}, K, q0,{qh}) K= { q011Nqh,q0B1Nqh } 1 1 q0→qh q0→qh
B 1 B B B B 有限 制御部 有限 制御部 有限 制御部 有限 制御部 Turing機械 r ヘッドを1こま右へ移す。 B=({q0,qh}, {B, 1}, K, q0,{qh}) K= { q011Rqh,q0BBRqh } 1 B q0→qh q0→qh
B 1 B B B B 有限 制御部 有限 制御部 有限 制御部 有限 制御部 Turing機械 l ヘッドを1こま左へ移す。 B=({q0,qh}, {B, 1}, K, q0,{qh}) K= { q011Lqh,q0BBLqh } 1 B q0→qh q0→qh
B a B B b B 有限 制御部 有限 制御部 Turing機械 <a> 読み取られた記号がaで あるか否かを判定する。 aであればqhで停止し、 aでなければq1で停止する。 B=({q0, q1,qh}, {B, 1}, K, q0,{q1 , qh}) K= { q0aaNqh,q0bbNq1 } ここで、a≠b a b q0→qh q0→q1
合成 2つのTuring機械 M1=(Q1, Σ, K1, q01, F1), M2=(Q2, Σ, K2, q02, F2) Q1∩Q2 =Φと仮定できる。 (できない場合は状態の名前を付け替える) q∈F1 とq02 ∈Q2 を同一視して得られる 以下のTuring機械 M1ーq→M2 =(Q1∪Q2, Σ, K, q01, F1∪F2 -{q}) K=K1∪K2∪{qaaNq02 | a∈Σ} をqにおけるM1とM2 の結合と呼ぶ。
p M M M1 q q M2 結合のバリエーション Turing機械M, M1, M2 (Q, Σ, K, q0, F-{q}) K=K∪{qaaNq0| a∈Σ} (Q∪Q1∪Q2, Σ, K, q0, F∪F1 ∪F2 -{p, q}) K=K∪K1∪K2∪{paaNq01, qbbNq02 | a, b∈Σ}
q M1 M2 qh yes <a> <a> M1 M1 q1 no M2 M2 簡易表記 F1={q}であるとき、 単にM1M2と書ける。 Mが<a>のとき、 qh, q1をyes, noのように書ける。 M1 M2 → →
r<B> no Turing機械 R ヘッドの右側にある最初の Bを探し、そこで止まる。 Turing機械rと<B>から合成。 r=({q0, qh}, {B, 1}, K1, q0, {qh}) K1={q0BBRqh, q011Rqh} <B>=({p0, p1, ph}, {B, 1}, K2, p0, {p1, ph}) K2={p0BBNph, p011Np1}
Turing機械 R つづき R=(Q, {B, 1}, K, q0, F) Q={q0, qh}∪{p0, p1, ph}={q0, qh, p0, p1, ph} K=K1∪K2∪{qhBBNp0, qh11Np0, p111Nq0} = {q0BBRqh, q011Rqh, p0BBNph, p011Np1, qhBBNp0, qh11Np0, p111Nq0} F= {qh}∪ {p1, ph}-{qh}-{p1}={ph}
l<B> no Turing機械 L ヘッドの左側にある最初の Bを探し、そこで止まる。 Turing機械lと<B>から合成。 l=({q0, qh}, {B, 1}, K1, q0, {qh}) K1={q0BBLqh, q011Lqh} <B>=({p0, p1, ph}, {B, 1}, K2, p0, {p1, ph}) K2={p0BBNph, p011Np1}
Turing機械 L つづき R=(Q, {B, 1}, K, q0, F) Q={q0, qh}∪{p0, p1, ph}={q0, qh, p0, p1, ph} K=K1∪K2∪{qhBBNp0, qh11Np0, p111Nq0} = {q0BBLqh, q011Lqh, p0BBNph, p011Np1, qhBBNp0, qh11Np0, p111Nq0} F= {qh}∪ {p1, ph}-{qh}-{p1}={ph}
yes Rr<B> l no Turing機械 R ヘッドの右側にある最初の 連続したBBを探し、 その左側のBの位置で止まる。 Turing機械Rとrと<B>から合成。 r=({q0, qh}, {B, 1}, K1, q0, {qh}) K1={q0BBRqh, q011Rqh} <B>=({p0, p1, ph}, {B, 1}, K2, p0, {p1, ph}) K2={p0BBNph, p011Np1} R=(Q, {B, 1}, K, q0, F)
no rr<B> Bl1 yes l Turing機械 T 1の連続したかたまりを1こまづつ左へ移す。 ~BWB├T~WBB ここで、 ~:任意の記号 W:1の連続したかたまり (下線):ヘッドの位置 ~BWB=q0~BWB ~WBB=~WqhBB *
no rr<B> Bl1 yes l Tの計算例 ~B11B ├* ~B11B (rr<B>) ├* ~1B1B (Bl1) ├* ~1B1B (rr<B>) ├* ~11BB (Bl1) ├* ~11BB (rr<B>) ├* ~11BB (l)
no Ll<B> BT yes T Turing機械 S 1のかたまりW1, W2に対して以下の処理を 行う。 BW1BW2B├S BW2BB…B ここで、 W1, W2:1の連続したかたまり (下線):ヘッドの位置 *
no Ll<B> BT yes T Sの計算例 B11B111B ├* B11B111B (Ll<B>) ├* B1B111BB (BT) ├* B1B111BB (Ll<B>) ├* BB111BBB (BT) ├* BB111BBB (Ll<B>) ├* B111BBBB (T)
no Ll<B> rRS yes TLlT Turing機械 C 1のかたまりW1, W2, …, Wn, Wに対して 以下の処理を行う。 ~BBW1BW2B…BWnBWB ├c~WBB…B *
no Ll<B> rRS yes TLlT Cの計算例 ~BB11B1B111B ├* ~BB11B1B111B (Ll<B>) ├* ~BB11B111BBB (rRS) ├* ~BB11B111BBB (Ll<B>) ├* ~BB111BBBBBB (rRS) ├* ~BB111BBBBBB (Ll<B>) ├* ~111BBBBBBBB (TLlT)
Turing機械 Kn n個の1のかたまりW1, W2, …, Wnに対して 以下の処理を行う。 BW1BW2B…BWnB ├kn BW1BW2B…BWnBW1B * no Lnr<B> BRn+11Ln+11 yes Rn
Knの計算例(n=2の場合) B11B111B ├* B11B111B (L2r<B>) ├* BB1B111B1 (BR31) ├* B11B111B1 (L31) ├* B11B111B1 (r<B>) ├* B1BB111B11 (BR31) ├* B11B111B11 (L31) ├* B11B111B11 (r<B>) ├* B11B111B11B (R2)
帰納的関数とTuring機械 帰納的関数を計算するTuring機械の合成 • 初期関数を計算するTuring機械 Z(x), S(x), Uni(x1, …, xn) • 合成関数とTuring機械 f(x1, …, xn)=g(h1(x1, …, xn), …, hr(x1, …, xn)) • 原始帰納で定義される関数とTuring機械 f(x1, …, xn)=g(x1, …,xn-1) (xn=0のとき) f(x1, …, xn)=h(x1, …, xn-1, xn-1, f(x1, …, xn-1)) (xn>0のとき)
初期関数のTuring機械 Z(x) →r1r BWB├* BWB1B S(x) →K11r BWB├* BWBW1B Uni (x1, …, xn) →Kn-i+1 BW1B…BWiB…BWnB├* BW1B…BWiB…BWnBWiB
合成関数とTuring機械 合成関数 f(x1, …, xn)=g(h1(x1, …, xn), …, hr(x1, …, xn)) →r1rKn+1nLnlBRH1Kn+1nH2…Kn+1nHrKr+(r-1)n Kr+(r-2)n…KrGC ここで、g, h1, …, hr を計算するTuring機械を それぞれG, H1, …, Hr とする。
原始帰納で定義される関数とTuring機械 原始帰納 f(x1, … , xn, 0)=g(x1, …,xn) f(x1, …, xn , y´)=h(x1, …, xn, y, f(x1, …, xn, y)) ここで、g, hを計算するTuring機械をそれぞれG, Hとする。 ↓ yes r1rK2Kn+3nLn+1lBRGKn+2lBl<B> C no yes rKn+4n+1 rKn+2nr1rKn+3HKn+4lBl<B> no
原始帰納関数の例 x+y (plus(x, y)) plus(x, 0)=g(x) plus(x, y)=h(x, y-1, plus(x, y-1)) g(x)=U11(x) h(x, y, z)=S(U33(x, y, z))
g(x)とh(x, y, z) g(x)を計算するTuring機械をGとする。 g(x) = U11(x)であるから、 Gはn=1, i=1としてK1 h(x, y, z)を計算するTuring機械をHとする。 h(x, y, z) =S(U33(x, y, z))であるから、 U33(x, y, z)に対するTuring機械 K1と S(x)に対するTuring機械K11rを合成して、 r1rK43L3lBRK1K1K11rC
合成関数の計算 xByBzB ├* xByBzB1B (r1r) 引数保存 ├* xByBzB1BxByBzB (K43) 引数コピー ├* xByBzB1BxByBzB (L3) ├* xByBzBBBxByBzB (lBR) 分離 ├* xByBzBBBxByBzBzB (K1) H1適用 ├* xByBzBBBxByBzBzBzB (K1) H1結果の取り出し ├* xByBzBBBxByBzBzBzBz+1B (K11r) G適用 ├* xByBzBz+1B (C) 途中クリア
yes r1rK2K4L2lBRGK3lBl<B> C no yes rK3r1rK4HK5lBl<B> rK52 no 求めるTuring機械は さっき定義したGとHを使用して、 n=1より、以下のように書ける。
ミニテスト • テスト時間20分 • 誰かと交換採点 • 最後に回収
最後に • レポート • 1/6に回収 (遅れは基本的に認めない) • 1/6に小レポートがある • 補講 • 1/6は補講日なので来ること