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

付録 A — 用語集

本書で使う用語を、分野ごとにまとめます。右の列は、その用語を説明している本書の節です。仕様書の用語集は、本書で使わない用語も含めて用語集にあります。

A.1 SoS の概念​

用語意味本書の節
SoS(System of Systems)それぞれが独立して運用される複数のシステムが集まって、どのシステムも単独では果たせない目的を果たしている状態1.1、1.2
Maier の 5 条件ある対象を SoS と呼べるかを判定する 5 つの条件:運用上の独立性、管理上の独立性、地理的分散、創発的振る舞い、進化的発展 [1]1.3
運用上の独立性SoS 全体が止まっていても、各構成要素が単独で動くこと。Maier の条件 (1)1.3
管理上の独立性各構成要素が、別の所有者や意思決定者を持つこと。Maier の条件 (2)1.3
創発的振る舞い全体が、どの構成要素にも単独ではできないことをすること。Maier の条件 (4)1.3
SoS の類型中央の指揮権の強さによる 4 つの分類(Directed、Acknowledged、Collaborative、Virtual)[2] [3]。CADL ファイルでは type: に書く1.4、3.3
Directed(統率型)強いトップダウンで集中的に管理する SoS1.4
Acknowledged(認知型)SoS 全体の指揮権が定まっているが、各構成システムが所有権と独自の管理を保つ SoS。本書のロボット配送はこの類型としてモデル化する1.4
Collaborative(協調型)単一の指揮権がなく、共通の取り決めを介して自発的に協力する SoS1.4
Virtual(仮想型)中央の管理も合意された目的もなく、調整が自然に生じる SoS1.4
ディスパッチャ(DISPATCHER)本書のロボット配送で、配送をロボットに割り当てる中央の管制1.1、3.4

A.2 CADL の構造の層​

用語意味本書の節
CADL(Contract Architecture Description Language)複数のシステムが守るべき決まりを、実装コードとは別の 1 つのファイルに書くための記述言語。YAML の形式で書く1.6
構造の層SoS に何が存在するかを書く部分。actors:、contracts:、protocols:1.6、3.2
アクター(actors:)SoS を構成する主体。ROBOT[1..N] のように範囲を付けると、同じ種類のアクターの集まりを表す3.4
ROBOT[*] / ROBOT[i]アクターの集まり全体と、そのうちの 1 つを指す書き方。ROBOT[i].battery はその属性3.4
自律性(autonomy)アクターの自律性の程度(low / medium / high)。説明のためのラベルで、ツールは検査しない3.4
契約(contracts:)アクターの間の合意。この種類の合意を結ぶ、というクラスの記述3.5
当事者(parties)契約に加わるアクター3.5
assume-guarantee 形式前提(assume)が満たされている限り、当事者が保証(guarantee)を守る、という契約の書き方。前提が崩れれば保証の義務はない3.5
インセンティブ(incentives:)報酬と罰則。lambda(λ)はその強さ、rules は誰に何をどういうときに与えるか3.5
authority: / beta(β)誰が決めるか、決定がどれだけ中央に集まっているか。本書の題材では使わない3.5
information: / alpha(α)情報をどれだけ共有するか。本書の題材では使わない3.5
プロトコル(protocols:)アクターの間のやり取りの手順。trigger、precondition、steps、postcondition で書く3.6
ステッププロトコルの 1 つの手順。A -> B : m はメッセージの送信、A : f(x) は A 自身の計算3.6
運用モード(regime)SoS の運用のしかたの切り替え(例:集中と分散)。切り替える条件は最上位の transitions: に書く。本書では使わない3.3

A.3 規範の層(SoS-DSL 拡張)​

用語意味本書の節
規範の層SoS で何が起こるべきかを書く部分。契約の中の lifecycle: と monitors:1.6、3.2
SoS-DSL 拡張CADL に lifecycle: と monitors: を加える拡張。使うファイルは extensions: に sos-dsl: 0.1 と書く1.6、3.3
契約インスタンス注文 1 件ごとに作られる、契約の 1 つの実体。ライフサイクルに従って状態を移る。作るのは契約を動かす側のアプリケーション3.7
ライフサイクル(lifecycle:)契約インスタンスがたどる状態機械3.7、5.3
初期状態 / 終わりの状態(initial / terminal)インスタンスが作られたときの状態と、それ以上移らない状態3.7
遷移(transitions)インスタンスが from の状態にあり、on: のイベントが起き、when: が成り立つと、to の状態へ移る規則3.7
イベント(on:)遷移を起こすきっかけ。"A -> B : m" の形はメッセージが送られたとき、条件式はそれが成り立ったときに起きる3.7
期限(deadline:)インスタンスが from の状態に入った時刻から数えた時間の上限。5s のように整数と単位で書く3.7
on_violation:期限に間に合わなかったときの扱い。transition: は移り先の状態の名前(遷移の id ではない)、severity: は違反の重さ3.7
違反期限切れ、または監視ルールの条件が成り立ったこと。記録され、指定があればインスタンスが強制的に状態を移る3.7、3.8
重さ(severity)違反の重さ。Minor、Major、Critical のどれかで、省略すると Major3.7
監視ルール(monitors:)契約インスタンスが動いている間に見張る規則3.8、5.3
observe監視ルールが読む値。宣言したアクターの属性、メッセージの名前、time、state のどれか3.8
sampling監視ルールを評価する時。periodic(500ms) は一定の間隔、event はイベントが届くたび(省略時)3.8
rule違反とみなす条件。式を文字列で書く3.8
on_match:監視ルールの条件が成り立ったときの扱い。violation: は記録する違反の名前、transition: は移り先の状態3.8
予約語 state / now / request条件式の中で、インスタンスの現在の状態、現在時刻、インスタンスを作った要求を表す名前3.8

A.4 ツールチェイン​

用語意味本書の節
ツールチェインCADL ファイルから検査結果、IR、図、コード、実行結果を作る一連のツール2.1
cadl check構文、型、SoS-DSL の静的な規則を検査するコマンド。誤りはエラー、推奨に反する書き方は警告として報告する3.9
cadl verifycadl check に加え、SMT ソルバで前提と保証の矛盾や、プロトコルのデッドロックを検査するコマンド3.9
SMT ソルバ / Z3論理式が同時に成り立つかを判定するプログラム。cadl verify は Z3 [8] を使う2.1、3.9
IR(中間表現、Sim-IR)CADL ファイルの内容を 3 層(institution / protocol / algorithm)の JSON にしたもの。cadl sim-ir が出力し、以降のツールはこれを読む2.1、7.6
コード生成(cadl codegen)IR から実行可能なコードを作ること。--target で生成先(python、solidity、opa、unity-csharp)を選ぶ7.3、7.6
e2e スクリプトcadl_repo/scripts/sos_dsl_handson_e2e.sh。検査、IR の出力、C# の生成、Unity プロジェクトへの配置をまとめて行う7.3
Python 参照ランタイムIR を直接読み込み、契約インスタンスの状態の移り変わりを再現する手書きのインタプリタ(engine.py)。生成された C# の答え合わせに使う7.5、7.6
multi_robot_demo参照ランタイムで 5 台のロボットを決まった筋書きで動かすデモ。--summary で終わりの状態の表、--log で NDJSON のトレース、--ir で自分の IR を使う7.2、7.9
NDJSON トレース1 行に 1 つの JSON オブジェクトを書いたイベントの記録7.9
cadl-explorerCADL の編集と検査、状態機械の図の描画をする Streamlit のアプリ6.3
Lifecycle Viewcadl-explorer の Contract Lifecycle ページが描く、ライフサイクルの図6.2、6.4

A.5 シミュレータ​

用語意味本書の節
cadl-raspimouse-simulatorUnity プロジェクト、Go の arbitrator、Python 参照ランタイムをまとめたシミュレータのリポジトリ2.2
ContractRuntime生成された C# の契約ランタイム。インスタンスの登録、イベントの配送、期限と監視ルールの評価をする7.6
ContractRuntimeHostシーンに 1 つ置く部品。ランタイムを保持し、毎フレーム評価させ、イベントを Console に書き出す8.2、8.4
ブリッジ(PilotContractBridge)ロボットごとに 1 つ付ける部品(Unity の MonoBehaviour)。ロボットの状態の変化を観測し、契約のイベントに変換する8.2、8.4
Pilot_CSoSロボットの制御コード。経路の追従、配送の申し出、配達をする。契約のことは何も知らない2.1、8.4
arbitratorGo で書いた配送の割り当て役。NATS で配送を配り、申し出の早い順にロボットに任せる8.2、8.4
NATSロボットと arbitrator の間のメッセージをやり取りする仕組み(メッセージブローカ)8.2
C-SoSシミュレータの動作モードの名前(Collaborative SoS の略)。CADL ファイルの type: とは関係しない2.2
cadl_config.json道路網(11 ノード、17 エッジ)、ロボット台数、NATS の設定。arbitrator と Unity の両方が読む8.4

番号付きの文献は付録 Dにあります。