Главная » Все файлы » Просмотр файлов из архивов » Документы » Вопросы и ответ к экзамену по курсу «Формальная спецификация и верификация программ» янв. 2013

Вопросы и ответ к экзамену по курсу «Формальная спецификация и верификация программ» янв. 2013

2020-08-21СтудИзба

Описание файла

Документ из архива "Вопросы и ответ к экзамену по курсу «Формальная спецификация и верификация программ» янв. 2013", который расположен в категории "". Всё это находится в предмете "формальная спецификация и верификация программ" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Онлайн просмотр документа "Вопросы и ответ к экзамену по курсу «Формальная спецификация и верификация программ» янв. 2013"

Текст из документа "Вопросы и ответ к экзамену по курсу «Формальная спецификация и верификация программ» янв. 2013"

Вопросы и ответ к экзамену по курсу «Формальная спецификация и верификация программ» янв. 2013

ВНИМАНИЕ: В связи со случаями вандализма доступ на редактирование ограничен!

Ответы с консультации:

http://img541.imageshack.us/img541/9292/20130123145453.jpg

http://img138.imageshack.us/img138/5917/20130123145504.jpg

RSL и RAISE метод

«Практические» задания

А1. По данной явной спецификации построить эквивалентную неявную спецификацию без использования рекурсии и циклов.

Пример:
variable x : Int, y : Int
value f : Unit -~-> write x, y Nat
f() is (if x + y > 0 then y := x end;x+y)

Ответ:

variable x : Int, y : Int
value
f : Unit -~-> write x, y Nat
f() as n
post x’ = x /\ n = x + y /\
( if x` + y` > 0 then y = x` else y = y` end )

Рецепт:

Выражение id’ обозначает значение переменной id в состоянии до вызова функции.

Не забывать про предыдущие значения (особенно в условных выражениях), не забывать про x = x’ во всех ветках, если он не меняется. (C.Павел)

(А. Зачесов) Сюда добавлю еще три задачи, которые были в лекциях. Задание точно такое же:

А1.1
variable x : Int
value f : Int-list -~-> write any Nat
f(xs) is local variable c : Nat := 0 in
for i in <. 1 .. len xs.> do
if xs(i) = x then c := c+1 end
end;
c
end

Ответ:

Эта функция выдает количество вхождений числа x в список xs.

f(xs) as cnt

post (xs = xs’) /\ (x = x’) /\ (cnt = card {n | n : Nat :- (n isin inds xs) /\ (xs(n) = x)})

A1.2

variable x : Int
value f : Unit -~-> write any Nat-set
f() is local variable ps : Nat-set := {} in

for p in <.2 .. x-1.> do

if exists k : Nat :- k isin ps /\ p\k = 0
then skip
else ps := ps union {p} end;

end;

ps

end

Ответ:

Выдает множество всех простых чисел меньше x.

value f:Unit -~-> Nat-set

f() as ps

pre x > 2

post forall p : Int :- ( p >= 2 /\ p < x /\ ( exists k:Nat :- k >= 2 /\ p\k = 0) ) p ~isin ps= 2 /\ p = 2 /\ k

post forall p : Int :- ( p >= 2 /\ p < x /\ ( exists k:Nat :- k >= 2 /\ p\k ~= 0) ) p isin ps

A1.3

variable x : Int
value f : Unit -~-> write any Nat-list
f() is local variable s : Nat-list := <..>, k : Int := 0, i : Int := 1 in
while i <= x do
k := k + 2*i + 1;
i := i + 1;
s := s ^ <.k.>
end;
s
end

Ответ:

Выдает список с числами n*(n+2) для всех натуральных n <= x.

value f:Unit -~-> Nat-list

f() as s

post forall p : Int :- ( p > 0 /\ p <= x ) p*(p+2) isin elems(s)

post forall p : Int :- ( p > 0 /\ p <= x-1 ) s(p) < s(p+1)

А2. По данной неявной спецификации функции f построить явную спецификацию этой функции, являющуюся уточнением данной неявной спецификации.

Пример:
value f : Nat-list >< Nat -~-> Nat
f(nums, max) as n
post n < len nums /\ sum(nums, n) < max /\ sum(nums, n+1) >= max
pre max > 0 /\ max <= sum(nums, len nums)
value sum : Nat-list >< Nat -> Nat
sum(s, n) is if n = 0 then 0 else hd s + sum(tl s, n-1)
pre n <= len s

Ответ:

value f : Nat-list >< Nat -~-> Nat
f(nums, max) is ff(nums, 0, max)
value ff : Nat-list >< Nat >< Nat -~-> Nat
ff(nums, partsum, max) is if partsum + hd nums >= max then 0 else ff(tl nums, partsum + hd nums, max) + 1 end

pre max > 0 /\ max <= sum(nums, len nums)

Альтернативный ответ:

value f : Nat-list >< Nat -~-> Nat

f(nums, max) is if hd nums >= max then 0

else 1 + f(tl nums, max - hd nums)

end

pre max > 0 /\ max <= sum(nums, len nums)

Рецепт:

Процесс перехода от одной абстрактной модели к другой называется уточнением (refinement), полученная в результате уточнения модель называется реализацией. При этом говорят, что одна спецификация уточняет другую, если:

  • реализация сохраняет объявления всех сущностей исходной спецификации (абстрактные типы могут заменяться описанием типа, подтипы могут заменяться своими максимальными типами),

  • могут появляться объявления и описания новых сущностей и свойств,

  • все свойства (аксиомы) исходной спецификации остаются справедливыми в реализации.

Описание функции в явнсом стиле (операционная спецификация) ориентировано на описание конкретного алгоритма и используется в том случае, когда явно задаётся спооб преобразования входных параметров в выходные.

Функция sum(s, n) возвращает сумму первых n элементов списка s. Функция sum описана в явном виде. Функция f(nums, max) возвращает максимальное число первых элементов списка, сумма которых меньше max.

А3. По данной алгебраической спецификации вычислить значение выражения, если это возможно сделать. В ответе представить процесс вычисления в виде переписывания термов.

Пример: выражение: first(add(add(add(add(add(empty, 5), 100), 0), 2), 20)).
Алгебраическая спецификация:
scheme A0 = class
type S
value empty : S,
add : S >< Nat -> S,
first : S -~-> Nat
axiom all s : S, e : Nat :-
first(add(s, e)) is if e > 10 then 2 * first(s)
elsif e > 5 then first(s)
else 0 end
end

Ответ: first(add(add(add(add(add(empty, 5), 100), 0), 2), 20)) = 2 * first(add(add(add(add(empty, 5), 100), 0), 2)) = 2 * 0 = 0. Вычисление возможно.



А4. Закончите аксиому алгебраической спецификации типа данных S, формализующую поведение указанных далее операций над этим типом. Пример: S - очередь ограниченного размера capacity, add - добавление в очередь, size - количество элементов в очереди.

scheme QUEUE = class
type S, E
value capacity : Nat
value empty : S,
add : S >< E -~-> S,
size : S -> Nat
axiom all s : S, e : E :- size(add(s, e)) is . . .

Ответ.

axiom all s : S, e : E :- size(add(s, e)) is if size(s) >= capacity then capacity else size(s)+1 end



Альтернативный ответ

axiom all s : S, e : E :- size(add(s, e)) is size(s)+1 pre size < capacity

А5. Указать, какие из стилевых характеристик относятся к данной спецификации (явная, неявная, алгебраическая, моделеориентированная, аппликативная, императивная, формальная, неформальная).

Пример: (в качестве спецификации может быть любой текст, который встретился в курса, а именно RSL-спецификация, PVS-теоремы)

scheme S = class
type T, E
variable x : Nat
end

Ответ: императивная, формальная.

Рецепт: стили спецификаций //lecture-2011-09-28.pdf:

Я так понимаю, что

явная\неявная определяется через использование is в определениях переменных и формул

формальная\неформальная - через используемый язык (неформальная - на естественном языке обычно)

Императивный - всякие переменные, их новые-старые значения, счетчики, присваивания. Аппликативный - ближе к функциональному проганью (например неявная спека без переменных. Подробнее - методичка RSL стр 45.)

А6. Запишите на RSL полный инвариант указанного типа согласно заданию, не меняя определений типов. При необходимости можете добавить новые разделы спецификации. Полный инвариант типа - тот, из которого следуют все возможные инварианты этого типа.

Пример: type E, S = E-list
S является стеком ограниченного размера

Ответ:
value size : Nat
type E, S = E-list
axiom all s : S :- len s <= size

А7. Чему равно значение каждого из следующих выражений на RSL? Если ответ зависит от каких-либо переменных, записать эквивалентное выражение, максимально упростив исходное выражение (типы всех переменных таковы, что все написанные выражения семантически корректны).

Пример:
а) <. x**2 | x in <.1 .. 3.> :- abs x < 10 .>
б) {x, y, x} \ { x }
в) [ 1 +> 2 ] !! [ 1 +> 3 ] union [ 2 +> 2 ]
г) x > 0 /\ x + y < 1 /\ y > 2
д) x isin s => x isin (s union t)

Ответ: а) <.1, 4, 9 .>, б) {y}\{x}, в) [1 +> 3, 2 +> 2], г) false, д) true

Рецепт: быть внимательным, иметь список приоритета операций и знать, что они делают. И думать больше.



А8. Приведите пример инвариантного свойства состояния указанной подсистемы/системы или её объекта (объектов) управления, которое она должна поддерживать (на русском языке).

Пример: диспетчер виртуальной памяти.

Ответ: Не существует двух записей одного и того же вирт адреса, которые ведут на разные физические адреса



А9. Для данной подсистемы/системы привести один пример её операции, которую имеет смысл на ранних этапах формальной спецификации определить частично (т.е. не тотально). Укажите условие, при котором эта операция будет не определена в такой спецификации.

Пример: диспетчер виртуальной памяти

Ответ: операция получения виртуального адреса по физическому. Имеет смысл ее сначала определить частичной, например, не определять для виртуальных адресов, которым в данный момент не соответствует какой-либо физический адрес.



А10. Опишите возможное отношение соответствия между двумя моделями заданных видов.

Пример: неявная спецификация и явная спецификация.

Ответ: вводим функцию абстракции и следуем согласно диаграме коммутативности

Источник: ответы, выданные на консультации.

А11. Сформулировать на RSL возможную функцию абстракции от типа Simpl в тип Sspec.

Пример: type A, B, Simpl = A -m-> B, Sspec = (A><B)-set

Ответ c консультации:

value retr: Simple -> Sspec
retr(m) is {(x,m(x)) | x : A :- x isin dom m}

А12. В процессе уточнения моделей была построена следующая цепочка типов: S1 ~~~> S2 ~~~> S3 (S2 уточняет S1, S3 уточняет S2). Для данных S1 и S3 приведите S2, нетривиально отличающийся от S1 и S3.

Пример: type A, B, C, S1 = (A >< B >< C)-set, S3 = A -m-> (B >< C)

Ответ: type S2=(A >< B) -m-> C

Источник: ответы, выданные на консультации.

Рецепт: нетривильно = появляется новая информация.

А13. Верифицируйте описанную в задании реализацию программной системы. Т.е. кратко сформулируйте формальную модель реализации (поместите его в ответ), формальной сформулируйте требование корректности (поместите его в ответ) и проведите верификацию (в ответ поместите краткое описание, как вы это делали, и вердикт).

Пример: Разрабатывается управляющая микросхема аппарата по размену купюр и монет. Аппарат принимает одну купюру (10р, 50р, 100р) или монету (10р) и выдает монеты достоинством 5р на ту же сумму. У аппарата есть лампочка, которая моргает в том случае, если размен купюры невозможен (например, закончились монеты или обнаружена внутренняя проблема), и горит непрерывно, если невозможен как размер купюры, так и размен монеты. Разработчики решили завести в аппарате 2 регистра. Если у автомата запрашивают размен монеты, то из второго регистра вычитается число 2 и его значение копируется в первый регистр. Если у автомата запрашивают размен купюры, то из первого регистра вычитается 2, 10 или 20 (в зависимости от достоинства купюры) и его значение копируется во второй регистр. Если в первом регистре число меньше 20, лампочка начинает моргать. Если во втором регистре число меньше 2, лампочка переводится в режим постоянного горения.

Ответ:

scheme MONEYS_MACHINE = class

type Machine :: reg1 : Nat, reg2 : Nat

value lamp_blink : Machine -> Bool

lamp_blink(m) is reg1(m) < 20

value lamp_on : Machine -> Bool

lamp_on(m) is reg2(m) < 2

value input_bank : Machine >< Nat -~-> Machine

input_bank(m, n) as m2

post reg1(m2) = reg1(m) - n /\ n isin {2, 10, 20}

value input_money : Machine -~-> Machine

input_money(m) as m2

post reg2(m2) = reg2(m) - 2 /\ reg1(m2) = reg2(m2)

pre ~lamp_on(m)

- лампочка либо только горит, либо только моргает, либо выключена

axiom all m: Machine :- ~lamp_blink(m) \/ ~lamp_on(m)

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5136
Авторов
на СтудИзбе
443
Средний доход
с одного платного файла
Обучение Подробнее