UW CSE505 — Programming Languages

Autumn 2026 Schedule: Tue Thu 10:00–11:20, ECE 003
Office Hours: Tuesdays 15:00 CSE2 274, Thursdays 12:00 CSE2 274
Grading: Uncurved clipped sum of scaled homework-problem scores.

Each homework guarantees a fixed part of your final grade if solved. There are more problems than needed to earn a perfect grade. In case an assignment turns out to be significantly more challenging than anticipated, at most 50% of its intended credit may be awarded to everybody regardless of completion.

LLM policy: use to gain understanding, use understanding to do homework, upload transcripts.

Unless otherwise specified, follow UW CSE policy AI for Ideation and Refinement

The assignments were designed to be completed without use of LLMs (the "AI" defined in the department policy). However, you may find it helpful to use some in lieu of a search engine, for example to understand (infamously dense) error messages from Rocq or to locate a tactic that would perform the desired low-level proof step at a goal you are trying to prove.

As solutions to the homeworks are both in the training data of most LLMs and reachable through simple web-search tool calls, it would defeat the purpose of this class to ask an LLM for a solution to the stated problems. We already know it would find one, maybe even one that we wrote. It is your responsibility to make sure your prompts steer the slop machine away from regurgitating a solution, as prose or as code.

If you use any LLM-based tools, you must upload full transcripts of all class-related prompts and responses, regardless of whether the output ended up in your solution.

Extensions: Automatic 24h extension, 36h one-time extension, official accommodations.

A 24-hour extension is applied automatically to every due date; you do not need to request it separately from submitting the assignment.

We generally do not grant exceptions directly, especially last-minute or after-the-fact requests. However, we will honor official academic accommodations.

Weeks 1-2: Diving In

Class 1: Programming Languages & Proof Assistants (install instructions here) [slides] [code]

We will assume you have a working POSIX-ish development enviornment (make, etc). Workable options include Linux, Mac, WSL.

Most homework is completed in the Rocq proof assistant. Productive use of Rocq requires an "IDE", for incremental compilation. Recompiling from scratch after every change is preposterously slow.

Finally, install Rocq if you have not done so already:

Test by creating test.v using your editor and running past Compute 1+1. in it.

Class 2: Lists, Trees, Syntax, Semantics [slides] [code]
Assignment 1 (due 5pm after Class 2): Using a proof assistant.

Available on Gitlab cse505-26au: git clone https://gitlab.cs.washington.edu/cse505-26au/cse505-26au.git

Upload to HW1 Gradescope; Entry Code: G76ZWE

Class 3
Reading 1 (due 5pm after Class 3): Read Reflections on Trusting Trust.

Read Reflections on Trusting Trust - Ken Thompson - 1984. Write a 2-paragraph reflection or commentary. Submit to Gradescope.

Class 4: Reflections on Trusting Trust discussion
Homework 2 (due 5pm after Class 5): nat, list, and induction.

Available on Gitlab cse505-26au: git clone https://gitlab.cs.washington.edu/cse505-26au/cse505-26au.git

Upload to Gradescope

Resources:

Class 5: Induction practice and interpreters
Classes 5 and 6: Transition systems and invariants [slides] [code]

Discussion of the most general modeling technique in this course, transition systems. It resolves some limitations of interpreters (for example, for modeling nonterminating code) at the cost of some framework weight. Induction and strengthening induction hypotheses continues to be very important with either technique.

Reading 2 (due 5pm Thu Oct 22): Read Social Processes and Proofs of Theorems and Programs.

Read Read Social Processes and Proofs of Theorems and Programs - Richard DeMillo, Richard Lipton, Alan Perlis. Write a 2-paragraph reflection or commentary. Submit to Gradescope.

Community Notes

Past offerings of CSE505

Homework 3 (due 5pm on Oct 29): transition systems and invariants.

Available on Gitlab cse505-26au: git clone https://gitlab.cs.washington.edu/cse505-26au/cse505-26au.git

Upload to Gradescope by Tuesday 5pm for feedback. Use "QUESTION:" in your submission to call our attention to what you would like feedback on - perhaps strengthened inductive invariants, or another creative aspect. Upload final solution by Thursday 5pm.

Resources: