バイナリ関数の継続受け渡し変換


13

リコールとる(CPS変換)変換通過継続AにβA:=RRA(固定され)、とによって定義 実際、単位を持つ継続モナドがあり定義され 及び乗算によって定義 F :A → B β F :β A → β B βRf:A→Bβf:βA→βB

βfκr:=κ(r∘f)。
η A X := λ R 。rηA:A→βAμ A:β (β A )→ β A μ A
ηAバツ:=λr。rバツ
μA:β(βA)→βA
μAKr:=K(λf。fr)。

ここで、バイナリマップf:A \ to B \ to Cを変換する方法について考えてみましょう。f:A→B→Cつまり、γf:βA→βB→βCです。一つはすぐに思い付く

γfκνr:=κ(λx.β(fx)νr).
これは、プログラミングの観点からも理にかなっています。

ここに私の質問があります:γには、プログラミングの観点から見て正しいという以外に、より深い理由がありますか?たとえば、γが理にかなっていると考えるためのカテゴリ理論的またはその他の「理論的」な理由はありますか?たとえば、体系的な方法でモナドから\ gammaを作成できますγか?

関数のCPS変換についての洞察を探しています。n


2
HaskellのliftM2一般化を超えた何かをお探しApplicativeですか?継続適用構造から、記述したもののn項バージョンを(n項多相関数について話すことができる言語で)直接導出できます。
— コパンプキン

1
私はこれらの一般化の書き方を知っています。なぜそうなのかを知りたいのです。カテゴリー理論家は私が尋ねていることを理解するでしょう。
— アンドレイバウアー

1
うーん、指摘してくれてありがとうApplicative。それは持っているliftA2私である、参照hackage.haskell.org/packages/archive/base/4.2.0.0/doc/html/...γ
— アンドレイ・バウアー

3
ええ、liftA2私が提案していたことの一部でした。「イディオムブラケット」の概念(に(| f x y z ... |)変換pure f <*> x <*> y <*> z <*> ...)Applicativeは、質問のn項形式を取得する体系的な方法のようです。私はCTを知っていますが、標準的なプログラミング用語でそれについて話すのが最も簡単に思えました。Applicative以前に出会ったことがない場合は、緩いモノイダルファンクターを調べてください(Haskellのステートメントに<*>は指数関数も含まれます)。とにかく、私はあなたのために答えを持っていませんが、あなたが何を得ているのかをより良く理解しようとしていました:)
— コパンプキン

2
Hayo Thieleckeの博士論文は、CPSのカテゴリ構造に基づいています。たぶん答えはそこにあるか、彼の他の出版物にあります。cs.bham.ac.uk/~hxt/research/hayo-thielecke-publications.shtml
— デイブクラーク

回答:


7

私はこの質問への答えを見てきた最も近い最初の1コマであるドクターMellièsのギャラリー、 ~~ A * ~~ B |-~~(A * B) マップを示す これは、任意のダイアログカテゴリ(つまり、固定オブジェクトへのクロージャを持つモノイドカテゴリ)に存在します。一般的なバイナリ関数の左から右へのCPS変換は、このマップを適用してから、二重否定モナドの関数アクションで構成することになります。

¬¬A⊗¬¬B⟶¬¬(A⊗B)

この図は、基本的に文字列図の標準的な規則に従います(制御の流れを示すことを目的としたワイヤの分極を調整します)。特に、マップは3つのステップで構成されます。否定自己付加から誘導されるモナドの強さ()を2回適用し、次に付加のコユニット()を適用します。この抽象化のレベルでは、派生は強力なモナドを生じさせる任意の付属語の一般的なものであり、その後、Mellièsが書いたそのような付属語のより抽象的な特徴づけを求めることができます。εκ∧ϵ


4

Noamの答えの拡大:

f:A→B→Cあなたはncあなたはrry(f):A×B→CTdblstr:TA×TB→T(A×B)

TA×TB→dblstrT(A×B)→あなたはncあなたはrry(f)TC

これを継続モナドにインスタンス化すると、構築が得られます。

n

πnπstrπ:TA1×⋯×TAn→T(A1×⋯×An)nf:A1×⋯×An→Cγf:TA1×⋯×TAn→strπT(A1×⋯×An)→TfTC

しかし、これはあなたが探している答えを本当にあなたに与えるとは思わない...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.