Course Overview

This course is designed to acquaint you with the fundamental ideas behind modern programming language design and analysis. Ultimately, you should come away with the ability to apply programming language techniques to your own projects.

The course has three broad topics:

The first part of this graduate-level course focuses on the semantics of a variety of programming language features (e.g., "what does a while loop really mean?"). We will study structural operational semantics as a way to formalize the intended execution and implementation of languages. Operational semantics concepts and notation are widely used in modern programming language research. We will survey axiomatic semantics, which provides a basis for verifying programs. Axiomatic semantics underlie research efforts in formal verification and bug finding (e.g., SLAM, which led to Microsoft's Static Driver Verifier). We will briefly look at denotational semantics as a prelude to abstract interpretation. Abstract interpretation also underlie research efforts in program analysis and bug finding (e.g., Astrée, which has been used by Airbus to analyze their flight control software).

The second part of this course provides an introduction to the study of type systems for programming languages. We will start our study with the simply-typed lambda calculus and then touch upon more advanced features such as types for imperative features, exceptions, and abstraction. Type systems abound in modern programming languages research.

The last part of the course covers special topics drawn from research in areas such as applications of program semantics to program analysis and verification.

In addition to these topics, students will have the opportunity to consider other related topics of interest in the form of a course project, most often in the form of a survey of recent research on a topic of interest.


The prerequisites for this course are programming and mathematical experience with prior exposure to several different programming languages, such as C, ML, and Java, which may be satisfied by taking CSCI 3155 or equivalent. The ideal programming experience is an undergraduate compilers course (e.g., CSCI 4555). The ideal mathematical experience is familiarity with mathematical logic and the ability to construct rigorous proofs (in particular by structural induction). Your desire to be exposed to this material is very important.

Advanced undergraduates may consider taking this course after talking with the instructor.


You will be responsible for the following:

Grading. There is no predetermined curve (i.e., I hope everyone gets an A based on the level of mastery demonstrated).

Resubmission Policy. This course is designed so that much of the learning happens on the homework assignments. To encourage iteration until mastery, you may "redo" any assignment via an oral interview with the instructor. This must be completed by the third to last week of the semester (November 22). You may request one interview per assignment up until the November 22 deadline. However, you may discuss your solutions with the instructors in office hours as much as you like before requesting the interview.

Late Assignment Policy. 25% of the total point value for the assignment will be deducted for any assignment that is late up to 3 days including weekends (i.e., on the 4th late day, the assignment will be accepted for comments but no longer for credit).

Make-Up Exam Policy. There will be no special or make-up examinations for any student (except in the case of emergency or the stated special accommodations).

Extra Credit and Participation. Extra credit opportunities may be offered during the course semester. Extra credit is recorded separately from normal grades and are only considered after final grades have been calculated. If your final grade is just below a grade cutoff, extra credit may bump you up to the next grade.

Collaboration. You are encouraged to collaborate on the assignments. Assignments are the main opportunity to learn material in this course. Everyone will submit assignments, and you must cite your collaborators explicitly.

Textbook and Resources

Textbook. Glynn Winskel. The Formal Semantics of Programming Languages. The textbook is on reserve in the Engineering Library.

The following are some other resources:


Both your ideas and also the clarity with which they are expressed matter—both in your English prose and your code!

We will consider the following criteria in our grading:


Piazza. We will be using Piazza for online, outside-of-class discussion. Rather than emailing questions to the teaching staff, questions should be posted on Piazza. I encourage you to make class-wide posts whenever possible, but there is an option to send an instructor-private message. You also have the option of posting anonymously.

Moodle. We will use Moodle for grades and protected resources. If you do not already have an account, please create one and join the course moodle. The enrollment key is in the welcome e-mail.

Off-Campus Access. The CU library has instructions for off-campus access to certain online resources (e.g., ACM Digital Library).


Computing. For a Linux environment, the following are some resources:

Collaboration Policy

You are welcome and encouraged to work together in learning the material. If you worked with someone on an assignment, or if your submission includes quotes from a book, a paper, or a web site, you should thank the source. Bottom line, feel free to use whatever resources that are available to you as long as you cite them in your submission.

We will go by the honor code set forth by the University:

All students of the University of Colorado at Boulder are responsible for knowing and adhering to the academic integrity policy of this institution. Violations of this policy may include: cheating, plagiarism, aid of academic dishonesty, fabrication, lying, bribery, and threatening behavior. All incidents of academic misconduct shall be reported to the Honor Code Council and those students who are found to be in violation of the academic integrity policy will be subject to both academic sanctions from the faculty member involved and non-academic sanctions given by the Honor Code Council (including but not limited to university probation, suspension, or expulsion).

Please refer to to view the specific guidelines. If you have any questions related to this policy, please contact the Honor Code Council at

Classroom Behavior

We trust and expect everyone to behave in a civil and courteous manner.

Discrimination and Sexual Harassment

We will go by the policies set forth by the University:

The University of Colorado at Boulder policy on Discrimination and Harassment, the University of Colorado policy on Sexual Harassment and the University of Colorado policy on Amorous Relationships apply to all students, staff and faculty. Any student, staff or faculty member who believes s/he has been the subject of sexual harassment or discrimination or harassment based upon race, color, national origin, sex, age, disability, creed, religion, sexual orientation, or veteran status should contact the Office of Discrimination and Harassment (ODH) at 303-492-2127 or the Office of Judicial Affairs at 303-492-5550. Information about the ODH, the above referenced policies and the campus resources available to assist individuals regarding discrimination or harassment can be obtained at

Special Accommodations

We will make every effort to make special accommodations that are reasonable and fair to all students. Please note that we will accept requests for adjustments during the first four weeks of class.


We will go by the disability guidelines set forth by the University:

If you qualify for accommodations because of a disability, please submit to the course staff a letter from Disability Services within the first four weeks of class so that your needs can be reasonably addressed. Disability Services determines accommodations based on documented disabilities (303-492-8671, Willard 322).

If you have a temporary medical condition or injury, see these guidelines.

Disability Services' letters for students with disabilities indicate legally mandated reasonable accommodations.

Religious Observances

We will go by the policy for religious observances set forth by the University:

Campus policy regarding religious observances requires that faculty make every effort to deal reasonably and fairly with all students who, because of religious obligations, have conflicts with scheduled exams, assignments or required attendance. In this class, we will try to accommodate religious conflicts in a reasonable manner. Please check the exam dates and submit all requests for adjustments within the first four weeks of class.

See for further details on the policy.


This course is based on similar courses taught by George Necula at the University of California, Berkeley and Wes Weimer at the University of Virginia.