首先,我需要说我非常新的,我必须做一些具有某些条件的信号量。
我们每个方向只会模拟一个红绿灯(第二个只重复相同的行为)。例如,在上图中,垂直光为绿色,水平光为红色。最初,两个方向都是红色的。当汽车到达时,传感器检测到它并且其相应的灯变为绿色。但是,只有当另一个方向仍为红色时才会发生这种情况;否则,它会等到另一个方向关闭。一旦任何方向为绿色,它将接下来变为橙色(有一个计时器,但我们不会模拟延迟),然后它将再次变为红色。
实际上这是我现在的代码:
mtype = { red, yellow, green };
mtype light0 = red;
mtype light1 = red;
active proctype TL0() {
do
:: if
:: light0 == red -> Ered: atomic {
light1 == red; /* wait*/
light0 = green;
}
:: light0 == green -> EY: light0 = yellow
:: light0 == yellow -> EG: light0 =red
fi;
printf("The light0 is now %e\n", light0)
od
}
active proctype TL1() {
do
:: if
:: light1 == red -> Ered: atomic {
light0 == red; /* wait*/
light1 = green;
}
:: light1 == green -> EY: light1 = yellow
:: light1 == yellow -> EG: light1 =red
fi;
printf("The light1 is now %e\n", light1)
od
}
问题是当我使用
时spin -a -f'<>(!TL0 @ Ered&&!TL1 @ Ered)' sem3.pml
检查安全性我得到一个erorr。
警告:永不声明+接受标签需要-a标志才能完全验证 警告:对于p.o.减少是有效的,从来没有声称必须 口吃不变(从未从LTL公式产生的声明是 stutter-invariant)pan:1:断言违反!((!((TL0._p == Ered))&& !((TL1._p == Ered))))(深度为0)pan:写了sem3.pml.trail
(Spin Version 6.4.8 - 2018年3月2日)警告:搜索未完成+ 部分订单减少
完整状态空间搜索:从不声明+(never_0) 断言违规+(如果在索赔范围内)接受 周期 - (未选中)无效结束状态 - (由-E标志禁用)
状态向量36字节,深度达到0,错误:1 1状态,存储 0个州,匹配 1个转换(=存储+匹配) 0个原子步骤哈希冲突:0(已解决)
但实际上我不知道这个问题:(
希望有人能帮助我
THX!
答案 0 :(得分:0)
模型很好,但我建议你手动生成验证器。
首先,在文件底部添加以下行:
.bat
然后,生成验证者:
ltl p1 { <>(!TL0@Ered && !TL1@Ered) };
ltl p2 { [] !(TL0@EY && TL1@EY) }; // perhaps you wanted (something like) this?