Overview

Welcome! This is the course webpage for the course CS 101: Introduction to Languages and the Theory of Computation.

What is computation? What problems can be solved through computation?
This course will seek to answer these questions. We will introduce and study increasingly powerful models of computation, including finite-state machines, push-down automata and Turing machines. We will develop the mathematical tools of formal languages and computability theory to characterize what problems can / can not be solved in these models. We will also explore connections to applications such as programming language and compiler design. Along the way there will be proof-writing and coding in Haskell.

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:

In addition, since you'll be writing code in Haskell, it's recommended that you have access to something such as the following:

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:

  • Harry Porter's videos on the Theory of Computation
  • Lydia's videos on the Theory of Computation
  • Michael Sipser's book "Introduction to the Theory of Computation" and his lecture videos
  • Peter Drake's videos on Haskell (which were designed for use with Lipovača's book)
  • Ryan Dougherty's YouTube Channel, Easy Theory
  • 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:

    The lectures will be in Edmunds 114.

    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:

    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:

    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 ***