形式手法のまとめ

# 形式手法概論
## 形式手法関連のリンク集

- [ディペンダブル・システムのための形式手法の実践ポータル](http://formal.mri.co.jp/)
- [中島震, 形式手法入門―ロジックによるソフトウェア設計―, オーム社, 2012](http://www.amazon.co.jp/gp/product/4274211886/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4274211886&linkCode=as2&tag=i0fe2-22)
- [赤間世紀, 形式手法教科書, I・O BOOKS, 2012](http://www.amazon.co.jp/gp/product/4777517233/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4777517233&linkCode=as2&tag=i0fe2-22)
- [IPA, 形式手法活用ガイドならびに参考資料, 2012 ](http://www.ipa.go.jp/sec/softwareengineering/reports/20120928.html)
- [ディペンダブル・システムのための形式手法の実践ポータル](http://formal.mri.co.jp/)
- [吉川健, JAXAにおける形式手法に対する取組み ～ソフトウェアIV&Vにおける形式手法の活用事例～, 2012](http://cfv.jp/cvs/event/workshop/2012/09/pdf/jaxa.pdf)

## 数理論理学関連のリンク集

- [オンラインで入手できる数理論理学・数学基礎論のテキスト](http://klapaucius.web.fc2.com/logic/online-textbooks.html)

# Event-B
Event-Bとは以下のような形式手法である。

> Event-B is a formal method for system-level modelling and analysis. Key features of Event-B are the use of set theory as a modelling notation, the use of refinement to represent systems at different abstraction levels and the use of mathematical proof to verify consistency between refinement levels.
[Event-B.org](http://www.event-b.org/) より引用
＜拙訳＞
Event-Bとは、「システムレベルのモデル化と解析のための形式手法」である。Event-Bの特長は「モデル化表記法での集合論利用」、「異なる抽象レベルのシステム表現のためのリファインメントの利用」、「リファインメントレベル間の一貫性の検証のための数学的証明の利用」の３点である。


 [詳細な記事はこちら](https://qiita.com/kannkyo/items/030207c60f338b477510)

- [Event-B.org](http://www.event-b.org/)
- [中島震, 來間啓伸, Event-B: リファインメント・モデリングに基づく形式手法, 近代科学社, 2015](http://www.amazon.co.jp/gp/product/4764904241/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4764904241&linkCode=as2&tag=i0fe2-22)
- 佐藤直人, タイソンホアン, デビッドベイジン, 來間啓伸, Event-Bによる列車監視システムのモニタリング要件の検証, 情報処理学会論文誌, Vol.54, No.6, pp.1738-1750, 2013

# Alloy
Alloyとは以下のような形式手法である。

> Alloy is an open source language and analyzer for software modeling. It has been used in a wide range of applications, from finding holes in security mechanisms to designing telephone switching networks.
[Alloy - Website](http://alloytools.org/) より引用
＜拙訳＞
Alloyとは、「ソフトウェアのモデル化のためのオープンソースの言語およびアナライザ」であり、「セキュリティホールの発見から電話交換ネットワークまで、幅広く応用」される形式手法である。


Alloyは、形式手法の困難さを克服するために、ある種の制約を仮定する代わりに表現力と自動検証能力を両立した「軽量形式手法（Lightweight Formal Method）」の一種である。Alloyは以下の特徴を有する言語及び開発環境である。なお、Alloyの開発環境は特にAlloy Analyzerと呼ばれる	。

Alloyは「ほとんどのバグは小さな反例を持つ」という小スコープ仮説に基づき、モデルの網羅的全通り検証の代わりに、適切な小スコープを設定して反例の有無を検証する。

[詳細な記事はこちら](https://qiita.com/kannkyo/items/0742253aeb5a43e449c9)

- [Daniel Jackson(著), 中島震(訳), 今井健男(訳), 酒井政裕(訳), 遠藤侑介 (訳), 片岡欣夫(訳), 抽象によるソフトウェア設計−Alloyではじめる形式手法−, オーム社, 2011](http://www.amazon.co.jp/gp/product/4274068587/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4274068587&linkCode=as2&tag=i0fe2-22)
- [Alloy - Website](http://alloytools.org/)
- [alloy-4-eclipse](https://marketplace.eclipse.org/content/alloy-4-eclipse)

# VDM++

> The Vienna Development Method (VDM) is one of the longest established model-oriented formal methods for the development of computer-based systems and software. It consists of a group of mathematically well-founded languages and tools for expressing and analyzing system models during early design stages, before expensive implementation commitments are made. 
[Overture Tool - The Vienna Development Method](http://overturetool.org/method/)
＜拙訳＞
Vienna Development Method (VDM) は、コンピュータベースのシステム及びソフトウェアの開発のため、最も古いモデル指向形式手法の1つである。これは数学的にwell-foundedな言語とツールのグループであり、高額な製造契約がなされる前に初期の設計段階でシステムモデルを表現し分析するためのものである。

- [VDM++による形式仕様記述](http://research.nii.ac.jp/~f-ishikawa/vdm/index.html)
- [石川冬樹, 荒木啓二郎(監修), VDM++による形式仕様記述 (トップエスイーシリーズ 実践講座), 近代科学社, 2011](http://www.amazon.co.jp/gp/product/4764904098/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4764904098&linkCode=as2&tag=i0fe2-22)
- [VDMTools](http://fmvdm.org/)
- [Overture tool](http://overturetool.org/)

# UPPAAL
UPPAALとは以下のような形式手法である。

> Uppaal is an integrated tool environment for modeling, validation and verification of real-time systems modeled as networks of timed automata, extended with data types (bounded integers, arrays, etc.).
[UPPAAL](http://www.uppaal.org/)より引用
＜拙訳＞
UPPAALは、時間オートマトンのネットワークとしてモデリングされ、データ型により拡張したリアルタイムシステムのモデリング、検証、妥当性確認のための統合開発ツールである。


- [UPPAAL](http://www.uppaal.org/)
- [ZIPC - UPPAAL](http://www.zipc.com/product/uppaal/)
- [長谷川哲夫,磯部祥尚,田原康之,大須賀昭彦(監修), UPPAALによる性能モデル検証, 近代科学社, 2012](http://www.amazon.co.jp/UPPAAL%E3%81%AB%E3%82%88%E3%82%8B%E6%80%A7%E8%83%BD%E3%83%A2%E3%83%87%E3%83%AB%E6%A4%9C%E8%A8%BC%E2%80%95%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E3%83%A2%E3%83%87%E3%83%AB%E5%8C%96%E3%81%A8%E3%81%9D%E3%81%AE%E6%A4%9C%E8%A8%BC-%E3%83%88%E3%83%83%E3%83%97%E3%82%A8%E3%82%B9%E3%82%A4%E3%83%BC%E5%AE%9F%E8%B7%B5%E8%AC%9B%E5%BA%A7-%E9%95%B7%E8%B0%B7%E5%B7%9D-%E5%93%B2%E5%A4%AB/dp/4764904314)

#SPIN

SPINとは以下のような形式手法である。

> Spin is a popular open-source software verification tool, used by thousands of people worldwide. The tool can be used for the formal verification of multi-threaded software applications.
[SPIN - Website](http://spinroot.com/spin/whatispin.html)より引用
＜拙訳＞
SPINは世界中の人々に使われているポピュラーなOSSの検証ツールである。このツールはマルチスレッドなアプリケーションの形式検証に使われる。

* [SPIN - Website](http://spinroot.com/spin/whatispin.html)
* [SPINインストール手順](http://qiita.com/kannkyo/items/f2cc2c763f38bcbb4392)