About this course

CSCI 181-N “Software Foundations” is an elective studying the formal construction and verification of correct software. We’ll be using Software Foundations as our textbook. Please use our local copy rather than the original, public copy.

Instructor and TAs

This course is taught by me—Michael Greenberg.

I am available for appointments via and on Friday afternoons from 1-2pm.

Piazza

We will be using Piazza for class discussion. Instead of emailing questions directly to me, 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 either CS 81 or CS 131.

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 immediately.

We’ll be using Coq 8.4pl6, though any patch of 8.4 should work. Do not use Coq 8.5, which is incompatible with our textbook. (UPDATE: as of 2016-02-08, Coq8.5 should be fine.) You’ll probably want to install Coq on your own computer, but it should be available (along with CoqIDE) on all of the lab machines and on project5. In addition to CoqIDE, which comes with Coq itself, I recommend Proof General, an emacs mode for working with Coq scripts.

Lectures and readings

The course home page has a listing of the planned material, which will be drawn from Software Foundations.

Breaking the fourth wall

Wednesdays will introduce new material, while Mondays will be discussion focused.

Every Monday, a few students will present the more interesting exercises from the homework, and we’ll all discuss the material in the recent chapter. You’ll be able to sign up for specific Mondays on the first week of class—there will be a sign-up sheet on the first day and on my office door. You’ll be expected to sign up to present on four different days. Signups are due January 27th, along with the first homework.

I expect you to take these presentations seriously. If you know you’re presenting on given Monday, I urge you to talk to me earlier, even if you’re not having trouble. I have office hours on Fridays at 1pm to accommodate this specifically, but we can arrange another time, too.

Grading

Coq will be the main grader for this course: if Coq accepts your proof, it’s correct! We will also be doing some less formal proofs, which will be graded by hand.

There will be homework nearly every week: given a lecture on Wednesday, the associated homework is due the next Wednesday before class. There will be no exams, but there may be in class quizzes. Your grade for the course will be determined by your aggregate grades on:

  • homework (75%) and
  • class participation and quizzes (25%).

There is no final per se: HW14 is your final, and will be due on Thursday, May 12th at 5pm. Seniors will have a slightly different final, to accommodate graduation schedules.

Turning in homework

Homework will be a mix of Coq and paper proofs, typically as a single file. You’ll submit homework in a method TBD; it will be due before class on Wednesdays.

Homework that doesn’t compile, due to syntax or type errors, gets no points. Homeworks will be graded not only for correctness, but for clarity.

Late policy

This course is rife with dependencies and is very homework-oriented; much of the learning you do will happen while you’re doing homework! Accordingly, I have a very strict lateness policy: 20% off per day, counting the weekend as a single day.

So, if a homework is due on Wednesday at 2:45pm, homeworks submitted by 2:45pm on Thursday can get up to 80%; 2:45pm on Friday gets 60%; 2:45pm on Sunday gets 40%, and 2:45pm on Monday gets up to 20%. After that, homeworks will not be accepted.

Expectations

Learning any new language is challenging, and Coq is very different from conventional programming languages. I encourage you to help each other learn the language and I 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 me.

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 Jan Collins-Eaglin in the Dean of Students Office. You’ll need to meet with Jan 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:

We’re in this together

This is my first time teaching this course to undergraduates. Let’s make a deal. My side: if things aren’t working, I’ll change them. Your side: if things aren’t working, you’ll tell me.