Formal Methods for Software Development TDA294/DIT271, LP1, HT2020

About This Course

This is a dummy page, and outdated. The real entry for the course is through Canvas.


  • Wolfgang Ahrendt (examiner, lecturer)
  • Andreas Lööw (course assistant)
  • Oskar Abrahamsson (course assistant)
  • The course assistants Andreas (room 5461, EDIT building) and Oskar (room 5453, EDIT building) offer scheduled office hours to help you with questions. You can make an appointment with one of them by email. It is not very likely that they are available if you just drop in.

    If you have any general questions regarding the course, please post in our google group. This will reach all teachers and your fellow students. This way, there can be an exchange of questions, hints, and discussions among all of us. Please make use of this forum. If you are not yet a member of the group, you have to

    • get a google account,
    • request an invitation to the group, providing as a comment your official student e-mail address.
    You can do all of that on the group page.

    All kinds of questions (and answers) on the content of the course are welcome. (But don't post lab solutions!)


    To pass the course a student must

    Two courses in one

    The course is available both for Chalmers and GU students:


    The lectures and exercises are held in room EA.
    Please check Lectures and Schedule.

    Course Content

    Formal Methods is a generic term for system design, analysis, and implementation methods that are described and used with mathematical rigor. The purpose is to construct, with high confidence, systems that behave according to their specification. The course introduces practically and theoretically the two most important styles of formal methods for reasoning about software: model checking and deductive verification. Each style will be introduced using a concrete tool.

    On the model checking side, the advantage of an automated method at the same time places restrictions on the kind of properties that can be verified. Accordingly, we concentrate on the verification of safety properties. The lectures cover the following topics:

    • Theoretical foundations of model checking.
    • Property languages and their usage.
    • Performing automated verification with a software model checking tool.

    For the deductive verification side, we use KeY, an integrated tool for the formal specification and verification of Java programs. The tool, which is partly developed at Chalmers and Gothenburg University, supports formal specification in the Java Modeling Language (JML), and translation from JML into logic. An interactive theorem prover is used to formally verify statements about specifications and programs. The lectures cover the following topics:

    • Java Modeling Language (JML)
    • Formal Semantics of Systems
    • Predicate Logic for Specification of Java Programs
    • Translating JML into Dynamic Logic
    • Verifying Proof Obligations

    W. Ahrendt, Aug 14, 2020