I Models of Languages
Chapter 1: Computing with Text
1.1 Defining Sets
1.2 Relations
1.3 Relations as Evaluation
1.4 Directed Evaluation
1.5 Evaluation in Context
1.6 Evaluation Function
1.7 Notation Summary
Chapter 2: Consistency of Evaluation
Chapter 3: The -Calculus
3.1 Functions in the -Calculus
3.2 -Calculus Grammar and Reductions
3.3 Encoding Booleans
3.4 Encoding Pairs
3.5 Encoding Numbers
3.6 Recursion
3.6.1 Recursion via Self-Application
3.6.2 Lifting Out Self-Application
3.6.3 Fixed Points and the Y Combinator
3.7 Reduction Strategy and Normal Form
3.8 History
II Models of Realistic Languages
Chapter 4: ISWIM
4.1 ISWIM Expressions
4.2 ISWIM Reductions
4.3 The Yv Combinator
4.4 Evaluation
4.5 Consistency
4.6 Observational Equivalence
4.7 History
Chapter 5: Standard Reduction
5.1 Standard Reductions
5.2 Proving the Standard Reduction Theorem
5.3 Observational Equivalence
5.4 Uniform Evaluation
Chapter 6: Machines
6.1 CC Machine
6.2 SCC Machine
6.3 CK Machine
6.4 CEK Machine
6.5 Machine Summary
Chapter 7: SECD, Tail Calls, and Safe for Space
7.1 SECD machine
7.2 Context Space
7.3 Environment Space
7.4 History
Chapter 8: Continuations
8.1 Saving Contexts
8.2 Revised Texual Machine
8.3 Revised CEK Machine
Chapter 9: Errors and Exceptions
9.1 Errors
9.1.1 Calculating with Error ISWIM
9.1.2 Consistency for Error ISWIM
9.1.3 Standard Reduction for Error ISWIM
9.1.4 Relating ISWIM and Error ISWIM
9.2 Exceptions and Handlers
9.2.1 Calculating with Handler ISWIM
9.2.2 Consistency for Handler ISWIM
9.2.3 Standard Reduction for Handler ISWIM
9.2.4 Observational Equivalence of Handler ISWIM
9.3 Machines for Exceptions
9.3.1 The Handler-Extended CC Machine
9.3.2 The CCH Machine
Chapter 10: Imperative Assignment
10.1 Evaluation with State
10.2 Garbage Collection
10.3 CEKS Machine
10.4 Implementing Garbage Collection
10.5 History
III Models of Typed Languages
Chapter 11: Types
11.1 Numbers and Booleans
11.2 Soundness
Chapter 12: Simply Typed ISWIM
12.1 Function Types
12.2 Type Rules for Simply Typed ISWIM
12.3 Soundness
12.4 Normalization
Chapter 13: Variations on Simply Typed ISWIM
13.1 Conditionals
13.2 Pairs
13.3 Variants
13.4 Recursion
Chapter 14: Polymorphism
14.1 Polymorphic ISWIM
Chapter 15: Type Inference
15.1 Type-Inferred ISWIM
15.1.1 Constraint Generation
15.1.2 Unification
15.2 Inferring Polymorphism
Chapter 16: Recursive Types
16.1 Fixed-points of Type Abstractions
16.2 Equality Between Recursive Types
16.3 Isomorphisms Between Recursive Types
16.4 Using Iso-Recursive Types
Chapter 17: Data Abstraction and Existential Types
17.1 Data Abstraction in Clients
17.2 Libraries that Enforce Abstraction
17.3 Existential ISWIM
17.4 Modules and Existential Types
Chapter 18: Subtyping
18.1 Records and Subtypes
18.2 Subtypes and Functions
18.3 Subtypes and Fields
18.4 From Records to Objects
Chapter 19: Objects and Classes
19.1 MiniJava Syntax
19.2 MiniJava Evaluation
19.3 MiniJava Type Checking
19.4 MiniJava Soundness
19.5 MiniJava Summary
IV Appendices
Appendix 20: Structural Induction
20.1 Detecting the Need for Structural Induction
20.2 Definitions with Ellipses
20.3 Induction on Proof Trees
20.4 Multiple Structures
20.5 More Definitions and More Proofs