我是NuSMV的新手,并尝试对这个简单的回合制游戏进行建模。一堆中有10块砖,每个玩家每回合可以拿1-3块砖,谁拿走最后一块砖就赢得比赛。假设玩家A先去,这是我的尝试。我想表达的是,“最终有一个胜利者”,但是我的代码不起作用,因为它不阻止玩家在砖块= 0之后采取砖块,所以最终玩家a,b都会成为赢家。NuSMV模型检查:创建一个简单的游戏模型
这里是我的代码:
MODULE main
VAR
bricks : 0..10;
i : 1..3;
j : 1..3;
turn : boolean;
winner : {none, a, b};
ASSIGN
init(winner) := none;
init(bricks) := 10;
init(turn) := TRUE;
next(turn) := case
turn : FALSE;
!turn: TRUE;
esac;
next(bricks) :=
case
bricks - j >= 0 : bricks - j;
bricks - j < 0 : 0;
TRUE:bricks;
esac;
next(winner) := case
turn=TRUE & bricks = 0: a;
turn=FALSE & bricks = 0: b;
TRUE:winner;
esac;
SPEC AF (winner = a | winner = b)
,这里是我的SPEC AF(冠军= A | =得主无)输出到说明我的观点。
i = 1
j = 1
turn = TRUE
winner = none
State: 1.2 <-
bricks = 9
j = 3
turn = FALSE
State: 1.3 <-
bricks = 6
turn = TRUE
State: 1.4 <-
bricks = 3
turn = FALSE
State: 1.5 <-
bricks = 0
j = 1
turn = TRUE
State: 1.6 <-
turn = FALSE
winner = a
State: 1.7 <-
turn = TRUE
winner = b
正如你所看到的,模型仍然提供了一个反例的例子,其中玩家b已经赢得比赛后赢得比赛。