15-312/15-652 Foundations of Programming Languages

Course information


Lectures: Tue/Thu 13:30-14:50 Zoom (see Piazza) Jan Hoffmann
Section A: Wed 12:30-13:20 Zoom (see Piazza) Junqing (Jacky) Zhou
Section B: Wed 13:30-14:20 Zoom (see Piazza) Yinglan Chen
Section C: Wed 14:30-15:20 Zoom (see Piazza) Erin Zhang
Midterm Exam: Thu, March 5, 13:30-14:50 GHC 4307 In class, open book
Final Exam: Thu, May 7, 8:30-11:30 Gradescope Three hours, open book

Course Staff and Office Hours

Instructor: Jan Hoffmann Thu 15:00-16:00 Zoom (see Piazza)
Teaching Assistant: Yinglan Chen Tue 16:00-18:00 Zoom (see Piazza)
Teaching Assistant: Erin Zhang Mon 16:00-18:00 Zoom (see Piazza)
Teaching Assistant: Junqing (Jacky) Zhou Wed 17:00-19:00 Zoom (see Piazza)
Administrator: Amanda Hornick (no hours) GHC 7025


The pre-requisites for this course are 15-210 or 15-251. The course emphasizes both principles and practice. Accordingly, proficiency with Standard ML is required, as is experience with writing proofs. Master's students wishing to enrol must obtain permission of the instructor prior to doing so.


This course introduces the fundamental principles of programming language design, semantics, and implementation. For more information on the course philosophy, read Why Study Programming Languages?.

After completing this course you will have acquired the following knowledge and skills:

  1. Understanding of a broad range of programming language concepts, including those found in most popular programming languages, all in a single mathematical framework.
  2. Understanding of the concepts of abstract syntax, and the binding and scope of identifiers in a program. Be able to prove properties of languages by structural induction, respecting renaming of bound identifiers.
  3. Ability to give a mathematically precise definition of the statics (type system) and dynamics (execution behavior) of a programming language.
  4. Mastery of the concept of safety for a programming language, be able to prove that a language is safe, or derive a counterexample to its safety.
  5. Ability to implement an interpreter for a broad range of programming languages that is derived directly from its defined syntax, statics, and semantics.
  6. Understanding of how to integrate multiple features in a language and ensure that the combination is sensible.

It is not a goal of this course to provide a survey of popular languages, as doing so has no enduring educational value, and would only reinforce oft-repeated mistakes in language design.

Lecture and recitation

Please see the schedule of lectures for the lecture topics and links to the readings and assignments.

Lecture is a primary source of information in this course, with recitation serving to amplify and reinforce the main concepts in the course. You are strongly urged to attend lecture and recitation every week, and are in any case responsible for the material presented therein.

Recitations are held weekly on Wednesdays. Attendance at recitation will be recorded, and, from time to time, quizzes with recorded grades may be given in recitation. See Grading for how recitation counts towards your grade.


Please see the homework assignments page for more information on submitting homework and for the current assignments.

Homework will account for 50% of your grade in this course.

This semester homework will be submitted in two places. Written homework will be submitted to Gradescope. Code solutions will be uploaded to Autolab in the form of a tar file. In order to create the tar file we will be providing a makefile. Autolab will also validate that submissions contain all the relevant files and compile successfully. All grades will be released on Autolab.

Proofs in this class are expected to follow a particularly rigorous, formal style. This will likely be unfamiliar to you compared proofs you've written in other classes. See this handout for more information.



There will be a 1hr 20min, in-class, open-book midterm examination on Thu, March 5, 13:30-14:50 that will account for 20% of your grade.


There will be a three-hour, open-book final examination during the finals week that will account for 30% of your grade.


Homework will account for 50% of your grade, the midterm 20%, and the final 30%. Your letter grade will be determined in part based on your performance relative to the rest of the class, though we have no pre-determined distribution in mind. We will also consider extra credit on the assignments and participation in recitation and lecture when determining letter grades. Extra credit and participation do not count towards your numeric average, but, for example, they might cause a student on the border to receive an A instead of a B (or vice versa!).


Robert Harper, Practical Foundations for Programming Languages (Second Edition). Cambridge University Press, 2016.

Please see the PFPL Home page for Supplementary Notes to the text that will be used in this class.


The programming language for this course is Standard ML, using the Standard ML of New Jersey (SML/NJ) implementation.

Please see course software for further information on programming with Standard ML and on using LaTeX for document preparation.

Some useful LaTeX style files and samples may be found in the tex directory.

Getting help

The Discussion Group is the first place to look for answers to your questions, and to post questions of your own. Piazza allows questions to be posted to the instructors only, if you wish, but you may also post a question publicly so that everyone can see it, and see the answers that are posted.

The second place to look for help is in your recitation section. One purpose of recitation is to clarify the course material presented in lecture and in readings. You should attend your section regularly, and feel free to ask questions!

The third place to look for help is to visit your teaching assistant or the professor during office hours. The course staff are available during these times to help you with homework and answer any questions you may have about the course material.

If all else fails, then you may make a private appointment with either the TA's or the professor simply by sending email and suggesting times to meet.

Your well-being

Don’t forget that this is just a course. You can contact the instructor or your undergrad adviser with any concerns or issues.

Take care of yourself. Do your best to maintain a healthy lifestyle this semester by eating well, exercising, avoiding drugs and alcohol, getting enough sleep and taking some time to relax. This will help you achieve your goals and cope with stress.

All of us benefit from support during times of struggle. You are not alone. There are many helpful resources available on campus and an important part of the college experience is learning how to ask for help. Asking for support sooner rather than later is often helpful.

If you or anyone you know experiences any academic stress, difficult life events, or feelings like anxiety or depression, we strongly encourage you to seek support. Counseling and Psychological Services (CaPS) is here to help: call 412-268-2922 and visit their website. Consider reaching out to a friend, faculty or family member you trust for help getting connected to the support that can help.

If you or someone you know is feeling suicidal or in danger of self-harm, call someone immediately, day or night:

Academic integrity

As a condition for taking this course, you are responsible for compliance with the University Policy on Academic Integrity and Plagiarism.

In this course, you are authorized to use the books and notes linked from this web site, as well as any other sources specifically allowed by the course staff. Any other source, including assignment solutions from past semesters, is unauthorized.

You are allowed to discuss homework assignments with other students. However, in order to ensure that the work you submit is still your own, we insist that you adhere to a whiteboard policy regarding these discussions: you are not allowed to take any notes, files, or other records away from the discussion. For example, you may work on the homework at the whiteboard with another student, but then you must erase the whiteboard, go home, and write up your solution individually. We take your ability to recreate the solution independently as proof that you understand the work that you submit.

This policy is our attempt to balance the tension between the benefits of group work and the benefits of individual work. We ask that you obey the spirit of the policy, as well as the letter: ensure that all work you submit is your own and that you fully understand the solution. This is in your best interest: the exams constitute a significant part of your letter grade, they will be timed, and they will draw heavily on the terminology, concepts, and techniques that are exercised in in the homework. It is unlikely that you will be able to do well on the exams if you do not take full advantage of the learning opportunity afforded by the homework assignments.

No recording permitted

No student may record or tape any classroom activity without the express written consent of the instructor. If a student believes that he/she is disabled and needs to record or tape classroom activities, he/she should contact the Office of Disability Resources to request an appropriate accommodation.

Author: Robert Harper
Last modified: Thu Dec 5 16:28:29 EST 2019