Codifica di tipo ricorsiva su Sistema F (e altri sistemi di tipo puro)


8

Sto studiando sistemi di tipo puro, in particolare il calcolo delle costruzioni, e sto provando a utilizzare una codifica per tipi ricorsivi su di esso, che, secondo Philip Wadler, è possibile . Ad esempio, sto usando la libreria Morte Haskell per codificare i numeri di Scott forniti da Cardelli .

Un riassunto della codifica è come tale: dato un tipo ricorsivo (positivo) ...

μX.F X

... possiamo codificarlo come tipo sul Sistema F come ...

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

... oppure, usando la notazione di sistemi di tipo puro (con una esplicita ) ...F

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

... poiché è un costruttore di tipi ( è il tipo di tipi).F

Per codificare tale, dobbiamo dichiarare tre funzioni, , e , secondo Wadler, e usato da Cardelli nella codifica per i numeri di Scott.foldinout

fold: All X. (FX -> X) -> T -> X

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

in: FT -> T

in = \ s: F T. \ X. \ k: FX -> X. k (F (piega X k) s).

(Dove è )TLfix X.F X

È banale scrivere la funzione di come indicato. Ma quando si cerca di scrivere la funzione, non sembra TYPECHECK. L'espressione ha tipo , e dovrebbe essere di tipo . Quindi deduciamo che dovrebbe essere di tipo (sembra una ). Questo non viene controllato, perché è un costruttore di tipo (di tipo ).foldin(fold X k)TX(F (fold X k) s)F XF(TX)F TF XfmapF

Questo non sembra un refuso ... mi sto perdendo qualcosa?

Risposte:


7

Esiste una convenzione nella teoria delle categorie secondo cui lo stesso simbolo viene utilizzato per un costruttore di tipi e la funzione della mappa su tale costruttore di tipi. Quindi, se f: X -> Y quindi F f: FX -> F Y.


Quindi è davvero un fmap! Non ho avuto esperienza sulla teoria delle categorie, ma in realtà l'ho scoperto circa 10 minuti fa su "Una nota sui tipi di dati categorici" (GC Wralth). Ora sono stato in grado di scrivere la funzione corretta, ha funzionato come un incantesimo. Grazie mille, dott. Wadler! : D
paulotorrens,
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.