## 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.

1. 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]
2. Thu, Sep 2: The Lambda Calculus: syntax and alpha-beta conversion. [Barendregt84, 2.1 or Barendregt92, 2.1. Lecture Notes 1 and 2]
3. Tue, Sep 7: The theorem of Kleene: all recursive functions are lambda-definable. 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.1-3 or Barendregt92, 2.2. Lecture Notes 3, 4 and 5]
4. 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.1-3 or Barendregt92, 2.2. Lecture Notes 3, 4 and 5] Assignment 1 distributed.
5. 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.1-3 or Barendregt92, 2.2. Lecture Notes 3, 4 and 5]
6. Thu, Sep 16: Further explanation about the fixpoint operator and its use. The notion of beta reduction. The Church-Rosser theorem. [Barendregt84, 3.1-2 or Barendregt92, 2.3. Lecture Notes 6 and 8]
7. Tue, Sep 21 (Lecture given by Prof. Dale Miller) Programming langauges based on the lambda calculus. Evaluation strategies: Call-by-name vs. call-by-value, completeness vs. efficiency. Absence of evaluation under lambda abstraction. Special forms (e.g. if-then-else). A brief introduction to the subset of Standard ML corresponding to the lambda calculus. [Lecture Notes 7, Introduction to Standard ML]
8. 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.
9. 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]
10. Thu, Sep 30 Type inference in the system of Curry: how to construct the most general type. First-Order Unification. The Martelli-Montanari 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.1-2. Lecture Notes 9 and 10.]
11. Tue, Oct 5 The Curry-Howard isomorphism. Types as formulas, programs as proofs, reduction as proof-normalization. [Gallier95, Lecture Notes 11 and 12.]
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).
13. 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]
14. Tue, Oct 19 In class Midterm Exam.
15. 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]
16. 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.
17. Thu, Oct 28 Building interpreters for PCF (cont'ed). [Lecture Notes 16 and 17] Presentation of projects. Assignment 4 distributed.
18. Tue, Nov 2 Presentation of projects (cont'ed).
19. Thu, Nov 4 Introduction to Concurrency. A Calculus for Communicating Systems (CCS). [Lecture Notes 19, 23 and 24] [Milner89, Preface, 1.1-3].
20. Tue, Nov 9 Introduction to Lambda Prolog (DM). [Lecture Notes 20] Assignment 4 due. Assignment 5 distributed.
21. Thu, Nov 11 Lambda Prolog (DM). [Lecture Notes 21]
22. Tue, Nov 16 Lambda Prolog (DM). [Lecture Notes 22]
23. Thu, Nov 18 CCS. The transition system of CCS. [Lecture Notes 19, 23 and 24] [Milner89, Ch. 2].
24. 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.
25. 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 choice-free subset of CCS.
Thu, Dec 9 No class.
Sat, Dec 11 Assignment 6 and Project due.