Overview
Welcome! This is the course webpage for the course CS 101: Introduction to Languages and the Theory of Computation.
The prerequisite for the class is CS 54. CS 62 is a co-requisite. Send me, Prof. Zlatin, an email if you have questions about these requirements.
Resources
The professor for this class is me, Professor Zlatin. My office hours are Mon 10:30-11:30am and Thu 2:40-4pm, or by appointment. I am happy to talk about the class, about theory, or about CS more generally.
We have several wonderful mentors / TAs for the class: Jalen DeLoney, Julianne Louie, Kalyani Nair, and Lawrence Stampino-Strain. They will hold weekly mentor sessions which take place on the 1st or 2nd floor of Edmunds at times TBD. Please expect occasional changes and cancellations; these will be posted on Slack.
We will be using Canvas for class resources, Slack for announcements and questions, and Gradescope for submissions and graded work. Please see Canvas for links and logins.
The textbook for the course is:
- "Automata, Computability, and Complexity" by Elaine Rich. This book is out of print, but the pdf is freely available from the author's webpage. There are a few physical copies in Edmunds 227 which you can refer to while you're working in Edmunds 227.
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.
- Haskell documentation from the Haskell homepage, including links to tutorials and language reports.
You are encouraged to look for and to use other resources to learn more about the ideas and concepts (you may not, however, look directly for answers to individual questions on the weekly problem sets!). Some others that people have found useful are:
If you find anything particularly helpful you are encouraged to share it with the class on Slack.
If you need accommodations please contact the Disability Coordinator on your home campus. The process for Pomona students is available here.
If you want to meet outside of office hours, write me an email or come to my office - if I am there I will answer your questions. Any feedback, concerns, or suggestions are more than welcome. You can submit feedback through an anonymous form here. If you feel overloaded with the amount of work for this course, or are feeling burned out, I encourage you to contact me so that we can address the concerns together. You are probably not alone in feeling that way, and I am here to help.
Logistics
The basic flow each week will be as follows:
- Monday 1:15-2:30pm: lecture
- Wednesday 1:15-2:30pm: lecture
- Thursday-Friday: small group meeting
- Friday 10pm: group assignment due
- Sunday 10pm: problem set due (unless otherwise stated)
You will be assigned to a small group of approximately 5 students the first week of class. Your group will work together for the entire semester; your first task will be to find an hour when all of you can meet either Thursday or Friday. The plan is for each group to have an assigned TA who will attend the meetings to answer questions, talk through concepts, etc. Each week there will be a low-stakes assignment to work on during your group meeting; this should be turned in by 10pm Friday evening on Gradescope. There may occasionally be anonymous surveys for you to give feedback on how your group is doing, but please feel free to bring up concerns with the professor at any time.
In addition, there will be a weekly problem set. The assignments will mostly be done and submitted in pairs and will also be submitted on Gradescope. The pairs will be by assignment for the first few weeks and then at your discretion after that. Problems on the assignment will ask you to apply concepts in new ways. You may discuss the problems with anyone else currently taking CS 101 (or with the TAs or myself), but each pair must write up their own solution without referring to any written/typed/etc materials that may have been generated during such discussion. In addition, 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. Unless stated otherwise, problem sets are due by 10pm on the due date.
Finally there will be a written, in-class checkpoint approximately every 5 weeks.
The breakdown of grades will be as follows:
- 35% problem sets
- 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 | W | 1/21 | (cs54 review) sets, logic, functions, relations, proofs; Haskell datatypes; groups | ACC: Ap A | intro survey due noon Tuesday 1/20 |
| F | 1/23 | week01-group | |||
| Su | 1/25 | week01-ps-coding | |||
| 2 | M | 1/26 | basic definitions, languages, FSM | ACC: 5.1 | |
| W | 1/28 | regular languages, constructing FSM and proving correctness | ACC: Ch 5.1-3 | ||
| F | 1/30 | week02-group | |||
| Su | 2/1 | week02-ps-written, week02-ps-coding | |||
| 3 | M | 2/2 | closure properties of regular languages, NDFSM | ACC: Ch 5.4 | |
| W | 2/4 | Myhill-Nerode, minimization | ACC: Ch 5.7 | ||
| F | 2/6 | week03-group | |||
| Su | 2/8 | week03-ps-written | |||
| 4 | M | 2/9 | regular grammars, expressions | ACC: Ch 6, 7 | |
| W | 2/11 | non-regular languages, pumping lemma | ACC: Ch 8 | ||
| F | 2/13 | week04-group | |||
| Su | 2/15 | week04-ps-written, week04-ps-coding | |||
| 5 | M | 2/16 | Haskell data types, lexical analysis | ||
| W | 2/18 | review | |||
| F | 2/20 | week05-group | |||
| 6 | M | 2/23 | *** checkpoint 1 in class *** | ||
| W | 2/25 | pushdown automata | ACC: Ch 12.1-3 | ||
| F | 2/27 | week06-group | |||
| Su | 3/1 | week06-ps, week06-ps-coding | |||
| 7 | M | 3/2 | CFGs | ACC: Ch 11.1-8 | |
| W | 3/4 | CFGs, CFLs, PDAs; ambiguity and parse trees | ACC: Ch 11.6-7, 12.3-6 | ||
| F | 3/6 | week07-group | |||
| Su | 3/8 | week07-ps | |||
| 8 | M | 3/9 | non-CFLs, pumping lemma for CFLs | ACC: 13.1-4 | |
| W | 3/11 | closure for CFLs, algorithms for CFLs | ACC: Ch 14 | ||
| F | 3/13 | week08-group | |||
| 9 | M | 3/16 | *** no class - Spring break *** | ||
| W | 3/18 | *** no class - Spring break *** | |||
| 10 | M | 3/23 | parsers: big picture, LL(k) grammars, LL(1) grammars | parsing handout | |
| W | 3/25 | parsers: LL(1) grammars, recognizers vs. parsers, AST | parsing handout | ||
| F | 3/27 | week10-group | |||
| Su | 3/29 | week10-ps, week10-ps-coding | |||
| 11 | M | 3/30 | review | ||
| W | 4/1 | *** checkpoint 2 in class *** | |||
| F | 4/3 | week11-group (optional) | |||
| Su | 4/5 | week11-ps-coding | |||
| 12 | M | 4/6 | Turing machines | ACC: Ch 17.1-2 | |
| W | 4/8 | Turing machine variations | ACC: Ch 17.3 | ||
| F | 4/10 | week12-group | |||
| Su | 4/12 | week12-ps-written, (optional) week12-ps-coding | |||
| 13 | M | 4/13 | Universal Turing Machines, halting problem | ACC: 17.6-7, 19 | |
| W | 4/15 | halting problem | ACC: Ch 19 | ||
| F | 4/17 | week13-group | |||
| Su | 4/19 | week13-ps | |||
| 14 | M | 4/20 | reductions | ACC: Ch 21 | |
| W | 4/22 | more reductions | ACC: Ch 21 | ||
| F | 4/24 | week14-group | |||
| Su | 4/26 | week14-ps | |||
| 15 | M | 4/27 | more reductions, D vs SD vs not SD, Rice's theorem, Church-Turing | ACC: Ch 21.1-7, 18 | |
| W | 4/29 | semantics, PCF, type-checkers | type-checker handout | ||
| F | 5/1 | week15-group | |||
| Su | 5/3 | week15-ps | |||
| 16 | M | 5/4 | wrap-up, review | ||
| W | 5/6 | *** checkpoint 3 in class *** |