Welcome to CS Theory !
This course is an introduction to the theory of computation, centered around the fundamental question:
What are the capabilities and limits of computation?
For example, which problems can (or cannot) be solved using a computer? Which problems are easy to solve? Is it possible that as technology improves and new brilliant approaches are invented, computers will be able to solve all problems? It turns out, perhaps surprisingly, that the answer to the last question is no. Even before the first computers were built, logicians in the 20th century studied the nature of algorithms and their intrinsic limits; they proved that some problems simply cannot be solved by any algorithm, regardless of what technology or computer we use.
Throughtout the course we will address these questions, starting with how we can even pose them (let alone answer them) rigorously. We will study different models of computation such as automata and Turing Machines. We will examine what makes some problems computationally easy, hard, or impossible to solve on these models, and what this means for our current and future computation capabilities.
The course is highly mathematical and abstract in nature. There will be formal proofs and no programming assignments. Students are expected to be comfortable with discrete mathematics.
Considering how different CS Theory is from other computer science classes you might have taken, you might wonder "Why is this course even mandatory?". It turns out that the topics explored in this course are of fundamental importance across all areas of computer science, from algorithms and machine learning to security and privacy. They also have a deep impact on areas beyond computer science, such as math and philosophy. Finally, the course helps you develop the essential skills of rigorous abstract reasoning and computational thinking.
Now that the course add period is over, we will send announcements through EdStem (which sends email to all students) rather than here. We will also upload the lecture notes from class on Courseworks. The brief lecture summaries and the handouts will still be maintained on this webpage.Syllabus
Course information This is a 3-credit undergraduate course, required for the CS major. COMS W3203 Discrete Math (or instructor permission) is a prerequisite. This course assumes you are comfortable with reading and writing mathematical proofs. If you have taken COMS 3203 and have had difficulty, come speak to the instructors and teaching staff during office hours, to deal with any issues early on.
Quick Links
The discussion board for this class is hosted on EdStem. For homeworks, quizzes and exams we will use Gradescope.
Enrolled students can join both through CourseWorks (see menue on the left)
Lectures notes will be posted on Courseworks. Lectures will generally not recorded with some exceptions.
The textbook for this course
is Introduction
to the Theory of Computation by Michael Sipser. Either
the Second or Third Edition is acceptable. We will generally
follow the book in class, but plan some departures. Students are
responsible for all material taught in class.
Please read all parts of the page carefully, in particular the class
policies. Here is a document compiling tips to succeed in this class.
Lecture Summaries
Below are brief summaries written shortly after each lecture, of what was covered, and readings. Readings refer to the textbook (Sipser), though sometimes may include other pointers or handouts. You are responsible for what was covered in class, which typically (but not always) follows the textbook. You should make sure to go over each lecture's material before the following lecture (the corresponding textbook chapters are posted). You may, but don't have to (unless otherwise specified) read ahead for next lecture. See the courseworks page for the class for the notes written during the lecture (possibly lightly edited right after).
Resources
Handout and review material:
Below are handouts generated by the teaching staff as a supplement to class material. These do not constitute required material for the class, but rather meant to support your learning and understanding. Most of the resources below provide further examples and review of what was already covered in class, but some of the resources provide new (and completely optional) more advanced material for interested students -- these will be clearly marked.
- Handout 0: Discrete Math review sheet
- Handout 1: DFAs and Regular Languages (solutions)
- Handout 2: NFAs and Regular Expressions (solutions)
Some of Columbia's resources to support you:
- If you have special needs because of learning, physical or other disabilities, it is your responsibility to contact Disability Services . They will then contact us regarding your accomodations. Note that if you're a Barnard student, you should contact CARDS instead.
- Counseling and Psychological Services.