After completing the course, I expect students will have
- Mastered essential aspects of programming and proof in the theorem prover Coq
- Gained experience applying PL tools — operational semantics, denotational semantics,
Hoare logic — to model and prove properties of software systems
- Understood the basics of type systems, type theory, and lambda calculi
- Gained familiarity with other aspects of programming languages theory, including the pi calculus
and elementary domain theory
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.
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
Logic in Coq
More functional programming: polymorphism, implicit arguments,
higher-order functions. Coq proof strategies, additional tactics.
Homework: Assignment 1
Monday, September 5: Labor Day, no class
Modeling and Proving Systems
The little imperative language Imp.
Winskel, Ch. 2, Secs. 2.1-2.5.
Homework: Assignment 4
Interlude: More Functional Programming (!) in Coq
Take-home Midterm: due Tuesday, 10/4.
Monday, October 3: Fall Semester Reading Day,
Lambda Calculus and Type Systems
Small-step Operational Semantics.
Winskel, Ch. 2, Sec. 2.6.
: Assignment 7
Untyped Lambda Calculus, Simply-Typed Lambda Calculus.
TAPL, Chs. 5 and 9.
: Assignment 9
Friday, November 11: Veterans Day, no class
Denotational Semantics, Distributed and Concurrent Systems
Denotational semantics of Imp;
November 23-25: Thanksgiving Break, no classes
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
- < 1 hour late: 10% deduction;
- < 24 hours late: 25% deduction;
- < 48 hours late: 50% deduction;
- >= 48 hours late: 100% deduction.
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