Course Objectives
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.
Prerequisites
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.
Schedule
The schedule is subject to revision.
Functional Programming, Coq
Week 1
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
Monday, September 5: Labor Day, no class
Week 4
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
W7:10/3-7
Week 8
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
Week 11
Untyped Lambda Calculus, Simply-Typed Lambda Calculus.
Reading:
Stlc.
Supplementary Reading:
TAPL, Chs. 5 and 9.
Homework:
Assignment 9.
Week 12
Friday, November 11: Veterans Day, no class
Denotational Semantics, Distributed and Concurrent Systems
Week 13
Week 14
Denotational semantics of Imp;
Pi Calculus
November 23-25: Thanksgiving Break, no classes
Week 15
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:
- < 1 hour late: 10% deduction;
- < 24 hours late: 25% deduction;
- < 48 hours late: 50% deduction;
- >= 48 hours late: 100% deduction.
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.