# Advanced Topics in Programming Languages

Topics may include, but are not limited to: lambda calculus; recursive, polymorphic, substructural and dependent type systems; effects and region types; parametricity; logical relations; type inference; verification; and applications (e.g., in security, privacy, and machine learning).

Meeting: T/Th 10:30–11:50 a.m., ARC 140
Instructor: Gordon Stewart (gstewart@ohio.edu)
Office Hours: T 3-4:30pm

### Textbooks

I'll be assigning readings from academic papers as well as from the following core textbooks:

TAPL: Types and Programming Languages, by Benjamin Pierce
ATTAPL: Advanced Topics in Types and Programming Languages, ed., Pierce
PLF: Programming Language Foundations, by Pierce et al.

### Prerequisites

CS3200 Organization of Programming Languages
CS 4201/5201 Software Verification

### Course Structure

We'll meet T/Th from 10:30-11:50am. Attendance in class is required.

Homework consists of programming and written assignments. There will be no midterm nor final but instead an extensive (research-oriented) final project.

The grading breakdown is roughly as follows:

ComponentWeight
Homework40%
Attendance10%
Final Project50%

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

Assignments Key:
Written Assignment DUE
Programming Assignment DUE
Unless otherwise noted, assignments are due at 11:59pm.

### Schedule (Tentative)

Functional Programming and Type Systems
W1: 1/15-19
Review: Simply-typed lambda calculus (STLC)
Intro. to Haskell (for Coq, OCaml and Pyret programmers)
Reading: TAPL 5, 6, 9; PLF Stlc
Reading: Intrinsically-Typed Definitional Interpreters for Imperative Languages by Poulsen et al.
Code: STLC.hs
W2: 1/22-26
Review: Syntactic type safety proofs (preservation+progress)
STLC extensions: products, sums, references
Recursive and existential types, abstraction
Reading: TAPL 11, 13
W3: 1/29-2/2
The polymorphic lambda calculus (System F)
Church encodings (bools, numbers, existentials, etc.)
Higher-order types, kinds; F_\omega
Reading: TAPL 23, 29-30
Th 2/1: Written Assignment #1
Th 2/1: Final Project Checkpoint #1
Code: F.hs
W4: 2/5-9
Dependent type systems
Generalizing the lambda cube (pure type systems)
Th 2/8: Programming Assignment #1
Proof Techniques and Program Logics
W5: 2/12-2/16
Program equivalence
Logical relations and parametricity
Reading: TAPL 12, Theorems for free! (P. Wadler), P&P Considered Boring! (slides by D. Dreyer)
W6: 2/19-2/23
Step-indexing, with applications
Reading: Appel and McAllester (2001)
W7: 2/26-3/2
Reasoning about imperative programs: Hoare logic, separation logic, separation algebras
Reading: Separation Logic, Reynolds (2002)
Th 3/1: Final Project Checkpoint #2
W8: 3/5-9
Experiments with Verifiable C (VST), Iris
Reading: Iris from the ground up
W9: 3/12-16 - SPRING BREAK
Applications/Grab Bag
W10: 3/19-23
Applications in security, information-flow
Reading: Secure Information Flow by Self-Composition, Barthe et al. (2004)
W11: 3/26-30
Applications in privacy, differential privacy
Reading: Differential Privacy: A Survey of Results, Dwork (2008)
Th 3/29: Written Assignment #2
Th 3/29: Final Project Checkpoint #3
W12: 4/2-6
W13: 4/9-13
Probabilistic couplings
Reading: Chapter 2 of Probabilistic Couplings for Probabilistic Reasoning by Hsu (2017)
Th 4/12: Final Project Checkpoint #4
W14: 4/16-20
NO CLASS (Most people will be away at ESOP)
W15: 4/23-27
Final project presentations
Th 4/29: Programming Assignment #2
4/30-5/4: Final Exam Period
5/4: Final Project Written Reports

### Homework and Lateness Policy

Homework will usually be due Thursdays by 11:59pm (unless otherwise indicated in the syllabus). Late homework assignments will be penalized according to the following formula:
• Up to 24 hours late: no deduction, for a max 2 late homeworks per student across the entire semester
• Homeworks later than 24 hours, or from students who have already turned in 2 late homeworks, will receive 0 points.

### Academic Honesty Policy

#### Acceptable Collaboration Matrix

Instructor/GANoninstructor (e.g., Another Student)
Youall collaboration allowedhigh-level discussion (of the problems, not your code!) allowed but only after you've started the assignment; must be documented in README as described below
You may discuss the homework with other students in the class, but only after you've attempted the problems on your own first. If you do discuss the homework problems with others, 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 Name: Gordon Stewart Assignment: A0 Collaboration: I spoke with X and Y about Z. *) 

However, under no circumstances are you permitted to share or directly copy code or other written homework material, except with course instructors. If I discover that you've cheated on an assignment, you'll get an automatic 0 along with an immediate referral to the Office of Community Standards, which will likely take disciplinary action against you. 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 must adhere to the Russ College of Engineering and Technology Honor Code, and to the OU Student Code of Conduct. If you haven't ever read these documents, please do so.

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