这是合金的一个例子,我发现我想用3个谓词,3个事实,3个对象和3个断言来制作它,有人可以帮助我吗?我是Alloy的新手,需要立即帮助。
abstract sig Color {}
one sig Red,Yellow,Green extends Color {}
sig Light {
color: Color
}
sig Junction {
lights : set Light
}
fun count[j:Junction, c:Color] : Int {
#{x:Light | x in j.lights and x.color=c}
}
// This is just for realism, make sure each light belongs to exactly one junction
fact {
Light = Junction.lights
no x,y:Junction | x!=y and some x.lights & y.lights
Light = Junction.lights
no y,x:Junction | y!=x and some y.lights & x.lights
}
pred mostly[j:Junction, c:Color] {
no cc:Color | cc!=c and count[j,cc]>=count[j,c]
}
run{
some j:Junction | mostly[j,Red]
} for 10 Light, 2 Junction, 10 int`
答案 0 :(得分:0)
在Alloy中,您只能为模型中每个sig的对象(原子)数提供范围。您在模型中明确写出的谓词,函数和断言,它们不会被Alloy Analyzer以任何方式“扩展”,并且无法量化,因此为它们提供单独的范围是没有意义的。