About this course

CSCI 54 “Discrete Math and Functional Programming” is the second course in our computer science sequence. Its goals are twofold: to give you a solid foundation for programming and to introduce you to formal proof.

Instructor and TAs

This course is taught by me—Michael Greenberg and Joseph C. Osborn.

The TAs are Ethan Horton, Iren Coskun, and Mui Tranprasert.

Piazza

We will be using Piazza for class discussion. Instead of emailing questions directly to a professor, please post your questions on Piazza. If you have any problems or feedback for the developers, email team@piazza.com.

Requirements

You must have taken some version of CS 051 or an equivalent, like getting a 4 or 5 on the AP CS exam. Since this course is part of the Pomona introductory sequence, you may not take this course if you've already started the Harvey Mudd introductory sequence.

Software

Programs for this course will be run on the Pomona College Computer Science department’s lab facilities, based in Edmunds 227. You are welcome to use other computers to write and test your programs, but they must run on our facilities. You may log in remotely to any of the lab machines using ssh. Please do not log into any of our servers (e.g., project or xserv) to do homework.

If you do not have an account on the Pomona College Computer Science network, please request one from the CS sysadmin, Corey LeBlanc immediately.

We’ll be using Coq 8.9.1, though any version 8.9.1 or later should work. You’ll probably want to install Coq on your own computer, but it should be available on all of the lab machines and on little.cs.pomona.edu. We strongly recommend using emacs and Proof General, a mode for working with Coq scripts.

We'll build up our own tactics guide as the course progresses. If you have suggestions of explanations and examples, please don't hesitate to contribute!

In addition to Coq, we'll be using LaTeX to write up our informal mathematics. Tools like ShareLaTeX and Overleaf are optional, but some people like to use them to manage and write LaTeX files.

Lectures and readings

The course home page has a listing of the planned material.

Grading

Half of the course will use Coq as the main grader: if Coq accepts your proof, it’s correct! The other half of the course will be on paper proofs, which will be graded by hand. There will be in-class quizzes, but they will not be for credit.

Your grade for the course will be determined by your aggregate grades on:

  • homework (30%)
  • midterm (30%)
  • final (40%)

Turning in homework

Homework will be a mix of Coq and paper proofs, typically as separate files: a .v file containing Coq code and a .pdf file generated from the LaTeX homework. You’ll submit homework via gradescope. Homework is due on Thursdays at 1pm.

Homework that doesn’t compile, due to syntax or type errors, gets no points.

Late policy and resubmission

This course is rife with dependencies and is very homework-oriented; much of the learning you do will happen while you’re doing homework!

We will allow you to resubmit each homework no more than once after its original due date. We will accept only one resubmission per week, and we will only re-grade the automatically graded Coq portions. After resubmission, your grade will be computed as a weighted average: 25% your original grade, 75% your new grade.

Resubmission is in lieu of any late policy. If you do not submit a homework but then resubmit it for full credit, your grade on that homework will be 75%.

Expectations

Learning any new language is challenging, and Coq is very different from conventional programming languages. We encourage you to help each other learn the language and we also encourage you to discuss the text.

However: all work in the course must be your own. As explained in the student handbook, this means that the work you turn in must represent only your own work. It must not be based on help from others or information obtained from sources other than those approved by the instructor. Examples of acceptable sources of information include:

Examples of unacceptable sources of information include Stack Overflow, Quora, and your classmates’ code.

You should never read or copy another student’s solutions (code or otherwise), exchange files, or share your solutions with anyone else in the class until after everyone involved has turned in their work. If a discussion with another student helped you find your answer, mention that in a comment. It’s hard to tell the difference between uncredited help and plagiarism (because they’re the same thing).

If any of this is unclear, please: just ask us.

Failure to abide by these rules is considered plagiarism, and will result in severe penalties. The first offense typically results in failing the assignment and referral to the appropriate college office or committee—which may mean further consequences. See the CS Academic Honesty Policy and Pomona Academic Standards. for further information. Please don’t put anyone—me, you, or anyone else—in this unpleasant situation.

Accommodations

Pomona students seeking academic accommodations should contact disability support at the Dean of Students Office. You’ll need to meet with them to discuss appropriate accommodations and provide documentation as necessary.

Students from other colleges should contact their home college’s disability coordinator for accommodations. The coordinators are, to the best of our knowledge:

We’re in this together

This is the third run of this course; it's the first time through some of this material. Let’s make a deal. Our side: if things aren’t working, we’ll change them. Your side: if things aren’t working, you’ll tell us.