通過this question和this blog post的閱讀讓我思考更多關於類型代數,特別是如何濫用它。類型代數和Knuth的向上箭頭符號
基本上,
1),我們可以認爲Either A B
類型添加量:A+B
2),我們可以認爲有序對(A,B)
的乘法:A*B
3)我們可以認爲的函數A -> B
指數:B^A
這裏有一個明顯的模式:Multiplicat離子是重複加法,並且指數是重複乘法。這導致Knuth to define the up arrow↑作爲指數,↑↑作爲重複指數,↑↑↑作爲重複的↑↑,等等。因此,10↑↑↑↑10是一個很大的數字。
我的問題是:如何能在功能↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑代數數據 類型來表示?看起來↑應該是一個具有無限多個參數的函數,但這沒有多大意義。 A↑B
只是[A] -> B
,因此A↑↑↑↑B
是[[[[A]]]]->B
?
獎勵積分,如果你可以解釋Ackerman function看起來像什麼,或者其他hypergrowth functions。
我不認爲這是可以做到以一種真正的規範的方式。用'x-> a'來識別'aˣ'已經有點臨時性了,而只有_happens_在'aˣˣʸ'和'aˣ+aʸ'以及'aˣʸ'和'(aˣ)ʸ'之間同構。但是這些同構並不完全是規範的。 – leftaroundabout