yoneda lemma和CPS的關係是什麼

時間 2021-05-05 15:55:46

1樓:腳趾頭

CPS是一種顯式管理控制流的編碼形式,呼叫callback代替函式返回:

function

foo()

// ->

function

foo(k)

從型別上觀察既是將型別 當作型別 使用,其中 部分就叫做continuation。原則上相互等價的型別是可以相互代替的,甚至激進地把它倆就看作是同乙個東西(因為性質完全一樣)。

但你不能說它倆等價就等價,這需要證明。

yoneda lemma:對於範疇 ,函子 ,以及 上的物件 ,對映 是乙個雙射。

其中 稱為yoneda embedding,在函子範疇中找乙個 的表示(representation)。(注意對偶的關係)

yoneda lemma裡如取 ,直觀解釋就是:把 範疇變換至 後結構不發生改變。這裡有個說法:y是faithful的。

我們可以用yoneda lemma證明CPS與直接形式是等價的,不過這有個前提, 範疇是乙個 範疇,這確保了yoneda lemma的成立。

用haskell來描述yoneda lemma:

type

Natfg=

foralla.

fa->ga

type

Homab=

a->b-- 省略了newtype

psi::

Functor

f=>Nat(

Homa)f

->fa

psiphi

=phi(id

)phi

::Functor

f=>fa

->Nat(

Homa)f

phix=\

f->fmapfx

-- phi . psi === id

-- psi . phi === id

取f為單位函子,即有forall r. (a -> r) -> r與a等價(集合上就是一一對應)。其中continuationa->r恰好就是在函子範疇中a 的表示(但注意對偶的關係)。

其實後者我覺得或許並不太重要。。。

雖然forall r. (a -> r) -> r和a的等價,但前者有乙個自由的r,可以對其動手腳。比如改成Monad m => forall r.

(a -> m r) -> m r, 這限制了原來r的範圍——我們可以得到乙個ContT(當作delimited continuation來用),或者當作乙個Free Monad來使用。 但已經變不回原來的a了。

2樓:Jason Hu

瀉藥,好久沒在知乎答題。我在上個學期寫了一小篇discussion解釋了如何做CPS transformation。我在這裡也解釋一下這個及其和Yoneda embedding的關係。

CPS

首先我們只考慮ANF的程式。ANF(Administrative Normal Form)是一種簡單的程式表達形式,其BNF為

E := V | let x = V in E | let x = V ... V in E

V := x | fn x => E

乙個ANF程式的語法符合E。簡單地說,ANF的程式沒有複雜巢狀的表示式。比方說

f (g x) (h y) z

轉化為let v0 = g x in

let v1 = h y in

let v2 = f v0 v1 z in

v2然後我們轉化這段程式為CPS形式。我們假設這裡CPS形式的f ,g,h分別為f',g',h'。那麼我們把let移動到fn裡就可以的到CPS形式:

g' x (fn v0 =>

h' y (fn v1 =>

f' v0 v1 z (fn v2 =>

v2)))

在ANF中,我們把函式的返回值賦予到了let的變數中。而在CPS中,返回值是通過函式引數傳入的。可見,CPS不過是一種語法變換的形式。

對於乙個函式應用f x,我們可以定義其CPS形式為

f' x k = k (f x)

相對的,給定f',我們可以定義

f x = f' x (fn v => v)

也就是說,任何程式都有對應其CPS程式;任何CPS程式都有其一般形式。

The Yoneda Embedding

CPS是Yoneda的特殊情況。一般情況下,對於某個category , the Yoneda embedding是

the Yoneda lemma是對於

並且這個isomorphism是natural in 和 。

如果我們設定 為 ,那麼我們有the coYoneda lemma:

根據free lemma,polymorphic calculus的polymorphic function必然是natural,所以我們可以從這個lemma寫成兩個函式:

這才是可以從Yoneda中提取的最一般的形式。給定 , 我們可以令

從而得到CPS的特殊形式:

這兩個函式給出了如何在一般程式和CPS之間轉換。

再假定兩個函式 ,根據Yoneda,我們可以得出以下等式

並且如果你對比這兩個等式和上面的CPS給出的等式,你可以看出這兩組等式是對應的。

另外值得指出的是,這裡給出的CPS是最一般的形式,並不是其他更高階的CPS(如delimited CPS, etc.)

CPM 過渡到 CPC,360 現在又再推 CPS,CPS 會革了 CPC 的命麼?

丁丁蘯 我倒覺得會,先談談網際網路廣告的本質,網際網路廣告的本質就是效果,只有轉化才能稱之為價值,那麼看現在的網際網路廣告市場基本被三巨頭壟斷了,但BAT三巨頭大都是平台思維,廣告主對自己廣告費的控制權是極其有限的,說白了就是,我想讓你有轉化,你就有轉化,是黑箱。這種模式當然不會長久,也不利於你的推...

區別不了an和ang,en和eng,in和ing怎麼辦?

Kai Yung 先誇張地練習,把前鼻音發得更靠前,後鼻音發得更靠後,找到感覺再字正腔圓地加入聲調與聲母 抱歉。我讀著怪怪的 最後再用含有前後鼻音的句子 好久沒持續使用普通話交流超過3分鐘了。都生疏了。隨緣吧 上次長時間用普通話交流,也不過是有個外地人初到深圳問路罷了。大概就這樣發音,反正這樣發音不...

請問on the table 和at risk和in his pocket是賓補?雙賓?狀語 為什麼?

l origine 根據 張道真實用英語語法 的 1.3.2 可知 賓語即動作的承受者,或動作的結果。根據 張道真實用英語語法 的 21.1.1 可知 賓語分為直接賓語 間接賓語 復合賓語 帶有補語的賓語,也叫做賓補 三種。根據 張道真實用英語語法 的 21.2.1 可知 復合賓語 賓補 的第五種的...