Fall 99, CSE 520: Lectures
The following is the summary of lectures given so far, and the plan for future lectures.
For each past lecture you find the list of topics covered,
and the reference material.

Tue, Aug 31:
Overview of the Syllabus.
Contents of the course.
The Lambda Calculus: a brief history.
[Barendregt84,
1.1 (Introduction).
Lecture Notes 1 and 2]

Thu, Sep 2:
The Lambda Calculus: syntax and alphabeta conversion.
[Barendregt84, 2.1
or Barendregt92, 2.1.
Lecture Notes 1 and 2]

Tue, Sep 7:
The theorem of Kleene: all recursive functions are lambdadefinable.
The concept of lambda definability.
The Recursive functions as the class of functions obtained from the initial functions,
composition, primitive recursion and minimalization.
[Barendregt84, 6.13
or Barendregt92, 2.2.
Lecture Notes 3, 4 and 5]

Thu, Sep 9:
Proof of the theorem of Kleene.
Lambda definability of the initial functions, of the composition, and of the
primitive recursion. The fixpoint operator.
[Barendregt84, 6.13
or Barendregt92, 2.2.
Lecture Notes 3, 4 and 5]
Assignment 1 distributed.

Tue, Sep 14:
Proof of the theorem of Kleene.
Lambda definability of the booleans, the conditional operator,
the pair and projection operators, the predecessor and the test is_zero.
Lambda definability of minimalization.
[Barendregt84, 6.13
or Barendregt92, 2.2.
Lecture Notes 3, 4 and 5]

Thu, Sep 16:
Further explanation about the fixpoint operator and its use.
The notion of beta reduction.
The ChurchRosser theorem.
[Barendregt84, 3.12
or Barendregt92, 2.3.
Lecture Notes 6 and 8]

Tue, Sep 21 (Lecture given by Prof. Dale Miller)
Programming langauges based on the lambda calculus.
Evaluation strategies: Callbyname vs. callbyvalue, completeness vs.
efficiency. Absence of evaluation under lambda abstraction.
Special forms (e.g. ifthenelse).
A brief introduction to the subset of Standard ML corresponding to the lambda
calculus. [Lecture Notes 7,
Introduction to Standard ML]

Thu, Sep 23
Consistency of the lambda calculus. Inductive definitions and the
principle of general induction. On the existence of normal forms.
Weak and strong normalization.
[Lecture Notes 6 and 8]
Assignment 1 due. Assignment 2 distributed.

Tue, Sep 28
The simply typed lambda calculus.
The system of Curry. Type checking and type inference.
Principal type and derived types.
[Barendregt92, 3.1.
Lecture Notes 9 and 10]

Thu, Sep 30
Type inference in the system of Curry: how to construct the
most general type.
FirstOrder Unification.
The MartelliMontanari unification algorithm
[Apt_Pellegrini, Section 2]
The subject reduction theorem.
The type system of Church.
Relation between the system of Church and the system of Curry.
[Barendregt92, 3.12.
Lecture Notes 9 and 10.]

Tue, Oct 5
The CurryHoward isomorphism. Types as formulas, programs as proofs,
reduction as proofnormalization.
[Gallier95,
Lecture Notes 11 and 12.]

Thu, Oct 7
Extending the isomorphism. Sum and product types
(aka disjoint union and cartesian product).
Example: Implementation in ML of the sum type.
[Gallier95,
Lecture Notes 11 and 12.]
Assignment 2 due. Assignment 3 distributed.
Tue, Oct 12
No class (Fall break).

Thu, Oct 14
PCF (Programming Computable Functions):
an extension of the Lambda Calculus with integers,
booleans, and some primitives.
The type system of PCF. The operational semantics of PCF based on eager evaluation.
[Lecture Notes 13 and 15][Further (optional) reading:
Winskell93, Ch 11, and
Mitchell96, Ch 2]

Tue, Oct 19
In class Midterm Exam.

Thu, Oct 21
Lazy operational semantics of PCF.
Lists in ML and in Haskell.
Examples of HO ML programming on lists: map and accumulate.
Example of functional programming on streams (lazy lists):
stream of all natural numbers, stream of all factorial numbers.
[Lecture Notes 13 and 15]
[Further (optional) reading:
Winskell93, Ch 11, and
Mitchell96, Ch 2]

Tue, Oct 26
Definition of the Eratosthenes' sieve as a lazy function on streams.
Soundness and completeness issues for the eager and the lazy semantics.
Simulating lazy evaluation in ML.
[Lecture Notes 13 and 15]
Building interpreters for PCF.
[Lecture Notes 16 and 17]
Assignment 3 due.

Thu, Oct 28
Building interpreters for PCF (cont'ed).
[Lecture Notes 16 and 17]
Presentation of
projects.
Assignment 4 distributed.

Tue, Nov 2
Presentation of
projects
(cont'ed).

Thu, Nov 4
Introduction to Concurrency. A Calculus for Communicating Systems (CCS).
[Lecture Notes 19, 23 and 24]
[Milner89, Preface, 1.13].

Tue, Nov 9
Introduction to Lambda Prolog (DM).
[Lecture Notes 20]
Assignment 4 due. Assignment 5 distributed.

Thu, Nov 11
Lambda Prolog (DM).
[Lecture Notes 21]

Tue, Nov 16
Lambda Prolog (DM).
[Lecture Notes 22]

Thu, Nov 18
CCS. The transition system of CCS.
[Lecture Notes 19, 23 and 24]
[Milner89, Ch. 2].

Tue, Nov 23
Examples of specifications of concurrent systems using CCS.
Strong and weak bisimulation.
The algebraic theory of CCS.
[Lecture Notes 19, 23 and 24]
[Milner89, Ch. 3, 4, and 5].
Assignment 5 due. Assignment 6 distributed.
Thu, Nov 25
No class (Thanksgiving break).
Tue, Nov 30
No class.
Thu, Dec 2
No class.

Tue, Dec 7
Example: A scheduler. Specification and intermediate implementation.
[Milner89, Ch. 5].
Example: A scheduler with dynamical creation of new components.
Message passing in CCS.
Implementation in Java of the choicefree subset of CCS.
Thu, Dec 9
No class.
Sat, Dec 11
Assignment 6 and Project due.