Я новичок в Alloy. Я пытаюсь формализовать систему с использованием Alloy. Здесь я хочу выполнить определенные операции на основе событий. Для этого у меня есть список событий, которые я хочу отслеживать, используя enum Event. И я прохожу через весь штат, используя функцию заказа Alloy. В каждом состоянии я беру объект смеси и запускаю операцию.
Проблема, с которой я сталкиваюсь в настоящее время: - В моей системе у меня есть два объекта sig - ClassA и ClassB. После выполнения кода сплава я создаю блок-схему. К сожалению, я заметил, что мой ClassB ссылается на ClassA объекта Mixture. Я прилагаю диаграмму
Я также прилагаю свой полный код здесь. Может кто-нибудь помочь мне отладить проблему, пожалуйста? Я пытался навязать разные предикаты и логику, но ни один из них не сработал.
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