ВПнМ, примеры задач/Задача 5
Материал из eSyr's wiki.
(→Вариант 3 - добвлена задача) |
м (оформление + дополнение) |
||
Строка 1: | Строка 1: | ||
- | == | + | == Как решать эти задачи? == |
+ | Для решения этих задач '''обязательно''' знать '''[[ВПнМ/Теормин#.D0.9B.D0.BE.D0.B3.D0.B8.D0.BA.D0.B0_LTL._.D0.A1.D0.B8.D0.BD.D1.82.D0.B0.D0.BA.D1.81.D0.B8.D1.81_LTL._.D0.A1.D0.B5.D0.BC.D0.B0.D0.BD.D1.82.D0.B8.D0.BA.D0.B0_.D0.B2.D1.8B.D0.BF.D0.BE.D0.BB.D0.BD.D0.B8.D0.BC.D0.BE.D1.81.D1.82.D0.B8_.D1.84.D0.BE.D1.80.D0.BC.D1.83.D0.BB._.D0.A1.D0.B8.D0.BB.D1.8C.D0.BD.D1.8B.D0.B9_.D0.B8_.D1.81.D0.BB.D0.B0.D0.B1.D1.8B.D0.B9_until.|определения]]''', а так же следующие '''[http://patterns.projects.cis.ksu.edu/documentation/patterns/ltl.shtml шаблоны].''' | ||
+ | |||
+ | Задачи, по сути делятся на инвариантные к прореживанию и не обязательно инвариантные. | ||
+ | |||
+ | '''Инвариантная к прореживанию''' формула - это такая формула, результат вычисления которой не меняется от того, применяется прореживание или нет. '''Прореживание''' - это сужение нескольких состояний до одного (а м.б. и расширение одного до нескольких - доподлинно неизвестно). | ||
+ | |||
+ | Будьте готовы к тому, что вам скажут, что в формуле '''применять слабый until нельзя''', поэтому здесь следующие форм-лы экв-ти: | ||
+ | p W q = ([]p) | (p U q) | ||
+ | p W q = <>(!p) -> (p U q) | ||
+ | p W q = p U (q | []p) | ||
+ | |||
+ | |||
+ | == Задачи (не инв-ные) == | ||
+ | Втаких задачах можно спокойно применять оператор Next (X). | ||
=== Задача 1 === | === Задача 1 === | ||
Строка 36: | Строка 50: | ||
[]( state_enter -> X((!p_lock U state_leave) || (<>p_lock && !p_lock U state_locked) ) | []( state_enter -> X((!p_lock U state_leave) || (<>p_lock && !p_lock U state_locked) ) | ||
- | + | === Задача 4 === | |
- | + | ||
- | === Задача | + | |
После наступления события 'значение глобальной переменной state равно enter_critical' верно: | После наступления события 'значение глобальной переменной state равно enter_critical' верно: | ||
Строка 48: | Строка 60: | ||
[](S -> (<>was_received && [](was_received -> X([]!was_received)))) | [](S -> (<>was_received && [](was_received -> X([]!was_received)))) | ||
- | === Задача | + | === Задача 5 === |
До наступления события 'значение глобальной переменной state равно leave' верно: | До наступления события 'значение глобальной переменной state равно leave' верно: | ||
Строка 58: | Строка 70: | ||
([]!R) || (!R U (was_sent && !R)) | ([]!R) || (!R U (was_sent && !R)) | ||
- | + | == Задачи (инв-ные) == | |
- | === Задача | + | === Задача 1 === |
После события 'процесс p находится на метке iter_begin' и до наступления события 'процесс p находится на метке iter_end' верно: | После события 'процесс p находится на метке iter_begin' и до наступления события 'процесс p находится на метке iter_end' верно: | ||
после события 'в канал c отправляется сообщение req' рано или поздно наступит событие 'из канала d принимается сообщение ack' | после события 'в канал c отправляется сообщение req' рано или поздно наступит событие 'из канала d принимается сообщение ack' | ||
- | #define | + | #define begin P@iter_begin |
- | #define | + | #define end P@iter_end |
- | #define | + | #define R ...@C_send_req |
- | #define | + | #define S ...@D_send_ack |
- | [](( | + | []((begin) -> [](R -> (!end U (S && !end)))) |
- | + | ||
- | === Задача | + | === Задача 2 === |
После события p и до наступления события q событие r наступает не более одного раза. (полученное свойство должно быть инвариантным к прореживанию) | После события p и до наступления события q событие r наступает не более одного раза. (полученное свойство должно быть инвариантным к прореживанию) | ||
Строка 85: | Строка 97: | ||
- | === Задача | + | === Задача 3 === |
В одной итерации вычисления между метками Start и End операция R всегда предшествует (не обязательно непосредственно) выполнению операции S (полученное свойство должно быть инвариантным к прореживанию). | В одной итерации вычисления между метками Start и End операция R всегда предшествует (не обязательно непосредственно) выполнению операции S (полученное свойство должно быть инвариантным к прореживанию). | ||
Строка 92: | Строка 104: | ||
- | === Задача | + | === Задача 4 === |
В ходе итерации, начинающейся меткой START и заканчивающейся меткой END, выполнение оператора x==1 всегда влечет за собой приём сообщения, помеченного меткой S. | В ходе итерации, начинающейся меткой START и заканчивающейся меткой END, выполнение оператора x==1 всегда влечет за собой приём сообщения, помеченного меткой S. | ||
Строка 98: | Строка 110: | ||
- | === Задача | + | === Задача 5 === |
- | + | ... | |
- | + | ||
{{Курс ВПнМ}} | {{Курс ВПнМ}} |
Версия 16:00, 14 июня 2009
Содержание |
Как решать эти задачи?
Для решения этих задач обязательно знать определения, а так же следующие шаблоны.
Задачи, по сути делятся на инвариантные к прореживанию и не обязательно инвариантные.
Инвариантная к прореживанию формула - это такая формула, результат вычисления которой не меняется от того, применяется прореживание или нет. Прореживание - это сужение нескольких состояний до одного (а м.б. и расширение одного до нескольких - доподлинно неизвестно).
Будьте готовы к тому, что вам скажут, что в формуле применять слабый until нельзя, поэтому здесь следующие форм-лы экв-ти:
p W q = ([]p) | (p U q) p W q = <>(!p) -> (p U q) p W q = p U (q | []p)
Задачи (не инв-ные)
Втаких задачах можно спокойно применять оператор Next (X).
Задача 1
После события 'процесс p находится на метке iter_begin' и до наступления события 'процесс p находится на метке iter_end' верно: сразу за событием 'значение глобальной переменной y равно 5' наступает событие 'значение глобальной переменной x равно 3' (полученное свойство не обязательно может быть инвариантным к прореживанию)
#define p_begin (p@iter_begin) #define p_end (p@iter_end) #define global5 (g==5) #define global3 (g==3)
[](<>p_begin && p_begin -> X <> (global5 -> X global3 ))
TeX'ом:
(по-моему, в формуле вообще нету p_end. такого быть не должно.)
Задача 2
До наступления события 'значение глобальной переменной state равно leave' верно: событие 'процесс p находится на метке sent' наступает не более одного раза
#define state_leave (state==leave) #define p_sent (p@sent)
[](p_sent -> X (!p_sent U state_leave))
Задача 3
Между событиями 'значение глобальной переменной state равно enter_critical' и 'значение глобальной переменной state равно leave_critical' верно: если наступило событие 'процесс p находится на метке lock', то до него было событие 'значение глобальной переменной state равно locked'
#define state_enter (state==enter_critical) #define state_leave (state==leave_critical) #define state_locked (state==locked) #define p_lock (p@lock)
[]( state_enter -> X((!p_lock U state_leave) || (<>p_lock && !p_lock U state_locked) )
Задача 4
После наступления события 'значение глобальной переменной state равно enter_critical' верно: событие 'процесс q находится на метке received' наступает ровно один раз
#define S "state == enter_critical" #define was_received Q@received
[](S -> (<>was_received && [](was_received -> X([]!was_received))))
Задача 5
До наступления события 'значение глобальной переменной state равно leave' верно: событие 'процесс p находится на метке sent' наступает не менее одного раза
#define R "state == leave" #define was_sent P@sent
([]!R) || (!R U (was_sent && !R))
Задачи (инв-ные)
Задача 1
После события 'процесс p находится на метке iter_begin' и до наступления события 'процесс p находится на метке iter_end' верно: после события 'в канал c отправляется сообщение req' рано или поздно наступит событие 'из канала d принимается сообщение ack'
#define begin P@iter_begin #define end P@iter_end #define R ...@C_send_req #define S ...@D_send_ack
[]((begin) -> [](R -> (!end U (S && !end))))
Задача 2
После события p и до наступления события q событие r наступает не более одного раза. (полученное свойство должно быть инвариантным к прореживанию)
ps. пояснение формулы:
- до первого || — случай, когда q не факт, что произойдёт (после того, как произойдёт r, оно длится до тех пор, пока не прекратится)
- после первого || — случай, когда q обязательно произойдет
- до второго || — r встречается 0 раз
- после второго || — r встречается 1 раз, записано с помощью трёх вложенных циклов (описание промежутков)
Задача 3
В одной итерации вычисления между метками Start и End операция R всегда предшествует (не обязательно непосредственно) выполнению операции S (полученное свойство должно быть инвариантным к прореживанию).
Задача 4
В ходе итерации, начинающейся меткой START и заканчивающейся меткой END, выполнение оператора x==1 всегда влечет за собой приём сообщения, помеченного меткой S.
[] (START & !END & <>END -> ( (!P U END)||((P -> (!END U S))U END) )
Задача 5
...