Я хочу знать, отличается ли синтаксис ограничений при использовании в предикате, чем в утверждении.
Ограничение все 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
почему некоторые ограничения поддаются количественной оценке, а их отрицание — нет, и наоборот!
спасибо
Абдалла Райхан