Por que `map insertionsort` não é igual a`map mergesort`?

8

No pod da teoria dos tipos, ep. 3 , Dan Licata afirma que o fato de que para cada entrada, insertionsort e mergesort produzem o mesmo resultado, não implica que o resultado seria igual quando usado como funções de ordem superior como argumentos para uma terceira função, ou seja map insertionsort, não precisa ser igual map mergesort.

Ele explica isso como "porque você não sabe que, como funções, insertionsort e mergesort são iguais", mas ainda não entendi.

Por que esse é o caso? Um exemplo contrário seria ótimo!

Filip Haglund
fonte

Respostas:

11

Tem a ver com o axioma da extensionalidade , isto é, se você o aceita para funções ou não.

A afirmação desse axioma em relação às funções é Informalmente, significa que, se duas funções são iguais em termos de ponto, então as consideramos iguais.

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

A ordenação sintática e a ordenação por inserção não são iguais, mas se não nos importamos com as complexidades de tempo e memória (quero dizer, se importamos apenas com os resultados), podemos aceitar o axioma da extensionalidade e considerá-los iguais. Isso significa que podemos substituir um pelo outro em todas as expressões em consideração sem realmente mudar nada. Nesse caso, .map f=map g

Pelo contrário, se rejeitarmos o axioma mencionado acima, só podemos provar uma afirmação como esta: Observe que a conclusão não é a mesma que .

(x:A, f x=g x)xs:list A, map f xs=map g xs.
map f=map g
Anton Trunov
fonte
2
Eu quero votar novamente.
Filip Haglund