## Module 13: Type Systems - Part II

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

**Description:**

This module elucidates connections between type systems and other forms of static analysis. It sets out by showing how to perform Type Inference using constraint solving and thereby alleviate annotation burden on programmers. It then demonstrates how other forms of static analyses can be described using the notation of type systems. You will learn how to describe three broad classes of static analyses – flow-insensitive, flow-sensitive, and path-sensitive – using type rules and understand their strengths and tradeoffs.

**Objectives:**

- Apply the Type Inference algorithm to infer the type of a given program in the Lambda Calculus language.
- Understand how to specify other forms of Static Analysis using Type System notation.
- Explain the type rules for Flow-insensitive, Flow-sensitive, and Path-sensitive analysis.
- Determine whether a certain property of a given program can be verified using a Flow-insensitive, Flow-sensitive, or Path-sensitive analysis.