annotate tex/spec.tex @ 8:27a6616b6683

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