Аннотация:
Полипрограмма — это обобщение программы, допускающее множественность определений одной и той же
функции. Подобные объекты возникают в различных системах преобразования программ, таких как
система Бёрстолла–Дарлингтона и насыщение равенствами. В данной работе мы вводим понятие
полипрограммы на нестрогом функциональном языке первого порядка.
Мы определяем денотационную семантику полипрограмм и описываем некоторые преобразования
полипрограмм в двух разных стилях: в стиле системы Бёрстолла–Дарлингтона и в стиле насыщения
равенствами. Преобразования в стиле насыщения равенствами осуществляются над полипрограммами в
расчленённой форме, в которой стирается грань между функциями и выражениями и между подстановкой и
раскрытием вызова функции. Расчленённые полипрограммы хорошо подходят для реализации и проведения
рассуждений, но трудны для человеческого восприятия.
Мы также вводим понятие бисимуляции полипрограмм, на котором основано преобразование — слияние по
бисимуляции, соответствующее доказательству эквивалентности функций по индукции или коиндукции.
Бисимуляция полипрограмм — понятие, вдохновлённое понятием бисимуляции размеченных систем
переходов, но несколько от него отличающееся, поскольку бисимуляция полипрограмм рассматривает
каждое определение как самодостаточное, т.е. функция полипрограммы задаётся любым своим
определением, в то время как в размеченной системе переходов поведение системы в состоянии
определяется всей совокупностью переходов, которые можно осуществить из этого состояния.
Мы предлагаем алгоритм перечисления бисимуляций некоторого определённого вида. Алгоритм состоит из
двух фаз: перечисление пребисимуляций и преобразование их в бисимуляции. Такое разделение
требуется из-за того, что бисимуляции полипрограмм учитывают возможность перестановки параметров
функций. Мы доказываем корректность данного алгоритма, а также формулируем некоторую слабую форму
его полноты.
Статья публикуется в авторской редакции.