specifications - TLA+错误: The invariant Invariants is not a state predicate

标签 specifications formal-methods tla+ tlc

在我的规范中,我试图检查序列中的更改是否为 -1、0 或 1。

我将这个不变量描述如下:


PVariance == Len(waitingRoomP') - Len(waitingRoomP) \in {-1,0,1}
CVariance == Len(waitingRoomC') - Len(waitingRoomC) \in {-1,0,1}

Invariants ==
    /\ TypeInv
    /\ \/ PVariance 
       \/ CVariance

TLC 模型检查器输出以下内容:

The invariant Invariants is not a state predicate (one with no primes or temporal operators).
Note that a bug can cause TLC to incorrectly report this error.
If you believe your TLA+ or PlusCal specification to be correct,
please check if this bug described in LevelNode.java starting at line 590ff affects you.

最佳答案

waitingRoomP'waitingRoomP 在下一个状态中的值,这意味着 PVariance 现在是一个操作。不变量不能是 Action ,它们只能是“纯”运算符。

您可以通过编写 [][PVariance]_waitingRoomPPVariance 作为操作属性进行检查。这需要作为工具箱中的时间属性进行检查,而不是不变量。

关于specifications - TLA+错误: The invariant Invariants is not a state predicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66464077/

相关文章:

tla+ - 在 TLA+ 中比较序列和集合的元素

formal-languages - 如何使用运算符获取 TLA+/PlusCal 中的序列元素之和?

C 格式说明符与数据类型不匹配

css - CSS 框定位的形式语义

formal-methods - 形式方法和企业

architecture - 如何学习正式的自上而下的软件架构方法?

tla+ - 如何在TLA+中以这种方式获得一套?

ruby - MinitTest Spec 对第二个参数的混淆

javascript - 为什么不将 "9007199254740991"视为整数索引?

java - Future.get(long, TimeUnit) 的负超时安全吗?