Přeskočit na hlavní obsah
Přeskočit hlavičku

Formální verifikace systémů

Jazyk výuky čeština
Kód 460-4172
Zkratka FVS
Název předmětu česky Formální verifikace systémů
Název předmětu anglicky Formal Verification of Systems
Garantující katedra Katedra informatiky
Garant předmětu doc. Ing. Zdeněk Sawa, Ph.D.

Anotace

Problém korektnosti, tedy problém ověření (neboli verifikace), že daný počítačový (hardwarový a/nebo softwarový) systém má skutečně vlastnosti, které jsou požadovány jeho specifikací, patří mezi fundamentální praktické i teoretické problémy v oblasti informatiky.

Cílem předmětu je ukázat studentům některé přístupy, které se používají pro verifikaci systémů.
Jedna z prakticky úspěšných metod je tzv. `ověření modelu' (model checking), kde se testovaná vlastnost systému vyjádří pomocí formule některé z tzv. temporálních logik a ověřuje se (polo)automatickými metodami na modelu systému.

Další příkladem metod používaných v praxi je tzv. 'testování ekvivalence' (ekvivalence checking), kde máme na jedné straně model, který
reprezentuje specifikaci chování systému, tj. co očekáváme jako požadované chování systému, a na druhé straně model reprezentující implementaci, tj. způsob, jak je dané chování reálně implementováno. Cílem je ověřit, zda je chování obou těchto modelů v nějakém přesně definovaném smyslu ekvivalentní, a že se tedy daná implementace skutečně chová podle dané specifikace.

Další přístup je založen na vytváření důkazů korektnosti programů v některém systému pro interaktivní a automatizované dokazování (interactive and automated theorem proving). Existuje celá řada softwarových nástrojů, které umožňují interaktivně vytvářet
důkazy, přičemž automaticky kontrolují správnost těchto důkazů a do určité míry umožňují automatizovat některé mechanické kroky důkazu. Tato oblast je také silně propojena s problematikou sémantiky programovacích jazyků a teorie typů, protože aby bylo vůbec možné nějaké formální důkazy korektnosti programů vytvářet, nejprve musí být formálně reprezentována sémantika programů. Část přednášek tedy bude věnovaná této problematice. Dále pak budou studovány logiky používané pro dokazování vlastností programů - Hoarova logika a separační logika (což je modernější a obecnější rozšíření Hoarovy logiky o možnost dokazování korektnosti programů, které pracují s ukazateli a dynamicky alokovanými datovými strukturami).

Účelem kursu je vysvětlení základních principů těchto přístupů k verifikaci a zároveň demonstrace této verifikace na modelech konkrétních praktických problémů, za použití volně dostupných softwarových verifikačních nástrojů.

Výsledky učení:
- Získat základní přehled o některých metodách používaných při verifikací systémů.
Seznámit se s přístupy založenými na ověřování modelu (model checking), ověřování ekvivalence (equivalence checking) a s přístupy využívajícími nástroje pro interaktivní a automatizované dokazování.
- Seznámit se s různými matematickými formalismy používanými při verifikaci. Konkretně např. se způsoby, jak je možné formálně popisovat sémantiku programů a programovacích jazyků, s různými druhy logik používanými pro specifikaci vlastností systémů, jako jsou různé typy temporálních logik či logiky používanými pro verifikaci programů jako jsou Hoarova logika a separační logika. Seznámit se také se základy teorie typů.

Povinná literatura

[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. Dostupné na adrese https://softwarefoundations.cis.upenn.edu

Doporučená literatura

[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.