CMPSCI 501: Theory of Computation

David Mix Barrington

Spring, 2021

This is the home page for COMPSCI 501. COMPSCI 501 is an advanced undergraduate/master's-level core course in the theory of computation and will deal with formal language theory (finite automata, regular languages, grammars, and pushdown automata), computability theory, and complexity theory.

COMPSCI 501 counts as an upper-level undergraduate elective course for computer science majors, a menu course for math majors in the computing track, and a theory core for M.S. students in computer science. Undergraduate and graduate students will have the same assignments and the same grade scale.

Instructor Contact Info: David Mix Barrington, 210 CMPSCI building, 545-4329 (though I will be in my office only rarely during S21), office hours for Spring 2021 Tue 11-12, Fri 1-2. Zoom number on course Moodle page.

I generally answer my email fairly reliably.

TA Contact Info: Rik Sengupta Office hours TBA.

Grader Contact Info: Ansh Chandra, Sattwik (Sunny) Das, possibly another TBA.

The course is primarily intended for undergraduates in computer science and related majors such as mathematics or computer engineering, for master's students in computer science, and for graduate students in other fields with the appropriate background and interest. COMPSCI 311 (theory of algorithms) is the primary prerequisite, though this may be negotiable for students with a strong mathematics background. The mathematical techniques taught in CMPSCI 250 (or similar courses like MATH 300 or MATH 455) will be used heavily. No programming will be assigned, but familiarity with programming at the level of at least CMPSCI 187 (data structures) will sometimes be assumed. This is probably the mathematically most difficult course in the COMPSCI undergraduate curriculum. It is a semi-elective course -- it fills requirements for any CMPSCI major and many MATH majors, but should be taken only by students whose mathematical ability and/or motivation is average or above relative to COMPSCI majors.

The textbook for the course is Introduction to the Theory of Computation by Michael Sipser, third edition. This is a very good book: I will be following it very closely for my lectures, and it is a very good long-term reference, but it is rather expensive. I will be using the third edition -- the second edition has pretty much the same material (except for extra material on CFL's that I won't be using) but exercise numbers will differ. The book information has been posted on SPIRE, and thus the University's ECampus textbook entity has copies of the book available.

Lectures, typically 4-6 totaling 90-120 minutes per week, will be asynchronous and recorded on Echo360. They will follow the textbook pretty closely.

The course will have three snychronous meetings a week, MWF 11:15-12:05.

The Monday and Wednesday classes will be discussion meetings not unlike those in COMPSCI 250 or 311. Half the students will attend Monday and the other half Wednesday, and in each class I will present a problem or problems, divide you into groups in breakout rooms, and have each group submit an answer at the end of the session. I did this in COMPSCI 575 last term and had an unfortunate size imbalance between the sections, so I need to balance them. Unless you have a problem with it, you should go to Monday discussion if your UMass student number is odd, and to Wednesday discussion if it is even. I, the TA, and the graders will be present to help during the discussions, rotating through the breakout rooms.

The Friday class will be an optional "non-lecture" -- I'm not sure what format this will take exactly and it may evolve during the term.

The course will use the Moodle course management system, and much course material will be available only there.

Announcements (1 February 2021):

Last modified 1 February 2021