Skip to main content
QUICK REVIEW

[論文レビュー] Abstract I/O Specification

Willem Penninckx, Amin Timany|arXiv (Cornell University)|Jan 29, 2019
Petri Nets in System Modeling参考文献 2被引用数 4
ひとこと要約

本稿では、分離論理におけるアサーションを場所として用いることで、ペトリネットを埋め込んだ拡張された仕様フレームワークを提案する。これにより、メモリ操作とI/Oを組み合わせたI/Oアクションのモジュラー検証が可能になる。非決定的入力を扱うために制約付きで段階的な予言変数を導入し、I/O仕様における同等性の推論をサポートする。形式的検証はIris/Coqで実施され、VeriFastへの統合も行われた。

ABSTRACT

We recently proposed an approach for the specification and modular formal verification of the interactive (I/O) behavior of programs, based on an embedding of Petri nets into separation logic. While this approach is scalable and modular in terms of the I/O APIs available to a program, enables composing low-level I/O actions into high-level ones, and enables a convenient verification experience, it does not support high-level I/O actions that involve memory manipulation as well as low-level I/O (such as buffered I/O), or that are in fact "virtual I/O" actions that are implemented purely through memory manipulation. Furthermore, it does not allow rewriting an I/O specification into an equivalent one. In this paper, we propose a refined approach that does have these properties. The essential insight is to fix the set of places of the Petri net to be the set of separation logic assertions, thus making available the full power of separation logic for abstractly stating an arbitrary operation's specification in Petri net form, for composing operations into an I/O specification, and for equivalence reasoning on I/O specifications. Our refinement resolves the issue of the justification of the choice of Petri nets over other formalisms such as general state transition systems, in that it "refines them away" into the more essential constructs of separating conjunction and abstract nested triples. To enable a convenient treatment of input operations, we propose the use of prophecy variables to eliminate their non-determinism. We illustrate the approach through a number of example programs, including one where subroutines specified and verified using I/O specifications run as threads communicating through shared memory. The theory and examples of the paper have been machine-checked using the Iris library for program verification in the Coq proof assistant.

研究の動機と目的

  • 手続き型プログラムにおけるインタラクティブI/O動作のためのモジュラーかつ合成的な検証手法の不足に対処すること。
  • バッファドI/OやByteArrayOutputStreamのような、メモリ操作とI/Oを組み合わせた高レベルI/Oアクションの仕様化と検証を可能にすること。
  • 従来のペトリネットベースのアプローチでは不可能だった、I/O仕様における書き換えおよび同等性の推論をサポートすること。
  • 予言変数を用いて非決定的入力操作をモジュラーに非決定性を排除する形で統合すること。
  • 共有メモリチャネルを介したスレッド間通信などのI/O動作を示す並行プログラムの検証の基盤を提供すること。

提案手法

  • ペトリネットの場所を分離論理のアサーションに固定することで、I/O動作の仕様に分離論理を完全に活用できるようにする。
  • 分離論理の論理的構成要素に還元するため、分離論理の論理積と抽象的ネスト型三段論法を用いて、ペトリネットへの明示的参照を避けるI/O仕様の表現を行う。
  • 非決定的入力操作を予測可能な結果を持つ状態を伴う決定的アクションとしてモデル化するため、制約付きで段階的な予言変数を導入する。
  • 共有インヴァリアントとゴースト状態の分数量を介して前件と後件を関連付ける遷移述語(例:send_、receive_)を定義する。
  • 共有インヴァリアントを用いて複数のスレッドの状態と通信チャネルの内容を追跡し、並行操作間での一貫性を保証する。
  • Irisライブラリを用いてCoqで理論と例を機械的検証し、CおよびJavaの例をVeriFastで検証することで、手法の有効性を検証した。

実験結果

リサーチクエスチョン

  • RQ1メモリ操作と低レベルI/O操作を併せ持つI/O仕様を、どのようにしてモジュラーかつ合成的にすることができるか?
  • RQ2分離論理フレームワークにおいて、I/O仕様における同等性の推論をサポートできるか。その場合、どのように実現できるか?
  • RQ3非決定的入力操作を、モジュラリティと合成的推論を保ったまま形式的にモデル化・検証することは可能か?
  • RQ4I/O仕様におけるペトリネットの使用を、表現力を失わず、より基礎的な論理的形式に精錬することは可能か?
  • RQ5共有メモリを介したスレッド間通信を行うような、I/O動作を示す並行プログラムを、このフレームワークを用いてどのように検証できるか?

主な発見

  • 提案されたフレームワークにより、従来のアプローチでは表現不可能だった、メモリ操作とI/Oを組み合わせたI/Oアクション(例:JavaのByteArrayOutputStream)の仕様化と検証が可能になった。
  • ペトリネットの場所として分離論理のアサーションを使用することで、I/O仕様における完全な合成的推論と同等性の検証が可能になった。
  • 制約付きで段階的な予言変数は、非決定性を効果的に排除しつつ、モジュラリティを保ち、検証を可能にするという点で成功した。
  • 本フレームワークは、共有メモリチャネルを介した複数のスレッドが通信するチャットサーバーのような並行プログラムのモジュラー検証をサポートした。
  • 理論と例はCoqにおけるIrisライブラリを用いて形式的検証され、CおよびJavaの例についてもVeriFastへの成功した統合が達成された。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。