Mercurial > hg > Papers > 2023 > soto-master
view Paper/tex/hoare.tex @ 28:423f59b098ac
Add svg
author | soto <soto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 15 Feb 2023 17:18:23 +0900 |
parents | 76055a4c1dd2 |
children |
line wrap: on
line source
\chapter{Gears Agda による定理証明} 先行研究\cite{ryokka-sigos}では、Gears Agda ではないプログラムの Hoare Logic による検証\cite{agda2-hoare}を参考にそれを Gears Agda に適応して while loop の検証を行っていた\cite{cr-ryukyu}。 本研究では、Invariant というプログラムの不変条件を定義し、それを検証することで、比較的容易に検証を行うことができるようになった(本章2節) 本章では Gears Agda による定理証明の方法について説明する。 \section{Hoare Logic} Hoare Logic\cite{hoare} とは C.A.R Hoare、 R.W Floyd が考案したプログラムの検証の手法である。 これは、「プログラムの事前条件(P)が成立しているとき、 コマンド(C)実行して停止すると事後条件(Q)が成り立つ」 というものである。これはCbCの実行を継続するという性質に非常に相性が良い。 Hoare Logic を表記すると以下のようになる。 $$ \{P\}\ C \ \{Q\} $$ この3つ組は Hoare Triple と呼ばれる。 Hoare Triple の事後条件を受け取り、 異なる条件を返す別の Hoare Triple を繋げることでプログラムを記述していく。 Hoare Logic の検証では、 「条件がすべて正しく接続されている」かつ「コマンドが停止する」ことが必要である。 これらを満たし、 事前条件から事後条件を導けることを検証することで Hoare Logic の健全性を示すことができる。 つまり、Hoare Triple の事後条件が次のコマンドの事前条件になり、それを実行終了まで繋げていくことで Hoare Logic によるプログラムの検証とする。 \section{Invariant を用いた Hoare Logic による検証の方法 } \figref{meta-cgdg}を用いて Agda にて Hoare Logic による CodeGear を検証する流れを説明する。 input DataGear が Hoare Logic上の Pre Condition(事前条件)となり、 output DataGear が Post Conditionとなる。 各DataGear が Pre / Post Condition を満たしているかの検証は、 各 Condition を Meta DataGear で定義し、 条件を満たしているのかをMeta CodeGear で検証する。 この際、検証する DataGear はプログラムの不変条件となり、これを Invariant と呼ぶ。