Пересдача состоится 3 сентября в 12:15 в аудитории 727. Формат пересдачи такой же, как и экзамена. Семестровые баллы обнуляются. Оценка будет выставлена по итогам решения упражнений и ответов на вопросы по ним.
Рубрика: Новости
Экзамен
14 июня состоится экзамен. Он пройдет в аудитории 526-Б и начнется в 9:00 (информация про аудитории 72 и 73 устарела). Экзамен длится 120 минут. Экзамен письменный. Будут предложены задачи и упражнения по всему курсу. Можно пользоваться любыми письменными и напечатанными материалами. Нельзя пользоваться электронной техникой. Показ работ и выставление оценок пройдут в этот же день.
О методиках доказательства
Как и было обещано на лекции, публикую документ с некоторыми методиками доказательства в инструментах frama-c+why3+jessie2 и солверах
Практическое задание
В рамках практического задания нужно написать формальную спецификацию требований к некоторой структуре данных и операциях над нею (этап 1) и доказать полную корректность одной из реализаций операций относительно их спецификаций (этап 2). Язык реализации — Си, язык спецификации — ACSL, инструменты доказательства — frama-c+jessie2+why3+солверы.
Этапы задания выполняются последовательно. Реализация для выполнения этапа 2 выдается преподавателем после успешной сдачи этапа 1. Этап 1 сдается только очно, этап 2 может сдаваться заочно. Дни для сдачи этапа 1: 11 апреля, 18 апреля, 25 апреля, 16 мая, с 13:50 до последнего сдающего, но не позднее 17:20. При отсутствии желающих сдавать до 14:05 сдача в данный день прекращается. Преподаватели оценивают правильность выполнения этапа и могут не давать комментариев о месте ошибки в исходных текстах спецификаций. Можно пытаться сдавать несколько раз. Этап 1 считается выполненным только целиком и не оценивается частично.
Текст, общий для всех вариантов задания, и файлы находятся по этой ссылке. Для получения варианта нужно отправить письмо на почту .
Контрольная работа №2
На лекции 11 апреля состоится контрольная работа по спецификации. В контрольной работе будет два задания. В первом задании нужно будет написать спецификацию для типа данных и операций над ним (как в домашней работе №8). Во втором задании будет дана реализация функции и спецификация для нее и нужно будет вставить аннотации в текст функции, чтобы связка инструментов frama-c+jessie2+why3+солверы доказала полную корректность этой реализации относительно ее спецификации. В реализации будут использоваться указатели, при верификации надо учитывать разделение по регионам.
Как всегда, на контрольной работе можно пользоваться любыми письменными и печатными материалами, а пользоваться электронной техникой нельзя. После написания контрольной работы можно сдавать практическое задание.
Домашняя работа №8
В архиве по этой ссылке находятся исходные файлы для выполнения задания:
- заголовочный файл
stack.h
с определением структуры данныхStack
и заголовками функцийStack__init
,Stack__final
,Stack__push
иStack__pop
- файлы с реализациями этих функций:
dummy_stack.c
,true_stack.c
,magic_stack
,realloc_stack
- файл
main.c
с функциейmain()
.
В заголовочном файле на языке ACSL напишите спецификацию структуры данных Stack
и всех операций над ним согласно приведенным требованиям. При помощи связки инструментов frama-c+jessie2+why3 докажите, что все реализации этих операций полностью корректны относительно их спецификаций. При помощи связки инструментов frama-c+jessie2+why3 докажите полную корректность функции main()
. При необходимости вставляйте дополнительные аннотации в текст функций. Не меняйте спецификацию функций в файлах с реализациями. Далее перечислены требования к этому типу данных.
Это задание является подготовкой к контрольной работе №2. Крайне рекомендую выполнить эту домашнюю работу до контрольной работы. Архив с дополненными файлами и сессиями доказательства присылайте на почту до 23:59 12 апреля. Полную корректность функции main()
необходимо доказывать совместно с каждой из реализаций операций (это следствие того, что инструменту Jessie2 необходима реализация для вычисления регионов).
Срок сдачи домашней работы №7
О домашней работе №8
Домашняя работа №8 будет дана по материалу лекции 4 апреля.
28 марта ноутбуки с Frama-C могут быть полезны
Лекция и семинар 28 марта будут посвящены использованию нашей связки инструментов frama-c+jessie2+why3 для доказательства полной корректности. Будет много живых демонстраций доказательства. Очень рекомендую взять с собой ноутбук установленными инструментами, чтобы можно было повторять за мной действия и сразу задавать вопросы.
Домашняя работа №7
Задача 1. Напишите теорию Why3 таблиц аллоцированных блоков динамической памяти. В этой теории введите типы для таблицы и указателя, предикатного символа valid для проверки корректности разыменования указателя и все остальное вместе с аксиомами для решения последующих задач. Можно предположить, что все блоки имеют одинаковый размер (не массивы) и нет указателей внутрь блока. Не забудьте проверить непротиворечивость своей теории!
Задача 2. При помощи этой теории напишите теорию Why3 с предусловиями и постусловиями Си-функций malloc и free. Можно предположить неограниченность памяти. Можно предположить, что эти Си-функции используется для работы только с блоками того же размера, что и в теории из задания 1.
Задача 3. Напишите блок-схему, полностью корректную относительно указанной ниже спецификации. Блок-схема должна быть составлена по некоторой Си-функции. Функциональные и предикатные символы из задания 1 не могут использоваться в коде Си-функции (они не являются Си-функциями).
/*@
requires valid(p, pre_alloc_table);
ensures !valid(p, post_alloc_table) && valid(\result, post_alloc_table);
*/
char *foo(char *p);
Задание 4. Напишите теорию Why3 с доказательством полной корректности блок-схемы из задания 3 относительно указанной у нее спецификации и проведите доказательство. Укажите в комментарии блок-схему и Си-функцию из задания 3.
Решение (теории с комментариями и сессию доказательства) пришлите на почту до 23:59 30 марта.