tmpa-2013 anureyev: on the road to technology of developing the means of deductive program...
DESCRIPTION
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 VerificationTRANSCRIPT
1
На пути к технологии разработки средств
дедуктивной верификации программ
Игорь Ануреев
Институт систем информатики имени А.П. Ершова
Новосибирск
2
План доклада:
дедуктивная верификация;
схема дедуктивного верификатора;
недостатки существующих дедуктивных верификаторов;
унифицированный предметно-ориентированный подход
к разработке дедуктивных верификаторов.
3
Дедуктивная верификация — процедура
Параметры дедуктивной верификации:
AnProgSet — множество аннотированных программ;
Log — логика (язык + семантика);
AxSem — аксиоматическая семантика программ из
AnProgSet относительно Log
4
3 этапа дедуктивной верификации:
порождение условий корректности (формул Log)
по A ∈ AnProgSet в соответствии с AxSem;
доказательство условий корректности;
интерпретация результатов доказательства для A.
5
Аннотированная программа =
программа на целевом языке + аннотации на языке
аннотаций.
Аннотации описывают свойства программы.
6
Аннотированная программа ≡ формула «Свойства
программы, представленные аннотациями, выполнены»
Пример: тройка Хоара {P} A {Q}.
P, Q ∈ Log — предусловие и постусловие
Аннотированная программа корректна, если
соответствующая ей формула истинна.
7
Аксиоматическая семантика программ из AnProgSet
относительно Log — набор правил вывода, включающих
формулы из AnProgSet и Log.
Пример:
{P ∧ A} B {Q} {P ∧ ¬ A} C {Q}
-----------------------------------------
{P} if A then B else C {Q}
8
Вход дедуктивного верификатора:
A ∈ AnProgSet
Выход дедуктивного верификатора:
A корректна;
A некорректна;
A некорректна + интерпретация результата
доказательства условий корректности;
Не знаю.
9
Параметры дедуктивного верификатора:
целевой язык, язык аннотаций;
AnProgSet, Log, AxSem;
стратегии вывода в AxSem;
решатели условий корректности;
10
Параметры дедуктивного верификатора:
техники трансформации аннотированных программ;
техники трансформации УК;
техники комбинирования решателей УК;
техники применения решателей УК при выводе УК;
техники применения трансформаций аннотированных
программ при выводе УК.
11
Недостатки существующих дедуктивных верификаторов:
дедуктивный верификатор — черный ящик;
корректность дедуктивного верификатора;
выразительная сила;
адаптируемость под конкретную задачу верификации;
интуитивно-понятный интерфейс.
12
Унифицированый предметно-ориентированный подход к
разработке дедуктивных верификаторов —
использование предметно-ориентированного языка (DSL)
для этой предметной области.
13
Основные понятия языка Atoment …
Выражения (аля Лисп)
(aa (bbbb uu) ′′\′′s( d)′′)
aa, ′′\′′s( d)′′ — атомы.
14
Выражения используются для представления объектов
верификации (аннотированных программ, условий
корректности, …):
(if A then B else C)
(forall x (A or B)) или (∀ x (A ∨ B))
Две семантики выражения:
операционная (изменение состояния)
денотационная (получение значения)
15
Символы (функциональные)
(+v + +v)
(forall –v -v)
(send message +v to +v)
используются для описания состояния (в операционной
семантики выражений) и вычисления значения (в
денотационной семантике выражений).
16
Символы делятся на
предопределенные (значение определяется
интерпретацией);
определяемые (значение определяется состоянием) .
17
Интерпретация I — функция на символах такая, что
I(символ) = функция из En → E.
E — множество элементов (денотат).
выражения ⊆ E
Пример:
I(+v + +v) = функция сложения чисел.
18
Состояние — функция на символах такая, что
s(символ) = конечная функция из En → E.
Примеры:
s(value of -v) = {(x, 1), (y, true)}
s(type of -v) = {(x, int), (y, bool)}
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
Операционная семантика выражений
определяется отношением перехода на конфигурациях.
Конфигурация — пара (U, s).
U — (управляющая) последовательность выражений.
Отношение перехода → ⊆ Conf × Conf.
Conf — множество всех конфигураций.
21
Выражения делятся на
предопределенные
(E U, s) → (U′, s′);
определяемые (правилами переходов).
22
Особенности подхода на примерах:
инкрементальность разработки (операционной
семантики, аксиоматической семантики, …);
легкость введения дополнительных конструкций в
целевой язык;
гибкость разработки;
разрешение на месте побочных эффектов при
дедуктивном выводе;
конструкции с переменным числом аргументов при
дедуктивном выводе.
23
Версия 1 операционной семантики блока:
(if ({ A }) var (+s A) then A)
Не подходит, если целевой язык имеет средства передачи
управления (операторы посылки исключений, операторы
break, continue, return и т. п.)
24
Добавляем в целевой язык новую концепцию — выражение
перехода (jump E).
Последовательность выражений E кодирует информацию о
том, какой оператор перехода сработал, и какую
информацию он передал.
(jump break) // break;
(jump throw v) // throw e;
(jump return v) // return e
v — значение выражения e.
25
Версия 2 операционной семантики для блока:
(if ({ A }) var (+s A) then A)
// просачивание выражения перехода
(if (jump E) ({ A })
var (+s E) (+s A) then (jump E))
26
Не подходит, если целевой язык имеет оператор перехода
goto L.
({ U (label L) V (goto L) W })
(jump goto L) просачивается за блок
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
Определение конструкции (gotoStop A):
(if (gotoStop A) var A then)
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
Не подходит, если целевой язык имеет локальные
переменные:
{int x = 0;
{int x = 1;}
x = 2;}
Версия 4 …
31
Инкрементальность разработки.
Баланс между выразительной силой и
производительностью.
32
Логика безопасности versus логика Хоара
символ (pre) хранит предусловие;
нет ростусловия;
вместо этого есть условия безопасности;
«бесконечные» программы;
символ (verCond) хранит список порожденных УК.
33
Логика безопасности для блока:
(if ({ A }) var (+s A)
then A (gotoStop A))
(if (jump E) ({ A })
var (+s E) (+s A) then A)
Правила перехода не меняются! Меняется способ их
применения.
34
Логика безопасности для (gotoStop A):
(if (gotoStop A) var A then)
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
Операционная семантика и логика безопасности для
условного оператора:
(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
Спасибо за внимание!