未找到 3 元素反例

No 3-element counterexample found

我正在学习 Alloy 并试图让它找到两个二元关系 rs,这样 s 等于 [=11] 的传递闭包=],这样 s 不等于 r。我想我可以要求 Alloy 通过执行以下命令来做到这一点:

sig V
{
  r : V,
  s : V
}
assert F { not ( some (s-r) and s=^r ) }
check F

现在 Alloy 4.2 找不到反例,尽管一个简单的 3 元素结构显然是 r = {(V0,V1), (V1,V2)}s = r + {(V0,V2)} 的结构。

谁能解释一下这是怎么回事?

直接翻译您的要求:

// find two binary relations r and s such that 
// s equals the transitive closure of r ands is not equal to r

run {some r, s: univ -> univ | s != r and s = ^r}

这给出了预期的实例。您的规范中的错误是您的声明将关系限制为函数;应该改为

sig V {
  r: set V,
  s: set V
  }

sig V {r, s: set V}