In this course, we have stressed the importance of pure functional programming as an enabler of local reasoning. Pure functional programming allows us to prove our code correct with regard to a specification and allows us to determine the asymptotic complexity of our code. In today's class, we have taken a glimpse under hood, exploring the machinery that is needed to enable such proofs. In particular, we have acquainted ourselves with the notion of a language definition, which gives a precise, mathematical account of the semantics of a programming language. Using a definition, we can then prove general properties about any program that we write in a particular language. The most fundamental property that ought to hold true for any programming language is type safety, asserting that "well-typed programs do not go wrong".
Lecture Slides with every build, use "slideshow" option in your pdf viewer. Lecture Slides compact.