在Alloy中需要帮助

时间:2013-12-01 13:26:23

标签: alloy

这是合金的一个例子,我发现我想用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`

1 个答案:

答案 0 :(得分:0)

在Alloy中,您只能为模型中每个sig的对象(原子)数提供范围。您在模型中明确写出的谓词,函数和断言,它们不会被Alloy Analyzer以任何方式“扩展”,并且无法量化,因此为它们提供单独的范围是没有意义的。