ソフトウェアエンジニアとして、工業製品用のコードをたくさん書いています。クラス、スレッド、いくつかの設計作業、およびパフォーマンスの妥協を伴う比較的複雑なもの。私は多くのテストを行い、テストにうんざりしているので、Coq、Isabelleなどの正式な証明ツールに興味を持ちました...これらのいずれかを使用して、コードにバグがないことを正式に証明できますか?それと?-しかし、これらのツールの1つをチェックアウトするたびに、日常のソフトウェアエンジニアリングに使用できると確信せずに立ち去ります。今、それは私だけである可能性があり、私はそれについてのポインタ/意見/アイデアを探しています:-)
特に、これらのツールの1つを機能させるには、検討中のプログラムのオブジェクト、メソッドなどを証明者に適切に定義するために莫大な投資が必要になるという印象を受けます。それから、証明者は、対処しなければならないすべてのサイズを考えると、蒸気が尽きないのではないかと思います。または、副作用を取り除く必要があるかもしれません(これらの証明ツールは宣言型言語で本当にうまくいくようです)、それが高速ではないため使用できない「実証済みのコード」になるかどうか疑問に思います十分に小さい。また、使用する言語を変更する余裕はありません。JavaまたはC ++である必要があります。OXXXmlでコードを作成するのは上司に伝えることはできません。コードの正確性を証明できます...
フォーマルプルーフツールの経験が豊富な人はコメントできますか?再び-私なりLOVE正式な証明ツールを使用して、私は彼らが素晴らしいと思いますが、私は彼らが私は、Java / C ++の卑しい溝から到達することはできません象牙の塔にいるという印象を持っている...(PS:IまたLOVEハスケル、OCamlは...間違った考え方得ることはありません:私は、宣言型言語や形式的な証明のファンですが、私は)私は現実的ソフトウェア工学にその便利を作ることができる方法を確認しようとしています
更新:これはかなり広いので、次のより具体的な質問を試してみましょう:1)証明者を使用して産業用Java / C ++プログラムの正確性を証明する例はありますか?2)Coqはそのタスクに適していますか?3)Coqが適切な場合、最初にCoqでプログラムを作成し、次にCoqからC ++ / Javaを生成する必要がありますか?4)このアプローチは、スレッド化とパフォーマンスの最適化を処理できますか?