如何在合金中分配变量?
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 更大的值时,我想检查变量的反例。但我不确定如何在合金中分配变量。我想出的唯一一件事是跟随,但它不起作用-
pred assignValue[a:ClassA]{
a.variable_2 = Int[4]
}
但是,我相信它只会检查与 4 的相等性并返回为假。它与任务无关。所以我的问题是我应该如何产生反例a.variable_2>b.variable_2
以及如何在合金中使用 Int 枚举?喜欢-分配一个.variable Enum MetricValue {1,2,3,4,5}
1。
编辑 我仍然无法找到反例,即使当我切换 ca 和 cb 的 variable_2 的值时,我可以通过手动检查找到一个。
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