Freely available courses are given below.
Logic underlies most areas of computer science. This course introduces many different formal logics, ranging from propositional logic all the way to higher-order logic.
This course introduces programming language theory, from abstract syntax to denotational semantics, covering imperative and functional programming.
An introductory course to program correctness: ensuring that programs behave as is intended. Covering both Hoare's logic and Reynolds' logic.
Course material of older courses given in the past.