[ Team LiB ]
Book Structure
SPIN can be used to thoroughly check high-level models of concurrent systems. This means that we first have to
explain how one can conveniently model the behavior of a concurrent system in such a way that SPIN can check it.
Next, we have to show how to define correctness properties for the detailed checks, and how to design abstraction
methods that can be used to render seemingly complex verification problems tractable. We do all this in the first part
of this book, Chapters 1 to 5.
The second part, Chapters 6 to 10, provides a treatment of the theory behind software model checking, and a
detailed explanation of the fundamental algorithms that are used in SPIN.
The third part of the book, Chapters 11 to 15, contains more targeted help in getting started with the practical
application of the tool. In this part of the book we discuss the command line interface to SPIN, the graphical user
interface XSPIN, and also a closely related graphical tool that can be used for an intuitive specification of correctness
properties, the Timeline editor. This part is concluded with a discussion of the application of SPIN to a range of
standard problems in distributed systems design.
Chapters 16 to 19, the fourth and last part of the book, include a complete set of reference materials for SPIN and
its input language, information that was so far only available in scattered form in books, tutorials, papers, and Web
pages. This part contains a full set of manual pages for every language construct and every tool option available in the
most recent versions of SPIN and XSPIN.
The Web site http://spinroot.com/spin/Doc/Book_extras/ contains online versions of all examples used in this book,
some lecture materials, and an up to date list of errata.
For courses in model checking techniques, the material included here can provide both a thorough understanding of
the theory of logic model checking and hands-on training with the practical application of a well-known model
checking system. For a more targeted use that is focused directly on the practical application of SPIN, the more
foundational part of the book can be skipped.
A first version of this text was used for several courses in formal verification techniques that I taught at Princeton
University in New Jersey, at Columbia University in New York, and at the Royal Institute of Technology in
Stockholm, Sweden, in the early nineties. I am most grateful to everyone who gave feedback, caught errors, and
made suggestions for improvements, as well as to all dedicated SPIN users who have graciously done this throughout
the years, and who fortunately continue to do so.
I especially would like to thank Dragan Bosnacki, from Eindhoven University in The Netherlands, who read multiple
drafts for this book with an unusually keen eye for spotting inconsistencies, and intercepting flaws. I would also like to
thank Al Aho, Rajeev Alur, Jon Bentley, Ramesh Bharadwaj, Ed Brinksma, Marsha Chechik, Costas Courcoubetis,
Dennis Dams, Matt Dwyer, Vic Du, Kousha Etessami, Michael Ferguson, Rob Gerth, Patrice Godefroid, Jan Hajek,
John Hatcliff, Klaus Havelund, Leszek Holenderski, Brian Kernighan, Orna Kupferman, Bob Kurshan, Pedro
Merino, Alice Miller, Doug McIlroy, Anna Beate Oestreicher, Doron Peled, Rob Pike, Amir Pnueli, Anuj Puri,
Norman Ramsey, Jim Reeds, Dennis Ritchie, Willem-Paul de Roever, Judi Romijn, Theo Ruys, Ravi Sethi, Margaret
Smith, Heikki Tauriainen, Ken Thompson, Howard Trickey, Moshe Vardi, Phil Winterbottom, Pierre Wolper,
Mihalis Yannakakis, and Ozan Yigit, for their often profound influence that helped to shape the tool, and this book.
Gerard J. Holzmann
gholzmann@acm.org
[ Team LiB ]