Course Schedule and Lecture Notes

Lectures come in units which may or may not begin or end on a class boundary. The schedule is tentative and may subject to change without prior notice.

Topic 1: Introduction

Administration; calculation and meaning; concrete and abstract syntax; interpreters and evaluation semantics; environments.

Reading: Ramsey & Kamin Chapter 1.

Slides

Topic 2: Impcore

A Core Imperative Language, environments, name-spaces, example interpreter and evaluation semantics; L-values vs. R-values; the Impcore interpreter; parameter passing mechanisms.

Reading: Ramsey & Kamin Chapter 2.

Slides

Topic 3: Scheme

Scheme: recursive programming with lists; programs as data; first-class functions, currying/uncurrying and composing; closures; folds; environment vs. store; closures; the uScheme interpreter; metacircular interpreters.

Reading: Ramsey & Kamin Chapter 3.

Slides

Meta-circular evaluator slides

Topic 4: SML Programming

Example functions; types; datatypes and pattern matching; exceptions, raise and handle; the uScheme interpreter in SML.

Reading: Ullman: Sections 2, 3.1-3.5, 4.1, 5.1-5.6, 6, 7.1, 7.3, 8.1, 8.2. Ramsey & Kamin Chapter 5.

Slides

Topic 5: Lambda Calculus

A core functional language; substitution; renaming; beta-reduction; booleans, pairs, sums, numbers coded as functions; reduction strategies: from substitution to call-by-value functions.

Reading: Paulson p2-21. See extra reading section for the PDF file.

Topic 6: Types and Type Systems

Types; type judgements; type checking; simply-typed lambda-calculus; typed Impcore; parametric polymorphism; kinds; typed uScheme.

Reading: Ramsey & Kamin Chapter 6. Cardelli type paper.

Topic 7: Type Inference

The Hindley-Milner type system; type inference; unification; composing substitutions; from type checking rules to type inference rules; uML.

Reading: Ramsey & Kamin Chapter 7.

Topic 8: Denotational Semantics

Denotational semantics of addition, of regular expressions. Partial orders; concrete semantics; Denotational semantics of small imperative languages.

Reading: Andrew Pitts sections 1, 2, 5, 6.

Topic 9: Logic Programming and Prolog

Prolog syntax; clause ordering and literal selection; proof trees; database Prolog; from functions to relations; pure Prolog; example programs; logic variables; partial data structures; Byrd boxes; the uProlog interpreter.

Reading: Ramsey & Kamin Chapter 10. Pereira & Shieber Sections 2.1 - 2.5, 3.1 - 3.4.1, 3.5, 5.1.1 - 5.1.3, 6.1.

Topic 10: Wrapup

Put the subjects into perspective. How did this all relate to design of programming languages anyway? Where can I go from here?

Additional Reading Materials

We will use the following reading materials in addition to the R&K textbook for topics on Lambda Calculus, Type Systems, Denotational Semantics and Prolog . All the PDF files can be found in ~cs531 account /reading directory on mercury server. Students should download a copy as reference.

  1. foundations_functional_programming.pdf: Foundations of Functional Programming by Lawrence C. Paulson
  2. lambda_calculus.pdf: Introduction to Lambda Calculus by Barendregt and Barendsen
  3. type_systems.pdf: Type Systems by Luca Cardelli
  4. denotational_semantics.pdf: Denotational Semantics by Andrew Pitts
  5. semantics_applications.pdf: Semantics with Applications by Nielson&Nielson
  6. prolog.pdf: Prolog and Natural-Language Analysis by Pereira&Shieber

Acknowledgements

The syllabus and teaching materials used in this course are mostly from Allyn Dimock, Giampiero Pecelli, Norman Ramsey and others. Many of the slides on Hoare logic are copyrighted material by Michael J. C. Gordon. A few examples in the Logic Programming and Prolog units are taken from the text by Fernando Pereira & Stuart Shieber. All rights reserved.