Limits of computation : an introduction to the undecidable and the intractable Preface To the student: We think that the theory dealing with what is hard about computation (and what is impossible!) is challenging but fun. This book grows out of these ideas and our approach to teaching a course in computational complexity. There is no doubt that some of the material in these chapters is what might be called wrap your brain around it material where a first reaction might be that the authors are pulling off a trick like a magician pulling a rabbit out of a hat. For instance consider the proof using proof by contradiction that there can be no algorithm to tell whether a program written in C++ will go into an infinite loop. One reaction upon reaching the contradiction at the end of the proof might be that there must be a misstep somewhere in the proof; another might be that there cannot really be a contradiction. Only after reading rereading and carefully considering each step can the student buy in to the proof. There are no shortcuts here; this is not reading to be done with the television playing in the background