TLA+ 《Specifying Systems》翻译初稿——Section 5.4 Tuples as Functions(元组也是函数)

本节要点:

  • 模块 S e q u e n c e s Sequences Sequences定义了有限序列为元组,因此,长度为 n n n的序列就是一个定义域为 1.. n 1..n 1..n的函数

在编写缓存内存规约之前,让我们仔细回顾一下元组: ⟨ a , b , c ⟩ \langle a, b, c\rangle a,b,c T L A + TLA^+ TLA+中包含元素 a , b , c a, b, c a,b,c的三元组。这个三元组实际上是定义域 { 1 , 2 , 3 } \{1,2,3\} {1,2,3}的函数,它将 1 1 1映射到 a , 2 a, 2 a,2映射到 b , 3 b,3 b,3映射到 c c c。因此 ⟨ a , b , c ⟩ [ 2 ] \langle a, b, c\rangle[2] a,b,c[2]等于 b b b

T L A + TLA^+ TLA+提供普通数学的笛卡儿积算子 × \times ×,这里 A × B × C A \times B \times C A×B×C是包含所有三元组 ⟨ a , b , c ⟩ \langle a, b, c\rangle a,b,c的集合,使得 a ∈ A , b ∈ B , c ∈ C a \in A,b \in B, c \in C aA,bB,cC。注意到 A × B × C A \times B \times C A×B×C不同于 A × ( B × C ) A \times (B \times C) A×(B×C),后者是 ⟨ a , p ⟩ \langle a,p\rangle a,p的集合,其中 a ∈ A , p ∈ B × C a \in A, p \in B \times C aA,pB×C

模块 S e q u e n c e s Sequences Sequences定义了有限序列为元组,因此,长度为 n n n的序列就是一个定义域为 1.. n 1..n 1..n的函数。事实上, s s s是一个序列当且仅当 [ i ∈ 1.. L e n ( s ) ↦ s [ i ] ] [i \in 1..Len(s) \mapsto s[i]] [i1..Len(s)s[i]]。接下来是一些定义在模块 S e q u e n c e s Sequences Sequences的运算符。(运算符的定义在第4.1节有描述。)
H e a d ( s ) ≜ s [ 1 ] Head(s) \triangleq s[1] Head(s)s[1]
T a i l s ( s ) ≜ [ i ∈ 1.. L e n ( s ) − 1 ↦ s [ i + 1 ] ] Tails(s) \triangleq [i \in 1..Len(s)-1 \mapsto s[i+1]] Tails(s)[i1..Len(s)1s[i+1]]
s ∘ t ≜ [ i ∈ 1.. L e n ( s ) + L e n ( t ) ↦  IF  i ≤ L e n ( s )  THEN  s [ i ]  ELSE  t [ i − L e n ( s ) ] ] s \circ t \triangleq [i \in 1..Len(s)+Len(t) \mapsto \\ \qquad \text{ IF }i\leq Len(s)\text{ THEN }s[i]\text{ ELSE }t[i-Len(s)]] st[i1..Len(s)+Len(t) IF iLen(s) THEN s[i] ELSE t[iLen(s)]]
TLA+ 《Specifying Systems》翻译初稿——Section 5.4 Tuples as Functions(元组也是函数)_第1张图片

你可能感兴趣的:(TLA+)