ユニバーサル再帰関数の作成[終了]


9

普遍的な再帰関数の短い明示的な構成はありますか?私が見たすべての定義は、何らかの方法でチューリングマシンの番号付けを含んでいます。これは可能ですが、より高いレベルのプログラミング言語(Python、Haskellなど)で書くことは困難で管理しにくいようです。


質問はもともとSOで尋ねられましたが、こちらのほうが適切だと思います。
sdcvvc 2010

1
私の理解では、普遍的な再帰関数は、いくつかの再帰関数(または同等のチューリングマシン)を与えて、再帰関数のインデックスと入力から結果を計算できるようにすることです。したがって、「チューリングマシンに番号を付けない普遍的な再帰関数」は、私にはもっともらしく聞こえません。
伊藤剛

3
研究レベルではありません。チューリング完全言語のインタープリターはすべて、普遍的な再帰関数です。
ウォーレンシュディ

回答:



13

承知しました。Godelのプリミティブな再帰関数をそれぞれ計算するルーチンを記述し、無制限の検索演算子のルーチンを記述します。この方法で計算できる関数のセットは、チューリングマシンが計算できる関数のセットと同等です。詳細はこちら

不利な点は、これらの単純な操作の観点から、ユニバーサルプログラムへの入力をフレーム化する必要があることです。もちろん、それがコンパイラーの目的です。


10

チューリング完全な任意の言語のインタプリタは、普遍的な再帰関数です。C ++やPythonなどの高級言語用のインタプリタがあります。

gg


チューリングマシン(またはレジスタマシン、または再帰関数)のインタープリターも汎用の再帰関数であり、それらを実装することは難しくありません。私は数年前にC ++でそれらを実装しましたが、Pythonではさらにシンプルになると確信しています。Googleを使用してください。インターネット上には多くの無料のシミュレーターがあり、その一部はオープンソースですらあります。
Kaveh

8

ユニバーサル関数uは、Haskellのような言語(副作用なし、高次関数)で非常に簡単に記述できます。

u f x = f x

この関数はu、プログラム(の説明)受け入れるため普遍的でありf、入力テープをx、そしてあなたに実行した結果告げるfのをx

この答えは完全に深刻なわけではありませんが、Haskellのような言語のコンパイラまたはインタープリタには、ユニバーサル関数に必要なすべての構築部分がすでに含まれていることを示しています。この話の教訓は、チューリングマシンの観点からユニバーサル関数を実装することを心配するよりも、コンパイラーとインタープリターがどのように機能するかを研究することに時間を費やすほうがよいということです。


ただし、u関数を取ります-私はそれを高階関数と呼びます。私が欲しいuの整数、または定期的な代数的データ型を取ります。への引数が具体的である限り、私は特定の計算モデルを強制しません。uたとえば、文字列との間でシリアル化できます。
sdcvvc 2010年

実際のマシンでは(コードがコンパイルされると)u、有限のバイトシーケンスであるクロージャーを受け取ります。通常のutmの定理でさえ、u取る整数は関数を表します。
Andrej Bauer

5

John Trompによるこの論文も、組み合わせロジックを使用して確認してください。以前の記事は、明らかに利用できなくなったようでさえ、すっきりしていました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.