The Art of Computer Programming 3

International BSc in AI, PSL University — Fall 2026

The course has two parts: theory of computation (by Anton Gnatenko) and software development (by Pierre Senellart)
Classes: Monday and Wednesday, 13:45-17:00, Salle 4, Estrapade.
Office hours: 45 Rue d'Ulm, agree on a time in advance.


Announcements

11 Oct Class 8 happened online, so there was no quiz. There will also be no quiz in Class 9.
23 Sep Midterm moved to 9 Nov (Class 15)
10 Sep Course page is up. See you soon!

Lecture Notes

Lecture notes Gradually updated after each lecture.


Programme

# Date Topic(s) Materials
Computability
01 Mon 14 Sep Welcome words. Computable and uncomputable functions exercises solutions
02 Wed 16 Sep Decidable and undecidable languages, Rice's theorem exercises solutions quiz
03 Mon 21 Sep Turing machines exercises solutions code quiz
04 Wed 23 Sep History of programming (slides). Exercises: Markov normal algorithms (emulator) exercises solutions quiz
05 Mon 28 Sep Lambda calculus exercises solutions
06 Wed 30 Sep More lambda calculus exercises solutions quiz
Complexity
07 Mon 5 Oct Time complexity, classes P and Exp, time hierarchy exercises solutions quiz
08 Wed 7 Oct Class NP exercises solutions
09 Mon 12 Oct Reductions and hardness, NP-completeness of SAT and CLIQUE
10 Wed 14 Oct More NP-complete problems: INDEPENDENT_SET, VERTEX_COVER, 3SAT, 3COLOUR, HAMILTONIAN-CYCLE, KNAPSACK exercises hints quiz
11 Mon 19 Oct Space complexity, classes PSpace, L and NL exercises hints quiz
12 Wed 21 Oct NP-complete problems in practice, SAT-solvers (slides) exercises code
Formal Languages
13 Mon 2 Nov Regular expressions and regular languages
14 Wed 4 Nov Finite automata
15 Mon 9 Nov Midterm (computability & complexity) + discussion (demo)
16 Mon 16 Nov Nondeterministic automata, subset construction, exponential blowup
17 Wed 18 Nov Pattern matching, Aho-Corasick
18 Mon 23 Nov Context-free grammars
19 Wed 25 Nov Syntax of programming languages
Review
20 Mon 30 Nov Review of the course, open problems and perspective
Software Development (Part II)
21 Wed 2 Dec Start of Part II: Specification, Python typing, testing, TDD
22 Mon 7 Dec Git, code review, continuous integration, development processes
23 Wed 9 Dec
24 Mon 14 Dec Generative AI and agentic coding tools, their failure modes
25 Wed 16 Dec
26 Wed 6 Jan Tutorials
27 Mon 11 Jan Open source, supply-chain security, documentation, packaging, release, archival
28 Wed 13 Jan
29 Mon 25 Jan Final exam

Grading

A short quiz at the beginning of every class (except the first class in each of the two parts). A written midterm in Class 13 Class 15. A written exam at the end of the course.

Final Mark = 0.2 * Quizzes + 0.4 * Midterm + 0.4 * Exam


Further Reading

Michael Sipser, Introduction to the Theory of Computation
Sanjeev Arora & Boaz Barak, Computational Complexity: A Modern Approach
Dexter Kozen, Automata and Computability
George Boolos & Richard Jeffrey, Computability and Logic
J. Roger Hindley & Jonathan P. Seldin, Lambda-Calculus and Combinators: An Introduction
Scott Chacon & Ben Straub, Pro Git — git-scm.com/book/
John Ousterhout, A Philosophy of Software Design
Karl Fogel, Producing Open Source Software — producingoss.com

Acknowledgements

These course materials draw on my experience of learning theoretical computer science from Valery Alekseev, Bruno Bauwens, Evgeny Dashkov, Vladimir Podolskii, Nikolay Vereshchagin and Vladimir Zakharov, as well as on books by Dexter Kozen. Some proof ideas and exercises are adapted from their courses and books. Beyond that, their teaching has greatly influenced how I see the subject.

A friend of mine has defined the practical man as one who understands nothing of theory and the theoretician as a dreamer who understands nothing at all. — Ludwig Boltzmann