theory of computation notes