SlideShare a Scribd company logo
Институт систем информатики им. А. П. Ершова СО РАН
Лаборатория теоретического программирования ИСИ СО РАН
Расширение метагенерацииРасширение метагенерации
условий корректности концепцией
семантической разметки
Кондратьев Дмитрий Александрович
Научный руководитель: канд. физ.-мат. наук
Алексей Владимирович Промский
Новосибирск, 2015 г.
Проект C-light
– В ИСИ СО РАН разрабатывается проект C-light;
– Проект C-light – система дедуктивной верификации
Си-программ;Си-программ;
– Дедуктивную верификацию предложил Ч. Хоар в 1969-м
году;
– Задача создания расширяемой системы верификации;
– Задача создания удобной для всех пользователей системы
верификации.
Задача создания удобной системы верификации
– Система верификации должна быть удобной не только для
специалистов-теоретиков, но и для обычных
программистов.
– Как анализировать недоказанные УК?
– Как определить, какие правила вывода были применены
при генерации УК?
– Как сопоставить подформулы УК и фрагменты– Как сопоставить подформулы УК и фрагменты
программы?
Метод решения задачи
– В 2008-м году Денни и Фишер предложили метод
семантической разметки*.
– По концепции Денни и Фишера полученные после
генерации УК несут в себе дополнительную информацию,
выраженную в виде семантических меток.
– Метки проходят различные стадии обработки и
переводятся в объяснения на естественном языке.переводятся в объяснения на естественном языке.
* Denney E., Fischer B. Explaining Verification Conditions // Proc.
AMAST 2008. – LNCS. – 2008. – Vol. 5140. – P. 145-159.
Метод семантической разметки
– Структура УК. После упрощения УК обычно имеют вид
Хорновских дизъюнктов:
H1 ˄ ... ˄ Hn ⊃ C
– Структура метки.
Введем нотацию tl, где
• t – терм,
• l – метка или список меток.
Метки имеют вид c(o, n), гдеМетки имеют вид c(o, n), где
• c – концепция, описывающая предназначение терма,
• o – позиция связанных с меткой программных конструкций,
• n – список меток, «просочившихся» в данную.
Метод семантической разметки: концепции
– Гипотезы подразделяются на
• Утверждения – аннотации из программы, вошедшие в УК;
• Предикаты, управляющие потоком исполнения, –
подформулы в УК, отражающие ход исполнения программы.подформулы в УК, отражающие ход исполнения программы.
– Заключения передают информацию об основной цели УК.
– Уточнители характеризуют и гипотезы, и заключения,
передавая информацию о том, как подформула появилась
в УК и как она была преобразована.в УК и как она была преобразована.
– Индуктивные уточнители передают второстепенную
цель УК.
Модифицированные правила Хоара
{P1} S {INVest_inv_iter}pres_inv,
(INVass_inv_exit ˄
cast(val(val(e, MeM..STD)),
type(e, MeM, TP), int) = 0)while_ff ⊃ Q,type(e, MeM, TP), int) = 0)while_ff ⊃ Q,
(INVass_inv ˄
cast(val(val(e, MeM..STD)),
type(e, MeM, TP), int) ≠ 0)while_tt ⊃ P1
pres_inv
–––––––––––––––––––––––––––––––––––––––––––––––––
{INVest_inv} while(e) S {Q}{INV } while(e) S {Q}
Упрощение имеющих метки УК
Правила для не имеющих меток УК нельзя переиспользовать
без пересмотра, так как
– Семантическая разметка может изменить применимость
правила;
– Нужно аккуратно работать с областью действия меток.
Правила упрощения должны достигать следующих целей:
– Удаление лишних меток;– Удаление лишних меток;
– Минимизация области действия оставшихся меток;
– Сохранение достаточного числа меток.
Правила упрощения имеющих метки УК
Введем
c(o, l) ⊗ m = c(o, l • m), где • – конкатенация списков.
Группировка правил:
1) Правила, удаляющие метки из тривиальных, тождественно
истинных (под-)формул;
2) Правила, выборочно удаляющие имеющие метки
тождественно ложные подформулы;
3) Правила, заменяющие всю формулу на false;
4) Правила, осуществляющие «просачивание» меток.
Например:
– P ˄ Ql → Pl ˄ Ql
– tnm → tn ⊗ m
Трансляция
1) Нормализация УК с использованием правил их
упрощения;
2) Извлечение меток после применения правила устранения2) Извлечение меток после применения правила устранения
вложенности;
3) Нормализация меток для сопоставления меткам шаблонов
объяснений;
4) Генерация текста с использованием шаблонов4) Генерация текста с использованием шаблонов
объяснений.
Конструкция label
Введем конструкцию (label t c), где
– t – терм, к которому приписана метка;
– c – строка (тип метки).
Расширение языка шаблонов семантическими метками
(label {P1} S {(label INV est_inv_iter)}
pres_inv),
((label INV ass_inv_exit) /
(label
cast(val(val(e, MeM..STD)),
type(e, MeM, TP), int) = 0type(e, MeM, TP), int) = 0
while_ff)) => Q,
(label
((label INV ass_inv) /
(label
cast(val(val(e, MeM..STD)),
type(e, MeM, TP), int) != 0type(e, MeM, TP), int) != 0
while_tt)) => P1
pres_inv)
|-
{(label any_predicate(INV) est_inv}
while(simple_expression(e)) any_code(S)
{any_predicate(Q)}
Задание шаблонов объяснений
Введем конструкцию (label_pattern label format_text), где:
– label – концепция метки;
– format_text – форматная строка, задающая текстовый
шаблон, в которой можно использовать специальные
конструкции:
• %begin – начало диапазона строк относящегося к
данной метке программного кода;
• %end – конец диапазона строк относящегося к данной• %end – конец диапазона строк относящегося к данной
метке программного кода.
Реализация концепции семантической разметки
– Структура label:
struct label
{{
char* concept;
int location_begin;
int location_end;
}}
– Иерархия на метках.
Протокол для локализации ошибок
Транслятор: добавляет метаинформацию
До применения правила трансляции:
56. for(; i > 0 ; i++)
57. {
58. k++;
59. continue;59. continue;
60. j++;
61. }
После применения правила трансляции:
78. /* begin changes BCE5 17 79-85 */
79. for(; i > 0; i++)
80. {
81. j++;81. j++;
82. goto l;
83. k++;
84. l:
85. }
86. /* end changes */
Протокол для локализации ошибок
Обратный транслятор: использует метаинформацию транслятора
До применения правила обратной трансляции:
69. /* begin changes BCE5 19 70-76 */
70. for(; i > 0; i++)
71. {
72. j++;
73. goto l;
74. k++;
75. l:
76. }
77. /* end changes */
После применения правила обратной трансляции:
43. /*begin reverse 70-76*/
44. for(; i > 0 ; i++)
45. {
46. k++;
47. continue;
48. j++;
49. }
50. /* end reverse */
Пример содержащей ошибку функции на языке C-light
Функция NegateFirst на языке C-kernel
Недоказанное условие корректности
Объяснение недоказанного условия корректности
Поиск максимума в массиве
/*@ requires (a != NULL) && (length > 0);
ensures (0 <= x) && (x < length);
ensures forall int i; (0 <= i) && (i < length) ==>
(a[x] => a[i]);
*/*/
int max(int* a, int length);
Содержащая ошибку функция max
int max(int* a, int length)
{
int x = 0;
int y = length - 1;
/*@ loop invariant (0 <= x) && (x < length) &&
(0 <= y) && (y < length) &&(0 <= y) && (y < length) &&
(y >= x) &&
(forall int i; (0 <= i) && (i <= x) ==>
(a[i] <= a[x]) || (a[i] <= a[y])) &&
(forall int i; (y <= i) && (i <= length - 1) ==>
(a[i] <= a[x]) || (a[i] <= a[y]));
*/*/
while (x == y)
{
if (a[x] <= a[y]) {x = x + 1; } else {y = y - 1;}
}
return x;
}
Полученная C-kernel программа
1 // (AND (NEQ a |@NULL|)(> length 0))
2 int max(int* a, int length)
3 {
4-11 ...
12 }12 }
13 /* (AND (<= 0 x)(< x length)
(FORALL (i) (IMPLIES (AND (<= 0 i) (< i length))
(>= a[x] a[i]))))
*/
Функция max на языке C-kernel
2 int max(int* a, int length)
3 {
4 auto int x = 0;
5 auto int y = length - 1;
6 /* (AND (<= 0 x)(< x length)(<= 0 y)6 /* (AND (<= 0 x)(< x length)(<= 0 y)
(< y length)(>= y x)
(FORALL (i) (IMPLIES (AND (<= 0 i) (<= i x))
(OR (<= a[i] a[x]) (<= a[i] a[y]))))
(FORALL (i) (IMPLIES (AND (<= y i)
(<= i (- length 1)))
(OR (<= a[i] a[x])
(<= a[i] a[y])))))
*/*/
7 while (x == y)
8 {
9 if (a[x] <= a[y]) {x = x + 1; } else {y = y - 1;}
10 }
11 return x;
12 }
Недоказанное условие корректности
( )( )( ) ( )( ) ( )( )( )
( )( )( )
( )( ) ( )( )( )
( )( ) ( )( )( )
( )( )( )
( )( ) ( )( )( )
( )








































∧



















≤
∧≤
∀
∧≥
∧<
∧≤
∧<∧≤
xMeMMDiMeMMD
iMeMMD
i
xMeMMDyMeMMD
lengthMeMMDyMeMMD
yMeMMD
lengthMeMMDxMeMMDxMeMMD
exitinvass
0
0
0
6__
( )( ) ( )( )( )
( ) ( )( )( ) ( ) ( )( )( )( )
( ) ( )( )( ) ( ) ( )( )( )( )
( )( ) ( )( )( )
( )( ) ( )( )( )( )
( ) ( )( )( ) ( ) ( )( )( )( )
( ) ( )( )( ) ( ) ( )( )( )( )
( )( ) ( )( )( )( )( )
( )
























∧


























































≤
∨≤
⇒






−≤
∧≤
∀
∧


























≤
∨≤
⇒
 ≤
∀
yMeMMDaMeMMDiMeMMDaMeMMD
xMeMMDaMeMMDiMeMMDaMeMMD
lengthMeMMDiMeMMD
iMeMMDyMeMMD
i
yMeMMDaMeMMDiMeMMDaMeMMD
xMeMMDaMeMMDiMeMMDaMeMMD
xMeMMDiMeMMD
i
,,
,,
1
,,
,,
( )( ) ( )( )( )( )( )
( )( ) ( )( )( )( )
( )
( )( )( ) ( )( ) ( )( )( )
( )( )( )
( )( ) ( )( )( )
( ) ( )( )( ) ( ) ( )( )( )( ) 

































≥⇒






<
∧≤
∀
∧<∧≤
⇒














=





=
=
iMeMMDaMeMMDxMeMMDaMeMMD
lengthMeMMDiMeMMD
iMeMMD
i
lengthMeMMDxMeMMDxMeMMD
TPMeMyMeMMDxMeMMDtype
STDMeMyMeMMDxMeMMDvalval
cast
ffwhile
,,
0
0
0
int,,,
,..,
7_
Объяснение недоказанного условия корректности
This VC corresponds to function "max".
Hence, given
– assumption that loop invariant holds without loop entry at line 6,
– assumption that the loop condition doesn't hold at line 7 .
Копирование файла
Копирование файла на языке C-kernel
Условие корректности
где
Объяснение условия корректности
Институт систем информатики им. А. П. Ершова СО РАН
Лаборатория теоретического программирования ИСИ СО РАН
Расширение метагенерацииРасширение метагенерации
условий корректности концепцией
семантической разметки
Кондратьев Дмитрий Александрович
Научный руководитель: канд. физ.-мат. наук
Алексей Владимирович Промский
Новосибирск, 2015 г.

More Related Content

PDF
TMPA-2015: Lexical analysis of dynamically formed string expressions
Iosif Itkin
 
PDF
TMPA-2013 Dmitry Zaitsev
Iosif Itkin
 
PDF
Probabilistic Verification in Computational Systems Design
Iosif Itkin
 
PDF
A System of Deductive Verification of Predicate Programs
Iosif Itkin
 
PDF
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
Iosif Itkin
 
PDF
A Method of Reducing Computational Complexity in Verification of Programming ...
Iosif Itkin
 
PPTX
TMPA-2013 Chupilko: Verification of Correct Behaviour of HDL Models
Iosif Itkin
 
PDF
A Method of Building Extended Finite State Machines According to HDL-Descript...
Iosif Itkin
 
TMPA-2015: Lexical analysis of dynamically formed string expressions
Iosif Itkin
 
TMPA-2013 Dmitry Zaitsev
Iosif Itkin
 
Probabilistic Verification in Computational Systems Design
Iosif Itkin
 
A System of Deductive Verification of Predicate Programs
Iosif Itkin
 
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
Iosif Itkin
 
A Method of Reducing Computational Complexity in Verification of Programming ...
Iosif Itkin
 
TMPA-2013 Chupilko: Verification of Correct Behaviour of HDL Models
Iosif Itkin
 
A Method of Building Extended Finite State Machines According to HDL-Descript...
Iosif Itkin
 

What's hot (20)

PDF
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
Iosif Itkin
 
PDF
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU
 
PPT
Алгоритмическая конструкция следование
Andrey Dolinin
 
PPTX
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
corehard_by
 
PDF
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
Alexey Paznikov
 
PDF
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
Alexey Paznikov
 
PDF
2. Операторы языка C#
Olga Maksimenkova
 
PPT
Алгоритмическая конструкция Повторение
Andrey Dolinin
 
PDF
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
Alexey Paznikov
 
PDF
Конкурентные ассоциативные контейнеры
corehard_by
 
PPT
2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...
RF-Lab
 
DOC
Структурные формулы и функциональные схемы
aleksashka3
 
PDF
Основы программирования на C++
Olga Maksimenkova
 
DOC
Логические основы построения эвм
aleksashka3
 
PDF
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
Alexey Paznikov
 
DOC
КР Решение логических задач. логические основы построения пк
aleksashka3
 
PDF
1. Типы данных. Операции. Ввод и вывод C#
Olga Maksimenkova
 
PDF
Основы С++ (операторы, типы данных, функции)
Olga Maksimenkova
 
PDF
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
Platonov Sergey
 
PPT
Конструирование алгоритмов
Andrey Dolinin
 
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
Iosif Itkin
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU
 
Алгоритмическая конструкция следование
Andrey Dolinin
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
corehard_by
 
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
Alexey Paznikov
 
2. Операторы языка C#
Olga Maksimenkova
 
Алгоритмическая конструкция Повторение
Andrey Dolinin
 
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
Alexey Paznikov
 
Конкурентные ассоциативные контейнеры
corehard_by
 
2007 Никольская "Разработка программных средств для помехоустойчивого кодиров...
RF-Lab
 
Структурные формулы и функциональные схемы
aleksashka3
 
Основы программирования на C++
Olga Maksimenkova
 
Логические основы построения эвм
aleksashka3
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
Alexey Paznikov
 
КР Решение логических задач. логические основы построения пк
aleksashka3
 
1. Типы данных. Операции. Ввод и вывод C#
Olga Maksimenkova
 
Основы С++ (операторы, типы данных, функции)
Olga Maksimenkova
 
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
Platonov Sergey
 
Конструирование алгоритмов
Andrey Dolinin
 
Ad

Viewers also liked (20)

PDF
TMPA-2015: Implementing the MetaVCG Approach in the C-light System
Iosif Itkin
 
PPT
TMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade Systems
Iosif Itkin
 
PDF
TMPA-2015: A Need To Specify and Verify Standard Functions
Iosif Itkin
 
PDF
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
Iosif Itkin
 
PDF
TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...
Iosif Itkin
 
PPTX
TMPA-2015: Automated process of creating test scenarios for financial protoco...
Iosif Itkin
 
PDF
TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated...
Iosif Itkin
 
PDF
TMPA-2015: Software Engineering Education: The Messir Approach
Iosif Itkin
 
PDF
TMPA-2015: Formal Methods in Robotics
Iosif Itkin
 
PPTX
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
Iosif Itkin
 
PPTX
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
Iosif Itkin
 
PDF
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
Iosif Itkin
 
PDF
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
Iosif Itkin
 
PPTX
TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...
Iosif Itkin
 
PDF
TMPA-2015: Towards a Usable Defect Prediction Tool: Crossbreeding Machine Lea...
Iosif Itkin
 
PPT
TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...
Iosif Itkin
 
PDF
TMPA-2015: Multi-Module Application Tracing in z/OS Environment
Iosif Itkin
 
PPT
TMPA-2015: FPGA-Based Low Latency Sponsored Access
Iosif Itkin
 
PDF
TMPA-2015: Kotlin: From Null Dereference to Smart Casts
Iosif Itkin
 
PDF
TMPA-2017: Layered Layouts for Software Systems Visualization
Iosif Itkin
 
TMPA-2015: Implementing the MetaVCG Approach in the C-light System
Iosif Itkin
 
TMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade Systems
Iosif Itkin
 
TMPA-2015: A Need To Specify and Verify Standard Functions
Iosif Itkin
 
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
Iosif Itkin
 
TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...
Iosif Itkin
 
TMPA-2015: Automated process of creating test scenarios for financial protoco...
Iosif Itkin
 
TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated...
Iosif Itkin
 
TMPA-2015: Software Engineering Education: The Messir Approach
Iosif Itkin
 
TMPA-2015: Formal Methods in Robotics
Iosif Itkin
 
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
Iosif Itkin
 
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
Iosif Itkin
 
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
Iosif Itkin
 
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
Iosif Itkin
 
TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...
Iosif Itkin
 
TMPA-2015: Towards a Usable Defect Prediction Tool: Crossbreeding Machine Lea...
Iosif Itkin
 
TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...
Iosif Itkin
 
TMPA-2015: Multi-Module Application Tracing in z/OS Environment
Iosif Itkin
 
TMPA-2015: FPGA-Based Low Latency Sponsored Access
Iosif Itkin
 
TMPA-2015: Kotlin: From Null Dereference to Smart Casts
Iosif Itkin
 
TMPA-2017: Layered Layouts for Software Systems Visualization
Iosif Itkin
 
Ad

Similar to TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means of Semantic Markup (20)

PPTX
20100425 model based_testing_kuliamin_lectures01-03
Computer Science Club
 
PPT
20100927 28 reqformalization-kuliamin
Computer Science Club
 
PPT
верификация
Alexander Petrov
 
PDF
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
Alexey Paznikov
 
PPTX
разработка серверов и серверных приложений лекция №3
etyumentcev
 
PPTX
разработка серверов и серверных приложений лекция №3
Eugeniy Tyumentcev
 
PPT
Верификация управляющих программ в системе автоматизации РТК (Iron hand)
Alexander Petrov
 
PDF
Векторизация кода (семинар 3)
Mikhail Kurnosov
 
PPTX
Статический анализ: вокруг Java за 60 минут
Andrey Karpov
 
PDF
Как приручить дракона: введение в LLVM
Tech Talks @NSU
 
PPT
Петрикин "Разработка программных средств лоя идентификации диктора по голосу"
RF-Lab
 
PDF
Mera Dev Fest - Swift vs. Obj-C
Sergey Pronin
 
PDF
Cpp0x Introduction
Fedor Vompe
 
PPTX
20110227 csseminar alvor_breslav
Computer Science Club
 
PPT
Rgsu04
EvgeniyaOstr
 
PPT
Rgsu04
EvgeniyaOstr
 
PPT
Natalia Shabaldina. CSEDays
LiloSEA
 
PDF
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Yandex
 
PPT
практика 2
student_kai
 
PPT
2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?
HappyDev
 
20100425 model based_testing_kuliamin_lectures01-03
Computer Science Club
 
20100927 28 reqformalization-kuliamin
Computer Science Club
 
верификация
Alexander Petrov
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
Alexey Paznikov
 
разработка серверов и серверных приложений лекция №3
etyumentcev
 
разработка серверов и серверных приложений лекция №3
Eugeniy Tyumentcev
 
Верификация управляющих программ в системе автоматизации РТК (Iron hand)
Alexander Petrov
 
Векторизация кода (семинар 3)
Mikhail Kurnosov
 
Статический анализ: вокруг Java за 60 минут
Andrey Karpov
 
Как приручить дракона: введение в LLVM
Tech Talks @NSU
 
Петрикин "Разработка программных средств лоя идентификации диктора по голосу"
RF-Lab
 
Mera Dev Fest - Swift vs. Obj-C
Sergey Pronin
 
Cpp0x Introduction
Fedor Vompe
 
20110227 csseminar alvor_breslav
Computer Science Club
 
Rgsu04
EvgeniyaOstr
 
Rgsu04
EvgeniyaOstr
 
Natalia Shabaldina. CSEDays
LiloSEA
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Yandex
 
практика 2
student_kai
 
2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?
HappyDev
 

More from Iosif Itkin (20)

PDF
Foundations of Software Testing Lecture 4
Iosif Itkin
 
PPTX
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
Iosif Itkin
 
PDF
Exactpro FinTech Webinar - Global Exchanges Test Oracles
Iosif Itkin
 
PDF
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
Iosif Itkin
 
PDF
Operational Resilience in Financial Market Infrastructures
Iosif Itkin
 
PDF
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
Iosif Itkin
 
PDF
Testing the Intelligence of your AI
Iosif Itkin
 
PDF
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
Iosif Itkin
 
PDF
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
Iosif Itkin
 
PPTX
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
Iosif Itkin
 
PDF
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
Iosif Itkin
 
PDF
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
Iosif Itkin
 
PPTX
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
Iosif Itkin
 
PDF
QA Community Saratov: Past, Present, Future (2019-02-08)
Iosif Itkin
 
PDF
Machine Learning and RoboCop Testing
Iosif Itkin
 
PDF
Behaviour Driven Development: Oltre i limiti del possibile
Iosif Itkin
 
PDF
2018 - Exactpro Year in Review
Iosif Itkin
 
PPTX
Exactpro Discussion about Joy and Strategy
Iosif Itkin
 
PPTX
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
Iosif Itkin
 
PDF
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
Iosif Itkin
 
Foundations of Software Testing Lecture 4
Iosif Itkin
 
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
Iosif Itkin
 
Exactpro FinTech Webinar - Global Exchanges Test Oracles
Iosif Itkin
 
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
Iosif Itkin
 
Operational Resilience in Financial Market Infrastructures
Iosif Itkin
 
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
Iosif Itkin
 
Testing the Intelligence of your AI
Iosif Itkin
 
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
Iosif Itkin
 
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
Iosif Itkin
 
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
Iosif Itkin
 
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
Iosif Itkin
 
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
Iosif Itkin
 
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
Iosif Itkin
 
QA Community Saratov: Past, Present, Future (2019-02-08)
Iosif Itkin
 
Machine Learning and RoboCop Testing
Iosif Itkin
 
Behaviour Driven Development: Oltre i limiti del possibile
Iosif Itkin
 
2018 - Exactpro Year in Review
Iosif Itkin
 
Exactpro Discussion about Joy and Strategy
Iosif Itkin
 
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
Iosif Itkin
 
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
Iosif Itkin
 

TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means of Semantic Markup

  • 1. Институт систем информатики им. А. П. Ершова СО РАН Лаборатория теоретического программирования ИСИ СО РАН Расширение метагенерацииРасширение метагенерации условий корректности концепцией семантической разметки Кондратьев Дмитрий Александрович Научный руководитель: канд. физ.-мат. наук Алексей Владимирович Промский Новосибирск, 2015 г.
  • 2. Проект C-light – В ИСИ СО РАН разрабатывается проект C-light; – Проект C-light – система дедуктивной верификации Си-программ;Си-программ; – Дедуктивную верификацию предложил Ч. Хоар в 1969-м году; – Задача создания расширяемой системы верификации; – Задача создания удобной для всех пользователей системы верификации.
  • 3. Задача создания удобной системы верификации – Система верификации должна быть удобной не только для специалистов-теоретиков, но и для обычных программистов. – Как анализировать недоказанные УК? – Как определить, какие правила вывода были применены при генерации УК? – Как сопоставить подформулы УК и фрагменты– Как сопоставить подформулы УК и фрагменты программы?
  • 4. Метод решения задачи – В 2008-м году Денни и Фишер предложили метод семантической разметки*. – По концепции Денни и Фишера полученные после генерации УК несут в себе дополнительную информацию, выраженную в виде семантических меток. – Метки проходят различные стадии обработки и переводятся в объяснения на естественном языке.переводятся в объяснения на естественном языке. * Denney E., Fischer B. Explaining Verification Conditions // Proc. AMAST 2008. – LNCS. – 2008. – Vol. 5140. – P. 145-159.
  • 5. Метод семантической разметки – Структура УК. После упрощения УК обычно имеют вид Хорновских дизъюнктов: H1 ˄ ... ˄ Hn ⊃ C – Структура метки. Введем нотацию tl, где • t – терм, • l – метка или список меток. Метки имеют вид c(o, n), гдеМетки имеют вид c(o, n), где • c – концепция, описывающая предназначение терма, • o – позиция связанных с меткой программных конструкций, • n – список меток, «просочившихся» в данную.
  • 6. Метод семантической разметки: концепции – Гипотезы подразделяются на • Утверждения – аннотации из программы, вошедшие в УК; • Предикаты, управляющие потоком исполнения, – подформулы в УК, отражающие ход исполнения программы.подформулы в УК, отражающие ход исполнения программы. – Заключения передают информацию об основной цели УК. – Уточнители характеризуют и гипотезы, и заключения, передавая информацию о том, как подформула появилась в УК и как она была преобразована.в УК и как она была преобразована. – Индуктивные уточнители передают второстепенную цель УК.
  • 7. Модифицированные правила Хоара {P1} S {INVest_inv_iter}pres_inv, (INVass_inv_exit ˄ cast(val(val(e, MeM..STD)), type(e, MeM, TP), int) = 0)while_ff ⊃ Q,type(e, MeM, TP), int) = 0)while_ff ⊃ Q, (INVass_inv ˄ cast(val(val(e, MeM..STD)), type(e, MeM, TP), int) ≠ 0)while_tt ⊃ P1 pres_inv ––––––––––––––––––––––––––––––––––––––––––––––––– {INVest_inv} while(e) S {Q}{INV } while(e) S {Q}
  • 8. Упрощение имеющих метки УК Правила для не имеющих меток УК нельзя переиспользовать без пересмотра, так как – Семантическая разметка может изменить применимость правила; – Нужно аккуратно работать с областью действия меток. Правила упрощения должны достигать следующих целей: – Удаление лишних меток;– Удаление лишних меток; – Минимизация области действия оставшихся меток; – Сохранение достаточного числа меток.
  • 9. Правила упрощения имеющих метки УК Введем c(o, l) ⊗ m = c(o, l • m), где • – конкатенация списков. Группировка правил: 1) Правила, удаляющие метки из тривиальных, тождественно истинных (под-)формул; 2) Правила, выборочно удаляющие имеющие метки тождественно ложные подформулы; 3) Правила, заменяющие всю формулу на false; 4) Правила, осуществляющие «просачивание» меток. Например: – P ˄ Ql → Pl ˄ Ql – tnm → tn ⊗ m
  • 10. Трансляция 1) Нормализация УК с использованием правил их упрощения; 2) Извлечение меток после применения правила устранения2) Извлечение меток после применения правила устранения вложенности; 3) Нормализация меток для сопоставления меткам шаблонов объяснений; 4) Генерация текста с использованием шаблонов4) Генерация текста с использованием шаблонов объяснений.
  • 11. Конструкция label Введем конструкцию (label t c), где – t – терм, к которому приписана метка; – c – строка (тип метки).
  • 12. Расширение языка шаблонов семантическими метками (label {P1} S {(label INV est_inv_iter)} pres_inv), ((label INV ass_inv_exit) / (label cast(val(val(e, MeM..STD)), type(e, MeM, TP), int) = 0type(e, MeM, TP), int) = 0 while_ff)) => Q, (label ((label INV ass_inv) / (label cast(val(val(e, MeM..STD)), type(e, MeM, TP), int) != 0type(e, MeM, TP), int) != 0 while_tt)) => P1 pres_inv) |- {(label any_predicate(INV) est_inv} while(simple_expression(e)) any_code(S) {any_predicate(Q)}
  • 13. Задание шаблонов объяснений Введем конструкцию (label_pattern label format_text), где: – label – концепция метки; – format_text – форматная строка, задающая текстовый шаблон, в которой можно использовать специальные конструкции: • %begin – начало диапазона строк относящегося к данной метке программного кода; • %end – конец диапазона строк относящегося к данной• %end – конец диапазона строк относящегося к данной метке программного кода.
  • 14. Реализация концепции семантической разметки – Структура label: struct label {{ char* concept; int location_begin; int location_end; }} – Иерархия на метках.
  • 15. Протокол для локализации ошибок Транслятор: добавляет метаинформацию До применения правила трансляции: 56. for(; i > 0 ; i++) 57. { 58. k++; 59. continue;59. continue; 60. j++; 61. } После применения правила трансляции: 78. /* begin changes BCE5 17 79-85 */ 79. for(; i > 0; i++) 80. { 81. j++;81. j++; 82. goto l; 83. k++; 84. l: 85. } 86. /* end changes */
  • 16. Протокол для локализации ошибок Обратный транслятор: использует метаинформацию транслятора До применения правила обратной трансляции: 69. /* begin changes BCE5 19 70-76 */ 70. for(; i > 0; i++) 71. { 72. j++; 73. goto l; 74. k++; 75. l: 76. } 77. /* end changes */ После применения правила обратной трансляции: 43. /*begin reverse 70-76*/ 44. for(; i > 0 ; i++) 45. { 46. k++; 47. continue; 48. j++; 49. } 50. /* end reverse */
  • 17. Пример содержащей ошибку функции на языке C-light
  • 18. Функция NegateFirst на языке C-kernel
  • 21. Поиск максимума в массиве /*@ requires (a != NULL) && (length > 0); ensures (0 <= x) && (x < length); ensures forall int i; (0 <= i) && (i < length) ==> (a[x] => a[i]); */*/ int max(int* a, int length);
  • 22. Содержащая ошибку функция max int max(int* a, int length) { int x = 0; int y = length - 1; /*@ loop invariant (0 <= x) && (x < length) && (0 <= y) && (y < length) &&(0 <= y) && (y < length) && (y >= x) && (forall int i; (0 <= i) && (i <= x) ==> (a[i] <= a[x]) || (a[i] <= a[y])) && (forall int i; (y <= i) && (i <= length - 1) ==> (a[i] <= a[x]) || (a[i] <= a[y])); */*/ while (x == y) { if (a[x] <= a[y]) {x = x + 1; } else {y = y - 1;} } return x; }
  • 23. Полученная C-kernel программа 1 // (AND (NEQ a |@NULL|)(> length 0)) 2 int max(int* a, int length) 3 { 4-11 ... 12 }12 } 13 /* (AND (<= 0 x)(< x length) (FORALL (i) (IMPLIES (AND (<= 0 i) (< i length)) (>= a[x] a[i])))) */
  • 24. Функция max на языке C-kernel 2 int max(int* a, int length) 3 { 4 auto int x = 0; 5 auto int y = length - 1; 6 /* (AND (<= 0 x)(< x length)(<= 0 y)6 /* (AND (<= 0 x)(< x length)(<= 0 y) (< y length)(>= y x) (FORALL (i) (IMPLIES (AND (<= 0 i) (<= i x)) (OR (<= a[i] a[x]) (<= a[i] a[y])))) (FORALL (i) (IMPLIES (AND (<= y i) (<= i (- length 1))) (OR (<= a[i] a[x]) (<= a[i] a[y]))))) */*/ 7 while (x == y) 8 { 9 if (a[x] <= a[y]) {x = x + 1; } else {y = y - 1;} 10 } 11 return x; 12 }
  • 25. Недоказанное условие корректности ( )( )( ) ( )( ) ( )( )( ) ( )( )( ) ( )( ) ( )( )( ) ( )( ) ( )( )( ) ( )( )( ) ( )( ) ( )( )( ) ( )                                         ∧                    ≤ ∧≤ ∀ ∧≥ ∧< ∧≤ ∧<∧≤ xMeMMDiMeMMD iMeMMD i xMeMMDyMeMMD lengthMeMMDyMeMMD yMeMMD lengthMeMMDxMeMMDxMeMMD exitinvass 0 0 0 6__ ( )( ) ( )( )( ) ( ) ( )( )( ) ( ) ( )( )( )( ) ( ) ( )( )( ) ( ) ( )( )( )( ) ( )( ) ( )( )( ) ( )( ) ( )( )( )( ) ( ) ( )( )( ) ( ) ( )( )( )( ) ( ) ( )( )( ) ( ) ( )( )( )( ) ( )( ) ( )( )( )( )( ) ( )                         ∧                                                           ≤ ∨≤ ⇒       −≤ ∧≤ ∀ ∧                           ≤ ∨≤ ⇒  ≤ ∀ yMeMMDaMeMMDiMeMMDaMeMMD xMeMMDaMeMMDiMeMMDaMeMMD lengthMeMMDiMeMMD iMeMMDyMeMMD i yMeMMDaMeMMDiMeMMDaMeMMD xMeMMDaMeMMDiMeMMDaMeMMD xMeMMDiMeMMD i ,, ,, 1 ,, ,, ( )( ) ( )( )( )( )( ) ( )( ) ( )( )( )( ) ( ) ( )( )( ) ( )( ) ( )( )( ) ( )( )( ) ( )( ) ( )( )( ) ( ) ( )( )( ) ( ) ( )( )( )( )                                   ≥⇒       < ∧≤ ∀ ∧<∧≤ ⇒               =      = = iMeMMDaMeMMDxMeMMDaMeMMD lengthMeMMDiMeMMD iMeMMD i lengthMeMMDxMeMMDxMeMMD TPMeMyMeMMDxMeMMDtype STDMeMyMeMMDxMeMMDvalval cast ffwhile ,, 0 0 0 int,,, ,.., 7_
  • 26. Объяснение недоказанного условия корректности This VC corresponds to function "max". Hence, given – assumption that loop invariant holds without loop entry at line 6, – assumption that the loop condition doesn't hold at line 7 .
  • 31. Институт систем информатики им. А. П. Ершова СО РАН Лаборатория теоретического программирования ИСИ СО РАН Расширение метагенерацииРасширение метагенерации условий корректности концепцией семантической разметки Кондратьев Дмитрий Александрович Научный руководитель: канд. физ.-мат. наук Алексей Владимирович Промский Новосибирск, 2015 г.