(Translated by https://www.hiragana.jp/)
FRACTRAN - Wikipedia コンテンツにスキップ

FRACTRAN

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』

FRACTRAN(フラクトラン)チューリング完全かんぜん難解なんかいプログラミング言語げんごで、数学すうがくしゃジョン・コンウェイによって開発かいはつされた。この言語げんごかれたプログラムは、せい整数せいすうn初期しょきとしてせい分数ぶんすうれつである。プログラムは、以下いかのように整数せいすうn更新こうしんすることによって実行じっこうされる。

  1. nf整数せいすうとなるようなリストない最初さいしょ分数ぶんすうfにおいて、nnf置換ちかんする。
  2. nをかけて整数せいすうとなるような分数ぶんすうがリストないになくなるまでこれをかえし、停止ていしする。

Conway 1987には、PRIMEGAME(素数そすうゲーム)とばれる、連続れんぞくする素数そすう探索たんさくする以下いかのFRACTRANプログラムがある。n=2としてはじめ、このFRACTRANプログラムは以下いか整数せいすうれつ生成せいせいする。

2ののち、この数列すうれつ以下いかの2のべきじょうふくむ。オンライン整数せいすうれつだい辞典じてん数列すうれつ A034785

これらの2のべきじょう指数しすう部分ぶぶんは2, 3, 5, …というような素数そすうである。

FRACTRANプログラムを理解りかいする

[編集へんしゅう]

FRACTRANプログラムはレジスタが引数ひきすうn素数そすう指数しすうとして格納かくのうされるレジスタマシンとしてることができる。

ゲーデルすうもちいて、せい整数せいすうn任意にんいかず任意にんいおおきさのせい整数せいすう変数へんすう符号ふごうすることができる。[注釈ちゅうしゃく 1] かく変数へんすうは、整数せいすう素因数そいんすう分解ぶんかいによって素数そすうのべきじょう符号ふごうされる。たとえば、整数せいすうは、レジスタの状態じょうたい以下いかのようになっていることをあらわす。

  • ある変数へんすう(これをv2とする)のが2である。
  • ほかの変数へんすうの2つ(これをv3とv5とする)のが1である。
  • ほかのすべての変数へんすうが0である。

FRACTRANプログラムは、せい分数ぶんすうれつである。すべての分数ぶんすうはそれぞれ、1つ以上いじょう変数へんすうをテストする命令めいれいあらわし、それはその分母ぶんぼ素因数そいんすうによってあらわされる。たとえば、はv2とv5を評価ひょうかする。 かつ のとき、v2から2を、v5から1をそれぞれき、v3に1を、v7に1をくわえる。以下いかれいげる。FRACTRANプログラムは分数ぶんすうのリストにぎず、これらの評価ひょうか演算えんざん命令めいれい加算かさん減算げんざん命令めいれい)はFRACTRAN言語げんごにおいて唯一ゆいいつゆるされた命令めいれいである。さらに、以下いか制約せいやく適用てきようされる。

  • 命令めいれい実行じっこうされるごとに、評価ひょうかされる変数へんすうデクリメント(減算げんざんされる。
  • おな変数へんすうたいして、1つの命令めいれいインクリメント(加算かさんデクリメント(減算げんざん両方りょうほうすることはできない。(そうでなければ、その命令めいれいあらわ分数ぶんすうすんで約分やくぶんすうにならない。)したがって、すべてのFRACTRANの命令めいれい変数へんすう評価ひょうかにおいてその変数へんすう消費しょうひする。
  • FRACTRANの命令めいれいは、変数へんすう0かどうかを直接ちょくせつ評価ひょうかすることはできない。(しかし、既定きてい命令めいれい作成さくせいして、それを特定とくてい変数へんすう評価ひょうかするべつ命令めいれいのち配置はいちすることで、間接かんせつてき評価ひょうか可能かのうである。)

簡単かんたんなプログラムの作成さくせい

[編集へんしゅう]

もっと単純たんじゅんなFRACTRANプログラムは以下いかの1つの命令めいれいである。このプログラムは以下いか単純たんじゅんアルゴリズムあらわされる。

FRACTRAN
命令めいれい
条件じょうけん アクション
v2 > 0 v2から1をき、v3に1をくわえる
v2 = 0 停止ていしする

かたちあたえられた初期しょきたいし、このプログラムは以下いか数列すうれつ計算けいさんする。

, , …

これをステップおこない、最終さいしゅうてきに2でれなくなり、をかけても整数せいすうとならなくなったとき、レジスタマシンは出力しゅつりょくして停止ていしする。これにより、2つの整数せいすう加算かさんされる。

乗算じょうざん」は、「加算かさん」を「ループする」ことでつくることができる。これには、アルゴリズムにStateオブジェクト指向しこうプログラミングにおけるデザインパターンの1つ)を導入どうにゅうする必要ひつようがある。このアルゴリズムは引数ひきすうり、生成せいせいする。

State 条件じょうけん アクション つぎのState
A v7 > 0 v7から1をき、v3に1をくわえる A
v7 = 0 かつ
v2 > 0
v2から1を B
v7 = 0 かつ
v2 = 0 かつ
v3 > 0
v3から1を A
v7 = 0 かつ
v2 = 0 かつ
v3 = 0
停止ていしする
B v3 > 0 v3から1をき、v5とv7にそれぞれ1をくわえる B
v3 = 0 なし A

BのStateはv3とv5を加算かさんしv3をv7にうつすループである。また、AのStateは、BのStateをv2かいかえ外側そとがわ制御せいぎょループである。AのStateはまた、BのStateのループが完了かんりょうしたのち、v7からv3にうつす(つまり、v3からいちv7に移動いどうして、またv3にもどる)。

あたらしい変数へんすうをStateインジケータとしてもちいることで、Stateを実行じっこうすることができる。BようのStateインジケータはv11とv13である。ここで、1つのループにState制御せいぎょインジケータはだいいちフラグ(v11)とだいのフラグ(v13)の2つが必要ひつようとなることに留意りゅういされたい。なぜなら、それぞれのインジケータは評価ひょうかされると消費しょうひされるため、「現在げんざいのStateを継続けいぞくせよ」とうためにだいのインジケータが必要ひつようとなるからである。このだいのインジケータは、つぎ命令めいれいだいいちのインジケータに還元かんげんされ、ループが継続けいぞくする。

乗算じょうざんアルゴリズムのひょうにFRACTRAN Stateインジケータと命令めいれい追加ついかすると以下いかのようになる。

FRACTRAN
命令めいれい
State State
インジケータ
条件じょうけん アクション つぎのState
A なし v7 > 0 v7から1をき、v3に1をくわえる A
v7 = 0

かつ v2 > 0

v2から1を B
v7 = 0

かつv2 = 0 かつv3 > 0

v3から1を A
v7 = 0
かつv2 = 0 かつ
v3 = 0
停止ていしする
B v11, v13 v3 > 0 v3から1をき、v5とv7にそれぞれ1をくわえる B
v3 = 0 なし A

FRACTRAN命令めいれいすとき、最後さいごにAのStateの命令めいれい必要ひつようになる。AのStateにはインジケータがないからである。Stateインジケータが設定せっていされていないのが既定きていのStateである。ゆえに、乗算じょうざんのFRACTRANプログラムは以下いかのようになる。入力にゅうりょく2a3bたいしてこのプログラムは5ab出力しゅつりょくする。 [注釈ちゅうしゃく 2]

上記じょうきのFRACTRANプログラムで3×2を計算けいさんする(3×2は6であるから、入力にゅうりょくで、出力しゅつりょくとなる)

同様どうように、FRACTRAN「減算げんざん」をつくることができる。さらに、減算げんざんかえすことで、以下いかの「しょうとあまり」のアルゴリズムをつくることもできる。

FRACTRAN
命令めいれい
State State
インジケータ
条件じょうけん アクション つぎのState
A v11, v13 v2 > 0 かつ
v3 > 0
v2とv3からそれぞれ1をき、v7に1をくわえる A
v2 = 0 かつ
v3 > 0
v3から1を X
v3 = 0 v5に1をくわえる B
B v17, v19 v7 > 0 v7から1をき、v3に1をくわえる B
v7 = 0 なし A
X v3 > 0 v3から1を X
v3 = 0 停止ていしする

FRACTRANプログラムにすと、以下いかのようになる。入力にゅうりょく2n3d11にたいして、このプログラムは5q7r出力しゅつりょくする。ここに、n = qd + r かつ 0 ≤ r < dである。

コンウェイの素数そすうアルゴリズム

[編集へんしゅう]

コンウェイの素数そすう生成せいせいアルゴリズム(前述ぜんじゅつ)は本質ほんしつてきに、ふたつのループないしょうとあまりのアルゴリズムである。(ただし0 ≤ m < n)のかたちあたえられた入力にゅうりょくたいし、アルゴリズムはn+1の最大さいだい約数やくすうkつけるまでn+1をnから1までの整数せいすうでそれぞれろうとする。そして2n+1 7k-1かえし、かえす。このアルゴリズムで生成せいせいされるStateの番号ばんごうれつはkが1のとき2のべきじょう生成せいせいする(7の指数しすうは0になる)のは、2の指数しすう素数そすうのときのみである。Havil (2007)に、コンウェイのアルゴリズムの段階だんかいてき説明せつめいがある。

このプログラムにおいて、素数そすう2, 3, 5, 7 ... をるには、それぞれ19, 69, 281, 710, ...のステップが必要ひつようとなる。(オンライン整数せいすうれつだい辞典じてん数列すうれつ A007547

コンウェイのプログラムには前述ぜんじゅつのものより分数ぶんすうが2つことなるはん存在そんざいする。[1]こちらのほうすこはやい。2, 3, 5, 7... をるのには19, 69, 280, 707... のステップが必要ひつようである。(オンライン整数せいすうれつだい辞典じてん数列すうれつ A007546)このプログラムの特定とくてい整数せいすうN素数そすうであるか調しらべる反復はんぷくには、以下いかかずのステップが必要ひつようである。このとき、最大さいだいN整数せいすう約数やくすうであり、ゆか関数かんすうである。[2]


以下いかは、1999ねんの、Devin Kilminsterによる、これよりすこみじかい、10の命令めいれいからなるプログラムである。[3]初期しょきn = 10において、連続れんぞくした素数そすう後続こうぞくする10のべきじょうによって生成せいせいされる。

れい

[編集へんしゅう]

以下いかのFRACTRANプログラムつまり は、2しん記数きすうほうにおけるaハミングおも H(a)、すなわちa2進数しんすう表記ひょうきにおける1個数こすう計算けいさんする。入力にゅうりょくは2a出力しゅつりょく13H(a)である。[4]このプログラムを解析かいせきすると以下いかのようになる。

FRACTRAN
命令めいれい
State State
インジケータ
条件じょうけん アクション つぎのState
A v5, v11 v2 > 1 v2から2をき、v3に1をくわえる A
v2 = 1 v2から1をき、v13に1をくわえる B
v2 = 0 なし B
B None v3 > 0 v3から1をき、v2に1をくわえる B
v3 = 0 かつ
v7 > 0
v7から1をき、v2に1をくわえる A
v3 = 0 かつ
v7 = 0 かつ
v2 > 0
v2から1をき、v7に1をくわえる B
v2 = 0 かつ
v3 = 0 かつ
v7 = 0
停止ていしする

注釈ちゅうしゃく

[編集へんしゅう]
  1. ^ Gödel numbering ゲーデルすうは、慣例かんれい適用てきようして、直接ちょくせつまけ整数せいすう浮動ふどう小数点しょうすうてんすう文字もじれつ間接かんせつてきあらわすようにすることはできるが、直接的ちょくせつてき使用しようすることはできない。FRACTRANに提案ていあんされている拡張かくちょう機能きのうにはFRACTRAN++(Written in English)およBag(Written in English)などがある。
  2. ^ Esolang FRACTRAN page(Written in English)類似るいじした乗算じょうざんのアルゴリズムの説明せつめいがある。

関連かんれん項目こうもく

[編集へんしゅう]

参考さんこう資料しりょう

[編集へんしゅう]
  1. ^ Guy 1983, p. 26; Conway & Guy 1996, p. 147
  2. ^ Guy 1983, p. 33
  3. ^ Havil 2007, p. 176
  4. ^ John Baez, Puzzle #4, The n-Category Café

 

  • Guy, Richard K. (1983). “Conway's Prime Producing Machine”. Mathematics Magazine (Taylor & Francis) 56 (1): 26–33. doi:10.1080/0025570X.1983.11977011. https://www.tandfonline.com/doi/abs/10.1080/0025570X.1983.11977011. 
  • Conway, John H. (1987). “FRACTRAN: A simple universal programming language for arithmetic”. Open Problems in Communication and Computation (Springer-Verlag New York, Inc.): 4–26. doi:10.1007/978-1-4612-4808-8_2. ISBN 978-1-4612-9162-6. 
  • Conway, John H.; Guy, Richard K. (1996). The Book of Numbers. Springer-Verlag New York, Inc.. ISBN 0-387-97993-X. https://archive.org/details/bookofnumbers0000conw 
  • Havil, Julian (2007). Nonplussed!. Princeton University Press. ISBN 978-0-691-12056-0. https://archive.org/details/nonplussedmathem00havi 
  • Roberts, Siobhan (2015). “Criteria of virtue”. Genius At Play - The Curious Mind of John Horton Conway. Bloomsbury. pp. 115–119. ISBN 978-1-62040-593-2 

外部がいぶリンク

[編集へんしゅう]