是否可以在签名事实中使用无点表达式?

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 {}