Transformação de passagem contínua de funções binárias


13

Lembre-se da transformação de passagem de continuação (transformação CPS) que leva para β A : = R R A (onde R é fixo) ef : A → B para β f : β A → β B definida por βUMAβUMA:=RRUMARf:UMA→Bβf:βUMA→βB De fato, temos amônada de continuaçãocom a unidade η A : A → β A definida por η A x : = λ r . r

βfκr:=κ(r∘f).
ηUMA:UMA→βUMA e a multiplicação μ A : β ( β A ) → β A definida por μ A
ηUMAx:=λr.rx
μUMA:β(βUMA)→βUMA
μUMAKr:=K(λf.fr).

Agora vamos pensar sobre como podemos transformar um binário mapa , ou seja, queremos γ f : β A → β B → β C . Um rapidamente aparece com γf:UMA→B→Cγf:βUMA→βB→βC Isso também faz sentido do ponto de vista da programação.

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

Aqui está minha pergunta: existe uma razão mais profunda para , além do fato de parecer correto do ponto de vista da programação? Por exemplo, existe uma razão teórica por categoria ou outra razão "teórica" ​​para pensar que γ faz sentido? Por exemplo, podemos preparar γ da mônada de maneira sistemática?γγγ

Eu estou procurando uma visão sobre transformações CPS de funções.n


2
Você está procurando algo além de Haskell liftM2ou generalizações Applicative? Você pode derivar uma versão n-ária do que descreve (em um idioma que permite falar sobre funções polimórficas n-árias) diretamente da estrutura do aplicativo de continuação.
— Copumpkin

1
Eu sei como escrever essas generalizações, quero saber por que elas são assim. Os teóricos das categorias entenderão o que estou perguntando.
— Andrej Bauer

1
Hmm, obrigado por apontar Applicative. Possui liftA2qual é o meu , consulte hackage.haskell.org/packages/archive/base/4.2.0.0/doc/html/…γ
— Andrej Bauer

3
Sim, liftA2fazia parte do que eu estava sugerindo. A noção de "suporte de idioma" ( (| f x y z ... |)traduz para pure f <*> x <*> y <*> z <*> ...) de Applicativeparece ser a maneira sistemática de obter a forma n-ária da sua pergunta. Eu conheço o CT, mas parecia mais simples falar sobre isso em termos de programação padrão. Se você não se deparou Applicativeantes, pode querer olhar para os funcionadores monoidais relaxados (embora a declaração de Haskell sobre isso <*>envolva exponenciais também). Enfim, eu não tenho uma resposta para você, mas estava tentando entender melhor o que estava recebendo :)
— copumpkin

2
A tese de doutorado de Hayo Thielecke é sobre a estrutura categórica do CPS. Talvez a resposta esteja lá ou em suas outras publicações. cs.bham.ac.uk/~hxt/research/hayo-thielecke-publications.shtml
— Dave Clarke

Respostas:


7

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

¬¬UMA⊗¬¬B⟶¬¬(UMA⊗B)

κ∧ϵ


4

Aumentando a resposta de Noam:

f:UMA→B→Cvocêncvocêrry(f):UMA×B→CTdbeustr:TUMA×TB→T(UMA×B)

TUMA×TB→dbeustrT(UMA×B)→vocêncvocêrry(f)TC

Se instanciamos isso na mônada de continuação, obtemos sua construção.

n

πnπstrπ:TUMA1×⋯×TUMAn→T(UMA1×⋯×UMAn)nf:UMA1×⋯×UMAn→Cγf:TUMA1×⋯×TUMAn→strπT(UMA1×⋯×UMAn)→TfTC

Mas ainda não acho que isso realmente lhe dê a resposta que você está procurando ...

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.