P′′

提供: testwiki
2022年10月25日 (火) 16:00時点におけるimported>Nakamuraeによる版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

テンプレート:Infobox programming language

P′′ (P double prime:ピーダブルプライム[1])は1964年にコラド・ベーム[2][3]によって作成された、チューリングマシンの一種を記述するための言語である。

チューリングマシンを記述するがゆえにその仕様は原始的である。チューリングマシンにもかかわらず、状態遷移はテープの内容とテープヘッドの位置だけで表現されるので、有限オートマトンの概念が希薄である。

定義

𝒫 (以下 P′′)は以下のように4つの命令アルファベット {R,λ,(,)} におけるワードの集合として形式的に定義される(formally defined)。

文法

  1. Rλ は P′′ のワードである。
  2. もしも q1q2 が P′′ のワードならば、それらを繋げた q1q2 も P′′ のワードである。
  3. もしも q が P′′のワードならば、(q) も P′′ のワードである。
  4. 以上の3つの法則から得られるワードだけが P′′ のワードである。

意味論

  • {,c1,c2,,cn} は無限長のテープを搭載したチューリングマシンのテープ・アルファベット(テープに書かれるデータの種類)である。 は空白の記号であり、c0 と等価である。
  • P′′ の全命令は、全てのあり得るテープの構成の集合 X順列である。つまり、テープの内容とテープヘッドの位置の両方を考慮した全てのあり得る構成である[注釈 1]
  • α は述語(値を受け取ってから真偽が決定するもの)であり、現在位置のシンボルは ではないことを示している。これは命令ではなく、プログラム中で使用されない。しかし、その代わりとして言語の定義を補助するために使われる。
  • R は、(可能であれば)1セル分テープヘッドを右方向へ移動することを意味する。
  • λ は、現在位置のシンボル cic(i+1)mod(n+1) に置き換える(つまり、現在位置のシンボルが cn のときは c0 に置き換えられる)。そして、テープヘッドを1セル分左方向へ移動することを意味する。
  • q1q2関数の合成 q2q1 を意味する。言い換えると、命令 q1q2 の前に実行される。
  • (q) は、条件 α が成立している間だけ while ループで q を反復することを意味する。

他のプログラミング言語との関連

  • Brainfuck 言語は、P′′ の[注釈 2]非形式的な変種(informal variation)である(Brainfuck はテープの代わりにメモリを使うので、I/Oを扱わないところは異なる)。ベームはあらゆる計算可能関数を計算するのに十分な基本関数の集合のそれぞれに対して明確な P′′ のプログラムを提供している。使用したものは (, ) そして4つのワード rλRrrn(ここで rnrn 回の反復である)、 LrλR だけである。これらは6つの Brainfuck の命令 テンプレート:Tt と等価である。注意するべきは、cn+1c0 なので、現在位置のシンボルをn回インクリメントするとラップアラウンド(cn をインクリメントすると c0になること)する。そのため、一つの r によって、その結果は現在位置のシンボルをデクリメントすることになる(訳注:テープ・アルファベットは n+1 種類あるので、n回インクリメントするとラップアラウンドして1つ少ない数のテープ・アルファベットになる)。

プログラムの例

ベーム[2]は、x > 0 を満たす整数xの前の数 (x-1) を計算する以下のプログラムを提供している。

R(R)L(r(L(L))rL)Rr

これを等価のBrainfuckのプログラムに直接変換すると、

 >[>]<[[<[<]]<]>+

このプログラムは bijective base-k 記法で表現されているある一つの整数を想定している。c1,c2,ck1,2,,k にそれぞれエンコードされる。そして、数字列の前後に がある(例えば、bijective base-2 の場合、数字の8は c1c1c2 とエンコードされる。なぜなら、bijective base-2 において8は112である)。計算の最初と最後に数字列の前にある の上にヘッドが位置することになる。

注釈

テンプレート:Reflist

出典

テンプレート:Reflist

  1. https://github.com/Pbtflakes/pdbl
  2. 2.0 2.1 Böhm, C.: "On a family of Turing machines and the related programming language", ICC Bull. 3, 185-194, July 1964.
  3. Böhm, C. and Jacopini, G.: "Flow diagrams, Turing machines and languages with only two formation rules", CACM 9(5), 1966. (Note: This is the most-cited paper on the structured program theorem.)


引用エラー: 「注釈」という名前のグループの <ref> タグがありますが、対応する <references group="注釈"/> タグが見つかりません