annotate Paper/tex/intro.tex @ 14:ba98083f9853 default tip

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