我想知道如果在謂詞中使用約束語法,而不是在斷言中使用約束語法。約束語法謂詞和聲明
約束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 --generates non equivalent instances of x1 and x2
爲什麼有些約束是可以量化的,而它們的否定不是,反之亦然!
感謝
阿卜杜拉Rayhan的