18

Coqを使用して認定プログラムを設計することについて話しているいくつかの異なる研究グループと、少なくとも1冊の本を見ています。認定プログラムの定義についてコンセンサスはありますか? 私が言えることは、それが本当に意味することは、プログラムが完全で型が正しいことが証明されたということだけです。現在、プログラムの型は、空でないこと、ソートされていること、すべての要素が 5 以上であることを証明するリストなど、非常にエキゾチックなものである可能性があります。ただし、最終的には、認定されたプログラムは、Coq が完全で型安全であることを示すものにすぎません。 、すべての興味深い質問は、最終的なタイプに何が含まれていたかに要約されますか?


編集 1

wjedynakの回答に基づいて、以下の回答にリンクされているXavier Leroyの論文「現実的なコンパイラの正式な検証」を見ました。これにはいくつかの良い情報が含まれていると思いますが、この一連の研究のより有益な情報は、Sandrine Blazy と Xavier Leroy によるC 言語の Clight サブセットのための機械化されたセマンティクスの論文で見つけることができると思います。これは、「Formal Verification」ペーパーが最適化を追加する言語です。その中で、Blazy と Leroy は Clight 言語の構文とセマンティクスを提示し、セクション 5 でこれらのセマンティクスの検証について説明します。セクション 5 には、コンパイラーの検証に使用されるさまざまな戦略のリストがあります。. これらは:

  1. マニュアルレビュー
  2. セマンティクスのプロパティの証明
  3. 検証済みの翻訳
  4. 実行可能なセマンティクスのテスト
  5. 代替セマンティクスとの同等性

いずれにせよ、おそらく追加できるポイントがあり、もっと詳しく聞きたいと思っています.

認定プログラムの定義は何かという最初の質問に戻りますが、それはまだ少し不明確です。Wjedynak は一種の答えを提供しますが、実際には Leroy の作業には、Coq でコンパイラを作成し、ある意味でそれを認定することが含まれていました。理論的には、C->Coq->証明に進むことができるようになったため、C プログラムに関することを証明できるようになりました。そういう意味では、こういうワークフローもありそうですね。

  1. X言語でプログラムを書く
  2. Coqまたはその他の証明補助ツールでのステップ1のプログラムのモデルの形式。これには、Coq でプログラミング言語のモデルを作成することが含まれる場合もあれば、プログラムのモデルを直接作成すること (つまり、Coq でプログラム自体を書き直すこと) が含まれる場合もあります。
  3. モデルに関するいくつかのプロパティを証明します。多分それは価値についての証明です。たぶん、それはステートメントの等価性の証明です(3 = 1 + 2またはf(x、y)= f(y、x)など)。
  4. 次に、これらの証明に基づいて、元のプログラムを認定済みと呼びます。

あるいは、プルーフ アシスタント ツールでプログラムの仕様を作成し、仕様に関するプロパティを証明できますが、プログラム自体は証明できません。

いずれにせよ、誰かが定義を持っているなら、私はまだ別の定義を聞くことに興味があります.

4

5 に答える 5

6

最初に、「認定された」というフレーズには、わずかにフランス語のバイアスがあることに注意してください。他の場所では、「検証済み」または「証明済み」という表現がよく使用されます。

いずれにせよ、それが実際に何を意味するのかを尋ねることが重要です。X. Leroy と CompCert は非常に良い出発点です。これは C コンパイラの検証に関する大きなプロジェクトであり、Leroy は聴衆になぜ検証が重要なのかを常に熱心に説明しています。特に、証明ではなくテストを意味する「認証機関」の人々と話す場合は特にそうです。

もう 1 つの大きな検証プロジェクトは、Isabelle/HOL を使用するL4.verifiedです。博覧会のこの部分では、実際に述べられ証明されていることと、その結果について少し説明します。残念ながら、実際の証明は極秘であるため、公に確認することはできません。

于 2014-02-02T22:17:25.263 に答える
0

これは、実行時エラー (数値オーバーフロー、無効な参照など) がないことを意味する場合があります。これは、ほとんどの開発されたソフトウェアと比較して既に優れていますが、まだ弱いです。もう一方の意味は、ドメインの形式化に従って正しいことが証明されています。つまり、正式に実行時エラーが発生しない必要があるだけでなく、期待どおりの動作をすることを証明する必要があります (これは正確に定義されている必要があります)。

于 2014-04-20T03:33:09.267 に答える