annotate tex/spec.tex @ 4:35f0e5f12fe6

add verification method
author soto@cr.ie.u-ryukyu.ac.jp
date Fri, 11 Sep 2020 02:30:15 +0900
parents b124f02ea3f1
children acad18934981
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
1 \section{検証手法}
4
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
2 手法は模索中であり、大半が先行研究と同じ手法を考えている。
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
3 本章では先行研究で述べられている検証手法について説明する。
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
4 流れとしては、Hoare Logic は事前条件がある際、コマンド実行後の事後条件が成り立つ場合に
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
5 コマンドの部分的な正当性を導けることを前述した。
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
6 その為、agdaでのcbcの検証は下図のようになる。
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
7 流れを説明すると、
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
8 CodeGear の引数となる DataGear が事前条件となり、
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
9 それを検証する為のPre Conditionを検証する為の Meta Gearsが存在する。
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
10 その後、さらに事後条件となる DetaGear も Meta Gears にて検証する。
3
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
11
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
12 \subsection{CbC記法で書くagda}
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
13 CbCプログラムの検証をするに当たり、agdaコードもCbC記法で記述を行う。つまり継続渡しを用いて記述する必要がある。
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
14 以下が例となるコードである。
4
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
15
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
16 \lstinputlisting[caption= Agdaでの CodeGear の例, label=agda-cg]{src/cbc-agda.agda}
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
17
3
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
18 前述した加算を行うコードと比較すると、不定の型 (t) により継続を行なっている部分が見える。
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
19 これがAgdaで表現された CodeGear となる。
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
20
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
21 \subsection{agda による Meta Gears}
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
22 通常の Meta Gears はノーマルレベルの CodeGear、 DataGear では扱えないメタレベルの計算を扱う単位である。
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
23 今回はその Meta Gears をagdaによる検証の為に用いる。
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
24
4
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
25 \begin{itemize}
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
26 \item Meta DataGear
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
27 \begin{itemize}
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
28 \item
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
29 Agda 上で Meta DataGear を持つことでデータ構造自体が関係を持つデータを作ることができる。
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
30 これを用いることで、仕様となる制約条件を記述することができる。
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
31 \end{itemize}
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
32 \item Meta CodeGear
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
33 \begin{itemize}
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
34 \item
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
35 Meta CodeGear は 通常の CodeGear では扱えないメタレベルの計算を扱う CodeGear
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
36 である。Agda での Meta CodeGear は Meta DataGear を引数に取りそれらの関係を返
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
37 す CodeGear である。故に、Meta CodeGear は Agda で記述した CodeGear の検証そのものである
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
38 \end{itemize}
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
39 \end{itemize}
3
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
40
4
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
41 \subsection{Code Gear の 遷移の検証}
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
42 これまで述べた手法にて、CodeGear の検証をすることができる。
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
43 しかし、CodeGear から 次の CodeGear へ正しく事後条件と事前条件が遷移していることを検証する必要がある。
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
44 % また、各 CodeGear が正しく停止することも重要である。
3
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
45
4
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
46 遷移の検証のために implies という data 型を導入する。
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
47 \lstinputlisting[label=implies, caption=implies] {src/implies.agda}
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
48 これにより CodeGear が正しく遷移できることを検証する。
3
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
49