簡體   English   中英

在Alloy中執行狀態時引用錯誤的sig對象

[英]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
}

在圖中, 關系名為classAclassB 由於每個都可以指向任意Base ,因此沒有什么能阻止classA指向ClassB實例。 你可能想要這樣的東西

sig Mixture {
    , classA: ClassA
    , classB: ClassB
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM