レイトン教授で始めるAlloy Analyzer入門

Preview:

DESCRIPTION

8/15にgeekbarで使った資料です。 Alloyのコードは下記エントリーをご覧ください。 http://d.hatena.ne.jp/osiire/20110829

Citation preview

レイトン教授で始めるAlloy Analyzer入門

2011年8月15日

有限会社ITプランニング

小笠原 啓

Alloy Analyzerのご紹介

Alloyって何ができるの?

レイトン教授の例題

まとめ

アジェンダ

Alloy Analyzerのご紹介

Alloy AnalyzerはMITで開発されたオープンソース(MITライセンス)のJava製GUI付き仕様記述・検証ツール。

B, Z, VDMのようなツールは仲間。

2006年頃から公開されており、Version 4で解析速度向上、文法のブラッシュアップ。

2011年8月現在Version 4.1.10が最新(4.2 RCあり)。

Alloy Analyzerとは

開発者のDaniel Jackson@MIT

簡素な言語で仕様を記述すると、その仕様を満たす状態を検索して図示してくれる(モデルファインダー)。

検証したい性質を記述すると、その性質が満たされるかどうか全自動でチェックしてくれる。

Alloy Analyzerの検証は全自動

全自動チェックにはスコープ(チェックする範囲)があり有限。それでも多くの設計がチェックできる。(小スコープ仮説)

小スコープ仮説

探索空間とAlloyのスコープ(イメージ)

デモ:Alloy Analyzer

Alloyって何が嬉しいの?どういう時に使えるの?

データモデリング

正確なER図の記述と図示。設計書への添付。

ビジネスの仕組みの記述

曖昧性の早期発見。明確な意思疎通。

手続きの検証

アルゴリズム・プロトコルの設計・検証。

正しいAlloyの使い方

今日はAlloyの真の姿をご紹介します。

SATソルバー呼び出し器

略してSAT。充足可能性問題。

要するに、特定の組わせが希望の条件を満たすかどうかを調べる、組合せ問題。

組み合わせて試してみるしか有効な解法が知られていない。NP完全問題。

SATを高速に解いてくれるのがSATソルバー。

satisfiability problem

SATソルバーは強力だが、使うのが面倒だった。

1. 自分の解きたい問題をSATにエンコード。

2. 乗法標準形への変換。

3. SATソルバーへ。

4. 出てきた充足解をデコード。

5. デコードされた解の意味を理解。

SATソルバーを使うのは大変

Alloy Analyzerなら

簡単な言語で問題を記述するだけでSATソルバーを呼び出し可能。

しかも、見つかった解を図示までしてくれる。

実演してみましょう

そこでレイトン教授

悪魔の箱、面白かったです

5頭の牛がいる。うち2頭は本当の事しか言わないトンホー種。3頭はウソしか言わないソーウ種だという。さて、次の会話からウソつき牛に×印をつけてほしい。

A「Dはソーウ種だね」

B「Cはトンホー種じゃないよ」

C「Aはソーウ種じゃない」

D「Eはソーウ種です」

E「Bはトンホー種じゃないぞ」

問題No.50

Aは赤、Bは青、Cは白のシャツとズ

ボンを着ていた。彼らに目隠しをして服をデタラメに取り替えさせてから目隠しをはずして感想を聞いてみた。

A「3人とも上下の色がバラバラだね。」

B「Cだけは自分のものを着てないな。」

C「赤いズボンなんて恥ずかしいよ」

さて、彼らの着ている服を上下と

問題No.39

トランプの4種のマーク、スペード、ハート、クラブ、ダイヤを4枚ずつ、全部で16枚並べる。

図のような縦横4列のカードが置かれている。縦の列、横の列、対角線のななめの列のそれぞれに、4種のカードが入るように並べてほしい。カードをタッチすると、絵柄を切り替えることができる。

問題No.87

Alloy AnalyzerはMITで作られたオープンソースの仕

様記述・検証ツール。決められたスコープ内での網羅的全自動チェックが可能。

正確なデータモデリングの支援、仕様記述による曖昧さの早期発見、複雑な手続きの検証など。正しい使い方。

Alloyの真価はSATソルバーを簡単に呼べること。応用方法はアイディア次第。

日本語の情報源も登場!始めるには良い時期。

まとめ

情報源(1):本家サイト

http://alloy.mit.edu/alloy4/

情報源(2):コミュニティサイト

http://alloy.mit.edu/community/

情報源(3):チュートリアル

http://alloy.mit.edu/alloy4/tutorial4/

情報源(4):書籍

抽象によるソフトウェア設計-Alloyではじめる形式手法Daniel Jackson (著), 中島震 (監訳), 今井健男 (翻訳), 酒井政裕 (翻訳), 遠藤侑介 (翻訳), 片岡欣夫 (翻訳) オーム社

情報源(5):日本のコミュニティ

https://groups.google.com/group/alloy-jp?hl=ja/

あなたの脳をソルバーで加速!

ご清聴ありがとうございました。

関数プログラミング・形式手法夏のイベント

函数プログラミングの集いhttp://partake.in/events/ac41261d-6026-4d09-8814-5ad3e58446e8

Proof Summithttp://partake.in/events/ac41261d-6026-4d09-8814-5ad3e58446e8

CUFPhttp://cufp.org/conference

Recommended