TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Deductive Program Verification

453 views

Published on

TMPA-2013 Conference in Kostroma

Anureyev, I., A.P.Ershov Institute of Informatics Systems
On the Road to Technology of Developing the Means of Deductive Program Verification

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
453
On SlideShare
0
From Embeds
0
Number of Embeds
82
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Deductive Program Verification

  1. 1. 1 На пути к технологии разработки средств дедуктивной верификации программ Игорь Ануреев Институт систем информатики имени А.П. Ершова Новосибирск anureev@iis.nsk.su
  2. 2. 2 План доклада:  дедуктивная верификация;  схема дедуктивного верификатора;  недостатки существующих дедуктивных верификаторов;  унифицированный предметно-ориентированный подход к разработке дедуктивных верификаторов.
  3. 3. 3 Дедуктивная верификация — процедура Параметры дедуктивной верификации: AnProgSet — множество аннотированных программ; Log — логика (язык + семантика); AxSem — аксиоматическая семантика программ из AnProgSet относительно Log
  4. 4. 4 3 этапа дедуктивной верификации:  порождение условий корректности (формул Log) по A ∈ AnProgSet в соответствии с AxSem;  доказательство условий корректности;  интерпретация результатов доказательства для A.
  5. 5. 5 Аннотированная программа = программа на целевом языке + аннотации на языке аннотаций. Аннотации описывают свойства программы.
  6. 6. 6 Аннотированная программа ≡ формула «Свойства программы, представленные аннотациями, выполнены» Пример: тройка Хоара {P} A {Q}. P, Q ∈ Log — предусловие и постусловие Аннотированная программа корректна, если соответствующая ей формула истинна.
  7. 7. 7 Аксиоматическая семантика программ из AnProgSet относительно Log — набор правил вывода, включающих формулы из AnProgSet и Log. Пример: {P ∧ A} B {Q} {P ∧ ¬ A} C {Q} ----------------------------------------- {P} if A then B else C {Q}
  8. 8. 8 Вход дедуктивного верификатора: A ∈ AnProgSet Выход дедуктивного верификатора:  A корректна;  A некорректна;  A некорректна + интерпретация результата доказательства условий корректности;  Не знаю.
  9. 9. 9 Параметры дедуктивного верификатора:  целевой язык, язык аннотаций;  AnProgSet, Log, AxSem;  стратегии вывода в AxSem;  решатели условий корректности;
  10. 10. 10 Параметры дедуктивного верификатора:  техники трансформации аннотированных программ;  техники трансформации УК;  техники комбинирования решателей УК;  техники применения решателей УК при выводе УК;  техники применения трансформаций аннотированных программ при выводе УК.
  11. 11. 11 Недостатки существующих дедуктивных верификаторов:  дедуктивный верификатор — черный ящик;  корректность дедуктивного верификатора;  выразительная сила;  адаптируемость под конкретную задачу верификации;  интуитивно-понятный интерфейс.
  12. 12. 12 Унифицированый предметно-ориентированный подход к разработке дедуктивных верификаторов — использование предметно-ориентированного языка (DSL) для этой предметной области.
  13. 13. 13 Основные понятия языка Atoment … Выражения (аля Лисп) (aa (bbbb uu) ′′′′s( d)′′) aa, ′′′′s( d)′′ — атомы.
  14. 14. 14 Выражения используются для представления объектов верификации (аннотированных программ, условий корректности, …):  (if A then B else C)  (forall x (A or B)) или (∀ x (A ∨ B)) Две семантики выражения:  операционная (изменение состояния)  денотационная (получение значения)
  15. 15. 15 Символы (функциональные) (+v + +v) (forall –v -v) (send message +v to +v) используются для описания состояния (в операционной семантики выражений) и вычисления значения (в денотационной семантике выражений).
  16. 16. 16 Символы делятся на  предопределенные (значение определяется интерпретацией);  определяемые (значение определяется состоянием) .
  17. 17. 17 Интерпретация I — функция на символах такая, что I(символ) = функция из En → E. E — множество элементов (денотат). выражения ⊆ E Пример: I(+v + +v) = функция сложения чисел.
  18. 18. 18 Состояние — функция на символах такая, что s(символ) = конечная функция из En → E. Примеры: s(value of -v) = {(x, 1), (y, true)} s(type of -v) = {(x, int), (y, bool)}
  19. 19. 19 Денотационная семантика выражений val(AA, s) = AA; // AA — атом val(((2 + 3) + (value of x)), s) = I(+v + +v)(val(2+3, s), s(value of +v)(x))
  20. 20. 20 Операционная семантика выражений определяется отношением перехода на конфигурациях. Конфигурация — пара (U, s). U — (управляющая) последовательность выражений. Отношение перехода → ⊆ Conf × Conf. Conf — множество всех конфигураций.
  21. 21. 21 Выражения делятся на  предопределенные (E U, s) → (U′, s′);  определяемые (правилами переходов).
  22. 22. 22 Особенности подхода на примерах:  инкрементальность разработки (операционной семантики, аксиоматической семантики, …);  легкость введения дополнительных конструкций в целевой язык;  гибкость разработки;  разрешение на месте побочных эффектов при дедуктивном выводе;  конструкции с переменным числом аргументов при дедуктивном выводе.
  23. 23. 23 Версия 1 операционной семантики блока: (if ({ A }) var (+s A) then A) Не подходит, если целевой язык имеет средства передачи управления (операторы посылки исключений, операторы break, continue, return и т. п.)
  24. 24. 24 Добавляем в целевой язык новую концепцию — выражение перехода (jump E). Последовательность выражений E кодирует информацию о том, какой оператор перехода сработал, и какую информацию он передал. (jump break) // break; (jump throw v) // throw e; (jump return v) // return e v — значение выражения e.
  25. 25. 25 Версия 2 операционной семантики для блока: (if ({ A }) var (+s A) then A) // просачивание выражения перехода (if (jump E) ({ A }) var (+s E) (+s A) then (jump E))
  26. 26. 26 Не подходит, если целевой язык имеет оператор перехода goto L. ({ U (label L) V (goto L) W }) (jump goto L) просачивается за блок
  27. 27. 27 Версия 3 операционной семантики для блока: (if ({ A }) var (+s A) then A (gotoStop A)) (if (jump E) ({ A }) var (+s E) (+s A) then A) Добавление в целевой язык новой конструкции (gotoStop A), которая «ловит» (jump goto L).
  28. 28. 28 Определение конструкции (gotoStop A): (if (gotoStop A) var A then)
  29. 29. 29 (if (jump E) (gotoStop A) var (+s E) (+s A) then (matchCases (jump E) (if (jump goto L) var L then (matchCases (A) (if (B (label L) C) var (+s B) (+s C) then C (gotoStop A)) (else (jump E)))) (else (jump E)) ))
  30. 30. 30 Не подходит, если целевой язык имеет локальные переменные: {int x = 0; {int x = 1;} x = 2;} Версия 4 …
  31. 31. 31 Инкрементальность разработки. Баланс между выразительной силой и производительностью.
  32. 32. 32 Логика безопасности versus логика Хоара  символ (pre) хранит предусловие;  нет ростусловия;  вместо этого есть условия безопасности;  «бесконечные» программы;  символ (verCond) хранит список порожденных УК.
  33. 33. 33 Логика безопасности для блока: (if ({ A }) var (+s A) then A (gotoStop A)) (if (jump E) ({ A }) var (+s E) (+s A) then A) Правила перехода не меняются! Меняется способ их применения.
  34. 34. 34 Логика безопасности для (gotoStop A): (if (gotoStop A) var A then)
  35. 35. 35 (if (jump E) (gotoStop A) var (+s E) (+s A) then (matchCases (jump E) (if (jump goto L) var L then (matchCases (A) (if (B (label L inv I) C) var (+s B) (+s C) I then (assert I)) (else (jump E)) )) (else (jump E)) ))
  36. 36. 36 Операционная семантика и логика безопасности для условного оператора: (if (if A then B else C) var A (+s B) (+s C) then A (cases (if ((val) = true) then B) (else C))) (if (jump E) (if A) var (+s E) (+s A) then (jump E))
  37. 37. 37 Спасибо за внимание!

×