本节会详细描述在上文中概述的TLC的两个方面:配置文件的语法和TLC中数值的精确定义。
14.7.1 The Grammar of the Configuration File(配置文件的语法)
在下一页图14.6中,TLA + ConfigFileGrammar模块描述了TLC配置文件的语法。更准确地说,是定义了ConfigFileGrammar模块的语句集合 ConfigGrammar.File描述了配置文件(不带注释)的正确语法。
ConfigFileGrammar模块扩展了BNFGrammars模块(见11.1.4节,第179页)。下面是配置文件的其他一些限制,这些限制未在ConfigFileGrammar模块中提及:
- 最多只可以有一个INIT和一个NEXT语句;
- 最多只能有一个SPECIFICATION语句,但前提是没有INIT或NEXT语句。
(有关何时必须出现这些语句的条件,请参阅第14.3.1节的第243页);- 最多可以有一个VIEW语句;
- 最多一个SYMMETRY语句;
- 允许其他语句的多个实例。 例如,如下这两个语句
指定TLC将检查三个不变式Inv1,Inv2和Inv3,等价于下面语句
14.7.2 Comparable TLC Values(数值比较)
第14.2.1节(第230页)介绍了TLC值。该描述不完整,因为它没有确切定义何时值可比较。准确的定义是,当且仅当以下规则暗示它们是两个时,两个TLC值才是可比较的:
- 两个原始值是可以比较的 当且仅当它们具有相同的值类型,此规则意味着"abc"和"123"是可比较的,但"abc"和123不是可比较的;
- 模型值可与任何值比较(它仅等于其自身);
- 两个集合可以比较,当且仅当:两组元素数量不同,或者元素数量相同,并且一组中的所有元素与另一组中的所有元素具有可比性。该规则意味着{1}和{" a"," b"}是可比较的,而{1,2}和{2,3}是可比较的。但是,{1,2}和{“a”," b"}不可比较。
- 两个函数f和g可以比较,当且仅当(i)它们的定义域是可比;(ii)如果它们的定义域是相等的,则f[x]和g[x]对于它们域中的每个元素x都是可比较的。该规则意味着<1,2>和<“a”," b"," c">是可比较的,并且<1," a">和<2,“bc”>是可比较的。但是,<1、2>和<" a"," b">是不可比的。