TLA+ 《Specifying Systems》翻译初稿——Section 2.5 An Alternative Specification(另一小时时钟规约)

本节提供了小时时钟规约的另一种书写方式,提出了一种在有多种表达方式下,规约的选择策略。

N a t u r a l s Naturals 模块还定义了取模运算符,我们将其写为 % \% 。公式 i % n i \% n ,数学中也写作 i  mod  n i\text{ mod }n i i 除以 n n 的余数,更正式地说, i % n i \% n 是小于 n n 的自然数,对于某些自然数 q q ,满足 i = q n + ( i % n ) i = q*n +(i\%n) 。让我们以更数学化的方式表达此条件, N a t u r a l s Naturals 模块将 N a t Nat 定义为自然数的集合,并且在集合 N a t Nat 中存在满足公式 F F 的值 q q ,此断言记做 q N a t : F \exists q \in Nat:F ,因此,如果 i i n n N a t Nat 的元素且 n > 0 n> 0 ,则 i % n i\% n 是满足下式的唯一值:
( i % n 0.. ( n 1 ) ) ( q N a t i = q n + ( i % n ) ) (i \% n \in 0..(n-1)) \land (\exists q \in Nat:i = q*n+(i\% n))
我们可以使用 % \% 来简化我们的小时规约。注意到 ( 11 % 12 ) + 1 (11\% 12)+1 等于12, 且 ( 12 % 12 ) + 1 (12 \% 12)+1 等于1,我们可以定义一个不同的下一状态动作 H C n x t 2 HCnxt2 和一个不同的公式 H C 2 HC2 作为小时时钟规约:
H C n x t 2 h r = ( h r % 12 ) + 1 HCnxt2 \triangleq hr'=(hr \% 12)+1
H C 2 H C i n i [ H C n x t 2 ] h r HC2 \triangleq HCini \land \square[HCnxt2]_{hr}

动作 H C n x t HCnxt H C n x t 2 HCnxt2 不等价。步骤 [ h r = 24 ] [ h r = 25 ] [hr = 24]\rightarrow [hr = 25] 满足 H C n x t HCnxt 但不满足 H C n x t 2 HCnxt2 ,而步骤 [ h r = 24 ] [ h r = 1 ] [hr = 24]\rightarrow [hr = 1] 满足 H C n x t 2 HCnxt2 但不满足 H C n x t HCnxt 。但是,以 h r 1..12 hr \in 1 .. 12 状态开始的任何步骤都满足 H C n x t HCnxt ,也同时满足 H C n x t 2 HCnxt2 。因此,不难推断出任何以满足 H C i n i HCini 状态开始的,且满足 [ H C n x t ] h r \square [HCnxt]_{hr} 的行为也满足 [ H C n x t 2 ] h r \square [HCnxt2]_{hr} 。因此,公式 H C HC H C 2 HC2 是等价的。换句话说, H C H C 2 HC \equiv HC2 是一个定理。因此指定小时时钟的规约是两个公式中的哪一个都没关系。

数学提供了无数种表达同一事物的不同方式。表达式 6 + 6 6+6 3 4 3*4 141 129 141-129 都具有相同的含义:它们只是数字 12 12 的不同表达方式。我们可以用上述任一表达式替换 H o u r C l o c k HourClock 模块中数字 12 12 的任何一个实例,而无需更改模块公式的任一含义。

在编写规约时,我们通常会面临同一事物有多种表达方式的选择,遇到这种情况时,首先应确保这些规约都是等价的,如果是,选择一种最容易理解的,如果不是,那么,需要确认哪一种是真正想要的。

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

猜你喜欢

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