翻訳: Summary of TLA+

Takami Torao #TLA+ #cheetsheet
  • このエントリーをはてなブックマークに追加

Table of Contents

  1. モジュールレベルの構成
    1. ┌──── MODULE ────┐
    2. EXTENDS
    3. CONSTANTS (1)
    4. VARIABLES (1)
    5. ASSUME
    6. (2)
    7. INSTANCE WITH
    8. INSTANCE WITH
    9. THEOREM
    10. LOCAL
    11. └───────────────┘
  2. 定数演算子
    1. 論理
    2. 集合
    3. 関数
    4. レコード
    5. タプル
  3. その他の構成
  4. アクション演算子
  5. 時相演算子
  6. ユーザ定義可能な演算子記号
    1. 中置演算子
    2. 接尾辞演算子(12)
  7. 演算子の優先順位範囲
    1. 接頭演算子
    2. 中置演算子
    3. 接尾演算子
  8. 標準モジュールで定義されている演算子
    1. Naturals, Integers, Reals モジュール
    2. Sequences モジュール
    3. FiniteSets モジュール
    4. Bags モジュール
    5. RealTime モジュール
    6. TLC モジュール
  9. タイプセット記号の ASCII 表現
  10. 参照

モジュールレベルの構成

┌──── MODULE ────┐

という名前のモジュールまたはサブモジュールを開始する。

EXTENDS

という名前のモジュールから宣言、定義、仮定、および定理を現在のモジュールに組み込む。

CONSTANTS (1)

を定数パラメータ (リジッド変数; rigid variable) として宣言する。各 は識別子か、 形式をとる。後者の形式は が指定された数の引数を持つ演算子であることを示す。

VARIABLES (1)

を変数 (フレキシブル変数であるパラメータ) として宣言する。

ASSUME

を仮定としてアサートする。

各識別子 に置き換えた に等しいような演算子として を定義する ( の場合、 と記述する)。

(2)

内の全ての に対して であるような定義域 の関数として を定義する (記号 で出現でき再帰的定義が許可)。

INSTANCE WITH

モジュール の定義済み演算子 それぞれに対して、演算子として を定義する。この定義は の各宣言済み定数または変数 に置き換えることによって、 の定義から得られる ( であれば WITH は省略される)。

INSTANCE WITH

モジュール の定義済み演算子 それぞれに対して、演算子として を定義する。この定義は の各宣言済み定数または変数 に置き換え、各識別子 に置き換えることによって、 の定義から得られる ( であれば WITH は省略される)。

THEOREM

が現在のモジュールの定義や仮定から証明できることをアサートする。

LOCAL

(定義またはインスタンス宣言かもしれない) の定義を現在のモジュールに対してローカルにする。これにより、モジュールを拡張したりインスタンス化する時に取得されない。

└───────────────┘

現在のモジュールまたはサブモジュールを終了する。

  • (1) キーワードの終端 はオプション。
  • (2) はアイテム のコンマ区切りリストで置き換えることができる。ここで はコンマ区切りリストか識別子のタプルのいずれか。

定数演算子

論理

TRUE FALSE BOOLEAN [TRUE とFALSE の集合]
(3)
(3)
CHOOSE [ に属する を満たす]

集合

[差集合]
[要素 で構成される集合]
(4) [ に属し を満たす要素 の集合]
(3) [ に属する のような要素 の集合]
SUBSET [ の部分集合の集合]
UNION [ のすべての要素の和集合]

関数

[関数適用]
DOMAIN [関数 の定義域]
(3) [ に対して となるような関数 ]
[ に対して となる関数 の集合]
EXPECT (5) [ を除く と等しい関数 ]

レコード

[レコード -フィールド]
[ フィールドが であるようなレコード]
[ であるような フィールドを持つすべてのレコードの集合]
EXPECT (5) [ を除く、 と等しいレコード ]

タプル

[タプル 番目の要素]
[ 番目の要素が であるような -タプル]
[ 番目の要素を持つ全ての -タプルの集合]
  • (3) はアイテム のコンマ区切りリストで置き換えることができる。ここで はコンマ区切りリストか識別子のタプルのいずれか。
  • (4) は識別しか識別子のタプルでも良い。
  • (5) はアイテム のコンマ区切りリストで置き換えることができる。ここでそれぞれの または である。

その他の構成

IF THEN ELSE [ が true であれば 、そうでなければ ]
CASE [ が true となるある ]
CASE OTHER [ が true となるある , または全ての が false なら ]
LET IN [定義の文脈での ]


[論理積 ]


[論理和 ]

アクション演算子

[あるステップの最終状態における の値]
[]
[]
ENABLED [ある ステップが可能]
UNCHANGED [e' = e]
[アクションの結合]

時相演算子

[ は常に true]
[ は結果的に true]
[アクション に対する弱い公平性]
[アクション に対する強い公平性]
[ を導く]

ユーザ定義可能な演算子記号

中置演算子

(6) (6) (6) (7) (8)
(6) (6) (6)(9)
(10) (10)
(6) (6) (6) (6)
(11)
(10)
(11)

接尾辞演算子(12)

  • (6) Naturals, Integers, Reals モジュールで定義。
  • (7) Reals モジュールで定義。
  • (8) Sequences モジュールで定義。
  • (9) として表示される。
  • (10) Bags モジュールで定義。
  • (11) TLC モジュールで定義。
  • (12) として表示され、 も同様。

演算子の優先順位範囲

2 つの演算子の範囲が重複する場合、それらの相対的な優先順位は指定しない。左結合演算子は (a) で示している。

接頭演算子

4-4 4-15 UNION 8-8
ENABLED 4-15 4-15 DOMAIN 9-9
UNCHANGED 4-15 SUBSET 8-8 12-12

中置演算子

1-1 5-5 7-7 11-11(a)
2-2 5-5 8-8 11-11(a)
2-2 5-5 8-8(a) 11-11(a)
2-2 5-5 8-8(a) 13-13(a)
3-3(a) 5-5 9-9 13-13(a)
3-3(a) 5-5 9-9 13-13(a)
5-5 5-5 9-13 13-13
5-5 5-5 9-13(a) 13-13(a)
5-5 5-5 9-13(a) 13-13(a)
5-5 5-5 9-13(a) 13-13(a)
5-5 5-5 9-13(a) 13-13
5-5 5-5 9-13(a) 13-13
5-5 5-5 9-13(a) 13-13(a)
5-5 5-5 9-13(a) 13-13(a)
5-5 5-5 9-14 13-13
5-5 5-5 10-10(a) 13-13(a)
5-5 5-5 10-10(a) 13-13(a)
5-5 5-5 10-10(a) 14-14(a)
5-5 5-5 10-11(a) 14-14
5-5 (13) 5-14(a) 10-11(a) (14) 17-17(a)
5-5 6-6(a) 10-11(a)
5-5 7-7 10-11(a)

接尾演算子

^+ 15-15 ^* 15-15 ^# 15-15 ' 15-15
  • (13) アクション構成 (\cdot)
  • (14) レコードフィールド (ピリオド)。

標準モジュールで定義されている演算子

Naturals, Integers, Reals モジュール

(15) (16) (17) Nat Real(16)
Int(18) Infinity(16)

Sequences モジュール

Head SelectSeq SubSeq
Append Len Seq Tail

FiniteSets モジュール

IsFiniteSet Cardinality

Bags モジュール

BagIn CopiesIn SubBag
BagOfAll EmptyBag
BagToSet IsABag
BagCardinality BagUnion SetToBag

RealTime モジュール

RTBound RTnow now (変数として宣言)

TLC モジュール

Print Assert JavaTime Permutations
SortSeq
  • (15) 中置 - は Naturals でのみ。
  • (16) Reals モジュールでのみ。
  • (17) べき乗。
  • (18) Naturals モジュールでは定義されていない。

タイプセット記号の ASCII 表現

/\ または \land \/ または \lor =>
~ または \lnot または \neg <=> または \equiv ==
/in \notin # または /=
<< >> []
< > <>
\leq または =< または <= \geq または >= ~>
\ll \gg -+->
\prec \succ |->
\preceq \succeq \div
\subseteq \supseteq \cdot
\subset \supset \o または \circ
\sqsubset \sqsupset \bullet
\sqsubseteq \sqsupseteq \star
|- -| \bigcirc
|= =| \sim
-> <- \simeq
\cap または intersect \cup または union \asymp
\sqcap \sqcup \approx
(+) または \oplus \uplus \cong
(-) または \ominus \X または \times \doteq
(.) または \odot \wr x^y(20)
(\X) または \otimes \propto x^+(20)
(/) または \oslash "s"(19) x^*(20)
\E \A x^#(20)
\EE \AA '
]_v >>_v
WF_v SF_v
┌─── ------(21) ───┐ ------(21)
├───┤ ------(21) └───┘ ======(21)
  • (19) は文字の連続。
  • (20) は任意の式。
  • (21) 4 つ以上の - または = の連続。

参照

  1. Leslie Lamport (2020), Summary of TLA+.