現在、アルゴリズムと複雑さに関する本を読んでいます。現時点では、計算可能および計算不可能な機能について読んでおり、私の本は、計算可能よりも計算不可能な機能がはるかに多いと述べています。実際、大半は計算不可能です。ある意味では、私はそれを直感的に受け入れることができますが、この本は正式な証拠を与えておらず、トピックについて詳しく説明していません。
ここで誰かがそれについて詳しく説明したり、計算可能な関数よりも計算できない関数が多い理由をより厳密に理解したりすることを望みました。
現在、アルゴリズムと複雑さに関する本を読んでいます。現時点では、計算可能および計算不可能な機能について読んでおり、私の本は、計算可能よりも計算不可能な機能がはるかに多いと述べています。実際、大半は計算不可能です。ある意味では、私はそれを直感的に受け入れることができますが、この本は正式な証拠を与えておらず、トピックについて詳しく説明していません。
ここで誰かがそれについて詳しく説明したり、計算可能な関数よりも計算できない関数が多い理由をより厳密に理解したりすることを望みました。
回答:
ある可算多くの計算機能:
各計算可能な関数には、少なくとも1つのアルゴリズムがあります。各アルゴリズムは、例えば、有限シンボル使用してバイナリストリング有限集合からのシンボルを使用して、有限の説明を持っている。有限バイナリ文字列の数は、で表される可算である(すなわち、自然数の数と同じ)。
したがって、最大で数え切れないほど多くの計算可能な関数が存在します。ある少なくとも可算多くの計算機能毎ので、定数関数F (X )= cが計算可能です。
言い換えると、次の間に対応関係があります。
一方、文字列(または自然数)には、数え切れないほど多くの関数があります。関数(またはF :{ 0 、1 } * → { 0 、1 } *)は、各入力の値を割り当てます。これらの各値は、他から独立して選択できます。したがって、N N = 2 Nの可能な関数があります。自然数上の関数の数は、実数の数に等しくなります。
数え切れないほど多くの関数しか計算できないため、それらのほとんどは計算できません。実際、計算できない関数の数もです。
これを直感的に想像したい場合は、自然数と実数、または有限バイナリ文字列と無限バイナリ文字列について考えてください。自然数や有限の文字列よりも実数や無限のバイナリ文字列の方がはるかに多くあります。言い換えれば、(この事実の証明については、Cantorの対角引数とCardinal算術を参照してください)。
これは、数え切れないほど多くの計算不可能なブール関数の「明示的な」構成です。してみましょう停止問題の特徴的な機能を言う、いくつかの固定非計算ブール関数です。関数の集合を考える F = { F :N → { 0 、1 } :∀ X ∈ N、F (2 X )= K (X )} 。 各F ∈ Fは計算不可能であり、Fは非可算です。
計算可能な機能を持つ同様の構造があります。計算機能与え、ましょう G = { G :N → { 0 、1 } :∃ N ∈ N ∀ M ≥ N 、G (M )= R (M )。} 言い換えれば、G ∈ Gが異なる場合R有限個の値に関する。Gのすべての機能
そのため、計算可能な場合のように「潜在的な」無限ではなく、実際の無限の「無限に多くの」自由度があるため、計算不可能な関数がたくさんあります。