Abstract

Theoretical foundations of compositional reasoning about heaps in imperative programming languages are investigated. We introduce a novel concept of compositional symbolic memory and its relevant properties. We utilize these formal foundations to build up a compositional algorithm that generates generalized heaps, terms of symbolic heap calculus, which characterize arbitrary cyclic code segments. All states inferred by this calculus precisely correspond to reachable states of the original program. We establish the correspondence between inference in this calculus and execution of pure second-order functional programs. The contribution of this work is as follows: (1) a formal model of compositional symbolic memory is proposed; (2) the properties of its correctness are formulated; (3) the calculus of symbolic heaps has been introduced: the conclusions in this calculus give all attainable states of the program; (4) the concept of generalized heaps is introduced, an algorithm for automatic modular construction of generalized heaps according to an imperative program is proposed; (5) an approach is proposed to reduce the problem of finding an output in calculus of symbolic heaps to the problem of proving the safety of functional programs.

Highlights

  • Theoretical foundations of compositional reasoning about heaps in imperative programming languages are investigated

  • We introduce a novel concept of compositional symbolic memory and its relevant properties

  • We utilize these formal foundations to build up a compositional algorithm that generates

Read more

Summary

Введение

Большая часть современного программного обеспечения написана на языках с динамически выделяемой памятью, таких как C++, Java, C#. Модель композициональной символьной памяти используется для построения исчисления символьных куч, которые, в свою очередь, позволяют описывать поведение произвольной императивной программы с динамической памятью при помощи символьных состояний 38. Вклад данной работы заключается в следующем: (1) предложена формальная модель композициональной символьной памяти; (2) сформулированы свойства её корректности; (3) введено исчисление символьных куч: выводы в этом исчислении дают все достижимые состояния программы; (4) введено понятие обобщённых куч, предложен алгоритм автоматического модульного построения обобщённых куч по императивной программе; (5) предложен подход к сведению задачи поиска вывода в исчислении символьных куч к задаче доказательства безопасности функциональных программ. Аппроксимирующие пространство состояний сверху, пригодны для доказательства корректности программ, но на практике порождают большое количество ложноположительных срабатываний. Точные подходы исследуют все пространство состояний, но, насколько известно авторам, в данной статье представлен первый полностью автоматический подход к точному анализу императивных программ с динамической памятью.

Демонстрационный язык
Композициональная символьная память
Exit: halt
Символьные выражения
Символьные кучи
Запись в символьную кучу
Правила редукции
Метод описания путей в графе потока управления
Алгоритм композиционального символьного исполнения
Корректность алгоритма композиционального символьного исполнения
Трансляция символьных куч в чистые функции
Оператор Find
Трансляция обобщённых куч в функции второго порядка
Корректность трансляции в чистые функции
Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call