How TLA+ Evaluation Next Action
TLC是如何计算状态的
当TLC计算一个invariant,直接计算值,返回TRUE/FALSE 当TLC计算Init和Next,返回一个状态集合(这个集合被加入到sq中):
- Init: 所有可能的初始状态;
- Next:所有可能的后继状态;
TLC如何计算Next
- 状态:是对变量的赋值;
- TLC计算一个状态s的后继状态:
- 对所有unprimed变量进行赋值;
- 对所有的primed变量赋值为null;
- 开始计算next Action;
- TLC在计算Next Action和普通的表达式是不同的
第一个不同点
- TLC对‘或’表达式并不是从左到右计算:
- 当计算 A1 / … / An,首先拆分成n个子表达式;
- 当计算E x in S : p,对于S中的每个元素,拆分成若干个子表达式;
- P => Q,等价于(非P) / Q
-
举个例子
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> (A => B) / ( C / (E i in S : D(i) / E))