Математические методы верификации схем и программ
Актуальность информации: осенний семестр 2022/2023 учебного года.
Обязательный курс для магистров групп 618мк_дс, 618мк_дус и 621асвк 3 семестра магистратуры (группа 621асвк - "Методы верификации программ"). Курс читает В. В. Подымов.
Содержание
Лекции
Блок 1 (вводная). Что такое и зачем нужна формальная верификация.
Блок 2. Общие принципы дедуктивной верификации программ. Модельные императивные программы: синтаксис, операционная семантика.
Блок 3. Дедуктивная верификация программ: постановка задачи, логика Хоара.
Блок 4. Дедуктивная верификация программ: аннотированные программы.
Блок 5. Дедуктивная верификация программ: возможности автоматизации, слабейшее предусловие.
Блок 6. Общая схема метода model checking.
Блок 7. Модели Крипке. Особенности моделирования систем.
Блок 8. Свойства трасс. Безопасность и живость.
Блок 9. Логика линейного времени (LTL). Постановка задачи верификации моделей Крипке относительно LTL.
Блок 10. Размеченные системы переходов. Справедливость для систем переходов. Справедливость и LTL.
Блок 11. Автоматный алгоритм model checking для LTL: общая схема.
Блок 12. Автоматы Бюхи. Обобщённые автоматы Бюхи.
Блок 13. Пересечение автоматов Бюхи. Проверка пустоты автомата Бюхи.
Блок 14. Автоматы Бюхи для моделей Крипке и ltl-формул.
Блок 15. Автоматный алгоритм model checking для LTL: уточнённая схема.
Блок О1. Обзор средства Spin.
Блок 16. Логика деревьев вычислений (CTL). Постановка задачи верификации моделей Крипке относительно CTL.
Блок 17. Базовый алгоритм model checking для CTL.
Блок 18. Справедливость и CTL.
Блок 19. Символьные представления моделей.
Блок 20. Двоичные решающие диаграммы: BDD, OBDD, ROBDD.
Блок 21. Символьный алгоритм model checking для CTL. Преобразователи предикатов. Неподвижные точки.
Блок О2. Обзор средства NuSMV.
Блок 22. CTL*. CTL и LTL как фрагменты CTL*. Сравнение выразительности CTL и LTL.
Блок 23. Системы реального времени. Временные автоматы. Неправдоподобные вычисления временных автоматов.
Блок 24. Логика ветвящегося реального времени (TCTL). Задача model checking для TCTL.
Блок 25. Алгоритм model checking для TCTL. Временные регионы. Системы регионов.
Блок 26. Сети временных автоматов.
Слайды лекций будут появляться по мере проведения занятий.
Семинары
Семинар 1. Дедуктивная верификация императивных программ.
Семинар 2. Модели Крипке. LTL. Безопасность и живость. Справедливость.
Семинар О1. Средство Spin.
(Устаревшее) Несколько инструкций относительно Spin.
Семинар 3. CTL. Базовый алгоритм model checking для CTL. BDD.
Семинар О2. Средство NuSMV.
Семинар О3. Средство Uppaal.
Дополнительные материалы к семинару О3.
Материалы будут обновляться по мере проведения занятий.
Правила проведения экзамена
Итоговая экзаменационная оценка складывается из
- оценки за экзаменационную контрольную работу,
- зачетных оценок за выполнение обязательных домашних заданий и
- оценок за решение премиальных задач.
Экзаменационная контрольная работа состоит из 5 практических задач и 5 вопросов. Каждая из практических задач относится к одному из типов, которые разбирались на семинарах или в лекциях. Каждый из вопросов касается формулировок определений или ключевых результатов, рассмотренных в лекциях.
Обязательные домашние задания
Курсом предполагаются три обязательных домашних задания: "NuSMV", "Spin" и "Uppaal". Невыполнение этих заданий влечёт за собой снижение итоговой экзаменационной оценки:
- Если выполнены ровно два задания, то итоговая оценка снижается на 1:
- "отлично" -> "хорошо";
- "хорошо" -> "удовлетворительно";
- "удовлетворительно" -> "неудовлетворительно".
- Если выполнено менее двух заданий, то итоговая оценка снижается на 2:
- "отлично" -> "удовлетворительно";
- "хорошо" -> "неудовлетворительно";
- "удовлетворительно" -> "неудовлетворительно".
Установка средств верификации
- Для выполнения обязательных домашних заданий необходимо поставить на свою рабочую машину средства NuSMV, Spin и UPPAAL (лучше версию 4.1 ("development snapshot")).
- Рекомендуется всё это поставить в Linux (с Windows у студентов регулярно возникают странные проблемы, а в Linux всё работает - проверено).
- После установки средств желательно проверить, что они работают:
- в выводе "./NuSMV" есть строки, утверждающие, что
- подключены CUDD и MiniSat, либо нет строк о том, что что-то надо подключить, и
- входной файл не подан и работа завершена;
- "./spin -a <папка с примерами spin>/LTL/bakery.pml" успешно завершает работу без вывода;
- "./uppaal" загружает графический интерфейс и для какого-нибудь примера при нажатии на кнопку Check вкладки Verifier при каком-нибудь выделенном свойстве завершает вывод словами Property is satisfied или Property is not satisfied.
- в выводе "./NuSMV" есть строки, утверждающие, что
- Для работы на семинарах, посвящённых средствам верификации, требуется организовать хотя бы один ноутбук на двоих (если совсем не выходит, то на троих) с установленными соответствующими средствами верификации.
Общие правила выполнения заданий "NuSMV", "Spin" и "Uppaal"
- Каждое из заданий можно выполнять как в одиночку, так и в паре.
- Срок выполнения задания (кроме индивидуально согласованных случаев) - от начала проведения соответствующих семинаров и до начала проведения следующего тематического блока семинаров (для последнего блока семинаров - до окончания семестра).
- Первый шаг выполнения - выслать ему на почту письмо с любым текстом и специальным заголовком:
- для выполнения задания "NuSMV" в одиночку: [ver-nusmv] группа Фамилия И.О.
- для выполнения задания "NuSMV" в паре: [ver-nusmv] группа Фамилия И.О., Фамилия И.О.
- для выполнения задания "Spin" в одиночку: [ver-spin] группа Фамилия И.О.
- для выполнения задания "Spin" в паре: [ver-spin] группа Фамилия И.О., Фамилия И.О.
- для выполнения задания "Uppaal" в одиночку: [ver-uppaal] группа Фамилия И.О.
- для выполнения задания "Uppaal" в паре: [ver-uppaal] группа Фамилия И.О., Фамилия И.О.
- В ответ будет выслано письмо, содержащее описание системы и цели исследования этой системы при помощи проверки требований.
- В тексте первого письма можно сформулировать пожелания по виду системы и целей исследования, вплоть до полной формулировки:
- если пожелания разумны, они с немалой вероятностью будут учтены в задании;
- типовые примеры пожеланий: "хочу исследовать параллельно работающие программы", "... схему", "... игру/головоломку", "... систему общего вида, без программистско-математической специализации".
- Решение задания должно быть выслано в ответ на письмо с формулировкой задания в установленный срок.
- Присланное решение
- принимается, если оно полностью или с незначительными недочётами верно;
- не принимается, если оно демонстрирует, что выполнявшие его не пытались вдумчиво разобраться в принципах работы со средством верификации;
- отправляется на доработку, если оно содержит существенные ошибки, но демонстрирует осознанную и в немалой степени правильную работу со средством верификации.
NuSMV
Решение этого задания - это
- файл с расширением ".smv", содержащий формализацию системы и требований в формате средства NuSMV, и
- пояснение того, как результаты проверки требований, выдаваемые NuSMV, соотносятся с поставленными целями, в свободной форме.
Spin
Решение этого задания - это
- файл с расширением ".pml", содержащий формализацию системы и требований на языке PROMELA, и
- пояснение того, как результаты проверки требований, выдаваемые средством Spin, соотносятся с поставленными целями, в свободной форме.
Uppaal
Решение этого задания - это
- файл или файлы, сгенерированные средством Uppaal и содержащие формализацию системы и требований (Uppaal 4.1: файл ".xml"; Uppaal 4.0: файлы ".xml" и ".q"), и
- пояснение того, как результаты проверки требований, выдаваемые средством Uppaal, соотносятся с поставленными целями, в свободной форме.
Премиальные задачи
Крайний срок выполнения всех премиальных задач - конец семестра.
Лекционные премиальные задачи
Эти задачи явно обозначаются в слайдах лекций.
Логика Хоара
Задание сформулировано на последнем слайде материалов семинара 1.
Выполнившие это задание освобождаются от решения задачи на тему логики Хоара на экзамене и могут быть поощрены дополнительно за особые заслуги.
CTL: формализация требований и алгоритмы проверки формул
Если написать письмо с любым содержанием и заголовком [ver-ctl] группа Фамилия И.О., то в ответ будут присланы описание системы и требований к этой системе. Требуется адекватно формализовать требования в логике ветвящегося времени и изобразить шаги работы базового или символьного алгоритма.
Если сомневаетесь, что означает "изобразить шаги работы алгоритма", то по умолчанию поступайте так:
- базовый алгоритм:
- нарисовать модель Крипке, адекватно описывающую систему;
- описать пошаговое получение информации о выполнимости подформул алгоритмом настолько (не)строго, чтобы можно было без чрезмерных усилий строго восстановить каждый шаг работы алгоритма;
- символьный алгоритм:
- описать символьное представление модели Крипке (основанной на любом общеизвестном представлении булевых функций);
- описать пошаговое преобразование символьных записей алгоритмом настолько (не)строго, чтобы можно было без чрезмерных усилий строго восстановить каждый шаг работы алгоритма.
Выполнившие это задание освобождаются от задач, темы которых покрываются этим заданием, и могут быть поощрены дополнительно за особые заслуги (например, за хорошее понимание устройства символьного алгоритма).
CTL и справедливость
Это трудное домашнее задание.
При выполнении этого задания автоматически засчитывается часть задания "CTL: формализация требований и алгоритмы проверки формул", относящаяся к изображению шагов работы алгоритма.
Требуется:
- предложить описание символьного алгоритма верификации CTL-формул, работающего в условиях справедливости для CTL:
- можно написать псевдокод с пояснениями,
- можно описать на естественном языке, но так, чтобы можно было без чрезмерных усилий строго восстановить каждый шаг работы алгоритма,
- можно написать программу,
- ...;
- привести пример работы алгоритма, иллюстрирующий его отличие от "несправедливого" символьного алгоритма.
Литература
- Э.М. Кларк, О. Грамберг, Д. Пелед. Верификация моделей программ: Model Checking. Изд-во МЦНМО, 2002.
- Ю.Г. Карпов. Model Checking: верификация параллельных и распределенных программных систем. Изд-во БХВ-Петербург, 2010.
- K. R. Apt, E.-R. Olderog. Verification of sequential and concurrent programs, Springer, 1997.
- B. Berard, M. Bidoit, A. Finkel, F. Laroussinie, A. Petit, L. Petrucci, P. Schnoebelen. Systems and Software Verification: Model-Checking Techniques and Tools. Springer, 2001.
- Baier C., Katoen J.-P. Principles of model checking, MIT Press, 2008.
- Clarke E., Henzinger T.A., Veith H., Bloem R. Handbook of model checking, Springer, 2018.
Прошлогодние лекции
Видеозаписи лекций размещены по адресу [1] в разделе ЗахаровВА
- Verification problem for hardware and software systems. Why do we need formal verification of information processing systems? Basic approaches to formal verification of hardware and software systems. Principles of model checking. Historical overview. Achievements of formal verification techniques. Лекция 1.
- General principles of deductive program verification. Operational semantics of imperative programs. Problem statement for deductive verification of imperative programs. Hoare logic: theory and practice. Automation of program correctness checking. Лекция 2.
- General principles of model checking. Kripke structures as formal models of information processing systems. First-order representation of Kripke structures. Synchronous and asynchronous models. Granularity of models. Translation of programs into Kripke structure. Лекция 3.
- Properties of program computations. Classification of computational properties. Fairness constraints. Generalized Computational Tree Logic CTL*: syntax and semantics. Temporal Logics CTL and LTL. Formal setting of model checking problem. Лекция 4.
- Tableau-based model checking for CTL. Correctness and complexity of CTL model checking. “Combinatorial explosion” problem. Symbolic representation of formal models. Binary Decision Diagrams (BDDs). Reduction of BDDs to canonical forms (ROBDDs). Operations on ROBDDs: unary and binary Boolean operations, quantification, satisfiability checking. Лекция 5.
- Basics of Fixed Point Theory. Fixed point characterization of CTL temporal operators. Symbolic model checking algorithm for CTL. Лекция 6.
- Model checking problem for LTL. Model checking algorithms for LTL: tableau-based, automata-based. Büchi automata: basic properties and generalizations. Лекция 7.
- Bisimulation and simulation for Kripke models. Computing bisimulation relation for Kripke models. Bisimulation and simulation reduction of Kripke models. Reduction of Kripke models by the influence cones. Data abstraction techniques. Лекция 8.
- Real-time systems. Timed automata (TA). Infeasible runs of TA. Timed computational tree logic (TCTL). Model checking problem for TCTL. Лекция 9.
- A model-checking algorithm for TCTL. Clock and state regions. Region transition systems. Networks of timed automata. Лекция 10.
- Bounded model checking (BMC). Reduction of BMC to thr Satisfiability Chercking Problem (SAT). Application of SAT solvers to BMC problem. Лекция 11.