IID.systems
ProfileServicesFormal MethodsSchoolGitHub

形式的仕様記述

数学的な記法でシステムの「何をすべきか」を厳密に定義する

形式的仕様記述とは

形式的仕様記述は、述語論理・集合論・代数といった数学的基盤を用いて、ソフトウェアやシステムの振る舞いを厳密に定義する手法です。自然言語による仕様書は読み手によって異なる解釈が可能ですが、形式仕様は数学的に一意に定まるため、すべての関係者が同一の理解を共有できます。

形式的仕様記述の目的は「システムが何をすべきか(What)」を定義することであり、「どう実装するか(How)」は含みません。この分離により、設計の本質に集中でき、実装手段に引きずられない仕様策定が可能になります。


基本概念

型定義と不変条件:データの構造を型として定義し、その型が常に満たすべき制約(不変条件)を記述します。例えば「年齢は0以上150以下の整数」「メールアドレスは一意」といった制約を数学的に表現します。これにより、不正なデータ状態がそもそも存在し得ないことを保証できます。

事前条件と事後条件:操作(関数)が実行される前に成立すべき条件(事前条件)と、実行後に保証される条件(事後条件)を明示します。これにより、各操作の責任範囲が明確になり、モジュール間の境界が厳密に定義されます。

段階的詳細化:抽象度の高い仕様から、段階的に具体的な設計へ詳細化していくプロセスです。各段階で上位仕様との整合性を数学的に検証できるため、仕様の意図が実装まで正確に保たれます。


代表的な仕様記述言語

VDM-SL(Vienna Development Method)

1970年代にIBMウィーン研究所で開発された、最も歴史のある形式仕様記述言語の一つです。集合、写像、列といった豊富なデータ型と、事前条件・事後条件による操作定義が特徴です。ISO標準(ISO/IEC 13817-1)として規格化されています。

-- ユーザー登録の仕様例 RegisterUser(email: Email, name: seq1 of char) uid: UserId pre email not in set dom userDB post userDB = userDB~ munion {uid |-> mk_User(email, name)} and uid not in set dom userDB~

この例では、RegisterUser操作の事前条件(メールアドレスが未登録であること)と事後条件(ユーザーDBに新規ユーザーが追加されること)が厳密に定義されています。

TLA+

レスリー・ランポート(2013年チューリング賞受賞)が考案した仕様記述言語です。時相論理(Temporal Logic of Actions)に基づき、特に並行・分散システムの仕様記述に強みを持ちます。Amazon Web Servicesが大規模分散システムの設計検証に採用したことで、産業界での注目度が急上昇しました。

B-Method

集合論と述語論理に基づく仕様記述・段階的詳細化の手法です。仕様から実装コードまでの各詳細化ステップを数学的に証明できるのが最大の特徴です。パリ地下鉄14号線の無人運転システムや、世界各地の鉄道信号システムで実績があります。

Z記法 / Alloy

Z記法はオックスフォード大学で開発された、集合論と述語論理に基づく仕様記述法です。スキーマと呼ばれる構造で状態と操作を記述します。AlloyはMITのダニエル・ジャクソンが開発した軽量形式手法で、リレーショナルロジックに基づき、自動解析によるモデル探索が可能です。


形式的仕様記述が解決する課題

仕様の曖昧性の排除:自然言語の仕様書では「ユーザーは何度でもリトライできる」が複数の意味に解釈されますが、形式仕様では制約が一意に定まります。クライアント・設計者・実装者の間で認識のズレが発生しなくなります。

設計段階での矛盾検出:形式仕様は機械的に検証可能です。相反する条件や到達不可能な状態を、コードを一行も書く前に検出できます。実装後に発覚するバグの多くは、実は仕様段階の矛盾に起因しています。

テストケースの体系的導出:事前条件・事後条件が厳密に定義されていれば、境界値やエッジケースを含むテストケースを体系的に導出できます。テスト漏れのリスクが低減します。

変更影響の追跡可能性:仕様が形式的に記述されていれば、ある仕様の変更が他の部分にどう影響するかを機械的に分析できます。変更の波及範囲が予測可能になり、回帰バグのリスクが低減します。


導入の障壁

形式的仕様記述の有効性にもかかわらず、一般的なソフトウェア開発での普及は限定的でした。主な障壁として、数学的記法の習得コスト、仕様記述にかかる初期工数の増加、既存の開発ワークフローへの組み込みの難しさが挙げられます。

そのため、形式的仕様記述は主に安全性が最重要な領域(航空、鉄道、医療機器、原子力)で適用されてきました。ただし、近年のLLM(大規模言語モデル)の発展により、これらの障壁が変化しつつあります。

IID Systemsの研究

IID Systemsでは、VDM-SLを用いた形式仕様をAIエージェント間の契約として活用するアプローチを研究しています。AIが形式仕様の記述と検証を支援することで、数学的専門知識の壁を低減し、形式的仕様記述の恩恵をより広い開発現場に届ける可能性を探っています。