[論文レビュー] Why Just Boogie? Translating Between Intermediate Verification Languages
本稿では、Boogie から WhyML への意味を保全する翻訳を提示し、Why3 のより多様なバックエンド・プローバーを用いて Boogie プログラムの検証を可能にする。ツール b2w は 194 個の Boogie プログラムを翻訳し、Why3 はその 83% を同じ結果で検証に成功した。これは実用的妥当性とクロストール検証の可能性を示している。
The verification systems Boogie and Why3 use their respective intermediate languages to generate verification conditions from high-level programs. Since the two systems support different back-end provers (such as Z3 and Alt-Ergo) and are used to encode different high-level languages (such as C# and Java), being able to translate between their intermediate languages would provide a way to reuse one system's features to verify programs meant for the other. This paper describes a translation of Boogie into WhyML (Why3's intermediate language) that preserves semantics, verifiability, and program structure to a large degree. We implemented the translation as a tool and applied it to 194 Boogie-verified programs of various sources and sizes; Why3 verified 83% of the translated programs with the same outcome as Boogie. These results indicate that the translation is often effective and practically applicable.
研究の動機と目的
- Boogie で事前に検証されたプログラムに対して、Why3 の高度な検証バックエンド(例:Alt-Ergo、CVC4、Coq)を再利用可能にする。
- Boogie と WhyML 間の翻訳において、意味的正しさ、検証可能性、およびプログラム構造を保持する。
- 翻訳されたプログラムを Why3 で再検証することにより、Boogie の検証結果に対する実用的な検証メカニズムを提供する。
- Boogie の検証スタックの限界(例:実数演算の誤った取り扱い、ループインバリエントの問題)を、Why3 のより強固で多様なプローバー支援により補う。
- 中間検証言語(IVL)間の翻訳が実現可能であり、自動検証の信頼性を向上させる上で有益であることを示す。
提案手法
- Boogie プログラムから同等の WhyML プログラムへの翻訳関数 𝒯 を設計し、意味的および構造的同等性を保持する。
- 手続き、アサーション、命令型構文を含む、Boogie のコア機能をサポートするツール b2w を実装する。
- WhyML の ML ファミリ構文およびその表現力豊かな型システムに、Boogie の型システムおよび論理式をマッピングする。
- 多相的マップやビットベクトルといった複雑な機能の翻訳における課題に対処するため、インスタンシエーションを制限し、保守的なエンコードを用いる。
- Why3 が複数のバックエンド(インタラクティブプローバーを含む)に検証条件を割り当てられることを活用し、Boogie のデフォルトの SMT ベース検証における限界を補う。
- 多様なソースから得た 194 個の Boogie 検証済みプログラムにツールを適用し、正しさ、検証可能性、可読性を評価する。
実験結果
リサーチクエスチョン
- RQ1Boogie から WhyML への翻訳は、広範なプログラムに対して意味的正しさと検証可能性を保持できるか?
- RQ2Boogie がそのバックエンド(例:Z3)の制限により失敗する場合でも、Why3 は翻訳後の Boogie プログラムをどの程度正しく検証できるか?
- RQ3翻訳は、保守性とデバッグを支援するためのプログラム構造と可読性をどの程度保持しているか?
- RQ4翻訳は、Boogie の検証結果における誤検出(偽陽性)を検出するためのクロス検証メカニズムとして機能できるか?
- RQ5ビットベクトルや多相的マップといった Boogie 機能の翻訳における実用的限界は何か?
主な発見
- ツール b2w は 194 個の Boogie プログラムを WhyML に成功して翻訳し、そのうち 161 個(83%)が Why3 によって同じ結果で検証に成功した。
- Why3 は「not_verify」という問題のある Boogie プログラム(矛盾するポストコンディションを有する)を正しく拒否したが、Boogie と Z3 は誤って検証に成功していた。
- Why3 は「lemma_yes」(2³ > 0)を正しく検証し、「lemma_no」(2³ < 0)を拒否した。これは、Boogie の Z3 インテグレーションに比べ、Why3 が実数演算をより優れた方法で処理していることを示している。
- 「trivial_inv」のループインバリエントに関して、Why3 は CVC4 バックエンドまたはインタラクティブプローバーを用いて正しくインバリエントを検証したが、Boogie は Z3 のトリガーヒューリスティクスの問題により失敗した。
- 多相的マップやビットベクタ演算の複雑さに対する制限は存在するが、翻訳はそれらを制限または意味的に近似することで効果的に機能し続けた。
- 結果として、IVL 間の翻訳が実用的であり、クロストール検証によって検証の信頼性が向上することを確認した。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。