知識マップ: SPARKによる形式検証入門 ── Adaの契約から数学的証明へ

記事「SPARKによる形式検証入門 ── Adaの契約から数学的証明へ」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

SPARKはAdaの契約機能を土台にした証明可能なサブセット言語で、Pre/Post契約やループ不変条件、副作用を明示するGlobal/Depends契約を証明の入力として、GNATproveがWhy3中間言語経由でZ3やcvc5などのSMTソルバに証明を委ねる。証明の厳しさはStoneからPlatinumまで5段階の証明レベルで定義され、実行時エラーの不在を保証するSilverレベルが実務での既定の到達目標とされる。タスクを扱う場合はRavenscarプロファイルへの制限が前提となり、GNAT環境の構築にはAlireが使われる。形式検証は選んだ入力だけを確認するテストと対立せず、AUnitによる単体テストと組み合わせて証明できない部分を補うことが実践的な運用として推奨される。

SPARKによる形式検証の知識マップSPARKがAdaの契約機能を土台にGNATproveとWhy3・SMTソルバで証明を行うこと、ループ不変条件やデータフロー契約が証明の入力になること、証明レベルがStoneからPlatinumまで段階的に定義されSilverが実務上の目標とされること、テストとの補完関係を示す図。利用する実装を担う前提とする利用する前提とする利用する利用する前提とする利用する利用する前提とするで構成できる推奨される対応推奨される対応で確認できるで確認できるで確認できるSPARK形式検証Ada(プログラミング言語)契約による設計(Pre/Post)GNATproveWhy3SMTソルバ(自動証明器)ループ不変条件(Loop Invariant)データフロー契約(Global/Depends)証明レベル(Stone〜Platinum)RavenscarプロファイルAlireAUnitSilverレベル(AoRTE)

概念間の関係(全17件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

SPARK
プログラムの性質を数学的に証明できるように設計された、Adaのサブセット(部分言語)とそのツール群。
形式検証
プログラムがすべての入力に対してある性質を満たすことを数学的に証明する、テストとは異なる品質保証の手法である。
GNATprove
AdaCoreが提供する、SPARKコードの契約や表明を自動証明器で検証するコマンドラインツールである。
Why3
演繹的プログラム検証のための中間言語とプラットフォームで、証明課題を複数の自動証明器へ振り分ける。
Ada(プログラミング言語)
1970年代後半にアメリカ国防総省の主導で標準化された、強い型付けと高信頼性を重視する汎用プログラミング言語。最新標準はAda 2022。
AUnit
Adaの単体テストフレームワークで、SPARKで証明できなかった部分の振る舞いをテストする用途で併用される。
Silverレベル(AoRTE)
範囲外アクセス・オーバーフロー・ゼロ除算などの実行時エラーが起きないことを証明する、証明レベルのうち実務上の既定目標とされる段階である。
データフロー契約(Global/Depends)
サブプログラムが読み書きするグローバル変数と、変数間の依存関係を宣言するSPARKの契約である。
契約による設計(Pre/Post)
サブプログラムの入口での前提条件(Pre)と、出口で保証する性質(Post)を宣言的に記述する、Ada 2012の契約機構である。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。