Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,237 views

Published on

Expanding the Meta-Generation of Correctness Conditions by Means of Semantic Markup
Dmitry Kondratyev, A.P. Ershov Institute of Informatics Systems, Novosibirsk

12 - 14 November 2015
Tools and Methods of Program Analysis in St. Petersburg

Published in: Science
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Институт систем информатики им. А. П. Ершова СО РАН Лаборатория теоретического программирования ИСИ СО РАН Расширение метагенерацииРасширение метагенерации условий корректности концепцией семантической разметки Кондратьев Дмитрий Александрович Научный руководитель: канд. физ.-мат. наук Алексей Владимирович Промский Новосибирск, 2015 г.
  2. 2. Проект C-light – В ИСИ СО РАН разрабатывается проект C-light; – Проект C-light – система дедуктивной верификации Си-программ;Си-программ; – Дедуктивную верификацию предложил Ч. Хоар в 1969-м году; – Задача создания расширяемой системы верификации; – Задача создания удобной для всех пользователей системы верификации.
  3. 3. Задача создания удобной системы верификации – Система верификации должна быть удобной не только для специалистов-теоретиков, но и для обычных программистов. – Как анализировать недоказанные УК? – Как определить, какие правила вывода были применены при генерации УК? – Как сопоставить подформулы УК и фрагменты– Как сопоставить подформулы УК и фрагменты программы?
  4. 4. Метод решения задачи – В 2008-м году Денни и Фишер предложили метод семантической разметки*. – По концепции Денни и Фишера полученные после генерации УК несут в себе дополнительную информацию, выраженную в виде семантических меток. – Метки проходят различные стадии обработки и переводятся в объяснения на естественном языке.переводятся в объяснения на естественном языке. * Denney E., Fischer B. Explaining Verification Conditions // Proc. AMAST 2008. – LNCS. – 2008. – Vol. 5140. – P. 145-159.
  5. 5. Метод семантической разметки – Структура УК. После упрощения УК обычно имеют вид Хорновских дизъюнктов: H1 ˄ ... ˄ Hn ⊃ C – Структура метки. Введем нотацию tl, где • t – терм, • l – метка или список меток. Метки имеют вид c(o, n), гдеМетки имеют вид c(o, n), где • c – концепция, описывающая предназначение терма, • o – позиция связанных с меткой программных конструкций, • n – список меток, «просочившихся» в данную.
  6. 6. Метод семантической разметки: концепции – Гипотезы подразделяются на • Утверждения – аннотации из программы, вошедшие в УК; • Предикаты, управляющие потоком исполнения, – подформулы в УК, отражающие ход исполнения программы.подформулы в УК, отражающие ход исполнения программы. – Заключения передают информацию об основной цели УК. – Уточнители характеризуют и гипотезы, и заключения, передавая информацию о том, как подформула появилась в УК и как она была преобразована.в УК и как она была преобразована. – Индуктивные уточнители передают второстепенную цель УК.
  7. 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. 8. Упрощение имеющих метки УК Правила для не имеющих меток УК нельзя переиспользовать без пересмотра, так как – Семантическая разметка может изменить применимость правила; – Нужно аккуратно работать с областью действия меток. Правила упрощения должны достигать следующих целей: – Удаление лишних меток;– Удаление лишних меток; – Минимизация области действия оставшихся меток; – Сохранение достаточного числа меток.
  9. 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. 10. Трансляция 1) Нормализация УК с использованием правил их упрощения; 2) Извлечение меток после применения правила устранения2) Извлечение меток после применения правила устранения вложенности; 3) Нормализация меток для сопоставления меткам шаблонов объяснений; 4) Генерация текста с использованием шаблонов4) Генерация текста с использованием шаблонов объяснений.
  11. 11. Конструкция label Введем конструкцию (label t c), где – t – терм, к которому приписана метка; – c – строка (тип метки).
  12. 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. 13. Задание шаблонов объяснений Введем конструкцию (label_pattern label format_text), где: – label – концепция метки; – format_text – форматная строка, задающая текстовый шаблон, в которой можно использовать специальные конструкции: • %begin – начало диапазона строк относящегося к данной метке программного кода; • %end – конец диапазона строк относящегося к данной• %end – конец диапазона строк относящегося к данной метке программного кода.
  14. 14. Реализация концепции семантической разметки – Структура label: struct label {{ char* concept; int location_begin; int location_end; }} – Иерархия на метках.
  15. 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. 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. 17. Пример содержащей ошибку функции на языке C-light
  18. 18. Функция NegateFirst на языке C-kernel
  19. 19. Недоказанное условие корректности
  20. 20. Объяснение недоказанного условия корректности
  21. 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. 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. 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. 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. 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. 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 .
  27. 27. Копирование файла
  28. 28. Копирование файла на языке C-kernel
  29. 29. Условие корректности где
  30. 30. Объяснение условия корректности
  31. 31. Институт систем информатики им. А. П. Ершова СО РАН Лаборатория теоретического программирования ИСИ СО РАН Расширение метагенерацииРасширение метагенерации условий корректности концепцией семантической разметки Кондратьев Дмитрий Александрович Научный руководитель: канд. физ.-мат. наук Алексей Владимирович Промский Новосибирск, 2015 г.

×