Mercurial > hg > Papers > 2023 > soto-master
diff Paper/tex/dpp_impl.tex @ 5:eaef105dff41
Add paper dpp
author | soto <soto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 21 Jan 2023 17:57:20 +0900 |
parents | 4f5dde4cff0b |
children | 8c1e9a6d58e2 |
line wrap: on
line diff
--- a/Paper/tex/dpp_impl.tex Fri Jan 20 15:20:31 2023 +0900 +++ b/Paper/tex/dpp_impl.tex Sat Jan 21 17:57:20 2023 +0900 @@ -107,14 +107,13 @@ ここからは、モデル検査を行うため、Meta Data Gear の定義をし、 それの操作を行う Meta Code Gear の実装を行っていく。 -以下がMeta Code Gear の定義になる +以下\coderef{dpp-mdg}がMeta Code Gear の定義になる % ここにmetadata MetaEnv MetaEnv2のソースコードを貼り付ける +\lstinputlisting[caption=Gears Agdaでの DPP モデル検査を行うための Meta Data Gear の定義, label=code:dpp-mdg]{src/dpp-verif/dpp-metadata.agda.replaced} この Meta Data Gear の説明をすると、 - metadataは状態の分岐数を持っておくnum-brunchがある。 - MetaEnv はもとの DataGear を保持するDG(Data Gearの省略) meta に 前述したmetadataを持っており、 他には、deadlockしているかのフラグである deadlock 、 @@ -129,12 +128,14 @@ そしてnum-brunchの値が1であるということは、それ以上の状態に移動することができないとして、この状態をdead lockであると定義した。 -以下のソースコードがdead-lockを検知する関数となる +以下の\coderef{dpp-judge-mcg}がdead-lockを検知する関数となる 複雑なことは何もしておらず、単純にstate毎のnum-brunchの値を見て deadlockのフラグを立ち上げている。 % judge-dead-lock-pのソースコードを貼り付ける +\lstinputlisting[caption=DPP での dead lock を検知する Meta Code Gear, label=code:dpp-judge-mcg]{src/dpp-verif/judge-deadlock.agda.replaced} +% こいつはmetaEnv2を受け取れるように変えないと行けない ここから前述した通り、State Listを作成する。 @@ -143,10 +144,24 @@ 存在していた場合はそれを追加せず、存在しなかった場合にのみ State を追加する。 Agdaには2つの record が等しい場合の分岐など存在しないため、 -以下のソースコードのようにrecordの中身を一つづつ一致しているか確認する。 +\coderef{dpp-exclude-state-mcg} のようにrecordの中身を一つづつ一致しているか確認する。 +こちらはそのまま掲載すると長いので、実際のコードに手を加えて省略している。実際のコードは付録にて参照できる。 + +\lstinputlisting[caption=重複しているstateを除外する Meta Code Gear, label=code:dpp-exclude-state-mcg]{src/dpp-verif/exclude-same-env.agda.replaced} +% 手を加えているので詳細は付録を参照するように促す + +MetaEnv2 を受け取ってその中身の state を比較するが、そこまで展開する必要がある。 + loop-metaenv と loop-target-metaenv, eq-env にてそれを行っている。 -これで、 -まだ分岐を見ていない1つのStateの分岐を確かめる。 +更に15行目の loop-metaenv では State List 内に見つからなかった場合に State List に Stateを追加し、次のstateの一致を探索するように記述されている。 + +実際にstateの一致を見ているのは22行目のeq-env関数で、一致している State が見つかった場合には追加せずにこちらも次の State を探索するように記述されている + +State が保持している値がそれぞれ正しいのかは eq-pid のように一致を見て分岐させている。 +その値が一致している場合には別の値を見て、一致していない場合はeq-envに遷移して State List にある次の State との一致を見るようにしている。 +他の値である、lhandやrhandなども同じように記述している。 + +これらにて、まだ分岐を見ていない1つのStateの分岐を確かめる。 発生した分岐を step 実行させる。 step実行して作成された state が State Listに存在していないかを確かめる。 これを繰り返すことで State Listを作る。