2
|
1 \section{検証手法}
|
|
2 手法は模索中であり、先行研究と同じ手法を取ろうとしている。本章では先行研究で述べられている検証手法について説明する。
|
1
|
3 \subsection{CbC記法で書くagda}
|
|
4 CbCプログラムの検証をするに当たり、agdaコードもCbC記法で記述を行う。つまり継続渡しを用いて記述する必要がある。
|
|
5 以下が例となるコードである。
|
|
6 前述した加算を行うコードと比較すると、不定の型 (t) により継続を行なっている部分が見える。
|
|
7 これがAgdaで表現された CodeGear となる。
|
|
8
|
|
9 \subsection{agda による Meta Gears}
|
|
10 通常の Meta Gears はノーマルレベルの CodeGear、 DataGear では扱えないメタレベルの計算を扱う単位である。
|
|
11 Meta DataGear はメタ計算で使われる DataGear で、実行するメタ計算によって異なる。
|
|
12 今回はその Meta Gears をagdaによる検証の為に用いる。
|
|
13 検証での Meta Gears は DataGear が持つ同値関係や、
|
|
14 大小関係などの関係を表す DataGear がそれに当たると考えられる。
|
|
15 Agda 上で Meta DataGear を持つことでデータ構造自体が関係を持つデータを作ることができる。
|
|
16 以下が While Program での制約条件をまとめたものになる。
|
|
17 Agdaにおける Meta DataGear のコードを載せる。
|
|
18 \lstinputlisting[label=pg:sample]{./src/agda-mdg.agda}
|
|
19 whileTestState で Meta DataGear を識別するためのデータを分け、
|
|
20 whileTestStatePでそれぞれの Meta DataGear を返している。
|
|
21 ここでは = の後ろの (vari env ≡ 0) (varn env ≡
|
|
22 c10 env)/ などのデータを Meta DataGear として扱う。
|
|
23 aa
|
|
24
|