处理多重关系(约10个)

时间:2018-08-24 04:57:08

标签: alloy

我有一个模型,其信号标记与此相似:

sig State {
  ps: set P,
  cs: set C,
  o: set C -> set P,
  m: set M
}

这样处理两个State的谓词:

pred my_pred [s, s': State] {
  ...
}

我正在尝试创建模型的参数化版本,其中没有State信号,而是我在函数和谓词中显式传递了这些字段。那将意味着谓词看起来像

pred my_pred [(M -> P -> C -> (C -> P)) ->
              (M -> P -> C -> (C -> P))] {
  ...
}

我的问题是,一个人如何轻松处理诸如my_pred之类的比较大的关系?例如,我尝试使用dom中的util/relation,但是dom是通过二进制关系定义的,不幸的是,合金似乎看到了这一点

  (M -> P -> C -> (C -> P))
  ->
  (M -> P -> C -> (C -> P))

关系为关系10,而不是关系2;表示括号将被忽略。因此,使用dom会返回类型M的东西,而不是所需类型的(M -> P -> C -> (C -> P))

在相关说明中,我想知道是否/如何在这种关系上使用传递闭包运算符。

1 个答案:

答案 0 :(得分:0)

通常,将友善关系设置为大于3。

为什么不简单地声明谓词如下:

pred my_pred [m,m':M , ps,ps':P , cs,cs':C , o,o':(C -> P)] {
  ...
}