*Advanced course at Universität des Saarlandes*

* 6 credit points*

Summer semester 2019

This course introduces two topics together

- The first part is a self-contained introduction to the
**proof assistant Isabelle/HOL**.
- The second part is an introduction to the
**semantics of imperative programming languages**. This part is formalized in Isabelle.

This advanced course is based on a book by Prof. Tobias Nipkow and Prof. Gerwin Klein,
which is available both as a free PDF online and as a hardcover from Springer. The material is complementary to the core Semantics course by Prof. Gert Smolka,
which uses Coq and focuses on the λ-calculus and functional programming.

Proof assistants are tools that allow its users to carry out mathematical proofs rigorously, based on a logical foundation. Developing a proof in a proof asssistant as opposed to using pen and paper is roughly the equivalent of programming on a computer
as opposed to sketching pseudocode on paper. Expertise with proof assistants is becoming an increasingly important skill, especially for software verification, which aims at proving the absence of bugs in programs. In the experience of many instructors,
the use of a proof assistant helps students get a good grip on computer science topics.

Coq and Isabelle are the main two proof assistants in use. Isabelle's strength is that it is simple as 1-2-3: It offers (1) a simple yet powerful logic, (2) a convenient user interface, and (3) a lot of proof automation.

There are no formal prerequisites for taking the course. Familiarity with a typed functional programming language (such as Standard ML, OCaml, Haskell, or F#), as taught in Programmierung 1,
is highly recommended.