如何表达这种约束:在一个以上的乐队中有一个歌手

时间:2016-10-14 18:12:00

标签: alloy

我想表达这种约束:在一个以上乐队中有一位歌手。

以下声明Band和Singer。关系“乐队”将歌手映射到乐队。

sig Band {}

sig Singer {
  band: Band
}

这似乎表达了期望的约束:

some s: Singer | some s.band

经过反思,我认为这不正确。它说(我相信)在 一个或多个 乐队中有一个歌手。 (我说错了吗?)

我希望约束说明 多个 频段中有一个歌手。

我认为这应该表达所需的约束:

some s: Singer | #s.band > 1

但是Alloy工具说没有实例可以生成。为什么?为什么不正确?表达所需约束的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

Alloy Analyzer表示,由于声明了场频带的方式,因此无法生成任何实例。

默认情况下,字段声明中没有multiplicity关键字意味着多重性正好一个。 在你给出的Alloy模型中,乐队领域因此将给定的歌手与一个乐队联系起来,因此排除了歌手在多个乐队中演唱的任何情况。

将多重性关键字 some 添加到字段声明中应该可以解决问题。

sig Band {}

sig Singer {
  band: some Band
}

你上次提出的约束some s: Singer | #s.band > 1确实强制要求至少有一位签名者应该在一个以上的乐队中唱歌。