In a very general case, there is no way to verify that for each state at least one behavior ultimately achieves this. This is due to the fact that TLA + is based on linear time logic , which does not have a means of expressing a property that contains several different types of behavior.
Depending on the specific case, sometimes you can earn. For example, we could write
Left ==
/\ state = START
/\ state' = LEFT
Right ==
/\ state = START
/\ state' = RIGHT
Next ==
\/ /\ state = START
/\ \/ Left
\/ Right
\/ /\ state \in {LEFT, RIGHT}
/\ state' = START
Then you can check for two branches with
CheckEventualStates ==
/\ <>(ENABLED Left)
/\ <>(ENABLED Right)
source
share