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.

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

- 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

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.

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.

Introduction to functional programming, Coq. Basic proofs.

Reading:
Basics,
Induction,
Lists.

Homework: Assignment 0.

More functional programming: polymorphism, implicit arguments,
higher-order functions. Coq proof strategies, additional tactics.

Reading:
Poly,
Tactics.

Homework: Assignment 1.

The little imperative language Imp.

Reading:
Maps,
Imp.

Supplementary Reading:
Winskel, Ch. 2, Secs. 2.1-2.5.

Homework: Assignment 4.

Interlude: More Functional Programming (!) in Coq

Take-home Midterm : due Tuesday, 10/4.

Small-step Operational Semantics.

Reading:
Smallstep,
Auto.

Supplementary Reading:
Winskel, Ch. 2, Sec. 2.6.

Homework : Assignment 7.

Type systems.

Reading:
Types.

Supplementary Reading:
TAPL, Chs. 1 and 8.

Homework : Assignment 8,
Final Project Checkpoint #1 .

Untyped Lambda Calculus, Simply-Typed Lambda Calculus.

Reading:
Stlc.

Supplementary Reading:
TAPL, Chs. 5 and 9.

Homework : Assignment 9.

More STLC: let-bindings, pairs, unit, sums, lists, recursion.

Reading:
StlcProp,
Typechecking
MoreStlc.

Supplementary Reading:
TAPL, Ch. 11.

Homework : Assignment 10.

Denotational semantics of regular expressions

Supplementary Reading:
Winskel, Ch. 5., Regular-expression derivatives reexamined

Homework:
Final Project Checkpoint #2.

Denotational semantics of Imp;
Pi Calculus

- < 1 hour late: 10% deduction;
- < 24 hours late: 25% deduction;
- < 48 hours late: 50% deduction;
- >= 48 hours late: 100% deduction.

```
(*
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.