2022年05月17日更新
Turing Machine というのは,1936年!! にイギリスの Alan Turing が編み出したとても単純な機能しか持たない理論的なコンピュータです.(googleすると簡単に見つかります) メモリーさえ持ちません.持っているのは「一本のテープ」と「文字を一度に1つ書き込めるヘッド」だけです.ヘッドは左右に1つずつ移動できます.そしてコンピュータは内部状態を持つことができます.このテープと内部状態がメモリーの代わりになります.私は去年(2021年春) 初めて "Computability and logic(Boolos,Jeffrey著)"という本で そのプログラミングを実際に知ったのですが,余りにも原始的なプログラムに逆に引かれました.普通なら一行で済むところが,何十行にもなります.例えば割り算のプログラムを書くのに1週間も掛かります.でもそれは魅力でもあります.「これはなかなか面白い」と思った一年後に"C言語による計算の理論(鹿島亮著)”という本を読んだのですが,それがダメ押しとなりました.こちらのTuring machine は前者のものと比べて,一度に文字を書くことと,移動することができるので,プログラムが前者のものに比べてずーと短くなり見通しが良くなります.それが斬新でまたまたハマってしまい,例題や練習問題(解答なし)を実際にMathematica(ver11)でプログラムを書きながら作成&検証しました.2度の遭遇でファイルも少し溜まったので,せっかくなので皆さんとシェアしたいと考えアップロードすることにしました.ファイルは3種類あります.
プログラムはやはり動かしてみないと面白さはわからないですね.でしょう?(^o^) Mathematicaをお持ちでない方でも,インターネット上では無料の Turing Machine シミュレーター が山ほど見つかります.「turing machine simulator」と Google すれば10個以上のサイトがすぐ見つかりました.(例えばココは,各ステップがよく分かるし,かつ入力も容易です.Mathematicaの入力形式からの変更もすぐできます.) 驚くことに iphone/ipad 用のアプリまで有りました.結構外国では人気のようです.Turingが見たらさぞ驚くことでしょう.(彼はあくまで理論的なマシーンとして考えたのではないでしょうか?実際に動かすことは考えてなかったと思います.いくらなんでもプログラミングが難しすぎます) Turing machine が誕生して今年で86年になります.100年とか特別な年ではないですが,やはりコンピューターは長い道のりを歩いてきたなーと感じます. なお自作の解答は間違っているかも知れません.また本の例題なども入力ミスが有るやもしれません.その場合はご連絡をいただけると幸いです.
個人的にお気に入りなのは,BinSeq, SeqBin, BB5です.直近の一週間は BusyBeaver(BB)
に興味を持っていました.詳しいことは下のBB5をご覧ください.ただしBB5は計算に5分もかかるプログラムが入っているので
「ノートブックを評価」する時はご注意ください.しかし初期条件を変えない場合は評価は不要です.また
cdf player で開けない場合は pdf をご覧ください.(Mathematicaで開ける場合でも
cdf player で開けないケースが時々あるようです.)
関数名 | 説明 | *.nb | *.cdf | |
1.Suc | Successor(後に来るもの). 2進数に 1 を加える | *.nb | `*.cdf | |
2.EQab | aとbの個数が一致するか否かを調べる | *.nb | *.cdf | |
3.BB3 | 状態数3,文字数1のBusy Beaver . 空白のテープに Xを 6 回書きます. | *.nb | *.cdf | |
4.Runner | 同じ文字を永遠に書き続ける (以上4つは「C言語による計算の理論」の例題) | *.nb | *.cdf | |
5.Adding | 2数の和.数は1の個数で表します. | *.nb | *.cdf | |
6.Multiplication | 2数の積. 以上の2つは「Computability&Logic」の例題から | *.nb | *.cdf | |
7.Minimum | 2数の最小値.「Computability&Logic」の演習問題. | *.nb | *.cdf | |
8.Subtraction | 2数の差. (和と積があればこれも作りたくなりますよね?) | *.nb | *.cdf | |
9.Quotient | 2数の商.(和と積があればこれも作りたくなりますよね?) | *.nb | *.cdf | |
10.Pred | Suc の逆.以下の6つは「C言語による〜」の練習問題で,その自作解答. | *.nb | *.cdf | |
11.SeqBin | aだけからなる文字列に対し,その個数を2進数で出力する. | *.nb | *.cdf | |
12.BinSeq | SeqBin の逆.2進数に対し,その個数のaを出力する. | *.nb | *.cdf | |
13.Eraseb | a,bからなる文字列の最初のbのみ消去し,間を詰める. | *.nb | *.cdf | |
14.EraseAllb | a,b,cからなる文字列の全てのbを消去し,間を詰める. | *.nb | *.cdf | |
15.Substba | [bにaを代入] EraseAllb の後,更に a と同じ個数の b を左端に加える | *.nb | *.cdf | |
16.BB4 | BB3の発展.状態数4,文字数1のBusy Beaver (BB) . 13個のXを書き込みます. | *.nb | *.cdf | |
17.BB5 | 状態数5,文字数1のBB . 4098個のXを書き込みます. | *.nb | *.cdf |