Как назначить переменную в Alloy?
Sig ClassA{
variable_1: String,
variable_2: Int
}
Sig ClassB{
variable_1: String,
variable_2: Int
}
pred isLess[a:ClassA,b:ClassB]{
a.variable_2 < b.variable_2
}
assert integrityTest{
all a:ClassA,b:ClassB| isLess[a,b]
}
Теперь я хочу проверить контрпример переменных, когда я присваиваю большее значение в a.variable_2, чем b.variable_2.Но я не уверен, как назначить переменную в Alloy.Единственное, что я придумал, это следующее, но оно не работает -
pred assignValue[a:ClassA]{
a.variable_2 = Int[4]
}
Однако я верю, что оно проверит равенство только с 4 и вернет false.Это не имеет ничего общего с заданием.Итак, мой вопрос: как мне создать контрпример, когда a.variable_2>b.variable_2
И как я могу использовать Enum of Int в сплаве?Как- Enum MetricValue {1,2,3,4,5}
назначить переменную 1.
РЕДАКТИРОВАТЬ Мне все еще не удается найти контрпример, хотя я могу найти его, вручную проверяя, когда я переключаю значение переменной_2из ca и cb.
sig ClassA{
variable_1: String,
variable_2 = Int
}
sig CA extends ClassA{}{
variable_2 = 1
}
sig ClassB{
variable_1: String,
variable_2 = Int
}
sig CB extends ClassB{}{
variable_2 = 4
}
pred checkAllConstraint [ca: ClassA, cb: ClassB] {
ca.variable_2 > cb.variable_2 }
assert checkAll{
all ca: ClassA, cb: ClassB | checkAllConstraint[ca,cb]
}
check checkAll for 15