なぜ計算可能な関数は再帰関数とも呼ばれますか?


23

計算可能性理論では、計算可能関数は再帰関数とも呼ばれます。少なくとも一見、日常のプログラミングで「再帰的」と呼ばれるもの(つまり、自分自身を呼び出す関数)と共通点はありません。

計算可能性の文脈における再帰の実際の意味は何ですか?これらの関数が「再帰的」と呼ばれるのはなぜですか?

言い換えると、「再帰性」の2つの意味の関係は何ですか?



3
μ演算子が含まれているため、不正です。これは最小化演算子ですが、もちろん最小化は再帰とはほとんど関係ありません。だから、誰か(Kleene)が「再帰的」はいい音だと思っていたようで、彼はその名前を使う言い訳を発明しました。後になって、ロバート・ソアールは「計算可能」ははるかに良く聞こえ、「再帰的」は初期のマーケティングのトリックに過ぎなかったと説明し、誰もが同意した。
トーマスクリンペル

3
原始的な再帰関数についてはどうですか?ウィキペディアからコピーされ、および。それは自分自身を呼び出す関数です。h(0,x1,,xk)=f(x1,,xk)h(S(y),x1,,xk)=g(y,h(y,x1,,xk),x1,,xk)
ヘンドリック

3
@GoloRoden「計算可能性」のタグ記述(この質問に使用した)が「計算可能性理論、別名再帰理論」と言っていることに注意してください。ゲーデルは関数を再帰と呼んだが、この用語は計算可能に進化した。おそらくあなたのような混乱を避けるために。計算可能性理論を(集中的に)研究する人々は、その根を「尊重する」ために再帰理論という用語を使用する傾向があります。
オーベロン

1
theyrは再帰的に定義されているため、つまり「より複雑な関数は、以前に定義された単純な関数に関して定義されている」ため
Nikos M.

回答:


13

いくつかの基本機能を定義します。

  • ゼロ関数

    zeroNNバツ0
  • 後継機能

    sあなたはccNNバツバツ+1
  • 投影関数

pnNnNバツ1バツ2バツnバツ

今から私が使用する上示すためにX 1X 2... XのNバツn¯バツ1バツ2バツn

構成を定義します。

与えられた機能

  • それぞれ署名 N kNg1g2gmNkN
  • fNmN

次の関数を作成します。

hNkNバツk¯hバツk¯=fg1バツk¯g2バツk¯gmバツk¯

プリミティブな再帰を定義する:

与えられた機能

  • fNkN
  • gNk+2N

次の(区分的)関数を作成します。

hNk+1Nバツk¯y+1{fバツk¯y+1=0gバツk¯yhバツk¯yy+1>0

使用して製造することができるすべての機能組成物原始再帰基本的な機能は、と呼ばれている原始再帰的。定義により、そのように呼ばれます。自分自身を呼び出す関数とのリンクは存在しますが、それらを互いにリンクしようとする必要はありません。再帰を同音異義語と考えるかもしれません。

上記のこの定義と構造は、計算可能なすべての関数をキャプチャしようとして、ゲーデル(他の少数の人々も関与)によって構築されました。つまり、その関数のチューリングマシンが存在します。チューリングマシンの概念はまだ説明されていないか、少なくとも非常に曖昧であることに注意してください。

(残念ながら)アッカーマンと呼ばれる誰かがやって来て、次の関数を定義しました:

  • AckN2N
  • Ack0y=y+1
  • Ackバツ+10=Ackバツ1
  • Ackバツ+1y+1=AckバツAckバツ+1y

Ack

Ack

限りない最小化

  • gNkN
  • [fバツk¯y=0 そして fバツk¯z 定義されている z<y そして fバツk¯z0]

    gバツk¯=y

    gバツk¯

gバツ1バツ2バツkf


上記で定義されたすべての構成を使用して構成できるすべての関数は、再帰的と呼ばれます。繰り返しになりますが、名前の再帰は単に定義によるものであり、必ずしも自分自身を呼び出す関数と相関があるわけではありません。本当に、それを同音異義語と考えてください。

Ack

Ack

興味があれば、ゲーデルのクラスを大きくしようとすることができます。無制限の最小化の「反対」を定義しようとすることができます。つまり、無制限の最大化、つまり最大のルートを見つける関数です。ただし、その関数を計算するのは難しい(不可能な)場合があります。あなたはに読み込むことができるビジービーバー問題しようとする無限の最大化を適用します。


4
私は、与えられた定義が実際に質問に答えていないことを知っていますが、私の答えは一種の再帰/計算可能性理論の進化を説明しています。読む価値があるかもしれません。
オーベロン

私はそれが好きです、あなたの努力に感謝します:
ゴロ・ローデン

hバツ1バツ2バツk0=fバツ1バツ2バツkhバツ1バツ2バツk0。また、次の箇条書きのelse句の前にthen句はありません。
エリックタワーズ

2
μ

1
あなたの答えにはかなりの数の誤った記述があります。回答の履歴を作成しないでください。
カヴェー

17

計算可能性理論の創始者は数学者でした。彼らは、コンピューターが登場する前に、計算可能性理論と呼ばれるものを設立しました。数学者が計算できる関数を定義する方法は何でしたか?再帰的な定義によって!

そのため、チューリングマシンやラムダ計算、レジスタマシンなどの他の計算モデルが登場する前に、再帰関数がありました。そのため、人々はこれらの関数を再帰関数と呼びました。チューリングマシンや他のモデルが正確に計算できるものであることが判明したという事実は、後のイベントです(ほとんどがKleeneによって証明されています)。

μ

再帰理論に使用されるフィールドの名前。しかし、最近の数十年間で、再帰理論からよりコンピュータサイエンスなもの(vs. mathy)に、より魅力的な名前に名前を変更することに成功しました。その結果、この分野は現在、計算可能性理論と呼ばれています。しかし、初期の数十年の本、論文、会議などを見ると、それらは計算理論ではなく再帰理論と呼ばれています。Soare自身の1987年の本(名前を計算可能性理論に変更することを推進した主な人物)のタイトルでさえ、「再帰的に列挙可能な集合と学位」です。

歴史についてもっと知りたいなら、それについて読むのに楽しくて良い場所は、オディフレッディによる古典再帰理論の最初の章です。


7

ロバート・ソアはこの問題に関するエッセイを書いた。彼によると、(一般的な)再帰関数という用語は、ある種の相互再帰を使用してそれらを定義したゲーデルによって造られました。後に他の同等の定義が見つかりましたが、名前は固まりました。

詳細については、Soareのエッセイをお勧めします。


0

長いコメントを書く代わりに、答えを追加することにしました:

再帰的定義されているため、「以前に定義されたより単純な関数に関して、より複雑な関数が定義されている

この種の反復または増分手順は、明確に定義された関数を作成します(数学的な意味で)

これが数学用語の再帰性の意味です。プログラミング用語では、これが再帰にどのように関係するかを以下で参照してください。

この手順を、数学の再帰性の例でもある(数学)帰納法などの手法や方法と比較してください。

プログラミングには、工学的なものだけでなく数学的なものもあります。

この(通常は建設的な)手順は、オペレーティングシステムの用語ではブートストラップとも呼ばれます。

しかし、ランタイム再帰同じ機能の(つまり、その実行時に自分自身をcalingそれが(うーん、必要があります)で、すでに計算値(または引数)で、または他の言葉で発生しなければならないので、)すでに計算結果セットの一部で、また、上記の意味で再帰的です。つまり、「以前に定義された関数(およびその値)に対して定義されています

それ以外は明確に定義されておらず、Stack Overflowのようなものにつながります:))))

オペレーティングシステムからさらに例を挙げると、ランタイム再帰(それ自体を呼び出す)は、特定の更新(コア更新など)後に再起動するオペレーティングシステムの類似物と見なすことができます。多くのOSは次の手順を実行します。

  1. 低レベルのルーチン(I / Oなど)をロードする初期ブート
  2. 必要な更新を行います(低レベルのルーチンを使用)
  3. 再起動(事実上、それ自体を再呼び出し)しますが、今回はより複雑なルーチン(またはシステム全体)をロードします

Auberonの美しい答えは、この種の手順をより詳細に示しています。

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