知識マップ: SPARKによる形式検証入門 ── Adaの契約から数学的証明へ
記事「SPARKによる形式検証入門 ── Adaの契約から数学的証明へ」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
SPARKはAdaの契約機能を土台にした証明可能なサブセット言語で、Pre/Post契約やループ不変条件、副作用を明示するGlobal/Depends契約を証明の入力として、GNATproveがWhy3中間言語経由でZ3やcvc5などのSMTソルバに証明を委ねる。証明の厳しさはStoneからPlatinumまで5段階の証明レベルで定義され、実行時エラーの不在を保証するSilverレベルが実務での既定の到達目標とされる。タスクを扱う場合はRavenscarプロファイルへの制限が前提となり、GNAT環境の構築にはAlireが使われる。形式検証は選んだ入力だけを確認するテストと対立せず、AUnitによる単体テストと組み合わせて証明できない部分を補うことが実践的な運用として推奨される。
flowchart LR
accTitle: SPARKによる形式検証の知識マップ
accDescr: SPARKがAdaの契約機能を土台にGNATproveとWhy3・SMTソルバで証明を行うこと、ループ不変条件やデータフロー契約が証明の入力になること、証明レベルがStoneからPlatinumまで段階的に定義されSilverが実務上の目標とされること、テストとの補完関係を示す図。
spark["SPARK"]
formal_verification["形式検証"]
ada["Ada(プログラミング言語)"]
design_by_contract["契約による設計(Pre/Post)"]
gnatprove["GNATprove"]
why3["Why3"]
smt_solver["SMTソルバ(自動証明器)"]
loop_invariant["ループ不変条件(Loop Invariant)"]
dataflow_contract["データフロー契約(Global/Depends)"]
spark_proof_level["証明レベル(Stone〜Platinum)"]
ravenscar_profile["Ravenscarプロファイル"]
alire["Alire"]
aunit["AUnit"]
spark_silver_level["Silverレベル(AoRTE)"]
spark -->|"利用する"| ada
spark -->|"実装を担う"| formal_verification
spark -.->|"前提とする"| design_by_contract
spark -->|"利用する"| gnatprove
gnatprove -->|"前提とする"| ada
gnatprove -->|"利用する"| why3
why3 -->|"利用する"| smt_solver
spark -.->|"前提とする"| loop_invariant
spark -->|"利用する"| dataflow_contract
spark -->|"利用する"| spark_proof_level
spark -.->|"前提とする"| ravenscar_profile
ada -.->|"で構成できる"| alire
aunit -->|"推奨される対応"| spark
spark_silver_level -->|"推奨される対応"| spark
spark_silver_level -->|"で確認できる"| gnatprove
dataflow_contract -->|"で確認できる"| gnatprove
design_by_contract -->|"で確認できる"| gnatprove
概念間の関係(全17件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- SPARKはAda(プログラミング言語)を利用します。
- SPARKは形式検証の実装を担います。
- SPARKは契約による設計(Pre/Post)を前提とします。
- SPARKはGNATproveを利用します。
- GNATproveはAda(プログラミング言語)を前提とします。
- GNATproveはWhy3を利用します。
- Why3はSMTソルバ(自動証明器)を利用します。
- SPARKはループ不変条件(Loop Invariant)を前提とします。
- SPARKはデータフロー契約(Global/Depends)を利用します。
- SPARKは証明レベル(Stone〜Platinum)を利用します。
- SPARKはRavenscarプロファイルを前提とします。
- Ada(プログラミング言語)はAlireで構成できます。
- AUnitはSPARKに対する本記事の推奨です。
- Silverレベル(AoRTE)はSPARKに対する本記事の推奨です。
- Silverレベル(AoRTE)はGNATproveで確認できます。
- データフロー契約(Global/Depends)はGNATproveで確認できます。
- 契約による設計(Pre/Post)はGNATproveで確認できます。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。