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.
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.
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.
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.
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.
- foundations_functional_programming.pdf: Foundations of Functional Programming by Lawrence C. Paulson
- lambda_calculus.pdf: Introduction to Lambda Calculus by Barendregt and Barendsen
- type_systems.pdf: Type Systems by Luca Cardelli
- denotational_semantics.pdf: Denotational Semantics by Andrew Pitts
- semantics_applications.pdf: Semantics with Applications by Nielson&Nielson
- 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.