Overview Programming languages are a fundamental part of computer science. This course introduces the formal tools needed to describe precisely what a program means. These tools help us answer many useful questions about program analyses and transformations, such as: Is this program correct? Will this program encounter a run-time type error? Is one program indistinguishable from another? Is this o