Perché `map insertionsort` non è uguale a` map mergesort`?


8

Nella teoria dei tipi podcast ep. 3 , Dan Licata afferma che il fatto che per ogni input, insertionsort e mergesort fornisca lo stesso risultato non implica che il risultato sarebbe uguale se usato come funzioni di ordine superiore come argomenti per una terza funzione, cioè map insertionsortnon deve essere uguale map mergesort.

Lo spiega "perché non sai che, dato che funzioni, insertionsort e mergesort sono uguali" ma ancora non capisco.

Perché è così? Un contro esempio sarebbe fantastico!

Risposte:


11

Ha a che fare con l' assioma dell'estensione , cioè se lo accetti per le funzioni o meno.

L'affermazione di questo assioma riguardo alle funzioni è Informalmente significa che se due funzioni sono uguali dal punto di vista dei punti, le consideriamo uguali.

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

Sinteticamente unisci-ordinamento e inserzione-ordinamento non sono uguali, ma se non ci interessa il loro tempo e le complessità della memoria (voglio dire se ci preoccupiamo solo dei loro risultati) possiamo accettare l'assioma dell'estensione e considerarli uguali. Ciò significa che possiamo sostituire l'uno con l'altro in ogni espressione considerata senza cambiare nulla. In questo caso .map f=map g

Al contrario, se rifiutiamo il suddetto assioma, allora possiamo solo provare una dichiarazione come questa: Si noti che la conclusione non è la stessa di .

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

2
Voglio votare di nuovo questo.
Filip Haglund,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.