目次 | 索引 |
---|---|
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の答案をkonishi@twcu.ac.jpあてにメールで送ってください。 メールには、学生番号、氏名、科目名、授業日(12月3日)を明記してください。