Properties NuSMV::Finally属性的错误反例
我想用nuSMV为对称分布式四处理器三着色协议建模。我的规范——我确信它的正确性——必须是正确的,但当我使用关键字“F”作为“Finally”属性时,nuSMV在第一步给了我一个反例,并停止处理下一个状态。 我应该怎么做才能修复它并最终检查LTL中的属性 这是我的SMV代码:Properties NuSMV::Finally属性的错误反例,properties,model-checking,nusmv,Properties,Model Checking,Nusmv,我想用nuSMV为对称分布式四处理器三着色协议建模。我的规范——我确信它的正确性——必须是正确的,但当我使用关键字“F”作为“Finally”属性时,nuSMV在第一步给了我一个反例,并停止处理下一个状态。 我应该怎么做才能修复它并最终检查LTL中的属性 这是我的SMV代码: MODULE proc(former_proc ,further_proc ) VAR self_proc : {zero, on, two}; ASSIGN init(self_proc) :={z
MODULE proc(former_proc ,further_proc )
VAR
self_proc : {zero, on, two};
ASSIGN
init(self_proc) :={zero, on, two};
next(self_proc) :=
case
(self_proc = two) & (further_proc = two | further_proc = zero) & (former_proc = two) : on;
(self_proc = two) & (further_proc = two) & (former_proc = zero) : zero;
(self_proc = on) & (further_proc = two | further_proc = on) & (former_proc = on) : zero;
(self_proc = on | self_proc = zero) & (further_proc = on) & (former_proc = zero) : two;
(self_proc = on) & (further_proc = zero) & (former_proc = on) : two;
(self_proc = zero) & (further_proc = zero) & (former_proc = on | former_proc = zero) : two;
TRUE : self_proc;
esac;
MODULE main
VAR
p1 : process proc( p4.self_proc ,p2.self_proc );
p2 : process proc( p1.self_proc ,p3.self_proc );
p3 : process proc( p2.self_proc ,p4.self_proc );
p4 : process proc( p3.self_proc ,p1.self_proc );
FAIRNESS running
LTLSPEC F((p1.self_proc != p2.self_proc) & (p1.self_proc != p4.self_proc) & (p2.self_proc != p3.self_proc) & (p3.self_proc != p4.self_proc))
这是我在nuSMV的反例:
-- specification F (((p1.self_proc != p2.self_proc & p1.self_proc != p4.self_proc) & p2.self_proc != p3.self_proc) & p3.self_proc != p4.self_proc) is false
-- as demonstrated by the following execution sequence
Trace Description: LTL Counterexample
Trace Type: Counterexample
-- Loop starts here
-> State: 1.1 <-
p1.self_proc = on
p2.self_proc = on
p3.self_proc = zero
p4.self_proc = zero
-> Input: 1.2 <-
_process_selector_ = main
running = TRUE
p4.running = FALSE
p3.running = FALSE
p2.running = FALSE
p1.running = FALSE
-- Loop starts here
-> State: 1.2 <-
-> Input: 1.3 <-
-> State: 1.3 <-
——规范F((p1.self\u proc!=p2.self\u proc&p1.self\u proc!=p4.self\u proc)&p2.self\u proc!=p3.self\u proc)&p3.self\u proc!=p4.self\u proc)为false
--如下面的执行顺序所示
跟踪描述:LTL反例
跟踪类型:反例
--循环从这里开始
->状态:1.1输入:1.2状态:1.2输入:1.3状态:1.3我搜索了更多,发现并意识到我以错误的方式使用了“公平”关键字。我应该在proc模块中使用它,而不是在主模块中使用它。谢谢。我搜索了更多,发现并意识到我用错了“公平”关键字。我应该在proc模块中使用它,而不是在主模块中使用它。非常感谢。