The course covers the fundamentals of automata theory, formal languages, Turing machines, computability, and computational complexity. These topics provide the required mathematical foundations for a deeper understanding of the power and limitations of computational machines. The emphasis of this class will be on theoretical aspects of the field with a special focus on formal definitions and proofs, and the ultimate goal of understanding and appreciating the most fundamental results.

- Gain proficiency with mathematical tools and formal methods
- Understand automata and Turing machines
- Understand various equivalent descriptions of regular and context free languages
- Understand fundamental results of computability and complexity theories

The required textbook for this course is Introduction to the Theory of Computation, by Michael Sipser (3rd edition). Lecture notes will also be posted on Blackboard after each lecture.

April 3: Introduction, Course Overview, and Regular Languages

- Lecture notes posted on Blackboard
- Reading: Sections 1.1-1.3

April 10: Nonregular Languages, Context-Free Languages Part 1

- Lecture notes posted on Blackboard
- Reading: Sections 1.4, 2.1, and 2.2

April 17: Context-Free Languages Part 2

- Lecture notes posted on Blackboard
- Reading: Section 2.3

April 24: Turing Machines

- Lecture notes posted on Blackboard
- Reading: Sections 3.1-3.2

May 1: Decidability

- Lecture notes posted on Blackboard
- Reading: Sections 3.3, 4.1, and 4.2

May 8: Nondeterministic Turing Machines and Midterm Review

- Lecture notes posted on Blackboard

May 15: Reducibility

- Lecture notes posted on Blackboard
- Reading: Sections 5.1 and 5.3

May 21: Complexity Theory Part 1

- Lecture notes posted on Blackboard
- Reading: Sections 6.3, 7.1, and 7.2

May 29: Complexity Theory Part 2

- Lecture notes posted on Blackboard
- Reading: Sections 7.3 - 7.5

May 29: Final Review

There will be 3 homework assignments. For exams, there will be a take-home midterm and a take-home final. The exams will be open-book. You will have a specified number of hours to solve the problems and submit your solutions.

**Grading:** 40% Homework, 25% Midterm, 35% Final

All assignments will be posted on Blackboard.

**Deadline.** Assignments are due at 11:59pm on the posted date. They must be submitted via Blackboard.

**Format.** Homeworks must be submitted as a PDF. You are strongly recommended to typeset your assignments using Latex.

**Collaboration.** You are allowed (and encouraged!) to collaborate with up to two other students on each homework assignment. However, you must write up your solutions individually, without relying on any shared notes or solutions from any other students, and you should be able to explain each of your solutions. If you discuss the homework with other students, please write the names of those students on your submitted homework. You are allowed to consult the course textbook, the lectures, and any other published textbooks. If you use a textbook other than the course textbook, please specify it on your assignment. All other sources are not allowed.

**Late Days.** You are allowed **four** late days in total during the course. Each late day can be used to extend a homework assignment deadline by one day. No penalty will be given on homeworks that use a late day. No additional delays will be accepted. Late days cannot be split into "partial" days. You can use all of your late days on a single assignment, or use them on different assignments (or not use them at all). The late days cannot be used on take-home exams.

Automata and Languages

- Regular languages and context-free languages

Computability Theory

- Turing machines, decidability, reducibility, and advanced topics in computability theory

Complexity Theory

- Time Complexity, NP completeness, and the Cook-Levin Theorem