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
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Deductive Program Verification
1. 1
На пути к технологии разработки средств
дедуктивной верификации программ
Игорь Ануреев
Институт систем информатики имени А.П. Ершова
Новосибирск
anureev@iis.nsk.su
2. 2
План доклада:
дедуктивная верификация;
схема дедуктивного верификатора;
недостатки существующих дедуктивных верификаторов;
унифицированный предметно-ориентированный подход
к разработке дедуктивных верификаторов.
3. 3
Дедуктивная верификация — процедура
Параметры дедуктивной верификации:
AnProgSet — множество аннотированных программ;
Log — логика (язык + семантика);
AxSem — аксиоматическая семантика программ из
AnProgSet относительно Log
4. 4
3 этапа дедуктивной верификации:
порождение условий корректности (формул Log)
по A ∈ AnProgSet в соответствии с AxSem;
доказательство условий корректности;
интерпретация результатов доказательства для A.
6. 6
Аннотированная программа ≡ формула «Свойства
программы, представленные аннотациями, выполнены»
Пример: тройка Хоара {P} A {Q}.
P, Q ∈ Log — предусловие и постусловие
Аннотированная программа корректна, если
соответствующая ей формула истинна.
7. 7
Аксиоматическая семантика программ из AnProgSet
относительно Log — набор правил вывода, включающих
формулы из AnProgSet и Log.
Пример:
{P ∧ A} B {Q} {P ∧ ¬ A} C {Q}
-----------------------------------------
{P} if A then B else C {Q}
8. 8
Вход дедуктивного верификатора:
A ∈ AnProgSet
Выход дедуктивного верификатора:
A корректна;
A некорректна;
A некорректна + интерпретация результата
доказательства условий корректности;
Не знаю.
10. 10
Параметры дедуктивного верификатора:
техники трансформации аннотированных программ;
техники трансформации УК;
техники комбинирования решателей УК;
техники применения решателей УК при выводе УК;
техники применения трансформаций аннотированных
программ при выводе УК.
13. 13
Основные понятия языка Atoment …
Выражения (аля Лисп)
(aa (bbbb uu) ′′′′s( d)′′)
aa, ′′′′s( d)′′ — атомы.
14. 14
Выражения используются для представления объектов
верификации (аннотированных программ, условий
корректности, …):
(if A then B else C)
(forall x (A or B)) или (∀ x (A ∨ B))
Две семантики выражения:
операционная (изменение состояния)
денотационная (получение значения)
15. 15
Символы (функциональные)
(+v + +v)
(forall –v -v)
(send message +v to +v)
используются для описания состояния (в операционной
семантики выражений) и вычисления значения (в
денотационной семантике выражений).
16. 16
Символы делятся на
предопределенные (значение определяется
интерпретацией);
определяемые (значение определяется состоянием) .
17. 17
Интерпретация I — функция на символах такая, что
I(символ) = функция из En
→ E.
E — множество элементов (денотат).
выражения ⊆ E
Пример:
I(+v + +v) = функция сложения чисел.
18. 18
Состояние — функция на символах такая, что
s(символ) = конечная функция из En
→ E.
Примеры:
s(value of -v) = {(x, 1), (y, true)}
s(type of -v) = {(x, int), (y, bool)}
20. 20
Операционная семантика выражений
определяется отношением перехода на конфигурациях.
Конфигурация — пара (U, s).
U — (управляющая) последовательность выражений.
Отношение перехода → ⊆ Conf × Conf.
Conf — множество всех конфигураций.
21. 21
Выражения делятся на
предопределенные
(E U, s) → (U′, s′);
определяемые (правилами переходов).
22. 22
Особенности подхода на примерах:
инкрементальность разработки (операционной
семантики, аксиоматической семантики, …);
легкость введения дополнительных конструкций в
целевой язык;
гибкость разработки;
разрешение на месте побочных эффектов при
дедуктивном выводе;
конструкции с переменным числом аргументов при
дедуктивном выводе.
23. 23
Версия 1 операционной семантики блока:
(if ({ A }) var (+s A) then A)
Не подходит, если целевой язык имеет средства передачи
управления (операторы посылки исключений, операторы
break, continue, return и т. п.)
24. 24
Добавляем в целевой язык новую концепцию — выражение
перехода (jump E).
Последовательность выражений E кодирует информацию о
том, какой оператор перехода сработал, и какую
информацию он передал.
(jump break) // break;
(jump throw v) // throw e;
(jump return v) // return e
v — значение выражения e.
25. 25
Версия 2 операционной семантики для блока:
(if ({ A }) var (+s A) then A)
// просачивание выражения перехода
(if (jump E) ({ A })
var (+s E) (+s A) then (jump E))
26. 26
Не подходит, если целевой язык имеет оператор перехода
goto L.
({ U (label L) V (goto L) W })
(jump goto L) просачивается за блок
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).
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
Не подходит, если целевой язык имеет локальные
переменные:
{int x = 0;
{int x = 1;}
x = 2;}
Версия 4 …
32. 32
Логика безопасности versus логика Хоара
символ (pre) хранит предусловие;
нет ростусловия;
вместо этого есть условия безопасности;
«бесконечные» программы;
символ (verCond) хранит список порожденных УК.
33. 33
Логика безопасности для блока:
(if ({ A }) var (+s A)
then A (gotoStop A))
(if (jump E) ({ A })
var (+s E) (+s A) then A)
Правила перехода не меняются! Меняется способ их
применения.
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
Операционная семантика и логика безопасности для
условного оператора:
(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))