Encodage de type récursif sur le système F (et d'autres systèmes de type pur)

8

J'étudie les systèmes de types purs, en particulier le calcul des constructions, et j'essaie d'utiliser un codage pour les types récursifs, ce qui, selon Philip Wadler, est possible . À titre d'exemple, j'utilise la bibliothèque Morte Haskell pour coder les chiffres Scott comme donnés par Cardelli .

Un résumé de l'encodage est en tant que tel: étant donné un type récursif (positif) ...

μX.F X

... nous pouvons le coder comme un type sur le système F comme ...

Lfix X.F X = ΛX.(F XX)X

... ou, en utilisant la notation des systèmes de type pur (avec une explicite F) ...

Lfix = ΠF:.ΠX:.(F XX)X

...depuis F est un constructeur de type ( est le type de types).

Afin de coder de tels codes, nous devons déclarer trois fonctions, fold, in et out, selon Wadler, et utilisé par Cardelli pour l'encodage des chiffres Scott.

plier: Tous X. (FX -> X) -> T -> X

fold = \ X. \ k: FX -> X. \ t: T. t X k

dans: FT -> T

dans = \ s: F T. \ X. \ k: FX -> X. k (F (pli X k) s).

(Où T est Lfix X.F X.)

Il est trivial d'écrire le foldfonctionner comme indiqué. Mais en essayant d'écrire leinfonction, il ne semble pas typecheck. L'expression(fold X k) a un type TX, et (F (fold X k) s) devrait être de type F X. Ensuite, nous déduisons queF devrait être de type (TX)F TF X(ressemble à un fmap). Cela ne vérifie pas le type, car il Fs'agit d'un constructeur de type (de type).

Cela ne ressemble pas à une faute de frappe ... manque-t-il quelque chose?

paulotorrens
la source

Réponses:

7

Il existe une convention dans la théorie des catégories selon laquelle le même symbole est utilisé pour un constructeur de type et la fonction map sur ce constructeur de type. Par conséquent, si f: X -> Y alors F f: FX -> F Y.

Philip Wadler
la source
C'est donc bien un fmap! Je n'ai aucune expérience de la théorie des catégories, mais j'ai trouvé cela il y a environ 10 minutes sur "Une note sur les types de données catégoriques" (GC Wralth). J'étais maintenant capable d'écrire la fonction correcte, fonctionnait comme un charme. Merci beaucoup, dr. Wadler! : D
paulotorrens