annotate tex/spec.tex @ 11:a8bc8c6b48bd default tip

fix
author soto@cr.ie.u-ryukyu.ac.jp
date Tue, 15 Sep 2020 07:06:29 +0900
parents 27a6616b6683
children
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{検証手法}
11
soto@cr.ie.u-ryukyu.ac.jp
parents: 8
diff changeset
2 本章では検証する際の手法を説明する。
4
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
3 CodeGear の引数となる DataGear が事前条件となり、
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
4 それを検証する為のPre Conditionを検証する為の Meta Gearsが存在する。
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
5 その後、さらに事後条件となる DetaGear も Meta Gears にて検証する。
11
soto@cr.ie.u-ryukyu.ac.jp
parents: 8
diff changeset
6 これらを用いて Hoare Logic によりプログラムの検証を行いたい。
3
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
7
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
8 \subsection{CbC記法で書くagda}
11
soto@cr.ie.u-ryukyu.ac.jp
parents: 8
diff changeset
9 CbCプログラムの検証をするに当たり、AgdaコードもCbC記法で記述を行う。つまり継続渡しを用いて記述する必要がある。
soto@cr.ie.u-ryukyu.ac.jp
parents: 8
diff changeset
10 \coderef{agda-cg}が例となるコードである。
4
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
11
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
12 \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
13
3
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
14 前述した加算を行うコードと比較すると、不定の型 (t) により継続を行なっている部分が見える。
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
15 これがAgdaで表現された CodeGear となる。
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
16
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
17 \subsection{agda による Meta Gears}
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
18 通常の Meta Gears はノーマルレベルの CodeGear、 DataGear では扱えないメタレベルの計算を扱う単位である。
11
soto@cr.ie.u-ryukyu.ac.jp
parents: 8
diff changeset
19 今回はその Meta Gears をAgdaによる検証の為に用いる。
3
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
20
4
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
21 \begin{itemize}
7
acad18934981 add description of rbtree
soto@cr.ie.u-ryukyu.ac.jp
parents: 4
diff changeset
22 \item Meta DataGear \mbox{}\\
acad18934981 add description of rbtree
soto@cr.ie.u-ryukyu.ac.jp
parents: 4
diff changeset
23 Agda 上で Meta DataGear を持つことでデータ構造自体が関係を持つデータを作ることができる。
acad18934981 add description of rbtree
soto@cr.ie.u-ryukyu.ac.jp
parents: 4
diff changeset
24 これを用いることで、仕様となる制約条件を記述することができる。
acad18934981 add description of rbtree
soto@cr.ie.u-ryukyu.ac.jp
parents: 4
diff changeset
25
acad18934981 add description of rbtree
soto@cr.ie.u-ryukyu.ac.jp
parents: 4
diff changeset
26 \item Meta CodeGear\mbox{}\\
acad18934981 add description of rbtree
soto@cr.ie.u-ryukyu.ac.jp
parents: 4
diff changeset
27 Meta CodeGear は 通常の CodeGear では扱えないメタレベルの計算を扱う CodeGear
acad18934981 add description of rbtree
soto@cr.ie.u-ryukyu.ac.jp
parents: 4
diff changeset
28 である。Agda での Meta CodeGear は Meta DataGear を引数に取りそれらの関係を返
acad18934981 add description of rbtree
soto@cr.ie.u-ryukyu.ac.jp
parents: 4
diff changeset
29 す CodeGear である。故に、Meta CodeGear は Agda で記述した CodeGear の検証そのものである
4
35f0e5f12fe6 add verification method
soto@cr.ie.u-ryukyu.ac.jp
parents: 3
diff changeset
30 \end{itemize}
3
b124f02ea3f1 post agda code
soto@cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
31