実装するのが難しすぎる強力なアルゴリズム—それらが正しいことを確認するにはどうすればよいですか?


9

私はここで質問を参照しています:実装するには複雑すぎる強力なアルゴリズム

アルゴリズムが強力であるが、実装するには複雑すぎる場合、アルゴリズムが正しいことをどのように確認できますか?実装なしでは、実際のシナリオでアルゴリズムをテストすることはできません。そのような複雑なアルゴリズムには、アルゴリズムを無効にするバグが含まれている可能性があります。

これは私が理解していないことです。アルゴリズムの正当性を証明する手法があれば、そのアルゴリズムをすでに実装しているでしょうね。それとも、証明テクニックが正しいことをどのように確認できますか?

初級に聞こえてすみません!

Kavehからの更新(引数の方が良いため、ここで再現!):

Coqのような形式システムでアルゴリズムの正しさを正式に証明できれば、アルゴリズムを抽出することもできます(本質的にはアルゴリズムを実装したため)。しかし、重要な事実は、ほとんどのアルゴリズムで、アルゴリズムの正確さ、私たちは正確さの非公式の証明を使用します。証明は誤りである場合があり、これは時々発生します。正確性の正式な証明でさえ、アルゴリズムが正しいことを完全に確信させることはできません。


6
これが、実際のマシンでの(正しい)実装が難しい場合でも、アルゴリズムの正確性を証明する手法がある理由です。
Raphael

9
私はラファエルに同意します。問題は、アルゴリズムの正当性が通常それを実装することによって証明されるという仮定に基づいているようですが、そうではありません。アルゴリズムの正しさを証明することとアルゴリズムを実装することは完全に異なるものであり、一方が他方を意味するわけではありません。
伊藤剛

8
正確性の複雑な証明を備えた単純なアルゴリズム-それらが正しいことをどのようにして知るのですか?アルゴリズムがテスト例で機能するからといって、すべての入力で機能するわけではありません。
Peter Shor、2011年

2
ほとんどのコメントに同意しますが、重要な点が欠けていると思います。Coqのような形式システムでアルゴリズムの正当性を正式に証明できる場合は、アルゴリズムを抽出することもできます(本質的にはアルゴリズムを実装したため)。ただし、重要な事実は、ほとんどのアルゴリズムについて、正式な証明を提供しないことです。アルゴリズムの正確さ、私たちは正確さの非公式の証明を使用します。証明は誤りである場合があり、それは時々起こります。正確性の正式な証明でさえ、アルゴリズムが正しいこと完全に確信させることはできません。
Kaveh

5
「上のコードのバグに注意してください。私はそれが正しいことを証明しただけで、試したわけではありません。」〜ドナルドクヌース
レフレイジン

回答:


11

数年前、これに似たトピックについて(かなり厳しい)議論がありました。それはすべて、いくつかの複雑な証明が正しくないことが判明したときに始まり、一部の研究者は証明の本質に疑問を投げ始めました(まあ、私は「証明可能な暗号」と言ったはずですが、一般的には私はしませんでした)。 。論争の両側は概念を誤解するために他を非難しました。詳細については、こちらのリンクをご覧ください

証明は、定理/アルゴリズムが正しいことを証明するための(数学的)ツールですが、それらが複雑になりすぎると、間違ったことが正しいことを証明してしまう可能性があります。P≠NPの最近の100-または-SO-ページ証拠は良い例です。ただし、これは証明の本質そのものを排除するものではありません。それらに問題はありません。

最後にもう1つ、科学哲学を研究することで、これについてより深い洞察が得られると思います。(与えられたリンクの下で、「数学的な証明が正しいかどうかをどうやって知るのですか?」の箇条書きを参照してください

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