Mathematical Theory of Computation