TPL - The Last Lecture

What you should know walking into the final exam.


Type systems
~~~~~~~~~~~~

You should be familiar with the reduction rules
and type systems for the following:

Booleans
Naturals with zero and successor
Simply typed lambda calculus
Derived forms: ascription, let
Unit type, products, records
Empty type, sums, variants
Fixpoint operator
References
Exceptions
Subtyping
Covariance and contravariance for function types
The Penn interpretation
Polymorphic lambda calculus/System F


Encodings
~~~~~~~~~

You should understand the encodings of the following
into untyped and polymorphic lambda calculus:

Booleans
Naturals with zero and successor
Unit type, products
Empty type, sums


Curry-Howard Isomorphism
~~~~~~~~~~~~~~~~~~~~~~~~

You should understand the connection between the
following data types and logical operations:

Unit type - True
Empty type - False
Product type - Conjunction
Sum type - Disjunction
Function type - Implication


Propositions and Proofs
~~~~~~~~~~~~~~~~~~~~~~~

You should be able to state and prove the following:

Canonical forms lemma
Substitution lemma
Progress
Preservation
Equivalence of small-step and big-step semantics
Simulation (derived forms)
Transitivity of subtyping

You should be familiar with proof by induction,
and understand the difference between the following:

induction over syntax
induction over length of reduction sequence
induction over derivation tree

While last year's exam asked for statements of propositions
but not proofs, this year's exam will also ask for proofs.