2022年05月17日更新

 Mathematica による Turing Machine Program

−もう86歳に成ったのですねー

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 *.pdf
1.Suc Successor(後に来るもの). 2進数に 1 を加える *.nb `*.cdf *.pdf
2.EQab aとbの個数が一致するか否かを調べる *.nb *.cdf *.pdf
3.BB3 状態数3,文字数1のBusy Beaver . 空白のテープに Xを 6 回書きます. *.nb *.cdf *.pdf
4.Runner 同じ文字を永遠に書き続ける (以上4つは「C言語による計算の理論」の例題) *.nb *.cdf *.pdf
5.Adding 2数の和.数は1の個数で表します. *.nb *.cdf *.pdf
6.Multiplication 2数の積. 以上の2つは「Computability&Logic」の例題から *.nb *.cdf *.pdf
7.Minimum 2数の最小値.「Computability&Logic」の演習問題. *.nb *.cdf *.pdf
8.Subtraction 2数の差. (和と積があればこれも作りたくなりますよね?) *.nb *.cdf *.pdf
9.Quotient 2数の商.(和と積があればこれも作りたくなりますよね?) *.nb *.cdf *.pdf
10.Pred Suc の逆.以下の6つは「C言語による〜」の練習問題で,その自作解答. *.nb *.cdf *.pdf
11.SeqBin aだけからなる文字列に対し,その個数を2進数で出力する. *.nb *.cdf *.pdf
12.BinSeq SeqBin の逆.2進数に対し,その個数のaを出力する. *.nb *.cdf *.pdf
13.Eraseb a,bからなる文字列の最初のbのみ消去し,間を詰める. *.nb *.cdf *.pdf
14.EraseAllb a,b,cからなる文字列の全てのbを消去し,間を詰める. *.nb *.cdf *.pdf
15.Substba [bにaを代入] EraseAllb の後,更に a と同じ個数の b を左端に加える *.nb *.cdf *.pdf
16.BB4 BB3の発展.状態数4,文字数1のBusy Beaver (BB) . 13個のXを書き込みます. *.nb *.cdf *.pdf
17.BB5 状態数5,文字数1のBB . 4098個のXを書き込みます. *.nb *.cdf *.pdf


禁無断転載. All rights reserved. Top pageへ