Introduction to the Theory of Computation - Sipser Michael (Cengage Learning, 2012)