15-819 Type Refinements for Programming Languages

This is a graduate seminar on type refinements, a method for increasing the expressive power of type systems to track programmer-specified invariants governing persistent values and ephemeral state. For background on type refinements, please see the Triple Project web page.

15-399 Constructive Logic

This multidisciplinary junior-level course is designed to provide a thorough introduction to modern constructive logic, its roots in philosophy, its numerous applications in computer science, and its mathematical properties. Some of the topics to be covered are intuitionistic logic, inductive definitions, functional programming, type theory, realizability, connections between classical and constructive logic, decidable classes.

15-819 Type Systems for Modularity

This is a graduate seminar concerned with type systems for program modules. The focus of the course will be on the ML module system and its derivatives. The course emphasizes the role of typed lambda calculus models of modularity, but will also consider methods based on elaboration in terms of ad hoc semantic structures. The main pre-requisite is familiarity with typed lambda calculus models of programming languages such as would be provided by the graduate programming languages core course. Undergraduates may take this course with permission of the instructor.

15-212 Principles of Programming

From 1995 to 1998 I designed a new curriculum for 15-212 that introduces students to a variety of fundamental principles for building elegant and robust software systems. The course is organized around the idea that programming is an explanatory activity, and hence is fundamentally concerned with language. The course is taught using the Standard ML programming language. Topics include reasoning techniques such as computational induction, loop invariants, and data structure invariants, and programming techniques such as lazy evaluation, higher-order functions, data abstraction, and modular programming.

Since 1999 the course has been adopted as the second semester of the foundational sequence in computer science at Carnegie Mellon University. It is currently being taught by Karl Crary, Mike Erdmann, John Lafferty, and Jeannette Wing. It was previously taught by me, Daniel Jackson, and Frank Pfenning.

15-312 Principles of Programming Languages

It is traditional to have in the undergraduate curriculum in computer science a course on programming languages. In most cases this course takes the form of a zoo tour, with brief stops to ogle the weird and wonderful beasts. While this approach can be enlightening, and is surely entertaining, it misses the opportunity to present a unifying conceptual framework for the design and structure of programming languages. Why are some languages the way they are? Can we do better? Are some languages better than others? Or is it all a matter of opinion?

This course develops a unifying scientific theory of programming languages using type theory and operational semantics as a unifying conceptual framework in which we may make mathematically rigorous statements about languages and programs. We use Standard ML (extended with concurrency) and Java as case studies and as vehicles for implementation of programming problems.

15-814 Type Systems for Programming Languages

The study of the structure and implementation of programming languages has been revolutionized over the last two decades (especially), leading to a systematic understanding in the unifying conceptual framework of type theory. This is a graduate course on type systems for programming languages intended for a general computer science audience. It is a "starred course" in the computer science graduate curriculum at Carnegie Mellon, which means that it may be used to satisfy the course requirement in programming languages for all PhD students in the department. The exact topics vary, but the overall theme is on typed lambda calculus as a model for programming language constructs.

Programming in Standard ML

Hundreds of people have learned to program in Standard ML using my 1986 course notes, Introduction to Standard ML. Over the last several years I have re-written and extended these notes to form a complete web text on fundamental programming techniques using Standard ML. These notes are used in several graduate and undergraduate courses at Carnegie Mellon, and are in wide use throughout the world. A version suitable for printing is also available.

Last modified: Fri Aug 6 21:27:19 PDT 2004