Moving away from concrete syntax to focus on the structure of programs.
The text that a programmer writes, complete with commas, semicolons, and parentheses.
The rules that dictate how the program executes step-by-step at runtime. The Lambda Calculus ( -calculus)
is a rigorous computer science course at Carnegie Mellon University (CMU) that explores the mathematical and structural principles of programming language design . It shifts the focus from simply using languages to understanding how they are defined, implemented, and proven correct through formal methods. Course Overview 15312 foundations of programming languages
How do generics work? 15-312 introduces (the polymorphic
As described in CMU course materials, 15312 is designed to explore the fundamental principles underlying modern programming languages. The course focuses heavily on , using mathematical techniques to define both syntax (what a program looks like) and semantics (what a program means).
While many courses use "industry-standard" languages to ensure employability, 15-312 traditionally utilizes . This choice is pedagogical, not pragmatic. SML is the laboratory where the theories of the course are tested. Moving away from concrete syntax to focus on
): Tagged unions, enums, or variants. They represent "Or" logic (you have either a value of type A or type B). This forms the basis of robust pattern matching found in modern languages like Rust and Swift. PCF (Programming Computable Functions)
When a student writes a function in 15-312 that takes an input of type $A$ and returns an output of type $B$, they are effectively proving the logical implication $A \implies B$. The act of writing a function that type-checks is the act of constructing a valid mathematical proof.
: Proving that "well-typed programs do not go wrong" using the properties of preservation and progress. The Lambda Calculus ( -calculus) is a rigorous
The "Dynamics" describe how a program steps from one state to the next. Using , you write rules that dictate exactly how an expression evaluates. This is where you learn about:
Because ASTs are inductively defined structures, proving properties about a language requires structural induction. This mathematical technique allows designers to prove that a property holds for all possible programs in a language by checking its foundational building blocks. 2. Operational Semantics: How Programs Execute