Математические методы верификации схем и программ
Содержание
Общая информация
Обязательный курс для магистров 618/2 и 621 групп 3 семестра магистратуры (группа 621 - "Методы верификации программ").
В 2017-2018 учебном году курс читают
- профессор В. А. Захаров
- младший научный сотрудник В. В. Подымов.
Программа
Программа будет обновляться по мере проведения занятий.
- Задача верификации аппаратуры и программного обеспечения. Зачем нужна формальная верификация программ? Основные подходы к задаче формальной верификации. Принципы верификации моделей программ. Исторические сведения. Достижения методов формальной верификации программ. Алгоритмические и комбинаторные трудности применения метода верификации моделей программ. Лекция 1.
- Общие принципы дедуктивной верификации программ. Операционная семантика императивных программ. Формальная постановка задачи верификации программ. Логика Хоара: правила вывода и свойства. Аннотированные программы. Автоматизация проверки правильности программ. Лекция 2.
- Моделирование схем. Системы переходов - модели Крипке. Представление систем переходов формулами логики предикатов первого порядка. Синхронные и асинхронные схемы. Степень детализации представления. Трансляция описаний программ и схем в модели Крипке. Лекция 3.
- Темпоральная логика деревьев вычислений CTL. Синтаксис и семантика CTL. Примеры спецификаций моделей в терминах формул CTL. Темпоральная логика линейного времени LTL. Синтаксис и семантика LTL. Свойства живости и безопасности. Ограничения справедливости. Задача верификации моделей (model-checking). Лекция 4.
- Табличный алгоритм верификации моделей для CTL. Обоснование корректности и сложности табличного алгоритма верификации моделей. Проблема “комбинаторного взрыва”. Символьные средства описания моделей. Двоичные разрешающие диаграммы (BDD). Алгоритм редукции BDD к каноническому виду (OBDD). Выполнение операций над OBDD: унарные и бинарные булевы операции, квантификация, проверка выполнимости, подсчет числа единиц. Общие представления о сложности в классе OBDD. Лекция 5.
- Представления неподвижной точки в CTL. Алгоритм символьной верификации моделей в CTL. Лекция 6.
- Табличная верификация моделей для LTL. Автоматы Бюхи: их свойства и обобщения. Трансляция формул PLTL в автоматы Бюхи. Сведение задачи проверки выполнимости формул LTL к проблеме пустоты для автоматов Бюхи. Лекция 7.
- Отношения бисимуляционной эквивалентности (бисимуляции) и симуляционного квазипорядка (симуляции) на моделях Крипке. Равновыполнимость темпоральных формул на бисимуляционно эквивалентных моделях Крипке. Вычисление классов бисимуляционной эквивалентности на конечных моделях Крипке. Упрощение моделей Крипке при помощи отношений симуляции и и бисимуляции. Редукция моделей Крипке по конусу влияния. Абстракции данных при построении моделей Крипке. Лекция 8.
- Временные автоматы как формальные модели распределенных систем реального времени. Вычисления временных автоматов. Зеноновские вычисления. Синтаксис и семантика Timed CTL. Лекция 9.
- Задача верификации моделей программ реального времени. Отношение эквивалентности часов и регионы. Регионные системы переходов. Оценка числа регионов. Сведение задачи верификации временных автоматов относительно TCTL к задаче верификации моделей Крипке относительно CTL. Лекция 10.
- Верификация моделей программ для вычислений ограниченной длины (bounded model checking, BMC). Сведение задачи BMC к задаче проверки выполнимости булевых формул (SAT). Применение автоматических средств решения задачи SAT для решения задачи BMC. Лекция 11.
Материалы семинаров
Материалы будут обновляться по мере проведения занятий.
Любые вопросы по темам семинарских занятий можно задавать ему.
Семинар 1. Доказательство корректности императивных программ с помощью логики Хоара.
Семинар 2. Модели Крипке. LTL. Безопасность, живость.
Семинар 3. Справедливость. CTL: формализация, табличный и символьный алгоритмы. ROBDD.
Семинар 4. NuSMV: обзор средства.
Семинар 5-6. NuSMV: практические задания по проверке CTL-спецификаций.
Семинар 7. Обзор средства SPIN: синтаксис, трансляция базовых конструкций в модели Крипке.
Инструкция по работе со средством SPIN.
Семинар 8-9. SPIN: практические задания по проверке LTL-спецификаций.
Семинар 10. UPPAAL: практические задания по проверке временных спецификаций.
Архив, прилагающийся к семинару 10.
Правила проведения экзамена
- Итоговая экзаменационная оценка складывается из оценки за экзаменационную контрольную работу, зачетных оценок за выполнение домашних заданий и премиальных оценок за решение особо сложных задач, объявленных в курсе лекций.
- Экзаменационная контрольная работа состоит из 5 задач и 5 вопросов. Каждая из задач контрольной относится к одному из типов задач, которые разбирались на семинарских занятиях или на лекциях. Каждый из вопросов касается формулировок определений или ключевых результатов, рассмотренных на лекциях.
Учет домашних заданий
Логика Хоара: выполнившие это задание освобождаются от решения задачи на тему логики Хоара, и за особые заслуги могут быть поощрены дополнительной премиальной оценкой.
CTL: формализация требований и алгоритмы проверки формул: выполнившие это задание освобождаются от задач, покрываемых темами заданий, и могут быть поощрены дополнительной премиальной оценкой за особые заслуги (например, демонстрацию хорошего понимания устройства символьного алгоритма).
CTL и справедливость: этим заданием покрывается часть задания "алгоритм верификации CTL-формул", и кроме того, выполнившие это задание будут поощрены дополнительной премиальной оценкой.
NuSMV, Spin, Uppaal:
- если выполнены ровно два из трёх заданий, то из итоговой экзаменационной оценки (2, 3, 4, 5) вычитается один балл;
- если выполнено менее двух заданий, то из итоговой экзаменационной оценки вычитается два балла.
Обязательные домашние задания "NuSMV", "Spin", "Uppaal"
Решение домашних заданий, а также любые вопросы по домашним заданиям можно высылать на почту ему.
Установка средств верификации
- Для выполнения обязательных домашних заданий необходимо поставить на свою рабочую машину средства NuSMV, Spin и UPPAAL (лучше версию 4.0, но можно и последнюю).
- Настоятельно рекомендуется всё это поставить в 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"
- Каждое из заданий можно выполнять как в одиночку, так и в паре.
- Срок выполнения задания (кроме индивидуально согласованных случаев) - от начала проведения соответствующих семинаров и до начала проведения следующего тематического блока семинаров (для последнего блока семинаров - до окончания семестра).
- Первый шаг выполнения - выслать ему на почту письмо с любым текстом и специальным заголовком:
- "[Ver 2017 nusmv] Фамилия И.О.", для выполнения задания "NuSMV" в одиночку;
- "[Ver 2017 nusmv] Фамилия И.О., Фамилия И.О.", для выполнения задания "NuSMV" в паре;
- "[Ver 2017 spin] Фамилия И.О.", для выполнения задания "Spin" в одиночку;
- "[Ver 2017 spin] Фамилия И.О., Фамилия И.О.", для выполнения задания "Spin" в паре;
- "[Ver 2017 uppaal] Фамилия И.О.", для выполнения задания "Uppaal" в одиночку;
- "[Ver 2017 uppaal] Фамилия И.О., Фамилия И.О.", для выполнения задания "Uppaal" в паре.
- В ответ будет выслано письмо, содержащее описание системы и цели исследования этой системы при помощи проверки требований.
- В тексте первого письма можно сформулировать пожелания по виду системы и целей исследования, вплоть до полной формулировки:
- если пожелания разумны, они с немалой вероятностью будут учтены в задании;
- типовые примеры пожеланий: "хочу исследовать параллельно работающие программы", "... схему", "... игру/головоломку", "... систему общего вида, без программистско-математической специализации".
- Решение задания должно быть выслано в ответ на письмо с формулировкой задания в установленный срок.
- Присланное решение
- принимается, если оно полностью или с незначительными недочётами верно;
- не принимается, если оно демонстрирует, что выполнявшие его не пытались вдумчиво разобраться в принципах работы со средством верификации;
- отправляется на доработку, если оно содержит существенные ошибки, но демонстрирует осознанную и правильную работу со средством верификации.
NuSMV
Решение этого задания - это
- файл с расширением ".smv", содержащий формализацию системы и требований в формате средства NuSMV, и
- пояснение того, как результаты проверки требований, выдаваемые NuSMV, соотносятся с поставленными целями, в свободной форме.
Spin
Решение этого задания - это
- файл с расширением ".pml", содержащий формализацию системы и требований на языке PROMELA, и
- пояснение того, как результаты проверки требований, выдаваемые средством Spin, соотносятся с поставленными целями, в свободной форме.
Uppaal
Решение этого задания - это
- файл с расширением ".xml", сгенерированный средством Uppaal и содержащий формализацию системы,
- файл с расширением ".q", сгенерированный средством Uppaal и содержащий формализацию требований, и
- пояснение того, как результаты проверки требований, выдаваемые средством Uppaal, соотносятся с поставленными целями, в свободной форме.
Поощряемые домашние задания
Решение домашних заданий, а также любые вопросы по домашним заданиям можно высылать на почту ему.
Логика Хоара
Крайний срок выполнения задания, кроме индивидуально согласованных случаев: 10 октября, 23:59.
Задание сформулировано на последнем слайде материалов семинара 1.
CTL: формализация требований и алгоритмы проверки формул
Крайний срок выполнения задания отсутствует.
Как выполнить это задание:
- написать письмо с любым содержанием и заголовком "[Ver 2017 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.