İkili fonksiyonların sürekli geçiş dönüşümü


13

Alır (CPS dönüşümü) dönüşümü devam geçen hatırlayın için p A : = R ' R' bir (ki burada R ' sabitlenmiştir) ve f : A B için β f : β bir β B ile tanımlanan pAβA:=RRARf:ABβf:βAβB Aslında η A : A β A birimi η A x : = λ r ile tanımlanan devam monadımızvar . r

βfκr:=κ(rf).
ηA:AβA ve μ A çarpımı : β ( β A ) β A μ A ile tanımlanır
ηAx:=λr.rx
μA:β(βA)βA
μAKr:=K(λf.fr).

Şimdi bir ikili haritayı nasıl dönüştürebileceğimizi düşünelim , yani γ f : β A β B β C istiyoruz . Biri çabucak gelir γf:ABCγf:βAβBβC Bu da programlama açısından anlamlıdır.

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

İşte sorum: için programlama açısından doğru görünmesinin dışında daha derin bir neden var mı? Örneğin, γ mantıklı düşünmenin bir kategori-teorik veya başka bir "teorik" nedeni var mı? Örneğin , monad'dan sistematik bir şekilde γ pişirebilir miyiz ?γγγ

Ben -ary fonksiyonların CPS dönüşümleri hakkında bir fikir arıyorum .n


2
Haskell'in liftM2veya genellemelerin ötesinde bir şey mi arıyorsunuz Applicative? Açıkladığınız şeyin n-ary sürümünü (n-ary polimorfik fonksiyonlar hakkında konuşmanızı sağlayan bir dilde) doğrudan devam eden uygulama yapısından türetebilirsiniz.
copumpkin

1
Bu genellemeleri nasıl yazacağımı biliyorum, neden böyle olduklarını bilmek istiyorum. Kategori teorisyenleri ne istediğimi anlayacaklar.
Andrej Bauer

1
ApplicativeliftA2γ

3
Evet, liftA2önerdiğim şeyin bir parçasıydı. Buradaki "deyim parantez" kavramı ( (| f x y z ... |)çevirir pure f <*> x <*> y <*> z <*> ...) Applicative, sorunuzun n-ary biçimini almanın sistematik bir yolu gibi görünür. BT'yi biliyorum, ancak standart programlama terimleriyle konuşmak en basit gibi görünüyordu. Daha Applicativeönce karşılaşmamış olsaydınız, gevşek monoidal functorlara bakmak isteyebilirsiniz (Haskell'in bunun ifadesi <*>katlanarak da olsa). Her neyse, senin için bir cevabım yok ama ne elde ettiğini daha iyi anlamaya çalışıyordum :)
copumpkin

2
Hayo Thielecke'nin doktora tezi CPS'nin kategorik yapısı üzerindedir. Belki cevap orada ya da diğer yayınlarındadır. cs.bham.ac.uk/~hxt/research/hayo-thielecke-publications.shtml
Dave Clarke

Yanıtlar:


7

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

¬¬A¬¬B¬¬(AB)

κϵ


4

Noam'ın cevabını arttırmak:

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

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

Bunu devam eden monad'a başlatırsak, inşaatınızı elde ederiz.

n

πnπstrπ:TA1××TAnT(A1××An)nf:A1××AnCγf:TA1××TAnstrπT(A1××An)TfTC

Ama hala bunun gerçekten aradığınız cevabı verdiğini sanmıyorum ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.