15-814 Types and Programming Languages

Fall 2020
Frank Pfenning
Tue Thu 9:50-11:10 ET
REMOTE
12 units
First lecture will be Tue Sep 1

This graduate course provides an introduction to programming languages viewed through the lens of their type structure.

Prerequisites: This is an introductory graduate course with no formal prerequisites, but an exposure to various forms of mathematical induction will be helpful. Enterprising undergraduates and masters students are welcome to attend this course.


Class Material

Schedule Lecture notes and additional readings (combined lecture notes, 11mb)
Assignments Homework assignments and due dates
Resources Policy details and links to other resources
Software Software in support of the course

Course Information

Lectures Tue Thu 9:50-11:10, Zoom
Instructor Frank Pfenning, fp@cs
Community Office Hour, Thu 2:00-3:00 (starting Sep 3)
Personal Office Hour, Mon 10:00-11:00 (starting Sep 14)
Personal Office Hour, Wed 12:00-1:00 (starting Sep 2)
Zoom links on Canvas
See also information on Office Hours
Course Communication piazza.com/cmu/fall2020/15814/home
Lectures Notes Lectures notes will be posted on the schedule page,
within a day or two after of the lecture
Textbook (optional) Robert Harper,
Practical Foundations for Programming Languages (Second Edition),
Cambridge University Press, April 2016.
Credit 12 units
Grading 540 pts homework, 150 pts midterm project, 250 pts final project
Homework Homework assignments are posted on the assignments page
Homework submission is on Canvas
Midterm The midterm exam is replaced by Mini-Project 1
Final The final exam is replaced by Mini-Project 2
Home http://www.cs.cmu.edu/~fp/courses/15814-f20/

Learning objectives: After taking this course, students will be able to

  • define programming languages via their type system and operational semantics
  • draw from a rich set of type constructors to capture essential properties of computational phenomena
  • state and prove the preservation and progress theorems or exhibit counterexamples
  • recognize and avoid common fallacies in proofs and language design
  • write small programs to illustrate the expressive power and limitations of a variety of type constructors
  • state and prove properties of individual programs based on their semantics or exhibit counterexamples
  • critique programming languages and language constructs based on the mathematical properties they may or may not satisfy
  • appreciate the deep philosophical and mathematical underpinnings of programming language design

Core topics:

  • Static and dynamic semantics
  • Preservation and progress
  • Hypothetical judgments and substitution
  • Propositions as types, natural deduction, sequent calculus
  • The untyped lambda-calculus
  • Functions, eager and lazy products, sums
  • Recursive types
  • Parametric polymorphism, data abstraction, existential types
  • K machine, S machine, substructural operational semantics
  • Shared-memory concurrency, session types

Prior Versions of This Course


[ Home | Schedule | Assignments | Resources | Software | Software ]

fp@cs
Frank Pfenning