标准模块
使用标准模块有两个原因。首先,当规范使用我们已经熟悉的基本操作符时,它们更容易阅读。其次,工具如TLC可以内置这些标准操作符。目前的内置模块主要有:数字相关的模块Naturals,Integers,Reals,以及Sequences,FiniteSets,Bags
数字模块
常用的整数和运算符集定义在Naturals、Integers和Reals三个模块中。
Naturals Module 定义了以下操作符
加+ 减- 乘* 除/ 取余% 小于< 大于> 小于等于<= 大于等于>= 区间.. 自然数Nat 取幂^
Integers Module扩展了 Naturals Module,并定义了包含负数的整数Int和负号。
Reals Module 则是扩展了 Integers Module 并包含了实数。Reals Module 中定义了 Infifinity 用来表示无穷符号。
∀ r ∈ Real : −Infinity < r < Infinity − (−Infinity) = Infinity
Sequences
Sequences Module在之前的例子中已经介绍过了,这里增加一些介绍
SubSeq(s, m, n) 包含了序列s中第m到第n个元素的子序列(m < n)
如果m > n 则返回空序列,
如果m < 1 或者 n > Len(s) 则结果是未定义的
SelectSeq(s, Test) 由序列s中的元素组成的子序列,并且这些元素都能够满足Test。
例如:SelectData(s) == LET Greater(n) == N > 5
IN SelectSeq(s,Greater)
上述意思为选择序列s中大于5的元素
当s为<<1,3,5,7,9>>时,SelectData(s) 为<<7,9>>
FiniteSets
FiniteSets是有限集合,新定义了两个操作
IsFiniteSet(S) 当且仅当集合S为有限集返回TRUE
Cardinality(S) 如果S是有限集合,返回S中的元素个数。空集合返回0。
Bags
一个bag也可以称作multiset,可以包含重复元素的Set。
IsABag(b) 如果b是bag,返回TRUE
BagToSet(b) 将bag b中的元素转换为set
SetToBag(s) 将set s转换为bag
BagIn(e,b) 元素e在bag b中,返回TRUE
EmptyBag 没有元素的bag,即空bag
CopiesIn(e,b) 返回元素e在bag b中的数量,如果e不在b中,返回0
b1 (+) b2 合并b1,b2
b1 (-) b2 从b1中删除存于b2中的元素