我试图在TLA +中指定一组存储单元,每个存储单元包含256个32位整数。我想指定在初始化时将所有内存清零。我认为正确的方法类似于嵌套的forall语句,但是我不知道如何在TLA +中表达它。
---------------------------- MODULE combinators ----------------------------
EXTENDS Integers, FiniteSets, Sequences
CONSTANTS Keys, Values
VARIABLES Cells
TypeOK ==
/\ Channels = 0 .. 255
/\ Values = -2147483648 .. 2147483647
/\ Cells \in Seq([Keys -> Values])
Init == ???
答案 0 :(得分:1)
几件事。
如果Values
是常量,请在ASSUME
中而不是在不变式中指定其域。 CONSTANT
表示仲裁输入;如果您要使用实际常量,则只需定义Values == -2147483648 .. 2147483647
。
Keys
甚至可以是无限的。您必须始终为每个常数(甚至ASSUME
)指定一个IsFiniteSet
。
您没有声明Channels
,但是,像Values
一样,它应该是一个简单的定义,而不是不变的。
您没有说开始时有多少Cells
。 TypeOK
已定义,Cells
的数量可以在每个步骤中更改,甚至可以为空。
但是假设您需要N个单元格来容纳N个,所以:
Cells = [c ∈ 1..N ↦ [k ∈ Keys ↦ 0]]
但是您写了“ domain”,这里的0在范围内,所以我不确定我是否理解您的问题。您还提到了渠道,所以也许您的意思是:
Cells = [c ∈ 1..N ↦ [k ∈ Channels ↦ 0]]