Existem linguagens de programação (funcionais?) Nas quais todas as funções têm uma forma canônica? Ou seja, quaisquer duas funções que retornam os mesmos valores para todo o conjunto de entradas são representadas da mesma maneira, por exemplo, se f (x) retornou x + 1 eg (x) retornou x + 2, então f (f (x )) eg (x) gerariam executáveis indistinguíveis quando o programa for compilado.
Talvez o mais importante seja, onde / como posso encontrar mais informações sobre representação canônica de programas (pesquisar no Google "programas de representação canônica" tem sido menos proveitoso)? Parece uma pergunta natural, e tenho medo de não saber o termo adequado para o que estou procurando. Estou curioso para saber se é possível que essa linguagem seja Turing completa e, se não for, quão expressiva você pode ter uma linguagem de programação, mantendo a propriedade.
Como meu histórico é bastante limitado, prefiro fontes com menos pré-requisitos, mas as referências a fontes mais avançadas também podem ser interessantes, pois assim saberei no que quero trabalhar.