annotate Paper/tex/spec.tex @ 6:9ec2d2ac1309

DONE 一度これで提出
author soto <soto@cr.ie.u-ryukyu.ac.jp>
date Thu, 05 May 2022 22:32:45 +0900
parents 14a0e409d574
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \section{検証手法}
6
9ec2d2ac1309 DONE 一度これで提出
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
2 本章では検証する際の手法を説明する.
9ec2d2ac1309 DONE 一度これで提出
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
3 CodeGear の引数となる DataGear が事前条件となり,
9ec2d2ac1309 DONE 一度これで提出
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
4 それを検証する為のPre Conditionを検証する為の Meta Gearsが存在する.
9ec2d2ac1309 DONE 一度これで提出
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
5 その後,さらに事後条件となる DetaGear も Meta Gears にて検証する.
9ec2d2ac1309 DONE 一度これで提出
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
6 これらを用いて Hoare Logic によりプログラムの検証を行いたい.
0
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 \subsection{CbC記法で書くagda}
6
9ec2d2ac1309 DONE 一度これで提出
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
9 CbCプログラムの検証をするに当たり,AgdaコードもCbC記法で記述を行う.つまり継続渡しを用いて記述する必要がある.
9ec2d2ac1309 DONE 一度これで提出
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
10 \coderef{agda-cg}が例となるコードである.
0
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 \lstinputlisting[caption= Agdaでの CodeGear の例, label=agda-cg]{src/cbc-agda.agda}
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
6
9ec2d2ac1309 DONE 一度これで提出
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
14 前述した加算を行うコードと比較すると,不定の型 (t) により継続を行なっている部分が見える.
9ec2d2ac1309 DONE 一度これで提出
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
15 これがAgdaで表現された CodeGear となる.
0
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 \subsection{agda による Meta Gears}
6
9ec2d2ac1309 DONE 一度これで提出
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
18 通常の Meta Gears はノーマルレベルの CodeGear, DataGear では扱えないメタレベルの計算を扱う単位である.
9ec2d2ac1309 DONE 一度これで提出
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
19 今回はその Meta Gears をAgdaによる検証の為に用いる.
0
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 \begin{itemize}
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 \item Meta DataGear \mbox{}\\
6
9ec2d2ac1309 DONE 一度これで提出
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
23 Agda 上で Meta DataGear を持つことでデータ構造自体が関係を持つデータを作ることができる.
9ec2d2ac1309 DONE 一度これで提出
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
24 これを用いることで,仕様となる制約条件を記述することができる.
0
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 \item Meta CodeGear\mbox{}\\
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 Meta CodeGear は 通常の CodeGear では扱えないメタレベルの計算を扱う CodeGear
6
9ec2d2ac1309 DONE 一度これで提出
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
28 である.Agda での Meta CodeGear は Meta DataGear を引数に取りそれらの関係を返
9ec2d2ac1309 DONE 一度これで提出
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
29 す CodeGear である.故に,Meta CodeGear は Agda で記述した CodeGear の検証そのものである
0
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 \end{itemize}
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31