## Module 12: Type Systems - Part I

[**Video**]
[**Slides**]

**Description:**

This module will introduce you to the most widely used form of static analysis known as Type Systems. You’ll learn a core language, the Lambda Calculus, and notation for specifying a type system for the language in the form of rules. You will then use the rules to determine whether a program is accepted or rejected by the type system. In the end, you’ll learn about soundness and completeness properties of type systems.

**Objectives:**

- Remember the notation for Type Systems and the type rules for the Lambda Calculus language.
- Derive the type of a given program in the Lambda Calculus by constructing a Type Derivation.
- Explain the concept of Type Soundness and the guarantee that a sound type system provides for well-typed programs.
- Understand the relationship between types in a type system and abstract values in other forms of static analysis.