Introduction to the theory of computation - Sipser, M. (singapore course technology, 2006)