CSCI054 is a combined course on functional programming and formal proof. The course both exposes students to a new programming paradigm and introduces discrete structures and proof techniques that will be needed in later computer science classes. In addition a few practical applications will be discussed.
The prerequisite for the class is any flavor of CSCI051, a 5 on the CS A AP exam, or permission of the instructor/department. Send me (Prof. Osborn) an email if you have questions about these requirements.
The professor for this class is Prof. Osborn. If you want to talk about the class or chat about general advising things, please stop by my office hours (Monday or Friday 9:30am--11:30am), which are typically in person but might be on Zoom (I'll announce to the class if they're on Zoom). I can also meet with you at other times by appointment (in person or on zoom): send me an email with some times that are good for you and a sense of what you want to talk about.
The mentors/TAs for the class are Harrison Brown, Emma Gandonou, Ruben Millan Fabian, Lenny Raybukh, and Emmett Levine. In general the mentor hours will be on the 1st or 2nd floor of Edmunds; check the pinned post on Slack for up-to-date info. There may be occasional changes and cancellations, however, so please also check Slack for updates.
We'll be using this course website for distributing course materials and Slack for making announcements and answering questions. We'll be using Gradescope for submitting and returning assignments. Let me know if you have problems accessing either.
The textbooks for the class are:
You are encouraged to look for and to use other resources. Some others that people have found useful are:
If you find anything particularly helpful you are strongly encouraged to share it with the class on Slack.
If you might need accommodations please contact the Disability Coordinator on your home campus. The process for Pomona students is available here .
More generally, life happens to all of us and I know there may be times when staying on top of the workload in this class is going to feel like too much on top of everything else that you're managing. If that happens, please come talk to me so that I'm aware and so that we can work together to try to figure out a plan. Please keep in touch!
The basic flow each week will be as follows:
The lectures will be in Edmunds 101.
You will be assigned to a small group of approximately 4-6 students during the first week of classes. 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 Wednesday or Thursday. Each group will 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 the end of Thursday evening on Gradescope. There will also be two anonymous surveys during the semester for you to give feedback on how your group is working.
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. Problems on the assignment will ask you to apply concepts in new ways. As with the practice problems you may discuss the problems with anyone else currently taking cs54 (or with the TAs or myself), but each pair must write up their own solution. Unless stated otherwise, these are due by 11:59pm on the due date.
Each lecture will begin with a brief self-graded review quiz. One lecture per week (typically a Wednesday) will end with a short topic test. It is possible to regain points lost on a topic test within two weeks of the test during office hours by retaking alternate questions (I strongly suggest talking over the test before the retake).
To make good use of class time, it is essential to do readings, prepare for class, and attend lecture; besides the daily assessment, each class session is divided between a brief lecture and group work on example problems.
The course will conclude with a cumulative in-class final exam in week 15, with an option of retakes during the final exam slot (Friday 5/16, 2:00pm--5:00pm, in the usual classroom).
The breakdown of grades will be as follows:
This is a high-level outline of the planned schedule. Note that the calendar is subject to change. For the readings "CDMCS" refers to the book "Connecting Discrete Mathematics and Computer Science" by David Liben-Nowell and "LYAH" refers to the book "Learn You a Haskell for Great Good!" by Miran Lipovača and others. The chapter numbers for LYAH refer to the online version of the book; note that the section numbers are not explicit.
Unless stated otherwise, all deadlines are at 11:59pm on the given date.
Week | Day | Date | Topic | Reading | Due |
---|---|---|---|---|---|
1 | M | 1/21 | no class, MLK Jr. Day | ||
W | 1/23 | admin, groups, intro to Haskell, code, worksheet | LYAH: Ch 1, 2.1-2 | Quiz: Class logistics | |
R | 1/24 | week01-group | |||
Su | 1/26 | week01-ps, template | |||
2 | M | 1/27 | lists and tuples, code, worksheet | LYAH: Ch 2.3-6 | Quiz & test: Class logistics, defining functions, conditionals, cons syntax, cons vs append |
W | 1/29 | types, intro to pattern matching, code, worksheet | LYAH: Ch 3, 4.1 | Quiz: Conditionals, lists vs tuples, cons syntax | |
R | 1/30 | week02-group | |||
Su | 2/02 | week02-ps, template | |||
3 | M | 2/03 | pattern matching, guards, where, code, worksheet | LYAH: Ch 4 | Quiz & test: Typeclasses and function type syntax, pattern matching, cons vs append, recursion on lists |
W | 2/05 | where, let, higher-order functions, code, worksheet | LYAH: Ch 4, 6 | Quiz: Types, guards, let/where | |
R | 2/06 | week03-group | |||
Su | 2/09 | week03-ps, template | |||
4 | M | 2/10 | folds, code, worksheet | LYAH: Ch 6 | Quiz: Cons syntax, higher order functions, lambdas |
W | 2/12 | discrete math data types: sets, functions, worksheet | CDMCS: Ch 2.1-3, 2.5 | Quiz & Test: Higher order functions, currying, lambdas, pattern matching, fold, sets | |
R | 2/13 | week04-group, sample tex file | |||
Su | 2/16 | week04-ps, week04-ps-coding, cs54header.tex, coursetemplate54.sty | |||
5 | M | 2/17 | propositional logic, worksheet | CDMCS: Ch 3.1-3 | Quiz: Fold, domain/codomain/range, one-to-one/onto |
W | 2/19 | predicate logic, worksheet | CDMCS: Ch 3.4-5 | Quiz & Test: Bijections, set operations, propositional logic, truth tables, predicate logic | |
R | 2/20 | week05-group | |||
Su | 2/23 | week05-ps | |||
6 | M | 2/24 | predicate logic, writing proofs, worksheet | CDMCS: Ch 3.5, 4.3-5 | Quiz: Lambdas, partial application, fold, one-to-one/onto |
W | 2/26 | proof strategy: direct, contrapositive, worksheet | CDMCS: Ch 4.3-5 | Quiz & Test: Set operations, contrapositive, truth tables, predicate logic | |
R | 2/27 | week06-group | |||
Su | 3/02 | week06-ps | |||
7 | M | 3/03 | proofs: contradiction, worksheet | CDMCS: Ch 4.3-5 | Quiz: Direct proof, contrapositive proof |
W | 3/05 | proofs: induction, sum notation, worksheet | CDMCS: Ch 5.2-3 | Quiz & Test: Proof by contradiction, contrapositive, truth tables, pattern matching and recursion, number theory | |
R | 3/06 | week07-group | |||
Su | 3/09 | week07-ps, cs54header.tex, coursetemplate54.sty | |||
8 | M | 3/10 | Aside: Proof Structure | Quiz: Induction, proof strategy | |
W | 3/12 | proofs: strong induction, worksheet | CDMCS: Ch 5.2-3 | Quiz & Test: Induction, number theory, truth tables, proof strategy | |
R | 3/13 | week08-group | |||
Su | 3/16 | spring break begins; week08 topics are in week09's problem set, so get started early! | |||
9 | 3/17–3/21 | spring break | |||
10 | M | 3/24 | functions, worksheet | CDMCS: Ch 2.5 | Quiz: Strong induction, sum notation, one-to-one/onto |
W | 3/26 | relations | CDMCS: Ch 8.2-4 | Quiz & Test: Set operations, contrapositive, induction, proving one-to-one/onto | |
R | 3/27 | week10-group | |||
Su | 3/30 | week10-ps | |||
11 | M | 3/31 | relations continued, countability, worksheet | CDMCS: Ch 9.3 | Quiz: Relations (transitivity/symmetry/reflexivity), induction |
W | 4/02 | uncountability | CDMCS: Ch 9.3 | Quiz: Countability | |
R | 4/03 | week11-groups | |||
Su | 4/06 | week11-ps | |||
12 | M | 4/14 | structural induction, worksheet | CDMCS: Ch 8.3-4 | Test & Quiz: relation properties, closures; countability, uncountability, pattern matching and recursion |
W | 4/16 | insertion sort, worksheet | CDMCS: Ch 7.5 | Quiz & Test: Structural induction, higher order functions, number theory, relations, countability | |
R | 4/17 | week12-groups | |||
Su | 4/20 | week12-ps, week12-ps-coding | |||
13 | M | 4/21 | combinatorics | CDMCS: Ch 9.2 | Quiz: Structural induction, countability, set operations |
W | 4/23 | binomial theorem | CDMCS: Ch 9.2 | Quiz & Test: Sum notation, induction, combinatorics, predicate logic | |
R | 4/24 | week13-group | |||
Su | 4/27 | week13-ps, week13-ps-coding | |||
14 | M | 4/28 | probability, worksheet | CDMCS: Ch 10.2 | Quiz: Combinatorics, set operations |
W | 4/30 | more probability, worksheet | CDMCS: Ch 10.2 | Quiz & Test: Probability, combinatorics, induction, countability, uncountability | |
R | 5/01 | week14-group | |||
Su | 5/04 | week14-ps | |||
15 | M | 5/05 | review | Quiz: Combinatorics, probability, uncountability | |
W | 5/07 | *** final exam in class *** | Topics: Haskell, proof techniques (direct, induction), functions and relations, countability, combinatorics | ||
Exam | F | 5/16 | In-class exam retakes/regrading | 2:00pm--5:00pm, during final exam slot |