プルーフキャリーコードでプルーフチェッカーが必要な理由


9

Neculaによる古典的なPLDI'98論文「認証コンパイラの設計と実装」では、高レベルの検証者は以下を使用しています。

  1. 検証条件を生成するVCGen(安全述語)
  2. 条件を証明する一次論理定理証明者
  3. ステップ(2)からの証明をチェックするLF証明チェッカー

手順(3)で少し混乱しています。なぜそれが必要なのですか?(1)と(2)だけでは不十分でしょうか?定理の証明者によって生成された証明を信頼しないのはなぜですか?

回答:


19

証明チェッカーの目的は、信頼できるコンピューティングベースを最小限に抑えることです。

証明チェッカーを持つことで、コンパイラーも定理証明者も正確である必要はありません。この論文は、この点を3ページ目に示しています。

Neither the compiler nor the prover need to be correct in order to be guaranteed to   
detect incorrect compiler output. This is a significant advantage since the VCGen and  
the  proof checker are significantly simpler than the compiler and the prover.

プルーフチェッカーは数行のコードであり、正確さを手動で検査できます。対照的に、うまく機能する自動化された証明者は非常に複雑であり、正しい可能性は低いですが、十分にテストされ広く使用されている証明者の場合、間違いは簡単にトリガーできないエッジケースにあります。最先端のSATソルバーであるLingelingを構成する30k LOC Cコードを見て、自動化された定理証明がいかに複雑であるかを確認してください。証明チェッカーがなければ、その定理証明者が正しいことを証明する必要があります。これは、2015年に経済的にできることを超えています。


ATPによって作成された証明にバグがある可能性があることに驚きます。(私はATPは不完全である可能性があると思いましたが、不健全/バギーではありません)私はここではあまり情報を得ていません。ATPによって生成された証明に高額な間違いの既知の事例があるかどうかを知りたいと思います。
ラム

3
@Ram深刻な自動定理の証明者の歴史には何千もの小さな健全性のバグがあります。たとえば、stackoverflow.com / questions / 12281085 / またはgithub上のそのようなツールの改訂履歴を参照してください。
cody

@Ram Codyのすばらしいアドバイスに加えて、経験から学ぶことをお勧めします。基本的なSATソルバーなどのATPを少し書きます。これは、数行のコードで実行できます。次に、句の学習、監視されたリテラル、興味深い変数選択ヒューリスティックなどを追加して、うまく機能させるようにします。その後、体験について考えてみてください
マーティンベルガー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.