TLA +:指定功能序列中每个元素的范围为{0}

时间:2019-11-28 20:23:29

标签: tla+

我试图在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 == ???

1 个答案:

答案 0 :(得分:1)

几件事。

  1. 如果Values是常量,请在ASSUME中而不是在不变式中指定其域。 CONSTANT表示仲裁输入;如果您要使用实际常量,则只需定义Values == -2147483648 .. 2147483647

  2. Keys甚至可以是无限的。您必须始终为每个常数(甚至ASSUME)指定一个IsFiniteSet

  3. 您没有声明Channels,但是,像Values一样,它应该是一个简单的定义,而不是不变的。

  4. 您没有说开始时有多少CellsTypeOK已定义,Cells的数量可以在每个步骤中更改,甚至可以为空。

但是假设您需要N个单元格来容纳N个,所以:

Cells = [c ∈ 1..N ↦ [k ∈ Keys ↦ 0]]

但是您写了“ domain”,这里的0在范围内,所以我不确定我是否理解您的问题。您还提到了渠道,所以也许您的意思是:

Cells = [c ∈ 1..N ↦ [k ∈ Channels ↦ 0]]