未找到 3 元素反例
No 3-element counterexample found
我正在学习 Alloy 并试图让它找到两个二元关系 r
和 s
,这样 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}
我正在学习 Alloy 并试图让它找到两个二元关系 r
和 s
,这样 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}