合金中n元关系的范围限制

时间:2014-06-26 09:43:06

标签: alloy

我有签名

abstract sig B{}

sig B1 extends B{}

sig B2 extends B{}

sig A{
 rel: B->C
}

如何将rel的B限制为B1类型?我尝试了一个事实rel :> (B1 -> C),但我收到了类型错误。

感谢。

2 个答案:

答案 0 :(得分:3)

我会表达如下:

签名事实:

sig A{
 rel: B->C
}{
 rel.C in B1
}

或独立的事实:

fact {
 rel[A].C in B1
}

答案 1 :(得分:3)

您只能限制关系的域(即最左侧的集合)或范围(即最右侧的集合)。限制不会约束关系,而是从现有关系中建立新关系。

D <: Rel创建了一个新关系,其中Rel的域仅限于D

Rel :> R创建一个新关系,其中Rel的范围仅限于R

要在示例中约束rel的域,通常会使用beiLoïc给出的语句。从理论上讲,你也可以使用限制,但这不太习惯:

(B1 <: rel) = rel