3
|
1 \chapter{Hoare Logic}
|
|
2
|
|
3 \section{Hoare Logic}
|
|
4 Hoare Logic\ref{hoare} とは C.A.R Hoare、
|
|
5 R.W Floyd が考案したプログラムの検証の手法である。
|
|
6 これは、「プログラムの事前条件(P)が成立しているとき、コマンド(C)実行して停止すると事後条件(Q)が成り立つ」
|
|
7 というもので、CbCの実行を継続するという性質に非常に相性が良い。
|
|
8 Hoare Logic を表記すると以下のようになる。
|
|
9 $$ \{P\}\ C \ \{Q\} $$
|
|
10 この3つ組は Hoare Triple と呼ばれる。
|
|
11
|
|
12 Hoare Triple の事後条件を受け取り、
|
|
13 異なる条件を返す別の Hoare Triple を繋げることでプログラムを記述していく。
|
|
14
|
|
15 Hoare Logic の検証では、
|
|
16 「条件がすべて正しく接続されている」かつ「コマンドが停止する」ことが必要である。
|
|
17 これらを満たし、
|
|
18 事前条件から事後条件を導けることを検証することで Hoare Logic の健全性を示すことができる。
|
|
19
|
|
20 \section{Hoare による Code Gear の検証 }
|
|
21
|
|
22 \figref{hoare}が agda にて Hoare Logic を用いて Code Gear を検証する際の流れになる。
|
|
23 input DataGear が Hoare Logic上の Pre Condition(事前条件)となり、
|
|
24 output DataGear が Post Conditionとなる。
|
|
25 各DataGear が Pre / Post Condition を満たしているかの検証は、
|
|
26 各 Condition を Meta DataGear で定義し、
|
|
27 条件を満たしているのかをMeta CodeGear で検証する。
|
|
28
|
|
29 \begin{center}
|
|
30 \includegraphics[height=3.4cm]{pic/hoare_cg_dg.pdf}
|
|
31 %\caption{CodeGear、DataGear での Hoare Logic}
|
|
32 \label{hoare}
|
|
33 \end{center}
|
|
34
|
|
35
|
|
36
|