我有签名
abstract sig B{}
sig B1 extends B{}
sig B2 extends B{}
sig A{
rel: B->C
}
如何将rel的B限制为B1类型?我尝试了一个事实rel :> (B1 -> C)
,但我收到了类型错误。
感谢。
答案 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