使用NuSMV实现过河问题
一、形式化验证工具的安装
本次实验所需要的工具http://nusmv.fbk.eu/distrib/NuSMV-2.6.0-win64.tar.gz
解压后,即可得到具有如下目录的文件夹:
建议解压到自己的用户文件夹下(例如我解压到)C:\Users\xiaoma\NuSMV-2.6.0(方便起见,将NuSMV-2.6.0名字修改成简单的nusmv2601)
新建一个txt文件,复制以下代码到test.txt,然后重命名为test.smv,将test.smv移动到bin目录下
MODULE main
VAR
ferrymen:boolean;
goat:boolean;
wolf:boolean;
cabbage:boolean;
ship:{goat_man,wolf_man,cabbage_man,empty,man};
--ship 表示船上装着是什么
ASSIGN
init(ferrymen):=FALSE; --人在左边
init(goat):=FALSE; --羊在左边
init(wolf):=FALSE; --狼在左边
init(cabbage):=FALSE; --白菜在左边
init(ship):=empty; --船上为空
--初始化的时候,全部在河岸的左边FALSE
ASSIGN
next(ship):=
case
ferrymen=TRUE&ferrymen=goat & goat=wolf & goat=cabbage :empty; --全