以下のチューリングマシンを作成してみましょう.(ヒント:教科書図6.6の問題の場合には,出力する文字は「c
」の1種類だけでしたが,2種類以上の文字を出力することもできます.たとえば,2つの文字列を比較する問題で前の文字列を処理する際は「c
」,後ろの文字列を処理する際は「d
」を出力することで問題を解きやすくなる場合があります.)
Exercise t1: anbn
文字「a
」と「b
」からなる長さ2以上の文字列 x が入力された時に,いくつかの連続した「a
」の後に同数の「b
」が続く文字列である場合に終了状態で停止するチューリングマシンを作成しなさい.
ab -> 受理 abab -> 拒否 aaab -> 拒否 bbaa -> 拒否 aabb -> 受理 aaabb -> 拒否 aaabbb -> 受理
Exercise t2: equal
文字「a
」を0, 文字「b
」を1の代わりに使います.正の整数 x と y を2進数で表し(最上位は必ず「b
」(1の代わり)),文字列をそれぞれ sx, sy とします.文字列 sxcsy を入力として,x = y の時にのみ終了状態で停止するチューリングマシンを作成しなさい(x, y の文字列表現は一意に表せるので,文字列として sxとsy が等しいと判定することができます).
bbcbaa -> 拒否 (3 != 4) bbbcbaa -> 拒否 (7 != 4) babcbab -> 受理 (5 == 5) bcb -> 受理 (1 == 1)
Exercise t3: greater
文字「a
」を0, 文字「b
」を1の代わりに使います.正の整数 x と y を2進数で表し(最上位は必ず「b
」(1の代わり)),文字列をそれぞれ sx, sy としなさい.文字列 sxcsy を入力として,x > y の時にのみ終了状態で停止するチューリングマシンを作成しなさい.
bbcbaa -> 拒否 (11(2) = 3 < 4 = 100(2)) bbbcbaa -> 受理 (111(2) = 7 > 4 = 100(2)) babcbab -> 拒否 (101(2) = 5 = 101(2)) baaacbbb -> 受理 (1000(2) = 8 > 7 = 111(2))