# Lectures A.Y. 2015/2016

## Teaching material

[M1] Introduction to Automata Theory, Languages, and Computation (3rd edition). J.E. Hopcroft, R. Motwani, J.D. Ullman. Addison Wesley, 2007.
[M2] Lecture Notes for Theory of Computing. Diego Calvanese. 2013. Available as scanned pages in pdf.
[M3] Languages and Machines (3rd edition). Thomas A. Sudkamp. Addison Wesley, 2005. Only Chapter 13.
[M4] The Convenience of Tilings. Peter van Emde Boas. In Complexity, Logic, and Recursion Theory, volume 187 of Lecture Notes in Pure and Applied Mathematics, pages 331-363, 1997.
[M5] Exercises on Theory of Computing. Available as scanned pages in pdf.

## Lectures

• Topics [M2: Part 1]
• course presentation
• What you should know after the lecture
• the basic definitions regarding sets, relations, and their properties

• Topics [M2: Part 1]
• basic definitions about relations and functions
• cardinality of a set, countable and uncountable sets, Cantor's theorem
• What you should know after the lecture
• the definition of cardinality of a set
• the difference between countable and uncountable sets
• Cantor's diagonalization argument

• Review of basic proof techniques [M2: Part 0]
• deductive proofs
• proving equivalences of sets
• proof by induction

• Topics [M2: Part 2]
• the Turing Machine
• What you should know after the lecture
• the formal meaning of alphabet, string, language
• how a Turing Machine is formally defined
• design Turing Machines that recognize some simple languages

• Topics [M2: Part 2]
• instantaneous description of a Turing Machine
• recursive and recursive enumerable languages
• examples of Turing Machines
• programming techniques for Turing Machines
• storage in the state
• What you should know after the lecture
• how one can program a TM easier by imposing structure on states and tape symbols
• how one can implement a procedure call with a TM

• Topics [M2: Part 2]
• programming techniques for Turing Machines
• multiple tracks
• subroutines and procedure calls
• multi-tape Turing Machines
• running time of a Turing Machine
• What you should know after the lecture
• how a multi-tape TM can be simulated by a single-tape TM
• the cost of simulating a multi-tape TM by a single-tape TM

• Topics [M2: Part 3]
• nondeterministic Turing Machines
• What you should know after the lecture
• how a nondeterministic TM can be simulated by a multi-tape TM (and hence also by a single-tape TM)
• the cost of simulating a nondeterministic TM by a deterministic TM

• Topics [M2: Part 3]
• classes of languages/problems
• recursive/decidable languages
• recursively enumerable (R.E.) languages
• non-R.E. languages
• Church-Turing Thesis
• closure properties of recursive and R.E. languages
• What you should know after the lecture
• how languages/problems can be classified
• the Church-Turing Thesis and its implications
• how to prove closure properties of recursive and R.E. languages

• Exercises on non-deterministic Turing Machines and further Turing Machines extensions. Exercises on the correspondence between function computation and language recognition by Turing Machines. [M5: Exercise 03]

• Topics [M2: Part 3]
• encoding Turing Machines as binary strings/integers
• enumerating binary strings/Turing Machines
• showing languages to be non-recursive/non-R.E.
• a non-R.E. language: the diagonalization languages
• a non-recursive language: the universal language
• Universal Turing Machines
• What you should know after the lecture
• how to encode Turing Machines as binary strings
• how to prove that the diagonalization language is non-R.E.
• how to prove that the universal language is R.E.

• Topics [M2: Part 3]
• the notion of reduction between problems/languages
• properties of R.E. languages
• Rice's theorem
• What you should know after the lecture
• what a reduction is
• how to prove that the universal language is non-recursive
• how to prove Rice's theorem

• Topics [M2: Part 4, M3: Chapter 13]
• Primitive recursive functions
• examples of primitive recursive functions
• showing computability of primitive recursive functions
• What you should know after the lecture
• the definition of primitive recursive functions
• how to construct some simple primitive recursive functions
• how to prove that every primitive recursive function is Turing computable

• Topics [M2: Part 4, M3: Chapter 13]
• bounded operators and bounded minimization
• Gödel numbering
• What you should know after the lecture
• how to define primitive recursive functions using bounded minimizations
• how to encode and decode a sequence of numbers by means of a single number

• Exercises on Turing Machines computing functions [M5: Exercise 05]

• Topics [M2: Part 4, M3: Chapter 13]
• course-of-values recursion
• total computable functions that are not primitive recursive
• mu-recursive functions
• Turing computability of mu-recursive functions
• What you should know after the lecture
• how to define functions by means of course-of-values recursion, and how to show that they are primitive recursive
• how to prove the existence of computable functions that are not primitive recursive
• the definition of mu-recursive functions
• how to show that every mu-recursive function is Turing computable

• Topics [M2: Part 4, M3: Chapter 13]
• arithmetization of Turing Machines
• What you should know after the lecture
• how to define a (primitive) recursive function that computes the trace of a Turing Machine computation
• how to define a mu-recursive function that simulates the computation of a Turing Machine computation

• Topics [M2: Part 5]
• tractable and intractable problems
• the classes P and NP
• a problem in NP: SAT
• SAT and CSAT
• poly-time reductions
• What you should know after the lecture
• how the classes P and NP are defined
• how to show a problem to be in NP
• how to polynomially reduce one problem to another

• Topics [M2: Part 5]
• NP-hardness and NP-completeness
• Cook's theorem
• What you should know after the lecture
• how to show a problem to be NP-hard
• how to prove Cook's theorem

• Topics
• Turing Machines
• decidability and undecidability
• recursive and recursively enumerable languages
• recursive functions

• Exercises on the reduction from 3SAT to CSAT and on variations of SAT [M5: Exercise 08]

• Topics [M2: Part 5]
• NP-completeness of Vertex Cover
• coNP-complete problems
• What you should know after the lecture
• hot to carry out an NP-hardness proof
• how NP and coNP are related to each other

• Topics [M2: Part 6]
• oracle Turing Machines
• the polynomial hierarchy
• Quantified Boolean Formulae (QBF)
• the classes PSPACE and NPSPACE.
• What you should know after the lecture
• what an oracle TM is
• how complexity classes based on oracle TMs are defined
• how the polynomial hierarchy is defined
• how the problem of QBF is defined
• relationship between the space bound and the time bound for a TM

• Exercises on variations of satisfiability and their complexity [M5: Exercise 09]

• Topics [M2: Part 6]
• relationship between PSPACE and NPSPACE (Savitch's theorem)
• PSPACE-completeness
• What you should know after the lecture
• how to prove Savitch's theorem

• Topics [M2: Part 6]
• evaluation of a QBF
• membership in PSPACE of QBF
• What you should know after the lecture
• how to evaluate a QBF in polynomial space

• Exercises on NP-complete vs. polynomial problems [M5: Exercise 10]

• Topics [M2: Part 6]
• PSPACE-hardness of QBF
• the classes EXPTIME, EXPSPACE, and the exponential hierarchy
• logarithmic space
• What you should know after the lecture
• how to prove PSPACE-hardness of QBF
• typical problems complete for the classes EXPTIME and EXPSPACE
• how space is measured for sublinear space computations

• Topics [M2: Part 7]
• composition of LogSpace computations
• What you should know after the lecture
• how the trivial, naive, and emulative compositions of function computations are defined

• Topics [M2: Part 7]
• LogSpace reductions
• the complexity classes L and NL
• the relationship between N and NL with graph connectivity
• the complement of NL
• What you should know after the lecture
• how LogSpace reductions are defined
• how the complexity classes L and NL are defined
• how to prove that connectivity in directed graphs in NL-complete
• what a log-space reduction is

• Topics [M4: Part 8]
• tiling problems (defined using colored tiles and using adjacency relations)
• complexity of variants of tiling problems
• relationship between tilings and Turing machine computations
• What you should know after the lecture
• how tiling problems are defined
• how one can convert tilings defined with colored tiles into tilings defined with adjacency relations
• the master reduction from Turing machine computations to tilings