[小西ホームページ]   [目次・索引]   [前の授業]   [次の授業]

コンピュータIIL(情報科学入門)第10回

目次 索引
10.1 計算のモデル
10.2 演習10
10.3 レポート課題
10.4 参考文献

10.1 計算のモデル


h2 計算のモデル toc-computation-models

h3 アルゴリズム toc-algorithms

今日は、「計算機とは何か」について考えます。
言葉の通り、計算機とは計算を行う機械です。
ここで、計算という言葉は、加減乗除のことではなく、
問題を解く行為を指します。
問題を解くためには、その問題を解く方法が存在しなければなりません。
問題を解く方法が存在し、その通りに動く機械が構成できれば、
その機械でその問題を解くことができるわけです。

問題を解く方法を、
index アルゴリズム algorithm あるこりすむ
と呼びます。
アルゴリズムが存在しても、
その問題を解く機械が存在するかどうかは即答できませんが、
アルゴリズムが存在しなければ、どんな機械でもその問題は解けません。

h3 チューリング機械 toc-turing-machines

アルゴリズムという概念を厳密に議論するには、
計算機のモデルとなる機械を定義する必要があります。
計算機のモデルの中では、チューリング機械が重要です。

index チューリング機械 Turing machine ちゆうりんくきかい
とは、
index テープ tape てえふ
、
index ヘッド head へつと
、および
index 制御部 control part せいきよふ
から構成される、仮想的な機械です。
この機械のイメージは次の通りです。

...--+-----+-----+-----+-----+-----+-----+-----+--...
     |     |     |     |     |     |     |     |
     |     |     |     |     |     |     |     |      テープ
...--+-----+-----+-----+-----+-----+-----+-----+--...
                                △
                                | ヘッド
                                |
                          +-----+
                          |
                          |
                 +--------+--------+
                 |                 |
                 |                 | 制御部
                 |                 |
                 +-----------------+

テープは、左にも右にも無限に伸びていて、
無限個のます目に区切られています。
一つ一つのます目には、あらかじめ決められた記号が一つ書き込めます。
テープに書き込める記号は、
index テープ記号 tape symbol てえふきこう
と呼ばれます。

ヘッドは、必ずどこかのます目に位置づけられていて、

  ・ます目の記号を読み取る
  ・ます目に記号を書き込む
  ・右隣のます目に移動する
  ・左隣のます目に移動する

ことができます。

制御部は、あらかじめ決められた記号を一つ覚えられます。
制御部の覚える記号は、
index 状態 state しようたい
と呼ばれます。

チューリング機械の一回の動作は、
状態 p と読み取ったテープ記号 a で決定されます。
その内容は、書き込むテープ記号 b, ヘッドの移動方向、次の状態 q です。
これを、動作の関数として

    δ(p, a) = (b, R, q)  (右移動)
    δ(p, a) = (b, L, q)  (左移動)

と書きます。
動作の順序は次の通りです。

  1. 状態 p を確認する。
  2. ます目のテープ記号 a を読み取る。
  3. そのます目にテープ記号 b を書き込む。
  4. ヘッドを右隣か左隣のます目に移動する。
  5. 状態を q に変える。

チューリング機械への入力は、文字列で与えます。
入力の文字列が書き込まれたテープを用意し、
ヘッドをその文字列の先頭に位置づけ、
制御部を
index 初期状態 initial state しよきしようたい
と呼ばれる特別な状態にして、
チューリング機械を動かし始めます。
ただし、入力の文字列は有限の長さとし、テープの残りは
index 空白 space くうはく
と呼ばれる特別な記号 B で埋め尽くされているとします。

状態の中には、halt という特別なものがあり、
状態が halt になりますと、チューリング機械は停止します。
この時のテープの内容が、チューリング機械からの出力です。
ただし、空白は無視します。

状態が q で、テープの内容が

    ... B X Y Z B ...

で、ヘッドの位置が Y であることを、

    B X {q} Y Z B

と表現することにします。
この表現を、
index 計算状況 configuration けいさんしようきよう
と呼びます。
計算状況の遷移は、記号 |-- で表すことにします。

なお、動作関数で定義されていない引数については、
エラーで停止するものと考えます。

h3 チューリング機械の例 toc-turing-machine-examples

チューリング機械の例として、数値 x を入力として与えると、
x + 1 を出力するものを考えます。
ここで、x は負でない整数とします。
また、テープの上では、
数値 0 は T, 1 は TT, 2 は TTT, ... と表現することにします。
例えば、入力が 2 で出力が 3 という計算でしたら、
テープの内容を

    ... B T T T B ...

として動き始め、最後にテープの内容が

    ... B T T T T B ...

となって停止します。

チューリング機械の動作関数は次の通りです。

δ(q0, T) = (T, R, q1)
δ(q1, T) = (T, R, q1)
δ(q1, B) = (T, R, halt)

上記の入力例では、計算状況は以下のようになります。

B {q0} T T T B B |-- B T {q1} T T B B
                 |-- B T T {q1} T B B
                 |-- B T T T {q1} B B
                 |-- B T T T T {halt} B

例題 1.

以下は足し算を行うチューリング機械です。
ここで、入力は負でない整数とします。
数値のテープ表現は、0 は T, 1 は TT, 2 は TTT, ... とします。
入力の区切りは記号 S とします。
入力が 1 と 2 のとき出力が 3 になることを確認してください。

δ(q0, T) = (B, R, q1)
δ(q1, T) = (T, R, q1)
δ(q1, S) = (S, R, q2)
δ(q2, T) = (T, R, q3)
δ(q3, T) = (T, R, q3)
δ(q3, B) = (B, L, q4)
δ(q4, T) = (B, L, q5)
δ(q5, T) = (T, L, q5)
δ(q5, S) = (T, L, halt)

解答例 1.

B {q0} T T S T T T B |-- B B {q1} T S T T T B
                     |-- B B T {q1} S T T T B
                     |-- B B T S {q2} T T T B
                     |-- B B T S T {q3} T T B
                     |-- B B T S T T {q3} T B
                     |-- B B T S T T T {q3} B
                     |-- B B T S T T {q4} T B
                     |-- B B T S T {q5} T B B
                     |-- B B T S {q5} T T B B
                     |-- B B T {q5} S T T B B
                     |-- B B {halt} T T T T B B

h3 停止問題 toc-halting-problem

上記のチューリング機械は、どんな入力に対しても停止します。
しかし、一般的には、
チューリング機械は入力によって停止したりしなかったりします。
永久に同じ動作を繰り返したり、
際限なく数を数え続けたりという状態に陥りますと、
チューリング機械は停止しません。

チューリング機械を符号化して数値に置き換えますと、
チューリング機械の性質が計算できるようになります。
チューリング機械の
index 停止問題 halting problem ていしもんたい
とは、チューリング機械 (の符号) M と数値 x を入力として与えたとき、
M に x を与えて停止するならば数値 1 を出力して停止し、
そうでないならば数値 0 を出力して停止するという計算です。
この問題については、

    チューリング機械の停止問題を解くチューリング機械は存在しない。

ということが証明されています。

チューリング機械の計算能力については、
index チャーチの定立 Church's thesis ちやあちのていりつ
と呼ばれる主張があります。
これは、

    アルゴリズムが存在すれば、
    その問題を解くチューリング機械が必ず存在する。

ということです。
現在、チャーチの定立を疑う人はいません。

以上の二つから、

    計算機には解けない問題がある。

という結論が得られます。

チューリング機械という単純なモデルを定義し、
その計算能力を厳密に議論することによって、
計算機の理論的限界が導けるということが重要です。

h2 演習 10 toc-exercises

以下は引き算を行うチューリング機械です。
ここで、入力は負でない整数とし、引き算の結果は負にならないとします。
数値のテープ表現は、0 は T, 1 は TT, 2 は TTT, ... とします。
入力の区切りは記号 S とします。
入力が 3 と 2 のとき出力が 1 になることを確認してください。

δ(q0, T) = (B, R, q1)
δ(q1, T) = (T, R, q1)
δ(q1, S) = (S, R, q2)
δ(q2, T) = (T, R, q3)
δ(q3, T) = (T, R, q4)
δ(q3, B) = (B, L, q7)
δ(q4, T) = (T, R, q4)
δ(q4, B) = (B, L, q5)
δ(q5, T) = (B, L, q6)
δ(q6, T) = (T, L, q6)
δ(q6, S) = (S, L, q6)
δ(q6, B) = (B, R, q0)
δ(q7, T) = (B, L, q7)
δ(q7, S) = (T, L, halt)

10.2 演習10


10.3 レポート課題

今日の演習10の答案をkonishi@twcu.ac.jpあてにメールで送ってください。 メールには、学生番号、氏名、科目名、授業日(12月3日)を明記してください。


10.4 参考文献


[小西ホームページ]   [目次・索引]   [前の授業]   [次の授業]

2004年12月3日更新
konishi@twcu.ac.jp
Copyright (C) 2004 Zenjiro Konishi. All rights reserved.