Ist es möglich, 'min' in eine normalisierende Theorie wie System-F oder den Kalkül von Konstruktionen einzugeben?

9

Diese min -Definition arbeitet an zwei Kirchennummern und gibt am wenigsten groß aus. Jede Zahl wird zu einer Fortsetzung, die ihr pred zum anderen schickt, zig und zag, bis Null erreicht ist. Darüber hinaus hängt eine der Zahlen jedes Mal, wenn f aufgerufen wird, f an das Ergebnis an, so dass am Ende (\ f x -> f (... (f (f x)) ...)) steht, wobei die Anzahl der fs auf der rechten Seite die Häufigkeit ist, mit der die erste Fortsetzung aufgerufen wurde.

%Vor%

Es scheint, als ob min nicht in System-F eingegeben werden kann. Um es beispielsweise auf GHC auszuführen, musste ich unsafeCoerce zweimal verwenden:

%Vor%

Ist es möglich, min auf System-F (oder den Kalkül von Konstruktionen) einzugeben?

    
MaiaVictor 18.11.2015, 19:26
quelle

1 Antwort

3

Die Funktion (ist es bekannt? Es sieht wirklich schlau aus) ist typisierbar, es funktioniert einfach nicht mit Church-encoded nats.

Hier ist der Typ, den GHC leitet:

%Vor%

Hier kommt der gewünschte Typ am nächsten:

%Vor%

Um mit Church-encoded nats min zu arbeiten, müssen zwei Argumente vom Typ (a -> a) -> a -> a akzeptiert werden, d. h. A muss vom Typ a -> a sein, d. h.

%Vor%

d. t2 ~ (t2 -> t1) -> t1 , was eine Schleife ist. Es gibt keine rekursiven Typen in System F oder CoC und daher ist der Begriff nicht typisierbar.

Allerdings habe ich das Rank2Types Zeug ignoriert. Wie auch immer,

%Vor%

ist ebenfalls ein Fehler vom Typ unendlich.

    
user3237465 19.11.2015 10:44
quelle