7400: iPPL (Fall 2024)

Fall 2024
Chris Martens
Monday/Thursday 11:45-1:25 ET
Ell Hall 410
First lecture will be Monday, September 9

Welcome to Intensive Principles of Programming Languages.

The course has two objectives. The first one is to introduce students to the research area of programming languages. Thus, we cover foundational theoretical ideas and practical techniques for modeling and analyzing programming languages. The second one is to expose students to the basic principles of research in computer science: how to articulate questions and recognize solutions.


Course Information

Instructor Chris Martens, c.martens@northeastern
Office Hours by appointment
Course Communication Piazza
Lecture Notes Lectures notes will be posted on the schedule page
Textbook (optional) Robert Harper,
Practical Foundations for Programming Languages (Second Edition),
Cambridge University Press, April 2016.
Graded Coursework Biweekly problem sets, final mini-project
Homework Homework assignments are posted on the assignments page
Homework submission is on Gradescope

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

  • write down formal definitions of programming languages via their type system and operational semantics
  • identify how different type systems capture essential properties of diverse computational phenomena
  • state and prove type soundness theorems or exhibit counterexamples
  • recognize and avoid common fallacies in proofs and language design
  • appreciate language design and formal proof as two intertwined processes, in which formal properties of interest both inform and reflect language design choices
  • write small programs to illustrate the expressive power and limitations of different language constructs
  • state and prove properties of individual programs based on their semantics or exhibit counterexamples
  • articulate how the mathematical properties of a given programming language (or language construct) affect practical considerations like compositional reasoning, usability, expressivity, and ease of implementation
  • appreciate the deep philosophical and mathematical underpinnings of programming language design

Core topics:

  • Static and dynamic semantics
  • Type soundness
  • Proof by structural and rule induction
  • Hypothetical judgments and substitution
  • Propositions as types, natural deduction
  • Lambda calculus, Church encodings
  • Functions, eager and lazy products, sums
  • Recursive types, inductive definitions
  • Parametric polymorphism, data abstraction, existential types
  • Imperative programming
  • Meaning-preserving translations between languages


Prior Versions of This Course

Credits

Course website design based on Frank Pfenning's site for 15-814