Аннотация:
Трансформационный подход к верификации программ был очень популярной темой исследований в первые десятилетия теории программирования. Многие выдающиеся пионеры теории программирования внесли свой вклад в разработку данного направления исследований: Джон Маккарти, Амир Пнуели, Дональд Кнут ...
Много интересных примеров трансформационного подхода было тщательно изучено, что привело к методам устранения рекурсии,
известным как хвостовая рекурсия и как ко-рекурсия.
В данной работе мы подробно исследуем (мы надеемся, новый) пример устранения рекурсии, основанный на трансформациях программы и анализе задачи, решаемой этой программой.
Наш пример является частным случаем нисходящего динамического программирования, но не является ни примером хвостовой рекурсии, ни кo-рекурсии.
Этот пример можно рассмотреть с разных точек зрения: как пример преобразования нисходящего динамического программирования к
восходящему (с использованием только статической памяти фиксированного размера),
или как доказательство функциональной эквивалентности между рекурсивной и итеративной программами
(которое в дальнейшем может послужить примером для автоматического доказательства),
или как захватывающую алгоритмическую головоломку либо задачу дизайна, анализа и верификации алгоритмов. Статья публикуется в авторской редакции.
Ключевые слова:рекурсивные и стандартные схемы программ, рекурсивные и итеративные программы, функциональная эквивалентность программ и схем программ,
восходящее и нисходящее динамическое программирование, устранение рекурсии, ассоциативные и стандартные массивы, статическая и динамическая память.