An Introduction to the Theory of Computing Dennis Komm Lecture Notes Foundations of Computing II Autumn Term 2020, University of Zurich Version: December 3, 2020 Contact:
[email protected] omputers allow us to automate many tasks of everyday life. There is, however, a strict limit as to what kind of work can be automated. The aim of this lecture C is to study these limits. In 1936, Alan Turing showed that there are well-defined problems that cannot be solved by computers (more specifically, by algorithms); this does not address a lack of computational power in the sense of stating that today’s computers are too slow, but as computers get faster, we may hope to solve these problems eventually. The inability to solve these problems will prevail, no matter how the performance of computers will improve. It is noteworthy that the modern computers were not present in Turing’s time. Following his footsteps, we ask “Which problems can be solved automatically and which cannot?” In order to do this, we introduce a formalization of the term “algorithm.” We start with a restricted class, the finite automata, which we then extend by making the underlying model more and more powerful, eventually arriving at the Turing machine model. We then prove the existence of problems that cannot be solved by Turing machines. The proof uses arguments similar to proving that there are more real numbers than natural numbers and to Gödel’s incompleteness theorem. One of the most famous such problems is the halting problem, e.g., to decide for a given Turing machine whether it finishes its work on a given input within finite time or runs forever.