プリミティブな再帰関数の意味は何ですか?


7

アッカーマン関数が再帰的であることの証明を研究していましたが、原始的な再帰的ではありませんでした。なぜそれが重要なのですか?プリミティブな再帰関数の意味は何ですか?


いくつかの関連質問:123。あなたの質問について、「重要性」をどの方向に解釈させたいですか?歴史的に、計算可能性理論では、実際には...?
ラファエル

@Raphael Yuval Filmusは、この問題についてコンピューターによる理論的な洞察を提供しますが、その歴史的意義についての知識があれば、それも興味深いでしょう。
無題

回答:


6

停止の問題は特定できませんが、ほとんどのプログラムでは、明らかな無限ループを探すことで、停止するかどうかを簡単に確認できることに異議を唱える人もいるかもしれません。逆に、プログラムが常に終了するようにしたい場合は、すべてのループのループ反復の数をアプリオリに制限することで終了できます。たとえば、二乗を繰り返すための疑似コードを考えてみます。

def power(x, y, p):
   "compute x^y mod p"
   assert y >= 0
   result = 1
   while y > 0:
     if x is odd: result = result * x (mod p)
     y = y div 2
     x = x * x
   return result

この手順が常に終了することをどうやって知るのですか?1つの方法は、事前にループをバインドすることです。

def power(x, y, p):
   "compute x^y mod p"
   assert y >= 0
   bound = y
   result = 1
   loop bound times:
     if x is odd: result = result * x (mod p)
     y = y div 2
     x = x * x
     if y == 0: break
   return result

これで、このプログラムが終了することは明らかです。他の場所で間違いがなければ、2つのプログラムは同じ出力を生成します。

プリミティブ再帰関数は、すべてのループが制限されており、再帰がないプログラムによって計算される関数です。

再帰は許可されていませんが(境界がないため)、ループでシミュレートできます。ここで、いくつかの質問をすることができます。

  1. すべての計算可能な関数はこの形式で提示できますか?
  2. そうでない場合、このクラスとすべての計算可能な関数の関係は何ですか?

1に答えると、アッカーマン関数のように、「速く」成長する特定の計算可能な関数が原始的な再帰的ではないことを示すことができます。逆に、成長率が「合理的」であるすべての関数は、原始的な再帰的です。そして、すべての計算可能な関数は、フォームで述べることができますfバツ=ψyφバツy プリミティブな再帰 φψ、私たちが考えるところ φ 述語として。


1)そのようなものboundはすべて、プリミティブな再帰関数で計算可能でなければなりません。2)「プリミティブ再帰」という用語を「再帰を使用しない」と説明するのは奇妙です。私たちはできる再帰だけではない任意の種類を使用しています。
ラファエル

@Raphael 1)別の変数によって制限されます。2)名前で言及されている再帰はループで表されます。すべての計算可能な関数が再帰関数とも呼ばれる場合、用語は首尾一貫している必要はありませんが、チューリングマシンは(明白な)再帰を許可しません。
Yuval Filmus 14

1

私の計算能力コースを受講したとき、これは次のように紹介されました:

プリミティブな再帰は、計算を定義する自然な方法です(数学の知識がある場合はおそらく明白です。プログラマにとっては、再帰は逆方向のループであると理解しやすいでしょう)。

したがって、プリミティブな再帰を習得したら、疑問に思うでしょう。

まあ、そうではありません。まず、未定義の値が不足しています。では、プリミティブな再帰を部分的なプリミティブな再帰関数に拡張できます。

それでも、プリミティブな再帰的ではないいくつかの(完全な)計算可能な関数があります。まあ、アッカーマンはその一つです。そのため、アッカーマン関数が重要です。「再帰」は「プリミティブな再帰+最小化」であることが判明し、証明することはできませんが、計算することはこれですべてです。

したがって、原始的な再帰関数は重要です。

  1. 単純な形式
  2. 再帰の定義のベース

確かではありません-多分誰かが知っているでしょう-しかし、アッカーマンが彼の関数を思いつく前に、数学者は計算可能=プリミティブな再帰+部分関数であると考えていました。

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