Существуют ли (функциональные?) Языки программирования, в которых все функции имеют каноническую форму? То есть любые две функции, которые возвращают одинаковые значения для всего набора ввода, представляются одинаково, например, если f (x) вернул x + 1, а g (x) вернул x + 2, то f (f (x )) и g (x) будут генерировать неразличимые исполняемые файлы при компиляции программы.
Возможно, что еще более важно, где / как я могу найти больше информации о каноническом представлении программ (поиск в программах "программы канонического представления" был менее чем плодотворным)? Кажется, что это естественный вопрос, и я боюсь, что просто не знаю, как найти то, что я ищу. Мне любопытно, возможно ли, чтобы такой язык был завершен по Тьюрингу, и если нет, то насколько выразительным может быть язык программирования, при этом сохраняя такое свойство.
Мой опыт довольно ограничен, поэтому я бы предпочел источники с меньшим количеством предварительных условий, но ссылки на более продвинутые источники тоже могут быть классными, так как таким образом я буду знать, к чему я хочу стремиться.