是否可以在签名事实中使用无点表达式?
Is it possible to use pointfree expressions in signature facts?
假设我们有以下 alloy 模型:
sig A {}
sig B {
R : A
}
fact {
R.~R in iden
}
run {}
在执行 运行 时,alloy 找到一个实例。我想我会尝试将模型的事实更改为 签名事实,如下所示:
sig A {}
sig B {
R : A
} {
R.~R in iden
}
run {}
但是当我这样做时,alloy 告诉我:
A type error has occurred:
~ can be used only with a binary relation.
Instead, its possible type(s) are:
{this/A}
在签名中 R 被视为 A 类型,而不是 B->A。
但是这个事实不属于签名,因为它是关于 R 的全局结构,而不是 R 的局部部分,b.R,对于每个 b:B。
如果你在 B 中有第二个关系,比如 S:A,你可以有签名事实,例如 R != S 转换为 b.R != b.S,对于每个b:B.
为了补充已经给出的答案,是的,这是可能的。
您可以使用@运算符。
sig A {}
sig B {
R : A
} {
@R.~@R in iden
}
run {}
假设我们有以下 alloy 模型:
sig A {}
sig B {
R : A
}
fact {
R.~R in iden
}
run {}
在执行 运行 时,alloy 找到一个实例。我想我会尝试将模型的事实更改为 签名事实,如下所示:
sig A {}
sig B {
R : A
} {
R.~R in iden
}
run {}
但是当我这样做时,alloy 告诉我:
A type error has occurred:
~ can be used only with a binary relation.
Instead, its possible type(s) are:
{this/A}
在签名中 R 被视为 A 类型,而不是 B->A。
但是这个事实不属于签名,因为它是关于 R 的全局结构,而不是 R 的局部部分,b.R,对于每个 b:B。
如果你在 B 中有第二个关系,比如 S:A,你可以有签名事实,例如 R != S 转换为 b.R != b.S,对于每个b:B.
为了补充已经给出的答案,是的,这是可能的。
您可以使用@运算符。
sig A {}
sig B {
R : A
} {
@R.~@R in iden
}
run {}