浏览此处主要显示了操作规范的简单示例,您可以在其中使用 引用下一个状态'
,如下所示:
UponV1(self) ==
/\ pc[self] = "V1"
/\ pc' = [pc EXCEPT ![self] = "AC"]
/\ sent' = sent \cup { <<self, "ECHO">> }
/\ nCrashed' = nCrashed
/\ Corr' = Corr
例如,/\ nCrashed' = nCrashed
是一个逻辑语句“...AND next(nCrashed) == this(nCrashed)`。所以基本上,上述函数将一些变量设置为“处于下一个状态”。但这一切基本上都是一步完成的(至少在逻辑上)。
我想知道的是如何定义在多个步骤中发生的事情。说 10 步。
UpdateWithTenSteps(self) ==
/\ foo' = foo + 1
/\ bar'' = foo' + 1
/\ baz''' = bar'' + 1
/\ ...
....
所以“在第三个状态之前,baz 会被设置为 bar 在第二个状态加一”。类似的东西。但这没有任何意义。在命令式语言中,您只需执行以下操作:
function updateInTenSteps() {
incFoo()
incBar()
incBaz()
}
但这是有道理的,因为每个函数调用都发生在前一个函数调用之后。但我不知道如何在 TLA+ 中表示这一点。
想知道你应该如何完成在动作的时间逻辑+中需要不止一步的事情。另一个例子是while循环。