Если у вас есть две функции, реализующие другой алгоритм сортировки, то можно ли по исходному коду сделать вывод, что они имеют одинаковые внешние свойства? Это означает, что у них обоих будет возможная несортированная последовательность в качестве входных данных и отсортированная последовательность в качестве их выходных данных? Каким образом эти внешние свойства могут быть определены исходным кодом? И как бы вы описали эти внешние свойства? Какие обозначения будут использоваться?
Внешние свойства можно сделать известными, определив их явно, например, в системе типов, но мне интересно, можно ли это сделать неявно. Или как-то теоретически невозможно вывести такую семантику? Меня интересует, возможно ли это для произвольных функций, а не только для алгоритмов сортировки, предполагая, что такие вещи, как функции, всегда останавливаются и не имеют побочных эффектов.
Стоит ли смотреть на денотационную семантику или она не связана?
Я заинтересован в указателях для исследований в этой области и в различных терминах, используемых для описания предмета, которые могут помочь в моем поиске литературы.