Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Лекция 7. Логика линейного времени (LTL). Использование LTL в Spin

Лекция 7. Логика линейного времени (LTL). Использование LTL в Spin (К. Савенков - Верификация программ на моделях (2012)), страница 2

PDF-файл Лекция 7. Логика линейного времени (LTL). Использование LTL в Spin (К. Савенков - Верификация программ на моделях (2012)), страница 2 Надёжность программного обеспечения (53230): Лекции - 7 семестрЛекция 7. Логика линейного времени (LTL). Использование LTL в Spin (К. Савенков - Верификация программ на моделях (2012)) - PDF, страница 2 (53230) - 2019-09-18СтудИзба

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

Файл "Лекция 7. Логика линейного времени (LTL). Использование LTL в Spin" внутри архива находится в папке "К. Савенков - Верификация программ на моделях (2012)". PDF-файл из архива "К. Савенков - Верификация программ на моделях (2012)", который расположен в категории "". Всё это находится в предмете "надёжность программного обеспечения" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 2 страницы из PDF

 Свойства,  инвариантные  к  прореживанию  •  Пусть  φ  –  трасса  некоторого  вычисления  над  пропозициональными  формулами  P,  –  по  трассе  можно  определить,  выполняется  ли  на  ней  темпоральная  формула,  n1 n 2 n 3ϕ=ϕ–  трассу  можно  записать  в  виде                                1      ϕ        2      ϕ        3        ...        ,    где  значения  пропозициональных  формул  на  каждом  интервале  совпадают.  •  Обозначим  E(φ)  набор  всех  трасс,  отличающихся  лишь  значениями  n1,  n2,  n3  (т.е.  длиной  интервалов)  –  E(φ)  называется  расширением  прореживания  φ.

 Расширение  прореживания  x  =  1  p: (x == mutex)q: (x != y)(y==0)   mutex++   prin‘   mutex-­‐-­‐  x  =  0  x==1  x==1  x==1  x==1  x==1  x==0  x==0  bit x,y;y==0  y==0  y==0  y==0  y==0  y==0  byte mutex;y==0  active proctype A()mutex==0   mutex==0   mutex==0   mutex==1   mutex==1   mutex==0   mutex==0  {x = 1;(y == 0) ->mutex++;printf(“%d\n”, _pid);mutex--;x = 0}трасса  φ  трасса  φ1∈E(φ)  p  !p  !p  p  p  !p  p  !q  q  q  q  q  q  !q  p  !p  p  !p  p  !q  q  q  q  !q  Свойства,  инвариантные  к  прореживанию  •  Свойство  φ,  инвариантное  к  прореживанию,  либо  истинно  для  всех  трасс  из  E(φ),  либо  ни  для  одной  из  них:  ϕf → ∀v ∈ E (ϕ ), vf•  истинность  такого  свойства  зависит  от  порядка,  в  котором  пропозициональные  формулы  меняют  свои  значения,  и  не  зависит  от  длины  трассы;  •  Теорема:  все  формулы  LTL  без  оператора  X  инвариантны  к  прореживанию.

 •  Более  того,  в  рамках  LTL  без  X  можно  описать  все  свойства,  инвариантные  к  прореживанию.  Связь  между  LTL    и    автоматами  Бюхи  (конструкциями  never)  Связь  LTL  с  автоматами  Бюхи  •  Удобно  проверять  допустимость  трасс  для  некоторого  автомата  Бюхи;  •  Удобно  описывать  свойства  правильности  при  помощи  темпоральных  формул;  •  Что  дальше?  •  Теорема:  Для  всякой  формулы  LTL  f  существует  автомат  Бюхи,  который  допускает  те  и  только  те  прогоны,  которым  соответствуют  трассы,  на  которых  выполнима  f.  •  Пример:  формуле  <>[]p соответствует  автомат  true  s0  p  s1  p  Переход  от  LTL  к  автоматам  •  Привести  свойство  правильности  LTL  к  форме  never  языка  Promela  достаточно  просто:  нужно  построить  отрицание  формулы  LTL  f  и  поместить  его  в  тело  never:  –  f  выполняется  на  всех  вычислениях   ⇔–  !f  не  выполняется  ни  на  одном  вычислении   ⇔–  автомат  {!f}  не  допускает  ни  одного  прохода,  полученного  в  результате  синхронного  выполнения  с  системой.

   ! 〈〉 [] p ≡ []![] p ≡ []〈〉! ptrue  s0  !p  true  s1  Примеры  !p||q  •  p -> qtrue  !p||q  •  []p -> qtrue  true  !p  true  •  [](p -> q)!p||q  Примеры  true  •  [](p -> <>q)!p||q  !p  •  [](p -> X<>q)!p&&q  q  q  true  !p&&p  true  q  true  true  И,  наконец…  •  [](p -> X<>q)&&(<>p)true  true  !p&&q  p  p&&q  true  true  q   !p&&q !p    p  true  true  !p  true  •  ![](p -> X<>q)&&(<>p)!p  p  true  p  true  !p  !q  Отрицания  формул  LTL  Формулу  LTL  всегда  можно  переписать  в  таком  виде,  что  отрицания  будут  появляться  только  перед  пропозициональными  символами  •  ![](p -> <>q)•  ![](!p || <>q) –  по  определению  логической  импликации  •  <>!(!p || <>q)  –  ![]p  эквивалентно  <>!p  •  <>(p && !<>q) –  По  правилу  ДеМоргана  •  <>(p && []!q) –  !<>q  эквивалентно  []!q  И,  наконец…  •  !([](p -> X<>q)&&(<>p))–  ![](!p || (X<>q))||!<>p!p  –  <>!(!p || (X<>q))||[]!pp  true  –  <>(p && !(X<>q))||[]!p–  <>(p &&true  (X[]!q))||[]!p!p  p  !q  Используем  Spin  для  трансформации  формул  LTL  > ./spin -f '<>[]p'never {/* <>[]p */T0_init:if:: ((p)) -> goto accept_S4:: (1) -> goto T0_initfi;accept_S4:if:: ((p)) -> goto accept_S4fi;}> ./spin -f `!<>[]p'never {/* !<>[]p */T0_init:if:: (! ((p))) -> gotoaccept_S9:: (1) -> goto T0_initfi;accept_S9:if:: (1) -> goto T0_initfi;}true   T0_init  true   T0_init  p  !p  true  s4  s9  p  Правила  синтаксиса  > ./spin -f `([]p -> <> (a+b <= c) )'#define q (a+b <= c)Вводим  строчные  макроопределения  для  всех  булевых  подформул    > ./spin -f `[] (p -> <> q)'never {/* [] (p -> <> q) */T0_init:if:: (((! ((p))) || ((q)))) -> goto accept_S20:: (1) -> goto T0_S27fi;accept_S20:if:: (((! ((p))) || ((q)))) -> goto T0_init:: (1) -> goto T0_S27fi;accept_S27:if:: ((q)) -> goto T0_init:: (1) -> goto T0_S27fi;T0_S27:if:: ((q)) -> goto accept_S20:: (1) -> goto T0_S27:: ((q)) -> goto accept_S27fi;}Следим  за  приоритетом  операторов  LTL  для  проверки  правильности  при  помощи  Spin  int x = 100;active proctype A(){do:: x%2 -> x = 3*x + 1od}active proctype B(){do:: !x%2 -> x = x/2od}Ограничено  ли  значение  x?  > ./spin -f `[] (x > 0 && x <= 100)'tl_spin: expected ')', saw '>'tl_spin: [] (x > 0 && x <= 100)----------------^>Синтаксическая  ошибка!  LTL  для  проверки  правильности  при  помощи  Spin  int x = 100;active proctype A(){do:: x%2 -> x = 3*x + 1od}active proctype B(){do:: !x%2 -> x = x/2od}#define p (x > 0 && x <= 100)> ./spin -f `[] p'never {/* []p */accept_init:T0_init:if:: ((p)) -> goto T0_initfi;}p  Формула  синтаксически  корректна,  но  мы  же  будем  проверять  её  невыполнимость!  LTL  для  проверки  правильности  при  помощи  Spin  int x = 100;active proctype A(){do:: x%2 -> x = 3*x + 1od}active proctype B(){do:: !x%2 -> x = x/2od}#define p (x > 0 && x <= 100)> ./spin -f `![] p'never {/* ![]p */T0_init:if:: (! ((p))) -> gotoaccept_all:: (1) -> goto T0_initfi;accept_all:skip}true  !p  true  То,  что  ![]p не  может  быть  выполнено,  означает,  что  []p  не  может  быть  нарушено  (нет  ни  одного  контрпримера)  LTL  для  проверки  правильности  при  помощи  Spin  int x = 100;#define p (x > 0 && x <= 100)active proctype A(){do:: x%2 -> x = 3*x + 1od> ./spin -a ltl1.pml}> gcc -o pan pan.cactive proctype B()> ./pan -a(Spin Version 5.1.4 -- 27 January 2008){+ Partial Order ReductiondoFull statespace search for::: !x%2 -> x = x/2never claim+odassertion violations+ (if within scope of claim)}acceptancecycles+ (fairness disabled)never {/* ![]p */invalid end states- (disabled by never claim)T0_init:...if:: (! ((p))) -> goto accept_all:: (1) -> goto T0_initfi;accept_all:skip}Ещё  один  пример  int x = 100;active proctype A(){do:: x%2 -> x = 3*x + 1od}active proctype B(){do:: !x%2 -> x = x/2od}Пусть    #define p (x == 1)Выполнимо  ли  свойство  []<>p?  Даже  в  таком  простом  случае  метод  пристального  взгляда  перестаёт  работать  Для  проверки  неизбежности  []<>pпроверяем  невозможность    ![]<>p<>!(<>p)<>[]!pLTL  для  проверки  правильности  при  помощи  Spin  int x = 100;#define p (x == 1)> ./spin -t -c ltl2.pmlactive proctype A()proc 0 = Aproc 1 = B{Never claim moves to line 18[(!((x==1)))]do[(!((x==1)))]:: x%2 -> x = 3*x + 1 Never claim moves to line 23<<<<<START OF CYCLE>>>>>odspin: trail ends after 3 steps}------------active proctype B()final state:{------------#processes: 2dox = 100:: !x%2 -> x = x/23:proc 1 (B) line 11 "ltl2.pml" (state 3)od3:proc 0 (A) line5 "ltl2.pml" (state 3)}3:proc - (:never:) line 22 "ltl2.pml" (state 9)never {/* ![]<>p */ 2 processes createdT0_init:>if:: (! ((p))) -> goto accept_S4:: (1) -> goto T0_initfi;> ./spin -a ltl1.pml> gcc -a pan pan.caccept_S4:> ./pan -aifpan: acceptance cycle (at depth 2):: (! ((p))) -> goto accept_S4pan: wrote ltl2.pml.trailfi;Практические  приёмы  описания  свойств  на  LTL  Практические  приёмы  описания  свойств  на  LTL  •  Выполнимость  формулы  LTL  проверяется  только  для  первого  состояния  в  трассе  •  Темпоральные  операторы  управляют  проверкой  выполнимости  своих  аргументов  •  Сложное  свойство  можно  (и  нужно!)  строить  как  суперпозицию  простых  •  Суперпозиция  темпоральных  операторов  не  ограничивает  диапазон  действия  «вложенного»  оператора.

 Выполнимость  формул  LTL  •  Выполнимость  формулы  LTL  определена  и  проверяется  для  одного  (первого)  состояния  трассы  •  Распространение  свойств  на  другие  состояния  управляется  темпоральными  операторами  •  Единственный  оператор,  который  может  ограничить  сверху  проверку  выполнимости  формулы  –  Un†l  Суперпозиция  формул  LTL  •  Составлять  сложные  формулы  LTL  нужно  методом  суперпозиции  простых  формул  •  Внешняя  формула  задаёт,  на  каких  участках  вычислений  будет  проверятся  подформула  •  Подформула  задаёт  свойства,  проверяемые  для  участков  вычислений  •  Суперпозиция  темпоральных  операторов  не  ограничивает  диапазон  действия  «вложенного»  оператора.  Пример  •  В  ходе  одного  вызова  функции  F()  x  всегда  не  превышает  3.

                   где  проверяем  (g)    что  проверяем(f)  •  φ  =  g(f)  •  Что  проверяем?  –  f = x <= 3  –  в  синтаксисе  LTL  нет  таких  символов!  –  определяем  пропозициональный  символ–  f = []a –  вроде  бы  точно  описывает  свойство  f  –  #define a x <= 3Пример  •  В  ходе  одного  вызова  функции  F()  x  всегда  не  превышает  3.                    где  проверяем  (g)    что  проверяем(f)  •  φ  =  g(f)  •  Где  проверяем?  –  #define lab_f P@f_call  –  поставим  метку  на  вызов    f  –  не  то,  проверяем  для  всего  участка  пути  за  первым  вызовом  F  –  g = [](lab_f -> f)f_call  f_entry   f_return  f_call  f_entry   f_return  –  нужно  проверять  свойство    #define f_e P@f_return      внутри  тела  функции  –  g = [](f_b -> (f U f_e)) –  похоже  на  правду,  проверяем  от  входа  в  функцию  до  выхода  из  неё  –  #define f_b P@f_entryПример  •  В  ходе  одного  вызова  функции  F()  x  всегда  не  превышает  3.                    где  проверяем  (g)    что  проверяем(f)  •  φ  =  g(f)  •  Подставляем  одно  в  другое  –  φ = [](f_b -> ([]a U f_e))f_b  Проверяем    выполнимость  φ  Проверка    выполнимости  U  f_e  Проверка    выполнимости  []a  Проверка    выполнимости  a  –  зона  действия  []  по  определению  не  ограничивается  Until!  –  φ = [](f_b -> (a U f_e))–  правильная  формула  Помощь  в  формулировке  свойств  База  шаблонов  темпоральной  логики  hŸp://paŸerns.

 projects.cis.ksu.edu  Логические  паттерны  (LTL/CTL/GIL)  встречаемость  (occurence)  отсутствие  (absense)  порядок  (order,  sequence)  универсальность  (universality)  существование  (existence)  bounded  existence  приоритет  (precedence)  chain  precedence  отклик  (response)  База  шаблонов  темпоральной  логики  hŸp://paŸerns.  projects.cis.ksu.edu  •  Для  каждого  шаблона  –  пять  вариантов  формул:          имя      пример  для  “absense”  и  LTL            всегда      [](!p)          перед  r    <>r -> (!p U r)В  чём  разница?            после  q    [](q -> [](!p))          между  r  и  q    []((r && !q && <>q) -> (!p U q))          после  r  до  q                          []((r && !q) -> ((!p U q) || []!p))База  шаблонов  темпоральной  логики  hŸp://paŸerns.

 projects.cis.ksu.edu  •  Для  каждого  шаблона  –  пять  вариантов  формул:          имя              всегда              перед  r            после  q            между  r  и  q            после  r  до  q  пример  для  “absense”  и  LTL      r  r  q  q  q    r  r  q  r  r  r  q  r    r  Спасибо за внимание!Вопросы?.

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