annotate Paper/tex/spin_dpp.tex @ 15:f0d512637e52

Add ref
author soto <soto@cr.ie.u-ryukyu.ac.jp>
date Wed, 01 Feb 2023 22:16:45 +0900
parents 3aa9d35e93bf
children 40a9af45b375
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12
3aa9d35e93bf add conclusion
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
1 \chapter{Gears Agda によるモデル検査}
3aa9d35e93bf add conclusion
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
2 定理証明では数学的な証明をするため状態爆発を起こさず検証を行うことが
3aa9d35e93bf add conclusion
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
3 できるが,専門的な知識が多く難易度が高いという欠点がある.
15
f0d512637e52 Add ref
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
4 加えて,CbCでは並列処理も実行できる\cite{parusu-master}が,
f0d512637e52 Add ref
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
5 並列処理を定理証明するには検証する状態が膨大になり困難である.
f0d512637e52 Add ref
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
6 そのため,並列処理はモデル検査にて検証する方が良い.
12
3aa9d35e93bf add conclusion
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
7
3aa9d35e93bf add conclusion
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
8 \section{モデル検査とは}
15
f0d512637e52 Add ref
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
9 モデル検査 (Model Cheking) とは,検証手法のひとつである.
12
3aa9d35e93bf add conclusion
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
10 モデル検査はプログラムが入力に対して仕様を満たした動作を
3aa9d35e93bf add conclusion
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
11 行うことを網羅的に検証することを指す.
15
f0d512637e52 Add ref
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
12 しかし,モデル検査と定理証明を比較した際に,モデル検査は入力が無限になる
12
3aa9d35e93bf add conclusion
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
13 状態爆発が起こり得るという問題がある.
15
f0d512637e52 Add ref
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
14 実際にモデル検査で行うことは,検証したい内容の時相理論式 $\varphi$ を作り,対象のシステムの初期状態 s のモデル M があるとき,M, s が $\varphi$ を満たすかを調べる.
12
3aa9d35e93bf add conclusion
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
15
7
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 \section{Dining Philosophers Problem}
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 今回はモデル検査を行う対象として Dining Philosophers Problem (以下DPP)
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 を用いることとした.
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 DPP とは資源共有問題であり,モデル検査をする際に挙げられる代表的な問題
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 である.
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 DPPのストーリーを図 \ref{fig:DPP} に示している.
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 \begin{figure}[htpb]
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 \begin{center}
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 \scalebox{0.5}{\includegraphics{fig/Dining.pdf}}
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 \end{center}
9
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
28 \caption{Dining Philosophers Program のイメージ図}
7
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 \label{fig:DPP}
9
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
30 \end{figure}
7
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 したがって,哲学者は以下のようなフローを独立して並列に繰り返し実行することとなる.
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 \begin{enumerate}
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 \item しばらくの間思考を行う
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 \item 食事をするために右のフォークを取る
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 \item 右のフォークを取ったら,次は左のフォークを取る
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 \item 両方のフォークを取ったら,しばらく食事をする
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 \item 思考に戻るために左手に持っているフォークをテーブルに置く
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 \item 左手のフォークを置いたあとは右のフォークをテーブルに置く
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 \end{enumerate}
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 この際,すべての哲学者が同時に右のフォークを取った場合のことを考える.
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 すべての哲学者はフォークを持っている.次に哲学者は左のフォークを取ろうと
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 する.しかしフォークは哲学者の人数と同じ数だけ存在しているため,
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 テーブルの上にフォークはすでにひとつも存在しない.
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 すべての哲学者は左のフォークを取ろうとするが
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 誰も右のフォークを置くことがないため,すべての哲学者の動作がこの状態で止まる.(dead lock)
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 これが起こることを Gears Agda で検出したい.
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 \section{SPINによるモデル検査}% 内容にそぐわない場合は使わない
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
15
f0d512637e52 Add ref
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
53 SPIN(Simple Promela INterpreter) \cite{spin}とは一般的にモデル検査に使用されるツールである.これは使用記述言語 PROMELA(Process Meta Language) による記述を元にプログラムが取る状態を網羅し,モデル検査を行うことができる.
7
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54
15
f0d512637e52 Add ref
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
55 今回 Gears Agda でのモデル検査と比較するために,SPINでのDPPプログラムのモデル検査に必要なコードの一部を\coderef{spin-dpp}に載せる.
7
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 \lstinputlisting[caption= SPINにてDPPをモデル検査する際のコードの一部 , label=code:spin-dpp]{src/dpp-verif/spin.pml}
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58
15
f0d512637e52 Add ref
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
59 コードを簡単に説明する.哲学者がThinkの状態から食事をしようとしだした際の状態の変化が4行目と5行目になっている.
f0d512637e52 Add ref
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
60 forkの状態を配列で管理している.0 である状態が誰もそのforkを持っていない状態である.ここでは,5人目の人が右手にあるフォークを取ろうとした際に配列の最初を取ることが5行目に記述されている.
7
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61
15
f0d512637e52 Add ref
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
62 左手のフォークを取る動作も同じように記述する.
f0d512637e52 Add ref
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
63 SPINではこのコードを元にプログラムが取りうる状態全てを網羅し,モデル検査を行うことができる.
7
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64
15
f0d512637e52 Add ref
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
65 \figref{DPP-model}はこのPromelaから作成された状態遷移図になる.
f0d512637e52 Add ref
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
66 SPINではコードからプログラムの状態遷移図を出力することができる他,プログラムのstep実行など幅広くモデル検査を行うことができる.
7
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 \begin{figure}[htpb]
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 \begin{center}
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 \scalebox{0.6}{\includegraphics{fig/dpp-model.pdf}}
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 \end{center}
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 \caption{SPINにて作成した状態遷移図}
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 \label{fig:DPP-model}
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 \end{figure}
c821e707a5ee Add paper dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
11
1a8a9fa534a2 add dpp
soto <soto@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
76