メインコンテンツまでスキップ

CADL: Contract Architecture Description Language

言語仕様書 — Version 0.2(ドラフト)

名古屋大学大学院情報学研究科 ERTL

2026年10月10日


概要​

CADL(Contract Architecture Description Language)は,マルチエージェント System of Systems(SoS) における制度設計を形式的に記述・検証・展開 するためのドメイン特化言語(DSL)です。

CADLは三層アーキテクチャ——制度層(Institution)・プロトコル層(Protocol)・ アルゴリズム層(Algorithm)——を採用し,ガバナンスルールとエージェント間の 調整メカニズムを単一の統合言語で精密に記述できます。 アルゴリズム層は,中央側とローカル側がそれぞれ実行するアルゴリズムの名前を示すものであり,その内部は記述しません。 CADL仕様からシミュレータ設定の自動生成や設計整合性の検証を行うツールチェーンも 提供します。

アーキテクチャ全体像​

1つのソースから3種類の出力が生成されます。形式検証と制度制約コード (スマートコントラクト/ポリシー/ランタイムクラス)は構文解析された定義から, ランタイムシミュレータ設定は三層 IR から生成されます。 実験結果は CADL ソースへフィードバックされ,ガバナンスパラメータ (α, β, λ, ρ)の調整に利用されます。α,β,λ は契約ごとのパラメータであり, ρ は動機拡張(付録C)のパラメータです。 cadl ツールが扱うのは,ソース,検証器,コード生成,IR,シミュレータ設定の各ステップです。 実験の実行とその評価は,シミュレータまたは CADL Explorer で行います。

本仕様書の読み方​

本書は3部構成になっています。以下の順序で読むことを推奨しますが,各章は 単独でも読めるように構成されています。

第I部 — 背景と要件​

  • 1. はじめに — 動機,問題設定,SoS研究における CADLの位置づけ。
  • 2. 目的 — CADLが解決する課題と,本ドラフトのスコープ。
  • 3. 比較 — 既存ADL・契約言語・マルチエージェントDSLとの関係。
  • 4. 要件 — 言語設計を駆動する機能的・非機能的要件。

第II部 — 言語と設計​

  • 5. 言語仕様 — 三層(制度・プロトコル・アルゴリズム) のコア構文と意味論。
  • 6. 設計 — 設計の根拠,ツールチェーン構成,検証エンジン, ランタイムシステム。中間表現(IR)は 付録EのE.7節と 用語集で説明します。
  • 7. 例 — CADLの典型的な利用例。

第III部 — 応用と展望​

付録​

推奨される読み順​

  • はじめて読む方 — 1〜2章を読み,5章をざっと眺めてから7章で具体例を確認。 7章の記述例は概念的なものです。実行できる例は,cadlリポジトリの examples/ ディレクトリと ハンズオン教材にあります。
  • 実装者・ツール開発者 — 5章,6章,付録Aを中心に。
  • 研究者 — 3章,9章,10章で全体的な文脈と未解決問題を把握。

ツールの入手​

リファレンス実装は cadl です。 pip install cadl-lang でインストールします(Python 3.9以上)。コマンド名は cadl です。 まず,次のように確認します。

pip install cadl-lang
cadl --version

続いて,リポジトリの examples/ ディレクトリにあるような .cadl ファイルに対して,cadl check <file>.cadl と cadl verify <file>.cadl を実行します。 すべてのコマンドはリポジトリのREADMEを, 手順を追った説明はハンズオン教材を参照してください。

関連ツール​

  • cadl — CADLのコンパイラ兼コマンドラインツール (リファレンス実装)。PyPIでは cadl-lang として 公開しています。
  • CADL Explorer — CADLの ガバナンスパイプラインをエンドツーエンドで体験できるインタラクティブな Webアプリケーション。仕様からシミュレーション,ガバナンス評価までを 一貫して可視化します。
  • cadl-raspimouse-simulator — ハンズオン教材で使用するシミュレータ。

手を動かして学ぶ​

仕様を読むだけでなく実際に書いて動かしたい場合は,ハンズオン教材を参照してください。ロボット配送を題材に,仕様の記述からコード生成・シミュレーション実行までを一通り体験できます。

ステータス​

本書はVersion 0.2(ドラフト) です。言語およびツールチェーンは開発中であり, 構文・意味論は今後のリビジョンで変更される可能性があります。

Version 0.2 は,Version 0.1 の記述をリファレンス実装に合わせて改めたものです。 既存のファイルの読み方に影響する変更は次のとおりです。

  • β は意思決定集中度:0 が完全分散,1 が完全集中です (5.4.2 節)。Version 0.1 には,逆の向きで説明している 箇所がありました。
  • SoS-DSL拡張(付録E):on_violation.transition と on_match.transition は移り先の状態を指し(規則 L-5,M-3), on_match.violation は宣言を必要としないラベルです(規則 M-2)。拡張の版は sos-dsl: 0.1 のままです。
  • sharing: の要素は引用符で囲んだ文字列で書かなければなりません (- "TAXI[*] -> CENTRAL : position")。引用符がないと,YAML はこれを文字列ではなく マッピングとして読みます (付録A A.4節)。
  • 記号で書いた範囲の上限は記号的な大きさ:[1..N] の N は任意のアクター数を表し, これに値を与える構文は言語にありません(5.2.2 節, 付録A A.3節)。
  • 識別子は ASCII に限ります。文字列とコメントには任意の Unicode 文字を使用できます (第4章の要求 NFR-7, 付録A A.1節)。

動機拡張は,独自のラベル v0.1-ext のままです。

仕様書とリファレンス実装の版は,独立に番号を付けています。本仕様書は Version 0.2 であり, 内容の確認に用いたリファレンス実装は cadl 0.3.13 です。

フィードバックや議論はGitHub Issuesで歓迎します。 仕様書や本サイトの問題は,cadl-specのIssuesで報告できます。