Rekursive Typcodierung auf System F (und anderen reinen Typsystemen)

8

Ich studiere reine Typensysteme, insbesondere die Berechnung von Konstruktionen, und versuche, eine Codierung für rekursive Typen darauf zu verwenden, was laut Philip Wadler möglich ist . Als Beispiel verwende ich die Morte Haskell-Bibliothek , um Scott-Ziffern zu codieren, wie sie von Cardelli angegeben wurden .

Eine Zusammenfassung der Codierung lautet als solche: bei einem (positiven) rekursiven Typ ...

μX.F X

... wir können es als Typ auf System F codieren als ...

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

... oder unter Verwendung der Notation von reinen Typsystemen (mit einem expliziten ) ...F

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

... da ein Typkonstruktor ist ( ist der Typ der Typen).F

Um eine solche zu kodieren, müssen wir drei Funktionen erklären, , und , nach Wadler und durch Cardelli auf der Codierung für Scott Zeichen verwendet.foldinout

Falz: Alle 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 (Falte X k) s).

(Wo ist .)TLfix X.F X

Es ist trivial, die wie angegeben zu schreiben . Aber wenn versucht wird, die Funktion zu schreiben , scheint sie nicht typecheck zu sein. Der Ausdruck hat den Typ , und sollte vom Typ . Dann schließen wir, dass vom Typ (sieht aus wie a ). Dies ist keine Typprüfung, da es sich um einen Typkonstruktor handelt (vom Typ ).foldin(fold X k)TX(F (fold X k) s)F XF(TX)F TF XfmapF

Das sieht nicht nach einem Tippfehler aus ... vermisse ich etwas?

Paulotorrens
quelle

Antworten:

7

In der Kategorietheorie gibt es eine Konvention, dass dasselbe Symbol für einen Typkonstruktor und die Kartenfunktion über diesem Typkonstruktor verwendet wird. Wenn also f: X -> Y, dann F f: FX -> F Y.

Philip Wadler
quelle
Also ist es in der Tat ein fmap! Ich habe keine Erfahrung mit Kategorietheorie, aber das habe ich tatsächlich vor ungefähr 10 Minuten bei "A note on Categorical Datatypes" (GC Wralth) gefunden. Ich konnte jetzt die richtige Funktion schreiben, arbeitete wie ein Zauber. Vielen Dank, Dr. Wadler! : D
Paulotorrens