我有一个TLA +规范,我想断言一个列表的长度只会不断增加(如果在停顿时保持不变,那很好。)
现在我有类似的东西,但是我确定这是不正确的:
NoWorkIsLost == Len(samples) = Len(samples) ~> Len(samples) = Len(samples) + 1
我什至不知道要在这里搜索什么,我肯定我错过了一些非常明显的东西!
答案 0 :(得分:2)
这取决于您的意思,“列表只会越来越长”。最简单的方法是编写
Op == [][Len(samples') > Len(samples)]_Len(samples)
但这就是说如果长度改变,则长度必须增加。这仍然允许您更改列表而不更改它!如果您改为写
Op == [][Len(samples') > Len(samples)]_samples
那么,您说的是samples
更改时,它的长度也必须增加。但这使您可以弹出一个元素并在单个操作中推送两个元素。您可能想表达旧序列是新序列的 prefix 。您可以使用
Op == [][SubSeq(samples', 1, Len(samples)) = samples]_samples