Alloy中4-ary关系的多重约束和更多

时间:2015-07-29 21:03:54

标签: alloy

假设我定义了以下签名:

sig B,C,D{}

现在我写的时候

sig A{
    r:  B one ->  lone  C
}

这意味着{all a:A | A.r in B one -> lone C};也就是说,对于每个a:A,A.r是一个二元关系,其中B侧的多重 1 和C侧的 lone

现在假设我定义:

sig A{
    r:  B one ->  lone  C some -> lone D
}

可以说它意味着{all a:A | A.r in B one -> lone C some -> lone D};但这究竟意味着什么?

我查看了这个答案here,但它似乎没有解决上述问题。至少它仍然让我感到困惑如何解释?

2 个答案:

答案 0 :(得分:0)

  

表示all a:A | a.r in B one -> lone C some -> lone D;但这究竟意味着什么?

我不是合金专家,但根据我的理解,这意味着:如果r非空,则其形式遵循多重约束,如下所示:

assert implications {
  some r implies all a: A |
   (all c: C | one a.r.D.c)  // exactly one B for every C
   && (all b: B | lone a.r[b])  // at most one C for every B
   && (all d: D | some a.r.d)  // some C for every D
   && (all c: C | lone a.r[B][c]) // at most one D for every C
}

check implications for 6

答案 1 :(得分:0)

一旦考虑约束以及->的关联性如何适用于该关系,就会变得更加明确。 在这个特殊情况下

  sig A { r:  B one -> lone C some -> lone D }

相当于写作

  sig A { r:  B one -> lone (C some -> lone D) }

表示有一个B与最多一个关系相关,其形式为(C some -> lone D)

可以使用

检查此等效性
equivalence1: check {
    (all a: A | a.r in B one -> lone C some -> lone D) implies
    (all a: A | a.r in B one -> lone (C some -> lone D))
}

应该成立,例如

equivalence2: check {
    (all a: A | a.r in B one -> lone C some -> lone D) implies
    (all a: A | a.r in (B one -> lone C) some -> lone D)
}

不应该坚持。