假设我们具有以下合金模型:
sig A {}
sig B {
R : A
}
fact {
R.~R in iden
}
run {}
在执行运行时,Alloy找到一个实例。我以为我会尝试将模型的事实更改为签名事实,如下所示:
sig A {}
sig B {
R : A
} {
R.~R in iden
}
run {}
但是当我这样做时,合金告诉我:
A type error has occurred:
~ can be used only with a binary relation.
Instead, its possible type(s) are:
{this/A}
答案 0 :(得分:3)
要补充已经给出的答案,是可以的。
您可以使用@运算符。
sig A {}
sig B {
R : A
} {
@R.~@R in iden
}
run {}
答案 1 :(得分:1)
在签名R内部将其视为A类型,而不是B-> A类型。
但是这个事实不属于签名,因为它涉及R的全局结构,而不是每个b:B的R的局部片段b.R。
如果您在B中有第二个关系,例如S:A,则对于每个b:B,您都可能具有签名事实,例如R!= S转换为b.R!= b.S。