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

时间:2019-09-23 09:08:51

标签: 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 {}

但是当我这样做时,合金告诉我:

A type error has occurred:
~ can be used only with a binary relation.
Instead, its possible type(s) are:
{this/A}

2 个答案:

答案 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。