Instructor: Neil Immerman
What is this course about?      CS 501 is an advanced undergraduate/master's-level core course in the theory of computation: formal language theory (finite automata, regular languages, context-free grammars and pushdown automata), computability theory, and complexity theory. This is a mathematical course: you will learn the main mathematical models of computation and how to prove their basic properties.
How Do I Succeed in this Course?      Do all the assigned reading thoughtfully and in advance. Work through all the examples in the text. Every time the author states a result, try to prove it yourself before you read the proof in the book. If you can do it yourself, that's great! If you can't, you will be much more appreciative and able to understand the proof in the book. Work many sample problems! The same way you have to practice when learning a musical instrument or a sport, you have to practice solving problems to develop a facility and an understanding of this material. Start each assigned homework early! make sure you understand what all the questions mean. Start by looking at small simple examples of the questions that are asked. If the meaning of the question on a small example is not clear, that suggests a great clarifying quetion in class or on Piazza. Always be careful with Piazza questions about the homework not to give away ideas towards solutions. When in doubt, ask your question privately. If it's fine, then we will open it to the whole class.
Please sign up on the CS501 Piazza site. Ask questions there and answer each other's questions. Extra credit will be given for good answers on Piazza and also for the first person to point out any typo or error in any of the handouts, or any typo in the text not already listed in Sipser's errata page for 2nd Edition or errata page for 3rd Edition.
Prerequisites: CMPSCI 311, with a B- or better. It is useful to have "mathematical sophistication", at the level of of getting an A in CMPSCI 250, or in an upper-level math courses.
Required text: Michael Sipser, Introduction to the Theory of Computation, second or third edition.