| Syllabus and Study Guide for the Final |
|
- Understand the lecture slides and discussions thoroughly.
- Revisit the MPs and HWs and make sure you understand the solutions
thoroughly. Repeat any you are not comfortable with.
- Take the sample exam as a dry-run for the actual exam.
The exam is cumulative; it will cover all the lectures in the course. You should be prepared for all of the material listed
in midterm1.syllabus.html and
midterm2.syllabus.html, as well as that listed below:
Unification
- Solve simple unification problems such as the
ones in the lecture slides.
- Know how unification is used for
type checking and type inference.
Lambda Calculus
- Be able to parse a lambda term correctly (e.g. which
variable is bound by which abstraction, which variable is
free, which application is top-most, etc.).
- Describe and know how to apply α-conversions
and β-reductions.
- Write simple non-recursive functions as
λ-expressions.
- Know the differences between and be able to
demonstrate lazy/eager evaluation and unrestricted
alpha-beta reduction.
- Understand Church numerals and Church booleans and how to
manipulate/generate them in lambda calculus (e.g, be able to write
addition and multiplication λ-expressions).
- Understand how other high-level datatypes and
primitive recursive functions are encoded in lambda calculus.
Axiomatic Semantics
- Be able to prove simple statements in Floyd-Hoare Logic, similar to those found in the homework.
- Be able to derive new Floyd-Hoare Logic rules for new programming language constructs.
|
|