TLC是如何计算状态的

当TLC计算一个invariant,直接计算值,返回TRUE/FALSE 当TLC计算Init和Next,返回一个状态集合(这个集合被加入到sq中):

  1. Init: 所有可能的初始状态;
  2. Next:所有可能的后继状态;

TLC如何计算Next

  • 状态:是对变量的赋值;
  • TLC计算一个状态s的后继状态:
    1. 对所有unprimed变量进行赋值;
    2. 对所有的primed变量赋值为null;
    3. 开始计算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 =&gt; B) / ( C / (E i in S : D(i) / E))