Faculty of Computer Science

Master of Science in Computer Science

**Topics**[M2: Part 1]- course presentation
- basic definitions about sets

**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 contradiction
- proof by induction

**Topics**[M2: Part 2]- basic definitions about languages
- 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

**Exercises on**deterministic Turing Machines [M5: Exercise 02]

**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

- programming techniques for Turing Machines
**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

**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]- 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

- classes of languages/problems
**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

**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

**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.

**Topics**[M2: Part 3]- a non-recursive language: the universal language
- Universal Turing Machines
- the notion of reduction between problems/languages
- properties of R.E. languages

**What you should know after the lecture**- how to prove that the universal language is R.E.
- what a reduction is
- how to prove that the universal language is non-recursive

**Topics**[M2: Part 4, M3: Chapter 13]- Rice's theorem
- Primitive recursive functions
- examples of primitive recursive functions

**What you should know after the lecture**- how to prove Rice's theorem
- the definition of primitive recursive functions
- how to construct some simple primitive recursive functions

**Topics**[M2: Part 4, M3: Chapter 13]- showing Turing computability of primitive recursive functions
- bounded operators and bounded minimization

**What you should know after the lecture**- how to prove that every primitive recursive function is Turing computable
- how to define primitive recursive functions using bounded minimizations

**Exercises on**decidability and undecidability and on reductions between problems. [M5: Exercise 04]

**Topics**[M2: Part 4, M3: Chapter 13]- Gödel numbering
- course-of-values recursion
- total computable functions that are not primitive recursive

**What you should know after the lecture**- how to encode and decode a sequence of numbers by means of a single number
- 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

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

**Topics**[M2: Part 4, M3: Chapter 13]- mu-recursive functions
- Turing computability of mu-recursive functions
- arithmetization of Turing Machines: the trace function

**What you should know after the lecture**- the definition of mu-recursive functions
- how to show that every mu-recursive function is Turing computable
- how to define a (primitive) recursive function that computes the trace of a Turing Machine computation

**Topics**[M2: Part 4, M3: Chapter 13, M2: Part 5]- arithmetization of Turing Machines
- tractable and intractable problems
- the classes P and NP
- a problem in NP: SAT

**What you should know after the lecture**- how to define a mu-recursive function that simulates the computation of a Turing Machine computation
- how the classes P and NP are defined
- how to show a problem to be in NP

**Exercises on**primitive recursive functions [M5: Exercise 06]

**Exercises on**the topics of the midterm exam [M5: Exercise 07]

**Topics**[M2: Part 5]- poly-time reductions
- NP-hardness and NP-completeness
- Cook's theorem: computation matrix and clue vector

**What you should know after the lecture**- how to polynomially reduce one problem to another
- how to show a problem to be NP-hard
- how the computation of a non-deterministic TM that runs in polymomial time is represented using a matrix and a clue vector

**Topics**- Turing Machines
- decidability and undecidability
- recursive and recursively enumerable languages
- recursive functions

**Topics**[M2: Part 5]- Proof of Cook's theorem
- NP-completeness of Vertex Cover
- coNP-complete problems

**What you should know after the lecture**- how to prove Cook's theorem
- hot to carry out an NP-hardness proof
- how NP and coNP are related to each other