15-814 Types and Programming Languages

Fall 2018
Frank Pfenning
TuTh 10:30-11:50
GHC 4307
12 units
First lecture will be Tue Sep 4

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.


Prior Versions of This Course

Class Material

Schedule Lecture notes and additional readings
Assignments Homework assignments and due dates
Resources Links to other resources

Course Information

Lectures Tu Th 10:30-11:50, GHC 4307
Instructuor Frank Pfenning, fp@cs
Office Hours Fri 12noon-1:00pm, GHC 6017
Teaching Assistant Ryan Kavanagh, rkavanagh@cs
Office Hours Wed 10:00am, GHC 6207
Course Communication piazza.com/cmu/fall2018/15814
Textbook and Notes Robert Harper,
Practical Foundations for Programming Languages (Second Edition),
Cambridge University Press, April 2016.
Additional notes may be posted on the schedule page.
Credit 12 units
Grading 60% Homework, 15% Midterm, 25% Final
Homework Homework assignments are posted on the assignments page.
Midterm Date TBA, in class.
Closed book.
Final Date, Time, Location TBA
Closed book.
Home http://www.cs.cmu.edu/~fp/courses/15814-f18/

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: Many of these topics are tentative, depending on the pace of the course and participant interests.

  • Static and dynamic semantics
  • Preservation and progress
  • Hypothetical judgments and substitution
  • Rewriting
  • ...others to be added...


[ Home | Schedule | Assignments | Resources ]

fp@cs
Frank Pfenning