Kontynuacja przejścia transformacji funkcji binarnych

13

Przypomnijmy transformację przechodzącą kontynuację (transformacja CPS), która przyjmuje do β A : = R R A (gdzie R jest ustalone) if : A B do β f : β A β B zdefiniowane przez βAβA:=RRARf:ABβf:βAβB W rzeczywistości mamymonadę kontynuacyjnąz jednostką η A : A β A zdefiniowaną przez η A x : = λ r . r

βfκr:=κ(rf).
ηA:AβA i mnożenie μ A : β ( β A ) β A zdefiniowane przez μ A
ηAx:=λr.rx
μA:β(βA)βA
μAKr:=K(λf.fr).

Teraz zastanówmy się w jaki sposób możemy przekształcić binarne mapa , czyli chcemy y f : p A beta B p C . Szybko pojawia się γf:ABCγf:βAβBβC Ma to również sens z punktu widzenia programowania.

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

Oto moje pytanie: czy istnieje głębszy powód , inny niż fakt, że wygląda to właściwie z punktu widzenia programowania? Na przykład, czy istnieje uzasadnienie teoretyczne lub inne „teoretyczne” powody, by sądzić, że γ ma sens? Na przykład, czy możemy ugotować γ z monady w systematyczny sposób?γγγ

Szukam wglądu w transformacje CPS elementowych funkcji.n

Andrej Bauer
źródło
2
Szukasz czegoś poza Haskellem liftM2lub uogólnieniami Applicative? Możesz uzyskać n-aryjską wersję tego, co opisujesz (w języku, który pozwala mówić o n-ary funkcjach polimorficznych) bezpośrednio ze struktury aplikacyjnej kontynuacji.
copumpkin
1
Wiem, jak napisać te uogólnienia, chcę wiedzieć, dlaczego takie są. Teoretycy kategorii zrozumieją, o co proszę.
Andrej Bauer,
1
ApplicativeliftA2γ
3
Tak, liftA2było częścią tego, co sugerowałem. Pojęcie „idiom nawias” ( (| f x y z ... |)przekłada się na pure f <*> x <*> y <*> z <*> ...) Applicativewydaje się systematycznym sposobem na uzyskanie n-arytycznej formy twojego pytania. Znam CT, ale wydawało się, że najłatwiej jest o tym mówić w standardowych terminach programowania. Jeśli jeszcze tego nie spotkałeś Applicative, możesz przyjrzeć się luźnym funktorom monoidalnym (chociaż wypowiedź Haskella o tym <*>zawiera również wykładnicze). W każdym razie nie mam dla ciebie odpowiedzi, ale starałem się lepiej zrozumieć, o co ci chodzi :)
copumpkin
2
Praca doktorska Hayo Thielecke dotyczy kategorycznej struktury CPS. Może odpowiedź leży tam lub w innych jego publikacjach. cs.bham.ac.uk/~hxt/research/hayo-thielecke-publications.shtml
Dave Clarke

Odpowiedzi:

7

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

¬¬A¬¬B¬¬(AB)

κϵ

Noam Zeilberger
źródło
4

Zwiększenie odpowiedzi Noama:

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

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

Jeśli utworzymy instancję monady kontynuacyjnej, uzyskamy twoją konstrukcję.

n

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

Ale nadal nie sądzę, że to naprawdę daje odpowiedź, której szukasz ...

Ohad Kammar
źródło