2つのアルゴリズムが入力に対して同じ結果を返すかどうかをどのように確認しますか?


17

すべての入力のセットが無限であるときに、2つのアルゴリズム(たとえば、マージソートとナイーブソート)がすべての入力に対して同じ結果を返すかどうかを確認するにはどうすればよいですか?

更新:一般的なケースでアルゴリズム的にこれを行うことがどのように不可能かを説明してくれたベンに感謝します。Daveの答えは、常に機能するとは限らないが、非常に効果的なアルゴリズムと手動(人間の機知と隠phorの対象)の両方の方法の素晴らしい要約です。


5
yuvalが言ったように、どの2つのプログラムでもそれを判断できる手順はありません。しかし、あなたの例のような特別な場合には、それを証明することができます:例えば、両方のアルゴリズムがソートされたシーケンスを返し、安定していることを証明すれば、あなたは完了です。
サショニコロフ

1
自動テクニック/アルゴリズムまたは手動テクニックのセットが必要ですか?
デイブクラーク

@SashoNikolov、パフォーマンスが出力の一部と見なされる場合、両方が同じ時間/空間の複雑さで動作することを示す必要があります。
edA-qa mort-ora-y

1
「チェック」または証明を意味しますか?「任意の入力」またはすべての入力を意味しますか?質問の動機と背景は何ですか?
カヴェー

2
@AndresRiorio:証明技術は、一般的な問題を解決するアルゴリズムとは異なります。たとえば、停止の問題は決定不能ですが、多くのプログラムの終了を証明することは確かに可能です(手動または自動ヒューリスティックによって)。
ラファエル

回答:


16

否定的な発言者が言うこととは対照的に、これを行うための多くの効果的なテクニックがあります。

  • バイシミュレーションは1つのアプローチです。たとえば、Coinduction and Functional Programmingに関するGordonの論文を参照してください。

  • 別のアプローチは、Pittsの研究など、プログラムの等価性の運用理論を使用することです。

  • 3番目のアプローチは、両方のプログラムが同じ機能仕様を満たしていることを確認することです。このアプローチに関する論文は数千あります。

  • 4番目のアプローチは、サウンドプログラム変換を使用して、1つのプログラムを別のプログラムに書き換えることができることを示すことです。

もちろん、これらの方法はいずれも決定不能のため完全ではありませんが、問題に対処するために大量の作業が作成されています。


ヒューリスチック。[Gr。εὑρίσκω "発見"] n。1.解が正しいことが証明できるかどうかを無視する問題を解決するために設計された手法ですが、通常は適切な解を生成するか、より複雑な問題の解を含むか、またはそれと交差する単純な問題を解きます。2.(理論)動作しないアルゴリズム。
-JeffE

1
バートシンプソン:「勝てない。試してはいけない。」
デイブクラーク

9
@JeffE:2つのアルゴリズムが同じ結果を返すかどうかを確認する場合は、証明を行います。これを行うための良いテクニックがたくさんあります。もちろん、すべての方法は不完全ですが、誰が気にしますか?ゲーデルの不完全性定理は、数学をあきらめる理由ではありません!
ニールクリシュナスワミ

3
@JeffE 2つの任意のアルゴリズムが同じ結果を返すかどうかを決定する計算可能な関数がないからといって、2つの特定のアルゴリズムの質問に答えることができないわけではありません。特に、証明を検索するプロセスは計算できない機能。同様に、任意のアルゴリズムが常に終了するかどうかを機械的に判断することは不可能であるという事実に関係なく、特定のアルゴリズムの終了を保証することを証明する論文がたくさんあります。
ベン、

2
実際には、同じ関数を計算することになっている2つのアルゴリズムでは、バイシミュレーションベースの等価性の証明はほとんど許可されません。(上記のソートアルゴリズムの場合、ループ/再帰の中間段階が異なります。)古き良きホアロジックを使用して、両方が同じI / O動作の仕様を実装していることを示すと思いますトーゴ。

10

「それは不可能です」という文を少し詳しく説明するために、簡単な証明スケッチを示します。

テープ上の出力で停止するチューリングマシンによる出力を使用してアルゴリズムをモデル化できます。テープ上の出力を受け入れるか拒否する(この場合は出力がない)ことで停止できるマシンが必要な場合は、「停止または停止しない」でこれらのマシンをモデル化できるエンコードを簡単に思い付くことができます。拒否されません」マシン。

ここで、2つのTMがすべての入力に対して同じ出力を持っているかどうかを判断するためのアルゴリズムPがあるとします。次に、TM Aと入力Xを指定すると、次のように動作する新しいTM Bを作成できます。

  1. 入力が正確にXであるかどうかを確認します
  2. はいの場合、無限ループに入ります
  3. いいえの場合、入力でAを実行します

これで、ABでPを実行できます。BXで停止せず、他のすべての入力に対してAと同じ出力を持っているため、AXで停止しない場合にのみ、これら2つのアルゴリズムはすべての入力で同じ出力を持ちます。しかし、Pは2つのアルゴリズムがすべての入力に対して同じ出力を持っているかどうかを判断できると想定されていたので、Pがあれば、任意のマシンが任意の入力で停止するかどうかを確認できました。これが停止問題です。停止問題は決定不能であることが知られているため、Pは存在できません。

これは、2つのアルゴリズムの出力が常に同じであるかどうかを判断する一般的な(計算可能な)アプローチがないため、分析するアルゴリズムのペアに特定の推論を適用する必要があることを意味します。ただし、実際には、大規模なクラスのアルゴリズムで機能する計算可能なアプローチが存在する可能性があり、特定のケースの証明を試みるために使用できる技術が確かにあります。デイブ・クラークの答えは、あなたにここで見るべきいくつかの関連するものを与えます。「不可能」という結果は、アルゴリズムのすべてのペアについて、問題を一度だけ解決する一般的な方法の考案にのみ適用されます。


P

@Raphaelはい、私がスケッチした議論は、そのような制限されたPについては何も言っていませんが、完全に一般的なものは存在できません。私の本能は、停止の問題は一般的なアルゴリズムではなく「アルゴリズムの並べ替え」に制限しても、まだ決定できないことです。
ベン、

2
より一般的には、ライスの定理は、あなたが証明しようとしている特性を持つ少なくとも1つのアルゴリズムとそうでない少なくとも1つのアルゴリズムがあるとすぐに、アルゴリズムについて何かを証明する計算可能な方法はないと述べています。例えば、アルゴリズムA与えられ、入力及びBがAに等しいかどうかをテストするようなアルゴリズムBを取る全く計算機能がない
ジル「SO-停止さ悪」

ライスの定理は、チューリングマシンではなく言語のプロパティにのみ適用されることに注意することが重要です(「アルゴリズム」のモデルとして使用する場合)。両方が同じ言語を認識し、一方がプロパティを持ち、他方がプロパティを持たない2つのチューリングマシンが存在する可能性がある場合、ライスの定理は適用されず、プロパティをテストするための一般的な計算可能な方法があるかもしれません。しかし、ライスの定理は明らかにこの場合に当てはまります、はい。
ベン

2

一般的には不可能ですが、多くの制約により可能になります。たとえば、BDDを使用して2つの直線コードプログラムの等価性を確認できます。シンボリック実行は、他の多くのケースを処理できます。


1

一般的にこの平等を証明するアルゴリズムを考案することは不可能です。ヒント:停止問題からの削減。


多くのテクニックが存在しますが、完全に自動化されたものはありません。
デイブクラーク

可能かどうかはわかりませんが、答えは単なるコメントです。答えではありません。

@SaeedAmiri:答えの文脈に少し肉付けしました。多分特に良くないとしても、それで十分だと思います。
ラファエル

@ラファエル、ユバルの心にある削減は明らかであり、OPはそれを認識していないとは思いませんが、IMOの難しい問題は特別な場合に何らかの方法を見つけているので、この明らかな削減はOPを思い出させるためのコメントになります一般的な場合。

2
@SaeedAmiri:それは、私たちではなく、OPと有権者が決めることです。
ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.