annotate paper/cbc_agda.tex @ 5:196ba119ca89

fix, and add mindmap->pdf
author ryokka
date Mon, 03 Feb 2020 21:47:43 +0900
parents b5fffa8ae875
children d30593612a38
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
41a936510fd0 Initialize
ryokka
parents:
diff changeset
1 \chapter{Continuation based C と Agda}
5
196ba119ca89 fix, and add mindmap->pdf
ryokka
parents: 4
diff changeset
2 \label{c:cbc_agda}
196ba119ca89 fix, and add mindmap->pdf
ryokka
parents: 4
diff changeset
3 現在 Agda は CbC の上位言語として使用されており、
196ba119ca89 fix, and add mindmap->pdf
ryokka
parents: 4
diff changeset
4 Agda で記述された CbC のプログラムはメタ計算を含む形で記述される。
196ba119ca89 fix, and add mindmap->pdf
ryokka
parents: 4
diff changeset
5 しかし、
196ba119ca89 fix, and add mindmap->pdf
ryokka
parents: 4
diff changeset
6
0
41a936510fd0 Initialize
ryokka
parents:
diff changeset
7
4
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
8 本章では当研究室で推奨している単位を用いての検証を行うため、
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
9 Agda 上で DataGear、 CodeGear の表現を示す。
2
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
10 また、Gear の単位と Hoare Logic を対応させ、
4
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
11 CbC 上での Hoare Logic について示す。
2
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
12
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
13
0
41a936510fd0 Initialize
ryokka
parents:
diff changeset
14
4
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
15 \section{DataGear、 CodeGear と Agdaの対応}
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
16 DataGear は Agda で使うことのできるすべてのデータに対応する。
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
17 また、Agda での記述はメタ計算として扱われるので Context を通してデータを
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
18 扱う必要はない。
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
19
2
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
20 CodeGear は DataGear を受け取って処理を行い DataGear を返す。
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
21 また、CodeGear 間の移動は継続を用いて行われる。
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
22 継続は関数呼び出しとは異なり、呼び出した後に元のコードに戻らず、
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
23 次の CodeGear へ継続を行う。
4
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
24
2
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
25 これは、関数型プログラミングでは末尾関数呼び出しを行うことに相当するため、
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
26 継続渡し(Continuation Passing Style) で書かれた Agda の関数と対応する。
3
ryokka
parents: 2
diff changeset
27 継続は不定の型 (\verb/t/) を返す関数で表される。
ryokka
parents: 2
diff changeset
28 CodeGear は次に実行する関数の型を引数として受け取り不定の型\verb/t/を返す関数として記述され、
ryokka
parents: 2
diff changeset
29 CodeGear 自体も同じ型 \verb/t/ を返す関数となる。
4
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
30 コード \ref{agda-while} は Agda で記述した CodeGear の例である。
0
41a936510fd0 Initialize
ryokka
parents:
diff changeset
31
4
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
32 \lstinputlisting[caption= whileTest の型, label=agda-while]{src/while-test.agda.replaced}
2
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
33 %% Agda のとこで Level の話を…!
3
ryokka
parents: 2
diff changeset
34 ここでは \verb/c10/ と名付けた自然数を受け取った後、
ryokka
parents: 2
diff changeset
35 \verb/Env/ を受け取って不定の型\verb/t/を返す関数を受け取り、
ryokka
parents: 2
diff changeset
36 \verb/t/を返す CodeGear を定義している。
2
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
37
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
38
4
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
39 \section{Meta CodeGear の表現と Meta DataGear}
2
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
40 Meta CodeGear は 通常の CodeGear では扱えないメタレベルの計算を扱う CodeGear である。
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
41 Agda での Meta CodeGear は通常の CodeGear を引数に取りそれらの関係などの上位概念を返す CodeGear である。
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
42 これは(図を入れる)のような Code Gear となる。
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
43
4
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
44 % \lstinputlisting[label=src:agda-mcg, caption= Agda における Meta CodeGear 型の定義] {src/MetaCodeGear.agda.replaced}
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
45
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
46 Meta DataGear については不確かであるが、 DataGear が持つ同値関係や、大小関係などの関係を表す DataGear がそれに当たると考えている。
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
47 Agda 上では Meta DataGear を持つことで性質を持ったデータ構造を作ることができる。
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
48
2
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
49 % \lstinputlisting[label=src:agda-cs, caption= Agda における CodeGear 型の定義] {src/CodeSegment.agda.replaced}
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
50
0
41a936510fd0 Initialize
ryokka
parents:
diff changeset
51 \section{CbC 上での HoareLogic の実現}
2
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
52 CbC 上の Hoare Logic は引数として事前条件、次の CodeGear に渡す値に事後条件を含めることで記述する。
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
53 その際に事前条件が CodeGear で変更され、事後条件を導く形になる。
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
54 例として while プログラムの CbC 記述についてみる。
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
55
4
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
56
2
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
57 %% コード
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
58 ここでは~
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
59
4
b5fffa8ae875 fix chapter hoare
ryokka
parents: 3
diff changeset
60 Hoare Logic の記述を行い、部分的な整合性を示すことができている。
2
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
61 全体の検証を行うためには接続されているすべての CodeGear が実行されたときの健全性(Soundness)が担保される必要がある。
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
62 そのため、検証用の Meta CodeGear を記述する。
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
63 例として while プログラムの健全性を担保するプログラムをみる。
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
64 %% コード
c7acb9211784 add code, figure. and paper fix content
ryokka
parents: 0
diff changeset
65 このコードでは CodeGear をつなげて終了状態まで実行したとき最後の事後条件が成り立っているため、これらの実行が正しく終了することを示すことができる。