まず、正しい用語を使用します。述語が真の場合、「何も起こりません」。逆の場合と同様に、インスタンス(セットへのアトムの割り当て)は、ある条件を満たし(または満たさず)、述語をtrue(またはfalse)にします。
また、 (という属性を含める必要がある)のsig
宣言がないため、モデルは不完全です。Color
Red
信号機を含む交差点のある世界をモデル化する場合は、次のモデルを使用します。
abstract sig Color {}
one sig Red,Yellow,Green extends Color {}
sig Light {
color: Color
}
sig Junction {
lights : set Light
}
// 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
}
fun count[j:Junction, c:Color] : Int {
#{x:Light | x in j.lights and x.color=c}
}
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
上記を見て、私は#演算子を使用してセット内の原子の数をカウントしています。また、#演算子を使用してオーバーフローに遭遇しないように、整数に10のビット幅を指定しています。大きなセット。
これを実行すると、ほとんどが赤信号である少なくとも1つのジャンクションを持つインスタンスが取得さ$j
れ、ビジュアライザーでマークされます。
お役に立てれば。