Top Banner
Институт систем информатики им. А. П. Ершова СО РАН Лаборатория теоретического программирования ИСИ СО РАН Расширение метагенерации Расширение метагенерации условий корректности концепцией семантической разметки Кондратьев Дмитрий Александрович Научный руководитель: канд. физ.-мат. наук Алексей Владимирович Промский Новосибирск, 2015 г.
31

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

Feb 17, 2017

Download

Science

Iosif Itkin
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means of Semantic Markup

Институт систем информатики им. А. П. Ершова СО РАН

Лаборатория теоретического программирования ИСИ СО РАН

Расширение метагенерацииРасширение метагенерации

условий корректности концепцией

семантической разметки

Кондратьев Дмитрий АлександровичНаучный руководитель: канд. физ.-мат. наук

Алексей Владимирович Промский

Новосибирск, 2015 г.

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

Проект C-light

– В ИСИ СО РАН разрабатывается проект C-light;

– Проект C-light – система дедуктивной верификации

Си-программ;Си-программ;

– Дедуктивную верификацию предложил Ч. Хоар в 1969-м

году;

– Задача создания расширяемой системы верификации;

– Задача создания удобной для всех пользователей системы

верификации.

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

Задача создания удобной системы верификации

– Система верификации должна быть удобной не только для

специалистов-теоретиков, но и для обычных программистов.

– Как анализировать недоказанные УК?

– Как определить, какие правила вывода были применены

при генерации УК?

– Как сопоставить подформулы УК и фрагменты – Как сопоставить подформулы УК и фрагменты

программы?

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

Метод решения задачи

– В 2008-м году Денни и Фишер предложили метод семантической разметки*.

– По концепции Денни и Фишера полученные после

генерации УК несут в себе дополнительную информацию,

выраженную в виде семантических меток.

– Метки проходят различные стадии обработки и

переводятся в объяснения на естественном языке.переводятся в объяснения на естественном языке.

* Denney E., Fischer B. Explaining Verification Conditions // Proc.

AMAST 2008. – LNCS. – 2008. – Vol. 5140. – P. 145-159.

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

Метод семантической разметки

– Структура УК. После упрощения УК обычно имеют вид

Хорновских дизъюнктов:

H1

˄ ... ˄ Hn⊃ C

– Структура метки.

Введем нотацию tl, где

• t – терм,

• l – метка или список меток.

Метки имеют вид c(o, n), гдеМетки имеют вид c(o, n), где

• c – концепция, описывающая предназначение терма,

• o – позиция связанных с меткой программных конструкций,

• n – список меток, «просочившихся» в данную.

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

Метод семантической разметки: концепции

– Гипотезы подразделяются на

• Утверждения – аннотации из программы, вошедшие в УК;

• Предикаты, управляющие потоком исполнения, –

подформулы в УК, отражающие ход исполнения программы.подформулы в УК, отражающие ход исполнения программы.

– Заключения передают информацию об основной цели УК.

– Уточнители характеризуют и гипотезы, и заключения,

передавая информацию о том, как подформула появилась

в УК и как она была преобразована.в УК и как она была преобразована.

– Индуктивные уточнители передают второстепенную

цель УК.

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

Модифицированные правила Хоара

{P1} S {INVest_inv_iter}pres_inv,

(INVass_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,

(INVass_inv ˄cast(val(val(e, MeM..STD)),

type(e, MeM, TP), int) ≠ 0) while_tt ⊃ P1pres_inv

–––––––––––––––––––––––––––––––––––––––––––––––––

{INVest_inv} while(e) S {Q}{INV } while(e) S {Q}

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

Упрощение имеющих метки УК

Правила для не имеющих меток УК нельзя переиспользовать

без пересмотра, так как

– Семантическая разметка может изменить применимость

правила;

– Нужно аккуратно работать с областью действия меток.

Правила упрощения должны достигать следующих целей:

– Удаление лишних меток;– Удаление лишних меток;

– Минимизация области действия оставшихся меток;

– Сохранение достаточного числа меток.

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

Правила упрощения имеющих метки УК

Введем

c(o, l) ⊗ m = c(o, l • m), где • – конкатенация списков.

Группировка правил:

1) Правила, удаляющие метки из тривиальных, тождественно

истинных (под-)формул;

2) Правила, выборочно удаляющие имеющие метки

тождественно ложные подформулы;

3) Правила, заменяющие всю формулу на false;

4) Правила, осуществляющие «просачивание» меток.

Например:

– P ˄ Ql → Pl ˄ Ql

– tnm → tn ⊗ m

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

Трансляция

1) Нормализация УК с использованием правил их

упрощения;

2) Извлечение меток после применения правила устранения 2) Извлечение меток после применения правила устранения

вложенности;

3) Нормализация меток для сопоставления меткам шаблонов

объяснений;

4) Генерация текста с использованием шаблонов 4) Генерация текста с использованием шаблонов

объяснений.

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

Конструкция label

Введем конструкцию (label t c), где

– t – терм, к которому приписана метка;

– c – строка (тип метки).

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

Расширение языка шаблонов семантическими метками

(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)) => P1pres_inv)

|-

{(label any_predicate(INV) est_inv}while(simple_expression(e)) any_code(S)

{any_predicate(Q)}

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

Задание шаблонов объяснений

Введем конструкцию (label_pattern label format_text), где:

– label – концепция метки;

– format_text – форматная строка, задающая текстовый

шаблон, в которой можно использовать специальные

конструкции:

• %begin – начало диапазона строк относящегося к

данной метке программного кода;

• %end – конец диапазона строк относящегося к данной • %end – конец диапазона строк относящегося к данной

метке программного кода.

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

Реализация концепции семантической разметки

– Структура label:

struct label

{{

char* concept;

int location_begin;

int location_end;

}}

– Иерархия на метках.

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

Протокол для локализации ошибокТранслятор: добавляет метаинформацию

До применения правила трансляции:

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 */

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

Протокол для локализации ошибокОбратный транслятор: использует метаинформацию транслятора

До применения правила обратной трансляции:

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 */

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

Пример содержащей ошибку функции на языке C-light

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

Функция NegateFirst на языке C-kernel

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

Недоказанное условие корректности

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

Объяснение недоказанного условия корректности

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

Поиск максимума в массиве

/*@ 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);

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

Содержащая ошибку функция maxint 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;

}

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

Полученная 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]))))

*/

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

Функция 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 }

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

Недоказанное условие корректности( )( )( ) ( )( ) ( )( )( )

( )( )( )

( )( ) ( )( )( )

( )( ) ( )( )( )

( )( )( )

( )( ) ( )( )( )

( )

∧≤

∧≥

∧<

∧≤

∧<∧≤

xMeMMDiMeMMD

iMeMMD

i

xMeMMDyMeMMD

lengthMeMMDyMeMMD

yMeMMD

lengthMeMMDxMeMMDxMeMMDexitinvass

0

0

06__

( )( ) ( )( )( )

( ) ( )( )( ) ( ) ( )( )( )( )

( ) ( )( )( ) ( ) ( )( )( )( )

( )( ) ( )( )( )

( )( ) ( )( )( )( )

( ) ( )( )( ) ( ) ( )( )( )( )

( ) ( )( )( ) ( ) ( )( )( )( )

( )( ) ( )( )( )( )( )( )

∨≤⇒

−≤

∧≤

∨≤⇒

≤∀

yMeMMDaMeMMDiMeMMDaMeMMD

xMeMMDaMeMMDiMeMMDaMeMMD

lengthMeMMDiMeMMD

iMeMMDyMeMMD

i

yMeMMDaMeMMDiMeMMDaMeMMD

xMeMMDaMeMMDiMeMMDaMeMMD

xMeMMDiMeMMDi

,,

,,

1

,,

,,

( )( ) ( )( )( )( )( )

( )( ) ( )( )( )( )

( )

( )( )( ) ( )( ) ( )( )( )

( )( )( )

( )( ) ( )( )( )

( ) ( )( )( ) ( ) ( )( )( )( )

≥⇒

<

∧≤

∧<∧≤

=

=

=

iMeMMDaMeMMDxMeMMDaMeMMD

lengthMeMMDiMeMMD

iMeMMD

i

lengthMeMMDxMeMMDxMeMMD

TPMeMyMeMMDxMeMMDtype

STDMeMyMeMMDxMeMMDvalvalcast

ffwhile

,,

0

0

0int,,,

,..,7_

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

Объяснение недоказанного условия корректности

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 .

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

Копирование файла

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

Копирование файла на языке C-kernel

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

Условие корректности

где

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

Объяснение условия корректности

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

Институт систем информатики им. А. П. Ершова СО РАН

Лаборатория теоретического программирования ИСИ СО РАН

Расширение метагенерацииРасширение метагенерации

условий корректности концепцией

семантической разметки

Кондратьев Дмитрий АлександровичНаучный руководитель: канд. физ.-мат. наук

Алексей Владимирович Промский

Новосибирск, 2015 г.