Редактирование: ВПнМ, примеры задач/Задача 5
Материал из eSyr's wiki.
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
- | <div style="float:right">__TOC__</div> | ||
== Как решать эти задачи? == | == Как решать эти задачи? == | ||
Для решения этих задач '''обязательно''' знать '''[[ВПнМ/Теормин#.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 шаблоны].''' | Для решения этих задач '''обязательно''' знать '''[[ВПнМ/Теормин#.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 шаблоны].''' | ||
- | |||
- | Полезна также ссылка из шаблонов на то, что означают различные области[http://patterns.projects.cis.ksu.edu/documentation/patterns/scopes.shtml]. | ||
- | Обратите внимание на "между Q и R", т.е. "Between Q and R" и на "после Q до R", т.е. "After Q, until R" | ||
Задачи, по сути делятся на инвариантные к прореживанию и не обязательно инвариантные. | Задачи, по сути делятся на инвариантные к прореживанию и не обязательно инвариантные. | ||
Строка 14: | Строка 10: | ||
p W q = <>(!p) -> (p U q) | p W q = <>(!p) -> (p U q) | ||
p W q = p U (q | []p) | p W q = p U (q | []p) | ||
+ | |||
== Задачи (не инв-ные) == | == Задачи (не инв-ные) == | ||
Строка 22: | Строка 19: | ||
После события 'процесс p находится на метке iter_begin' и до наступления события 'процесс p находится на метке iter_end' верно: сразу за событием 'значение глобальной переменной y равно 5' наступает событие 'значение глобальной переменной x равно 3' (полученное свойство не обязательно может быть инвариантным к прореживанию) | После события 'процесс p находится на метке iter_begin' и до наступления события 'процесс p находится на метке iter_end' верно: сразу за событием 'значение глобальной переменной y равно 5' наступает событие 'значение глобальной переменной x равно 3' (полученное свойство не обязательно может быть инвариантным к прореживанию) | ||
- | #define | + | #define p_begin (p@iter_begin) |
- | #define | + | #define p_end (p@iter_end) |
- | #define | + | #define global5 (g==5) |
- | #define | + | #define global3 (g==3) |
- | []( | + | [](<>p_begin && p_begin -> X <> (global5 -> X global3 )) |
+ | |||
+ | TeX'ом: | ||
+ | <math>\Box (\Diamond p \And p \rightarrow X \Diamond (g1 \rightarrow g2))</math> | ||
+ | (по-моему, в формуле вообще нету p_end. такого быть не должно.) | ||
=== Задача 2 === | === Задача 2 === | ||
Строка 33: | Строка 34: | ||
До наступления события 'значение глобальной переменной state равно leave' верно: событие 'процесс p находится на метке sent' наступает не более одного раза | До наступления события 'значение глобальной переменной state равно leave' верно: событие 'процесс p находится на метке sent' наступает не более одного раза | ||
- | #define | + | #define state_leave (state==leave) |
- | #define | + | #define p_sent (p@sent) |
- | + | [](p_sent -> X (!p_sent U state_leave)) | |
=== Задача 3 === | === Задача 3 === | ||
Строка 42: | Строка 43: | ||
Между событиями 'значение глобальной переменной state равно enter_critical' и 'значение глобальной переменной state равно leave_critical' верно: если наступило событие 'процесс p находится на метке lock', то до него было событие 'значение глобальной переменной state равно locked' | Между событиями 'значение глобальной переменной state равно enter_critical' и 'значение глобальной переменной state равно leave_critical' верно: если наступило событие 'процесс p находится на метке lock', то до него было событие 'значение глобальной переменной state равно locked' | ||
- | #define | + | #define state_enter (state==enter_critical) |
- | #define | + | #define state_leave (state==leave_critical) |
- | #define | + | #define state_locked (state==locked) |
- | #define | + | #define p_lock (p@lock) |
- | []( | + | []( state_enter -> X((!p_lock U state_leave) || (<>p_lock && !p_lock U state_locked) ) |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
=== Задача 4 === | === Задача 4 === | ||
Строка 58: | Строка 55: | ||
событие 'процесс q находится на метке received' наступает ровно один раз | событие 'процесс q находится на метке received' наступает ровно один раз | ||
- | #define | + | #define S "state == enter_critical" |
- | #define | + | #define was_received Q@received |
- | []( | + | [](S -> (<>was_received && [](was_received -> X([]!was_received)))) |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
=== Задача 5 === | === Задача 5 === | ||
Строка 72: | Строка 65: | ||
событие 'процесс p находится на метке sent' наступает не менее одного раза | событие 'процесс p находится на метке sent' наступает не менее одного раза | ||
- | #define | + | #define R "state == leave" |
- | #define | + | #define was_sent P@sent |
- | + | ([]!R) || (!R U (was_sent && !R)) | |
- | + | ||
- | ! | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
== Задачи (инв-ные) == | == Задачи (инв-ные) == | ||
Строка 93: | Строка 76: | ||
после события 'в канал 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)))) |
- | []( (a & !b & <>b) -> ( (c -> (!b U (d & !b))) U b) ) // добавили то, что b не происходит одновременно с d. Окончательный вариант. | ||
- | Teravisor: | ||
- | Все три три не верны потому, что формулировка "после ... до ..." подразумевает, что второе событие может не произойти. | ||
- | Моя версия(шаблон S responds to P After Q until R, раскрытие W): [](a && !b -> ( ((p -> (!b U (q && !b ))) U b) || ([](p -> (!b U (q && !b ))) ) | ||
=== Задача 2 === | === Задача 2 === | ||
- | После события | + | После события p и до наступления события q событие r наступает не более одного раза. (полученное свойство должно быть инвариантным к прореживанию) |
- | []( a -> ((c -> c U (!c U b)) U b) ) | ||
- | + | '''1й вариант''': | |
+ | [] (p && !q -> !r W (q || (r W (q || !r W q)))) | ||
- | + | '''2й вариант''': | |
- | + | <math>\Box \Biggl( p \rightarrow \biggl( \Bigl( r \rightarrow (\text{r U !r}) \Bigr) \ || \ \Bigl( \text{(!r U q) } || \text{ (!q U (r U (!r U q)))} \Bigr) \biggr) \Biggr) </math> | |
- | + | ps. пояснение формулы: | |
+ | # до первого || — случай, когда q не факт, что произойдёт (после того, как произойдёт r, оно длится до тех пор, пока не прекратится) | ||
+ | # после первого || — случай, когда q обязательно произойдет | ||
+ | #* до второго || — r встречается 0 раз | ||
+ | #* после второго || — r встречается 1 раз, записано с помощью трёх вложенных циклов (описание промежутков) | ||
=== Задача 3 === | === Задача 3 === | ||
Строка 125: | Строка 106: | ||
В одной итерации вычисления между метками Start и End операция R всегда предшествует (не обязательно непосредственно) выполнению операции S (полученное свойство должно быть инвариантным к прореживанию). | В одной итерации вычисления между метками Start и End операция R всегда предшествует (не обязательно непосредственно) выполнению операции S (полученное свойство должно быть инвариантным к прореживанию). | ||
- | + | <math>\Box \biggl( Start \And \ !End \And \Diamond End \biggr) \rightarrow \biggl( \Bigl( \text{(!S U R)} \And !(S \And R) \And !End \Bigr) \ || \ \text{(!R U End)} \biggr) </math> | |
- | + | ||
- | + | ||
- | + | ||
- | [](a -> ( (!d U c) U b )) | ||
- | |||
- | []( (a & !b & <>b) -> ( (!d U c) U b) ) // добавили то, что a и b не происходят одновременно и то, что b когда-либо произойдет | ||
- | |||
- | []( (a & !b & <>b) -> ( !d U (c | b)) ) // можно и так | ||
=== Задача 4 === | === Задача 4 === | ||
В ходе итерации, начинающейся меткой START и заканчивающейся меткой END, выполнение оператора x==1 всегда влечет за собой приём сообщения, помеченного меткой S. | В ходе итерации, начинающейся меткой START и заканчивающейся меткой END, выполнение оператора x==1 всегда влечет за собой приём сообщения, помеченного меткой S. | ||
- | + | [] (START & !END & <>END -> ( (!P U END)||((P -> (!END U S))U END) ) | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | []( | + | |
- | + | ||
- | + | ||
- | []( (a & !b & <>b) -> ( (c -> (!b U (d & !b))) U b) // добавили то, что b и d не происходят одновременно. Окончательный вариант. | ||
=== Задача 5 === | === Задача 5 === | ||
Строка 154: | Строка 119: | ||
Между событиями 'процесс p находится на метке iter_begin' и 'процесс p находится на метке iter_end' верно: если наступило событие 'в канал c отправляется сообщение req', то до него было событие 'из канала d принимается сообщение ack' | Между событиями 'процесс p находится на метке iter_begin' и 'процесс p находится на метке iter_end' верно: если наступило событие 'в канал c отправляется сообщение req', то до него было событие 'из канала d принимается сообщение ack' | ||
- | #define | + | #define p_b p@iter_begin |
- | #define | + | #define p_e p@iter_end |
- | #define | + | #define c_r c!req |
- | #define | + | #define d_a d?ack |
- | []( | + | []( (p_b && !p_e && <>p_e) -> ((!c_r U p_e) || (!c_r U d_a)) ) |
- | + | (Источник: практикум, задание 4, вариант 117, сдано не Савенкову) | |
- | []( (a & !b & <>b) -> (!c U (d | b)) ) // можно и так | ||
=== Задача 6 === | === Задача 6 === | ||
Строка 169: | Строка 133: | ||
Между событиями 'значение глобальной переменной state равно enter' и 'значение глобальной переменной state равно leave' верно: после события 'в канал c отправляется сообщение req' рано или поздно наступит событие 'из канала d принимается сообщение ack' | Между событиями 'значение глобальной переменной state равно enter' и 'значение глобальной переменной state равно leave' верно: после события 'в канал c отправляется сообщение req' рано или поздно наступит событие 'из канала d принимается сообщение ack' | ||
- | #define | + | #define s_e state == enter |
- | #define | + | #define s_l state == leave |
- | #define c | + | #define c_r c!req |
- | #define d | + | #define d_a d?ack |
- | []( | + | []( (s_e && !s_l && <>s_l) -> ((!s_l U c_r) -> (!s_l U d_a)) ) |
- | + | (Источник: практикум, задание 4, вариант 117, сдано не Савенкову) | |
=== Задача 7 === | === Задача 7 === | ||
Строка 182: | Строка 146: | ||
До наступления события 'процесс p находится на метке iter_end' верно: после события 'значение глобальной переменной x равно 3' рано или поздно наступит событие 'значение глобальной переменной y равно 5' | До наступления события 'процесс p находится на метке iter_end' верно: после события 'значение глобальной переменной x равно 3' рано или поздно наступит событие 'значение глобальной переменной y равно 5' | ||
- | #define | + | #define p_e p@iter_end |
- | #define | + | #define x_3 x == 3 |
- | #define | + | #define y_5 y == 5 |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | (!p_e U x_3) -> (!p_e U y_5) | |
- | + | ||
- | + | ||
- | + | (Источник: практикум, задание 4, вариант 117, сдано не Савенкову) | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
{{Курс ВПнМ}} | {{Курс ВПнМ}} |