On this page:
EECS 3/  496 Type Systems – Notes

EECS 3/496 Type Systems – Notes

Jesse A. Tov

    1 The let-zl language

      1.1 Syntax

      1.2 Dynamic semantics

        1.2.1 Errors

      1.3 Static semantics

        1.3.1 Type safety

          1.3.1.1 Preservation

          1.3.1.2 Progress

      1.4 Termination

    2 The simply-typed lambda calculus λ-st

      2.1 Syntax

      2.2 Dynamic semantics

      2.3 Static semantics

        2.3.1 Type safety

      2.4 An extension

      2.5 Normalization

      2.6 Adding nontermination

    3 λ-sub: subtyping with records

      3.1 Syntax

      3.2 Dynamic semantics

      3.3 Static semantics

        3.3.1 Subtyping

        3.3.2 Type safety

      3.4 Compiling with coercions

    4 The polymorphic lambda calculus λ-2

      4.1 Syntax

      4.2 Dynamic semantics

      4.3 Static semantics

      4.4 Church data

        4.4.1 Natural numbers

        4.4.2 Booleans

        4.4.3 Products

        4.4.4 Sums

        4.4.5 Lists

        4.4.6 Existentials

    5 The higher-order lambda calculus λ-ω

      5.1 Syntax

      5.2 Dynamic semantics

      5.3 Static semantics

    6 ML type inference

      6.1 STLC revisited

        6.1.1 Dynamic semantics

        6.1.2 Static semantics

        6.1.3 Adding a base type

        6.1.4 Introducing let polymorphism

      6.2 Type schemes in λ-ml

      6.3 Statics

        6.3.1 The logical type system

        6.3.2 The syntax-directed type system

      6.4 Type inference algorithm

        6.4.1 Unification

        6.4.2 Algorithm W

      6.5 Constraint-based type inference

    7 Qualified types

      7.1 Syntax

      7.2 Dynamic semantics

      7.3 Static semantics

        7.3.1 Syntax of types

        7.3.2 The types of constants

        7.3.3 Instantiation and entailment

        7.3.4 Syntax-directed typing

      7.4 Type inference algorithm

      7.5 Evidence translation

    8 The Lambda Cube: λ-cube

      8.1 Syntax

      8.2 Typing Rules