TLA+ 《Specifying Systems》翻译初稿——Section 6.6 Choose(Choose语句)

本节要点

  • Choose  v : v S \text{Choose } v: v\notin S 是一个特定的不确定的值
  • 只有一个状态链满足规约 ( x = CHOOSE  n : n N a t ) [ x = CHOOSE  n : n N a t ] x (x= \text{CHOOSE }n:n \in Nat) \wedge \square[x'= \text{CHOOSE }n:n\in Nat]_{x}

第5.1节的内存接口中通过 Choose  v : v S \text{Choose } v: v\notin S 引入了Choose 运算符,这是一个表达式,取值为一个不在S中的元素。在上面的6.3节中,我们看到它是一个功能强大的工具,可以精细化使用它。

Choose 运算符最常见的用途是“命名”唯一指定的值。例如,如果 a a b b 是实数且 b 0 b\neq 0 ,则 a / b a/b 是满足公式 a = b ( a / b ) a = b*(a / b) 的唯一实数。因此,标准模块Reals在实数集Real上定义除法如下: a / b CHOOSE  c R e a l : a = b c a/b \triangleq \text{CHOOSE } c\in Real: a = b*c (表达式 CHOOSE  x S : p \text{CHOOSE } x\in S: p 表示 CHOOSE  x : ( x S ) p \text{CHOOSE } x:(x \in S) \wedge p )。如果 a a 为非零实数,则不存在实数 c c ,使得 a = 0 c a=0*c 。因此, a / 0 a/0 具有不确定的值。我们不知道实数乘以字符串等于什么,所以我们不能说是否存在一个实数 c c 使得 a a 等于 x y z c “xyz” *c 。因此,我们不知道 a / x y z a /“ xyz” 是什么。

用到数学知识比较少的程序员常常认为 CHOOSE \text{CHOOSE} 是一个不确定的运算符。在数学中,没有诸如不确定性运算符或不确定性函数之类的东西。如果某个表达式今天等于42,则明天等于42,从明天起一百万年后仍等于42。对规约 ( x = CHOOSE  n : n N a t ) [ x = CHOOSE  n : n N a t ] x (x= \text{CHOOSE }n:n \in Nat) \wedge \square[x'= \text{CHOOSE }n:n\in Nat]_{x} , 只有一个状态链满足它,在这个状态链中, x x 的值永远等于 CHOOSE  n : n N a t \text{CHOOSE }n:n \in Nat ,这是一个特定的未指定自然数,这与下列规约有很大不同 ( x N a t ) [ x N a t ] (x \in Nat) \wedge \square [x' \in Nat] 所有状态下 x x 始终是自然数的状态链( x x 可以不同)都满足上述规约,该规约是高度不确定的,满足它的状态链有很多。

发布了4 篇原创文章 · 获赞 1 · 访问量 5525

猜你喜欢

转载自blog.csdn.net/robinhzp/article/details/103567094