An Introduction to Communicating Sequential Processes Hisabumi HATSUGAI [email protected] PRINCIPIA Limited http://www.principia-m.com/ ©2016 PRINCIPIA Limited 1 並行システムとリアクティブシステム ● 多くのシステムは並行システムである: – 並行に動作する複数の実行主体からなり,協調して目的の仕 事をするシステム – 例 ● 組込システム – – ● アプリケーション – – ● 複数の CPU ,複数のプロセス 並行動作するデバイス群 ユーザインタフェイス ネットワーク通信 並行システム 並行システムはリアクティブシステムである: – 外界との相互作用 – 継続的な動作 ©2016 PRINCIPIA Limited 2 計算システムとリアクティブシステム in in f out out 計算システム リアクティブシステム 「リアクティブシステムとは,システムの外部(システムの利用者や他のシス テムなど)とのやりとりを行いながら計算の実行やサービスの提供を継続する ことを目的とするシステムである.」 – コンピュータサイエンス入門 - 論理とプログラム意味論,岩波書店 ©2016 PRINCIPIA Limited 3 並行システム ● 並行システムは階層的なリアクティブシステムである – 構成要素(コンポーネント)もリアクティブシステム – 外界とシステム,および構成要素間にも相互作用がある 自律的に動作 する実行主体 相互作用 相互作用 ©2016 PRINCIPIA Limited このようなシステムの振る舞いを規定し,設計し 検証するためには何が必要か 4 計算システムの開発基盤 システムの認識 システムをどのようなものだと認 識するか システムの記述 仕様と実装をどのように記述する か(振る舞いについて) 記述の意味 記述が意味することをどのように 厳密に定めるか 正当性の条件 計算 入出力の関係 仕様:数学による関係表現,事前・事後条件 実装:プログラミング言語 表示的意味論:プログラム→入出力の関係 包含関係は実装を容易に 操作的意味論 するためのゆとり (opt.) 公理的意味論: Hoare 論理 R dom dom R 実装が仕様を満たしているという 仕様 条件は何か 検証の方法 正当性を検証する方法にはどのよ うなものがあるか ©2016 PRINCIPIA Limited 対比として 実装 dom R S 仕様が規定する範囲の 入力は受理できること 出力は仕様が規定する 範囲から選ぶこと 表示に基づくテスト,正当性条件の証明 Hoare 論理 定義域制限演算子 包含関係は 非決定性の減少 A R {(x, y) | x A (x, y) R} 5 CSP とは ● ● Communicating Sequential Processes 並行システムの振る舞いを記述し,その性質を論証するための数 学的理論 – プロセス代数と呼ばれる理論の 1 つ(他に計算など) ● 1978 年 C. A. R. Hoare によって提案された ● 特徴 – 詳細化関係の定義 – 豊富な意味論 ©2016 PRINCIPIA Limited Photograph by Rama, Wikimedia Commons, Cc-by-sa-2.0-fr 6 並行システムの開発基盤 システムの認識 システムをどのようなものだと認 識するか 計算と相互作用 継続的に相互作用を行う状態遷移システム システムの記述 仕様と実装をどのように記述する か(振る舞いについて) 記述の意味 記述が意味することをどのように 厳密に定めるか 正当性の条件 実装が仕様を満たしているという 条件は何か 検証の方法 正当性を検証する方法にはどのよ うなものがあるか ©2016 PRINCIPIA Limited 7 システムの認識:時間と状態遷移 ● 「継続的に」 – 物理世界の時間概念に対応する何等かの抽象的な時間概念が 必要.時間経過とともにシステムが変化する 状態遷移システム ● – ある時刻における実行の断面としての状態がある – システムの変化としての遷移がある 遷移の発生順序関係を抽象的・離散的な時間と考える – 遷移の発生を瞬間的なものと理想化して考える – 遷移間の状態に滞在する時間の長さは捨象する ※ 定量的な時間を導入した理論もある: Timed-CSP ©2016 PRINCIPIA Limited 8 相互作用とは何か ● 情報を伝達し,お互いの振る舞いに影響を与えるもの ● 応用で利用されている相互作用例: ● – 制御渡し,共有メモリ,メッセージ通信,同期機構(セマフォ, ミューテックス,条件変数等),ソケット – ユーザとの対話 – CPU とデバイス間の通信 理論でプリミティブとする相互作用に望まれる性質: – 意味が厳密で議論・分析に適している – 上述のような既存の相互作用を記述(モデル化)できる – 並行合成を定義できる – 振る舞いの記述が可能でそれに基づいて正当性が定義できる ©2016 PRINCIPIA Limited 9 プリミティブ相互作用の選択 e イベントによる同期型相互作用 e e CSP 遷移が同時に発生することが相互作用であると 考える.同じラベルの付いた遷移が同期する. これをイベントという.イベントは作用の意味 を表す. s := f(x) 共有メモリによる相互作用 x y ? e 共有メモリを通じて情報の受け渡しを行う.遷 移はすべて独立して発生する.遷移に付随して [g]/y := h(s) 共有メモリの読み書きができる.ガードによっ てブロックを表すモデルもある. 非同期相互作用(?) e e ©2016 PRINCIPIA Limited 発生した遷移に付随する情報がなんらかの方法 で時間的に後の時刻に別のコンポーネントに届 き,遷移を引き起こすとともに情報が渡され る. 10 並行システムの開発基盤 システムの認識 システムをどのようなものだと認 識するか システムの記述 仕様と実装をどのように記述する か(振る舞いについて) 計算と相互作用 継続的に相互作用を行う状態遷移システム CSP の構文: イベント同期,チャネル送受信,選択,非決定的選択, 並行合成,隠蔽,逐次合成,改名 記述の意味 記述が意味することをどのように 厳密に定めるか 正当性の条件 実装が仕様を満たしているという 条件は何か 検証の方法 正当性を検証する方法にはどのよ うなものがあるか ©2016 PRINCIPIA Limited 11 CSP 構文 ::= STOP | SKIP | e | A | c!v | c | cA | <b> Q | Q | Q | Q ©2016 PRINCIPIA Limited | || Q X プロセス代数という名のとおり プロセスの様々な振る舞いを表 すための定数と演算子がある | ||| Q | \X | | | i iI i iI ||X i iI 12 一部紹介 CSP 構文: 逐次プロセス チャネル送信 イベント同期 e cv eP チャネル受信 prefix-choice a0 a1 a2 a3 a4 cv P c.a0 c.a1 c.a2 c.a3 c.a4 ?x:A P ai A 停止(デッドロック) STOP 再帰 P F (P ) c?x:A P ai A 選択 P P Q Q ©2016 PRINCIPIA Limited 13 プロセスの定義例:キュー in Q in?x/s := sx out s out!hd(s)[s = ]/s := tl(s) Q(s) in?x Q(sx) (if s = then STOP else out ! hd(s) Q(tl(s))) ※ STOP は選択 の単位元 ©2016 PRINCIPIA Limited 14 CSP 構文: 並行合成 並行合成 || Q X X P ● 閉包性( closure property ) – ● Q プロセスと Q を並行合成したプロセスを表 す.イベントの集合 X に含まれるイベント について同期する プロセスを並行合成した結果はプロセスになる 合成性( compositionality ) – 並行合成したプロセスの振る舞いは,構成要素であるサブプロセスとその 間の相互作用によってすべて決定される これらの性質のおかげで議論が容易になる ©2016 PRINCIPIA Limited ※ 関数型プログラミングにおける関数や,オブジェクト指 向プログラミングにおけるオブジェクトと同様(?) 15 CSP 構文: 隠蔽 隠蔽 Y 並行合成の結果としてのプロセスには コンポーネント間の相互作用が残って おり,外部から観測することができ る.具体的にはイベント集合 X に含ま れるイベントの発生が見える X Z Y P X X Z ©2016 PRINCIPIA Limited 隠蔽は指定されたイベントの集合に含 まれるイベントを不可視にする.これ によって外部から観測可能なイベント のみからなる合成系本来のプロセスを 得ることができる 16 内部遷移・非決定性 P \ b P a a b 非決定的選択 P Q 内部イベントによる分岐の形があると,どちらかの遷移 が自発的に発生して外部から制御することも観測するこ ともできない.このような性質を非決定性という.非決 定性は再現しにくい不具合の原因になることがある.ま た,非決定性は仕様において許容を表すためにも使用さ れる ● ● ©2016 PRINCIPIA Limited 隠蔽されたイベントは という特別なイベン トになる.これは同期のためのイベントでは なく自発的に発生する.外部から観測するこ とのできないシステム内部での動作を表す. 内部イベントともいう.またこの遷移を内部 遷移という 非決定性は確率事象とは限らない.テスト回数を増やせば信頼 性が上がるとは必ずしもいえない 非決定性は計算システムにもある.同期しない遷移の発生順序 が任意であるであることから並行システムでは発生しやすい 17 発散(ライブロック) 内部遷移の循環ができると,自発的な遷移を繰り返し外部と相互作用ができなくなる. この現象を発散( divergence )またはライブロックという a A B ©2016 PRINCIPIA Limited b C 18 並行システムの開発基盤 システムの認識 システムをどのようなものだと認 識するか システムの記述 仕様と実装をどのように記述する か(振る舞いについて) 記述の意味 記述が意味することをどのように 厳密に定めるか 計算と相互作用 継続的に相互作用を行う状態遷移システム CSP の構文: イベント同期,チャネル送受信,選択,非決定的選択, 並行合成,隠蔽,逐次合成,改名 表示的意味論:トレース意味論,安定失敗意味論, 発散失敗意味論 操作的意味論 代数的意味論 正当性の条件 実装が仕様を満たしているという 条件は何か 検証の方法 正当性を検証する方法にはどのよ うなものがあるか ©2016 PRINCIPIA Limited 19 CSP の表示的意味論 a b a b トレース意味論 安定失敗意味論 [ ] traces(P ) [ ] (traces(P ), failures(P )) 観測 failures(P ) = {(s, X) | s traces(P ) X refusals(P /s)} req, ack, calc, wait, ... システムを外部から観測したときにみえる, システムが発生させうるすべてのイベント列 の集合をプロセスの振る舞い(意味)だと考 える.システムが起動時から発生するイベン ト列をトレースという ©2016 PRINCIPIA Limited 提示 プロセスが持つ非決定性を識別するために 拒否( refusals )という概念を導入する. プロセスにイベントの集合 を提示したと きにデッドロックする可能性があるならば それを拒否という.各状態における拒否を 安定失敗( failures )といい,これを加えた 20 意味論を安定失敗意味論という CSP 表示的意味論 failures(STOP) = ( X) | X } traces(STOP) = } traces(SKIP) = } failures(SKIP) = ( X) | X } ( X) | X } traces(P Q) = traces(P ) traces(Q) failures(P Q) = failures(P ) failures(Q) traces(a P ) = } a^s | s traces(P )} traces(P Q) = traces(P ) traces(Q) traces(P Q ) = s | s traces(P ) A (s)} failures(a P ) = ( X) | a A X} (a^s X) | (s X) failures(P )} failures(P Q) = ( X) | ( X) failures(P ) failures(Q)} (s X) | s = (s X) failures(P ) failures(Q)} s^t | s^ traces(P ) t traces(Q )} traces(P || Q ) = u | s t. s traces(P ) t traces(Q ) X u synchX(s t)} traces(P \ X ) = s \ X | s traces(P ) } synchX(s t) synchX(t s) synchX( ) } ( X) | X traces(P ) traces(Q)} failures(P Q) = (s X) | (s X }) failures(P )} (s^t X) | s^ traces(P ) (t X ) failures(Q)} failures(P || Q) = (u Y Z ) | Y (X }) = Z (X }) X (t Z ) failures(Q) x x X x = x y y A X synchX( x) } synchX( y) y} synchX(x^s y^t) y^u | u synchX(x^s t)} synchX(x^s x^t) x^u | u synchX(s t)} synchX(x^s x^t) } synchX(y^s y ^t) y^u | u synchX(s y ^t)} y ^u | u synchX(y^s t)} synchX(s t^) } s t (s Y ) failures(P ) u synchX(s t) failures(P \ X) = (s \ X Y ) | (s X Y ) failures(P )} \ X x^s \ X s \ X y^s \ X y^s \ X x X y A X s^ \ X s \ X^ synchX(s^ t^) u^ | u synchX(s t)} ©2016 PRINCIPIA Limited 21 再帰的に定義されたプロセスの表示 例 再帰的に定義されたプロセスの表示は,定義式 から定まる意味関数の不動点になる P aP traces(P) = traces(a P) P F P traces(P) = } a^s | s traces(P)} これは traces(P) を未知数 とする方程式になっている [ ] [F ] X = } a^s | s X} ※ 連立方程式系の場合はもう少し複雑,不動点は関数になる プロセス領域の構造(トレース意味論,安定失敗意味論の場合) 完備束( Complete Lattice ) ● ● ● 完備距離空間( CMS ) 集合の包含関係を順序とする 最小不動点( least-fixed-point, lfp )を採用す るとよいことがわかっている 発散しているプロセスは一般に複数の不動点 を持つ ※ 再帰関数の理論と同様 ©2016 PRINCIPIA Limited ● ● ● トレースに基づく距離を定義する 唯一の不動点を持つ(意味関数が連続な縮小 写像になる) 発散しているプロセスを除く(より正確には 非構成的なプロセス) ※ 微分方程式の解の存在および一意性と同様 解の存在の保証と性質を議論するための基盤を提供してくれる 22 CSP の操作的意味論 イベントの集合(アルファベット) プロセスの集合 各プロセスの記述(式)が持つ遷移を推論規則によって定める u P IP ● ● 矢印は遷移を表す関係 P P 遷移のラベルはイベントのいずれか 内部イベント 例 正常終了イベント tick 前提 Para3 P IP 規則名 QIQ P || QIP || Q a 付帯条件 帰結 ● ● プロセスの遷移から状態遷移システム(ラベル付き遷移システム, LabelledTransition-System, LTS )が求められる 遷移から traces, failures などの表示を求めることができる ©2016 PRINCIPIA Limited 23 CSP の操作的意味論 PName a P P a N P Prefix Skip SKIP a P || Q X Q Para5 Q P || Q Q P || X P PQ P P || Q P P Q P X IntCh2 Seq1 Para4 P Q a aP IntCh1 P a = X Para6 || P Q X ExtCh1 a P a P Q ExtCh2 a Q P Q ExtCh3 P P Q ExtCh4 P Q P Q a = Q a Seq2 P Q P PQ a = P || Q P || Q X P P Q P || Q Q P P Q ©2016 PRINCIPIA Limited Q a P || Q X Para3 a a a A {} X P P || Q X a Q a P || Q Q P Hide2 Hide3 P P \X P P \X a P P \X X Q Para2 a A {} a a P \X P a P Hide1 Q a P Para1 P P \X a A {} a P a X 24 ● CSP の代数的意味論 ● ● ● 同値なプロセスを代数規則(公理)によって定める ● ● 例 ● input-dist ?x A P Q ?x A P ?x A Q 規則による同値変形 a c P || c b Q = ||-step a c P || c b Q = ||-step a c P || b Q ステップ則による書き換えによって並行合成 されたプロセスを逐次プロセスに書き換える ことができる ©2016 PRINCIPIA Limited 冪等律 反射律 対称律 結合律 分配律 ステップ則 ... プロセスの標準形( head-normal-form ) ?x :A iI i i i 代数規則によって発散していないすべてのプロセス をこの形に書き換えることができる.それにより再 帰プロセスの比較が可能になる(後述). 非決定性を非決定的選択の部分に集約した形になっ ている. ※ 終了するプロセスおよび発散を除く 25 代数的意味論 P || Q Q || P ||-sym P || (Q R) (P || Q) (P || R) ||-dist P || (Q || R) (P || Q) || R ||-assoc X P PP -idem P PP -idem P QQP -sym P QQ P -sym X X X X X X X X X X X P Q R P Q R -assoc P ?x A P , Q ?x B Q P Q R P Q R -assoc P Q R P Q P R P || Q ?x C P || Q <x X> -dist a P Q a P a Q prefix-dist P Q R P Q P R --dist ?x A P Q ?x A P ?x A Q input-dist STOP ?x P STOP P P ?x A P ?x B Q <·>-dist-l R <b> P Q R <b> P R <b> Q <·>-dist-r P <true> Q P <true>-id P <false> Q Q <false>-id <·>--dist X P || Q <x A> P || Q)) X X where C = X A B A X B X P Q \ X P \ X Q \ X hide-dist P \ X \ Y P \ X Y -step P Q <b> R P <b> R Q <b> R Limited P ©2016 Q <b>PRINCIPIA R P Q <b> P R X -unit <·>-idem X X P || Q P || Q <x A B> STOP-step ?x A B P Q <x A B> P <x A> Q P <b> P P X ||-step hide-combine null hiding P \ {} P a P \ X P \X hide-step1 if a X a P \ X if a A X (?x A P ) \ X ?x A (P \ X) if A X {} ((?x (A X) (P \ X)) STOP) if A X = {} hide-step P [a/x] \ X a A X 26 意味論の等価性( congruence ) 表示的意味論と操作的意味論の等価性 操作的意味論から導出した表示と,表示的意味論によって定義された不動点 としての表示が一致することの証明 S.D. Brookes, A.W. Roscoe and D.J. Walker, An operational semantics for CSP, Technical report, 1988 ※ トレース意味論については定理証明系 Isabelle による形式的証明がある 表示的意味論と代数的意味論の等価性 表示的意味論によるプロセスの同値類と一致する代数的公理の選定および証明 Yoshinao Isobe, Markus Roggenbach, A Complete Axiomatic Semantics for the CSP Stable-Failures Model, 2006 ※ Isabelle によって形式的に証明されている.後ほど紹介する CSP-Prover の中に証明がある ©2016 PRINCIPIA Limited 27 並行システムの開発基盤 システムの認識 システムをどのようなものだと認 識するか システムの記述 仕様と実装をどのように記述する か(振る舞いについて) 記述の意味 記述が意味することをどのように 厳密に定めるか 正当性の条件 実装が仕様を満たしているという 条件は何か 計算と相互作用 継続的に相互作用を行う状態遷移システム CSP の構文: イベント同期,チャネル送受信,選択,非決定的選択, 並行合成,隠蔽,逐次合成,改名 表示的意味論:トレース意味論,安定失敗意味論, 発散失敗意味論 操作的意味論 代数的意味論 安全性 (safety) S T R traces(R) traces(S) 活性 (liveness) S F R S T R failures(R) failures(S) 検証の方法 正当性を検証する方法にはどのよ うなものがあるか ©2016 PRINCIPIA Limited 28 正当性関係(詳細化関係) 仕様を表すプロセス S と実装を表すプロセス R があり,実装 R が仕様 S を 満たしているとき, R は S を詳細化したものであるといい, 2 つのプロセス の間には詳細化関係( refinement relation )があるという.これを以下の記 号で表す.これはいわゆる正当性関係を一般化したものである 安全性 (safety) SR 仕様が行ってもよいということだけ を行う 表示的意味論(トレース)による定義 S T R traces(R) traces(S) 表示的意味論(安定失敗)による定義 活性 (liveness) 仕様が拒否してもよいというイベン ト集合だけ拒否する S R S T R failures(R) failures(S) 代数的意味論による定義 SR SR=S ©2016 PRINCIPIA Limited = 仕様が拒否しないものは 必ず発生する 直感的にいうと, R の振る舞いは S に含まれているので 非決定的に結合すると S と区別できないということ M[P Q ] = M[P ] M[P ], A = 29 同値性・段階的詳細化・単調性 CSP が持つよい性質 プロセスの同値性 P =Q P Q Q P 反対称律 詳細化関係から同値性を導くことができる 段階的詳細化 P0 P1 P1 P2 ... PN1 PN P0 PN 仕様から実装へ段階的に詳細化することができる 推移律 cf. B-method 構成要素の交換 P P C[P ] C[P ] 単調性 S C[P ] S C[P ] 推移律 C[P ] は P を含む任意のプロセス式 システムの一部であるプロセス P を,詳細化関係を満たすプロセス P で置き換えた システムは,元のシステムの詳細化になる.したがって元のシステムが仕様を満たし ていれば,置き換え後のシステムも自動的に仕様を満たす. ©2016 PRINCIPIA Limited 30 並行システムの開発基盤 システムの認識 システムをどのようなものだと認 識するか システムの記述 仕様と実装をどのように記述する か(振る舞いについて) 記述の意味 記述が意味することをどのように 厳密に定めるか 正当性の条件 実装が仕様を満たしているという 条件は何か 検証の方法 正当性を検証する方法にはどのよ うなものがあるか ©2016 PRINCIPIA Limited 計算と相互作用 継続的に相互作用を行う状態遷移システム CSP の構文: イベント同期,チャネル送受信,選択,非決定的選択, 並行合成,隠蔽,逐次合成,改名 表示的意味論:トレース意味論,安定失敗意味論, 発散失敗意味論 操作的意味論 代数的意味論 安全性 (safety) S T R traces(R) traces(S) 活性 (liveness) S F R S T R failures(R) failures(S) 詳細化検査(モデル検査)← 操作+表示 模倣 ← 操作,代数 CSP-Prover 不動点帰納法 ← 表示+代数 31 詳細化検査(モデル検査) 仕様を表すプロセスと実装を表すプロセスをともに操作的意味論に よって状態遷移システムに変換し,その上で表示を計算して比較する ことで詳細化関係を満たすかどうか検査する方法. 仕様 実装 S E(S) R F(R) cf. 時相論理によるモデル検査 操作的意味論 M “ 仕様”に相当する のは時相論理式 表示導出 M[S ] S M R ? 比較 ©2016 PRINCIPIA Limited M[R ] 実装の遷移系が Kripke 構造になる (“モデル”検査) 詳細化検査では仕様も実装もプロセスで記述する 32 並行システムの設計支援ツール SyncStitch プロセスのモデル化 分析 検査 ● ● ● ● トレース意味論 安定失敗意味論 デッドロック検査 発散検査 仕様 振る舞いが異なる状態とそこに至る パスを発見してくれる 実装 ©2016 PRINCIPIA Limited 分析ツール 33 検査例:生産者・消費者問題 実装 仕様 Producer 0 Producer 1 Consumer 0 Producer 1 Consumer 1 Producer 2 Consumer 2 Consumer 0 Queue Consumer 1 Producer 2 Producer 3 Producer 0 Consumer 2 =F putp ピンポイントの性質ではなく 振る舞い全体について検査できる Mutex + Condvar x 2 count Buffer 条件変数と リングバッファ による解 getp 各プロセスはモックやスタブなしに単独で 分析できる(イベント同期型相互作用) 仕様は全体 / 部分,抽象 / 具象 など目的に応じて記述する モデルを対話的に修正し検査する ことで,さまざまな設計を短時間 で確実に試行できる. 有限のモデルしか検査できない ©2016 PRINCIPIA Limited プロセスの振る舞いを 計算木としてみるビュー 34 操作的意味論と模倣による安全性検査 模倣( simulation ) a p が持つ任意の遷移に対応する遷移を q も持つ p a q q p b u (p, q) S p u. pIp u q. qIq (p, q) S b 弱模倣( weak simulation ) 内部イベントを無視する模倣 弱模倣はトレース集合の包含関係を含意する(安全性) S. (p, q) S traces(p) traces(q) datatype Event0 = eva datatype PN0 = S0 | C0 nat 弱模倣による安全性検査 仕様と実装の状態の対応関係を作り, それが弱模倣であることを操作的意味 論で証明する ©2016 PRINCIPIA Limited Isabelle による例 fun D0 :: "PN0 => (PN0, Event0) proc" where "D0 S0 = eva -> $S0" | "D0 (C0 n) = eva -> $(C0 (Suc n))" definition R0 :: "((PN0, Event0) proc * (PN0, Event0) proc) set" where "R0 = {(P, Q). (EX n. P = $(C0 n) & Q = $S0) | (EX n. P = eva -> $(C0 (Suc n)) & Q = $S0) }" lemma "wsim D0 R0" ... done S aS Rn a Rn+1 35 代数的意味論による同値性証明 プロセスの標準形( head-normal-form ) ?x :A i iI coinductive な再帰プロセスの同値性定義 i i = hnf(I, Ai, i) p =R q gfp F 双模倣( bisimulation ) F(X) = {(p, q) | p = hnf(I, Ai, pi) q = hnf(I, Ai, qi) i xi Ai. (pi, qi) X} coinduction による同値性証明 詳細化関係の証明 再帰的に定義されたプロセス P G(P ) S R R S R = R S Q H(Q) 例 coinduction 推論規則(簡略形) (P, Q) X (P, Q) F (X) P =R Q ©2016 PRINCIPIA Limited 単調関数 P e P, Q e e Q (P, Q) F(X) (P, e Q) F(X) = (e P, e e Q) F(X) (e P, e Q) F(X) (P, e Q) X (P, Q) X P =R Q 36 CSP-Prover ● 定理証明支援系 Isabelle の上に CSP の理論を構築した並行 システムのための証明フレームワーク – 完備半順序( CPO ),完備距離空間( CMS ),不動点定理 – 表示的意味論(トレース,安定失敗) – 表示的意味論によって証明された代数規則群 – 証明のための補題群および tactic – デッドロックフリー証明パッケージ – 表示的意味論と代数的意味論の等価性証明 – Isabelle 理論ファイル約 78,500 行 ©2016 PRINCIPIA Limited 37 検証例:シーケンサとイベントカウントによる 排他制御の安全性(状態数無限の例) シーケンサ イベントカウント 利用者 T(n) ticket ! n T(n + 1) 状態数は無限 E(n) await ? m : {m | n m} E(n) advance E(n + 1) C ticket ? m await ! m advance C 並行合成 R ((C ||| C) || (T(0) ||| E(0))) \ Z この間で仕事をしている X X range await range ticket {advance} 利用者は 2 人 Z range ticket 仕様(安全性) S await ? m advance S C0 C1 await と advance は必ず交互に発生する await advance ticket 安全性検証 ©2016 PRINCIPIA Limited S T R ? n En 38 検証例:シーケンサとイベントカウントによる 排他制御の安全性(状態数無限の例) theory Sequencer imports CSP_T begin CSP-Prover のライブラリを指定 datatype Event = ticket nat | await nat | advance イベント定義 datatype PNSpec = S primrec PNfunSpec :: "PNSpec => (PNSpec, Event) proc" where "PNfunSpec S = await ? v -> advance -> $S" 仕様定義 datatype PNImpl = C | T nat | E nat 実装側プロセスインデックス定義 primrec PNfunImpl :: "PNImpl => (PNImpl, Event) proc" where "PNfunImpl C = ticket ? turn -> await ! turn -> advance -> $C" | "PNfunImpl (T n) = ticket ! n -> $(T (Suc n))" | "PNfunImpl (E n) = await ? m:{m. n >= m} -> $(E n) [+] advance -> $(E (Suc n))" 各コンポーネントプロセス定義 ©2016 PRINCIPIA Limited 39 検証例:シーケンサとイベントカウントによる 排他制御の安全性(状態数無限の例) primrec Spec_Impl :: "PNSpec => (PNImpl, Event) proc" where "Spec_Impl S = !nat n .. ((($C ||| $C) |[insert advance (range ticket Un range await)]| ($(T n) ||| $(E n))) -- (range ticket))" 仕様と実装の対応関係 consts Spec :: "(PNSpec, Event) proc" Impl :: "(PNImpl, Event) proc" defs 実装の並行合成はここに記述 初期状態 Spec_def : "Spec == $S" Impl_def : "Impl == (($C ||| $C) |[insert advance (range ticket Un range await)]| ($(T 0) ||| $(E 0))) -- (range ticket)" lemma guardedfun_ex[simp]: プロセス定義が構成的であることの証明 "guardedfun PNfunSpec" "guardedfun PNfunImpl" apply(simp add: guardedfun_def, rule allI, induct_tac p, simp)+ apply(simp) apply(simp) done ©2016 PRINCIPIA Limited 40 不動点帰納法 仕様 完備距離空間を利用する場合 実装 S E(S) R F(R) R = lfp F = inf {X | F(X) X } S R = R S F(S) S ※ プロセスと表示を同一視して同じ文字で表している 例 S a S b S, R a R ||| b R F(S) S S = gfp E = sup {X | X F(X) } S R = R S R E(R) 例 F(R) = a S ||| b S S R が消えるので,あとは代数規則で証明できる ©2016 PRINCIPIA Limited 発散していないプロセス(構成的なプ ロセス)の場合は唯一の不動点を持つ ので, lfp と gfp が一致する.そのため 不動点帰納法を逆向きにも使うことが できる R E(R) = R aR bR 41 検証例:シーケンサとイベントカウントによる 排他制御の安全性(状態数無限の例) lemma apply apply apply apply apply apply apply apply 詳細化関係の証明 "Spec <=T Impl" (simp add: Spec_def Impl_def) (rule cspT_fp_induct_left[of _ "Spec_Impl"]) 不動点帰納法の適用 (simp)+ (rule cspT_Rep_int_choice_left) (rule_tac x="0" in exI) (clarsimp) goal (1 subgoal): 不動点帰納法の適用前のゴール (induct_tac p) 1. $S <=T (simp)+ ($C ||| $C |[insert advance (range ticket Un range await)]| ($T 0 ||| $E 0)) -- range ticket goal (1 subgoal): 1. await ? v -> advance 不動点帰納法の適用後のゴール -> (!nat n .. ($C ||| $C 実装側のプロセスのみなので,あとは代数規則で証明できる |[insert advance (range ticket Un range await)]| ($T n ||| $E n)) -- range ticket) <=T !nat n .. ($C ||| $C |[insert advance (range ticket Un range await)]| ($T n ||| $E n)) -- range ticket ©2016 PRINCIPIA Limited 42 並行システムの開発基盤 システムの認識 システムをどのようなものだと認 識するか システムの記述 仕様と実装をどのように記述する か(振る舞いについて) 記述の意味 記述が意味することをどのように 厳密に定めるか 正当性の条件 実装が仕様を満たしているという 条件は何か 検証の方法 正当性を検証する方法にはどのよ うなものがあるか ©2016 PRINCIPIA Limited 計算と相互作用 継続的に相互作用を行う状態遷移システム CSP の構文: イベント同期,チャネル送受信,選択,非決定的選択, 並行合成,隠蔽,逐次合成,改名 表示的意味論:トレース意味論,安定失敗意味論, 発散失敗意味論 操作的意味論 代数的意味論 安全性 (safety) S T R traces(R) traces(S) 活性 (liveness) S F R S T R failures(R) failures(S) 詳細化検査(モデル検査)← 操作+表示 模倣 ← 操作,代数 CSP-Prover 不動点帰納法 ← 表示+代数 43 計算システムの開発基盤 システムの認識 システムをどのようなものだと認 識するか システムの記述 仕様と実装をどのように記述する か(振る舞いについて) 記述の意味 記述が意味することをどのように 厳密に定めるか 正当性の条件 計算 入出力の関係 仕様:数学による関係表現,事前・事後条件 実装:プログラミング言語 表示的意味論:プログラム→入出力の関係 包含関係は実装を容易に 操作的意味論 するためのゆとり (opt.) 公理的意味論: Hoare 論理 R dom dom R 実装が仕様を満たしているという 仕様 条件は何か 検証の方法 正当性を検証する方法にはどのよ うなものがあるか ©2016 PRINCIPIA Limited 対比として 実装 dom R S 仕様が規定する範囲の 入力は受理できること 出力は仕様が規定する 範囲から選ぶこと 表示に基づくテスト,正当性条件の証明 Hoare 論理 定義域制限演算子 包含関係は 非決定性の減少 A R {(x, y) | x A (x, y) R} 44 まとめ ● ● ● ● リアクティブシステムは環境との相互作用と計算を継続的 に行う状態遷移システムである 並行システムは階層的に構成されたリアクティブシステム である.実行主体であるリアクティブシステム群が相互作 用を行いながら協調し,全体として目的の仕事を行う CSP は並行システムを記述・論証するための理論であり, 並行システム開発のための基盤を提供する CSP に基づいて並行システムの検証を行うツールがある – 詳細化検査(モデル検査) – 詳細化関係の証明 ©2016 PRINCIPIA Limited 45 参考文献とツール ● 参考文献 – 磯部祥尚,並行システムの検証と実装 ● – A. W. Roscoe, The Theory and Practice of Concurrency ● – http://www.computing.surrey.ac.uk/personal/st/S.Schneider/books/CRTS.pdf 田辺誠,中島玲二,長谷川真人,コンピュータサイエンス入門 <2> 論理とプログラム意味論 ● ● http://www.cs.ox.ac.uk/ucs/ Steve Schneider, Concurrent and Real Time Systems: the CSP approach ● – http://www.usingcsp.com/ A. W. Roscoe, Understanding Concurrent Systems ● – http://www.cs.ox.ac.uk/people/bill.roscoe/publications/68b.pdf C. A. R. Hoare, Communicating Sequential Processes (CSP) ● – https://staff.aist.go.jp/y-isobe/topse/vic/ https://www.iwanami.co.jp/.BOOKS/00/9/0061900.html ツール – SyncStitch ● – CSP-Prover ● – http://www.principia-m.com/jp/syncstitch/ https://staff.aist.go.jp/y-isobe/CSP-Prover/CSP-Prover.html Isabelle ● https://isabelle.in.tum.de/ ©2016 PRINCIPIA Limited 46
© Copyright 2024 ExpyDoc