Graduate text in formal methods in computer science.This is a comprehensive and systematic account of the important and highly applicable method of data refinement, which is one of the most powerful formal methods for system development. The authors concentrate on principles and begin with an explanation of the fundamental notions behind data refinement and simulation. Accessibility and comprehension are emphasised in order to guide newcomers to the area. The remaining chapters are comparitive in nature, looking at a variety of formal methods and how they may be best applied.The book is self-contained, going from advanced undergraduate level but taking the reader to the state-of-the-art in methods for proving simulation.This is a comprehensive and systematic account of the important and highly applicable method of data refinement, which is one of the most powerful formal methods for system development. The authors concentrate on principles and begin with an explanation of the fundamental notions behind data refinement and simulation. Accessibility and comprehension are emphasised in order to guide newcomers to the area. The remaining chapters are comparitive in nature, looking at a variety of formal methods and how they may be best applied.The book is self-contained, going from advanced undergraduate level but taking the reader to the state-of-the-art in methods for proving simulation.The goal of this book is to provide a comprehensive and systematic introduction to the important and highly applicable method of data refinement and the simulation methods used for proving its correctness. The authors concentrate in the first part on the general principles needed to prove data refinement correct. They begin with an explanation of the fundamental notions, showing that data refinement proofs reduce to proving simulation. The topics of Hoare Logic and the Refinement Calculus are introduced and a general theory of simulations is developed and related to them. AccessibilitylS%