【发布时间】:2014-01-30 08:06:18
【问题描述】:
我想知道在谓词中使用的约束语法是否与在断言中使用的不同。
约束all disj x1,x2:X | x1 =x2 在执行时会给出不同的结果 谓词和断言。
例如,假设以下模型:
sig A {}
sig B {x: one A}
assert S1
{all x1,x2: x | x1 = x2}
检查 S1 是否有 2 - 反例作为 x1 和 x2 的非等价实例
assert S2
{! (all x1,x2: x | x1 = x2)}
检查 S2 是否为 2——高阶量化误差
pred P1
{(all x1,x2: x | x1 = x2)}
run P1 for 2 -- higher-order quantification error
pred P2
{! (all x1,x2: x | x1 = x2)}
run p2 for 2 -- 生成 x1 和 x2 的非等效实例
为什么有些约束是可以量化的,而它们的否定却不是,反之亦然!
谢谢
阿卜杜拉·雷汉
【问题讨论】:
标签: alloy