計算可能性理論では、計算可能関数は再帰関数とも呼ばれます。少なくとも一見、日常のプログラミングで「再帰的」と呼ばれるもの(つまり、自分自身を呼び出す関数)と共通点はありません。
計算可能性の文脈における再帰の実際の意味は何ですか?これらの関数が「再帰的」と呼ばれるのはなぜですか?
言い換えると、「再帰性」の2つの意味の関係は何ですか?
計算可能性理論では、計算可能関数は再帰関数とも呼ばれます。少なくとも一見、日常のプログラミングで「再帰的」と呼ばれるもの(つまり、自分自身を呼び出す関数)と共通点はありません。
計算可能性の文脈における再帰の実際の意味は何ですか?これらの関数が「再帰的」と呼ばれるのはなぜですか?
言い換えると、「再帰性」の2つの意味の関係は何ですか?
回答:
いくつかの基本機能を定義します。
ゼロ関数
後継機能
投影関数
今から私が使用する上示すために(X 1、X 2、... 、XのN)
構成を定義します。
与えられた機能
次の関数を作成します。
プリミティブな再帰を定義する:
与えられた機能
次の(区分的)関数を作成します。
使用して製造することができるすべての機能組成物と原始再帰の基本的な機能は、と呼ばれている原始再帰的。定義により、そのように呼ばれます。自分自身を呼び出す関数とのリンクは存在しますが、それらを互いにリンクしようとする必要はありません。再帰を同音異義語と考えるかもしれません。
上記のこの定義と構造は、計算可能なすべての関数をキャプチャしようとして、ゲーデル(他の少数の人々も関与)によって構築されました。つまり、その関数のチューリングマシンが存在します。チューリングマシンの概念はまだ説明されていないか、少なくとも非常に曖昧であることに注意してください。
(残念ながら)アッカーマンと呼ばれる誰かがやって来て、次の関数を定義しました:
限りない最小化
上記で定義されたすべての構成を使用して構成できるすべての関数は、再帰的と呼ばれます。繰り返しになりますが、名前の再帰は単に定義によるものであり、必ずしも自分自身を呼び出す関数と相関があるわけではありません。本当に、それを同音異義語と考えてください。
興味があれば、ゲーデルのクラスを大きくしようとすることができます。無制限の最小化の「反対」を定義しようとすることができます。つまり、無制限の最大化、つまり最大のルートを見つける関数です。ただし、その関数を計算するのは難しい(不可能な)場合があります。あなたはに読み込むことができるビジービーバー問題、しようとする無限の最大化を適用します。
計算可能性理論の創始者は数学者でした。彼らは、コンピューターが登場する前に、計算可能性理論と呼ばれるものを設立しました。数学者が計算できる関数を定義する方法は何でしたか?再帰的な定義によって!
そのため、チューリングマシンやラムダ計算、レジスタマシンなどの他の計算モデルが登場する前に、再帰関数がありました。そのため、人々はこれらの関数を再帰関数と呼びました。チューリングマシンや他のモデルが正確に計算できるものであることが判明したという事実は、後のイベントです(ほとんどがKleeneによって証明されています)。
再帰理論に使用されるフィールドの名前。しかし、最近の数十年間で、再帰理論からよりコンピュータサイエンスなもの(vs. mathy)に、より魅力的な名前に名前を変更することに成功しました。その結果、この分野は現在、計算可能性理論と呼ばれています。しかし、初期の数十年の本、論文、会議などを見ると、それらは計算理論ではなく再帰理論と呼ばれています。Soare自身の1987年の本(名前を計算可能性理論に変更することを推進した主な人物)のタイトルでさえ、「再帰的に列挙可能な集合と学位」です。
歴史についてもっと知りたいなら、それについて読むのに楽しくて良い場所は、オディフレッディによる古典再帰理論の最初の章です。
ロバート・ソアはこの問題に関するエッセイを書いた。彼によると、(一般的な)再帰関数という用語は、ある種の相互再帰を使用してそれらを定義したゲーデルによって造られました。後に他の同等の定義が見つかりましたが、名前は固まりました。
詳細については、Soareのエッセイをお勧めします。
長いコメントを書く代わりに、答えを追加することにしました:
再帰的に定義されているため、「以前に定義されたより単純な関数に関して、より複雑な関数が定義されている」
この種の反復または増分手順は、明確に定義された関数を作成します(数学的な意味で)
これが数学用語の再帰性の意味です。プログラミング用語では、これが再帰にどのように関係するかを以下で参照してください。
この手順を、数学の再帰性の例でもある(数学)帰納法などの手法や方法と比較してください。
プログラミングには、工学的なものだけでなく数学的なものもあります。
この(通常は建設的な)手順は、オペレーティングシステムの用語では「ブートストラップ」とも呼ばれます。
しかし、ランタイム再帰同じ機能の(つまり、その実行時に自分自身をcalingそれが(うーん、必要があります)で、すでに計算値(または引数)で、または他の言葉で発生しなければならないので、)すでに計算結果セットの一部で、また、上記の意味で再帰的です。つまり、「以前に定義された関数(およびその値)に対して定義されています」
それ以外は明確に定義されておらず、Stack Overflowのようなものにつながります:))))
オペレーティングシステムからさらに例を挙げると、ランタイム再帰(それ自体を呼び出す)は、特定の更新(コア更新など)後に再起動するオペレーティングシステムの類似物と見なすことができます。多くのOSは次の手順を実行します。
Auberonの美しい答えは、この種の手順をより詳細に示しています。