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.