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


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)

κϵ


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...

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.