CS 4900/5900: Special Topics in Computer Science (Class#13964)

Fall 2016

Software Verification

A seminar for junior and senior CS majors and graduate students on programming languages and software verification, with hands-on exercise in the interactive theorem prover Coq.

Topics: logic; functional programming; inductive datatypes, recursion, and structural induction; operational, denotational, and axiomatic semantics; the simply-typed lambda calculus; the polymorphic lambda calculus; pi calculus; type systems and typechecking; SAT and SMT.

Lecture: MW 3:05pm-4:00pm, ARC 159
Lab: F 3:05pm-4:00pm, Stocker 192
Professor: Gordon Stewart (gstewart@ohio.edu)
Office Hours: MTh 11:00am-12:00pm (Stocker 355), or by appointment
Piazza Page: https://piazza.com/class/is5dd70qjbk2rp

Course Objectives

After completing the course, I expect students will have

Textbooks and Software

The primary text is Software Foundations by Pierce et al., a software verification and programming languages course available free and online. Before the first day of class, I encourage you to download and install the Coq proof assistant (version 8.4, not 8.5!), the tool upon which Software Foundations is based.

Two IDEs for Coq are available, the Emacs-based ProofGeneral and CoqIDE (bundled with Coq). I recommend CoqIDE for new Coq users (this is also the IDE we'll be using in class); ProofGeneral is good but requires more setup and some Emacs experience.

Periodically I may assign additional supplementary (optional but recommended) readings from Types and Programming Languages, Benjamin Pierce, and from The Formal Semantics of Programming Languages, Glynn Winskel. Both of these books are available on Amazon.


Some mathematical maturity (at the level of "I've seen and done proofs before"), facility with a couple different programming languages, and a desire to learn.

Course Structure

The course consists of twice-weekly lectures (Mondays and Wednesdays) and a weekly lab (Fridays), during which I'll be around to help with problems you may encounter completing the homeworks.

In addition to the weekly homework assignments, drawn primarily from Software Foundations, there will be a take-home midterm exam (Week 7, approximately 15% of your grade) and a final project (Week 15, approximately 35%). The weekly homeworks and attendance at lecture and lab are worth approximately 50%.

Blackboard will be used only to report grades. Up-to-date information on all other aspects of the course (assignment due dates, etc.) will be posted on this website.


The schedule is subject to revision.

Functional Programming, Coq
Week 1
Introduction to functional programming, Coq. Basic proofs.
Reading: Basics, Induction, Lists.
Homework: Assignment 0.
Week 2
More functional programming: polymorphism, implicit arguments, higher-order functions. Coq proof strategies, additional tactics.
Reading: Poly, Tactics.
Homework: Assignment 1.
Logic in Coq
Week 3
Logic in Coq, inductively defined propositions.
Reading: Logic, IndProp.
Homework: Assignment 2.
Monday, September 5: Labor Day, no class
Week 4
Logic in Coq continued, proof objects.
Reading: ProofObjects.
Homework: Assignment 3.
Modeling and Proving Systems
Week 5
The little imperative language Imp.
Reading: Maps, Imp.
Supplementary Reading: Winskel, Ch. 2, Secs. 2.1-2.5.
Homework: Assignment 4.
Week 6
Interlude: More Functional Programming (!) in Coq
Take-home Midterm: due Tuesday, 10/4.
Monday, October 3: Fall Semester Reading Day, no class
Program equivalence.
Reading: Equiv.
Homework: Assignment 5.
Week 8
Hoare Logic.
Reading: Hoare, Hoare2.
Homework: Assignment 6.
Week 9
Small-step Operational Semantics.
Reading: Smallstep, Auto.
Supplementary Reading: Winskel, Ch. 2, Sec. 2.6.
Homework: Assignment 7.
Lambda Calculus and Type Systems
Week 10
Type systems.
Reading: Types.
Supplementary Reading: TAPL, Chs. 1 and 8.
Homework: Assignment 8, Final Project Checkpoint #1.
Week 11
Untyped Lambda Calculus, Simply-Typed Lambda Calculus.
Reading: Stlc.
Supplementary Reading: TAPL, Chs. 5 and 9.
Homework: Assignment 9.
Week 12
More STLC: let-bindings, pairs, unit, sums, lists, recursion.
Reading: StlcProp, Typechecking MoreStlc.
Supplementary Reading: TAPL, Ch. 11.
Homework: Assignment 10.
Friday, November 11: Veterans Day, no class
Denotational Semantics, Distributed and Concurrent Systems
Week 13
Denotational semantics of regular expressions
Supplementary Reading: Winskel, Ch. 5., Regular-expression derivatives reexamined
Homework: Final Project Checkpoint #2.
Week 14
Denotational semantics of Imp; Pi Calculus
November 23-25: Thanksgiving Break, no classes
Week 15
Final Project Presentations
Fri. 12/2: Winter is coming, let's go SKI-ing!
December 5-9: Final Exams

Homework and Collaboration Policies

Unless otherwise noted, homework is due the Monday following the date it was assigned, by the start of class (3:05pm). Late homework assignments will be penalized according to the following formula: You may discuss the homework with other students in the class, preferably after you've attempted the problems on your own first. Just make sure to write the names of the students you spoke with, along with a brief summary of what you discussed, in a README comment at the top of each submission. Example:

(* README Gordon Stewart, Assn #1
I worked with X and Y. We swapped tips regarding the use of Coq's "rewrite" tactic. *)

However, under no circumstances are you permitted to share or directly copy code or other written homework material, except with course instructors. The code and proofs you turn in must be your own. Remember: homework is there to give *you* practice in the new ideas and techniques covered by the course; it does you no good if you don't engage!

In general, students in EECS courses such as this one should adhere to the Russ College of Engineering and Technology Honor Code, and to the OU Student Code of Conduct.

Students with Disabilities

If you suspect you may need an accommodation based on the impact of a disability, please contact me privately to discuss your specific needs. If you're not yet registered as a student with a disability, contact the Office of Student Accessibility Services first.