通过例子学TLA+(六)--标准模块

标准模块

使用标准模块有两个原因。首先,当规范使用我们已经熟悉的基本操作符时,它们更容易阅读。其次,工具如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中的元素
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值