Pourquoi «map insertionsort» n'est pas égal à «map mergesort»?

8

Dans la théorie des types podcast ep. 3 , Dan Licata affirme que le fait que pour chaque entrée, insertionsort et mergesort donnent le même résultat n'implique pas que le résultat serait égal lorsqu'il est utilisé en tant que fonctions d'ordre supérieur comme arguments d'une troisième fonction, c'est map insertionsort-à- dire qu'il n'a pas à être égal map mergesort.

Il explique cela par "parce que vous ne savez pas que, comme les fonctions, insertionsort et mergesort sont égales" mais je ne comprends toujours pas.

pourquoi est-ce le cas? Un contre-exemple serait génial!

Filip Haglund
la source

Réponses:

11

Cela a à voir avec l' axiome de l'extensionnalité , c'est-à-dire si vous l'acceptez pour des fonctions ou non.

L'énoncé de cet axiome en ce qui concerne les fonctions est

f,g:AB, ((x:A, f x=g x)f=g).
Informellement, cela signifie que si deux fonctions sont égales d'un point à l'autre, nous les considérons comme égales.

Syntaxiquement, le tri par fusion et le tri par insertion ne sont pas égaux, mais si nous ne nous soucions pas de leur complexité temporelle et mémoire (je veux dire s'ils ne se soucient que de leurs résultats), nous pouvons accepter l'axiome de l'extensionnalité et les considérer comme égaux. Cela signifie que nous pouvons nous substituer l'un à l'autre dans chaque expression à l'étude sans rien changer. Dans ce casmap f=map g.

Au contraire, si nous rejetons l'axiome susmentionné, nous ne pouvons que prouver une déclaration comme celle-ci:

(x:A, f x=g x)xs:list A, map f xs=map g xs.
Notez que la conclusion n'est pas la même que map f=map g.
Anton Trunov
la source
2
Je veux voter à nouveau.
Filip Haglund