This book is about formal specification, an approach to the development of complex systems, primarily but not exclusively computer-based, which derives from recent research in theoretical computer science. Most of the literature in this field is inaccessible to the lay engineer or programmer because of its necessarily mathematical nature. Our intention is to present this approach to a wider audience, by showing it at work, but without trivializing it. Our intended audience includes students of computer science, electrical engineering and other computer-oriented disciplines, but the text should also serve as an introduction to the field for all those professionally concerned with the production of software, such as software engineers, programmers and systems analysts.