如何在TLA +中执行详尽的状态检查?

时间:2019-02-07 10:44:01

标签: tla+

是否可以检查模型中的每个合法状态? 如果可能的话,该属性应如何编写?

请考虑下面的模块,其中调制了24小时时钟。 我能够检查hour是否处于非法状态,即其介于0到23之间。 但是,如果我写了一个错误的Next谓词,例如hour' = (hour + 1) % 23,并非达到所有状态,但属性无法捕获此错误。

----------------------------- MODULE Clock -----------------------------
EXTENDS Naturals
VARIABLE hour

Init ==
    hour \in 0..23

Next == 
    hour' = (hour + 1) % 24

Spec == 
    /\ Init
    /\ [][Next]_hour

\* Properties
hourMinBound == [](hour >= 0)
hourMaxBound == [](hour <= 23)
=============================================================================

1 个答案:

答案 0 :(得分:2)

尝试

ReachesAllStates == \A h \in 0..23: <>(hour = h)

这将检查它至少到达每个状态一次。要检查它是否连续到达每个状态,您需要

KeepsReachingAllStates == \A h \in 0..23: []<>(hour = h)