Transformasi kelanjutan dari fungsi biner

13

Ingat transformasi passing lanjutan (transformasi CPS) yang membawa A ke βA:=RRA (di mana R adalah tetap) dan f:AB ke βf:βAβB didefinisikan oleh Sebenarnya kita memilikikelanjutan monaddengan satuan η A : A β A yang didefinisikan oleh η A x : = λ r . r

βfκr:=κ(rf).
ηA:AβA dan perkalian μ A : β ( β A ) β A didefinisikan oleh μ A
ηAx:=λr.rx
μA:β(βA)βA
μAKr:=K(λf.fr).

Sekarang mari kita berpikir tentang bagaimana kita dapat mengubah peta biner , yaitu, kita ingin γ f : β Af:ABC . Seseorang dengan cepat menghasilkan γγf:βAβBβC Ini masuk akal dari sudut pandang pemrograman juga.

γfκνr:=κ(λx.β(fx)νr).

Inilah pertanyaan saya: apakah ada alasan yang lebih dalam untuk , selain fakta bahwa itu terlihat benar dari sudut pandang pemrograman? Misalnya, apakah ada alasan kategori-teoretis atau "teoretis" lainnya untuk berpikir seperti ituγ masuk akal? Misalnya, bisakah kita memasak γ dari monad secara sistematis?γγ

Saya mencari wawasan tentang transformasi CPS fungsi n -ary.n

Andrej Bauer
sumber
2
Apakah Anda mencari sesuatu di luar Haskell liftM2atau generalisasi Applicative? Anda dapat memperoleh versi n-ary dari apa yang Anda gambarkan (dalam bahasa yang memungkinkan Anda berbicara tentang fungsi polimorfik n-ary) langsung dari struktur aplikasi lanjutan.
copumpkin
1
Saya tahu bagaimana menulis generalisasi ini, saya ingin tahu mengapa mereka seperti itu. Ahli teori kategori akan mengerti apa yang saya tanyakan.
Andrej Bauer
1
Hmm, terima kasih sudah menunjukkan Applicative. Memiliki liftA2yang saya , lihat hackage.haskell.org/packages/archive/base/4.2.0.0/doc/html/...γ
Andrej Bauer
3
Ya, liftA2adalah bagian dari apa yang saya sarankan. Gagasan "idiom bracket" ( (| f x y z ... |)diterjemahkan pure f <*> x <*> y <*> z <*> ...dari) Applicativesepertinya cara sistematis untuk mendapatkan bentuk n-ary dari pertanyaan Anda. Saya tahu CT, tetapi sepertinya paling sederhana untuk membicarakannya dalam istilah pemrograman standar. Jika Anda belum pernah menemukan Applicativesebelumnya, Anda mungkin ingin melihat fungsi-fungsi monoid longgar (meskipun pernyataan Haskell tentang itu <*>melibatkan eksponensial juga). Lagi pula, saya tidak punya jawaban untuk Anda tetapi berusaha untuk lebih memahami apa yang Anda
maksudkan
2
Tesis PhD Hayo Thielecke adalah tentang struktur kategorikal CPS. Mungkin jawabannya ada di sana atau di publikasi lainnya. cs.bham.ac.uk/~hxt/research/hayo-thielecke-publications.shtml
Dave Clarke

Jawaban:

7

~~A * ~~B |- ~~(A * B)

¬¬A¬¬B¬¬(AB)

κϵ

Noam Zeilberger
sumber
4

Menambah jawaban Noam:

f:ABCuncurry(f):A×BCTdblstr:TA×TBT(A×B) .

TA×TBdblstrT(A×B)uncurry(f)TC

Jika kami instantiate ini ke kelanjutan monad, kami mendapatkan konstruksi Anda.

n -variables, berikut ini harus berfungsi (saya tidak memeriksa semua detail melalui).

πnπstrπ:TA1××TAnT(A1××An). (The monad laws should guarantee that it doesn't matter how we associate this permutation.) Therefore, for every n-ary morphism f:A1××AnC, we can construct: γf:TA1××TAnstrπT(A1××An)TfTC.

But I still don't think this really gives you the answer you're looking for...

Ohad Kammar
sumber