*Note that the information below applies to the
CIS500 ***course**. The syllabus for the
Software Foundations area of the WPE-I can be found here.
This course introduces basic concepts and techniques in the foundational
study of programming languages. The central theme is the view of
individual programs and whole languages as mathematical objects about
which precise claims may be made and proved. Particular topics include
operational techniques for formal definition of language features, type
systems and type safety properties, polymorphism and subtyping, and
foundations of object-oriented programming.

### Grading:

Breakdown for the course grade is as follows:

- Homework: 20%
- Midterm 1: 20%
- Midterm 2: 20%
- Final Exam: 40%

### Prerequisites:

An undergraduate-level course in programming languages or
compilers; significant programming experience.

### Syllabus:

- Part O: Background
- A taste of OCaml
- Functional programming
- Part I: Basics
- Operational semantics
- Inductive proof techniques
- The λ-calculus
- Evaluator implementation
- Syntactic sugar; fully abstract translations
- Part II: Type systems
- Basic types
- Simply typed λ-calculus
- Type safety
- References
- Exceptions
- Part III: Object-oriented features
- Subtyping
- An analysis of core Java
- A simple imperative object model [time permitting]

### Textbook:

Types and Programming Languages.
Benjamin C. Pierce.
MIT Press, 2002.