SlideShare una empresa de Scribd logo
1 de 37
Descargar para leer sin conexión
1
На пути к технологии разработки средств
дедуктивной верификации программ
Игорь Ануреев
Институт систем информатики имени А.П. Ершова
Новосибирск
anureev@iis.nsk.su
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
Спасибо за внимание!

Más contenido relacionado

La actualidad más candente

Статический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минутСтатический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минут
Andrey Karpov
 
Презентация на тему: ЕГЭ информатика
Презентация на тему: ЕГЭ информатикаПрезентация на тему: ЕГЭ информатика
Презентация на тему: ЕГЭ информатика
2berkas
 
паскаль. часть1
паскаль. часть1паскаль. часть1
паскаль. часть1
igorm9so
 

La actualidad más candente (20)

Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)
 
Программирование линейных алгоритмов
Программирование линейных алгоритмовПрограммирование линейных алгоритмов
Программирование линейных алгоритмов
 
Статический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минутСтатический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минут
 
8 3-4
8 3-48 3-4
8 3-4
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
2. Операторы языка C#
2. Операторы языка C#2. Операторы языка C#
2. Операторы языка C#
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 
Программирование разветвляющихся алгоритмов
Программирование разветвляющихся алгоритмовПрограммирование разветвляющихся алгоритмов
Программирование разветвляющихся алгоритмов
 
8 3-3
8 3-38 3-3
8 3-3
 
8 3-5
8 3-58 3-5
8 3-5
 
Презентация на тему: ЕГЭ информатика
Презентация на тему: ЕГЭ информатикаПрезентация на тему: ЕГЭ информатика
Презентация на тему: ЕГЭ информатика
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
 
1. Типы данных. Операции. Ввод и вывод C#
1. Типы данных. Операции. Ввод и вывод C#1. Типы данных. Операции. Ввод и вывод C#
1. Типы данных. Операции. Ввод и вывод C#
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_cast
 
Запись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка ПаскальЗапись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка Паскаль
 
Rambler.iOS #9: Анализируй это!
Rambler.iOS #9: Анализируй это!Rambler.iOS #9: Анализируй это!
Rambler.iOS #9: Анализируй это!
 
Python
PythonPython
Python
 
паскаль. часть1
паскаль. часть1паскаль. часть1
паскаль. часть1
 
Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++
 

Destacado

TMPA-2013 Pakulin: Automation of Conformance Testing of TLS
TMPA-2013 Pakulin: Automation of Conformance Testing of TLSTMPA-2013 Pakulin: Automation of Conformance Testing of TLS
TMPA-2013 Pakulin: Automation of Conformance Testing of TLS
Iosif Itkin
 
IATE Lecture 1: Quality Assurance for Highload Systems
IATE Lecture 1: Quality Assurance for Highload SystemsIATE Lecture 1: Quality Assurance for Highload Systems
IATE Lecture 1: Quality Assurance for Highload Systems
Iosif Itkin
 
Высоконагруженные трейдинговые системы и их тестирование
Высоконагруженные трейдинговые системы и их тестирование Высоконагруженные трейдинговые системы и их тестирование
Высоконагруженные трейдинговые системы и их тестирование
Iosif Itkin
 
TMPA-2013 Conference: Verification of Parallel Programs – Current Stage and P...
TMPA-2013 Conference: Verification of Parallel Programs – Current Stage and P...TMPA-2013 Conference: Verification of Parallel Programs – Current Stage and P...
TMPA-2013 Conference: Verification of Parallel Programs – Current Stage and P...
Iosif Itkin
 

Destacado (9)

TMPA-2013 Pakulin: Automation of Conformance Testing of TLS
TMPA-2013 Pakulin: Automation of Conformance Testing of TLSTMPA-2013 Pakulin: Automation of Conformance Testing of TLS
TMPA-2013 Pakulin: Automation of Conformance Testing of TLS
 
КГТУ Лекция 2: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 2: Обеспечение Качества Программного ОбеспеченияКГТУ Лекция 2: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 2: Обеспечение Качества Программного Обеспечения
 
Presentation to ILFQ on HFT
Presentation to ILFQ on HFTPresentation to ILFQ on HFT
Presentation to ILFQ on HFT
 
IATE Lecture 1: Quality Assurance for Highload Systems
IATE Lecture 1: Quality Assurance for Highload SystemsIATE Lecture 1: Quality Assurance for Highload Systems
IATE Lecture 1: Quality Assurance for Highload Systems
 
TMPA-2013 Itsykson: Java Program Analysis
TMPA-2013 Itsykson: Java Program AnalysisTMPA-2013 Itsykson: Java Program Analysis
TMPA-2013 Itsykson: Java Program Analysis
 
TMPA-2013: LTL Specification
TMPA-2013: LTL SpecificationTMPA-2013: LTL Specification
TMPA-2013: LTL Specification
 
IT Education Kostroma 22 May 2013
IT Education Kostroma 22 May 2013IT Education Kostroma 22 May 2013
IT Education Kostroma 22 May 2013
 
Высоконагруженные трейдинговые системы и их тестирование
Высоконагруженные трейдинговые системы и их тестирование Высоконагруженные трейдинговые системы и их тестирование
Высоконагруженные трейдинговые системы и их тестирование
 
TMPA-2013 Conference: Verification of Parallel Programs – Current Stage and P...
TMPA-2013 Conference: Verification of Parallel Programs – Current Stage and P...TMPA-2013 Conference: Verification of Parallel Programs – Current Stage and P...
TMPA-2013 Conference: Verification of Parallel Programs – Current Stage and P...
 

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

Функции в языке программирования QBasic
Функции в языке программирования QBasicФункции в языке программирования QBasic
Функции в языке программирования QBasic
kvlar
 
Инструментальная поддержка встроенных языков в IDE.
Инструментальная поддержка встроенных языков в IDE.Инструментальная поддержка встроенных языков в IDE.
Инструментальная поддержка встроенных языков в IDE.
Semyon Grigorev
 
Языки программирования
Языки программированияЯзыки программирования
Языки программирования
paulsmirnov
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Mikhail Kurnosov
 

Similar a TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Deductive Program Verification (20)

C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
Dsl for c++
Dsl for c++Dsl for c++
Dsl for c++
 
Компилируемые в реальном времени DSL для С++
Компилируемые в реальном времени DSL для С++Компилируемые в реальном времени DSL для С++
Компилируемые в реальном времени DSL для С++
 
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
 
С.Ковалёв -- теория категорий как математическое основание MBSE
С.Ковалёв -- теория категорий как математическое основание MBSEС.Ковалёв -- теория категорий как математическое основание MBSE
С.Ковалёв -- теория категорий как математическое основание MBSE
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernels
 
Функции в языке программирования QBasic
Функции в языке программирования QBasicФункции в языке программирования QBasic
Функции в языке программирования QBasic
 
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
 
Основы программирования на C++
Основы программирования на C++Основы программирования на C++
Основы программирования на C++
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.
 
C sharp deep dive
C sharp deep diveC sharp deep dive
C sharp deep dive
 
C# Deep Dive
C# Deep DiveC# Deep Dive
C# Deep Dive
 
язык програмирования
язык програмированияязык програмирования
язык програмирования
 
Инструментальная поддержка встроенных языков в IDE.
Инструментальная поддержка встроенных языков в IDE.Инструментальная поддержка встроенных языков в IDE.
Инструментальная поддержка встроенных языков в IDE.
 
Языки программирования
Языки программированияЯзыки программирования
Языки программирования
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
 
О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?
 
Специфика разработки и тестирования статического анализатора
Специфика разработки и тестирования статического анализатораСпецифика разработки и тестирования статического анализатора
Специфика разработки и тестирования статического анализатора
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20
 
Урок 8. Введение в редукцию графов
Урок 8. Введение в редукцию графовУрок 8. Введение в редукцию графов
Урок 8. Введение в редукцию графов
 

Más de Iosif Itkin

Más de Iosif Itkin (20)

Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4
 
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
 
Exactpro FinTech Webinar - Global Exchanges Test Oracles
Exactpro FinTech Webinar - Global Exchanges Test OraclesExactpro FinTech Webinar - Global Exchanges Test Oracles
Exactpro FinTech Webinar - Global Exchanges Test Oracles
 
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
Exactpro FinTech Webinar - Global Exchanges FIX ProtocolExactpro FinTech Webinar - Global Exchanges FIX Protocol
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
 
Operational Resilience in Financial Market Infrastructures
Operational Resilience in Financial Market InfrastructuresOperational Resilience in Financial Market Infrastructures
Operational Resilience in Financial Market Infrastructures
 
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
 
Testing the Intelligence of your AI
Testing the Intelligence of your AITesting the Intelligence of your AI
Testing the Intelligence of your AI
 
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
EXTENT 2019: Exactpro Quality Assurance for Financial Market InfrastructuresEXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
 
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
 
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan ShamraiEXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
 
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference OpenEXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
 
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
 
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
 
QA Community Saratov: Past, Present, Future (2019-02-08)
QA Community Saratov: Past, Present, Future (2019-02-08)QA Community Saratov: Past, Present, Future (2019-02-08)
QA Community Saratov: Past, Present, Future (2019-02-08)
 
Machine Learning and RoboCop Testing
Machine Learning and RoboCop TestingMachine Learning and RoboCop Testing
Machine Learning and RoboCop Testing
 
Behaviour Driven Development: Oltre i limiti del possibile
Behaviour Driven Development: Oltre i limiti del possibileBehaviour Driven Development: Oltre i limiti del possibile
Behaviour Driven Development: Oltre i limiti del possibile
 
2018 - Exactpro Year in Review
2018 - Exactpro Year in Review2018 - Exactpro Year in Review
2018 - Exactpro Year in Review
 
Exactpro Discussion about Joy and Strategy
Exactpro Discussion about Joy and StrategyExactpro Discussion about Joy and Strategy
Exactpro Discussion about Joy and Strategy
 
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
FIX EMEA Conference 2018 - Post Trade Software Testing ChallengesFIX EMEA Conference 2018 - Post Trade Software Testing Challenges
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
 
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
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.
  • 5. 5 Аннотированная программа = программа на целевом языке + аннотации на языке аннотаций. Аннотации описывают свойства программы.
  • 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 некорректна + интерпретация результата доказательства условий корректности;  Не знаю.
  • 9. 9 Параметры дедуктивного верификатора:  целевой язык, язык аннотаций;  AnProgSet, Log, AxSem;  стратегии вывода в AxSem;  решатели условий корректности;
  • 10. 10 Параметры дедуктивного верификатора:  техники трансформации аннотированных программ;  техники трансформации УК;  техники комбинирования решателей УК;  техники применения решателей УК при выводе УК;  техники применения трансформаций аннотированных программ при выводе УК.
  • 11. 11 Недостатки существующих дедуктивных верификаторов:  дедуктивный верификатор — черный ящик;  корректность дедуктивного верификатора;  выразительная сила;  адаптируемость под конкретную задачу верификации;  интуитивно-понятный интерфейс.
  • 12. 12 Унифицированый предметно-ориентированный подход к разработке дедуктивных верификаторов — использование предметно-ориентированного языка (DSL) для этой предметной области.
  • 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)}
  • 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 Операционная семантика выражений определяется отношением перехода на конфигурациях. Конфигурация — пара (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 …
  • 31. 31 Инкрементальность разработки. Баланс между выразительной силой и производительностью.
  • 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) Правила перехода не меняются! Меняется способ их применения.
  • 34. 34 Логика безопасности для (gotoStop A): (if (gotoStop A) var A then)
  • 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))