Skip to main content
Skip header

Formal Verification of Systems

Language of instruction čeština
Code 460-4172
Abbreviation FVS
Course title Formal Verification of Systems
Coordinating department Department of Computer Science
Course coordinator doc. Ing. Zdeněk Sawa, Ph.D.

Summary

The problem of correctness, i.e., the problem to verify that a given computer system (hardware and/or software) really has some properties required by a its specification, is one of the most fundamental practical and theoretical problems in computer science.
The goal of the course is to show to students some approaches used for verification of systems.

One of methods, successful in practice, is model checking where a tested property of system is expressed using a formula of some of so called temporal logics, and verification is done using (semi)automated methods on a model of a system.

Other example of methods, used in practice, is so called equivalence checking where we have a model representing a specification of behaviour of the system, i.e., what is expected as a desired behaviour, and a model representing implementation, i.e., how the desired behaviour is implemented in practice. The goal is to determine whether the behaviours of both models is equivalent
in some precisely defined sense, which would mean that the given implementation
really behaves according to the specification.

Other approach is based on creating proof of correctness of programs in some system for interactive and automated theorem proving. There exist several different software tools that allow to create proofs interactively while they check the correctness of these proofs automatically, and to some extend they also allow to automate some routine steps of the proofs. This area is also closely connected with problems concerning semantics of programming languages and type theory because to be able to create proofs of correctness of programs, at first we need a formally represented semantics of programs. So some of the lectures will deal with this topic. There will be also studied
logics used for proving properties of programs - Hoare logic and separation logic (which is a modern and more general extension of Hoare logic that allows to prove correctness of programs that work with pointers and dynamically allocated structures).

The purpose of the course is an explanation of basic principles of these approaches to verification, and also a demonstration of such
verification on models of concrete practical problems using freely available tools.

Results of learning:
- To get acquainted with some methods used for verification of systems.
In particular, to know approaches based on model checking, approaches based on equivalence checking, and approaches using tools for interactive a automated theorem proving.
- To know different mathematical formalisms used for verification. In particular, how semantics of programs and programming languages can be described and represented formally. To know some examples of logics used for specification of properties of systems such as different types of temporal logics and logics used for program verification such as Hoare logic and separation logic. To obtain a basic knowledge of type theory.

Literature

[1] Luca Aceto, Anna Ingólfsdóttir, Kim G. Larsen and Jiří Srba - Reactive Systems: Modelling, Specification and Verification, Cambridge University Press, 2007
[2] Benjamin C. Pierce et al. - Software Foundations (volumes 1 - 5). Electronic textbook, version 6.9.0, 2025. Available on address https://softwarefoundations.cis.upenn.edu

Advised literature

[3] Christel Baier, Joost-Pieter Katoen - Principles of Model Checking, The MIT Press, 2008
[4] Béatrice Bérard, Michel Bidoit, Alain Finkel, François Laroussinie, Antoine Petit, Laure Petrucci, Philippe Schnoebelen, Pierre McKenzie - Systems and Software Verification, Springer, 2001
[5] Yves Bertot, Pierre Castéran - Interactive Theorem Proving and Program Development, Springer, 2004.
[6] Andrew W. Appel et al. - Program Logics for Certified Compilers, Cambridge University Press, 2014.
[7] Adam Chlipala - Certified Programming with Dependent Types: A Pragmatic Introduction to the Coq Proof Assistant. The MIT Press, 2013.
[8] Benjamin C. Pierce - Types and Programming Languages, MIT Press, 2002.
[9] Benjamin C. Pierce, ed. - Advanced Topics in Types and Programming Languages. MIT Press, 2004.
[10] Glynn Winskel - Formal Semantics of Programming Languages, The MIT Press, 1993.
[11] Hans Hüttel - Transitions and Trees: An Introduction to Structural Operational Semantics, Cambridge University Press, 2010.