CS595: Topics and Applications in Programming Languages, Fall 2021

Instructor: Stefan Muller,
Lectures: Mon, Wed. 11:15-12:30, Stuart 204

Course Description     Schedule     Applications     Policies     Project

Course Description

Type systems provide many programming languages with a certain guarantee of runtime safety, usually that type errors will not occur at runtime. More advanced and exotic type systems can guarantee more interesting properties of programs, and are used in active research to guarantee information security, resource (e.g., time, energy, space) usage bounds, safety properties of concurrent programs and even to prove complex mathematical theorems. This course will teach the formal theory underlying the study of programming languages and, in particular, type systems, and the techniques that are used to prove properties of programming languages. We will also explore interesting applications of type systems in modern research, including some drawn from those above and others based on students' interest and research.

Students will complete a final project in which they design a type system or language model (or extension of an existing one) to solve an interesting problem related to their own research or other interests.

Prerequisites: There are no formal prerequisites beyond mathematical sophistication and experience programming in any statically typed programming language (e.g., C/C++, Rust, Java, Haskell, ML). In addition, experience with functional programming will be helpful but not required.

Advanced undergraduate students are welcome to take this class, but may require permission to register.

Textbook: There is no required textbook for the class.

For students wanting a reference and additional depth into some of the material, the following books may be useful, but there is no need to buy one for the class.
Robert Harper, Practical Foundations for Programming Languages (Second Edition), Cambridge, 2016.
Benjamin C. Pierce, Types and Programming Languages, MIT, 2002.

Course Objectives: After taking this class, students should be able to:

  • Understand the models, notations and techniques used by Programming Languages researchers to formalize languages and systems
  • Formally prove properties about programming languages and programs
  • Use the above techniques to design new type systems and models to formalize and prove properties about their favorite language features and systems
  • Read and understand a research paper in the field of Programming Languages


Note: this schedule is tentative and subject to change. The last ~1/3 of the class will consist largely of presentations; the schedule is TBD.

August 23 Intro and Rule induction Notes
25 Statics and dynamics Notes  
30 Type safety Notes
September 1 Binding and substitution Notes HW0 Out
6 NO CLASS - Labor day
8 Lambda calculus Notes  
13 Sums and Products Notes/STLC
15 The Curry-Howard isomorphism Notes  
20 Polymorphism Notes
22 General recursion and recursive types Notes HW1 Out
27 Subtyping Notes
29 Modeling state Notes  
October 4 Garbage Collection Notes
6 Big-step and cost semantics Notes  
7     HW1 Due
11 NO CLASS - Fall break
13 Parallelism Notes  
18 Stack machines Notes HW2 Out
20 NO CLASS    
25 Evaluation contexts Notes
27 Linear type systems Notes  
November 1 Modal type systems Notes  
3 Paper: PriML Notes HW 2 Due
8 Paper: QWire
10 Paper: L3    
15 Paper: Secure Flow Analysis
17 Paper: Automated Amortized Resource Analysis    
22 Paper: WebAssembly
24 Thanksgiving - NO CLASS    
29 How to write a research paper/TBA
December 1 Final project presentations/wrapup


This course is largely about applying programming language techniques (which you'll learn in the first ~2/3 of the class) to solve problems in other areas. Your paper presentation and your final project will focus on these applications. Here are some ways people have applied PL techniques to solve other problems (both inside and outside of computer science!) for inspiration.

When thinking about your own application for your project, you should feel neither constrained to pick something from this list nor forbidden from picking something already on the list. These are only examples. I'd encourage you to pick something related to your own interests (CS or non-CS) and/or research (if you're doing research). If you're having trouble figuring out how to connect an interest to PL, we'll discuss it and try to figure something out!

The linked papers will be quite difficult to read at first; hopefully over the first part of the class, you'll find them easier. However, we still may not learn all of the techniques and notations used in these papers in the class. If you'd really like to understand one of these papers and still find it difficult, I'd be happy to discuss it!



The plan is for this class to meet in person, as discussion and participation will be important for the nature of the class. Remote participation can be arranged with the instructor if necessary for particular classes (e.g., if quarantine restrictions, etc., prevent you from being on campus for an extended period of time). The course modality (in-person/online) and schedule are of course, subject to possible change based on changes in IIT or Chicago policies.


Final grades will be based on the following:

40%Homeworks (3-4, in the first ~2/3 of the class)
20%Paper Presentation
30%Final Project

Late Days/Late Work

Each student has 4 "late days" to use on homeworks over the course of the semester. Using a late day extends the deadline by 24 hours. You do not need to let me know you're using late days; they'll be deducted automatically when you hand in the work.

Important: No more than two late days may be used on any one assignment. Late days may not be used on the paper presentation or the final project.

After 48 hours, or if you have used up your late days, late work will not be accepted without the instructor's permission (and will be granted only for good reasons, e.g., medical emergencies).


Homeworks are to be completed individually. Discussing general course concepts with other students to get a better understanding is permitted (and encouraged!). More specific discussions about homework questions is permitted as long as:

  • Discussion is two-way: it's not just one person giving the other help.
  • Discussion is at the level of concepts and general strategies (e.g., an approach to solving a problem), not specific answers or proofs.
  • All students involved write up their solutions independently.

Policies for the paper presentation and final project are still TBD, but it is likely working with a partner/team will be allowed.

Illinois Tech's Sexual Harassment and Discrimination Information

Illinois Tech prohibits all sexual harassment, sexual misconduct, and gender discrimination by any member of our community. This includes harassment among students, staff, or faculty. Sexual harassment of a student by a faculty member or sexual harassment of an employee by a supervisor is particularly serious. Such conduct may easily create an intimidating, hostile, or offensive environment.

Illinois Tech encourages anyone experiencing sexual harassment or sexual misconduct to speak with the Office of Title IX Compliance for information on support options and the resolution process.

You can report sexual harassment electronically at iit.edu/incidentreport, which may be completed anonymously. You may additionally report by contacting the Title IX Coordinator, Virginia Foster at foster@iit.edu or the Deputy Title IX Coordinator at eespeland@iit.edu.

For confidential support, you may reach Illinois Tech's Confidential Advisor at (773) 907-1062. You can also contact a licensed practitioner in Illinois Tech's Student Health and Wellness Center at student.health@iit.edu or (312)567-7550.

For a comprehensive list of resources regarding counseling services, medical assistance, legal assistance and visa and immigration services, you can visit the Office of Title IX Compliance website at https://www.iit.edu/title-ix/resources.