annotate Paper/tex/hoare.tex @ 2:9176dff8f38a

ADD while loop description
author soto <soto@cr.ie.u-ryukyu.ac.jp>
date Fri, 05 Nov 2021 15:19:08 +0900
parents c59202657321
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 \section{Hoare Logic}
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 Hoare Logic\ref{hoare} とは C.A.R Hoare、
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 R.W Floyd が考案したプログラムの検証の手法である。
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 これは、「プログラムの事前条件(P)が成立しているとき、コマンド(C)実行して停止すると事後条件(Q)が成り立つ」
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 というもので、CbCの実行を継続するという性質に非常に相性が良い。
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 Hoare Logic を表記すると以下のようになる。
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 $$ \{P\}\ C \ \{Q\} $$
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 この3つ組は Hoare Triple と呼ばれる。
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 Hoare Triple の事後条件を受け取り、
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 異なる条件を返す別の Hoare Triple を繋げることでプログラムを記述していく。
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 Hoare Logic の検証では、
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 「条件がすべて正しく接続されている」かつ「コマンドが停止する」ことが必要である。
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 これらを満たし、
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 事前条件から事後条件を導けることを検証することで Hoare Logic の健全性を示すことができる。
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
2
9176dff8f38a ADD while loop description
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
19 \subsection{Hoare Logic による Code Gear の検証手法 }
0
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 \figref{hoare}が agda にて Hoare Logic を用いて Code Gear を検証する際の流れになる。
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 input DataGear が Hoare Logic上の Pre Condition(事前条件)となり、
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 output DataGear が Post Conditionとなる。
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 各DataGear が Pre / Post Condition を満たしているかの検証は、
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 各 Condition を Meta DataGear で定義し、
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 条件を満たしているのかをMeta CodeGear で検証する。
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 \begin{figure}[H]
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 \begin{center}
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 \includegraphics[height=2.4cm]{fig/hoare_cg_dg.pdf}
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 \end{center}
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 \caption{CodeGear、DataGear での Hoare Logic}
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 \label{hoare}
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 \end{figure}
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 \begin{comment}
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 \section{CbCでの Hoare Logic を用いた検証}
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 先行研究で行われている While Loop の Hoare Logic での検証を元に、
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 実際の Hoare Logic を用いた検証手法について解説する。
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 \subsection{CbC でのコードとそれに対応したAgdaのコード}
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 元となる CbC での コードとそれと対応した Agda のコードを以下に示す。
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 \subsection{}
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 実装の際には、(next : Env → t)で Continuation に対応していた。
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 これに加えてHoare Triple に対応する。
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 そのため Env → t の間に Meta Data Gear を記述する
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 以下は Meta Data Gear の記述
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 % Meta Data Gearのソースコードを貼る
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 s1 が初期状態、
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 \end{comment}
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56