annotate Paper/tex/intro.tex @ 4:7434c0aa1859

WIP SIGの論文ルールに基づいて修正中
author soto <soto@cr.ie.u-ryukyu.ac.jp>
date Thu, 05 May 2022 17:01:12 +0900
parents f9794e92f964
children 6c0b1fcbac2d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
f9794e92f964 WIP 8割くらいできた
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1 \section{Gears Agda でのモデル検査}
0
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 \pagenumbering{arabic}
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
4
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
4 思い思いにプログラムを書くと,冗長なコードができてしまい,
2
f9794e92f964 WIP 8割くらいできた
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
5 実行時間も遅い場合がある。
f9794e92f964 WIP 8割くらいできた
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
6
f9794e92f964 WIP 8割くらいできた
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
7 この場合にコードに対してアルゴリズムを適応すると実行が最適化され
4
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
8 実行時間が減り,かつ第三者がコードを読んだ際にロジックが統一されているため理解が容易くなる。
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
9 つまり,一般的に良いコードが作成できる。
0
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
4
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
11 しかし,世の中にはすでに大量のアルゴリズムが存在するため,
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
12 これを一人のプログラマーが全て覚え,適応できる場面を思いつくというのは不可能に近い。
2
f9794e92f964 WIP 8割くらいできた
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
13 その道に詳しい人が複数人いる場面というのも稀だと考えられる。
f9794e92f964 WIP 8割くらいできた
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
14
4
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
15 そのため,人が書いたコードに対してアルゴリズムを使用するコードに変換できるようにしたい。
0
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
4
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
17 この際,アルゴリズム適応前後で処理が変わっていないか検証するのは普通のプログラミング言語では難しい。
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
18 一般的なプログラミング言語では,関数の遷移が自由であることから,関数遷移などで発生した
2
f9794e92f964 WIP 8割くらいできた
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
19 暗黙の環境が存在するためである。
f9794e92f964 WIP 8割くらいできた
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
20
4
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
21 この問題を解決するため,Gears Agda を用いる。
0
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22
4
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
23 Gears Agda とは当研究室で開発している Continuation based C (CbC) の概念を取り入れた記法で書かれた Agda のことで,
2
f9794e92f964 WIP 8割くらいできた
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
24 通常のプログラミング言語では関数を実行する際にはメインルーチンからサブルーチンに遷移する。
4
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
25 この際メインルーチンで使用していた変数などの環境はスタックされ,サブルーチンが終了した際にメインルーチンに戻り,
2
f9794e92f964 WIP 8割くらいできた
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
26 スタックしていた変数をもとに戻す流れとなる。
4
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
27 CbCの場合はサブルーチンコールの際にアセンブラで言うjmpで関数遷移を行うことができ,スタックを持たず環境を保持しない。
2
f9794e92f964 WIP 8割くらいできた
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
28 更に遷移後にメインルーチンに戻ることもない。
4
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
29 つまり関数の実行では暗黙な環境が存在せず,関数が受け取った引数のみを使用する。
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
30 これにより限定的な実行条件を作成でき,検証がしやすくなる。
2
f9794e92f964 WIP 8割くらいできた
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
31
4
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
32 現在,アルゴリズムの適応可否は以下の方法を考えている。
0
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
4
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
34 あらかじめ,アルゴリズムの実装と検証をおこなったアルゴリズムSetsを用意しておく。
2
f9794e92f964 WIP 8割くらいできた
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
35
4
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
36 書いたコードが事前に定義していたアルゴリズムの仕様を満たしているかを検証していき,
2
f9794e92f964 WIP 8割くらいできた
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
37 満たしているコードがあった場合にそのコードを事前に定義してあるアルゴリズムに入れ替える方針を考えている。
f9794e92f964 WIP 8割くらいできた
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
38
4
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
39 この際,実装が仕様を満たしているか検証する手法には,定理証明やモデル検査などが挙げられる。
0
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
4
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
41 アルゴリズムの入れ替え可否判定には Gears Agda でモデル検査を行い,
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
42 アルゴリズムの仕様がコードに適応できるか検証するのが妥当だと考えている。
7434c0aa1859 WIP SIGの論文ルールに基づいて修正中
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
43 思い思いに書いたコードに対して定理証明を行うのはコストが高く,適応するものの内部動作が一致しない場合定理証明を行っても使えないためである。
0
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
2
f9794e92f964 WIP 8割くらいできた
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
45 本論文では Gears Agda でのモデル検査の先駆けとして Dining philosophers problem (DPP) のモデル検査を行う。
0
14a0e409d574 ADD fast commit
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46