TLA+ 《Specifying Systems》翻译初稿——Section 2.4 The Specification in TLA+(TLA+规约)

本节通过小时时钟的示例,描述了如何书写一个完整的规约,及规约中各符号的书写方式及含义:

  • 规约的两种版本:ASCII版本和TLATEX版本,及两种版本的关系
  • 模块的开始,装饰及终止符
  • N a t u r a l s Naturals 模块的两个运算符: + + . . ..
  • EXTENDS \text{EXTENDS} VARIABLE \text{VARIABLE} 关键字

下一页的图2.1显示了如何在TLA+中编写小时时钟规约,这里有两个版本:底部的ASCII版本是实际的TLA+规约,即您键盘输入的方式;顶部的排版版本是第13章中描述的 TLATEX \text{TLATEX} 程序可能产生的版本。在尝试理解规约之前,我们先观察两种语法之间的关系:

  • 以小号大写字母(如 EXTENDS \text{EXTENDS} )呈现的保留字以普通ASCII大写字母书写。
  • 不能与ASCII字符一一对应的情况下,符号尽可能以象形ASCII字符呈现,例如, \square 键入为[], \neq 键入为#(您也可以输入/=代替 \neq )。
  • 没有其他更好ASCII表达的话,则使用TEX表示法[^2],例如 \in 其键入是 \in,最大的例外是 \triangleq ,其键入是==。

TLA+符号和其ASCII等效项的完整列表显示在第273页的表8中。本书所有规约的ASCII版本可通过TLA官网找到。

现在让我们看一下规约的内容:
 ⁣ ———————– MODULE  H o u r C l o c k  ———————–  ⁣ _{\ulcorner} \negthickspace\text{-----------------------} \text{ MODULE } HourClock \text{ -----------------------}\negthickspace _{\urcorner}

以上面这个标识就开始了名为HourClock的模块。TLA+规约是由模块组成,小时时钟的规约包含这个单独模块。
像+这样的算术运算符并未内置在TLA+中,而是在模块中定义。(您可能想写一个规约,其中+表示矩阵加法而不是数字加法。)自然数的常规运算符在 N a t u r a l s Naturals 模块中定义,可通过以下语句将它们的定义合并到模块 H o u r C l o c k HourClock 中:
EXTENDS  N a t u r a l s \text{EXTENDS }Naturals

公式中出现的每个符号必须是TLA+的内置运算符,或是声明和定义,例如, VARIABLE  h r \text{VARIABLE }hr 声明hr为变量。

在这里插入图片描述

为了定义 H C i n i HCini ,我们要正式表示集合 { 1 , , 12 } \{1,\ldots,12\} ,不能用省略号 \ldots ,我们也可以直接书写完整的集合: { 1 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 } \{1,3,4,5,6,7,8,9,10,11,12\} 比较繁琐。这里我们引入定义在 N a t u r a l s Naturals 模块操作符“ . . .. ”,将集合记做 { 1..12 } \{1..12\} 。推广开来, i . . j i..j 表示对任意的 i , j i,j ,从 i i j j 的所有整数。(如果 j < i j<i ,则集合是空集。)现在如何书写 H C i n i HCini 的定义就很明显了,而 H C n x t HCnxt H C HC 定义的书写方式还是如前所述。(普通数学中逻辑和集合论的操作符,如 \land \in ,也是TLA+的内置运算符。)

下面这条线  ⁣ ——————————————————————————  ⁣ \vdash \negthickspace {\text{------------------------------------------------------------------------------}} \negthickspace\dashv 可以出现在语句间的任意位置,它没有其他意义,只是单纯装饰性的。接下来的语句 THEOREM  H C       H C i n i \text{THEOREM }HC\implies \square HCini 是之前讨论过的定理,它断言在语句上下文中, H C       H C i n i HC\implies \square HCini 为真,更确切地来说,它声明公式从本模块中的定义、 N a t u r a l s Naturals 模块中的定义和TLA+的规则来说,都是遵循逻辑的。如果公式不为真,则模块 H C HC 也不为真。

下面这条线是模块的终止符号:
 ⁣ —————————————————————————————————————  ⁣ \llcorner \negthickspace _{\text{---------------------------------------------------------------------------------------------------------------}} \negthickspace\lrcorner

小时时钟的规约即 H C HC 的定义,包括 H C n x t HCnxt H C i n i HCini 公式的定义以及 H C HC 定义中出现的运算符 . . .. + + 的定义。形式上,模块中没有任何内容告诉我们 H C HC 而非 H C i n i HCini 是小时时钟的规约。 TLA+是一种用来书写数学的语言,特别是用于书写数学定义和定理。 这些定义代表什么,以及我们对这些定理的重视程度在数学范围之外,也在TLA+范围之外。 工程师们不仅需要有使用数学工具的能力,还需要有理解数学模型的能力。

扫描二维码关注公众号,回复: 8804162 查看本文章
发布了4 篇原创文章 · 获赞 1 · 访问量 5517

猜你喜欢

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