CONPASU-tool

Similar documents
TopSE並行システム はじめに

CSPの紹介

背景 並行システム : 協調する複数の処理 ( プロセス ) から構成されるシステム 並行システムの例 ( 昇降舵のフライバイワイヤ ) 操縦桿 x2 角度 x3x2 ジャイロ x3 重量計 x4 フラップ LVDT IRU WOW FSACE PB 優先ボタン x2 MON モニタ COM コマン

形式手法に基づく CONPASU 並行処理可視化ツールの紹介 ~CSP モデルベース開発のすすめ ~ 磯部祥尚 * 1, 大岩寛 * 1, 高橋孝一 * 1, 田中純 * 2 産業技術総合研究所 * 1 セキュアシステム研究部門, * 2 イノベーション推進本部 ET2012 展示会場内 IPA 出

CSP研究会 プロセス代数の基本と関連ツールの紹介

はじめに : ご提案のポイント

プログラミングA

並列計算導入.pptx

Microsoft PowerPoint - sakurada3.pptx

プログラミングA

プログラミング基礎

7 ソフトウェア工学 Software Engineering モデル検査 MODEL CHECKING 1 モデル検査の概要 並行システム : 相互排他, デッドロック, スタベーションなどの現象 入出力関係に着目した 停止性 + 部分正当性 のみでは正当性を言えない 振る舞い ( 途中の状態遷移

PowerPoint プレゼンテーション

Total View Debugger 利用の手引 東京工業大学学術国際情報センター version 1.0

2-1 / 語問題 項書換え系 4.0. 準備 (3.1. 項 代入 等価性 ) 定義 3.1.1: - シグネチャ (signature): 関数記号の集合 (Σ と書く ) - それぞれの関数記号は アリティ (arity) と呼ばれる自然数が定められている - Σ (n) : アリ

An Automated Proof of Equivalence on Quantum Cryptographic Protocols

OpenFOAM 勉強会 C++ プログラム相談 のご案内 オープン CAE シンポジウム 2012 金田誠 (OpenFOAM 勉強会 for 関東 ) 1

PowerPoint プレゼンテーション

目次 ペトリネットの概要 適用事例

リソース制約下における組込みソフトウェアの性能検証および最適化方法

PassSureExam Best Exam Questions & Valid Exam Torrent & Pass for Sure

三者ミーティング

Microsoft Word - 実験4_FPGA実験2_2015

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

HP Z200 Intel i5 CPU 3.33GHz Low Profile 仕様 380 LP Assist 2.2 Instinct v3.0 以降 いいえいいえはいいいえ 4GB および 8GB DDR ECC (2 枚構成の DIMM) ISIS へ接続するにはオンボードの

JavaプログラミングⅠ

ユーザーズマニュアル 有線ネットワークシステム 発行日 2016 年 3 月 30 日

2013 年年度度ソフトウェア 工学分野の先導的研究 支援事業 抽象化に基づいた UML 設計の検証 支援ツールの開発 公 立立 大学法 人岡 山県 立立 大学情報 工学部情報システム 工学科 横川智教 Circuit Design Engineering Lab. - Okayama Prefec

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

GSLetterNeo vol 年 7 月 形式手法コトハジメ TLA + Toolbox を使って (2)- 熊澤努 sra.co.jp はじめに GSLetterNeo Vol.130 で TLA + Toolbox を紹介しました 今回からより詳しく T

Touch Panel Settings Tool

JavaプログラミングⅠ

Microsoft PowerPoint - 04_01_text_UML_03-Sequence-Com.ppt

PHP 開発ツール Zend Studio PHP アフ リケーションサーハ ー Zend Server OSC Tokyo/Spring /02/28 株式会社イグアスソリューション事業部

はじめに Doxygen イントロダクション Doxygen とは? Doxygen の主な特徴 数値モデル開発における Doxygen の利用 dcmodel におけるドキュメンテーション方法 Doxygen と RDoc の比較 シンタックス生成されるドキュメント IGModel における Do

Microsoft PowerPoint - 09.pptx

Maser - User Operation Manual

JavaプログラミングⅠ

Java講座

PowerPoint プレゼンテーション

1013  動的解析によるBOTコマンドの自動抽出

製品開発の現場では 各種のセンサーや測定環境を利用したデータ解析が行われ シミュレーションや動作検証等に役立てられています しかし 日々収集されるデータ量は増加し 解析も複雑化しており データ解析の負荷は徐々に重くなっています 例えば自動車の車両計測データを解析する場合 取得したデータをそのまま解析

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

Microsoft PowerPoint - algo ppt [互換モード]

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

改訂履歴 日付記載ページ改訂内容 2015/10/19 11 ConMas Generator の動作環境を追記 2015/12/1 9 i 版 i-reporter アプリの動作環境を修正 2015/12/1 10 Windows 版 i-reporter アプリの動作環境を修正 2016/3/2

2 目次 1 はじめに 2 システム 3 ユーザインタフェース 4 評価 5 まとめと課題 参考文献

演習1: 演習準備

kantan_C_1_iro3.indd

機能検証トレーニング コース一覧

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

CLEFIA_ISEC発表

PowerPoint Presentation

040402.ユニットテスト

C8

Microsoft PowerPoint - e-stat(OLS).pptx

A Bit flipping Reduction Method for Pseudo-random Patterns Using Don’t Care Identification on BAST Architecture

POSIXスレッド

Apache Arrow 須藤功平株式会社クリアコード RubyData Tokyo Meetup Apache Arrow Powered by Rabbit 2.2.2

はじめてのPFD

構造化プログラミングと データ抽象

PowerPoint プレゼンテーション

混沌系工学特論 #5

文法と言語 ー文脈自由文法とLR構文解析2ー

智美塾 ゆもつよメソッドのアーキテクチャ

吉田坂本.pptx

JavaプログラミングⅠ

Microsoft PowerPoint - 01_Vengineer.ppt

システムインテグレータのIPv6対応

Touch Pen Utility

PowePoint Free Design Template

1. 検証目的 本検証は PowerTerm WebConnect 環境において IVEX Logger が正常に動作し かつ製品仕様通り にログが取得できる事を確認するために実施します 2. 検証環境 本検証を実施するために準備した環境は以下の通りです マシン環境 用途 OS CPU RAM HD

構造化プログラミングと データ抽象

サーバに関するヘドニック回帰式(再推計結果)

2 概要 市場で不具合が発生にした時 修正箇所は正常に動作するようにしたけど将来のことを考えるとメンテナンス性を向上させたいと考えた リファクタリングを実施して改善しようと考えた レガシーコードなのでどこから手をつけて良いものかわからない メトリクスを使ってリファクタリング対象を自動抽出する仕組みを

1. はじめに 本書は スプリット演算器 MFS2 用コンフィギュレータソフトウェア の取扱方法 操作手順 注意事項などを説明したものです Windows の操作や用語を理解している方を前提にしています Windows の操作や用語については それぞれのマニュアルを参照してください 1.1. MFS

情報処理Ⅰ

講義の進め方 第 1 回イントロダクション ( 第 1 章 ) 第 2 ~ 7 回第 2 章 ~ 第 5 章 第 8 回中間ミニテスト (11 月 15 日 ) 第 9 回第 6 章 ~ 第 回ローム記念館 2Fの実習室で UML によるロボット制御実習 定期試験 2

Touch Pen Utility

オートマトン 形式言語及び演習 3. 正規表現 酒井正彦 正規表現とは 正規表現 ( 正則表現, Regular Expression) オートマトン : 言語を定義する機械正規表現 : 言語

JavaプログラミングⅠ

Taro-テキスト.jtd

Microsoft PowerPoint - H22制御工学I-10回.ppt

Microsoft Word - 2_0421

MATLAB® における並列・分散コンピューティング ~ Parallel Computing Toolbox™ & MATLAB Distributed Computing Server™ ~

Microsoft PowerPoint - FormsUpgrade_Tune.ppt

オートマトンと言語

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

プログラミング入門1

言語プロセッサ2005

PowerPoint プレゼンテーション

Microsoft Word - 19-d代 試é¨fi 解ç�fl.docx

Microsoft Word - ご利用までの流れ

NUMAの構成

Windowsユーザでも 手軽に作れるiPhoneアプリ

スライド 1

appli_HPhi_install

プログラミング入門1

メソッドのまとめ

Transcription:

CONPASU-tool (CONcurrent Process Analysis SUpport tool): 記号処理に基づく並行プロセス解析支援ツールの試作 情報技術研究部門 ミドルウェア基礎研究グループ 磯部祥尚 0:50 FOSE2010 2010/11/19 1

発表内容 背景と動機 並行プロセス設計の難しさ 本研究の目的 プロセス代数記術 CONAPSU の機能 既存ツールとの違い 解析ツール CONPASU CONPASU の概要 逐次化機能 状態数削減機能 CONPASU 適用例 並列計算の解析例 解析時間 これを開発中 関連研究とまとめ 既存ツールとの違い まとめと今後の課題 Proc1 Proc2 Proc3 入力 出力 解析結果解析結果 ( ( 特性特性 ) ) 並行プロセス CONPASU-tool ( 並行動作解析 ) 2:00 2

本研究の概要 背景 目的 プロセス代数 CONPASU 2:00 3

背景 : 並列処理環境 マルチコア CPU 等の普及により 並列処理環境が身近なものになってきている 複数のプロセス ( プログラム ) を同時に実行可能 通信等により複数のプロセスが協調可能 並行プロセスの構築 並行プロセス 通信 Proc2 プロセス ( プログラム ) 通信 並行プロセスの長所と短所 Proc1 通信 Proc3 長所 : 協調動作による処理の高速化 短所 : 協調動作による設計の複雑化 全体の動作の把握が難しい 例 : 6 コア CPU Core i7-980x ([1] より写真を転載 ) 3:00 [1] 大原雄介, Core i7-980x Extreme Edition 徹底攻略!! 6 コア Gulftown の全貌解明, マイコミジャーナル, 2010/03/11, http://journal.mycom.co.jp/special/2010/gulftown/index.html 4

背景 : 並行処理の例 プロセス は人 通信 はバケツ渡し 並行処理の例 : バケツリレーによる消火長所複数人による協力が可能 消火作業を高速化できる 消火作業は各自の部分的な作業の相互作用の結果 短所 全体の動作の把握が困難 手順を適切に設定しないと 動けなくなることもある うっ デッドロック CONPASU は各自の作業から全体の消火作業を導出する 4:10 5

目的 : 並行プロセスの設計支援 目標 : 設計段階で並行プロセスの動作を解析するツール (CONPASU) の開発 要求設計実装テスト 開発工程?? 不具合の原因は設計? 実装? 動作設計情報 : 各プロセスの動作を表す図 ( ステートマシン図など ) 構造設計情報 : プロセス間の接続を表す図 ( コンポジット図など ) CONPASU-tool 不具合の早期発見 並行プロセスのモデル 入力 プロセス代数 (CCS) 記述 これを開発中 出力 解析結果解析結果 ( 解析結果 ( 特性解析結果特性 ) 特性 ) ) ( 動作特性 ) 状態遷移図等 5:00 6

記述 : プロセス代数? プロセス代数 : 並行プロセスの構造と動作を式の形で表現し 解析するための理論 容量 1 のバッファ 2 個 B01 構造 in com out B0 B1 並行合成 制限 B01 = (B0 B1) \{com} 構造 B0 動作 B1 動作 B0 B1 = in?x. com!x. B0 = com?x. out!x. B1 動作 動作 in?x x com!x 送信 com?x 受信 x out!x 繰り返しプロセス代数記述 同期型メッセージパッシング通信 7:00 注 : c!v はチャネル c へ値 v を送信するアクション c?x はチャネル c から受信した値を x へ代入するアクションを表す 7

機能 :CONPASU で何ができるのか? 8:10 並行プロセスからそれと弱等価な逐次プロセスとその状態遷移図を自動生成できる B01 in?x ( 弱等価 ~ は外部から観測して区別できない振舞いの等しさの一つ ) 容量 1 のバッファ 2 個 B01 B0 B1 B0 = (B0 B1) \{com} = in?x. com!x. B0 = com?x. out!x. B1 in com out B0 B1 x com!x com?x B1 x out!x CONPASU 逐次化と状態数削減 弱等価 B01 ~ S0 S0 S1(x1) S2(x0,x1) 容量 2 のバッファ 選択 = in?x0.s1(x0) = in?x0.s2(x0,x1) + out!x1.s0 = out!x1.s1(x0) in S0 in?x 0 /x 1 :=x 0 out!x 1 S1 x 1 in?x 0 out!x 1 /x 1 :=x 0 S2 S0 x 0,x 1 out 更新 8

9:00 比較 : 既存のツールでは? 状態遷移図を表示する機能をもつツール ( モデル検査器 ) はある mcrl2 PAT LTSA 容量 1 のバッファ 2 個 B01 B0 B1 = (B0 B1) \{com} = in?x. com!x. B0 = com?x. out!x. B1 in com out B0 B1 逐次化 & 状態数削減 ( 入力値 {0,1}) in.0 in.1 in?x B0 com!x com?x B1 out!x in.0 0 out.0 out.1 out.1 out.0 1 in.1 x x 0,0 out.0 in.1 1,0 0,1 in.0 out.1 0,0 mcrl: http://www.mcrl2.org/mcrl2/wiki/index.php/home, PAT: http://www.comp.nus.edu.sg/~pat/, LTSA: http://www.doc.ic.ac.uk/ltsa/ 9

比較 :CONPASU と既存ツールとの違い CONPASU では記号的意味論を採用 基礎的意味論 : 変数を値で具体化して状態遷移図に変換する 記号的意味論 : 変数を具体化せずに状態遷移図に変換する 既存ツール 基礎的意味論 ( 入力値 {0,1}) 容量 1 のバッファ 2 個 B01 B0 B1 = (B0 B1) \{com} = in?x. com!x. B0 = com?x. out!x. B1 CONPASU 記号的意味論 ( 入力値無制限 ) in.0 in.1 S0 in?x 0 /x 1 :=x 0 out!x 1 in.0 0 out.0 out.1 1 out.1 out.0 in.1 S1 x 1 in?x 0 out!x 1 /x 1 :=x 0 0,0 out.0 in.1 1,0 0,1 in.0 out.1 0,0 S2 CONAPSUの方針 : 自動化できる範囲で解析をする x 0,x 1 状態数を抑えられる 解析は難しい 11:00 10

参考 : 状態遷移図の表示例 既存のモデル検査器 (PAT, LTSA) と CONPASU による状態遷移図の表示例 容量 1 のバッファ 2 個 B01 B0 B1 = (B0 B1) \{com} = in?x. com!x. B0 = com?x. out!x. B1 ( 入力値無制限 ) CONPASU PAT ( 入力値 {0,1}) LTSA 11:40 注 : 状態遷移図の表示には Graphviz を使用 11

解析ツール CONPASU 解析ツール (CONPASU) の機能 逐次化機能 状態数削減機能 11:40 12

CONPASU の機能 CONPASU: 並行プロセスの動作を自動解析するためのツール (Java で 5,000 行程度 ) 逐次化機能 : 並行動作を記号的意味論によって逐次的な動作に展開する機能状態数削減機能 : 弱等価性を保存したまま状態数を減らす機能 状態数 : 8 状態数削減 (CONPASU) CONPASU 並行プロセス記述 ~ 状態数 : 4 B01 B0 B1 B2 = (B0 B1 B2)\{com1,com2} = in?x. com1!x. B0 = com1?x. com2!x. B1 = com2? outx.!x. B3 逐次化 (CONPASU) in B0 com1 B1 com2 B2 out 容量 3 のバッファ 13:00 注 : 状態遷移図の表示には Graphviz を使用 13

逐次化 ( 記号的意味論 ) プロセス代数の記号的意味論は 1995 年頃から様々な研究が行われている 本研究では下記の記号的意味論をベースにしている [7] Z. Li and H. Chen, Computing Strong/Weak Bisimulation Equivalences and Observation Congruence for Value-Passing Processes, TACAS 99, LNCS 1579, pp.300-314, 1999. 文献 [7] との違い [7] では束縛変数を展開するときに変数名の衝突を避けるため新しい名前を割り当てる 新しい名前の割り当て方は書かれていない ( ツール化に割り当て方が必要 ) 本研究では変数に位置情報を付加して 変数名の衝突を避けている P1(x) (P2(x) P3(x)) 0 1 逐次化 SEQ(x 0, x 10, x 11 ) 0 P1(x) 0 1 10 11 P2(x) P3(x) 各プロセスのローカル変数を区別できるように位置情報 0, 10, 11 を付加している この記号的意味論の正しさは命題 3.1 に与えられている 15:00 14

状態数削減 状態削減の基本は弱等価な複数の状態を一つの状態に畳みこむことにある ただし 一般に記号的意味論では弱等価性を自動判定できない 自動判定できる範囲で弱等価な組を発見する方法を提案する 観測されない内部の動作 / n:=1,m:=0 τ/ m:=m+2 S1(n, m) S2(n, m) print!n bak/n:=n+1 print!n bak/n:=n+1 τ/ m:=m+2 S3(n, m) S4(n, m) print!m STOP 状態数削減 ~ / n:=1, m:=0+2 S2(n, m) print!n bak/n:=n+1 print!m S4(n, m) STOP 16:40 S1(n,m) ~ S3(n,m) ~ S2(n,m+2) S4(n,m+2) この状態数削減法の正しさは命題 4.1 に与えられている 15

CONAPSU 適用例 並列数値計算の解析例 解析時間 16:40 16

並列数値計算の解析例 (1/4) CAL(n) : 3 つのプロセスから構成される並行プロセス CAL(n) = (SQREM(n) SUM(0))\{rem,end'} SQREM(n) = (SQ(n) REM)\{sq,end} 並行プロセス SQ(n) = (n>0) => in?x.sq!(x * x).sq(n-1) + (n==0) => end!0.stop REM = sq?x.rem!(x%10).rem + end?z.end'!z.stop SUM(y) = rem?x.prt!x.sum(y+x) + end'?z.prts!y.stop 値を n 回受信 in SQ(n) sq end REM rem end SUM(y) prt prts 各回の計算結果を表示 終了後に総和を表示 n end!0[n==0] end?z z end!z y end?z z prts!y in?x[n>0] sq!(x * x) / n:=n-1 sq?x rem!(x%10) rem?x prt!x / y:=y+1 n,x 二乗 x 剰余 y,x 総和 17:30 注 : α[b] は条件 b が真ならばアクション α を実行できる条件付きのアクションを表す 17

並列数値計算の解析例 (2/4) 並行プロセス CAL(c) の解析 : 逐次化 ( 状態数削減前 ) CAL(n) SQREM(n) SQ(n) REM SUM(y) = (SQREM(n) SUM(0))\{rem,end'} = (SQ(n) REM)\{sq,end} 並行プロセス = (n>0) => in?x.sq!(x * x).sq(n-1) + (n==0) => end!0.stop = sq?x.rem!(x%10).rem + end?z.end'!z.stop = rem?x.prt!x.sum(y+x) + end'?z.prts!y.stop in SQ(n) sq end REM rem end SUM(y) prt prts 状態数 : 14 遷移数 : 20 逐次化 CONPASU 18:10 18

並列数値計算の解析例 (3/4) 並行プロセス CAL(c) の解析 : 状態数削減 状態数 : 14 遷移数 : 20 CONPASU 状態数削減 状態数 : 8 遷移数 : 12 18:50 19

並列数値計算の解析例 (4/4) 興味のあるチャネルに着目した解析 ( 特性抽出 ) 興味無いチャネルを隠す in SQ(n) sq end REM rem end SUM(y) prt prts HIDE prts 入力 in と最終結果 prt の関係 in?x[n>0] / n:=n-1, y:=y+(x * x)%10 20:00 20

解析時間 ( 参考値 ) CONPASU による解析時間 現在の CONPASU は試作機であるが 参考までに並行プロセスの解析 ( 逐次化 + 状態削除 ) にかかった時間の一例を示す disp1 Par P1(n) P2 P1(n) Par call ret = (P1(0) P2)\{call,ret} = disp1!n. call!n. ret?n. P1(n) = call?n. disp2!n. ret!(n+1). P2 COPY(m) = Par Par m 個 P2 disp2 COPY(m) の状態数は 8 m 個 m=1,2,3,4 の場合の COPY(m) の解析時間 (Intel Core 2 Duo CPU P9600, 2.66GHz, 4GB RAM) 時間 ( 秒 ) 1000 100 10 1 0.1 0.01 状態数 : 4096 256 遷移数 Y の値 : Y の値 16384 1024 逐次化 : 107 秒状態削除 : 199 秒 約 5 分 1 8 64 512 4096 ( パラメータ付 ) 状態数 21:00 21

関連研究とまとめ モデル検査器との比較 状態遷移図の表示機能 モデル検査器との相互補完 まとめと今後の課題 21:00 22

比較 : モデル検査 モデル検査器 : システムのモデルが特性を満たすかを判定するツール mcrl, FDR, PAT, etc 実はこれが結構難しい 並行プロセス 入力 入力 特性特性特性 記述 出力 True CONPASU-tool: 特性の自動生成により設計者の負担を軽減する CONPASU 注目 書くよりは読む方が楽 並行プロセス 入力 出力 特性特性特性 読解 22:00 mcrl: http://www.mcrl2.org/mcrl2/wiki/index.php/home, FDR: http://www.fsel.com/, PAT: http://www.comp.nus.edu.sg/~pat/ 23

比較 : 状態遷移図表示 (mcrl2) 比較 : CONPASU モデル検査器 mcrl2 は状態遷移図を立体的に表示する機能がある 状態数 : 8 遷移数 : 12 in SQ(n) sq end REM rem end SUM(y) prt prts 並列数値計算 CAL(3), 入力値 {0..23} LTS へ変換 mcrl22lps, lps2lts 状態数 : 10,944 遷移数 : 22,176 状態数最小化 ltsconvert 状態数 : 656 遷移数 : 3,056 ltsview 22:50 24

モデル検査の前処理器として モデル検査器は状態数有限な並行プロセスと仕様記述の等しさを自動判定できる モデル検査器で判定する前に CONPASU を状態数削減器として利用できる CAL SQ REM SUM 等価性判定 SPEC 仕様記述 CONPASU モデル検査器 状態数削減 SEQ 23:50 25

等価性判定に必要な状態数の例 記号処理 (CONPASU) によって等価性判定に必要な状態数のピーク値を減らせる CAL SQ REM SUM SEQ SPEC 仕様記述 基礎的意味論 (mcrl2) C=3, in {0..23} 記号的意味論 (CONAPSU) 逐次プロセス生成 (CONAPSU) 14 8 6 状態数削減等価性判定 (CONAPSU) ( 証明器?) ピーク 状態数最小化 (mcrl2) 10,944 4,774 等価性判定 (mcrl2) 4,652 656 656 24:30 26

まとめ : 現状と今後の課題 CONPASU の機能 逐次化機能 : 記号的意味論による並行プロセスの逐次化 状態数削減機能 : 弱等価性を保存したまま状態数を削減 並行プロセス (CCS 記述 ) B01 = (B0 B1 B2)\{com1,com2} B0 = in?x. com1!x. B0 B1 = com1?x. com2!x. B1 B2 = com2? outx.!x. B3 CONPASU の特徴 逐次化 状態数削減 ~ プロセス生成 逐次プロセス (CCS 記述 ) Seq0 = in?x00.seq4(x00) Seq4(x1) = out!x1.seq0 + in?x00.seq6(x00,x1) Seq6(x01,x1) = in?x00.seq7(x00,x01,x1) + out!x1.seq4(x01) Seq7(x00,x01,x1) = out!x1.seq6(x00,x01) 完全自動記号処理 : 状態数の半自動最小化よりも完全自動削減 ( 最小でなくても可 ) 今後の課題 状態数削減機能の強化 ( 条件付き内部アクションの削減など ) データ式の記号処理の強化 ( 試作版 : 1+2 2+1) 解析結果 ( 特性 ) の表現方法の改善 25:30 27

付録 ライブラリ 連立方程式 状態遷移図表示例 28

補足 : プロセス代数ベース並列プログラミング プロセス代数ベースの様々なプログラミング言語 / ライブラリが開発されている CONPASU で解析したモデルを少ないギャップで実装できる 要求設計実装テスト 開発工程 Go 言語の公式マスコット Gordon http://golang.org/ プロセス代数ベース解析器 CONPASU-tool プロセス代数ベースライブラリ / 言語 ( 同期型メッセージパッシング通信 ) 言語 ライブラリ 研究開発元 Java JCSP ケント大学 (QuickStone) C++ C++CSP ケント大学 Haskell CHP ケント大学 Python PyCSP トロムソ大学 & コペンハーゲン大学 Python Python-CSP ウォルバーハンプトン大学 Go Google XC XMOS ( 並列プロセッサ記述言語 ) 29

比較 : 記号的意味論による等価性判定方法 記号的意味論によって 2 つの無限状態プロセスの弱等価性判定問題を連立方程式 PBES(Parameterized Boolean Equation System) の解の存在問題に変換する方法が提案されており mcrl2 には試験的に実装されている in SQ(n) sq end REM rem end SUM(y) prt prts? ~ in Seq(n) prt prts ( 入力値の制限なし ) PBES へ変換 lpsbisim2pbes コマンド (mcrl2) 1/32 pbes nu Xms(s3_SQ: Pos, x_sq: Nat, n_sq: Int, s30_rem: Pos, x_rem: Nat, s31_sum: Pos, x_sum,y_sum: Nat, s3_seq0: Pos, x00_seq0,x_seq0,x01_seq0: Nat, z01_seq0,n00_seq0: Int, x1_seq0,y1_seq0: Nat, n_seq0: Int) = (((((((((((val(!(s30_rem == 2 && s31_sum == 1 && x_rem mod 10 < 10)) Y1ms_tau(s3_SQ, x_sq, n_sq, s30_rem, x_rem, s31_sum, x_sum, y_sum, s3_seq0, x00_seq0, x_seq0, x01_seq0, z01_seq0, n00_seq0, x1_seq0, y1_seq0, n_seq0)) && val(!(s30_rem == 3 && s31_sum == 1)) Y1ms_tau0(s3_SQ, x_sq, n_sq, s30_rem, x_rem, s31_sum, x_sum, y_sum, s3_seq0, x00_seq0, x_seq0, x01_seq0, z01_seq0, n00_seq0, x1_seq0, y1_seq0, n_seq0)) && val(!(((s3_sq == 1 &&!(0 < n_sq)) && s30_rem == 1) && s31_sum == 3)) Y1ms_prts(s3_SQ, x_sq, n_sq, s30_rem, x_rem, s31_sum, x_sum, y_sum, s3_seq0, x00_seq0, x_seq0, x01_seq0, z01_seq0, n00_seq0, x1_seq0, y1_seq0, n_seq0)) && val(!(((s3_sq == 1 &&!(0 < n_sq)) && s30_rem == 1) && s31_sum == 2)) Y1ms_prt(s3_SQ, x_sq, n_sq, s30_rem, x_rem, s31_sum, x_sum, y_sum, s3_seq0, x00_seq0, x_seq0, x01_seq0, z01_seq0, n00_seq0, x1_seq0, y1_seq0, n_seq0)) && val(!((s3_sq == 2 && s30_rem == 1) && s31_sum == 3)) Y1ms_prts0(s3_SQ, x_sq, n_sq, s30_rem, x_rem, s31_sum, x_sum, y_sum, s3_seq0, x00_seq0, x_seq0, x01_seq0, z01_seq0, n00_seq0, x1_seq0, y1_seq0, n_seq0)) && val(!((s3_sq == 2 && s30_rem == 1) && s31_sum == 2)) Y1ms_prt0(s3_SQ, x_sq, n_sq, s30_rem, x_rem, s31_sum, x_sum, y_sum, s3_seq0, x00_seq0, x_seq0, x01_seq0, z01_seq0, n00_seq0, x1_seq0, y1_seq0, n_seq0)) && val(!(s31_sum == 3)) Y1ms_prts1(s3_SQ, x_sq, n_sq, s30_rem, x_rem, s31_sum, x_sum, y_sum, s3_seq0, x00_seq0, x_seq0, x01_seq0, z01_seq0, n00_seq0, x1_seq0, y1_seq0, n_seq0)) && val(!(s31_sum == 2)) Y1ms_prt1(s3_SQ, x_sq, n_sq, s30_rem, x_rem, s31_sum, x_sum, y_sum, s3_seq0, x00_seq0, x_seq0, x01_seq0, z01_seq0, n00_seq0, x1_seq0, y1_seq0, n_seq0)) && (forall x0_sq: Nat. val(!(s3_sq == 1 && 0 < n_sq)) Y1ms_in1(s3_SQ, x_sq, n_sq, s30_rem, x_rem, s31_sum, x_sum, y_sum, s3_seq0, x00_seq0, x_seq0, x01_seq0, z01_seq0, n00_seq0, x1_seq0, y1_seq0, n_seq0, x0_sq))) && val(!((s3_sq == 1 &&!(0 < n_sq)) && s30_rem == 1)) Y1ms_tau1(s3_SQ, x_sq, n_sq, s30_rem, x_rem, s31_sum, x_sum, y_sum, s3_seq0, x00_seq0, x_seq0, x01_seq0, z01_seq0, n00_seq0, x1_seq0, y1_seq0, n_seq0)) && val(!(s3_sq == 2 && s30_rem == 1)) Y1ms_tau2(s3_SQ, x_sq, n_sq, s30_rem, x_rem, s31_sum, x_sum, y_sum, s3_seq0, x00_seq0, x_seq0, x01_seq0, z01_seq0, n00_seq0, x1_seq0, y1_seq0, n_seq0)) && (((val(!(s3_seq0 == 2)) Y1sm_prts(s3_Seq0, x00_seq0, x_seq0, x01_seq0, z01_seq0, n00_seq0, x1_seq0, y1_seq0, n_seq0, s3_sq, x_sq, n_sq, s30_rem, x_rem, s31_sum, x_sum, y_sum)) && (forall e10_seq0: Enum3. val(!(c3_2(e10_seq0, true, true, true) && C3_2(e10_Seq0, s3_seq0 == 6 && n00_seq0 == 0, s3_seq0 == 4 && n00_seq0 == 0, s3_seq0 == 1 && n_seq0 == 0))) Y1sm_tau(s3_Seq0, x00_seq0, x_seq0, x01_seq0, z01_seq0, n00_seq0, x1_seq0, y1_seq0, n_seq0, s3_sq, x_sq, n_sq, s30_rem, x_rem, s31_sum, x_sum, y_sum, e10_seq0))) && (forall e9_seq0: Enum4, x000_seq0: Nat. val(!(c4_2(e9_seq0, true, true, true, true) && C4_2(e9_Seq0, s3_seq0 == 7 && 0 < n00_seq0, s3_seq0 == 6 && 0 < n00_seq0, s3_seq0 == 4 && 0 < n00_seq0, s3_seq0 == 1 && 0 < n_seq0))) Y1sm_in1(s3_Seq0, x00_seq0, x_seq0, x01_seq0, z01_seq0, n00_seq0, x1_seq0, y1_seq0, n_seq0, s3_sq, x_sq, n_sq, s30_rem, x_rem, s31_sum, x_sum, y_sum, e9_seq0, x000_seq0))) && (forall e4_seq0: Enum4. val(!(c4_2(e4_seq0, true, true, true, true) && C4_2(e4_Seq0, s3_seq0 == 4, s3_seq0 == 5, s3_seq0 == 7, s3_seq0 == 8 && 0 < n00_seq0))) Y1sm_prt(s3_Seq0, x00_seq0, x_seq0, x01_seq0, z01_seq0, n00_seq0, x1_seq0, y1_seq0, n_seq0, s3_sq, x_sq, n_sq, s30_rem, x_rem, s31_sum, x_sum, y_sum, e4_seq0)); 自動的には解けない 30

比較 : 状態遷移図表示 (PAT) 比較 : CONPASU モデル検査器 PAT でも状態遷移図を表示できる 変数は全て具体化されるため状態数が多くなる 状態数 : 8 遷移数 : 12 PAT の GUI in SQ(n) sq end REM rem end SUM(y) prt prts CAL(3) の状態遷移図 状態数 : 105 遷移数 : 160 シミュレータの起動 C=3 に固定, 入力値は {0,1} に有限化 31

比較 : 状態遷移図表示 (LTSA) 比較 : CONPASU モデル検査器 LTSA による状態遷移図表示例 状態数 : 8 遷移数 : 12 変数を具体化するため 入力値を 0,1 に制限し 状態数最小化しても CAL(3) の状態数は 42 になる LTSA の GUI in SQ(n) sq end REM rem end SUM(y) prt prts CAL(3) の状態遷移図 ( 状態数最小化済 ) Draw で表示 C=3 に固定, 入力値は {0,1} に有限化 状態数 : 42 遷移数 : 67 32