正当性の証拠がないアルゴリズムの例


18

Hoareのロジックがあります。なぜアルゴリズムは正しいのに、それでも正しいという証拠がないのでしょうか?アルゴリズムがCで表現されていると仮定します。その後、ステップごとに、想定されていることを実行していると主張できます。

だから私の質問は:

正しいが、正確性の証拠がないアルゴリズムの例を教えてください。

編集:少しの背景が私がどこに行くのかを明確にするのに役立つと思います。スコットアーロンソンを引用します。

1970年代以降、P NPは、ツェルメロフレンケル集合論などの数学の標準公理系から独立している(つまり、証明可能でも反証不可能でもない)可能性があるという推測がありました。明確にするために、これは次のいずれかを意味します

  1. NP完全問題の多項式時間アルゴリズムは存在しませんが、それを証明することはできません(少なくとも通常の形式システムではそうではありません)、または

  2. NP完全問題の多項式時間アルゴリズム存在ますが、それが機能することを証明できないか、多項式時間で停止することを証明できません。

2番目の可能性について言及しています。アーロンソンはそれを可能性として自信を持ってリストできるので、タイプ2の既存の例があるに違いないと思います。だから私はこの質問をしています。しかし、迅速かつ明確な答えは見当たらないようです。


17
正当性の証拠がない場合、アルゴリズムが正しいと言うのはどういう意味ですか?
デビッドリチャービー

14
「正当性の証明は不可能」または「誰もそれが正しいことを証明しなかった」という意味ですか?
gnasher729

12
アルゴリズムは正確である必要はありません...これがあるとします:(1)朝窓の空にバケツを置きます。(2)夕方に降ろしてください。(3)バケツ内の水の量を測定します。(4)翌朝繰り返します。これはアルゴリズムの説明ですが、ストレッチなしで「正しい」と呼ばれるものは説明していません。興味深いことに、世界のほとんどのプログラミングコードは、この特定の方法で記述されています。つまり、それが行うことの正確性にはまったく関心がありません。
wvxvw

@wvxvw混乱していますが、アルゴリズムが「正しい」とはどういう意味ですか?意図したとおりに動作する場合、それは正しいという意味ではないでしょうか?シナリオの目標が、降雨中にバケツに集められた平均の水量を毎日見つけることである場合、その場合、アルゴリズムは正しくありませんか?
アブドゥル

8
理解できない@chi ...プログラマがコードの正確さを気にしないということではなく、一部のアルゴリズムでは「正確さ」の概念が適用できないということです。「このボタンをこの位置にこのラベルで配置し、この他のボタンをこの他の位置に配置するなど...」-効果を示す.NET WindowsFormsアプリケーションを使用してください。プログラムは、その下でそれが正しいと判断する可能性があります(たとえば、グラフィックデザイナーは「見苦しい」と言います)が、それはそれだけです。
-wvxvw

回答:


50

恒等関数のアルゴリズムは次のとおりです。

  • 入力:n
  • 番目のバイナリ文字列がZFC で0 > 1の証明をエンコードしているかどうかを確認し、エンコードしている場合は、n + 1を出力しますn0>1n+1
  • それ以外の場合、nを出力しますn

ほとんどの人はこのアルゴリズムが恒等関数を計算するのではないかと疑っていますが、私たちにはわかりませんし、一般的に受け入れられている数学のフレームワークZFCでそれを証明することはできません。


2
n番目のバイナリ文字列がZFCの0 > 1の証明をエンコードしているかどうかn0>1を確認してください。アルゴリズムですか?
ドミトリーグリゴリエフ

23
いいえ。ただし、チェックはアルゴリズム的に(つまり、チューリングマシンによって)確実に実装できます。実際、これは証明システムに必要な要件の1つです。その証明の有効性はアルゴリズムで確認できます。
ユヴァルフィルマス

6
@Puppy ZFCは証明します。しかし、それが矛盾している場合、0 > 1であると証明することもできます。もちろん、ほぼ全員がZFCに一貫性があると考えていますが、不完全性の定理のために、それを確実に知ることはできません。¬(0>1)0>1
チー

1
@Nathanielまったく違います。たとえば、すべての教科書アルゴリズムの正確性を簡単に証明できます。このアルゴリズムは、ZFC の一貫性に依存しているという点で異なりますが、ZFC自体はそれを証明できません。
ユヴァルフィルマス

1
@Nathaniel:よろしければ、チャットでこの議論を続けましょう。
user21820

9

ほとんどのアルゴリズムは、Hoareロジックで正しいことが証明されていません。主な理由は、そのような正確性の証明が2017年1月の時点で非常に高価であり、おそらく「単なる」プログラミングと比較して数桁大きいことです。自動化によってこのコストを削減するための多くの継続的な作業がありますが、それは困難な闘争です。

アルゴリズムに正当性の証明がないかもしれない別の理由、および実際にYuvalとchiが言及した不完全性現象よりも関連性の高い理由は、この仕様が何であるかわからないかもしれないからです。この問題には2つの側面があります。

  • 顧客は自分が何を望んでいるかを知りません。これはソフトウェアエンジニアリングでよく知られている問題であり、ソフトウェアエンジニアはこれに対処するための多くのアプローチを開発しました。

  • 仕様は難しいです。良い例は、暗号アルゴリズムの正確さです。ごく最近になって、Micali&Goldwasserは、暗号化セキュリティの意味を特定したことでチューリング賞受賞しました。ただし、その定義は、セキュリティパラメータnがある「理論的暗号化」の(私の知る限り)であることに注意してください。n自然数にまたがり、敵は多項式時間確率的チューリングマシンです。私の知る限りでは(間違っている場合は修正してください)、理論と実践の間に不一致があり、AESやSHA256のような具体的なアルゴリズムは、これらの理論仕様の範囲外です。そのようなアルゴリズムの完全な仕様はないと思うので、原則として、例えばホア論理の意味でそれらを検証することはできません。


AESは、暗号化セキュリティの定義の範囲内です。(漸近的な定義ではなく、具体的なセキュリティ定義を使用する必要がありますが、実際にセキュリティが必要な場合は、とにかくそれを行う必要があります。)
DW

@DW興味深い。私はこれを知りませんでした。理論暗号の漸近的性質はどのように回避されますか?これに関する論文を教えていただけますか?具体的な暗号化ハッシュ関数はどうですか?
マーティンバーガー

en.wikipedia.org/wiki/Concrete_security、およびそこにリストされている参照。ハッシュ関数は、使用目的に依存するため、より複雑なケースですが、その複雑さは漸近的なセキュリティと具体的なセキュリティにほぼ直交しています。
DW

2
暗号化には、暗号化と復号化の2つのアルゴリズムが必要です。それらの1つはそれ自体では正しくありません。それらはペアでのみ正しい場合があります(暗号化された入力を復号化すると元のものが生成されることを証明します)。しかし、暗号化のために、あなたはそれが解読不可能であることを望みます、そして、それはあなたが「正確さ」でキャッチすることができない何かです。
gnasher729

1
@DW多少意見が違う。RogawayとBellareの論文は、プリミティブのセキュリティ証明を何らかの方法で許可しているということをほのめかしていますが、誤解を招く可能性があります。どちらの論文も基本的にプロトコルに関するものであり(つまり、AES、SHA、RSAなどのプリミティブを想定しています)、安全であることが証明されています。プリミティブ自体の安全性を証明するという本質的な問題は残っています。安全なプリミティブの証明に関する参照がある場合は、興味があります。たとえば、2番目の論文では、RSAは非常に困難であり、非常に未解決の問題であると想定しています。
DRF

5

これは、基礎となるロジックの不完全さに関連しています。実際、Hoareのロジックには通常、弱体化または「プリポスト」ルールPが含まれています。 ここで、含意P

PP{P}c{Q}QQ{P}c{Q}
は、基本的なロジックで証明する必要があります。通常は、Zermelo-Fraenkel(ZF)のような集合論的公理化を伴う1次ロジック(FOL)です。PP,QQ

P(n)P(0)P(1)P(2)nN. P(n)

MnP(n)Mn. P(n)Mn. P(n)


5

問題:4以上のすべての偶数が2つの素数の合計である場合は「はい」を、2つの素数の合計ではない4以上の偶数がある場合は「いいえ」を印刷します。

アルゴリズム:「はい」を印刷

ほとんどの人は、アルゴリズムが正しいと思います。既知の証拠なく、証拠ない可能性十分にあります。


3

正しいが実行にかかる時間がわからないアルゴリズムは、保証された時間内に停止するアルゴリズムに変換できますが、正しいかどうかはわかりません。

nn+10log(n)20n

P=NP

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