The goal of this course is to study different type systems and understand their use to impose modularity, composability, data structuring and early verification. Modern type systems are applied in many different contexts, including programming languages, document-centric systems, static program analysis and reliable distributed computing.

This course will take a broader approach to the study of type systems. In addition to studying the fundumentals of the underlying type theory, we will also show the applications of type systems in the real world (including systems like XML Schema, Web Services, Java, .NET).