我怎么能断言一个数字在 TLA+ 中出现或一个列表在增长?

how can I assert that a number goes or a list grows up in TLA+?

我有一个 TLA+ 规范,我想断言列表的长度只会增长(如果它在卡顿时保持不变就很好。)

现在我有这样的东西,但我确定它不对:

NoWorkIsLost == Len(samples) = Len(samples) ~> Len(samples) = Len(samples) + 1

我什至不确定要在这里搜索什么,我确定我遗漏了一些非常明显的东西!

这取决于你所说的 "the list only ever grows in length" 是什么意思。最简单的方法是写

Op == [][Len(samples') > Len(samples)]_Len(samples)

但这就是说如果长度改变,长度必须增加。这仍然允许您在不更改列表的情况下改变列表!如果你改为写

Op == [][Len(samples') > Len(samples)]_samples

那你是说如果samples改变了,它的长度也一定会增加。但这允许您在一个动作中弹出一个元素并压入两个元素。您可能想表达旧序列是新序列的 prefix。你可以用

Op == [][SubSeq(samples', 1, Len(samples)) = samples]_samples