Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| learning:tla_summary [2024/10/07 16:51] – fponzi | learning:tla_summary [2025/08/20 10:20] (current) – fponzi | ||
|---|---|---|---|
| Line 7: | Line 7: | ||
| ---- | ---- | ||
| - | ====== | + | ====== |
| - | ===== Module-Level Constructs | + | ^ Construct ^ Description ^ |
| + | | **module M** | Begins the module or submodule named //M//. | | ||
| + | | **extends M1, ..., Mn** | Incorporates the declarations, | ||
| + | | **constants C1, ..., Cn** | Declares the Cj to be constant parameters (rigid variables). Each Cj is either an identifier or has the form C(-,...,-), the latter form indicating that C is an operator with the indicated number of arguments. | | ||
| + | | **variables x1, ..., xn** | Declares the xj to be variables (parameters that are flexible variables). | | ||
| + | | **assume P** | Asserts P as an assumption. | | ||
| + | | **F(x1, ..., xn) == exp** | Defines F to be the operator such that F(e1, | ||
| + | | **f[x ∈ S] == exp** | Defines f to be the function with domain S such that f[x] = exp for all x in S. (The symbol f may occur in exp, allowing a recursive definition.) | | ||
| + | | **instance M with p1 <- e1, ..., pm <- em** | For each defined operator F of module M, this defines F to be the operator whose definition is obtained from the definition of F in M by replacing each declared constant or variable pj of M with ej. (If m = 0, the ' | ||
| + | | **N(x1, ..., xn) == instance M with p1 <- e1, ..., pm <- em** | For each defined operator F of module M, this defines N(d1, | ||
| + | | **theorem P** | Asserts that P can be proved from the definitions and assumptions of the current module. | | ||
| + | | **local def** | Makes the definition(s) of def (which may be a definition or an instance statement) local to the current module, thereby not obtained when extending or instantiating the module. | | ||
| + | | **====** | Ends the current module or submodule. | | ||
| - | **module M** | + | ---- |
| - | Begins the module or submodule named M. | + | ====== The Constant Operators ====== |
| - | **extends M1, ..., Mn** | + | ^ Category ^ Operators ^ |
| + | | **Logic** | /\\ , \\/ , ~ , => , <=> , TRUE, FALSE, BOOLEAN, ∀, ∃, CHOOSE | | ||
| + | | **Sets** | = , # , ∈ , /∈ , ∪ , ∩ , ⊆ , \\ , {..}, SUBSET, UNION | | ||
| + | | **Functions** | f[e], DOMAIN f, [x ∈ S |-> e], [S -> T], [f EXCEPT ![e1] = e2] | | ||
| + | | **Records** | e.h, [h1 |-> e1, ...], [h1: S1, ...], [r EXCEPT !.h = e] | | ||
| + | | **Tuples** | e[i], << | ||
| - | Incorporates the declarations, | + | ---- |
| - | **constants C1, ..., Cn** | + | ====== Miscellaneous Constructs ====== |
| - | Declares the Cj to be constant parameters (rigid variables). Each Cj is either an identifier or has the form C( , ..., ), the latter form indicating | + | ^ Construct ^ Description ^ |
| + | | **IF p THEN e1 ELSE e2** | Conditional expression: e1 if p is true, else e2. | | ||
| + | | **CASE p1 -> e1 [] ... [] pn -> en** | Some ei such that pi is true. | | ||
| + | | **CASE ... [] OTHER -> e** | Some ei such that pi is true, or e if all pi are false. | | ||
| + | | **LET d1 == e1 ... dn == en IN e** | e in the context | ||
| + | | **/\\ p1 ... pn** | Conjunction p1 /\\ ... /\\ pn. | | ||
| + | | **\\/ p1 ... pn** | Disjunction p1 \\/ ... \\/ pn. | | ||
| - | **variables x1, ..., xn** | + | ---- |
| - | Declares the xj to be variables (parameters that are flexible variables). | + | ====== Action Operators ====== |
| - | **assume P** | + | ^ Operator ^ Description ^ |
| + | | **e'** | The value of e in the final state of a step. | | ||
| + | | **[A]_e** | A ∨ (e' = e). | | ||
| + | | **< | ||
| + | | **ENABLED A** | An A step is possible. | | ||
| + | | **UNCHANGED e** | e' = e. | | ||
| + | | **A · B** | Composition of actions. | | ||
| - | Asserts P as an assumption. | + | ---- |
| - | **F(x1, ..., xn) Δ = exp** | + | ====== Temporal Operators ====== |
| - | Defines | + | ^ Operator ^ Meaning ^ |
| + | | **[]F** | F is always true. | | ||
| + | | **<> | ||
| + | | **WF_e(A)** | Weak fairness for action A. | | ||
| + | | **SF_e(A)** | Strong fairness for action A. | | ||
| + | | **F ~> G** | F leads to G. | | ||
| - | **f[x ∈ S] Δ = exp** | + | ---- |
| - | Defines f to be the function with domain S such that f[x] = exp for all x in S. (The symbol f may occur in exp, allowing a recursive definition.) | + | ====== Standard Modules ====== |
| - | **instance M with p1 ← e1, ..., pm ← em** | + | ^ Module ^ Operators ^ |
| + | | **Naturals, Integers, Reals** | + , - , * , / , ^ , .. , div , % , ≤ , ≥ , < , > , Infinity | | ||
| + | | **Sequences** | o , Head , Tail , Append , Len , Seq , SelectSeq , SubSeq | | ||
| + | | **FiniteSets** | IsFiniteSet , Cardinality | | ||
| + | | **Bags** | ⊕ , BagIn , CopiesIn , SubBag , BagOfAll , EmptyBag , BagToSet , IsABag , BagCardinality , BagUnion , SetToBag | | ||
| + | | **RealTime** | RTBound , RTnow , now | | ||
| + | | **TLC** | :> , @@ , Print , Assert , JavaTime , Permutations , SortSeq | | ||
| - | For each defined operator F of module M, this defines F to be the operator whose definition is obtained from the definition of F in M by replacing each declared constant or variable pj of M with ej. (If m = 0, the " | + | ---- |
| - | **theorem P** | + | ====== ASCII Equivalents ====== |
| - | Asserts that P can be proved from the definitions and assumptions of the current module. | + | ^ Symbol ^ ASCII ^ |
| + | | ∧ | /\\ or \\land | | ||
| + | | ∨ | \\/ or \\lor | | ||
| + | | ¬ | ~ or \\lnot | | ||
| + | | = | = | | ||
| + | | ≠ | # or /= | | ||
| + | | ∈ | \\in | | ||
| + | | /∈ | \\notin | | ||
| + | | ⊆ | \\subseteq | | ||
| + | | ⊂ | \\subset | | ||
| + | | ⊇ | \\supseteq | | ||
| + | | ⊃ | \\supset | | ||
| + | | -> | -> | | ||
| + | | <- | <- | | ||
| + | | [] | [] | | ||
| + | | <> | <> | | ||
| + | | |-> | |-> | | ||
| + | | × | \\X or × | | ||
| + | | · | \\cdot | | ||
| + | | ○ | \\circ | | ||
| + | | • | \\bullet | | ||
| - | **local def** | + | ---- |
| - | + | ||
| - | Makes the definition(s) of def (which may be a definition or an instance statement) local to the current module, thereby not obtained when extending or instantiating the module. | + | |
| - | + | ||
| - | ===== The Constant Operators ===== | + | |
| - | + | ||
| - | === Logic === | + | |
| - | <m> ∧ ∨ ¬ ⇒ ≡ \text{true} \text{false} \text{boolean} \</ | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | === Sets === | + | |
| - | <m>= \neq ∈ \notin ∪ ∩ ⊆ \setminus </ | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | === Functions === | + | |
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | <m>[x ∈ S \mapsto e] [\text{Function } f \text{ such that } f[x] = e \text{ for } x ∈ S]</ | + | |
| - | + | ||
| - | <m>[S \to T] [\text{Set of functions } f \text{ with } f[x] \in T \text{ for } x \in S]</ | + | |
| - | + | ||
| - | === Records === | + | |
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | === Tuples === | + | |
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | <m>S1 \times ... \times Sn [\text{The set of all n-tuples with i-th component in } S_i]</ | + | |
| - | + | ||
| - | ===== Miscellaneous Constructs ===== | + | |
| - | + | ||
| - | **if p then e1 else e2** [e1 if p is true, else e2] | + | |
| - | + | ||
| - | **case p1 → e1 ... pn → en** | + | |
| - | + | ||
| - | **case p1 → e1 ... pn → en 2 other → e** | + | |
| - | + | ||
| - | **let d1 Δ = e1 ... dn Δ = en in e** | + | |
| - | + | ||
| - | ===== Action Operators ===== | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | <m>A \cdot B [\text{Composition of actions}]</ | + | |
| - | + | ||
| - | ===== Temporal Operators ===== | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | ===== User-Definable Operator Symbols ===== | + | |
| - | + | ||
| - | === Infix Operators === | + | |
| - | + | ||
| - | <m> + - * / \circ ++</ | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | **Postfix Operators: | + | |
| - | + | ||
| - | ===== Precedence Ranges of Operators ===== | + | |
| - | + | ||
| - | The relative precedence of two operators is unspecified if their ranges overlap. | + | |
| - | **Prefix Operators: | + | |
| - | <m> ¬ 4–4</ | + | |
| - | + | ||
| - | **Infix Operators: | + | |
| - | < | + | |
| - | <m> +− . 2−2</ | + | |
| - | + | ||
| - | ===== Operators Defined in Standard Modules ===== | + | |
| - | + | ||
| - | Modules Naturals, Integers, Reals: | + | |
| - | + | ||
| - | **+** **-** <m> \cdot ^ \text{Int, Real} </ | + | |
| - | + | ||
| - | Modules Sequences: | + | |
| - | + | ||
| - | **\circ Head SelectSeq SubSeq Append** | + | |
| - | + | ||
| - | Modules FiniteSets: | + | |
| - | + | ||
| - | **IsFiniteSet Cardinality** | + | |
| - | + | ||
| - | Modules Bags: | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | Modules RealTime: | + | |
| - | + | ||
| - | **RTBound RTnow now** | + | |
| - | + | ||
| - | Modules TLC: | + | |
| - | + | ||
| - | **:> @@ Print Assert JavaTime SortSeq** | + | |
| - | + | ||
| - | ===== ASCII Representation of Typeset Symbols ===== | + | |
| - | + | ||
| - | <m> \land \lnot \in \leq \gg \prec \preceq \subseteq \infty </ | + | |
| - | + | ||
| - | <m> \forall \exists \subset \circ \bullet \sim \approx \cong \times \cup \cap </ | + | |
| - | + | ||
| - | <m> \star \bigcirc \sim= \odot \oplus \ominus </ | + | |
| - | + | ||
| - | < | + | |