[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
TLC Deadlock on simple spec.
Hi all! I'm learning TLA and trying to write a small spec that I can run TLC on. The gist of this spec is that a game board is a sequence of moves (as in: each is a state change of the board).
Any thoughts on what's off in it would be helpful.
Thanks,
Justin
Below is the the tla, cfg, and tlc ouput.
The tlc output is:
TLC2 Version 2.05 of 24 October 2012
Running in Model-Checking mode.
Parsing file Game.tla
Parsing file /home/justinscott/tla/tla2sany/StandardModules/Sequences.tla
Parsing file /home/justinscott/tla/tla2sany/StandardModules/Naturals.tla
Semantic processing of module Naturals
Semantic processing of module Sequences
Semantic processing of module Game
Starting... (2016-04-12 10:57:29)
Computing initial states...
Finished computing initial states: 1 distinct state generated.
Warning: The variable board was changed while it is specified as UNCHANGED at
line 22, col 25 to line 22, col 29 of module Game
(Use the -nowarning option to disable this warning.)
Error: Deadlock reached.
Error: The behavior up to this point is:
State 1: <Initial predicate>
board = <<m0>>
The coverage statistics at 2016-04-12 10:57:34
line 20, col 21 to line 20, col 48 of module Game: 0
line 22, col 25 to line 22, col 29 of module Game: 0
End of statistics.
1 states generated, 1 distinct states found, 0 states left on queue.
The depth of the complete state graph search is 1.
Finished. (2016-04-12 10:57:35)
Game.cfg:
SPECIFICATION Spec
INVARIANTS TypeOk
CONSTANT Move = {m0, m1, m2, m3}
CONSTANT Initial = m0
CONSTANT Pass = pass
Game.tla:
----------------------------- MODULE Game -------------------------------
LOCAL INSTANCE Sequences \* Imports definitions for private use.
CONSTANTS Move, \* The set of all possible board state changes.
Initial, \* The starting state of the board.
Pass \* A move where no action is taken.
ASSUME Initial \in Move \* Initial is of type Move.
ASSUME Pass \notin Move \* Pass cannot be a Move.
VARIABLES board \* A board state.
TypeOk == board \in Seq(Move) \* board is an ordered sequence of changes.
-----------------------------------------------------------------------------
Init == board = << Initial >> \* board's starting state is the initial change from nothing.
MovePlayed(move) == board' = Append(board, move)
MovePassed == UNCHANGED board
EnvNext(move) == \/ (move \in Move /\ MovePlayed(move))
\/ (move \in {Pass} /\ MovePassed)
-----------------------------------------------------------------------------
Next == \A move \in Move \union {Pass} : EnvNext(move) \* A player plays a move or passes.
Spec == Init /\ [][Next]_board
-----------------------------------------------------------------------------
THEOREM Spec => []TypeOk
=============================================================================