知識マップ: AIが書いたコードをSPARKで証明する ── 人が契約を書き、GNATproveで確かめる
記事「AIが書いたコードをSPARKで証明する ── 人が契約を書き、GNATproveで確かめる」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
AIが書いたAdaの関数に、人が事前条件と事後条件を書き、SPARKのGNATproveで証明する。GNATproveは整数オーバーフローのような実行時エラーと事後条件の違反を、反例の値つきで報告する。ループを含む事後条件の証明にはループ不変条件が要る。証明が確かめるのは本体が契約を満たすことだけなので、人のコードレビューでは契約と、pragma Assume・pragma Annotate・SPARK_Mode => Offの追加を先に読む。弱い契約のまま通った誤りは、具体的な期待値を書いたユニットテストで見つかる。
flowchart LR
accTitle: AIが書いたコードをSPARKで証明する記事の知識マップ
accDescr: GNATproveが契約と整数オーバーフローを確かめ、ループ不変条件が証明に要ること、pragma Assumeとpragma AnnotateとSPARK_Modeが証明の対象を変えるのでコードレビューで確かめること、証明と併せてユニットテストを使うことを示す図。
spark["SPARK"]
design_by_contract["契約による設計(Pre/Post)"]
formal_verification["形式検証"]
gnatprove["GNATprove"]
integer_overflow["整数オーバーフロー"]
loop_invariant["ループ不変条件(Loop Invariant)"]
spark_pragma_assume["pragma Assume"]
spark_pragma_annotate["pragma Annotate(GNATprove)"]
spark_mode["SPARK_Mode"]
code_review["コードレビュー(プルリクエストレビュー)"]
unit_test["ユニットテスト"]
spark -->|"実装を担う"| formal_verification
spark -->|"利用する"| gnatprove
design_by_contract -->|"で確認できる"| gnatprove
integer_overflow -->|"で確認できる"| gnatprove
spark -.->|"前提とする"| loop_invariant
gnatprove -->|"利用する"| spark_pragma_assume
gnatprove -->|"利用する"| spark_pragma_annotate
gnatprove -->|"で構成できる"| spark_mode
code_review -->|"推奨される対応"| design_by_contract
code_review -->|"推奨される対応"| spark_pragma_assume
code_review -->|"推奨される対応"| spark_pragma_annotate
unit_test -.->|"推奨される対応"| formal_verification
概念間の関係(全12件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- SPARKは形式検証の実装を担います。
- SPARKはGNATproveを利用します。
- 契約による設計(Pre/Post)はGNATproveで確認できます。
- 整数オーバーフローはGNATproveで確認できます。
- SPARKはループ不変条件(Loop Invariant)を前提とします。
- GNATproveはpragma Assumeを利用します。
- GNATproveはpragma Annotate(GNATprove)を利用します。
- GNATproveはSPARK_Modeで構成できます。
- コードレビュー(プルリクエストレビュー)は契約による設計(Pre/Post)に対する本記事の推奨です。
- コードレビュー(プルリクエストレビュー)はpragma Assumeに対する本記事の推奨です。
- コードレビュー(プルリクエストレビュー)はpragma Annotate(GNATprove)に対する本記事の推奨です。
- ユニットテストは形式検証に対する本記事の推奨です。
主要概念の定義
機械可読データ
このデータセットについて
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。