首页 文章

处理多个关系(arity~10)

提问于
浏览
0

我有一个类似于这个的sig的模型:

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

像这样的谓词,处理两个 State

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

我有一个 State sig,而是在函数和谓词中显式传递这些字段 . 这意味着拥有类似的谓词

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

我的问题是,如何轻松处理相对较大的关系,例如_1841579中的关系?例如,我试图从 util/relation 使用 dom ,但是 dom 是在二元关系上定义的,不幸的是合金似乎看到了这个

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

作为arity 10而不是2的关系;意味着忽略括号 . 因此,使用 dom 将返回类型为 M 的内容,而不是所需类型的 (M -> P -> C -> (C -> P)) .

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

1 回答

  • 0

    拥有大于3的arity关系通常是不好的做法 .

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

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

相关问题