Overview
Welcome! This is the course webpage for the course CS 101: Introduction to Languages and the Theory of Computation.
The prerequisites for the class are CS 54 and CS 62. Send me, Prof. Zlatin, an email if you have questions about these requirements.
Resources
The professor for this class is me, Professor Zlatin. I grew up in New Jersey and got my Ph.D. from Carnegie Mellon University in Pittsburgh, PA. I'm an avid rock-climber, movie-watcher, and puzzler. My research focuses on the mathematical foundations of algorithms and optimization, and I am very excited to facilitate your learning in this class! My office hours are Tuesdays 10:00-11:30am and Wednesdays 4:00-5:00pm in Edmunds 223, or by appointment. I am happy to talk about the class or any CS related topics that are on your mind.
In addition, we have four wonderful mentors this semester (no, these are not my clones, real photos incoming!):
-
Taha Disbudak
-
Cris Ovalle
-
Kalyani Nair
-
Ruben Millan Fabian
The class mentors will hold weekly mentor sessions which take place on the 1st or 2nd floor of Edmunds at times TBD. Please make use of these! There may be occasional changes and cancellations; these will be posted on Slack.
We will mainly use Canvas for class resources, but assignments will be turned in on Gradescope. The course staff will also use Slack extensively for announcements and questions.
The primary textbook for the course is:
- Automata, Computability, and Complexity by Elaine Rich. There are a several physical copies of this book in Edmunds 227 which you can refer to while you're working in that space.
In addition, since you'll be writing code in Haskell, it's recommended that you have access to something such as the following:
- Learn You a Haskell for Great Good! by Miran Lipovača. It is free to read online and there are also some copies in Edmunds 227.
You are encouraged to look for and to use other resources to aid in your learning. Some others that people have found useful are:
If you need accommodations please contact the Disability Coordinator on your home campus. The process for Pomona students is available here.
Logistics
The basic flow each week will be as follows:
- Monday 2:45-4:00pm: lecture
- Wednesday 2:45-4:00pm: lecture
- Thursday or Friday: small group meeting
- Friday 10pm: group assignment due
- Sunday 10pm: problem set due
An important component of this course are your learning communities! In the first week of class, you will be assigned to a small group of four or five students who you will meet with weekly throughout the semester. Each group will have an associated TA who will attend your group meeting, answer questions, talk through concepts, etc. Each week there is a low-stakes group assignment to be turned in by 10pm Friday evening on Gradescope.
There is a weekly problem set due Sundays at 10pm. The assignments will be submitted on Gradescope and generally be done in pairs. I will assign the pairs for the first few problem sets, then you can choose your own pair. You may discuss the problems with others in the class, or course staff but each pair must write up their own solutions independently. You must acknowledge who you worked with and what their contribution was. Submitting an answer found on the internet or generated by an AI-powered system such as ChatGPT is not allowed. A full discussion of the AI policy can be found here.
Occasionally, there may be in-class quizzes consisting of questions heavily based on the recent problem set. Finally there are three written, in-class checkpoints .
The breakdown of grades will be as follows:
- 35% problem sets / small quizzes
- 60%/65% checkpoints (20% each / 25% for 3rd checkpoint)
- 5%/0% group work
Calendar
This is a high-level outline of the planned schedule. It may change.
Unless stated otherwise, each week's work will have the following due dates:
- Friday 10pm: group assignment
- Sunday 10pm: problem set
The textbook referred to below as "ACC" refers to the book "Automata, Computability, and Complexity" by Elaine Rich.
| Week | Day | Date | Topic | Reading | Due |
|---|---|---|---|---|---|
| 1 | M | 8/31 | (review) sets, logic, function, relations, proofs; Haskell datatypes | ACC: Ap A | intro survey due 10pm on 8/29 |
| W | 9/2 | basic definitions, languages, FSM | ACC: Ch 5.1 | ||
| F | 9/4 | week01-group | |||
| Su | 9/6 | week01-ps (coding) | |||
| 2 | M | 9/7 | no class - Labor Day | ||
| W | 9/9 | regular languages, constructing FSM, proving correctness | ACC: Ch 5.1-3 | ||
| F | 9/11 | week02-group | |||
| Su | 9/13 | week02-ps (written, coding) | |||
| 3 | M | 9/14 | closure properties of regular languages, NDFSM | ACC: Ch 5.4 | |
| W | 9/16 | Myhill-Nerode, minimization | ACC: Ch 5.7 | ||
| F | 9/18 | week03-group | |||
| Su | 9/20 | week03-ps | |||
| 4 | M | 9/21 | regular grammars, expressions (remote) | ACC: Ch 6, 7 | |
| W | 9/23 | non-regular languages and the pumping lemma (remote) | ACC: Ch 8 | ||
| F | 9/25 | week04-group | |||
| Su | 9/27 | week04-ps | |||
| 5 | M | 9/28 | Haskell data types, modelling DFSM, lexers | ||
| W | 9/30 | review | |||
| F | 10/2 | week05-group | |||
| 6 | M | 10/5 | checkpoint 1 in class | ||
| W | 10/7 | pushdown automata | ACC: Ch 12.1-3 | ||
| F | 10/9 | week06-group | |||
| Su | 10/11 | week06-ps (written, coding) | |||
| 7 | M | 10/12 | CFGs | ACC: Ch 11.1-8 | |
| W | 10/14 | CFGs, CFLs, PDAs; ambiguity and parse trees | ACC: Ch 11.6-7, 12.3-6 | ||
| F | 10/16 | week07-group | |||
| 8 | M | 10/19 | no class - Fall break | ||
| W | 10/21 | closure for CFLs, algorithms for CFLs | ACC: Ch 14 | ||
| F | 10/23 | week08-group | |||
| Su | 10/25 | week08-ps | |||
| 9 | M | 10/26 | non-CFLs, pumping lemma for CFLs | ACC: Ch 13.1-4 | |
| W | 10/28 | recap on regular and CF languages, lexers and parsers, LL(k) grammars | parsing handout | ||
| F | 10/30 | week09-group | |||
| Su | 11/1 | week09-ps | |||
| 10 | M | 11/2 | parsers: recognizing LL(1) grammars | parsing handout | |
| W | 11/4 | parsing big picture, review | |||
| F | 11/6 | week10-group | |||
| 11 | M | 11/9 | checkpoint 2 in class | ||
| W | 11/11 | Turing machines | ACC: Ch 17.1-3 | ||
| F | 11/13 | week11-group | |||
| Su | 11/15 | week11-ps (written, coding) | |||
| 12 | M | 11/16 | Turing machines; D and SD | ||
| W | 11/18 | Turing machines variations | |||
| F | 11/20 | week12-group | |||
| Su | 11/22 | week12-ps | |||
| 13 | M | 11/23 | universal Turing machines, halting problem | ACC: Ch 17.3, 17.6-7 | |
| W | 11/25 | no class - Thanksgiving | |||
| 14 | M | 11/30 | reductions; decidable, semi-decidable, undecidable | ACC: Ch 17.6-7, 19 | |
| W | 12/2 | more reductions: not decidable, not semi-decidable, Rice's theorem, Church-Turing | ACC: Ch 19, 21 | ||
| F | 12/4 | week14-group | |||
| Su | 12/6 | week14-ps | |||
| 15 | M | 12/7 | course evaluations, review | ACC: Ch 21.1-7, 18 | |
| W | 12/9 | checkpoint 3 in class |