Научная статья на тему 'Завершение эскизов предикатных программ методом синтеза через контрпримеры'

Завершение эскизов предикатных программ методом синтеза через контрпримеры Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
87
15
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПРЕДИКАТНОЕ ПРОГРАММИРОВАНИЕ / ФОРМАЛЬНАЯ ОПЕРАЦИОННАЯ СЕМАНТИКА / ПРОГРАММНЫЙ СИНТЕЗ / СИНТЕЗ НА ОСНОВЕ КОНТРПРИМЕРОВ / ДЕДУКТИВНАЯ ВЕРИФИКАЦИЯ / PREDICATE PROGRAMS / FORMAL OPERATION SEMANTICS / PROGRAM SYNTHESIS / COUNTEREXAMPLE GUIDED SYNTHESIS / DEDUCTIVE VERIFICATION

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Чушкин Михаил Сергеевич

Программа на языке P представляет собой набор определений предикатов. Для языка P разработана операционная семантика. На базе операционной семантики определена формула тотальной корректности предиката относительно его спецификации. Для незаконченной программы на языке P ставится задача её завершения до корректной относительно спецификации. Метод синтеза выражений на основе контрпримеров успешно адаптирован для этой задачи.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Sketch completion for predicate programs by counterexamples guided synthesis

Predicate programs are presented in the language P by sets of computable predicates. For programs in P, the formal operational semantics is developed. On the base of this semantics, a formula describing the total correctness of a predicate program with respect to its specification is presented. The problem of sketch completion for programs in P is considered. The sketch of a program is defined as a typical program with arbitrary expressions. The idea of arbitrary expressions is inspired by the synthesis of programs by a sketching method. Arbitrary expressions are synthesized by counterexample guided synthesis method. The correctness formulas for completed programs are generated. Some methods to synthesize expressions are developed. These methods can be successfully used in our project instead of counterexample guided synthesis. The overall project objective is to develop the program synthesis methods starting from a program specification and the specification of additional programs used in the decomposition of the source program. The nearest project objective is to be able to synthesize elementary expressions in constructed programs.

Текст научной работы на тему «Завершение эскизов предикатных программ методом синтеза через контрпримеры»

ЛИТЕРАТУРА

1. Егорушкин О. И., Колбасина И. В., Сафонов К. В. О совместности систем символьных полиномиальных уравнений и их приложении // Прикладная дискретная математика. Приложение. 2016. №9. С. 119-121.

2. Egorushkin O. I., Kolbasina I. V., and Safonov K. V. On solvability of systems of symbolic polynomial equations // Журн. СФУ. Сер. Матем. и физ. 2016. Т. 9. Вып. 2. С. 166-172.

3. Глушков В. М., Цейтлин Г. Е., Ющенко Е. Л. Алгебра. Языки. Программирование. Киев: Наукова думка, 1973.

4. Salomaa A. and Soitolla M. Automata-Theoretic Aspects of Formal Power Series. N.Y.: Springer Verlag, 1978.

5. Семёнов А. Л. Алгоритмические проблемы для степенных рядов и контекстно-свободных грамматик // Доклады АН СССР. 1973. №212. С. 50-52.

6. Сафонов К. В., Егорушкин О. И. О синтаксическом анализе и проблеме В. М. Глушкова распознавания контекстно-свободных языков Хомского // Вестник Томского государственного университета. 2006. Приложение № 17. С. 63-67.

7. Сафонов К. В. Об условиях алгебраичности и рациональности суммы степенного ряда // Матем. заметки. 1987. Т. 41. Вып.3. С. 325-332.

8. Safonov K. V. On power series of algebraic and rational functions in Cn // J. Math. Analysis Appl. 2000. V. 243. P. 261-277.

УДК 519.714 DOI 10.17223/2226308X/10/59

ЗАВЕРШЕНИЕ ЭСКИЗОВ ПРЕДИКАТНЫХ ПРОГРАММ МЕТОДОМ СИНТЕЗА ЧЕРЕЗ КОНТРПРИМЕРЫ1

М. С. Чушкин

Программа на языке P представляет собой набор определений предикатов. Для языка P разработана операционная семантика. На базе операционной семантики определена формула тотальной корректности предиката относительно его спецификации. Для незаконченной программы на языке P ставится задача её завершения до корректной относительно спецификации. Метод синтеза выражений на основе контрпримеров успешно адаптирован для этой задачи.

Ключевые слова: предикатное программирование, формальная операционная семантика, программный синтез, синтез на основе контрпримеров, дедуктивная верификация.

1. Система предикатного программирования

Программа на языке P0 определяется следующей конструкцией:

<имя предиката> (<аргументы>:<результаты>){<оператор>},

аргументы и результаты — непересекающиеся наборы имён переменных. Набор аргументов может быть пустым.

Операторами языка Po являются: B(x : z); C(z : y) —последовательный оператор; B(x : y)\\C(x : z) —параллельный оператор и if (e) B(x : y) else C(x : y) —условный оператор. Здесь B и C — операторы, e — логическое выражение [1].

Операционной семантикой программы H(x : y) назовём формулу R(H)(x,y), смысл которой на естественном языке звучит следующим образом: «для значения на-

хРабота поддержана грантом РФФИ, проект №16-01-00498.

152

Прикладная дискретная математика. Приложение

бора х исполнение программы Н всегда завершается и существует исполнение, при котором результатом вычисления является значение набора у» [2].

Тотальная корректность программы относительно спецификации в виде предусловия Р(х) и постусловия Q(x,y) определяется формулой

Ух Р(х) ^ [Чу Я(Н)(х,у) ^ Q(x,y)] & Зу Я(Н)(х,у).

В системе предикатного программирования реализован генератор формул корректности. Используя систему правил вывода, генератор декомпозирует исходное условие тотальной корректности на более простые формулы корректности, которые проходят проверку в БМТ-решателе СУС3 и в системе РУБ [3].

2. Завершение эскизов предикатных программ

Синтаксис выражений языка Р расширяется произвольным выражением, для обозначения которого используется слово «??». Программа, содержащая в себе произвольные выражения, называется эскизом [4]. Примеры программ на языке Р, формул корректности и эскизов можно найти по ссылке [5].

Пусть дан некоторый эскиз Бке1ск(х : у), произвольные выражения которого заменены на вызовы предикатов /¿, тела которых неизвестны. Этот эскиз передаётся генератору формул корректности, который строит множество формул корректности.

Для некоторой пары значений (х',у') эскиза Бке1ск(х : у) строится конкретный пример [6] каждого произвольного выражения по следующему алгоритму. Значения (х', у') подставляются в множество формул корректности. Формулы в полученном множестве зависят лишь от значений произвольных выражений, которые можно найти, передав формулы в БМТ-решатель. Значения выражений объединяются с парой (х',у'), образуя конкретные примеры произвольных выражений.

Спецификация [Р(х), Q(x, у)] эскиза Бке1сН(х : у) приводится к виду Р(х) ЛQ(x, у) и передаётся БМТ-решателю; он находит значения переменных (х0,у0), на которых эта формула истинна. Для каждого произвольного выражения строится множество конкретных примеров, начальным элементом которого является конкретный пример для пары значений (х0,у0).

Для каждого множества конкретных примеров строится удовлетворяющее ему выражение по следующему алгоритму. Выражения языка Р сортируются в порядке возрастания их длины и поочередно проходят проверку на удовлетворение конкретным примерам. Если выражение удовлетворяет всем конкретным примерам заданного множества, то оно считается итоговым.

Построенные таким образом выражения подставляются в множество условий корректности эскиза Бке1ск(х : у). Полученное множество формул передается БМТ-решателю. Если решатель подтверждает истинность формул, то процесс синтеза завершается.

Если БМТ-решатель смог найти контрпример (х'',у''), на котором не все формулы корректности истинны, то для этого контрпримера строятся конкретные примеры произвольных выражений, расширяющие существующие множества конкретных примеров. Процесс повторяется для обновлённых множеств.

3. Оценка сложности метода

Сложность алгоритма зависит от количества формул в множестве условий корректности, от количества кандидатов на роль выражения, удовлетворяющего множеству конкретных примеров, и от возможностей решателя.

Зависимость количества формул корректности от объёма программы экспоненциальная. В среднем для программы объёмом в 10 операторов сгенерируется 30 формул корректности.

Зависимость числа возможных кандидатов на роль выражения, удовлетворяющего множеству конкретных примеров, от длины выражения экспоненциальная. В среднем выражение длиной 10 лексем имеет 100 тыс. кандидатов.

В данной реализации используется решатель CVC3. Он корректно завершает проверку выполнимости лишь для простых формул, не содержащих кванторов и сложной арифметики. Таким образом, описанный выше алгоритм целесообразно применять для коротких простых программ.

ЛИТЕРАТУРА

1. Карнаухов Н. С., Першин Д. Ю., Шелехов В. И. Язык предикатного программирования P. Препринт №153. Новосибирск: ИСИ СО РАН, 2010. 42 с.

2. Шелехов В. И. Семантика языка предикатного программирования // ЗОНТ-15. Новосибирск, 2015. С. 15.

3. Чушкин М. С. Методы дедуктивной верификации предикатных программ // Тр. 2-й Меж-дунар. конф. «Инструменты и методы анализа программ». Кострома, 2014. С. 205-214.

4. Solar-Lezama A., Tancau L., Bodik R., et al. Combinatorial sketching for finite programs // Proc. ASPLOS XII. N.Y.: ACM, 2006. P. 404-415.

5. https://gist.github.com/mchushkin/8e1a6a28fd6d342623cd97cd5fa395ac

6. Udupa A., Raghavan A., Deshmukh J. V., et al. TRANSIT: specifying protocols with concolic snippets // Proc. PLDI'13. N.Y.: ACM, 2013. P. 287-296.

i Надоели баннеры? Вы всегда можете отключить рекламу.