[英]wrong sig object get referenced to while executing state in Alloy
我是Alloy的新手。 我正在尝试使用Alloy正式化系统。 在这里,我想根据事件执行某些操作。 为此,我有一个我想要使用枚举事件跟踪的事件列表。 而且我正在使用Alloy的订购功能来完成整个州。 在每个州,我正在采取混合物对象并运行操作。
我目前面临的问题是 - 在我的系统中,我有两个sig对象 - ClassA和ClassB。 执行合金代码后,我正在生成流程图。 不幸的是,我注意到我的ClassB引用了Mixture对象的ClassA。 我附上图表
我也在这里附上我的完整代码。 有人可以帮我调试这个问题吗? 我试图强加不同的谓词和逻辑,但它们都没有奏效。
open util/ordering[State]
abstract sig Base{
name: String,
value : Int
}{
value >= 0
}
sig ClassA extends Base{
}{
name = "Class A"
}
sig ClassB extends Base{
}{
name = "Class B"
}
enum Event {EVENT1, EVENT2}
sig State{
mixture: Mixture
}
sig Mixture{
classA: Base,
classB: Base
} {
classA != classB
}
fact {
all s: State, s': s.next{
s.mixture ! in s'.*next.mixture
operation [s.mixture]
}
}
pred operation [mixture: Mixture]{
all ev: Event| ev = EVENT1 => {
mixture.classA.name = "Class A" => {
mixture.classA.value = 1
}
}
}
run random {} for 3
你有
sig Mixture{
classA: Base,
classB: Base
}
在图中, 关系名为classA
和classB
。 由于每个都可以指向任意Base
,因此没有什么能阻止classA
指向ClassB
实例。 你可能想要这样的东西
sig Mixture {
, classA: ClassA
, classB: ClassB
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.