¿Por qué `map insertionsort` no es igual a` map mergesort`?


8

En la teoría de tipos podcast ep. 3 , Dan Licata afirma que el hecho de que para cada entrada, insertortort y mergesort den el mismo resultado no implica que el resultado sea igual cuando se usa como funciones de orden superior como argumentos para una tercera función, es decir map insertionsort, no tiene que ser igual map mergesort.

Explica esto por "porque no sabes eso, ya que las funciones, insertortort y mergesort son iguales" pero todavía no lo entiendo.

¿Por qué es este el caso? ¡Un ejemplo contrario sería genial!

Respuestas:


11

Tiene que ver con el axioma de la extensionalidad , es decir, si lo acepta para funciones o no.

La declaración de este axioma con respecto a las funciones es Informalmente significa que si dos funciones son iguales en cuanto a puntos, entonces las consideramos iguales.

f,g:AB, ((x:A, f x=g x)f=g).

La ordenación sintáctica de fusión y la ordenación por inserción no son iguales, pero si no nos importan sus complejidades de tiempo y memoria (es decir, si solo nos interesan sus resultados) podemos aceptar el axioma de la extensionalidad y considerarlos iguales. Eso significa que podemos sustituir uno por otro en cada expresión bajo consideración sin cambiar realmente nada. En este caso .map f=map g

Por el contrario, si rechazamos el axioma antes mencionado, entonces solo podemos probar una declaración como esta: Tenga en cuenta que la conclusión no es la misma que .

(x:A, f x=g x)xs:list A, map f xs=map g xs.
map f=map g

2
Quiero volver a votar esto.
Filip Haglund
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.