Formalne podstawy niezawodnego oprogramowania lato 2025/26

Język wykładowy Polski
Opiekun Dariusz Biernacki
Liczba godzin 30 (wyk.) 30 (prac.)
Rodzaj Informatyczny 1
ECTS 6
Polecany dla I roku Nie
Egzamin Tak

Opis przedmiotu:

Niezawodność oprogramowania należy do najbardziej istotnych wyzwań współczesnej informatyki. Systemy wspomagające dowodzenie twierdzeń, takie jak [Rocq](https://rocq-prover.org) (dawniej Coq), zyskują w ostatnich latach ogromną popularność jako platformy wspierające konstruowanie poprawnego i bezpiecznego oprogramowania, łącząc w sobie język programowania oraz system logiczny. Rocq pozwala nie tylko na formalne specyfikowanie oraz weryfikowanie poprawności programów komputerowych (tzw. certyfikowanie kodu), ale także na precyzyjne definiowanie i analizę całych języków programowania. Przedmiot stanowi wprowadzenie do formalnych podstaw niezawodnego oprogramowania przy użyciu systemu Rocq. Poruszana tematyka dotyczy wybranych elementów logiki, teorii języków programowania oraz samego systemu Rocq, a całość przedmiotu realizowana jest w oparciu o podręcznik [Software Foundations](https://softwarefoundations.cis.upenn.edu). Omawiane zagadnienia: - programowanie funkcyjne w systemie Rocq - wnioskowanie w systemie Rocq (definicje indukcyjne, dedukcja naturalna, język taktyk, automatyzacja wnioskowania) - dowody jako programy (izomorfizm Curry’ego-Howarda, typy zależne, ekstrakcja programów z dowodów) - semantyka operacyjna języków imperatywnych (strukturalna semantyka operacyjna małych i dużych kroków, maszyny abstrakcyjne, transformacje i optymalizacja programów) - specyfikacja i weryfikacja programów imperatywnych (logika Hoare’a) - rachunek lambda z typami prostymi (semantyka operacyjna, sprawdzanie typu, normalizacja) - rozszerzenia systemu typów prostych (rekordy i podtypowanie, modyfikowalny stan) Przedmiot został zaprojektowany jako łagodne wprowadzenie do interaktywnego dowodzenia twierdzeń o poprawności programów i systemów logicznych przy wykorzystaniu wiedzy z przedmiotów _Logika dla informatyków_, _Metody programowania_ oraz _Programowanie funkcyjne_, jednocześnie oferując przedsmak tego czego można nauczyć się na bardziej zaawansowanych przedmiotach dotyczących semantyki języków programowania, systemów typów czy weryfikacji programów. Wykładowcy: Małgorzata Biernacka i Dariusz Biernacki

Wykłady

Lista
Prowadzący Termin zajęć Limit Zapisani Kolejka
Dariusz Biernacki
cz 10:00-12:00 (s. 141) 22 10 0

UWAGA! Wyższa liczba oznacza wyższy priorytet, po zapisaniu do grupy zostajemy usunięci z kolejek o niższym priorytecie.

Pracownie

Lista
Prowadzący Termin zajęć Limit Zapisani Kolejka
Dariusz Biernacki
pn 10:00-12:00 (s. 139) 15 10 0

UWAGA! Wyższa liczba oznacza wyższy priorytet, po zapisaniu do grupy zostajemy usunięci z kolejek o niższym priorytecie.


Konsultacje prowadzących:


Imię i nazwisko Pokój Konsultacje
Dariusz Biernacki 242 wtorek 14-16 (po uzgodnieniu przez e-mail)