すべての入力のセットが無限であるときに、2つのアルゴリズム(たとえば、マージソートとナイーブソート)がすべての入力に対して同じ結果を返すかどうかを確認するにはどうすればよいですか?
更新:一般的なケースでアルゴリズム的にこれを行うことがどのように不可能かを説明してくれたベンに感謝します。Daveの答えは、常に機能するとは限らないが、非常に効果的なアルゴリズムと手動(人間の機知と隠phorの対象)の両方の方法の素晴らしい要約です。
すべての入力のセットが無限であるときに、2つのアルゴリズム(たとえば、マージソートとナイーブソート)がすべての入力に対して同じ結果を返すかどうかを確認するにはどうすればよいですか?
更新:一般的なケースでアルゴリズム的にこれを行うことがどのように不可能かを説明してくれたベンに感謝します。Daveの答えは、常に機能するとは限らないが、非常に効果的なアルゴリズムと手動(人間の機知と隠phorの対象)の両方の方法の素晴らしい要約です。
回答:
否定的な発言者が言うこととは対照的に、これを行うための多くの効果的なテクニックがあります。
バイシミュレーションは1つのアプローチです。たとえば、Coinduction and Functional Programmingに関するGordonの論文を参照してください。
別のアプローチは、Pittsの研究など、プログラムの等価性の運用理論を使用することです。
3番目のアプローチは、両方のプログラムが同じ機能仕様を満たしていることを確認することです。このアプローチに関する論文は数千あります。
4番目のアプローチは、サウンドプログラム変換を使用して、1つのプログラムを別のプログラムに書き換えることができることを示すことです。
もちろん、これらの方法はいずれも決定不能のため完全ではありませんが、問題に対処するために大量の作業が作成されています。
「それは不可能です」という文を少し詳しく説明するために、簡単な証明スケッチを示します。
テープ上の出力で停止するチューリングマシンによる出力を使用してアルゴリズムをモデル化できます。テープ上の出力を受け入れるか拒否する(この場合は出力がない)ことで停止できるマシンが必要な場合は、「停止または停止しない」でこれらのマシンをモデル化できるエンコードを簡単に思い付くことができます。拒否されません」マシン。
ここで、2つのTMがすべての入力に対して同じ出力を持っているかどうかを判断するためのアルゴリズムPがあるとします。次に、TM Aと入力Xを指定すると、次のように動作する新しいTM Bを作成できます。
これで、AとBでPを実行できます。BはXで停止せず、他のすべての入力に対してAと同じ出力を持っているため、AがXで停止しない場合にのみ、これら2つのアルゴリズムはすべての入力で同じ出力を持ちます。しかし、Pは2つのアルゴリズムがすべての入力に対して同じ出力を持っているかどうかを判断できると想定されていたので、Pがあれば、任意のマシンが任意の入力で停止するかどうかを確認できました。これが停止問題です。停止問題は決定不能であることが知られているため、Pは存在できません。
これは、2つのアルゴリズムの出力が常に同じであるかどうかを判断する一般的な(計算可能な)アプローチがないため、分析するアルゴリズムのペアに特定の推論を適用する必要があることを意味します。ただし、実際には、大規模なクラスのアルゴリズムで機能する計算可能なアプローチが存在する可能性があり、特定のケースの証明を試みるために使用できる技術が確かにあります。デイブ・クラークの答えは、あなたにここで見るべきいくつかの関連するものを与えます。「不可能」という結果は、アルゴリズムのすべてのペアについて、問題を一度だけ解決する一般的な方法の考案にのみ適用されます。
一般的にこの平等を証明するアルゴリズムを考案することは不可能です。ヒント:停止問題からの削減。