¿Hay algún lenguaje de programación (funcional) donde todas las funciones tengan una forma canónica? Es decir, cualquiera de las dos funciones que devuelven los mismos valores para todo el conjunto de entrada se representa de la misma manera, por ejemplo, si f (x) devolvió x + 1 yg (x) devolvió x + 2, entonces f (f (x) )) yg (x) generarían ejecutables indistinguibles cuando se compila el programa.
Quizás lo más importante, ¿dónde / cómo podría encontrar más información sobre la representación canónica de los programas (buscar en Google "programas de representación canónica" ha sido menos que fructífero)? Parece una pregunta natural, y me temo que simplemente no sé el término apropiado para lo que estoy buscando. Tengo curiosidad por saber si es posible que dicho lenguaje sea completo, y si no, qué tan expresivo puede ser un lenguaje de programación, mientras se conserva esa propiedad.
Mi experiencia es bastante limitada, por lo que preferiría fuentes con menos requisitos previos, pero las referencias a fuentes más avanzadas también pueden ser geniales, ya que de esa manera sabré hacia lo que quiero trabajar.